Skip to content

Commit 1f44215

Browse files
committed
TST: move custom business day tests to own file (pandas-dev#27085)
1 parent 6ef154e commit 1f44215

File tree

2 files changed

+273
-245
lines changed

2 files changed

+273
-245
lines changed

pandas/tests/tseries/offsets/test_business_day.py

-245
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,17 @@
77
timedelta,
88
)
99

10-
import numpy as np
1110
import pytest
1211

1312
from pandas._libs.tslibs.offsets import (
1413
ApplyTypeError,
1514
BDay,
1615
BMonthEnd,
17-
CDay,
1816
)
19-
from pandas.compat import np_datetime64_compat
2017

2118
from pandas import (
2219
DatetimeIndex,
2320
_testing as tm,
24-
read_pickle,
2521
)
2622
from pandas.tests.tseries.offsets.common import (
2723
Base,
@@ -31,7 +27,6 @@
3127
from pandas.tests.tseries.offsets.test_offsets import _ApplyCases
3228

3329
from pandas.tseries import offsets as offsets
34-
from pandas.tseries.holiday import USFederalHolidayCalendar
3530

3631

3732
class TestBusinessDay(Base):
@@ -212,243 +207,3 @@ def test_apply_corner(self):
212207
msg = "Only know how to combine business day with datetime or timedelta"
213208
with pytest.raises(ApplyTypeError, match=msg):
214209
BDay().apply(BMonthEnd())
215-
216-
217-
class TestCustomBusinessDay(Base):
218-
_offset = CDay
219-
220-
def setup_method(self, method):
221-
self.d = datetime(2008, 1, 1)
222-
self.nd = np_datetime64_compat("2008-01-01 00:00:00Z")
223-
224-
self.offset = CDay()
225-
self.offset1 = self.offset
226-
self.offset2 = CDay(2)
227-
228-
def test_different_normalize_equals(self):
229-
# GH#21404 changed __eq__ to return False when `normalize` does not match
230-
offset = self._offset()
231-
offset2 = self._offset(normalize=True)
232-
assert offset != offset2
233-
234-
def test_repr(self):
235-
assert repr(self.offset) == "<CustomBusinessDay>"
236-
assert repr(self.offset2) == "<2 * CustomBusinessDays>"
237-
238-
expected = "<BusinessDay: offset=datetime.timedelta(days=1)>"
239-
assert repr(self.offset + timedelta(1)) == expected
240-
241-
def test_with_offset(self):
242-
offset = self.offset + timedelta(hours=2)
243-
244-
assert (self.d + offset) == datetime(2008, 1, 2, 2)
245-
246-
def test_with_offset_index(self):
247-
dti = DatetimeIndex([self.d])
248-
result = dti + (self.offset + timedelta(hours=2))
249-
250-
expected = DatetimeIndex([datetime(2008, 1, 2, 2)])
251-
tm.assert_index_equal(result, expected)
252-
253-
def test_eq(self):
254-
assert self.offset2 == self.offset2
255-
256-
def test_mul(self):
257-
pass
258-
259-
def test_hash(self):
260-
assert hash(self.offset2) == hash(self.offset2)
261-
262-
def test_call(self):
263-
with tm.assert_produces_warning(FutureWarning):
264-
# GH#34171 DateOffset.__call__ is deprecated
265-
assert self.offset2(self.d) == datetime(2008, 1, 3)
266-
assert self.offset2(self.nd) == datetime(2008, 1, 3)
267-
268-
def testRollback1(self):
269-
assert CDay(10).rollback(self.d) == self.d
270-
271-
def testRollback2(self):
272-
assert CDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4)
273-
274-
def testRollforward1(self):
275-
assert CDay(10).rollforward(self.d) == self.d
276-
277-
def testRollforward2(self):
278-
assert CDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7)
279-
280-
def test_roll_date_object(self):
281-
offset = CDay()
282-
283-
dt = date(2012, 9, 15)
284-
285-
result = offset.rollback(dt)
286-
assert result == datetime(2012, 9, 14)
287-
288-
result = offset.rollforward(dt)
289-
assert result == datetime(2012, 9, 17)
290-
291-
offset = offsets.Day()
292-
result = offset.rollback(dt)
293-
assert result == datetime(2012, 9, 15)
294-
295-
result = offset.rollforward(dt)
296-
assert result == datetime(2012, 9, 15)
297-
298-
on_offset_cases = [
299-
(CDay(), datetime(2008, 1, 1), True),
300-
(CDay(), datetime(2008, 1, 5), False),
301-
]
302-
303-
@pytest.mark.parametrize("case", on_offset_cases)
304-
def test_is_on_offset(self, case):
305-
offset, d, expected = case
306-
assert_is_on_offset(offset, d, expected)
307-
308-
apply_cases: _ApplyCases = [
309-
(
310-
CDay(),
311-
{
312-
datetime(2008, 1, 1): datetime(2008, 1, 2),
313-
datetime(2008, 1, 4): datetime(2008, 1, 7),
314-
datetime(2008, 1, 5): datetime(2008, 1, 7),
315-
datetime(2008, 1, 6): datetime(2008, 1, 7),
316-
datetime(2008, 1, 7): datetime(2008, 1, 8),
317-
},
318-
),
319-
(
320-
2 * CDay(),
321-
{
322-
datetime(2008, 1, 1): datetime(2008, 1, 3),
323-
datetime(2008, 1, 4): datetime(2008, 1, 8),
324-
datetime(2008, 1, 5): datetime(2008, 1, 8),
325-
datetime(2008, 1, 6): datetime(2008, 1, 8),
326-
datetime(2008, 1, 7): datetime(2008, 1, 9),
327-
},
328-
),
329-
(
330-
-CDay(),
331-
{
332-
datetime(2008, 1, 1): datetime(2007, 12, 31),
333-
datetime(2008, 1, 4): datetime(2008, 1, 3),
334-
datetime(2008, 1, 5): datetime(2008, 1, 4),
335-
datetime(2008, 1, 6): datetime(2008, 1, 4),
336-
datetime(2008, 1, 7): datetime(2008, 1, 4),
337-
datetime(2008, 1, 8): datetime(2008, 1, 7),
338-
},
339-
),
340-
(
341-
-2 * CDay(),
342-
{
343-
datetime(2008, 1, 1): datetime(2007, 12, 28),
344-
datetime(2008, 1, 4): datetime(2008, 1, 2),
345-
datetime(2008, 1, 5): datetime(2008, 1, 3),
346-
datetime(2008, 1, 6): datetime(2008, 1, 3),
347-
datetime(2008, 1, 7): datetime(2008, 1, 3),
348-
datetime(2008, 1, 8): datetime(2008, 1, 4),
349-
datetime(2008, 1, 9): datetime(2008, 1, 7),
350-
},
351-
),
352-
(
353-
CDay(0),
354-
{
355-
datetime(2008, 1, 1): datetime(2008, 1, 1),
356-
datetime(2008, 1, 4): datetime(2008, 1, 4),
357-
datetime(2008, 1, 5): datetime(2008, 1, 7),
358-
datetime(2008, 1, 6): datetime(2008, 1, 7),
359-
datetime(2008, 1, 7): datetime(2008, 1, 7),
360-
},
361-
),
362-
]
363-
364-
@pytest.mark.parametrize("case", apply_cases)
365-
def test_apply(self, case):
366-
offset, cases = case
367-
for base, expected in cases.items():
368-
assert_offset_equal(offset, base, expected)
369-
370-
def test_apply_large_n(self):
371-
dt = datetime(2012, 10, 23)
372-
373-
result = dt + CDay(10)
374-
assert result == datetime(2012, 11, 6)
375-
376-
result = dt + CDay(100) - CDay(100)
377-
assert result == dt
378-
379-
off = CDay() * 6
380-
rs = datetime(2012, 1, 1) - off
381-
xp = datetime(2011, 12, 23)
382-
assert rs == xp
383-
384-
st = datetime(2011, 12, 18)
385-
rs = st + off
386-
xp = datetime(2011, 12, 26)
387-
assert rs == xp
388-
389-
def test_apply_corner(self):
390-
msg = (
391-
"Only know how to combine trading day "
392-
"with datetime, datetime64 or timedelta"
393-
)
394-
with pytest.raises(ApplyTypeError, match=msg):
395-
CDay().apply(BMonthEnd())
396-
397-
def test_holidays(self):
398-
# Define a TradingDay offset
399-
holidays = ["2012-05-01", datetime(2013, 5, 1), np.datetime64("2014-05-01")]
400-
tday = CDay(holidays=holidays)
401-
for year in range(2012, 2015):
402-
dt = datetime(year, 4, 30)
403-
xp = datetime(year, 5, 2)
404-
rs = dt + tday
405-
assert rs == xp
406-
407-
def test_weekmask(self):
408-
weekmask_saudi = "Sat Sun Mon Tue Wed" # Thu-Fri Weekend
409-
weekmask_uae = "1111001" # Fri-Sat Weekend
410-
weekmask_egypt = [1, 1, 1, 1, 0, 0, 1] # Fri-Sat Weekend
411-
bday_saudi = CDay(weekmask=weekmask_saudi)
412-
bday_uae = CDay(weekmask=weekmask_uae)
413-
bday_egypt = CDay(weekmask=weekmask_egypt)
414-
dt = datetime(2013, 5, 1)
415-
xp_saudi = datetime(2013, 5, 4)
416-
xp_uae = datetime(2013, 5, 2)
417-
xp_egypt = datetime(2013, 5, 2)
418-
assert xp_saudi == dt + bday_saudi
419-
assert xp_uae == dt + bday_uae
420-
assert xp_egypt == dt + bday_egypt
421-
xp2 = datetime(2013, 5, 5)
422-
assert xp2 == dt + 2 * bday_saudi
423-
assert xp2 == dt + 2 * bday_uae
424-
assert xp2 == dt + 2 * bday_egypt
425-
426-
def test_weekmask_and_holidays(self):
427-
weekmask_egypt = "Sun Mon Tue Wed Thu" # Fri-Sat Weekend
428-
holidays = ["2012-05-01", datetime(2013, 5, 1), np.datetime64("2014-05-01")]
429-
bday_egypt = CDay(holidays=holidays, weekmask=weekmask_egypt)
430-
dt = datetime(2013, 4, 30)
431-
xp_egypt = datetime(2013, 5, 5)
432-
assert xp_egypt == dt + 2 * bday_egypt
433-
434-
@pytest.mark.filterwarnings("ignore:Non:pandas.errors.PerformanceWarning")
435-
def test_calendar(self):
436-
calendar = USFederalHolidayCalendar()
437-
dt = datetime(2014, 1, 17)
438-
assert_offset_equal(CDay(calendar=calendar), dt, datetime(2014, 1, 21))
439-
440-
def test_roundtrip_pickle(self):
441-
def _check_roundtrip(obj):
442-
unpickled = tm.round_trip_pickle(obj)
443-
assert unpickled == obj
444-
445-
_check_roundtrip(self.offset)
446-
_check_roundtrip(self.offset2)
447-
_check_roundtrip(self.offset * 2)
448-
449-
def test_pickle_compat_0_14_1(self, datapath):
450-
hdays = [datetime(2013, 1, 1) for ele in range(4)]
451-
pth = datapath("tseries", "offsets", "data", "cday-0.14.1.pickle")
452-
cday0_14_1 = read_pickle(pth)
453-
cday = CDay(holidays=hdays)
454-
assert cday == cday0_14_1

0 commit comments

Comments
 (0)