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) ]
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)
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, )
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():
# - 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))
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,