def test_parameter_df_upsampling(model): """ Test that the `DataFrameParameter` can upsample data from a `pandas.DataFrame` and return that correctly """ # scenario indices (not used for this test) si = ScenarioIndex(0, np.array([0], dtype=np.int32)) # Use a 7 day timestep for this test and run 2015 model.timestepper.delta = datetime.timedelta(7) model.timestepper.start = pd.to_datetime('2015-01-01') model.timestepper.end = pd.to_datetime('2015-12-31') # Daily time-step index = pd.date_range('2015-01-01', periods=365, freq='D') series = pd.Series(np.arange(365), index=index) p = DataFrameParameter(model, series) p.setup() A = series.resample('7D').mean() for v, ts in zip(A, model.timestepper): np.testing.assert_allclose(p.value(ts, si), v) model.reset() # Daily time-step that requires aligning index = pd.date_range('2014-12-31', periods=366, freq='D') series = pd.Series(np.arange(366), index=index) p = DataFrameParameter(model, series) p.setup() # offset the resample appropriately for the test A = series[1:].resample('7D').mean() for v, ts in zip(A, model.timestepper): np.testing.assert_allclose(p.value(ts, si), v) model.reset() # Daily time-step that is not covering the require range index = pd.date_range('2015-02-01', periods=365, freq='D') series = pd.Series(np.arange(365), index=index) p = DataFrameParameter(model, series) with pytest.raises(ValueError): p.setup() model.reset() # Daily time-step that is not covering the require range index = pd.date_range('2014-11-01', periods=365, freq='D') series = pd.Series(np.arange(365), index=index) p = DataFrameParameter(model, series) with pytest.raises(ValueError): p.setup()
def test_parameter_df_upsampling_multiple_columns(model): """ Test that the `DataFrameParameter` works with multiple columns that map to a `Scenario` """ scA = Scenario(model, 'A', size=20) scB = Scenario(model, 'B', size=2) # scenario indices (not used for this test) # Use a 7 day timestep for this test and run 2015 model.timestepper.delta = datetime.timedelta(7) model.timestepper.start = pd.to_datetime('2015-01-01') model.timestepper.end = pd.to_datetime('2015-12-31') # Daily time-step index = pd.date_range('2015-01-01', periods=365, freq='D') df = pd.DataFrame(np.random.rand(365, 20), index=index) p = DataFrameParameter(model, df, scenario=scA) p.setup() A = df.resample('7D', axis=0).mean() for v, ts in zip(A.values, model.timestepper): np.testing.assert_allclose([ p.value(ts, ScenarioIndex(i, np.array([i], dtype=np.int32))) for i in range(20) ], v) p = DataFrameParameter(model, df, scenario=scB) with pytest.raises(ValueError): p.setup()