diff --git a/setup.cfg b/setup.cfg index 800ade7..37987fd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -145,6 +145,8 @@ per-file-ignores = src/urban_meal_delivery/forecasts/timify.py: # No SQL injection as the inputs come from a safe source. S608, + # The many noqa's are ok. + WPS403, tests/*.py: # Type annotations are not strictly enforced. ANN0, ANN2, diff --git a/src/urban_meal_delivery/forecasts/decomposition.py b/src/urban_meal_delivery/forecasts/decomposition.py index bf4466b..a0762d5 100644 --- a/src/urban_meal_delivery/forecasts/decomposition.py +++ b/src/urban_meal_delivery/forecasts/decomposition.py @@ -99,7 +99,7 @@ def stl( # noqa:C901,WPS210,WPS211,WPS231 if ns % 2 == 0 or ns < 7: raise ValueError('`ns` must be odd and `>= 7`') - default_nt = math.ceil((1.5 * frequency) / (1 - (1.5 / ns))) # noqa:WPS432 + default_nt = math.ceil((1.5 * frequency) / (1 - (1.5 / ns))) if nt is not None: if nt % 2 == 0 or nt < default_nt: raise ValueError( diff --git a/src/urban_meal_delivery/forecasts/timify.py b/src/urban_meal_delivery/forecasts/timify.py index 0220a58..cacee23 100644 --- a/src/urban_meal_delivery/forecasts/timify.py +++ b/src/urban_meal_delivery/forecasts/timify.py @@ -168,7 +168,7 @@ class OrderHistory: training time series, frequency, actual order count at `predict_at` Raises: - LookupError: `pixel_id` is not in the `grid` + LookupError: `pixel_id` not in `grid` or `predict_at` not in `.totals` RuntimeError: desired time series slice is not entirely in `.totals` """ try: @@ -211,6 +211,8 @@ class OrderHistory: raise RuntimeError('Not enough historic data for `predict_at`') actuals_ts = intra_pixel.loc[[predict_at], 'total_orders'] + if not len(actuals_ts): # pragma: no cover + raise LookupError('`predict_at` is not in the order history') return training_ts, frequency, actuals_ts @@ -235,7 +237,7 @@ class OrderHistory: training time series, frequency, actual order counts on `predict_day` Raises: - LookupError: `pixel_id` is not in the `grid` + LookupError: `pixel_id` not in `grid` or `predict_day` not in `.totals` RuntimeError: desired time series slice is not entirely in `.totals` """ try: @@ -295,6 +297,8 @@ class OrderHistory: first_prediction_at:last_prediction_at, # type: ignore 'total_orders', ] + if not len(actuals_ts): # pragma: no cover + raise LookupError('`predict_day` is not in the order history') return training_ts, frequency, actuals_ts @@ -319,7 +323,7 @@ class OrderHistory: training time series, frequency, actual order count at `predict_at` Raises: - LookupError: `pixel_id` is not in the `grid` + LookupError: `pixel_id` not in `grid` or `predict_at` not in `.totals` RuntimeError: desired time series slice is not entirely in `.totals` """ try: @@ -386,5 +390,7 @@ class OrderHistory: raise RuntimeError('Not enough historic data for `predict_day`') actuals_ts = intra_pixel.loc[[predict_at], 'total_orders'] + if not len(actuals_ts): # pragma: no cover + raise LookupError('`predict_at` is not in the order history') return training_ts, frequency, actuals_ts