From b5687b070f776cd55de39b2e8e41003db0fa6261 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Mon, 23 Oct 2017 09:16:10 -0700 Subject: [PATCH 1/7] isolate scalar Timestamp tests from date_range tests --- pandas/tests/scalar/test_timestamp.py | 75 ++++++++++++++++++++++----- 1 file changed, 62 insertions(+), 13 deletions(-) diff --git a/pandas/tests/scalar/test_timestamp.py b/pandas/tests/scalar/test_timestamp.py index c1b9f858a08de..5ef9bc551af10 100644 --- a/pandas/tests/scalar/test_timestamp.py +++ b/pandas/tests/scalar/test_timestamp.py @@ -1268,26 +1268,19 @@ def test_compare_hour13(self): class TestTimeSeries(object): def test_timestamp_to_datetime(self): - rng = date_range('20090415', '20090519', tz='US/Eastern') - - stamp = rng[0] + stamp = Timestamp('20090415', tz='US/Eastern', freq='D') dtval = stamp.to_pydatetime() assert stamp == dtval assert stamp.tzinfo == dtval.tzinfo def test_timestamp_to_datetime_dateutil(self): - rng = date_range('20090415', '20090519', tz='dateutil/US/Eastern') - - stamp = rng[0] + stamp = Timestamp('20090415', tz='dateutil/US/Eastern', freq='D') dtval = stamp.to_pydatetime() assert stamp == dtval assert stamp.tzinfo == dtval.tzinfo def test_timestamp_to_datetime_explicit_pytz(self): - rng = date_range('20090415', '20090519', - tz=pytz.timezone('US/Eastern')) - - stamp = rng[0] + stamp = Timestamp('20090415', tz=pytz.timezone('US/Eastern'), freq='D') dtval = stamp.to_pydatetime() assert stamp == dtval assert stamp.tzinfo == dtval.tzinfo @@ -1296,9 +1289,7 @@ def test_timestamp_to_datetime_explicit_dateutil(self): tm._skip_if_windows_python_3() from pandas._libs.tslibs.timezones import dateutil_gettz as gettz - rng = date_range('20090415', '20090519', tz=gettz('US/Eastern')) - - stamp = rng[0] + stamp = Timestamp('20090415', tz=gettz('US/Eastern'), freq='D') dtval = stamp.to_pydatetime() assert stamp == dtval assert stamp.tzinfo == dtval.tzinfo @@ -1494,3 +1485,61 @@ def test_to_datetime_bijective(self): with tm.assert_produces_warning(exp_warning, check_stacklevel=False): assert (Timestamp(Timestamp.min.to_pydatetime()).value / 1000 == Timestamp.min.value / 1000) + + +class TestTimestampEquivDateRange(object): + # Older tests in TestTimeSeries constructed their `stamp` objects + # using `date_range` instead of the `Timestamp` constructor. + # TestTimestampEquivDateRange checks that these are equivalent in the + # pertinent cases. + + def test_date_range_timestamp_equiv(self): + rng = date_range('20090415', '20090519', tz='US/Eastern') + stamp = rng[0] + + ts = Timestamp('20090415', tz='US/Eastern', freq='D') + assert ts == stamp + + def test_date_range_timestamp_equiv_dateutil(self): + rng = date_range('20090415', '20090519', tz='dateutil/US/Eastern') + stamp = rng[0] + + ts = Timestamp('20090415', tz='dateutil/US/Eastern', freq='D') + assert ts == stamp + + def test_date_range_timestamp_equiv_explicit_pytz(self): + rng = date_range('20090415', '20090519', + tz=pytz.timezone('US/Eastern')) + stamp = rng[0] + + ts = Timestamp('20090415', tz=pytz.timezone('US/Eastern'), freq='D') + assert ts == stamp + + def test_date_range_timestamp_equiv_explicit_dateutil(self): + tm._skip_if_windows_python_3() + from pandas._libs.tslibs.timezones import dateutil_gettz as gettz + + rng = date_range('20090415', '20090519', tz=gettz('US/Eastern')) + stamp = rng[0] + + ts = Timestamp('20090415', tz=gettz('US/Eastern'), freq='D') + assert ts == stamp + + def test_date_range_timestamp_equiv_from_datetime_instance(self): + # This test refers to TestTimestampOps.test_addition_subtraction_types + datetime_instance = datetime(2014, 3, 4) + # build a timestamp with a frequency, since then it supports + # addition/subtraction of integers + timestamp_instance = date_range(datetime_instance, periods=1, + freq='D')[0] + + ts = Timestamp(datetime_instance, freq='D') + assert ts == timestamp_instance + + def test_date_range_timestamp_equiv_preserve_frequency(self): + # This test refers to + # TestTimestampOps.test_addition_subtraction_preserve_frequency + timestamp_instance = date_range('2014-03-05', periods=1, freq='D')[0] + ts = Timestamp('2014-03-05', freq='D') + + assert timestamp_instance == ts From 0d1f801043e0ace2f23bcd71602dfc81304c0340 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Mon, 23 Oct 2017 09:17:36 -0700 Subject: [PATCH 2/7] fixup whitespace --- pandas/tests/scalar/test_timestamp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/scalar/test_timestamp.py b/pandas/tests/scalar/test_timestamp.py index 5ef9bc551af10..09a10016760cf 100644 --- a/pandas/tests/scalar/test_timestamp.py +++ b/pandas/tests/scalar/test_timestamp.py @@ -1518,7 +1518,7 @@ def test_date_range_timestamp_equiv_explicit_pytz(self): def test_date_range_timestamp_equiv_explicit_dateutil(self): tm._skip_if_windows_python_3() from pandas._libs.tslibs.timezones import dateutil_gettz as gettz - + rng = date_range('20090415', '20090519', tz=gettz('US/Eastern')) stamp = rng[0] From ad43be6b5799b66b59bed5d68d91b16ff3266426 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Mon, 23 Oct 2017 09:53:23 -0700 Subject: [PATCH 3/7] move test_frequency_misc to test_frequencies --- pandas/tests/scalar/test_timestamp.py | 29 ------------------------ pandas/tests/tseries/test_frequencies.py | 29 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/pandas/tests/scalar/test_timestamp.py b/pandas/tests/scalar/test_timestamp.py index 09a10016760cf..75674d3eaff13 100644 --- a/pandas/tests/scalar/test_timestamp.py +++ b/pandas/tests/scalar/test_timestamp.py @@ -969,35 +969,6 @@ def test_delta_preserve_nanos(self): result = val + timedelta(1) assert result.nanosecond == val.nanosecond - def test_frequency_misc(self): - assert (frequencies.get_freq_group('T') == - frequencies.FreqGroup.FR_MIN) - - code, stride = frequencies.get_freq_code(offsets.Hour()) - assert code == frequencies.FreqGroup.FR_HR - - code, stride = frequencies.get_freq_code((5, 'T')) - assert code == frequencies.FreqGroup.FR_MIN - assert stride == 5 - - offset = offsets.Hour() - result = frequencies.to_offset(offset) - assert result == offset - - result = frequencies.to_offset((5, 'T')) - expected = offsets.Minute(5) - assert result == expected - - pytest.raises(ValueError, frequencies.get_freq_code, (5, 'baz')) - - pytest.raises(ValueError, frequencies.to_offset, '100foo') - - pytest.raises(ValueError, frequencies.to_offset, ('', '')) - - with tm.assert_produces_warning(FutureWarning, check_stacklevel=False): - result = frequencies.get_standard_freq(offsets.Hour()) - assert result == 'H' - def test_hash_equivalent(self): d = {datetime(2011, 1, 1): 5} stamp = Timestamp(datetime(2011, 1, 1)) diff --git a/pandas/tests/tseries/test_frequencies.py b/pandas/tests/tseries/test_frequencies.py index 4bcd0b49db7e0..5975e7c77c67f 100644 --- a/pandas/tests/tseries/test_frequencies.py +++ b/pandas/tests/tseries/test_frequencies.py @@ -509,6 +509,35 @@ def test_get_freq_code(self): assert (frequencies.get_freq_code(offsets.Week(-2, weekday=4)) == (frequencies.get_freq('W-FRI'), -2)) + def test_frequency_misc(self): + assert (frequencies.get_freq_group('T') == + frequencies.FreqGroup.FR_MIN) + + code, stride = frequencies.get_freq_code(offsets.Hour()) + assert code == frequencies.FreqGroup.FR_HR + + code, stride = frequencies.get_freq_code((5, 'T')) + assert code == frequencies.FreqGroup.FR_MIN + assert stride == 5 + + offset = offsets.Hour() + result = frequencies.to_offset(offset) + assert result == offset + + result = frequencies.to_offset((5, 'T')) + expected = offsets.Minute(5) + assert result == expected + + pytest.raises(ValueError, frequencies.get_freq_code, (5, 'baz')) + + pytest.raises(ValueError, frequencies.to_offset, '100foo') + + pytest.raises(ValueError, frequencies.to_offset, ('', '')) + + with tm.assert_produces_warning(FutureWarning, check_stacklevel=False): + result = frequencies.get_standard_freq(offsets.Hour()) + assert result == 'H' + _dti = DatetimeIndex From 01e9b770a9a9f80bed86c2a47da8554c9288bf07 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Mon, 23 Oct 2017 12:27:39 -0700 Subject: [PATCH 4/7] Fix names of tests that arent getting run --- pandas/tests/scalar/test_timestamp.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pandas/tests/scalar/test_timestamp.py b/pandas/tests/scalar/test_timestamp.py index 75674d3eaff13..92463754c863a 100644 --- a/pandas/tests/scalar/test_timestamp.py +++ b/pandas/tests/scalar/test_timestamp.py @@ -582,8 +582,9 @@ def test_pprint(self): 'foo': 1}""" assert result == expected - def to_datetime_depr(self): + def test_to_datetime_depr(self): # see gh-8254 + assert False ts = Timestamp('2011-01-01') with tm.assert_produces_warning(FutureWarning, @@ -592,7 +593,8 @@ def to_datetime_depr(self): result = ts.to_datetime() assert result == expected - def to_pydatetime_nonzero_nano(self): + def test_to_pydatetime_nonzero_nano(self): + assert False ts = Timestamp('2011-01-01 9:00:00.123456789') # Warn the user of data loss (nanoseconds). From 059cba0c148c04bedd8ad776845536de8e107460 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Mon, 23 Oct 2017 12:33:53 -0700 Subject: [PATCH 5/7] use assert_raises_regexp in freqs tests --- pandas/tests/tseries/test_frequencies.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pandas/tests/tseries/test_frequencies.py b/pandas/tests/tseries/test_frequencies.py index 5975e7c77c67f..39a9a87141753 100644 --- a/pandas/tests/tseries/test_frequencies.py +++ b/pandas/tests/tseries/test_frequencies.py @@ -528,11 +528,14 @@ def test_frequency_misc(self): expected = offsets.Minute(5) assert result == expected - pytest.raises(ValueError, frequencies.get_freq_code, (5, 'baz')) + with tm.assert_raises_regex(ValueError, 'Invalid frequency'): + frequencies.get_freq_code((5, 'baz')) - pytest.raises(ValueError, frequencies.to_offset, '100foo') + with tm.assert_raises_regex(ValueError, 'Invalid frequency'): + frequencies.to_offset('100foo') - pytest.raises(ValueError, frequencies.to_offset, ('', '')) + with tm.assert_raises_regex(ValueError, 'Could not evaluate'): + frequencies.to_offset(('', '')) with tm.assert_produces_warning(FutureWarning, check_stacklevel=False): result = frequencies.get_standard_freq(offsets.Hour()) From f35e59f165855928def9596a47a6dabcd86a761c Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Mon, 23 Oct 2017 16:25:47 -0700 Subject: [PATCH 6/7] remove false assertions --- pandas/tests/scalar/test_timestamp.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pandas/tests/scalar/test_timestamp.py b/pandas/tests/scalar/test_timestamp.py index 92463754c863a..352a8a90ad2dd 100644 --- a/pandas/tests/scalar/test_timestamp.py +++ b/pandas/tests/scalar/test_timestamp.py @@ -584,7 +584,6 @@ def test_pprint(self): def test_to_datetime_depr(self): # see gh-8254 - assert False ts = Timestamp('2011-01-01') with tm.assert_produces_warning(FutureWarning, @@ -594,7 +593,6 @@ def test_to_datetime_depr(self): assert result == expected def test_to_pydatetime_nonzero_nano(self): - assert False ts = Timestamp('2011-01-01 9:00:00.123456789') # Warn the user of data loss (nanoseconds). From 1f0f982efc83cab9221b5a0920f7c419a6e76ac1 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Tue, 24 Oct 2017 08:53:27 -0700 Subject: [PATCH 7/7] remove comments per reviewer request --- pandas/tests/scalar/test_timestamp.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pandas/tests/scalar/test_timestamp.py b/pandas/tests/scalar/test_timestamp.py index 352a8a90ad2dd..8f5c5206de41c 100644 --- a/pandas/tests/scalar/test_timestamp.py +++ b/pandas/tests/scalar/test_timestamp.py @@ -1497,7 +1497,6 @@ def test_date_range_timestamp_equiv_explicit_dateutil(self): assert ts == stamp def test_date_range_timestamp_equiv_from_datetime_instance(self): - # This test refers to TestTimestampOps.test_addition_subtraction_types datetime_instance = datetime(2014, 3, 4) # build a timestamp with a frequency, since then it supports # addition/subtraction of integers @@ -1508,8 +1507,6 @@ def test_date_range_timestamp_equiv_from_datetime_instance(self): assert ts == timestamp_instance def test_date_range_timestamp_equiv_preserve_frequency(self): - # This test refers to - # TestTimestampOps.test_addition_subtraction_preserve_frequency timestamp_instance = date_range('2014-03-05', periods=1, freq='D')[0] ts = Timestamp('2014-03-05', freq='D')