def test_has_dst_no_dst_in_date_range(albuquerque): sunrise = _get_sunrise(albuquerque, 'America/Denver') july = sunrise['2020-07-01':'2020-07-31'] february = sunrise['2020-02-01':'2020-03-05'] expected_july = pd.Series(False, index=july.index) expected_march = pd.Series(False, index=february.index) assert_series_equal(expected_july, time.has_dst(july, 'America/Denver')) assert_series_equal(expected_march, time.has_dst(february, 'MST'))
def test_has_dst(tz, observes_dst, albuquerque): sunrise = _get_sunrise(albuquerque, tz) dst = time.has_dst(sunrise, 'America/Denver') expected = pd.Series(False, index=sunrise.index) expected.loc['2020-03-08'] = observes_dst expected.loc['2020-11-01'] = observes_dst assert_series_equal(expected, dst, check_names=False)
def test_has_dst_input_series_not_localized(tz, observes_dst, albuquerque): sunrise = _get_sunrise(albuquerque, tz) sunrise = sunrise.tz_localize(None) expected = pd.Series(False, index=sunrise.index) expected.loc['2020-03-08'] = observes_dst expected.loc['2020-11-01'] = observes_dst dst = time.has_dst(sunrise, 'America/Denver') assert_series_equal(expected, dst)
def test_has_dst_gaps(albuquerque): sunrise = _get_sunrise(albuquerque, 'America/Denver') sunrise.loc['3/5/2020':'3/10/2020'] = pd.NaT sunrise.loc['7/1/2020':'7/20/2020'] = pd.NaT sunrise.dropna(inplace=True) expected = pd.Series(False, index=sunrise.index) expected['11/1/2020'] = True assert_series_equal(time.has_dst(sunrise, 'America/Denver'), expected)
def test_has_dst_rounded(tz, freq, observes_dst, albuquerque): sunrise = _get_sunrise(albuquerque, tz) # With rounding to 1-hour timestamps we need to reduce how many # days we look at. window = 7 if freq != 'H' else 1 expected = pd.Series(False, index=sunrise.index) expected.loc['2020-03-08'] = observes_dst expected.loc['2020-11-01'] = observes_dst dst = time.has_dst(sunrise.dt.round(freq), 'America/Denver', window=window) assert_series_equal(expected, dst, check_names=False)
def test_has_dst_missing_data(albuquerque): sunrise = _get_sunrise(albuquerque, 'America/Denver') sunrise.loc['3/5/2020':'3/10/2020'] = pd.NaT sunrise.loc['7/1/2020':'7/20/2020'] = pd.NaT # Doesn't raise since both sides still have some data expected = pd.Series(False, index=sunrise.index) expected['3/8/2020'] = True expected['11/1/2020'] = True assert_series_equal(time.has_dst(sunrise, 'America/Denver'), expected) missing_all_before = sunrise.copy() missing_all_after = sunrise.copy() missing_all_before.loc['3/1/2020':'3/5/2020'] = pd.NaT missing_all_after.loc['3/8/2020':'3/14/2020'] = pd.NaT missing_data_message = r'No data at .*\. ' \ r'Consider passing a larger `window`.' # Raises for missing data before transition date with pytest.raises(ValueError, match=missing_data_message): time.has_dst(missing_all_before, 'America/Denver') # Raises for missing data after transition date with pytest.raises(ValueError, match=missing_data_message): time.has_dst(missing_all_after, 'America/Denver') # Raises for missing data before and after the shift date sunrise.loc['3/1/2020':'3/7/2020'] = pd.NaT sunrise.loc['3/9/2020':'3/14/2020'] = pd.NaT with pytest.raises(ValueError, match=missing_data_message): time.has_dst(sunrise, 'America/Denver') with pytest.warns(UserWarning, match=missing_data_message): result = time.has_dst(sunrise, 'America/Denver', missing='warn') expected.loc['3/8/2020'] = False assert_series_equal(expected, result) sunrise.loc['3/1/2020':'3/14/2020'] = pd.NaT with pytest.warns(UserWarning, match=missing_data_message): result = time.has_dst(sunrise, 'America/Denver', missing='warn') assert_series_equal(expected, result) with pytest.raises(ValueError, match=missing_data_message): time.has_dst(sunrise, 'America/Denver')