Skip to content

Commit 0d5ea68

Browse files
authored
TST: share a bunch of test_custom_business_day (#44493)
1 parent 6c005b2 commit 0d5ea68

File tree

2 files changed

+37
-227
lines changed

2 files changed

+37
-227
lines changed

pandas/tests/tseries/offsets/test_business_day.py

+33-21
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
BDay,
1616
BMonthEnd,
1717
)
18+
from pandas.compat import np_datetime64_compat
1819

1920
from pandas import (
2021
DatetimeIndex,
@@ -36,10 +37,11 @@ class TestBusinessDay(Base):
3637

3738
def setup_method(self, method):
3839
self.d = datetime(2008, 1, 1)
40+
self.nd = np_datetime64_compat("2008-01-01 00:00:00Z")
3941

40-
self.offset = BDay()
42+
self.offset = self._offset()
4143
self.offset1 = self.offset
42-
self.offset2 = BDay(2)
44+
self.offset2 = self._offset(2)
4345

4446
def test_different_normalize_equals(self):
4547
# GH#21404 changed __eq__ to return False when `normalize` does not match
@@ -98,21 +100,24 @@ def test_call(self):
98100
with tm.assert_produces_warning(FutureWarning):
99101
# GH#34171 DateOffset.__call__ is deprecated
100102
assert self.offset2(self.d) == datetime(2008, 1, 3)
103+
assert self.offset2(self.nd) == datetime(2008, 1, 3)
101104

102105
def testRollback1(self):
103-
assert BDay(10).rollback(self.d) == self.d
106+
assert self._offset(10).rollback(self.d) == self.d
104107

105108
def testRollback2(self):
106-
assert BDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)
109+
assert self._offset(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)
107110

108111
def testRollforward1(self):
109-
assert BDay(10).rollforward(self.d) == self.d
112+
assert self._offset(10).rollforward(self.d) == self.d
110113

111114
def testRollforward2(self):
112-
assert BDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7)
115+
assert self._offset(10).rollforward(datetime(2008, 1, 5)) == datetime(
116+
2008, 1, 7
117+
)
113118

114119
def test_roll_date_object(self):
115-
offset = BDay()
120+
offset = self._offset()
116121

117122
dt = date(2012, 9, 15)
118123

@@ -131,16 +136,16 @@ def test_roll_date_object(self):
131136

132137
def test_is_on_offset(self):
133138
tests = [
134-
(BDay(), datetime(2008, 1, 1), True),
135-
(BDay(), datetime(2008, 1, 5), False),
139+
(self._offset(), datetime(2008, 1, 1), True),
140+
(self._offset(), datetime(2008, 1, 5), False),
136141
]
137142

138143
for offset, d, expected in tests:
139144
assert_is_on_offset(offset, d, expected)
140145

