Skip to content
Closed
83 changes: 81 additions & 2 deletions pandas/tests/arithmetic/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,21 @@ def zero(request):

@pytest.fixture(params=[pd.Float64Index(np.arange(5, dtype='float64')),
pd.Int64Index(np.arange(5, dtype='int64')),
pd.UInt64Index(np.arange(5, dtype='uint64'))],
pd.UInt64Index(np.arange(5, dtype='uint64')),
pd.RangeIndex(5)],
ids=lambda x: type(x).__name__)
def idx(request):
def numeric_index(request):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you docstring

return request.param


@pytest.fixture
def td_series():
"""
Return a Series with dtype='timedelta64[ns]', including a NaT.
"""
return pd.Series(['59 Days', '59 Days', 'NaT'], dtype='timedelta64[ns]')


@pytest.fixture(params=[pd.Timedelta('5m4s').to_pytimedelta(),
pd.Timedelta('5m4s'),
pd.Timedelta('5m4s').to_timedelta64()],
Expand All @@ -47,6 +56,76 @@ def scalar_td(request):
return request.param


# ------------------------------------------------------------------
# DateOffset Fixtures

_common_mismatch = [pd.offsets.YearBegin(2),
pd.offsets.MonthBegin(1),
pd.offsets.Minute()]


@pytest.fixture(params=[pd.Timedelta(minutes=30).to_pytimedelta(),
np.timedelta64(30, 's'),
pd.Timedelta(seconds=30)] + _common_mismatch)
def not_hourly(request):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would add _fixture to these

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you do this

"""
Several timedelta-like and DateOffset instances that are _not_
compatible with Hourly frequencies.
"""
return request.param


@pytest.fixture(params=[np.timedelta64(4, 'h'),
pd.Timedelta(hours=23).to_pytimedelta(),
pd.Timedelta('23:00:00')] + _common_mismatch)
def not_daily(request):
"""
Several timedelta-like and DateOffset instances that are _not_
compatible with Daily frequencies.
"""
return request.param


@pytest.fixture(params=[np.timedelta64(365, 'D'),
pd.Timedelta(365).to_pytimedelta(),
pd.Timedelta(days=365)] + _common_mismatch)
def mismatched(request):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you make this more descriptive

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

docstring doesn't get the job done?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, prefer this to be a more descriptive name

"""
Several timedelta-like and DateOffset instances that are _not_
compatible with Monthly or Annual frequencies.
"""
return request.param


@pytest.fixture(params=[pd.offsets.Day(3),
pd.Timedelta(days=3).to_pytimedelta(),
np.timedelta64(3, 'D'),
pd.offsets.Hour(72),
pd.Timedelta(minutes=60 * 24 * 3).to_pytimedelta(),
np.timedelta64(72, 'h'),
pd.Timedelta('72:00:00')])
def three_days(request):
"""
Several timedelta-like and DateOffset objects that each represent
a 3-day timedelta
"""
return request.param


@pytest.fixture(params=[pd.offsets.Hour(2),
pd.Timedelta(hours=2),
np.timedelta64(2, 'h'),
pd.offsets.Minute(120),
pd.Timedelta(minutes=120).to_pytimedelta(),
np.timedelta64(120, 'm')])
def two_hours(request):
"""
Several timedelta-like and DateOffset objects that each represent
a 2-hour timedelta
"""
return request.param


# ------------------------------------------------------------------

@pytest.fixture(params=[pd.Index, pd.Series, pd.DataFrame],
Expand Down
32 changes: 12 additions & 20 deletions pandas/tests/arithmetic/test_datetime64.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,6 @@
# ------------------------------------------------------------------
# Fixtures

@pytest.fixture(params=[pd.offsets.Hour(2), timedelta(hours=2),
np.timedelta64(2, 'h'), Timedelta(hours=2)],
ids=str)
def delta(request):
# Several ways of representing two hours
return request.param


@pytest.fixture(
params=[
datetime(2011, 1, 1),
Expand Down Expand Up @@ -1113,40 +1105,40 @@ def test_dti_add_intarray_no_freq(self, box):
# -------------------------------------------------------------
# Binary operations DatetimeIndex and timedelta-like

def test_dti_add_timedeltalike(self, tz_naive_fixture, delta, box):
def test_dti_add_timedeltalike(self, tz_naive_fixture, two_hours, box):
# GH#22005, GH#22163 check DataFrame doesn't raise TypeError
tz = tz_naive_fixture
rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz)
rng = tm.box_expected(rng, box)

result = rng + delta
result = rng + two_hours
expected = pd.date_range('2000-01-01 02:00',
'2000-02-01 02:00', tz=tz)
expected = tm.box_expected(expected, box)
tm.assert_equal(result, expected)

def test_dti_iadd_timedeltalike(self, tz_naive_fixture, delta):
def test_dti_iadd_timedeltalike(self, tz_naive_fixture, two_hours):
tz = tz_naive_fixture
rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz)
expected = pd.date_range('2000-01-01 02:00',
'2000-02-01 02:00', tz=tz)
rng += delta
rng += two_hours
tm.assert_index_equal(rng, expected)

def test_dti_sub_timedeltalike(self, tz_naive_fixture, delta):
def test_dti_sub_timedeltalike(self, tz_naive_fixture, two_hours):
tz = tz_naive_fixture
rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz)
expected = pd.date_range('1999-12-31 22:00',
'2000-01-31 22:00', tz=tz)
result = rng - delta
result = rng - two_hours
tm.assert_index_equal(result, expected)

def test_dti_isub_timedeltalike(self, tz_naive_fixture, delta):
def test_dti_isub_timedeltalike(self, tz_naive_fixture, two_hours):
tz = tz_naive_fixture
rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz)
expected = pd.date_range('1999-12-31 22:00',
'2000-01-31 22:00', tz=tz)
rng -= delta
rng -= two_hours
tm.assert_index_equal(rng, expected)

# -------------------------------------------------------------
Expand Down Expand Up @@ -1255,8 +1247,8 @@ def test_dti_isub_tdi(self, tz_naive_fixture):
def test_add_datetimelike_and_dti(self, addend):
# GH#9631
dti = DatetimeIndex(['2011-01-01', '2011-01-02'])
msg = 'cannot add DatetimeIndex and {0}'.format(
type(addend).__name__)
msg = ('cannot add DatetimeIndex and {typ}'
.format(typ=type(addend).__name__))
with tm.assert_raises_regex(TypeError, msg):
dti + addend
with tm.assert_raises_regex(TypeError, msg):
Expand All @@ -1266,8 +1258,8 @@ def test_add_datetimelike_and_dti_tz(self, addend):
# GH#9631
dti_tz = DatetimeIndex(['2011-01-01',
'2011-01-02']).tz_localize('US/Eastern')
msg = 'cannot add DatetimeIndex and {0}'.format(
type(addend).__name__)
msg = ('cannot add DatetimeIndex and {typ}'
.format(typ=type(addend).__name__))
with tm.assert_raises_regex(TypeError, msg):
dti_tz + addend
with tm.assert_raises_regex(TypeError, msg):
Expand Down
Loading