def test_error_band_cost_range_equiv(default_cost_err): covering = datamodel.ErrorBandCost( bands=[ datamodel.CostBand( error_range=(-2, 2), cost_function='constant', cost_function_parameters=datamodel.ConstantCost( cost=2.0, aggregation='sum', net=True ) ), datamodel.CostBand( error_range=(-np.inf, np.inf), cost_function='constant', cost_function_parameters=datamodel.ConstantCost( cost=4.0, aggregation='sum', net=False ) ) ] ) split = datamodel.ErrorBandCost( bands=[ datamodel.CostBand( error_range=(-2, 2), cost_function='constant', cost_function_parameters=datamodel.ConstantCost( cost=2.0, aggregation='sum', net=True ) ), datamodel.CostBand( error_range=(-np.inf, -2), cost_function='constant', cost_function_parameters=datamodel.ConstantCost( cost=4.0, aggregation='sum', net=False ) ), datamodel.CostBand( error_range=(2, np.inf), cost_function='constant', cost_function_parameters=datamodel.ConstantCost( cost=4.0, aggregation='sum', net=False ) ) ] ) fx = default_cost_err obs = pd.Series(0, index=fx.index) err_cov = deterministic.error_band_cost( obs, fx, covering, deterministic.error) err_split = deterministic.error_band_cost( obs, fx, split, deterministic.error) assert err_cov == err_split
def test_invalid_costband(constant_cost, datetime_cost, timeofday_cost, errorband_cost, a, b): dd = {'constant': constant_cost, 'timeofday': timeofday_cost, 'datetime': datetime_cost, 'errorband': errorband_cost} with pytest.raises(TypeError): datamodel.CostBand( error_range=(0, 2), cost_function=a, cost_function_parameters=dd[b] )
def test_error_band_cost_out_of_range(default_cost_err): params = datamodel.ErrorBandCost( bands=[datamodel.CostBand( error_range=(10, 100), cost_function='constant', cost_function_parameters=datamodel.ConstantCost( cost=2.0, aggregation='sum', net=True ) )] ) fx = default_cost_err obs = pd.Series(0, index=fx.index) err = deterministic.error_band_cost( obs, fx, params, deterministic.error) assert err == 0
def test_error_band_cost_out_of_times(default_cost_err): params = datamodel.ErrorBandCost( bands=[datamodel.CostBand( error_range=(-10, 1), cost_function='datetime', cost_function_parameters=datamodel.DatetimeCost( datetimes=[pd.Timestamp('2020-05-01T02:00-07:00')], cost=[1.0], aggregation='sum', fill='forward', net=True ) )] ) fx = default_cost_err obs = pd.Series(0, index=fx.index) err = deterministic.error_band_cost( obs, fx, params, deterministic.error) assert err == 0