141146
apply_cases: _ApplyCases = [
142147
(
143-
BDay(),
148+
1,
144149
{
145150
datetime(2008, 1, 1): datetime(2008, 1, 2),
146151
datetime(2008, 1, 4): datetime(2008, 1, 7),
@@ -150,7 +155,7 @@ def test_is_on_offset(self):
150155
},
151156
),
152157
(
153-
2 * BDay(),
158+
2,
154159
{
155160
datetime(2008, 1, 1): datetime(2008, 1, 3),
156161
datetime(2008, 1, 4): datetime(2008, 1, 8),
@@ -160,7 +165,7 @@ def test_is_on_offset(self):
160165
},
161166
),
162167
(
163-
-BDay(),
168+
-1,
164169
{
165170
datetime(2008, 1, 1): datetime(2007, 12, 31),
166171
datetime(2008, 1, 4): datetime(2008, 1, 3),
@@ -171,7 +176,7 @@ def test_is_on_offset(self):
171176
},
172177
),
173178
(
174-
-2 * BDay(),
179+
-2,
175180
{
176181
datetime(2008, 1, 1): datetime(2007, 12, 28),
177182
datetime(2008, 1, 4): datetime(2008, 1, 2),
@@ -183,7 +188,7 @@ def test_is_on_offset(self):
183188
},
184189
),
185190
(
186-
BDay(0),
191+
0,
187192
{
188193
datetime(2008, 1, 1): datetime(2008, 1, 1),
189194
datetime(2008, 1, 4): datetime(2008, 1, 4),
@@ -196,20 +201,21 @@ def test_is_on_offset(self):
196201

197202
@pytest.mark.parametrize("case", apply_cases)
198203
def test_apply(self, case):
199-
offset, cases = case
204+
n, cases = case
205+
offset = self._offset(n)
200206
for base, expected in cases.items():
201207
assert_offset_equal(offset, base, expected)
202208

203209
def test_apply_large_n(self):
204210
dt = datetime(2012, 10, 23)
205211

206-
result = dt + BDay(10)
212+
result = dt + self._offset(10)
207213
assert result == datetime(2012, 11, 6)
208214

209-
result = dt + BDay(100) - BDay(100)
215+
result = dt + self._offset(100) - self._offset(100)
210216
assert result == dt
211217

212-
off = BDay() * 6
218+
off = self._offset() * 6
213219
rs = datetime(2012, 1, 1) - off
214220
xp = datetime(2011, 12, 23)
215221
assert rs == xp
@@ -219,12 +225,18 @@ def test_apply_large_n(self):
219225
xp = datetime(2011, 12, 26)
220226
assert rs == xp
221227

222-
off = BDay() * 10
228+
off = self._offset() * 10
223229
rs = datetime(2014, 1, 5) + off # see #5890
224230
xp = datetime(2014, 1, 17)
225231
assert rs == xp
226232

227233
def test_apply_corner(self):
228-
msg = "Only know how to combine business day with datetime or timedelta"
234+
if self._offset is BDay:
235+
msg = "Only know how to combine business day with datetime or timedelta"
236+
else:
237+
msg = (
238+
"Only know how to combine trading day "
239+
"with datetime, datetime64 or timedelta"
240+
)
229241
with pytest.raises(ApplyTypeError, match=msg):
230-
BDay().apply(BMonthEnd())
242+
self._offset().apply(BMonthEnd())

pandas/tests/tseries/offsets/test_custom_business_day.py

+4-206
Original file line numberDiff line numberDiff line change
@@ -2,237 +2,35 @@
22
Tests for offsets.CustomBusinessDay / CDay
33
"""
44
from datetime import (
5-
date,
65
datetime,
76
timedelta,
87
)
98

109
import numpy as np
1110
import pytest
1211

13-
from pandas._libs.tslibs.offsets import (
14-
ApplyTypeError,
15-
BMonthEnd,
16-
CDay,
17-
)
18-
from pandas.compat import np_datetime64_compat
12+
from pandas._libs.tslibs.offsets import CDay
1913

2014
from pandas import (
21-
DatetimeIndex,
22-
Timedelta,
2315
_testing as tm,
2416
read_pickle,
2517
)
26-
from pandas.tests.tseries.offsets.common import (
27-
Base,
28-
assert_is_on_offset,
29-
assert_offset_equal,
30-
)
31-
from pandas.tests.tseries.offsets.test_offsets import _ApplyCases
18+
from pandas.tests.tseries.offsets.common import assert_offset_equal
19+
from pandas.tests.tseries.offsets.test_business_day import TestBusinessDay
3220

33-
from pandas.tseries import offsets as offsets
3421
from pandas.tseries.holiday import USFederalHolidayCalendar
3522

3623

37-
class TestCustomBusinessDay(Base):
24+
class TestCustomBusinessDay(TestBusinessDay):
3825
_offset = CDay
3926

40-
def setup_method(self, method):
41-
self.d = datetime(2008, 1, 1)
42-
self.nd = np_datetime64_compat("2008-01-01 00:00:00Z")
43-
44-
self.offset = CDay()
45-
self.offset1 = self.offset
46-
self.offset2 = CDay(2)
47-
48-
def test_different_normalize_equals(self):
49-
# GH#21404 changed __eq__ to return False when `normalize` does not match
50-
offset = self._offset()
51-
offset2 = self._offset(normalize=True)
52-
assert offset != offset2
53-
5427
def test_repr(self):
5528
assert repr(self.offset) == "<CustomBusinessDay>"
5629
assert repr(self.offset2) == "<2 * CustomBusinessDays>"
5730

5831
expected = "<BusinessDay: offset=datetime.timedelta(days=1)>"
5932
assert repr(self.offset + timedelta(1)) == expected
6033

61-
def test_with_offset(self):
62-
offset = self.offset + timedelta(hours=2)
63-
64-
assert (self.d + offset) == datetime(2008, 1, 2, 2)
65-
66-
@pytest.mark.parametrize("reverse", [True, False])
67-
@pytest.mark.parametrize(
68-
"td",
69-
[
70-
Timedelta(hours=2),
71-
Timedelta(hours=2).to_pytimedelta(),
72-
Timedelta(hours=2).to_timedelta64(),
73-
],
74-
ids=lambda x: type(x),
75-
)
76-
def test_with_offset_index(self, reverse, td, request):
77-
if reverse and isinstance(td, np.timedelta64):
78-
mark = pytest.mark.xfail(
79-
reason="need __array_priority__, but that causes other errors"
80-
)
81-
request.node.add_marker(mark)
82-
83-
dti = DatetimeIndex([self.d])
84-
expected = DatetimeIndex([datetime(2008, 1, 2, 2)])
85-
86-
if reverse:
87-
result = dti + (td + self.offset)
88-
else:
89-
result = dti + (self.offset + td)
90-
tm.assert_index_equal(result, expected)
91-
92-
def test_eq(self):
93-
assert self.offset2 == self.offset2
94-
95-
def test_mul(self):
96-
pass
97-
98-
def test_hash(self):
99-
assert hash(self.offset2) == hash(self.offset2)
100-
101-
def test_call(self):
102-
with tm.assert_produces_warning(FutureWarning):
103-
# GH#34171 DateOffset.__call__ is deprecated
104-
assert self.offset2(self.d) == datetime(2008, 1, 3)
105-
assert self.offset2(self.nd) == datetime(2008, 1, 3)
106-
107-
def testRollback1(self):
108-
assert CDay(10).rollback(self.d) == self.d
109-
110-
def testRollback2(self):
111-
assert CDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)
112-
113-
def testRollforward1(self):
114-
assert CDay(10).rollforward(self.d) == self.d
115-
116-
def testRollforward2(self):
117-
assert CDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7)
118-
119-
def test_roll_date_object(self):
120-
offset = CDay()
121-
122-
dt = date(2012, 9, 15)
123-
124-
result = offset.rollback(dt)
125-
assert result == datetime(2012, 9, 14)
126-
127-
result = offset.rollforward(dt)
128-
assert result == datetime(2012, 9, 17)
129-
130-
offset = offsets.Day()
131-
result = offset.rollback(dt)
132-
assert result == datetime(2012, 9, 15)
133-
134-
result = offset.rollforward(dt)
135-
assert result == datetime(2012, 9, 15)
136-
137-
on_offset_cases = [
138-
(CDay(), datetime(2008, 1, 1), True),
139-
(CDay(), datetime(2008, 1, 5), False),
140-
]
141-
142-
@pytest.mark.parametrize("case", on_offset_cases)
143-
def test_is_on_offset(self, case):
144-
offset, day, expected = case
145-
assert_is_on_offset(offset, day, expected)
146-
147-
apply_cases: _ApplyCases = [
148-
(
149-
CDay(),
150-
{
151-
datetime(2008, 1, 1): datetime(2008, 1, 2),
152-
datetime(2008, 1, 4): datetime(2008, 1, 7),
153-
datetime(2008, 1, 5): datetime(2008, 1, 7),
154-
datetime(2008, 1, 6): datetime(2008, 1, 7),
155-
datetime(2008, 1, 7): datetime(2008, 1, 8),
156-
},
157-
),
158-
(
159-
2 * CDay(),
160-
{
161-
datetime(2008, 1, 1): datetime(2008, 1, 3),
162-
datetime(2008, 1, 4): datetime(2008, 1, 8),
163-
datetime(2008, 1, 5): datetime(2008, 1, 8),
164-
datetime(2008, 1, 6): datetime(2008, 1, 8),
165-
datetime(2008, 1, 7): datetime(2008, 1, 9),
166-
},
167-
),
168-
(
169-
-CDay(),
170-
{
171-
datetime(2008, 1, 1): datetime(2007, 12, 31),
172-
datetime(2008, 1, 4): datetime(2008, 1, 3),
173-
datetime(2008, 1, 5): datetime(2008, 1, 4),
174-
datetime(2008, 1, 6): datetime(2008, 1, 4),
175-
datetime(2008, 1, 7): datetime(2008, 1, 4),
176-
datetime(2008, 1, 8): datetime(2008, 1, 7),
177-
},
178-
),
179-
(
180-
-2 * CDay(),
181-
{
182-
datetime(2008, 1, 1): datetime(2007, 12, 28),
183-
datetime(2008, 1, 4): datetime(2008, 1, 2),
184-
datetime(2008, 1, 5): datetime(2008, 1, 3),
185-
datetime(2008, 1, 6): datetime(2008, 1, 3),
186-
datetime(2008, 1, 7): datetime(2008, 1, 3),
187-
datetime(2008, 1, 8): datetime(2008, 1, 4),
188-
datetime(2008, 1, 9): datetime(2008, 1, 7),
189-
},
190-
),
191-
(
192-
CDay(0),
193-
{
194-
datetime(2008, 1, 1): datetime(2008, 1, 1),
195-
datetime(2008, 1, 4): datetime(2008, 1, 4),
196-
datetime(2008, 1, 5): datetime(2008, 1, 7),
197-
datetime(2008, 1, 6): datetime(2008, 1, 7),
198-
datetime(2008, 1, 7): datetime(2008, 1, 7),
199-
},
200-
),
201-
]
202-
203-
@pytest.mark.parametrize("case", apply_cases)
204-
def test_apply(self, case):
205-
offset, cases = case
206-
for base, expected in cases.items():
207-
assert_offset_equal(offset, base, expected)
208-
209-
def test_apply_large_n(self):
210-
dt = datetime(2012, 10, 23)
211-
212-
result = dt + CDay(10)
213-
assert result == datetime(2012, 11, 6)
214-
215-
result = dt + CDay(100) - CDay(100)
216-
assert result == dt
217-
218-
off = CDay() * 6
219-
rs = datetime(2012, 1, 1) - off
220-
xp = datetime(2011, 12, 23)
221-
assert rs == xp
222-
223-
st = datetime(2011, 12, 18)
224-
rs = st + off
225-
xp = datetime(2011, 12, 26)
226-
assert rs == xp
227-
228-
def test_apply_corner(self):
229-
msg = (
230-
"Only know how to combine trading day "
231-
"with datetime, datetime64 or timedelta"
232-
)
233-
with pytest.raises(ApplyTypeError, match=msg):
234-
CDay().apply(BMonthEnd())
235-
23634
def test_holidays(self):
23735
# Define a TradingDay offset
23836
holidays = ["2012-05-01", datetime(2013, 5, 1), np.datetime64("2014-05-01")]

0 commit comments

Comments
 (0)