Skip to content

Commit 7ca7b2d

Browse files
committed
TST: reorganize misplaced quarter / business quarter tests (pandas-dev#27085)
1 parent 08d296f commit 7ca7b2d

File tree

3 files changed

+613
-551
lines changed

3 files changed

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

0 commit comments

Comments
 (0)