Пример #1
0
class Cal_EngWales(AbstractHolidayCalendar):
    rules = [
        GoodFriday, EasterMonday,
        Holiday('New Years Day', month=1, day=1, observance=next_monday),
        Holiday('Early May bank holiday',
                month=5,
                day=1,
                offset=DateOffset(weekday=MO(1))),
        Holiday('Spring bank holiday',
                month=5,
                day=31,
                offset=DateOffset(weekday=MO(-1))),
        Holiday('Summer bank holiday',
                month=8,
                day=31,
                offset=DateOffset(weekday=MO(-1))),
        Holiday('Christmas Day', month=12, day=25, observance=next_monday),
        Holiday('Boxing Day',
                month=12,
                day=26,
                observance=next_monday_or_tuesday)
    ]
    # assign id to each hol; non-hol will have id_hol = 0
    df_gen_hols = pd.DataFrame({
        'name_hol': [hol.name for hol in rules],
        'id_hol': range(1,
                        len(rules) + 1)
    })

    # get: name_hol; id_hol (assign '0' to non-hols); dow, doy, moy
    def get_hols(self, DF, col_date):
        series_hols = self.holidays(start=DF[col_date].min(),
                                    end=DF[col_date].max(),
                                    return_name=True)
        df_hols = pd.DataFrame({
            col_date:
            pd.DataFrame(series_hols.index)[0].dt.date,
            'name_hol':
            series_hols.tolist()
        })
        # merge to get name_ and id_hol; assign '0' to non-holidays
        DF[col_date] = pd.to_datetime(DF[col_date]).dt.date
        DF = pd.merge(pd.merge(DF,
                               df_hols[[col_date, 'name_hol']],
                               how='left',
                               on=col_date),
                      self.df_gen_hols,
                      how='left',
                      on='name_hol')
        DF['id_hol'].fillna(0, inplace=True)
        DF['dow'], DF['doy'], DF['moy'] = pd.to_datetime(
            DF[col_date]).dt.dayofweek, pd.to_datetime(
                DF[col_date]).dt.dayofyear, pd.to_datetime(
                    DF[col_date]).dt.month
        return DF
class EnglandAndWalesHolidayCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday('New Years Day', month=1, day=1, observance=next_monday),
        GoodFriday,
        EasterMonday,
        Holiday('Early May bank holiday',
                month=5, day=1, offset=DateOffset(weekday=MO(1))),
        Holiday('Spring bank holiday',
                month=5, day=31, offset=DateOffset(weekday=MO(-1))),
        Holiday('Summer bank holiday',
                month=8, day=31, offset=DateOffset(weekday=MO(-1))),
        Holiday('Christmas Day', month=12, day=25, observance=next_monday),
        Holiday('Boxing Day',
                month=12, day=26, observance=next_monday_or_tuesday)
    ]
Пример #3
0
def test_both_offset_observance_raises():
    # see gh-10217
    msg = "Cannot use both offset and observance"
    with pytest.raises(NotImplementedError, match=msg):
        Holiday("Cyber Monday", month=11, day=1,
                offset=[DateOffset(weekday=SA(4))],
                observance=next_monday)
Пример #4
0
 def test_both_offset_observance_raises(self):
     with self.assertRaises(NotImplementedError):
         Holiday("Cyber Monday",
                 month=11,
                 day=1,
                 offset=[DateOffset(weekday=SA(4))],
                 observance=next_monday)
def midsummer_eve(start_date=None, end_date=None):
    return Holiday(
        "Midsummer Eve",
        month=6,
        day=19,
        offset=DateOffset(weekday=FR(1)),
        start_date=start_date,
        end_date=end_date,
    )
Пример #6
0
    def test_special_holidays(self):
        base_date = [datetime(2012, 5, 28)]
        holiday_1 = Holiday('One-Time', year=2012, month=5, day=28)
        holiday_2 = Holiday('Range', month=5, day=28,
                            start_date=datetime(2012, 1, 1),
                            end_date=datetime(2012, 12, 31),
                            offset=DateOffset(weekday=MO(1)))

        assert base_date == holiday_1.dates(self.start_date, self.end_date)
        assert base_date == holiday_2.dates(self.start_date, self.end_date)
Пример #7
0
class ASXTradingCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday('New Year\'s Day', month=1, day=1, observance=next_monday),
        Holiday('Australia Day', month=1, day=26, observance=next_monday),
        GoodFriday,
        EasterMonday,
        Holiday('ANZAC Day', month=4, day=25),
        Holiday('Queen\'s Birthday',
                month=6,
                day=1,
                offset=DateOffset(weekday=MO(2))),
        Holiday('Christmas Day',
                month=12,
                day=25,
                observance=my_next_monday_or_tuesday),
        Holiday('Boxing Day',
                month=12,
                day=26,
                observance=my_next_monday_or_tuesday),
    ]
    month=6,
    day=12,
    start_date='2011',
)

NinoyAquinoDay = Holiday(
    'Ninoy Aquino Day',
    month=8,
    day=21,
    start_date='2011',
)

NationalHeroesDay = Holiday('National Heroes Day',
                            month=8,
                            day=31,
                            offset=DateOffset(weekday=MO(-1)),
                            start_date='2011')

AllSaintsDay = all_saints_day(start_date='2011')

