From 2ea93f28d3da24672e48175c29a1ae5b6527c0ad Mon Sep 17 00:00:00 2001 From: Brock Date: Tue, 16 Nov 2021 14:27:06 -0800 Subject: [PATCH 1/2] REF/TST: share a bunch of test_custom_business_day --- .../tseries/offsets/test_business_day.py | 50 +++-- .../offsets/test_custom_business_day.py | 201 +----------------- 2 files changed, 35 insertions(+), 216 deletions(-) diff --git a/pandas/tests/tseries/offsets/test_business_day.py b/pandas/tests/tseries/offsets/test_business_day.py index ffc2a04334ffc..64df2a32a73c2 100644 --- a/pandas/tests/tseries/offsets/test_business_day.py +++ b/pandas/tests/tseries/offsets/test_business_day.py @@ -15,6 +15,7 @@ BDay, BMonthEnd, ) +from pandas.compat import np_datetime64_compat from pandas import ( DatetimeIndex, @@ -36,6 +37,7 @@ class TestBusinessDay(Base): def setup_method(self, method): self.d = datetime(2008, 1, 1) + self.nd = np_datetime64_compat("2008-01-01 00:00:00Z") self.offset = BDay() self.offset1 = self.offset @@ -98,21 +100,24 @@ def test_call(self): with tm.assert_produces_warning(FutureWarning): # GH#34171 DateOffset.__call__ is deprecated assert self.offset2(self.d) == datetime(2008, 1, 3) + assert self.offset2(self.nd) == datetime(2008, 1, 3) def testRollback1(self): - assert BDay(10).rollback(self.d) == self.d + assert self._offset(10).rollback(self.d) == self.d def testRollback2(self): - assert BDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4) + assert self._offset(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4) def testRollforward1(self): - assert BDay(10).rollforward(self.d) == self.d + assert self._offset(10).rollforward(self.d) == self.d def testRollforward2(self): - assert BDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7) + assert self._offset(10).rollforward(datetime(2008, 1, 5)) == datetime( + 2008, 1, 7 + ) def test_roll_date_object(self): - offset = BDay() + offset = self._offset() dt = date(2012, 9, 15) @@ -131,8 +136,8 @@ def test_roll_date_object(self): def test_is_on_offset(self): tests = [ - (BDay(), datetime(2008, 1, 1), True), - (BDay(), datetime(2008, 1, 5), False), + (self._offset(), datetime(2008, 1, 1), True), + (self._offset(), datetime(2008, 1, 5), False), ] for offset, d, expected in tests: @@ -140,7 +145,7 @@ def test_is_on_offset(self): apply_cases: _ApplyCases = [ ( - BDay(), + 1, { datetime(2008, 1, 1): datetime(2008, 1, 2), datetime(2008, 1, 4): datetime(2008, 1, 7), @@ -150,7 +155,7 @@ def test_is_on_offset(self): }, ), ( - 2 * BDay(), + 2, { datetime(2008, 1, 1): datetime(2008, 1, 3), datetime(2008, 1, 4): datetime(2008, 1, 8), @@ -160,7 +165,7 @@ def test_is_on_offset(self): }, ), ( - -BDay(), + -1, { datetime(2008, 1, 1): datetime(2007, 12, 31), datetime(2008, 1, 4): datetime(2008, 1, 3), @@ -171,7 +176,7 @@ def test_is_on_offset(self): }, ), ( - -2 * BDay(), + -2, { datetime(2008, 1, 1): datetime(2007, 12, 28), datetime(2008, 1, 4): datetime(2008, 1, 2), @@ -183,7 +188,7 @@ def test_is_on_offset(self): }, ), ( - BDay(0), + 0, { datetime(2008, 1, 1): datetime(2008, 1, 1), datetime(2008, 1, 4): datetime(2008, 1, 4), @@ -196,20 +201,21 @@ def test_is_on_offset(self): @pytest.mark.parametrize("case", apply_cases) def test_apply(self, case): - offset, cases = case + n, cases = case + offset = self._offset(n) for base, expected in cases.items(): assert_offset_equal(offset, base, expected) def test_apply_large_n(self): dt = datetime(2012, 10, 23) - result = dt + BDay(10) + result = dt + self._offset(10) assert result == datetime(2012, 11, 6) - result = dt + BDay(100) - BDay(100) + result = dt + self._offset(100) - self._offset(100) assert result == dt - off = BDay() * 6 + off = self._offset() * 6 rs = datetime(2012, 1, 1) - off xp = datetime(2011, 12, 23) assert rs == xp @@ -219,12 +225,18 @@ def test_apply_large_n(self): xp = datetime(2011, 12, 26) assert rs == xp - off = BDay() * 10 + off = self._offset() * 10 rs = datetime(2014, 1, 5) + off # see #5890 xp = datetime(2014, 1, 17) assert rs == xp def test_apply_corner(self): - msg = "Only know how to combine business day with datetime or timedelta" + if self._offset is BDay: + msg = "Only know how to combine business day with datetime or timedelta" + else: + msg = ( + "Only know how to combine trading day " + "with datetime, datetime64 or timedelta" + ) with pytest.raises(ApplyTypeError, match=msg): - BDay().apply(BMonthEnd()) + self._offset().apply(BMonthEnd()) diff --git a/pandas/tests/tseries/offsets/test_custom_business_day.py b/pandas/tests/tseries/offsets/test_custom_business_day.py index 5847bd11f09df..be46350cc41a2 100644 --- a/pandas/tests/tseries/offsets/test_custom_business_day.py +++ b/pandas/tests/tseries/offsets/test_custom_business_day.py @@ -2,7 +2,6 @@ Tests for offsets.CustomBusinessDay / CDay """ from datetime import ( - date, datetime, timedelta, ) @@ -10,31 +9,20 @@ import numpy as np import pytest -from pandas._libs.tslibs.offsets import ( - ApplyTypeError, - BMonthEnd, - CDay, -) +from pandas._libs.tslibs.offsets import CDay from pandas.compat import np_datetime64_compat from pandas import ( - DatetimeIndex, - Timedelta, _testing as tm, read_pickle, ) -from pandas.tests.tseries.offsets.common import ( - Base, - assert_is_on_offset, - assert_offset_equal, -) -from pandas.tests.tseries.offsets.test_offsets import _ApplyCases +from pandas.tests.tseries.offsets.common import assert_offset_equal +from pandas.tests.tseries.offsets.test_business_day import TestBusinessDay -from pandas.tseries import offsets as offsets from pandas.tseries.holiday import USFederalHolidayCalendar -class TestCustomBusinessDay(Base): +class TestCustomBusinessDay(TestBusinessDay): _offset = CDay def setup_method(self, method): @@ -45,12 +33,6 @@ def setup_method(self, method): self.offset1 = self.offset self.offset2 = CDay(2) - def test_different_normalize_equals(self): - # GH#21404 changed __eq__ to return False when `normalize` does not match - offset = self._offset() - offset2 = self._offset(normalize=True) - assert offset != offset2 - def test_repr(self): assert repr(self.offset) == "" assert repr(self.offset2) == "<2 * CustomBusinessDays>" @@ -58,181 +40,6 @@ def test_repr(self): expected = "" assert repr(self.offset + timedelta(1)) == expected - def test_with_offset(self): - offset = self.offset + timedelta(hours=2) - - assert (self.d + offset) == datetime(2008, 1, 2, 2) - - @pytest.mark.parametrize("reverse", [True, False]) - @pytest.mark.parametrize( - "td", - [ - Timedelta(hours=2), - Timedelta(hours=2).to_pytimedelta(), - Timedelta(hours=2).to_timedelta64(), - ], - ids=lambda x: type(x), - ) - def test_with_offset_index(self, reverse, td, request): - if reverse and isinstance(td, np.timedelta64): - mark = pytest.mark.xfail( - reason="need __array_priority__, but that causes other errors" - ) - request.node.add_marker(mark) - - dti = DatetimeIndex([self.d]) - expected = DatetimeIndex([datetime(2008, 1, 2, 2)]) - - if reverse: - result = dti + (td + self.offset) - else: - result = dti + (self.offset + td) - tm.assert_index_equal(result, expected) - - def test_eq(self): - assert self.offset2 == self.offset2 - - def test_mul(self): - pass - - def test_hash(self): - assert hash(self.offset2) == hash(self.offset2) - - def test_call(self): - with tm.assert_produces_warning(FutureWarning): - # GH#34171 DateOffset.__call__ is deprecated - assert self.offset2(self.d) == datetime(2008, 1, 3) - assert self.offset2(self.nd) == datetime(2008, 1, 3) - - def testRollback1(self): - assert CDay(10).rollback(self.d) == self.d - - def testRollback2(self): - assert CDay(10).rollback(datetime(2008, 1, 5)) == datetime(2008, 1, 4) - - def testRollforward1(self): - assert CDay(10).rollforward(self.d) == self.d - - def testRollforward2(self): - assert CDay(10).rollforward(datetime(2008, 1, 5)) == datetime(2008, 1, 7) - - def test_roll_date_object(self): - offset = CDay() - - dt = date(2012, 9, 15) - - result = offset.rollback(dt) - assert result == datetime(2012, 9, 14) - - result = offset.rollforward(dt) - assert result == datetime(2012, 9, 17) - - offset = offsets.Day() - result = offset.rollback(dt) - assert result == datetime(2012, 9, 15) - - result = offset.rollforward(dt) - assert result == datetime(2012, 9, 15) - - on_offset_cases = [ - (CDay(), datetime(2008, 1, 1), True), - (CDay(), datetime(2008, 1, 5), False), - ] - - @pytest.mark.parametrize("case", on_offset_cases) - def test_is_on_offset(self, case): - offset, day, expected = case - assert_is_on_offset(offset, day, expected) - - apply_cases: _ApplyCases = [ - ( - CDay(), - { - datetime(2008, 1, 1): datetime(2008, 1, 2), - datetime(2008, 1, 4): datetime(2008, 1, 7), - datetime(2008, 1, 5): datetime(2008, 1, 7), - datetime(2008, 1, 6): datetime(2008, 1, 7), - datetime(2008, 1, 7): datetime(2008, 1, 8), - }, - ), - ( - 2 * CDay(), - { - datetime(2008, 1, 1): datetime(2008, 1, 3), - datetime(2008, 1, 4): datetime(2008, 1, 8), - datetime(2008, 1, 5): datetime(2008, 1, 8), - datetime(2008, 1, 6): datetime(2008, 1, 8), - datetime(2008, 1, 7): datetime(2008, 1, 9), - }, - ), - ( - -CDay(), - { - datetime(2008, 1, 1): datetime(2007, 12, 31), - datetime(2008, 1, 4): datetime(2008, 1, 3), - datetime(2008, 1, 5): datetime(2008, 1, 4), - datetime(2008, 1, 6): datetime(2008, 1, 4), - datetime(2008, 1, 7): datetime(2008, 1, 4), - datetime(2008, 1, 8): datetime(2008, 1, 7), - }, - ), - ( - -2 * CDay(), - { - datetime(2008, 1, 1): datetime(2007, 12, 28), - datetime(2008, 1, 4): datetime(2008, 1, 2), - datetime(2008, 1, 5): datetime(2008, 1, 3), - datetime(2008, 1, 6): datetime(2008, 1, 3), - datetime(2008, 1, 7): datetime(2008, 1, 3), - datetime(2008, 1, 8): datetime(2008, 1, 4), - datetime(2008, 1, 9): datetime(2008, 1, 7), - }, - ), - ( - CDay(0), - { - datetime(2008, 1, 1): datetime(2008, 1, 1), - datetime(2008, 1, 4): datetime(2008, 1, 4), - datetime(2008, 1, 5): datetime(2008, 1, 7), - datetime(2008, 1, 6): datetime(2008, 1, 7), - datetime(2008, 1, 7): datetime(2008, 1, 7), - }, - ), - ] - - @pytest.mark.parametrize("case", apply_cases) - def test_apply(self, case): - offset, cases = case - for base, expected in cases.items(): - assert_offset_equal(offset, base, expected) - - def test_apply_large_n(self): - dt = datetime(2012, 10, 23) - - result = dt + CDay(10) - assert result == datetime(2012, 11, 6) - - result = dt + CDay(100) - CDay(100) - assert result == dt - - off = CDay() * 6 - rs = datetime(2012, 1, 1) - off - xp = datetime(2011, 12, 23) - assert rs == xp - - st = datetime(2011, 12, 18) - rs = st + off - xp = datetime(2011, 12, 26) - assert rs == xp - - def test_apply_corner(self): - msg = ( - "Only know how to combine trading day " - "with datetime, datetime64 or timedelta" - ) - with pytest.raises(ApplyTypeError, match=msg): - CDay().apply(BMonthEnd()) - def test_holidays(self): # Define a TradingDay offset holidays = ["2012-05-01", datetime(2013, 5, 1), np.datetime64("2014-05-01")] From 3d7ea5e52605e7bee648ac7d8c436b4faa326c27 Mon Sep 17 00:00:00 2001 From: Brock Date: Tue, 16 Nov 2021 14:29:44 -0800 Subject: [PATCH 2/2] share more --- pandas/tests/tseries/offsets/test_business_day.py | 4 ++-- pandas/tests/tseries/offsets/test_custom_business_day.py | 9 --------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/pandas/tests/tseries/offsets/test_business_day.py b/pandas/tests/tseries/offsets/test_business_day.py index 64df2a32a73c2..92176515b6b6f 100644 --- a/pandas/tests/tseries/offsets/test_business_day.py +++ b/pandas/tests/tseries/offsets/test_business_day.py @@ -39,9 +39,9 @@ def setup_method(self, method): self.d = datetime(2008, 1, 1) self.nd = np_datetime64_compat("2008-01-01 00:00:00Z") - self.offset = BDay() + self.offset = self._offset() self.offset1 = self.offset - self.offset2 = BDay(2) + self.offset2 = self._offset(2) def test_different_normalize_equals(self): # GH#21404 changed __eq__ to return False when `normalize` does not match diff --git a/pandas/tests/tseries/offsets/test_custom_business_day.py b/pandas/tests/tseries/offsets/test_custom_business_day.py index be46350cc41a2..3bbbaa891709f 100644 --- a/pandas/tests/tseries/offsets/test_custom_business_day.py +++ b/pandas/tests/tseries/offsets/test_custom_business_day.py @@ -10,7 +10,6 @@ import pytest from pandas._libs.tslibs.offsets import CDay -from pandas.compat import np_datetime64_compat from pandas import ( _testing as tm, @@ -25,14 +24,6 @@ class TestCustomBusinessDay(TestBusinessDay): _offset = CDay - def setup_method(self, method): - self.d = datetime(2008, 1, 1) - self.nd = np_datetime64_compat("2008-01-01 00:00:00Z") - - self.offset = CDay() - self.offset1 = self.offset - self.offset2 = CDay(2) - def test_repr(self): assert repr(self.offset) == "" assert repr(self.offset2) == "<2 * CustomBusinessDays>"