Beispiel #1
0
def test_get_terms_nearest(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]
    nearest_terms = get_terms(
        meter_data.index,
        term_lengths=[365, 365],
        term_labels=["year1", "year2"],
        start=datetime(2016, 1, 15, tzinfo=pytz.UTC),
        method="nearest",
    )

    assert len(nearest_terms) == 2

    year1 = nearest_terms[0]
    assert year1.label == "year1"
    assert year1.index.shape == (13, )
    assert year1.index[0] == pd.Timestamp("2016-01-22 06:00:00+0000", tz="UTC")
    assert year1.index[-1] == pd.Timestamp("2017-01-21 06:00:00+0000",
                                           tz="UTC")
    assert (year1.target_start_date == pd.Timestamp("2016-01-15 00:00:00+0000",
                                                    tz="UTC").to_pydatetime())
    assert year1.target_term_length_days == 365
    assert year1.actual_term_length_days == 365
    assert year1.complete

    year2 = nearest_terms[1]
    assert year2.label == "year2"
    assert year2.index.shape == (13, )
    assert year2.index[0] == pd.Timestamp("2017-01-21 06:00:00+0000", tz="UTC")
    assert year2.index[-1] == pd.Timestamp("2018-01-20 06:00:00+0000",
                                           tz="UTC")
    assert year2.target_start_date == pd.Timestamp("2017-01-21 06:00:00+0000",
                                                   tz="UTC")
    assert year1.target_term_length_days == 365
    assert year2.actual_term_length_days == 364
    assert not year2.complete  # no remaining index

    # check completeness case with a shorter final term
    nearest_terms = get_terms(
        meter_data.index,
        term_lengths=[365, 340],
        term_labels=["year1", "year2"],
        start=datetime(2016, 1, 15, tzinfo=pytz.UTC),
        method="nearest",
    )
    year2 = nearest_terms[1]
    assert year2.label == "year2"
    assert year2.index.shape == (12, )
    assert year2.index[0] == pd.Timestamp("2017-01-21 06:00:00+0000", tz="UTC")
    assert year2.index[-1] == pd.Timestamp("2017-12-22 06:00:00+00:00",
                                           tz="UTC")
    assert year2.target_start_date == pd.Timestamp("2017-01-21 06:00:00+0000",
                                                   tz="UTC")
    assert year2.target_term_length_days == 340
    assert year2.actual_term_length_days == 335
    assert year2.complete  # has remaining index
Beispiel #2
0
def test_get_terms_custom_term_labels(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    terms = get_terms(meter_data.index,
                      term_lengths=[60, 60, 60],
                      term_labels=['abc', 'def', 'ghi'])
    assert set(terms) == {None, 'abc', 'def', 'ghi'}
Beispiel #3
0
def test_term_repr(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    terms = get_terms(meter_data.index, term_lengths=[60, 60, 60])
    assert repr(terms[0]) == (
        "Term(label=term_001, target_term_length_days=60, actual_term_length_days=29,"
        " complete=True)")
Beispiel #4
0
def test_get_terms_custom_term_labels(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    terms = get_terms(meter_data.index,
                      term_lengths=[60, 60, 60],
                      term_labels=["abc", "def", "ghi"])
    assert [t.label for t in terms] == ["abc", "def", "ghi"]
Beispiel #5
0
def test_get_terms_empty_index_input(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    terms = get_terms(
        meter_data.index[:0],
        term_lengths=[60, 60, 60],
    )
    assert terms.empty
Beispiel #6
0
def test_get_terms_bad_term_labels(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    with pytest.raises(ValueError):
        terms = get_terms(
            meter_data.index,
            term_lengths=[60, 60, 60],
            term_labels=['abc', 'def'],  # too short
        )
Beispiel #7
0
def test_get_terms_strict(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    strict_terms = get_terms(
        meter_data.index,
        term_lengths=[365, 365],
        term_labels=["year1", "year2"],
        start=datetime(2016, 1, 15, tzinfo=pytz.UTC),
        method="strict",
    )

    assert len(strict_terms) == 2

    year1 = strict_terms[0]
    assert year1.label == "year1"
    assert year1.index.shape == (12, )
    assert (year1.target_start_date == pd.Timestamp("2016-01-15 00:00:00+0000",
                                                    tz="UTC").to_pydatetime())
    assert (year1.target_end_date == pd.Timestamp("2017-01-14 00:00:00+0000",
                                                  tz="UTC").to_pydatetime())
    assert year1.target_term_length_days == 365
    assert (year1.actual_start_date == year1.index[0] == pd.Timestamp(
        "2016-01-22 06:00:00+0000", tz="UTC"))
    assert (year1.actual_end_date == year1.index[-1] == pd.Timestamp(
        "2016-12-19 06:00:00+0000", tz="UTC"))
    assert year1.actual_term_length_days == 332
    assert year1.complete

    year2 = strict_terms[1]
    assert year2.index.shape == (13, )
    assert year2.label == "year2"
    assert year2.target_start_date == pd.Timestamp("2016-12-19 06:00:00+0000",
                                                   tz="UTC")
    assert (year2.target_end_date == pd.Timestamp("2018-01-14 00:00:00+0000",
                                                  tz="UTC").to_pydatetime())
    assert year2.target_term_length_days == 365
    assert (year2.actual_start_date == year2.index[0] == pd.Timestamp(
        "2016-12-19 06:00:00+00:00", tz="UTC"))
    assert (year2.actual_end_date == year2.index[-1] == pd.Timestamp(
        "2017-12-22 06:00:00+0000", tz="UTC"))
    assert year2.actual_term_length_days == 368
    assert year2.complete
Beispiel #8
0
def test_get_terms_nearest(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]
    nearest_terms = get_terms(
        meter_data.index,
        term_lengths=[365, 365],
        term_labels=["year1", "year2"],
        start=datetime(2016, 1, 15, tzinfo=pytz.UTC),
        method="nearest",
    )

    year1 = nearest_terms[nearest_terms == 'year1']
    assert year1.shape == (12, )
    assert year1.index[0] == pd.Timestamp('2016-01-22 06:00:00+0000', tz='UTC')
    assert year1.index[-1] == pd.Timestamp('2016-12-19 06:00:00+0000',
                                           tz='UTC')

    year2 = nearest_terms[nearest_terms == 'year2']
    assert year2.shape == (12, )
    assert year2.index[0] == pd.Timestamp('2017-01-21 06:00:00+00:00',
                                          tz='UTC')
    assert year2.index[-1] == pd.Timestamp('2017-12-22 06:00:00+00:00',
                                           tz='UTC')
Beispiel #9
0
def test_get_terms_default_term_labels(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    terms = get_terms(meter_data.index, term_lengths=[60, 60, 60])
    assert set(terms) == {None, 'term_001', 'term_003', 'term_002'}
Beispiel #10
0
def test_get_terms_unsorted_index(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    with pytest.raises(ValueError):
        get_terms(meter_data.index[::-1], term_lengths=[365])
Beispiel #11
0
def test_get_terms_unrecognized_method(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    with pytest.raises(ValueError):
        get_terms(meter_data.index, term_lengths=[365], method="unrecognized")
Beispiel #12
0
def test_get_terms_default_term_labels(il_electricity_cdd_hdd_billing_monthly):
    meter_data = il_electricity_cdd_hdd_billing_monthly["meter_data"]

    terms = get_terms(meter_data.index, term_lengths=[60, 60, 60])
    assert [t.label for t in terms] == ["term_001", "term_002", "term_003"]