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 US_Stocks_Trading_Calendar(AbstractHolidayCalendar): rules= [ Holiday("New Year's Day", month=1, day=1, observance=sunday_to_monday), Holiday("Martin Luther King, Jr. Day", month=1, day=1, offset=DateOffset(weekday=MO(3))), Holiday("Washington’s Birthday", month=2, day=1, offset=DateOffset(weekday=MO(3))), Holiday("Good Friday", month=1, day=1, offset=[Easter(),Day(-2)]), Holiday("Memorial Day", month=5, day=31, offset=DateOffset(weekday=MO(-1))), Holiday("Independence Day", month=7, day=4, observance=nearest_workday), Holiday("Labor Day", month=9, day=1, offset=DateOffset(weekday=MO(1))), Holiday("Thanksgiving Day", month=11, day=1, offset=DateOffset(weekday=TH(4))), Holiday("Christmas Day", month=12, day=25, observance=nearest_workday), Holiday("Day before Independence Day - Half day", month=7, day=3, observance=previous_friday), Holiday("Day following Thanksgiving - Half day", month=11, day=1, offset=DateOffset(weekday=WE(4))), Holiday("Christmas Eve - Half day", month=12, day=24, observance=previous_friday) ]
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) ]
class ExampleCalendar(AbstractHolidayCalendar): rules = [ USMemorialDay, Holiday('July 4th', month=7, day=4, observance=nearest_workday), Holiday('Columbus Day', month=10, day=1, offset=pd.DateOffset(weekday=MO(2))) ]
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)
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,
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, )
@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():
offset=[Easter(), -Day(47)], ) TruthAndJusticeMemorialDay = Holiday( 'Truth and Justice Memorial Day', month=3, day=24, start_date='2005', ) MalvinasDayTo2004 = Holiday( 'Malvinas Day (up to 2004)', month=3, day=31, end_date='2005', offset=pd.DateOffset(weekday=MO(1)), ) MalvinasDayFrom2005 = Holiday( 'Malvinas Day (2005-present)', month=4, day=2, start_date='2005' ) MaundyThursday = maundy_thursday() LabourDay = european_labour_day() MayDayRevolution = Holiday( 'May Day Revolution',
import pandas as pd import datetime from pandas.tseries.holiday import Holiday, nearest_workday, MO ts = pd.date_range(start='1/1/2019', freq='H', end='12/31/2019') holidays = [ Holiday('xyz', month=12, day=5), Holiday('July 4th', month=7, day=4, observance=nearest_workday), Holiday('Columbus Day', month=10, day=1, offset=pd.DateOffset(weekday=MO(2))) ] ts = pd.bdate_range(start='1/1/2019', freq='H', end='12/31/2019', holidays=holidays) print(ts)
observance=weekend_to_monday, ) # ANZAC Day AnzacDay = Holiday( "ANZAC Day", month=4, day=25, ) # Queen's Birthday QueensBirthday = Holiday( "Queen's Birthday", month=6, day=1, offset=DateOffset(weekday=MO(2)), ) # Christmas Christmas = Holiday( "Christmas", month=12, day=25, observance=weekend_to_monday, ) # Boxing day BoxingDay = Holiday( "Boxing Day", month=12, day=26,
def closest_previous_monday(dt): """Observance for previous Monday""" return dt + DateOffset(weekday=MO(-1))
def closest_next_monday(dt): """Observance for next_monday""" return dt + DateOffset(weekday=MO(1))