Skip to content

Commit 7c7cd10

Browse files
mroeschkenoatamir
authored andcommitted
CLN/TST: Convert tests/tseries/offset to pytest idioms (pandas-dev#49095)
1 parent 0c527c7 commit 7c7cd10

18 files changed

+567
-529
lines changed

pandas/tests/tseries/offsets/common.py

-49
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,6 @@
33
"""
44
from __future__ import annotations
55

6-
from datetime import datetime
7-
8-
from pandas._libs.tslibs import Timestamp
9-
from pandas._libs.tslibs.offsets import (
10-
FY5253,
11-
BaseOffset,
12-
DateOffset,
13-
FY5253Quarter,
14-
LastWeekOfMonth,
15-
Week,
16-
WeekOfMonth,
17-
)
18-
196

207
def assert_offset_equal(offset, base, expected):
218
actual = offset + base
@@ -48,39 +35,3 @@ class WeekDay:
4835
FRI = 4
4936
SAT = 5
5037
SUN = 6
51-
52-
53-
class Base:
54-
_offset: type[BaseOffset] | None = None
55-
d = Timestamp(datetime(2008, 1, 2))
56-
57-
def _get_offset(self, klass, value=1, normalize=False):
58-
# create instance from offset class
59-
if klass is FY5253:
60-
klass = klass(
61-
n=value,
62-
startingMonth=1,
63-
weekday=1,
64-
variation="last",
65-
normalize=normalize,
66-
)
67-
elif klass is FY5253Quarter:
68-
klass = klass(
69-
n=value,
70-
startingMonth=1,
71-
weekday=1,
72-
qtr_with_extra_week=1,
73-
variation="last",
74-
normalize=normalize,
75-
)
76-
elif klass is LastWeekOfMonth:
77-
klass = klass(n=value, weekday=5, normalize=normalize)
78-
elif klass is WeekOfMonth:
79-
klass = klass(n=value, week=1, weekday=5, normalize=normalize)
80-
elif klass is Week:
81-
klass = klass(n=value, weekday=5, normalize=normalize)
82-
elif klass is DateOffset:
83-
klass = klass(days=value, normalize=normalize)
84-
else:
85-
klass = klass(value, normalize=normalize)
86-
return klass

pandas/tests/tseries/offsets/conftest.py

+11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import datetime
2+
13
import pytest
24

5+
from pandas._libs.tslibs import Timestamp
36
from pandas._libs.tslibs.offsets import MonthOffset
47

58
import pandas.tseries.offsets as offsets
@@ -29,3 +32,11 @@ def month_classes(request):
2932
Fixture for month based datetime offsets available for a time series.
3033
"""
3134
return request.param
35+
36+
37+
@pytest.fixture
38+
def dt():
39+
"""
40+
Fixture for common Timestamp.
41+
"""
42+
return Timestamp(datetime.datetime(2008, 1, 2))

pandas/tests/tseries/offsets/test_business_day.py

+67-64
Original file line numberDiff line numberDiff line change
@@ -24,42 +24,51 @@
2424
_testing as tm,
2525
)
2626
from pandas.tests.tseries.offsets.common import (
27-
Base,
2827
assert_is_on_offset,
2928
assert_offset_equal,
3029
)
3130

3231
from pandas.tseries import offsets as offsets
3332

3433

35-
class TestBusinessDay(Base):
36-
_offset: type[BDay] = BDay
34+
@pytest.fixture
35+
def dt():
36+
return datetime(2008, 1, 1)
3737

38-
def setup_method(self):
39-
self.d = datetime(2008, 1, 1)
40-
self.nd = np.datetime64("2008-01-01 00:00:00")
4138

42-
self.offset = self._offset()
43-
self.offset1 = self.offset
44-
self.offset2 = self._offset(2)
39+
@pytest.fixture
40+
def _offset():
41+
return BDay
4542

46-
def test_different_normalize_equals(self):
43+
44+
@pytest.fixture
45+
def offset(_offset):
46+
return _offset()
47+
48+
49+
@pytest.fixture
50+
def offset2(_offset):
51+
return _offset(2)
52+
53+
54+
class TestBusinessDay:
55+
def test_different_normalize_equals(self, _offset, offset2):
4756
# GH#21404 changed __eq__ to return False when `normalize` does not match
48-
offset = self._offset()
49-
offset2 = self._offset(normalize=True)
57+
offset = _offset()
58+
offset2 = _offset(normalize=True)
5059
assert offset != offset2
5160

52-
def test_repr(self):
53-
assert repr(self.offset) == "<BusinessDay>"
54-
assert repr(self.offset2) == "<2 * BusinessDays>"
61+
def test_repr(self, offset, offset2):
62+
assert repr(offset) == "<BusinessDay>"
63+
assert repr(offset2) == "<2 * BusinessDays>"
5564

5665
expected = "<BusinessDay: offset=datetime.timedelta(days=1)>"
57-
assert repr(self.offset + timedelta(1)) == expected
66+
assert repr(offset + timedelta(1)) == expected
5867

59-
def test_with_offset(self):
60-
offset = self.offset + timedelta(hours=2)
68+
def test_with_offset(self, dt, offset):
69+
offset = offset + timedelta(hours=2)
6170

62-
assert (self.d + offset) == datetime(2008, 1, 2, 2)
71+
assert (dt + offset) == datetime(2008, 1, 2, 2)
6372

