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
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'}
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)")
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"]
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
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 )
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
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')
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'}
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])
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")
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"]