def seasonal_features(cls, freq: str) -> List[TimeFeature]: offset = to_offset(freq) if offset.name == "M": return [MonthOfYear(normalized=False)] elif offset.name == "W-SUN": return [WeekOfYear(normalized=False)] elif offset.name == "D": return [DayOfWeek(normalized=False)] elif offset.name == "B": # TODO: check this case return [DayOfWeek(normalized=False)] elif offset.name == "H": return [HourOfDay(normalized=False), DayOfWeek(normalized=False)] elif offset.name == "T": return [ MinuteOfHour(normalized=False), HourOfDay(normalized=False), ] else: RuntimeError(f"Unsupported frequency {offset.name}") return []
@pytest.mark.parametrize( "feature, index", [ ( MinuteOfHour(), pd.date_range( "01-01-2015 00:00:00", periods=60 * 2 * 24, freq="1min"), ), ( HourOfDay(), pd.date_range("01-01-2015 00:00:00", periods=14 * 24, freq="1h"), ), (DayOfWeek(), pd.date_range("01-01-2015", periods=365 * 5, freq="D")), (DayOfMonth(), pd.date_range("01-01-2015", periods=365 * 5, freq="D")), (DayOfYear(), pd.date_range("01-01-2015", periods=365 * 5, freq="D")), (WeekOfYear(), pd.date_range("01-01-2015", periods=53 * 5, freq="W")), (MonthOfYear(), pd.date_range("01-01-2015", periods=12 * 5, freq="M")), (Constant(), pd.date_range("01-01-2015", periods=5, freq="A")), ], ) def test_feature_normalized_bounds(feature: TimeFeature, index: pd.DatetimeIndex): values = feature(index) assert isinstance(values, np.ndarray) for v in values: assert -0.5 <= v <= 0.5 @pytest.mark.parametrize( "feature, index, cardinality", [