def test_custom_primitive_time_as_arg(es): def time_since_last(values, time): time_since = time - values.iloc[0] return time_since.total_seconds() TimeSinceLast = make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, uses_calc_time=True) assert TimeSinceLast.name == "time_since_last" f = TimeSinceLast(es["log"]["datetime"], es["customers"]) fm = ft.calculate_feature_matrix([f], entityset=es, instance_ids=[0, 1, 2], cutoff_time=datetime(2015, 6, 8)) correct = [131376600, 131289600, 131287800] # note: must round to nearest second assert all(fm[f.get_name()].round().values == correct) error_text = "'time' is a restricted keyword. Please use a different keyword." with pytest.raises(ValueError, match=error_text): make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, uses_calc_time=False)
def test_time_since_last_custom(es): def time_since_last(values, time=None): time_since = time - values.iloc[0] return time_since.total_seconds() TimeSinceLast = make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, name="time_since_last", uses_calc_time=True) f = TimeSinceLast(es["log"]["datetime"], es["customers"]) fm = ft.calculate_feature_matrix([f], entityset=es, instance_ids=[0, 1, 2], cutoff_time=datetime(2015, 6, 8)) correct = [131376600, 131289600, 131287800] # note: must round to nearest second assert all(fm[f.get_name()].round().values == correct) error_text = "'time' is a restricted keyword. Please use a different keyword." with pytest.raises(ValueError, match=error_text): TimeSinceLast = make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, uses_calc_time=False)
def test_time_since_last_custom(es): def time_since_last(values, time=None): time_since = time - values.iloc[0] return time_since.total_seconds() TimeSinceLast = make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, name="time_since_last", uses_calc_time=True) f = TimeSinceLast(es["log"]["datetime"], es["customers"]) fm = calculate_feature_matrix([f], entityset=es, instance_ids=[0, 1, 2], cutoff_time=datetime(2015, 6, 8)) correct = [131376600, 131289600, 131287800] # note: must round to nearest second assert all(fm[f.get_name()].round().values == correct) with pytest.raises(ValueError): TimeSinceLast = make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, uses_calc_time=False)
def test_custom_primitive_time_as_arg(es): def time_since_last(values, time): time_since = time - values.iloc[0] return time_since.total_seconds() TimeSinceLast = make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, uses_calc_time=True) assert TimeSinceLast.name == "time_since_last" f = TimeSinceLast(es["log"]["datetime"], es["customers"]) fm = calculate_feature_matrix([f], entityset=es, instance_ids=[0, 1, 2], cutoff_time=datetime(2015, 6, 8)) correct = [131376600, 131289600, 131287800] # note: must round to nearest second assert all(fm[f.get_name()].round().values == correct) with pytest.raises(ValueError): make_agg_primitive(time_since_last, [DatetimeTimeIndex], Numeric, uses_calc_time=False)
def test_uses_calc_time(): primitive = TimeSinceLast() primitive_h = TimeSinceLast(unit="hours") datetimes = pd.Series([datetime(2015, 6, 6), datetime(2015, 6, 7)]) answer = 86400.0 answer_h = 24.0 assert answer == primitive(datetimes, time=datetime(2015, 6, 8)) assert answer_h == primitive_h(datetimes, time=datetime(2015, 6, 8))
def test_time_since_last(es): f = TimeSinceLast(es["log"]["datetime"], es["customers"]) fm = calculate_feature_matrix([f], instance_ids=[0, 1, 2], cutoff_time=datetime(2015, 6, 8)) correct = [131376600, 131289600, 131287800] # note: must round to nearest second assert all(fm[f.get_name()].round().values == correct)
def test_uses_calc_time(): primitive = TimeSinceLast() datetimes = pd.Series([datetime(2015, 6, 6), datetime(2015, 6, 7)]) answer = 86400.0 assert answer == primitive(datetimes, time=datetime(2015, 6, 8))