def test_basic_hourly(input_df, mock_isd_weather_source): m = HourlyLoadProfileModel(fit_cdd=True) assert str(m).startswith("HourlyLoadProfileModel") assert m.n is None assert m.params is None assert m.r2 is None assert m.rmse is None assert m.y is None output = m.fit(input_df) assert "r2" in output assert "rmse" in output assert "cvrmse" in output assert "model_params" in output assert "n" in output assert 'formula' in m.params assert 'X_design_info' in m.params index = pd.date_range('2011-01-01', freq='H', periods=365 * 24, tz=pytz.UTC) formatter = ModelDataFormatter("H") formatted_predict_data = formatter.create_demand_fixture( index, mock_isd_weather_source) outputs, variance = m.predict(formatted_predict_data, summed=False) assert outputs.shape == (365 * 24, ) assert all(variance > 0) outputs, variance = m.predict(formatted_predict_data, summed=True) assert outputs > 0 assert variance > 0
def test_basic_hourly_to_daily(hourly_trace, mock_isd_weather_source): mdf = ModelDataFormatter("D") df = mdf.create_input(hourly_trace, mock_isd_weather_source) assert all(df.columns == ["energy", "tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index.freq == 'D' assert_allclose(df.energy, [2]) assert_allclose(df.tempF, [35.507344])
def test_basic_hourly_to_daily(hourly_trace, mock_isd_weather_source): mdf = ModelDataFormatter("D") df = mdf.create_input(hourly_trace, mock_isd_weather_source) assert all(df.columns == ["energy", "tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index.freq == 'D' assert_allclose(df.energy, [2]) assert_allclose(df.tempF, [32.])
def test_basic_15min_to_daily(fifteen_min_trace, mock_isd_weather_source): mdf = ModelDataFormatter("D") df = mdf.create_input(fifteen_min_trace, mock_isd_weather_source) assert all(df.columns == ["energy", "tempF"]) assert df.index[0] == datetime(2011, 1, 1, 0, tzinfo=pytz.UTC) assert df.index.freq == 'D' assert df.energy.shape == (100, ) assert df.tempF.shape == (100, )
def test_daily_demand_fixture(daily_trace, mock_isd_weather_source): mdf = ModelDataFormatter("D") df = mdf.create_demand_fixture(daily_trace.data.index, mock_isd_weather_source) assert all(df.columns == ["tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index[2] == datetime(2000, 1, 3, tzinfo=pytz.UTC) assert df.index.freq == 'D' assert_allclose(df.tempF, [35.507344, 35.282373, 35.064391])
def test_hourly_demand_fixture(hourly_trace, monkeypatch_temperature_data, mock_isd_weather_source): mdf = ModelDataFormatter("H") df = mdf.create_demand_fixture(hourly_trace.data.index, mock_isd_weather_source) assert all(df.columns == ["tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index[2] == datetime(2000, 1, 1, 2, tzinfo=pytz.UTC) assert df.index.freq == 'H' assert_allclose(df.tempF, [35.617314, 35.607664, 35.598025])
def test_hourly_demand_fixture(hourly_trace, mock_isd_weather_source): mdf = ModelDataFormatter("H") df = mdf.create_demand_fixture(hourly_trace.data.index, mock_isd_weather_source) assert all(df.columns == ["tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index[2] == datetime(2000, 1, 1, 2, tzinfo=pytz.UTC) assert df.index.freq == 'H' assert_allclose(df.tempF, [32., 32., 32.])
def test_basic_usage(trace, modeling_period_set, monkeypatch_temperature_data, mock_isd_weather_source): # create SplitModeledEnergyTrace formatter = ModelDataFormatter('D') model_mapping = { 'modeling_period_1': SeasonalElasticNetCVModel(65, 65), 'modeling_period_2': SeasonalElasticNetCVModel(65, 65), } smet = SplitModeledEnergyTrace( trace, formatter, model_mapping, modeling_period_set) # fit normally outputs = smet.fit(mock_isd_weather_source) assert 'modeling_period_1' in smet.fit_outputs assert 'modeling_period_2' in smet.fit_outputs assert len(smet.fit_outputs) == 2 assert outputs['modeling_period_1']['status'] == 'SUCCESS' assert outputs['modeling_period_1']['start_date'] == \ datetime(2000, 1, 1, tzinfo=pytz.UTC) assert outputs['modeling_period_1']['end_date'] == \ datetime(2000, 9, 1, tzinfo=pytz.UTC) assert outputs['modeling_period_1']['n_rows'] == 245 index = pd.date_range('2001-01-01', periods=6, freq='D', tz=pytz.UTC) demand_fixture_data = \ smet.formatter.create_demand_fixture(index, mock_isd_weather_source) mp1_pred, variance = smet.predict( 'modeling_period_1', demand_fixture_data, summed=False) mp2_pred = smet.predict('modeling_period_2', demand_fixture_data) assert mp1_pred.shape == (6,) assert mp2_pred is None assert variance > 0 with pytest.raises(KeyError): smet.predict('modeling_period_3', demand_fixture_data) def callable_(formatter, model, returnme): return returnme mp1_deriv = smet.compute_derivative( 'modeling_period_1', callable_, {"returnme": "A"}) mp2_deriv = smet.compute_derivative( 'modeling_period_2', callable_, {"returnme": "A"}) assert mp1_deriv == "A" assert mp2_deriv is None pred, variance = smet.predict( 'modeling_period_1', demand_fixture_data, summed=True) # predict summed assert_allclose(pred, 6.035919) assert variance > 0 # bad weather source smet.fit(None) assert outputs['modeling_period_1']['status'] == 'FAILURE'
def test_basic_hourly(hourly_trace, mock_isd_weather_source): mdf = ModelDataFormatter("H") df = mdf.create_input(hourly_trace, mock_isd_weather_source) assert all(df.columns == ["energy", "tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index[2] == datetime(2000, 1, 1, 2, tzinfo=pytz.UTC) assert df.index.freq == 'H' assert_allclose(df.energy, [1, 1, np.nan]) assert_allclose(df.tempF, [32., 32., 32.]) description = mdf.describe_input(df) assert description.get('start_date') == \ datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert description.get('end_date') == \ datetime(2000, 1, 1, 2, tzinfo=pytz.UTC) assert description.get('n_rows') == 3
def test_basic_daily(daily_trace, monkeypatch_temperature_data, mock_isd_weather_source): mdf = ModelDataFormatter("D") df = mdf.create_input(daily_trace, mock_isd_weather_source) assert all(df.columns == ["energy", "tempF"]) assert df.index[0] == datetime(2000, 1, 1, tzinfo=pytz.UTC) assert df.index[2] == datetime(2000, 1, 3, tzinfo=pytz.UTC) assert df.index.freq == 'D' assert_allclose(df.energy, [1, 1, 0.]) assert_allclose(df.tempF, [35.507344, 35.282373, 35.064391]) description = mdf.describe_input(df) assert description.get('start_date') == \ datetime(2000, 1, 1, tzinfo=pytz.UTC) assert description.get('end_date') == \ datetime(2000, 1, 3, tzinfo=pytz.UTC) assert description.get('n_rows') == 3 missing = mdf.get_input_data_mask(df) assert missing.shape[0] == 3 assert missing.sum() == 0 daily = mdf.daily_trace_data(daily_trace) assert daily.shape[0] == 3 assert_allclose(daily_trace.data.value.sum(), daily.sum())
def test_basic_hourly(hourly_trace, monkeypatch_temperature_data, mock_isd_weather_source): mdf = ModelDataFormatter("H") df = mdf.create_input(hourly_trace, mock_isd_weather_source) assert all(df.columns == ["energy", "tempF"]) assert df.index[0] == datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert df.index[2] == datetime(2000, 1, 1, 2, tzinfo=pytz.UTC) assert df.index.freq == 'H' assert_allclose(df.energy, [1, 1, 0]) assert_allclose(df.tempF, [35.617314, 35.607664, 35.598025]) description = mdf.describe_input(df) assert description.get('start_date') == \ datetime(2000, 1, 1, 0, tzinfo=pytz.UTC) assert description.get('end_date') == \ datetime(2000, 1, 1, 2, tzinfo=pytz.UTC) assert description.get('n_rows') == 3 missing = mdf.get_input_data_mask(df) assert missing.shape == (3, ) assert sum(missing) == 0 daily = mdf.daily_trace_data(hourly_trace) assert daily.shape[0] == 1 assert_allclose(hourly_trace.data.value.sum(), daily.sum())
def split_modeled_energy_trace_daily(daily_trace, modeling_period_set, mock_isd_weather_source): # create SplitModeledEnergyTrace formatter = ModelDataFormatter('D') model_mapping = { 'modeling_period_1': SeasonalElasticNetCVModel(65, 65), 'modeling_period_2': SeasonalElasticNetCVModel(65, 65), } smet = SplitModeledEnergyTrace(daily_trace, formatter, model_mapping, modeling_period_set) smet.fit(mock_isd_weather_source) return smet
def test_bad_weather_source(trace, modeling_period_set): # create SplitModeledEnergyTrace formatter = ModelDataFormatter('D') model_mapping = { 'modeling_period_1': SeasonalElasticNetCVModel(65, 65), 'modeling_period_2': SeasonalElasticNetCVModel(65, 65), } smet = SplitModeledEnergyTrace( trace, formatter, model_mapping, modeling_period_set) # need to see that it gives a data sufficiency exception outputs = smet.fit(None) assert 'DataSufficiencyException' in outputs['modeling_period_1']['traceback'] assert 'DataSufficiencyException' in outputs['modeling_period_2']['traceback']
def test_basic_usage(mock_isd_weather_source, reporting_period_end_date, reporting_period_no_end_date): formatter = ModelDataFormatter("D") model = MockModel() output_end_date = gross_predicted(formatter, model, mock_isd_weather_source, reporting_period_end_date) output_no_end_date = gross_predicted(formatter, model, mock_isd_weather_source, reporting_period_no_end_date) assert_allclose(output_end_date['gross_predicted'], (547, 23.388031127053, 23.388031127053, 547)) assert (output_end_date['gross_predicted'][0] < output_no_end_date['gross_predicted'][0])
def input_df(monkeypatch_temperature_data, daily_trace, mock_isd_weather_source): mdf = ModelDataFormatter("D") return mdf.create_input(daily_trace, mock_isd_weather_source)
def test_empty_description(): mdf = ModelDataFormatter("H") description = mdf.describe_input(pd.DataFrame()) assert description['start_date'] is None assert description['end_date'] is None assert description['n_rows'] is 0
def input_df(mock_isd_weather_source, daily_trace): mdf = ModelDataFormatter("D") return mdf.create_input(daily_trace, mock_isd_weather_source)
def test_empty_description(): mdf = ModelDataFormatter("H") description = mdf.describe_input(pd.DataFrame()) assert description['start_date'] is None assert description['end_date'] is None assert description['n_rows'] is 0
def test_repr(): mdf = ModelDataFormatter("H") assert str(mdf) == 'ModelDataFormatter("H")'
def test_daily_to_hourly_fails(daily_trace, mock_isd_weather_source): mdf = ModelDataFormatter("H") with pytest.raises(ValueError): mdf.create_input(daily_trace, mock_isd_weather_source)
def test_daily_to_hourly_fails(daily_trace, monkeypatch_temperature_data, mock_isd_weather_source): mdf = ModelDataFormatter("H") with pytest.raises(ValueError): mdf.create_input(daily_trace, mock_isd_weather_source)
def input_df(mock_isd_weather_source, hourly_trace): mdf = ModelDataFormatter("H") return mdf.create_input(hourly_trace, mock_isd_weather_source)