123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677 |
- """
- Tests for the following offsets:
- - SemiMonthBegin
- - SemiMonthEnd
- - MonthBegin
- - MonthEnd
- """
- from __future__ import annotations
- from datetime import datetime
- import pytest
- from pandas._libs.tslibs import Timestamp
- from pandas._libs.tslibs.offsets import (
- MonthBegin,
- MonthEnd,
- SemiMonthBegin,
- SemiMonthEnd,
- )
- from pandas import (
- DatetimeIndex,
- Series,
- _testing as tm,
- date_range,
- )
- from pandas.tests.tseries.offsets.common import (
- assert_is_on_offset,
- assert_offset_equal,
- )
- class TestSemiMonthEnd:
- def test_offset_whole_year(self):
- dates = (
- datetime(2007, 12, 31),
- datetime(2008, 1, 15),
- datetime(2008, 1, 31),
- datetime(2008, 2, 15),
- datetime(2008, 2, 29),
- datetime(2008, 3, 15),
- datetime(2008, 3, 31),
- datetime(2008, 4, 15),
- datetime(2008, 4, 30),
- datetime(2008, 5, 15),
- datetime(2008, 5, 31),
- datetime(2008, 6, 15),
- datetime(2008, 6, 30),
- datetime(2008, 7, 15),
- datetime(2008, 7, 31),
- datetime(2008, 8, 15),
- datetime(2008, 8, 31),
- datetime(2008, 9, 15),
- datetime(2008, 9, 30),
- datetime(2008, 10, 15),
- datetime(2008, 10, 31),
- datetime(2008, 11, 15),
- datetime(2008, 11, 30),
- datetime(2008, 12, 15),
- datetime(2008, 12, 31),
- )
- for base, exp_date in zip(dates[:-1], dates[1:]):
- assert_offset_equal(SemiMonthEnd(), base, exp_date)
- # ensure .apply_index works as expected
- shift = DatetimeIndex(dates[:-1])
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = SemiMonthEnd() + shift
- exp = DatetimeIndex(dates[1:])
- tm.assert_index_equal(result, exp)
- # ensure generating a range with DatetimeIndex gives same result
- result = date_range(start=dates[0], end=dates[-1], freq="SM")
- exp = DatetimeIndex(dates, freq="SM")
- tm.assert_index_equal(result, exp)
- offset_cases = []
- offset_cases.append(
- (
- SemiMonthEnd(),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 15),
- datetime(2008, 1, 15): datetime(2008, 1, 31),
- datetime(2008, 1, 31): datetime(2008, 2, 15),
- datetime(2006, 12, 14): datetime(2006, 12, 15),
- datetime(2006, 12, 29): datetime(2006, 12, 31),
- datetime(2006, 12, 31): datetime(2007, 1, 15),
- datetime(2007, 1, 1): datetime(2007, 1, 15),
- datetime(2006, 12, 1): datetime(2006, 12, 15),
- datetime(2006, 12, 15): datetime(2006, 12, 31),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(day_of_month=20),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 20),
- datetime(2008, 1, 15): datetime(2008, 1, 20),
- datetime(2008, 1, 21): datetime(2008, 1, 31),
- datetime(2008, 1, 31): datetime(2008, 2, 20),
- datetime(2006, 12, 14): datetime(2006, 12, 20),
- datetime(2006, 12, 29): datetime(2006, 12, 31),
- datetime(2006, 12, 31): datetime(2007, 1, 20),
- datetime(2007, 1, 1): datetime(2007, 1, 20),
- datetime(2006, 12, 1): datetime(2006, 12, 20),
- datetime(2006, 12, 15): datetime(2006, 12, 20),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(0),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 15),
- datetime(2008, 1, 16): datetime(2008, 1, 31),
- datetime(2008, 1, 15): datetime(2008, 1, 15),
- datetime(2008, 1, 31): datetime(2008, 1, 31),
- datetime(2006, 12, 29): datetime(2006, 12, 31),
- datetime(2006, 12, 31): datetime(2006, 12, 31),
- datetime(2007, 1, 1): datetime(2007, 1, 15),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(0, day_of_month=16),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 16),
- datetime(2008, 1, 16): datetime(2008, 1, 16),
- datetime(2008, 1, 15): datetime(2008, 1, 16),
- datetime(2008, 1, 31): datetime(2008, 1, 31),
- datetime(2006, 12, 29): datetime(2006, 12, 31),
- datetime(2006, 12, 31): datetime(2006, 12, 31),
- datetime(2007, 1, 1): datetime(2007, 1, 16),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(2),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 31),
- datetime(2008, 1, 31): datetime(2008, 2, 29),
- datetime(2006, 12, 29): datetime(2007, 1, 15),
- datetime(2006, 12, 31): datetime(2007, 1, 31),
- datetime(2007, 1, 1): datetime(2007, 1, 31),
- datetime(2007, 1, 16): datetime(2007, 2, 15),
- datetime(2006, 11, 1): datetime(2006, 11, 30),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(-1),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 31),
- datetime(2008, 6, 30): datetime(2008, 6, 15),
- datetime(2008, 12, 31): datetime(2008, 12, 15),
- datetime(2006, 12, 29): datetime(2006, 12, 15),
- datetime(2006, 12, 30): datetime(2006, 12, 15),
- datetime(2007, 1, 1): datetime(2006, 12, 31),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(-1, day_of_month=4),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 31),
- datetime(2007, 1, 4): datetime(2006, 12, 31),
- datetime(2008, 6, 30): datetime(2008, 6, 4),
- datetime(2008, 12, 31): datetime(2008, 12, 4),
- datetime(2006, 12, 5): datetime(2006, 12, 4),
- datetime(2006, 12, 30): datetime(2006, 12, 4),
- datetime(2007, 1, 1): datetime(2006, 12, 31),
- },
- )
- )
- offset_cases.append(
- (
- SemiMonthEnd(-2),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 15),
- datetime(2008, 6, 30): datetime(2008, 5, 31),
- datetime(2008, 3, 15): datetime(2008, 2, 15),
- datetime(2008, 12, 31): datetime(2008, 11, 30),
- datetime(2006, 12, 29): datetime(2006, 11, 30),
- datetime(2006, 12, 14): datetime(2006, 11, 15),
- datetime(2007, 1, 1): datetime(2006, 12, 15),
- },
- )
- )
- @pytest.mark.parametrize("case", offset_cases)
- def test_offset(self, case):
- offset, cases = case
- for base, expected in cases.items():
- assert_offset_equal(offset, base, expected)
- @pytest.mark.parametrize("case", offset_cases)
- def test_apply_index(self, case):
- # https://github.com/pandas-dev/pandas/issues/34580
- offset, cases = case
- shift = DatetimeIndex(cases.keys())
- exp = DatetimeIndex(cases.values())
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = offset + shift
- tm.assert_index_equal(result, exp)
- on_offset_cases = [
- (datetime(2007, 12, 31), True),
- (datetime(2007, 12, 15), True),
- (datetime(2007, 12, 14), False),
- (datetime(2007, 12, 1), False),
- (datetime(2008, 2, 29), True),
- ]
- @pytest.mark.parametrize("case", on_offset_cases)
- def test_is_on_offset(self, case):
- dt, expected = case
- assert_is_on_offset(SemiMonthEnd(), dt, expected)
- @pytest.mark.parametrize("klass", [Series, DatetimeIndex])
- def test_vectorized_offset_addition(self, klass):
- shift = klass(
- [
- Timestamp("2000-01-15 00:15:00", tz="US/Central"),
- Timestamp("2000-02-15", tz="US/Central"),
- ],
- name="a",
- )
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = shift + SemiMonthEnd()
- result2 = SemiMonthEnd() + shift
- exp = klass(
- [
- Timestamp("2000-01-31 00:15:00", tz="US/Central"),
- Timestamp("2000-02-29", tz="US/Central"),
- ],
- name="a",
- )
- tm.assert_equal(result, exp)
- tm.assert_equal(result2, exp)
- shift = klass(
- [
- Timestamp("2000-01-01 00:15:00", tz="US/Central"),
- Timestamp("2000-02-01", tz="US/Central"),
- ],
- name="a",
- )
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = shift + SemiMonthEnd()
- result2 = SemiMonthEnd() + shift
- exp = klass(
- [
- Timestamp("2000-01-15 00:15:00", tz="US/Central"),
- Timestamp("2000-02-15", tz="US/Central"),
- ],
- name="a",
- )
- tm.assert_equal(result, exp)
- tm.assert_equal(result2, exp)
- class TestSemiMonthBegin:
- def test_offset_whole_year(self):
- dates = (
- datetime(2007, 12, 15),
- datetime(2008, 1, 1),
- datetime(2008, 1, 15),
- datetime(2008, 2, 1),
- datetime(2008, 2, 15),
- datetime(2008, 3, 1),
- datetime(2008, 3, 15),
- datetime(2008, 4, 1),
- datetime(2008, 4, 15),
- datetime(2008, 5, 1),
- datetime(2008, 5, 15),
- datetime(2008, 6, 1),
- datetime(2008, 6, 15),
- datetime(2008, 7, 1),
- datetime(2008, 7, 15),
- datetime(2008, 8, 1),
- datetime(2008, 8, 15),
- datetime(2008, 9, 1),
- datetime(2008, 9, 15),
- datetime(2008, 10, 1),
- datetime(2008, 10, 15),
- datetime(2008, 11, 1),
- datetime(2008, 11, 15),
- datetime(2008, 12, 1),
- datetime(2008, 12, 15),
- )
- for base, exp_date in zip(dates[:-1], dates[1:]):
- assert_offset_equal(SemiMonthBegin(), base, exp_date)
- # ensure .apply_index works as expected
- shift = DatetimeIndex(dates[:-1])
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = SemiMonthBegin() + shift
- exp = DatetimeIndex(dates[1:])
- tm.assert_index_equal(result, exp)
- # ensure generating a range with DatetimeIndex gives same result
- result = date_range(start=dates[0], end=dates[-1], freq="SMS")
- exp = DatetimeIndex(dates, freq="SMS")
- tm.assert_index_equal(result, exp)
- offset_cases = [
- (
- SemiMonthBegin(),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 15),
- datetime(2008, 1, 15): datetime(2008, 2, 1),
- datetime(2008, 1, 31): datetime(2008, 2, 1),
- datetime(2006, 12, 14): datetime(2006, 12, 15),
- datetime(2006, 12, 29): datetime(2007, 1, 1),
- datetime(2006, 12, 31): datetime(2007, 1, 1),
- datetime(2007, 1, 1): datetime(2007, 1, 15),
- datetime(2006, 12, 1): datetime(2006, 12, 15),
- datetime(2006, 12, 15): datetime(2007, 1, 1),
- },
- ),
- (
- SemiMonthBegin(day_of_month=20),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 20),
- datetime(2008, 1, 15): datetime(2008, 1, 20),
- datetime(2008, 1, 21): datetime(2008, 2, 1),
- datetime(2008, 1, 31): datetime(2008, 2, 1),
- datetime(2006, 12, 14): datetime(2006, 12, 20),
- datetime(2006, 12, 29): datetime(2007, 1, 1),
- datetime(2006, 12, 31): datetime(2007, 1, 1),
- datetime(2007, 1, 1): datetime(2007, 1, 20),
- datetime(2006, 12, 1): datetime(2006, 12, 20),
- datetime(2006, 12, 15): datetime(2006, 12, 20),
- },
- ),
- (
- SemiMonthBegin(0),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 1),
- datetime(2008, 1, 16): datetime(2008, 2, 1),
- datetime(2008, 1, 15): datetime(2008, 1, 15),
- datetime(2008, 1, 31): datetime(2008, 2, 1),
- datetime(2006, 12, 29): datetime(2007, 1, 1),
- datetime(2006, 12, 2): datetime(2006, 12, 15),
- datetime(2007, 1, 1): datetime(2007, 1, 1),
- },
- ),
- (
- SemiMonthBegin(0, day_of_month=16),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 1),
- datetime(2008, 1, 16): datetime(2008, 1, 16),
- datetime(2008, 1, 15): datetime(2008, 1, 16),
- datetime(2008, 1, 31): datetime(2008, 2, 1),
- datetime(2006, 12, 29): datetime(2007, 1, 1),
- datetime(2006, 12, 31): datetime(2007, 1, 1),
- datetime(2007, 1, 5): datetime(2007, 1, 16),
- datetime(2007, 1, 1): datetime(2007, 1, 1),
- },
- ),
- (
- SemiMonthBegin(2),
- {
- datetime(2008, 1, 1): datetime(2008, 2, 1),
- datetime(2008, 1, 31): datetime(2008, 2, 15),
- datetime(2006, 12, 1): datetime(2007, 1, 1),
- datetime(2006, 12, 29): datetime(2007, 1, 15),
- datetime(2006, 12, 15): datetime(2007, 1, 15),
- datetime(2007, 1, 1): datetime(2007, 2, 1),
- datetime(2007, 1, 16): datetime(2007, 2, 15),
- datetime(2006, 11, 1): datetime(2006, 12, 1),
- },
- ),
- (
- SemiMonthBegin(-1),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 15),
- datetime(2008, 6, 30): datetime(2008, 6, 15),
- datetime(2008, 6, 14): datetime(2008, 6, 1),
- datetime(2008, 12, 31): datetime(2008, 12, 15),
- datetime(2006, 12, 29): datetime(2006, 12, 15),
- datetime(2006, 12, 15): datetime(2006, 12, 1),
- datetime(2007, 1, 1): datetime(2006, 12, 15),
- },
- ),
- (
- SemiMonthBegin(-1, day_of_month=4),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 4),
- datetime(2007, 1, 4): datetime(2007, 1, 1),
- datetime(2008, 6, 30): datetime(2008, 6, 4),
- datetime(2008, 12, 31): datetime(2008, 12, 4),
- datetime(2006, 12, 5): datetime(2006, 12, 4),
- datetime(2006, 12, 30): datetime(2006, 12, 4),
- datetime(2006, 12, 2): datetime(2006, 12, 1),
- datetime(2007, 1, 1): datetime(2006, 12, 4),
- },
- ),
- (
- SemiMonthBegin(-2),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 1),
- datetime(2008, 6, 30): datetime(2008, 6, 1),
- datetime(2008, 6, 14): datetime(2008, 5, 15),
- datetime(2008, 12, 31): datetime(2008, 12, 1),
- datetime(2006, 12, 29): datetime(2006, 12, 1),
- datetime(2006, 12, 15): datetime(2006, 11, 15),
- datetime(2007, 1, 1): datetime(2006, 12, 1),
- },
- ),
- ]
- @pytest.mark.parametrize("case", offset_cases)
- def test_offset(self, case):
- offset, cases = case
- for base, expected in cases.items():
- assert_offset_equal(offset, base, expected)
- @pytest.mark.parametrize("case", offset_cases)
- def test_apply_index(self, case):
- offset, cases = case
- shift = DatetimeIndex(cases.keys())
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = offset + shift
- exp = DatetimeIndex(cases.values())
- tm.assert_index_equal(result, exp)
- on_offset_cases = [
- (datetime(2007, 12, 1), True),
- (datetime(2007, 12, 15), True),
- (datetime(2007, 12, 14), False),
- (datetime(2007, 12, 31), False),
- (datetime(2008, 2, 15), True),
- ]
- @pytest.mark.parametrize("case", on_offset_cases)
- def test_is_on_offset(self, case):
- dt, expected = case
- assert_is_on_offset(SemiMonthBegin(), dt, expected)
- @pytest.mark.parametrize("klass", [Series, DatetimeIndex])
- def test_vectorized_offset_addition(self, klass):
- shift = klass(
- [
- Timestamp("2000-01-15 00:15:00", tz="US/Central"),
- Timestamp("2000-02-15", tz="US/Central"),
- ],
- name="a",
- )
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = shift + SemiMonthBegin()
- result2 = SemiMonthBegin() + shift
- exp = klass(
- [
- Timestamp("2000-02-01 00:15:00", tz="US/Central"),
- Timestamp("2000-03-01", tz="US/Central"),
- ],
- name="a",
- )
- tm.assert_equal(result, exp)
- tm.assert_equal(result2, exp)
- shift = klass(
- [
- Timestamp("2000-01-01 00:15:00", tz="US/Central"),
- Timestamp("2000-02-01", tz="US/Central"),
- ],
- name="a",
- )
- with tm.assert_produces_warning(None):
- # GH#22535 check that we don't get a FutureWarning from adding
- # an integer array to PeriodIndex
- result = shift + SemiMonthBegin()
- result2 = SemiMonthBegin() + shift
- exp = klass(
- [
- Timestamp("2000-01-15 00:15:00", tz="US/Central"),
- Timestamp("2000-02-15", tz="US/Central"),
- ],
- name="a",
- )
- tm.assert_equal(result, exp)
- tm.assert_equal(result2, exp)
- class TestMonthBegin:
- offset_cases = []
- # NOTE: I'm not entirely happy with the logic here for Begin -ss
- # see thread 'offset conventions' on the ML
- offset_cases.append(
- (
- MonthBegin(),
- {
- datetime(2008, 1, 31): datetime(2008, 2, 1),
- datetime(2008, 2, 1): datetime(2008, 3, 1),
- datetime(2006, 12, 31): datetime(2007, 1, 1),
- datetime(2006, 12, 1): datetime(2007, 1, 1),
- datetime(2007, 1, 31): datetime(2007, 2, 1),
- },
- )
- )
- offset_cases.append(
- (
- MonthBegin(0),
- {
- datetime(2008, 1, 31): datetime(2008, 2, 1),
- datetime(2008, 1, 1): datetime(2008, 1, 1),
- datetime(2006, 12, 3): datetime(2007, 1, 1),
- datetime(2007, 1, 31): datetime(2007, 2, 1),
- },
- )
- )
- offset_cases.append(
- (
- MonthBegin(2),
- {
- datetime(2008, 2, 29): datetime(2008, 4, 1),
- datetime(2008, 1, 31): datetime(2008, 3, 1),
- datetime(2006, 12, 31): datetime(2007, 2, 1),
- datetime(2007, 12, 28): datetime(2008, 2, 1),
- datetime(2007, 1, 1): datetime(2007, 3, 1),
- datetime(2006, 11, 1): datetime(2007, 1, 1),
- },
- )
- )
- offset_cases.append(
- (
- MonthBegin(-1),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 1),
- datetime(2008, 5, 31): datetime(2008, 5, 1),
- datetime(2008, 12, 31): datetime(2008, 12, 1),
- datetime(2006, 12, 29): datetime(2006, 12, 1),
- datetime(2006, 1, 2): datetime(2006, 1, 1),
- },
- )
- )
- @pytest.mark.parametrize("case", offset_cases)
- def test_offset(self, case):
- offset, cases = case
- for base, expected in cases.items():
- assert_offset_equal(offset, base, expected)
- class TestMonthEnd:
- def test_day_of_month(self):
- dt = datetime(2007, 1, 1)
- offset = MonthEnd()
- result = dt + offset
- assert result == Timestamp(2007, 1, 31)
- result = result + offset
- assert result == Timestamp(2007, 2, 28)
- def test_normalize(self):
- dt = datetime(2007, 1, 1, 3)
- result = dt + MonthEnd(normalize=True)
- expected = dt.replace(hour=0) + MonthEnd()
- assert result == expected
- offset_cases = []
- offset_cases.append(
- (
- MonthEnd(),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 31),
- datetime(2008, 1, 31): datetime(2008, 2, 29),
- datetime(2006, 12, 29): datetime(2006, 12, 31),
- datetime(2006, 12, 31): datetime(2007, 1, 31),
- datetime(2007, 1, 1): datetime(2007, 1, 31),
- datetime(2006, 12, 1): datetime(2006, 12, 31),
- },
- )
- )
- offset_cases.append(
- (
- MonthEnd(0),
- {
- datetime(2008, 1, 1): datetime(2008, 1, 31),
- datetime(2008, 1, 31): datetime(2008, 1, 31),
- datetime(2006, 12, 29): datetime(2006, 12, 31),
- datetime(2006, 12, 31): datetime(2006, 12, 31),
- datetime(2007, 1, 1): datetime(2007, 1, 31),
- },
- )
- )
- offset_cases.append(
- (
- MonthEnd(2),
- {
- datetime(2008, 1, 1): datetime(2008, 2, 29),
- datetime(2008, 1, 31): datetime(2008, 3, 31),
- datetime(2006, 12, 29): datetime(2007, 1, 31),
- datetime(2006, 12, 31): datetime(2007, 2, 28),
- datetime(2007, 1, 1): datetime(2007, 2, 28),
- datetime(2006, 11, 1): datetime(2006, 12, 31),
- },
- )
- )
- offset_cases.append(
- (
- MonthEnd(-1),
- {
- datetime(2007, 1, 1): datetime(2006, 12, 31),
- datetime(2008, 6, 30): datetime(2008, 5, 31),
- datetime(2008, 12, 31): datetime(2008, 11, 30),
- datetime(2006, 12, 29): datetime(2006, 11, 30),
- datetime(2006, 12, 30): datetime(2006, 11, 30),
- datetime(2007, 1, 1): datetime(2006, 12, 31),
- },
- )
- )
- @pytest.mark.parametrize("case", offset_cases)
- def test_offset(self, case):
- offset, cases = case
- for base, expected in cases.items():
- assert_offset_equal(offset, base, expected)
- on_offset_cases = [
- (MonthEnd(), datetime(2007, 12, 31), True),
- (MonthEnd(), datetime(2008, 1, 1), False),
- ]
- @pytest.mark.parametrize("case", on_offset_cases)
- def test_is_on_offset(self, case):
- offset, dt, expected = case
- assert_is_on_offset(offset, dt, expected)
|