Skip to content

~Finish Collecting Arithmetic Tests #22350

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 10 commits into from
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