Newer
Older
from typing import Literal, List
import numpy as np
# As the logic changed from revision to revision, these are solely transparent wrappers for numpy's datetime and
# timedelta conversions. These are most likely unnecessary and can be removed at a later date
def as_datetime(
date: str | np.datetime64
) -> np.datetime64:
return np.datetime64(date,'ns') if isinstance(date,str) else date
def as_timedelta(
val: int,
unit: Literal['D','W']
) -> np.timedelta64:
return np.timedelta64(val, unit)
def create_timedelta_breakpoints(
run_date: str | np.datetime64,
delta_vals: int | List[int],
delta_unit: Literal['D','W']
) -> List[np.datetime64]:
run_date = as_datetime(run_date)
return [run_date - as_timedelta(c,delta_unit) for c in delta_vals if c > 0]
def create_timedelta_labels(
delta_vals: int | List[int],
delta_unit: Literal['D','W'],
) -> List[str]:
if not isinstance(delta_vals,list):
delta_vals=[delta_vals]
delta_vals.sort(reverse=True)
deltas = [f'{d}{delta_unit}' for d in delta_vals]
if len(delta_vals) > 1:
labels = [f'>{deltas[0]}'] + [f'{deltas[i+1]}-{deltas[i]}' for i in range(len(deltas)-1)] + [f'<{deltas[-1]}']
else:
labels = [f'>{deltas[0]}'] + [f'<{deltas[0]}']
return labels