6473
@pytest.mark.parametrize(
6574
"td",
@@ -70,49 +79,42 @@ def test_with_offset(self):
7079
],
7180
ids=lambda x: type(x),
7281
)
73-
def test_with_offset_index(self, td):
82+
def test_with_offset_index(self, td, dt, offset):
7483

75-
dti = DatetimeIndex([self.d])
84+
dti = DatetimeIndex([dt])
7685
expected = DatetimeIndex([datetime(2008, 1, 2, 2)])
7786

78-
result = dti + (td + self.offset)
87+
result = dti + (td + offset)
7988
tm.assert_index_equal(result, expected)
8089

81-
result = dti + (self.offset + td)
90+
result = dti + (offset + td)
8291
tm.assert_index_equal(result, expected)
8392

84-
def test_eq(self):
85-
assert self.offset2 == self.offset2
86-
87-
def test_mul(self):
88-
pass
93+
def test_eq(self, offset2):
94+
assert offset2 == offset2
8995

90-
def test_hash(self):
91-
assert hash(self.offset2) == hash(self.offset2)
96+
def test_hash(self, offset2):
97+
assert hash(offset2) == hash(offset2)
9298

93-
def test_call(self):
99+
def test_call(self, dt, offset2):
94100
with tm.assert_produces_warning(FutureWarning):
95101
# GH#34171 DateOffset.__call__ is deprecated
96-
assert self.offset2(self.d) == datetime(2008, 1, 3)
97-
assert self.offset2(self.nd) == datetime(2008, 1, 3)
102+
assert offset2(dt) == datetime(2008, 1, 3)
103+
assert offset2(np.datetime64("2008-01-01 00:00:00")) == datetime(2008, 1, 3)
98104

99-
def testRollback1(self):
100-
assert self._offset(10).rollback(self.d) == self.d
105+
def testRollback1(self, dt, _offset):
106+
assert _offset(10).rollback(dt) == dt
101107

102-
def testRollback2(self):
103-
assert self._offset(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)
108+
def testRollback2(self, _offset):
109+
assert _offset(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)
104110

105-
def testRollforward1(self):
106-
assert self._offset(10).rollforward(self.d) == self.d
111+
def testRollforward1(self, dt, _offset):
112+
assert _offset(10).rollforward(dt) == dt
107113

108-
def testRollforward2(self):
109-
assert self._offset(10).rollforward(datetime(2008, 1, 5)) == datetime(
110-
2008, 1, 7
111-
)
112-
113-
def test_roll_date_object(self):
114-
offset = self._offset()
114+
def testRollforward2(self, _offset):
115+
assert _offset(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7)
115116

117+
def test_roll_date_object(self, offset):
116118
dt = date(2012, 9, 15)
117119

118120
result = offset.rollback(dt)
@@ -128,14 +130,15 @@ def test_roll_date_object(self):
128130
result = offset.rollforward(dt)
129131
assert result == datetime(2012, 9, 15)
130132

131-
def test_is_on_offset(self):
132-
tests = [
133-
(self._offset(), datetime(2008, 1, 1), True),
134-
(self._offset(), datetime(2008, 1, 5), False),
135-
]
136-
137-
for offset, d, expected in tests:
138-
assert_is_on_offset(offset, d, expected)
133+
@pytest.mark.parametrize(
134+
"dt, expected",
135+
[
136+
(datetime(2008, 1, 1), True),
137+
(datetime(2008, 1, 5), False),
138+
],
139+
)
140+
def test_is_on_offset(self, offset, dt, expected):
141+
assert_is_on_offset(offset, dt, expected)
139142

140143
apply_cases: list[tuple[int, dict[datetime, datetime]]] = [
141144
(
@@ -194,22 +197,22 @@ def test_is_on_offset(self):
194197
]
195198

196199
@pytest.mark.parametrize("case", apply_cases)
197-
def test_apply(self, case):
200+
def test_apply(self, case, _offset):
198201
n, cases = case
199-
offset = self._offset(n)
202+
offset = _offset(n)
200203
for base, expected in cases.items():
201204
assert_offset_equal(offset, base, expected)
202205

203-
def test_apply_large_n(self):
206+
def test_apply_large_n(self, _offset):
204207
dt = datetime(2012, 10, 23)
205208

206-
result = dt + self._offset(10)
209+
result = dt + _offset(10)
207210
assert result == datetime(2012, 11, 6)
208211

209-
result = dt + self._offset(100) - self._offset(100)
212+
result = dt + _offset(100) - _offset(100)
210213
assert result == dt
211214

212-
off = self._offset() * 6
215+
off = _offset() * 6
213216
rs = datetime(2012, 1, 1) - off
214217
xp = datetime(2011, 12, 23)
215218
assert rs == xp
@@ -219,18 +222,18 @@ def test_apply_large_n(self):
219222
xp = datetime(2011, 12, 26)
220223
assert rs == xp
221224

222-
off = self._offset() * 10
225+
off = _offset() * 10
223226
rs = datetime(2014, 1, 5) + off # see #5890
224227
xp = datetime(2014, 1, 17)
225228
assert rs == xp
226229

227-
def test_apply_corner(self):
228-
if self._offset is BDay:
230+
def test_apply_corner(self, _offset):
231+
if _offset is BDay:
229232
msg = "Only know how to combine business day with datetime or timedelta"
230233
else:
231234
msg = (
232235
"Only know how to combine trading day "
233236
"with datetime, datetime64 or timedelta"
234237
)
235238
with pytest.raises(ApplyTypeError, match=msg):
236-
self._offset()._apply(BMonthEnd())
239+
_offset()._apply(BMonthEnd())

0 commit comments

Comments
 (0)