AllSaintsDayExtra = Holiday(
    "Friday after All Saint's Day",
    month=11,
    day=2,
    start_date='2011',
    observance=only_friday,
)

BonifacioDay = Holiday(
    'Bonifacio Day',
    month=11,
Пример #9
0
    WeekendBoxingDay
)

# New Year's Day
TSXNewYearsDay = Holiday(
    "New Year's Day",
    month=1,
    day=1,
    observance=weekend_to_monday,
)
# Ontario Family Day
FamilyDay = Holiday(
    "Family Day",
    month=2,
    day=1,
    offset=DateOffset(weekday=MO(3)),
    start_date='2008-01-01',
)
# Victoria Day
VictoriaDay = Holiday(
    'Victoria Day',
    month=5,
    day=25,
    offset=DateOffset(weekday=MO(-1)),
)
# Canada Day
CanadaDay = Holiday(
    'Canada Day',
    month=7,
    day=1,
    observance=weekend_to_monday,
from .common_holidays import (
    epiphany,
    immaculate_conception,
    maundy_thursday,
    new_years_day,
    new_years_eve,
    european_labour_day,
    christmas,
)
from .trading_calendar import (
    TradingCalendar,
    HolidayCalendar,
)

# Used for "first Monday on or after date"
next_monday_offset = DateOffset(weekday=MO(1))

NewYearsDay = new_years_day()

Epiphany = epiphany(observance=next_monday_offset)

StJosephsDay = Holiday(
    "St. Joseph's Day (next Monday)",
    month=3,
    day=19,
    offset=next_monday_offset,
)

MaundyThursday = maundy_thursday()

LabourDay = european_labour_day()
StPatricksDay = Holiday(
    "St. Patrick's Day",
    month=3,
    day=17,
    end_date='2001',
    observance=weekend_to_monday,
)

LabourDay = european_labour_day(end_date='2010', observance=weekend_to_monday)

MayBankHoliday = Holiday(
    'May Bank Holiday',
    month=5,
    day=1,
    offset=DateOffset(weekday=MO(1)),
)
JuneBankHoliday = Holiday(
    'June Bank Holiday',
    month=6,
    day=1,
    offset=DateOffset(weekday=MO(1)),
)

LastTradingDayBeforeChristmas = Holiday(
    'Last Trading Day Before Christmas',
    month=12,
    day=24,
    start_date='2010',
    observance=previous_friday,
)
Пример #12
0
@pytest.mark.parametrize(
    "name,kwargs",
    [
        ("One-Time", {
            "year": 2012,
            "month": 5,
            "day": 28
        }),
        (
            "Range",
            {
                "month": 5,
                "day": 28,
                "start_date": datetime(2012, 1, 1),
                "end_date": datetime(2012, 12, 31),
                "offset": DateOffset(weekday=MO(1)),
            },
        ),
    ],
)
def test_special_holidays(name, kwargs):
    base_date = [datetime(2012, 5, 28)]
    holiday = Holiday(name, **kwargs)

    start_date = datetime(2011, 1, 1)
    end_date = datetime(2020, 12, 31)

    assert base_date == holiday.dates(start_date, end_date)


def test_get_calendar():
Пример #13
0
#  - Memorial Day
#  - Independence Day
#  - Labor Day
#  - Thanksgiving
#  - Black Friday
#  - Christmas

cal = calendar()
# need to remove rules in descending order!
cal.rules.pop(7) # remove Veterans Day
cal.rules.pop(6) # remove Columbus Day
cal.rules.pop(2) # remove President's Day
cal.rules.pop(1) # remove Martin Luther King Day
# create new rule for Black Friday
USBlackFriday = Holiday('BlackFriday', month=11, day=1,
                            offset=DateOffset(weekday=FR(4)))

# create own holiday calendar based on the above rules
ownCal = HolidayCalendarFactory('OwnCalendar', cal, USBlackFriday)
#print(ownCal.rules)
cal = ownCal()
#holidays = cal.holidays(start='2003-01-01', end='2015-05-13', return_name=True) # also returns name of holiday
holidays = cal.holidays(start='2003-01-01', end='2015-05-13')
#print(holidays)

# set flag according to whether the day is a holiday, a weekend or not
train['Workingday'] = ((train['DayOfWeek'].isin(['Saturday', 'Sunday'])==False) &
                       (train['Date'].isin(holidays)==False))
test['Workingday'] = ((test['DayOfWeek'].isin(['Saturday', 'Sunday'])==False) &
                      (test['Date'].isin(holidays)==False))
Пример #14
0
    day=1,
    offset=[Easter(), Day(38)],
)
AscensionDay = ascension_day()
WhitMonday = whit_monday(end_date='2005')

NationalDay = Holiday('Sweden National Day', month=6, day=6, start_date='2004')

MidsummerEve = midsummer_eve()

# This falls on the Friday between October 30th and November 5th.
AllSaintsEve = Holiday(
    "All Saints' Eve",
    month=10,
    day=30,
    offset=DateOffset(weekday=FR(1)),
)

ChristmasEve = christmas_eve()
Christmas = christmas()
BoxingDay = boxing_day()

NewYearsEve = new_years_eve()


def holidays():
    return [
        NewYearsDay,
        Epiphany,
        GoodFriday,
        EasterMonday,