|
7 | 7 | timedelta,
|
8 | 8 | )
|
9 | 9 |
|
10 |
| -import numpy as np |
11 | 10 | import pytest
|
12 | 11 |
|
13 | 12 | from pandas._libs.tslibs.offsets import (
|
14 | 13 | ApplyTypeError,
|
15 | 14 | BDay,
|
16 | 15 | BMonthEnd,
|
17 |
| - CDay, |
18 | 16 | )
|
19 |
| -from pandas.compat import np_datetime64_compat |
20 | 17 |
|
21 | 18 | from pandas import (
|
22 | 19 | DatetimeIndex,
|
23 | 20 | _testing as tm,
|
24 |
| - read_pickle, |
25 | 21 | )
|
26 | 22 | from pandas.tests.tseries.offsets.common import (
|
27 | 23 | Base,
|
|
31 | 27 | from pandas.tests.tseries.offsets.test_offsets import _ApplyCases
|
32 | 28 |
|
33 | 29 | from pandas.tseries import offsets as offsets
|
34 |
| -from pandas.tseries.holiday import USFederalHolidayCalendar |
35 | 30 |
|
36 | 31 |
|
37 | 32 | class TestBusinessDay(Base):
|
@@ -212,243 +207,3 @@ def test_apply_corner(self):
|
212 | 207 | msg = "Only know how to combine business day with datetime or timedelta"
|
213 | 208 | with pytest.raises(ApplyTypeError, match=msg):
|
214 | 209 | 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