|
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