Skip to content

Commit 0a44a51

Browse files
authored
TST: reorganize misplaced quarter / business quarter tests (#27085) (#42932)
1 parent 8fb347f commit 0a44a51

File tree

3 files changed

+609
-563
lines changed

3 files changed

+609
-563
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,311 @@
1+
"""
2+
Tests for the following offsets:
3+
- BQuarterBegin
4+
- BQuarterEnd
5+
"""
6+
from datetime import datetime
7+
8+
import pytest
9+
10+
from pandas.tests.tseries.offsets.common import (
11+
Base,
12+
assert_is_on_offset,
13+
assert_offset_equal,
14+
)
15+
16+
from pandas.tseries.offsets import (
17+
BQuarterBegin,
18+
BQuarterEnd,
19+
)
20+
21+
22+
def test_quarterly_dont_normalize():
23+
date = datetime(2012, 3, 31, 5, 30)
24+
25+
offsets = (BQuarterEnd, BQuarterBegin)
26+
27+
for klass in offsets:
28+
result = date + klass()
29+
assert result.time() == date.time()
30+
31+
32+
@pytest.mark.parametrize("offset", [BQuarterBegin(), BQuarterEnd()])
33+
def test_on_offset(offset):
34+
dates = [
35+
datetime(2016, m, d)
36+
for m in [10, 11, 12]
37+
for d in [1, 2, 3, 28, 29, 30, 31]
38+
if not (m == 11 and d == 31)
39+
]
40+
for date in dates:
41+
res = offset.is_on_offset(date)
42+
slow_version = date == (date + offset) - offset
43+
assert res == slow_version
44+
45+
46+
class TestBQuarterBegin(Base):
47+
_offset = BQuarterBegin
48+
49+
def test_repr(self):
50+
expected = "<BusinessQuarterBegin: startingMonth=3>"
51+
assert repr(BQuarterBegin()) == expected
52+
expected = "<BusinessQuarterBegin: startingMonth=3>"
53+
assert repr(BQuarterBegin(startingMonth=3)) == expected
54+
expected = "<BusinessQuarterBegin: startingMonth=1>"
55+
assert repr(BQuarterBegin(startingMonth=1)) == expected
56+
57+
def test_is_anchored(self):
58+
assert BQuarterBegin(startingMonth=1).is_anchored()
59+
assert BQuarterBegin().is_anchored()
60+
assert not BQuarterBegin(2, startingMonth=1).is_anchored()
61+
62+
def test_offset_corner_case(self):
63+
# corner
64+
offset = BQuarterBegin(n=-1, startingMonth=1)
65+
assert datetime(2007, 4, 3) + offset == datetime(2007, 4, 2)
66+
67+
offset_cases = []
68+
offset_cases.append(
69+
(
70+
BQuarterBegin(startingMonth=1),
71+
{
72+
datetime(2008, 1, 1): datetime(2008, 4, 1),
73+
datetime(2008, 1, 31): datetime(2008, 4, 1),
74+
datetime(2008, 2, 15): datetime(2008, 4, 1),
75+
datetime(2008, 2, 29): datetime(2008, 4, 1),
76+
datetime(2008, 3, 15): datetime(2008, 4, 1),
77+
datetime(2008, 3, 31): datetime(2008, 4, 1),
78+
datetime(2008, 4, 15): datetime(2008, 7, 1),
79+
datetime(2007, 3, 15): datetime(2007, 4, 2),
80+
datetime(2007, 2, 28): datetime(2007, 4, 2),
81+
datetime(2007, 1, 1): datetime(2007, 4, 2),
82+
datetime(2007, 4, 15): datetime(2007, 7, 2),
83+
datetime(2007, 7, 1): datetime(2007, 7, 2),
84+
datetime(2007, 4, 1): datetime(2007, 4, 2),
85+
datetime(2007, 4, 2): datetime(2007, 7, 2),
86+
datetime(2008, 4, 30): datetime(2008, 7, 1),
87+
},
88+
)
89+
)
90+
91+
offset_cases.append(
92+
(
93+
BQuarterBegin(startingMonth=2),
94+
{
95+
datetime(2008, 1, 1): datetime(2008, 2, 1),
96+
datetime(2008, 1, 31): datetime(2008, 2, 1),
97+
datetime(2008, 1, 15): datetime(2008, 2, 1),
98+
datetime(2008, 2, 29): datetime(2008, 5, 1),
99+
datetime(2008, 3, 15): datetime(2008, 5, 1),
100+
datetime(2008, 3, 31): datetime(2008, 5, 1),
101+
datetime(2008, 4, 15): datetime(2008, 5, 1),
102+
datetime(2008, 8, 15): datetime(2008, 11, 3),
103+
datetime(2008, 9, 15): datetime(2008, 11, 3),
104+
datetime(2008, 11, 1): datetime(2008, 11, 3),
105+
datetime(2008, 4, 30): datetime(2008, 5, 1),
106+
},
107+
)
108+
)
109+
110+
offset_cases.append(
111+
(
112+
BQuarterBegin(startingMonth=1, n=0),
113+
{
114+
datetime(2008, 1, 1): datetime(2008, 1, 1),
115+
datetime(2007, 12, 31): datetime(2008, 1, 1),
116+
datetime(2008, 2, 15): datetime(2008, 4, 1),
117+
datetime(2008, 2, 29): datetime(2008, 4, 1),
118+
datetime(2008, 1, 15): datetime(2008, 4, 1),
119+
datetime(2008, 2, 27): datetime(2008, 4, 1),
120+
datetime(2008, 3, 15): datetime(2008, 4, 1),
121+
datetime(2007, 4, 1): datetime(2007, 4, 2),
122+
datetime(2007, 4, 2): datetime(2007, 4, 2),
123+
datetime(2007, 7, 1): datetime(2007, 7, 2),
124+
datetime(2007, 4, 15): datetime(2007, 7, 2),
125+
datetime(2007, 7, 2): datetime(2007, 7, 2),
126+
},
127+
)
128+
)
129+
130+
offset_cases.append(
131+
(
132+
BQuarterBegin(startingMonth=1, n=-1),
133+
{
134+
datetime(2008, 1, 1): datetime(2007, 10, 1),
135+
datetime(2008, 1, 31): datetime(2008, 1, 1),
136+
datetime(2008, 2, 15): datetime(2008, 1, 1),
137+
datetime(2008, 2, 29): datetime(2008, 1, 1),
138+
datetime(2008, 3, 15): datetime(2008, 1, 1),
139+
datetime(2008, 3, 31): datetime(2008, 1, 1),
140+
datetime(2008, 4, 15): datetime(2008, 4, 1),
141+
datetime(2007, 7, 3): datetime(2007, 7, 2),
142+
datetime(2007, 4, 3): datetime(2007, 4, 2),
143+
datetime(2007, 7, 2): datetime(2007, 4, 2),
144+
datetime(2008, 4, 1): datetime(2008, 1, 1),
145+
},
146+
)
147+
)
148+
149+
offset_cases.append(
150+
(
151+
BQuarterBegin(startingMonth=1, n=2),
152+
{
153+
datetime(2008, 1, 1): datetime(2008, 7, 1),
154+
datetime(2008, 1, 15): datetime(2008, 7, 1),
155+
datetime(2008, 2, 29): datetime(2008, 7, 1),
156+
datetime(2008, 3, 15): datetime(2008, 7, 1),
157+
datetime(2007, 3, 31): datetime(2007, 7, 2),
158+
datetime(2007, 4, 15): datetime(2007, 10, 1),
159+
datetime(2008, 4, 30): datetime(2008, 10, 1),
160+
},
161+
)
162+
)
163+
164+
@pytest.mark.parametrize("case", offset_cases)
165+
def test_offset(self, case):
166+
offset, cases = case
167+
for base, expected in cases.items():
168+
assert_offset_equal(offset, base, expected)
169+
170+
171+
class TestBQuarterEnd(Base):
172+
_offset = BQuarterEnd
173+
174+
def test_repr(self):
175+
expected = "<BusinessQuarterEnd: startingMonth=3>"
176+
assert repr(BQuarterEnd()) == expected
177+
expected = "<BusinessQuarterEnd: startingMonth=3>"
178+
assert repr(BQuarterEnd(startingMonth=3)) == expected
179+
expected = "<BusinessQuarterEnd: startingMonth=1>"
180+
assert repr(BQuarterEnd(startingMonth=1)) == expected
181+
182+
def test_is_anchored(self):
183+
assert BQuarterEnd(startingMonth=1).is_anchored()
184+
assert BQuarterEnd().is_anchored()
185+
assert not BQuarterEnd(2, startingMonth=1).is_anchored()
186+
187+
def test_offset_corner_case(self):
188+
# corner
189+
offset = BQuarterEnd(n=-1, startingMonth=1)
190+
assert datetime(2010, 1, 31) + offset == datetime(2010, 1, 29)
191+
192+
offset_cases = []
193+
offset_cases.append(
194+
(
195+
BQuarterEnd(startingMonth=1),
196+
{
197+
datetime(2008, 1, 1): datetime(2008, 1, 31),
198+
datetime(2008, 1, 31): datetime(2008, 4, 30),
199+
datetime(2008, 2, 15): datetime(2008, 4, 30),
200+
datetime(2008, 2, 29): datetime(2008, 4, 30),
201+
datetime(2008, 3, 15): datetime(2008, 4, 30),
202+
datetime(2008, 3, 31): datetime(2008, 4, 30),
203+
datetime(2008, 4, 15): datetime(2008, 4, 30),
204+
datetime(2008, 4, 30): datetime(2008, 7, 31),
205+
},
206+
)
207+
)
208+
209+
offset_cases.append(
210+
(
211+
BQuarterEnd(startingMonth=2),
212+
{
213+
datetime(2008, 1, 1): datetime(2008, 2, 29),
214+
datetime(2008, 1, 31): datetime(2008, 2, 29),
215+
datetime(2008, 2, 15): datetime(2008, 2, 29),
216+
datetime(2008, 2, 29): datetime(2008, 5, 30),
217+
datetime(2008, 3, 15): datetime(2008, 5, 30),
218+
datetime(2008, 3, 31): datetime(2008, 5, 30),
219+
datetime(2008, 4, 15): datetime(2008, 5, 30),
220+
datetime(2008, 4, 30): datetime(2008, 5, 30),
221+
},
222+
)
223+
)
224+
225+
offset_cases.append(
226+
(
227+
BQuarterEnd(startingMonth=1, n=0),
228+
{
229+
datetime(2008, 1, 1): datetime(2008, 1, 31),
230+
datetime(2008, 1, 31): datetime(2008, 1, 31),
231+
datetime(2008, 2, 15): datetime(2008, 4, 30),
232+
datetime(2008, 2, 29): datetime(2008, 4, 30),
233+
datetime(2008, 3, 15): datetime(2008, 4, 30),
234+
datetime(2008, 3, 31): datetime(2008, 4, 30),
235+
datetime(2008, 4, 15): datetime(2008, 4, 30),
236+
datetime(2008, 4, 30): datetime(2008, 4, 30),
237+
},
238+
)
239+
)
240+
241+
offset_cases.append(
242+
(
243+
BQuarterEnd(startingMonth=1, n=-1),
244+
{
245+
datetime(2008, 1, 1): datetime(2007, 10, 31),
246+
datetime(2008, 1, 31): datetime(2007, 10, 31),
247+
datetime(2008, 2, 15): datetime(2008, 1, 31),
248+
datetime(2008, 2, 29): datetime(2008, 1, 31),
249+
datetime(2008, 3, 15): datetime(2008, 1, 31),
250+
datetime(2008, 3, 31): datetime(2008, 1, 31),
251+
datetime(2008, 4, 15): datetime(2008, 1, 31),
252+
datetime(2008, 4, 30): datetime(2008, 1, 31),
253+
},
254+
)
255+
)
256+
257+
offset_cases.append(
258+
(
259+
BQuarterEnd(startingMonth=1, n=2),
260+
{
261+
datetime(2008, 1, 31): datetime(2008, 7, 31),
262+
datetime(2008, 2, 15): datetime(2008, 7, 31),
263+
datetime(2008, 2, 29): datetime(2008, 7, 31),
264+
datetime(2008, 3, 15): datetime(2008, 7, 31),
265+
datetime(2008, 3, 31): datetime(2008, 7, 31),
266+
datetime(2008, 4, 15): datetime(2008, 7, 31),
267+
datetime(2008, 4, 30): datetime(2008, 10, 31),
268+
},
269+
)
270+
)
271+
272+
@pytest.mark.parametrize("case", offset_cases)
273+
def test_offset(self, case):
274+
offset, cases = case
275+
for base, expected in cases.items():
276+
assert_offset_equal(offset, base, expected)
277+
278+
on_offset_cases = [
279+
(BQuarterEnd(1, startingMonth=1), datetime(2008, 1, 31), True),
280+
(BQuarterEnd(1, startingMonth=1), datetime(2007, 12, 31), False),
281+
(BQuarterEnd(1, startingMonth=1), datetime(2008, 2, 29), False),
282+
(BQuarterEnd(1, startingMonth=1), datetime(2007, 3, 30), False),
283+
(BQuarterEnd(1, startingMonth=1), datetime(2007, 3, 31), False),
284+
(BQuarterEnd(1, startingMonth=1), datetime(2008, 4, 30), True),
285+
(BQuarterEnd(1, startingMonth=1), datetime(2008, 5, 30), False),
286+
(BQuarterEnd(1, startingMonth=1), datetime(2007, 6, 29), False),
287+
(BQuarterEnd(1, startingMonth=1), datetime(2007, 6, 30), False),
288+
(BQuarterEnd(1, startingMonth=2), datetime(2008, 1, 31), False),
289+
(BQuarterEnd(1, startingMonth=2), datetime(2007, 12, 31), False),
290+
(BQuarterEnd(1, startingMonth=2), datetime(2008, 2, 29), True),
291+
(BQuarterEnd(1, startingMonth=2), datetime(2007, 3, 30), False),
292+
(BQuarterEnd(1, startingMonth=2), datetime(2007, 3, 31), False),
293+
(BQuarterEnd(1, startingMonth=2), datetime(2008, 4, 30), False),
294+
(BQuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), True),
295+
(BQuarterEnd(1, startingMonth=2), datetime(2007, 6, 29), False),
296+
(BQuarterEnd(1, startingMonth=2), datetime(2007, 6, 30), False),
297+
(BQuarterEnd(1, startingMonth=3), datetime(2008, 1, 31), False),
298+
(BQuarterEnd(1, startingMonth=3), datetime(2007, 12, 31), True),
299+
(BQuarterEnd(1, startingMonth=3), datetime(2008, 2, 29), False),
300+
(BQuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), True),
301+
(BQuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False),
302+
(BQuarterEnd(1, startingMonth=3), datetime(2008, 4, 30), False),
303+
(BQuarterEnd(1, startingMonth=3), datetime(2008, 5, 30), False),
304+
(BQuarterEnd(1, startingMonth=3), datetime(2007, 6, 29), True),
305+
(BQuarterEnd(1, startingMonth=3), datetime(2007, 6, 30), False),
306+
]
307+
308+
@pytest.mark.parametrize("case", on_offset_cases)
309+
def test_is_on_offset(self, case):
310+
offset, dt, expected = case
311+
assert_is_on_offset(offset, dt, expected)

0 commit comments

Comments
 (0)