Skip to content

Commit

Permalink
isolate scalar Timestamp tests from date_range tests (pandas-dev#17957)
Browse files Browse the repository at this point in the history
  • Loading branch information
jbrockmendel authored and peterpanmj committed Oct 31, 2017
1 parent 74ac010 commit 0b6128d
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 44 deletions.
105 changes: 61 additions & 44 deletions pandas/tests/scalar/test_timestamp.py
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ def test_pprint(self):
'foo': 1}"""
assert result == expected

def to_datetime_depr(self):
def test_to_datetime_depr(self):
# see gh-8254
ts = Timestamp('2011-01-01')

Expand All @@ -610,7 +610,7 @@ 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):
ts = Timestamp('2011-01-01 9:00:00.123456789')

# Warn the user of data loss (nanoseconds).
Expand Down Expand Up @@ -987,35 +987,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))
Expand Down Expand Up @@ -1303,26 +1274,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
Expand All @@ -1331,9 +1295,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
Expand Down Expand Up @@ -1529,3 +1491,58 @@ 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):
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):
timestamp_instance = date_range('2014-03-05', periods=1, freq='D')[0]
ts = Timestamp('2014-03-05', freq='D')

assert timestamp_instance == ts
32 changes: 32 additions & 0 deletions pandas/tests/tseries/test_frequencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,38 @@ 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

with tm.assert_raises_regex(ValueError, 'Invalid frequency'):
frequencies.get_freq_code((5, 'baz'))

with tm.assert_raises_regex(ValueError, 'Invalid frequency'):
frequencies.to_offset('100foo')

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())
assert result == 'H'


_dti = DatetimeIndex

Expand Down

0 comments on commit 0b6128d

Please sign in to comment.