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'
Beispiel #9
0
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())
Beispiel #12
0
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])
Beispiel #15
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)