From 2bc45e34f87f127fe7c596fbed8fdd0875a33f9c Mon Sep 17 00:00:00 2001 From: Scott Staniewicz Date: Mon, 14 Oct 2024 15:07:08 -0400 Subject: [PATCH] Add `outside_input_range` options to `get_nearest_date_idx` --- src/dolphin/utils.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/dolphin/utils.py b/src/dolphin/utils.py index 4505aba1..86098de5 100644 --- a/src/dolphin/utils.py +++ b/src/dolphin/utils.py @@ -11,7 +11,7 @@ from itertools import chain from multiprocessing import cpu_count from pathlib import Path -from typing import Any, Iterable, Optional, Sequence, Union +from typing import Any, Iterable, Literal, Optional, Sequence, Union import numpy as np from numpy.typing import ArrayLike, DTypeLike @@ -695,13 +695,19 @@ def map(self, fn: Callable[P, T], *iterables, **kwargs): # noqa: D102 def get_nearest_date_idx( input_items: Sequence[datetime.datetime], requested: datetime.datetime, + outside_input_range: Literal["allow", "warn", "raise"] = "warn", ) -> int: """Find the index nearest to `requested` within `input_items`.""" sorted_inputs = sorted(input_items) if not sorted_inputs[0] <= requested <= sorted_inputs[-1]: msg = f"Requested {requested} falls outside of input range: " msg += f"{sorted_inputs[0]}, {sorted_inputs[-1]}" - raise ValueError(msg) + if outside_input_range == "raise": + raise ValueError(msg) + elif outside_input_range == "warn": + warnings.warn(msg, stacklevel=2) + else: + pass nearest_idx = min( range(len(input_items)),