Esempio n. 1
0
 def test_discovery_day(self):
     nl_holidays = holidays.CA(prov="NL")
     yu_holidays = holidays.CA(prov="YU")
     for dt in [
             date(1997, 6, 23),
             date(1999, 6, 21),
             date(2000, 6, 26),
             date(2010, 6, 21),
             date(2016, 6, 27),
             date(2020, 6, 22)
     ]:
         self.assertFalse(dt in self.holidays)
         self.assertTrue(dt in nl_holidays)
         self.assertFalse(dt in yu_holidays)
     for dt in [
             date(1912, 8, 19),
             date(1999, 8, 16),
             date(2000, 8, 21),
             date(2006, 8, 21),
             date(2016, 8, 15),
             date(2020, 8, 17)
     ]:
         self.assertFalse(dt in self.holidays)
         self.assertFalse(dt in nl_holidays)
         self.assertTrue(dt in yu_holidays)
Esempio n. 2
0
 def test_discovery_day(self):
     nl_holidays = holidays.CA(prov="NL")
     yt_holidays = holidays.CA(prov="YT")
     for dt in [
         date(1997, 6, 23),
         date(1999, 6, 21),
         date(2000, 6, 26),
         date(2010, 6, 21),
         date(2016, 6, 27),
         date(2020, 6, 22),
     ]:
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, nl_holidays)
         self.assertNotIn(dt, yt_holidays)
     for dt in [
         date(1912, 8, 19),
         date(1999, 8, 16),
         date(2000, 8, 21),
         date(2006, 8, 21),
         date(2016, 8, 15),
         date(2020, 8, 17),
     ]:
         self.assertNotIn(dt, self.holidays)
         self.assertNotIn(dt, nl_holidays)
         self.assertIn(dt, yt_holidays)
def last_business_day(start_date, country='NA'):
    '''
    Purpose
    -------
    return the latest date before start_date that is a trading day in country

    Parameters
    ----------
    start_date : datetime or date object
        the starting point from which we get the trading day

    country : str, optional
        the country concerned. this has impact on holidays. the default is 'NA',
        which includes canada and usa. other examples include 'USD' or 'CAD'

    Returns
    -------
    datetime object

    '''
    relevant_years = [start_date.year - 1, start_date.year]
    if country == 'NA':
        relevant_holidays = holidays.CA(years=relevant_years) + holidays.US(years=relevant_years)
    elif country == 'CAD':
        relevant_holidays = holidays.CA(years=relevant_years)
    elif country == 'USD':
        relevant_holidays = holidays.US(years=relevant_years)
    date_inc = start_date
    while (date_inc in relevant_holidays) or (date_inc.weekday() >= 5):
        date_inc = date_inc - timedelta(days=1)
    return date_inc
Esempio n. 4
0
 def test_add(self):
     ca = holidays.CA()
     us = holidays.US()
     mx = holidays.MX()
     na = ca + (us + mx)
     self.assertFalse('2014-07-01' in us)
     self.assertTrue('2014-07-01' in ca)
     self.assertFalse('2014-07-04' in ca)
     self.assertTrue('2014-07-04' in us)
     self.assertTrue('2014-07-04' in ca + us)
     self.assertTrue('2014-07-04' in us + ca)
     self.assertTrue('2015-07-04' in ca + us)
     self.assertTrue('2015-07-04' in us + ca)
     self.assertTrue('2015-07-01' in ca + us)
     self.assertTrue('2015-07-01' in us + ca)
     self.assertTrue('2014-07-04' in na)
     self.assertTrue('2015-07-04' in na)
     self.assertTrue('2015-07-01' in na)
     self.assertTrue('2000-02-05' in na)
     self.assertEqual((ca + us).prov, 'ON')
     self.assertEqual((us + ca).prov, 'ON')
     ca = holidays.CA(years=[2014], expand=False)
     us = holidays.US(years=[2014, 2015], expand=True)
     self.assertFalse((ca + us).expand)
     self.assertTrue((us + ca).expand)
     self.assertEqual((ca + us).years, set([2014, 2015]))
     self.assertEqual((us + ca).years, set([2014, 2015]))
     na = holidays.CA()
     na += holidays.US()
     na += holidays.MX()
     self.assertTrue('2014-07-04' in na)
     self.assertTrue('2014-07-04' in na)
     self.assertTrue('2015-07-04' in na)
     self.assertTrue('2015-07-04' in na)
     self.assertTrue('2015-07-01' in na)
     self.assertTrue('2015-07-01' in na)
     self.assertTrue('2000-02-05' in na)
     self.assertEqual(na.prov, 'ON')
     na = holidays.CA() + holidays.US()
     na += holidays.MX()
     self.assertTrue('2014-07-04' in na)
     self.assertTrue('2014-07-04' in na)
     self.assertTrue('2015-07-04' in na)
     self.assertTrue('2015-07-04' in na)
     self.assertTrue('2015-07-01' in na)
     self.assertTrue('2015-07-01' in na)
     self.assertTrue('2000-02-05' in na)
     self.assertEqual(na.prov, 'ON')
     self.assertRaises(TypeError, lambda: holidays.US() + {})
     na = ca + (us + mx) + ca + (mx + us + holidays.CA(prov='BC'))
     self.assertTrue('2000-02-05' in na)
     self.assertTrue('2014-02-10' in na)
     self.assertTrue('2014-02-17' in na)
     self.assertTrue('2014-07-04' in na)
Esempio n. 5
0
 def test_family_day(self):
     ab_holidays = holidays.CA(prov="AB")
     bc_holidays = holidays.CA(prov="BC")
     mb_holidays = holidays.CA(prov="MB")
     sk_holidays = holidays.CA(prov="SK")
     nb_holidays = holidays.CA(prov="NB")
     for dt in [
         date(1990, 2, 19),
         date(1999, 2, 15),
         date(2000, 2, 21),
         date(2006, 2, 20),
     ]:
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, ab_holidays)
         self.assertNotIn(dt, bc_holidays)
         self.assertNotIn(dt, mb_holidays)
         self.assertNotIn(dt, sk_holidays)
     dt = date(2007, 2, 19)
     self.assertNotIn(dt, self.holidays)
     self.assertIn(dt, ab_holidays)
     self.assertNotIn(dt, bc_holidays)
     self.assertNotIn(dt, mb_holidays)
     self.assertIn(dt, sk_holidays)
     for dt in [
         date(2008, 2, 18),
         date(2012, 2, 20),
         date(2014, 2, 17),
         date(2018, 2, 19),
     ]:
         self.assertIn(dt, self.holidays)
         self.assertIn(dt, ab_holidays)
         self.assertNotIn(dt, bc_holidays)
         self.assertIn(dt, mb_holidays)
         self.assertIn(dt, sk_holidays)
     for dt in [date(2018, 2, 19)]:
         self.assertIn(dt, nb_holidays)
     for dt in [date(2019, 2, 18), date(2020, 2, 17)]:
         self.assertIn(dt, self.holidays)
         self.assertIn(dt, ab_holidays)
         self.assertIn(dt, bc_holidays)
         self.assertIn(dt, mb_holidays)
         self.assertIn(dt, sk_holidays)
     for dt in [date(2013, 2, 11), date(2016, 2, 8)]:
         self.assertNotIn(dt, self.holidays)
         self.assertNotIn(dt, ab_holidays)
         self.assertIn(dt, bc_holidays)
         self.assertNotIn(dt, mb_holidays)
         self.assertNotIn(dt, sk_holidays)
     self.assertEqual(mb_holidays[date(2014, 2, 17)], "Louis Riel Day")
Esempio n. 6
0
 def test_eq_ne(self):
     us1 = holidays.UnitedStates()
     us2 = holidays.US()
     us3 = holidays.UnitedStates(years=[2014])
     us4 = holidays.US(years=[2014])
     ca1 = holidays.Canada()
     ca2 = holidays.CA()
     ca3 = holidays.Canada(years=[2014])
     ca4 = holidays.CA(years=[2014])
     self.assertEqual(us1, us2)
     self.assertEqual(us3, us4)
     self.assertEqual(ca1, ca2)
     self.assertEqual(ca3, ca4)
     self.assertNotEqual(us1, us3)
     self.assertNotEqual(us1, ca1)
     self.assertNotEqual(us3, ca3)
Esempio n. 7
0
def hour_string_processor(file_name):
    """
    Retrieve data about the time, in hour, of the ottawa's collision record from a csv file.
    :param file_name: the file to retrieve data
    """
    global total_record
    global total_valid_record
    times = []
    with open(file_name, 'r') as readData:  # r represent read model
        print("Start to read file: " + file_name +
              ". This may take a while...")
        file = csv.reader(readData)
        canada_holiday = holidays.CA()
        for row in file:
            if "COLLISION_ID" not in row[0]:
                hour = Hour()
                readDate = row[4]
                time = row[5]
                splited_date = readDate.split("-", 2)
                if len(splited_date) != 3:
                    raise Exception("Invalid date format: " + row[6])
                year = splited_date[0]
                month = splited_date[1]
                day = splited_date[2]
                day_of_week = date(int(year), int(month),
                                   int(day)).isoweekday()
                hour.day_of_week = day_of_week
                is_weekend = day_of_week == 6 or day_of_week == 7
                time_period = time.split(" ", 1)[1]
                h = time.split(":", 1)[0]
                if "AM" in time_period:
                    if int(h) > 12:
                        raise Exception("Wrong time format: " + time)
                    hour.hour_start = h + ":00:00"
                    hour.hour_end = h + ":59:59"
                elif "PM" in time_period:
                    if int(h) > 12:
                        raise Exception("Wrong time format: " + time)
                    h_pm = str((int(h) + 12))
                    if int(h_pm) == 24:
                        h_pm = 0
                    hour.hour_start = str(h_pm) + ":00:00"
                    hour.hour_end = str(h_pm) + ":59:59"
                else:
                    raise Exception("Wrong time format: " + time)
                hour.date = readDate
                hour.day = day
                hour.month = month
                hour.year = year
                hour.weekend = is_weekend
                if readDate in canada_holiday:
                    hour.holiday = True
                    hour.holiday_name = canada_holiday.get(readDate)
                else:
                    hour.holiday = False
                    hour.holiday_name = "N/A"
                hour.hour_id = hour.date + hour.hour_start
                times.append(hour)

    return times
Esempio n. 8
0
def to_valid_open_market_day(day: str):
    global date_format
    day = datetime.strptime(day, date_format)
    # if date is a weekend day or holiday, find closest week day
    while day.weekday() in [5, 6] or day in holidays.CA():
        day = day - timedelta(days=1)
    return day.strftime(date_format)
Esempio n. 9
0
 def test_holidays(self):
     self.assertEqual(list(rrule(BDAILY, count=4, dtstart="2015-07-01")), [
         datetime(2015, 7, 1, 0, 0),
         datetime(2015, 7, 2, 0, 0),
         datetime(2015, 7, 3, 0, 0),
         datetime(2015, 7, 6, 0, 0)
     ])
     bdateutil.HOLIDAYS = holidays.US()
     self.assertEqual(list(rrule(BDAILY, count=4, dtstart="2015-07-01")), [
         datetime(2015, 7, 1, 0, 0),
         datetime(2015, 7, 2, 0, 0),
         datetime(2015, 7, 6, 0, 0),
         datetime(2015, 7, 7, 0, 0)
     ])
     self.assertEqual(
         list(
             rrule(BDAILY,
                   count=4,
                   dtstart="2015-07-01",
                   holidays=holidays.CA())), [
                       datetime(2015, 7, 2, 0, 0),
                       datetime(2015, 7, 3, 0, 0),
                       datetime(2015, 7, 6, 0, 0),
                       datetime(2015, 7, 7, 0, 0)
                   ])
     bdateutil.HOLIDAYS = []
Esempio n. 10
0
def home():
    if request.method == 'GET':
        return render_template('chat.html')
    elif request.method == 'POST':
        user = request.form['you']
        if user == "let's ask":
            response = "Yeah!!! shoot your question...."
        elif user.find('iniya') == 0:
            response = wikipedia.summary(user[5:],
                                         sentences=1,
                                         auto_suggest=True,
                                         redirect=True)
        elif user.find('weather') == 0:
            location = weather.lookup_by_location(user[11:])
            condition = location.condition()
            tem = (condition.temp()).encode('ascii', 'ignore')
            response = tem + " Celcsius"
        elif user.find('define') == 0:
            c = dictionary.meaning(user[6:])
            response = c['Noun'][0]
        elif user == "crack a joke":
            response = pyjokes.get_joke()
        elif user.find("holidays") == 0:
            years = user[12:]
            d = holidays.CA(years=int(years))
            response = "You have %d holidays in the year %d" % (len(d),
                                                                int(years))
        else:
            response = chatterbot.get_response(user)
        kwargs = {
            'bot': response,
        }
        return render_template('chat.html', **kwargs)
    def test_get_list(self):
        westland = holidays.NZ(prov="WTL")
        chathams = holidays.NZ(prov="CIT")
        wild = westland + chathams
        self.assertEqual(
            wild[date(1969, 12, 1)],
            ("Westland Anniversary Day, " + "Chatham Islands Anniversary Day"),
        )

        self.assertEqual(
            wild.get_list(date(1969, 12, 1)),
            ["Westland Anniversary Day", "Chatham Islands Anniversary Day"],
        )
        self.assertEqual(wild.get_list(date(1969, 1, 1)), ["New Year's Day"])
        self.assertEqual(westland.get_list(date(1969, 12, 1)),
                         ["Westland Anniversary Day"])
        self.assertEqual(westland.get_list(date(1969, 1, 1)),
                         ["New Year's Day"])
        self.assertEqual(
            chathams.get_list(date(1969, 12, 1)),
            ["Chatham Islands Anniversary Day"],
        )
        self.assertEqual(chathams.get_list(date(1969, 1, 1)),
                         ["New Year's Day"])
        ca = holidays.CA()
        us = holidays.US()
        mx = holidays.MX()
        na = ca + us + mx
        self.assertIn(date(1969, 12, 25), na)
        self.assertEqual(
            na.get_list(date(1969, 12, 25)),
            ["Christmas Day", "Navidad [Christmas]"],
        )
        self.assertEqual(na.get_list(date(1969, 7, 1)), ["Dominion Day"])
        self.assertEqual(na.get_list(date(1969, 1, 3)), [])
Esempio n. 12
0
 def test_remembrance_day(self):
     ab_holidays = holidays.CA(prov="AB", observed=False)
     nl_holidays = holidays.CA(prov="NL", observed=False)
     self.assertNotIn(date(1930, 11, 11), ab_holidays)
     self.assertNotIn(date(1930, 11, 11), nl_holidays)
     for year in range(1931, 2100):
         dt = date(year, 11, 11)
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, ab_holidays)
         self.assertIn(dt, nl_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), nl_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), nl_holidays)
     self.assertNotIn(date(2007, 11, 12), ab_holidays)
     self.assertNotIn(date(2007, 11, 12), nl_holidays)
     ab_holidays.observed = True
     nl_holidays.observed = True
     self.assertNotIn(date(2007, 11, 12), ab_holidays)
     self.assertIn(date(2007, 11, 12), nl_holidays)
Esempio n. 13
0
 def test_national_aboriginal_day(self):
     nt_holidays = holidays.CA(prov="NT")
     self.assertNotIn(date(1995, 6, 21), nt_holidays)
     for year in range(1996, 2100):
         dt = date(year, 6, 21)
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, nt_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), nt_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), nt_holidays)
Esempio n. 14
0
 def test_country(self):
     self.assertEqual(self.holidays.country, 'US')
     self.assertTrue(date(2014, 7, 4) in self.holidays)
     self.assertFalse(date(2014, 7, 1) in self.holidays)
     self.holidays = holidays.UnitedStates()
     self.assertEqual(self.holidays.country, 'US')
     self.assertTrue(date(2014, 7, 4) in self.holidays)
     self.assertFalse(date(2014, 7, 1) in self.holidays)
     self.assertEqual(self.holidays.country, 'US')
     self.holidays = holidays.CA()
     self.assertEqual(self.holidays.country, 'CA')
     self.assertEqual(self.holidays.prov, 'ON')
     self.assertTrue(date(2014, 7, 1) in self.holidays)
     self.assertFalse(date(2014, 7, 4) in self.holidays)
     self.holidays = holidays.CA(prov='BC')
     self.assertEqual(self.holidays.country, 'CA')
     self.assertEqual(self.holidays.prov, 'BC')
     self.assertTrue(date(2014, 7, 1) in self.holidays)
     self.assertFalse(date(2014, 7, 4) in self.holidays)
 def test_country(self):
     self.assertEqual(self.holidays.country, "US")
     self.assertIn(date(2014, 7, 4), self.holidays)
     self.assertNotIn(date(2014, 7, 1), self.holidays)
     self.holidays = holidays.UnitedStates()
     self.assertEqual(self.holidays.country, "US")
     self.assertIn(date(2014, 7, 4), self.holidays)
     self.assertNotIn(date(2014, 7, 1), self.holidays)
     self.assertEqual(self.holidays.country, "US")
     self.holidays = holidays.CA()
     self.assertEqual(self.holidays.country, "CA")
     self.assertEqual(self.holidays.prov, "ON")
     self.assertIn(date(2014, 7, 1), self.holidays)
     self.assertNotIn(date(2014, 7, 4), self.holidays)
     self.holidays = holidays.CA(prov="BC")
     self.assertEqual(self.holidays.country, "CA")
     self.assertEqual(self.holidays.prov, "BC")
     self.assertIn(date(2014, 7, 1), self.holidays)
     self.assertNotIn(date(2014, 7, 4), self.holidays)
Esempio n. 16
0
 def test_family_day(self):
     ab_holidays = holidays.CA(prov="AB")
     bc_holidays = holidays.CA(prov="BC")
     mb_holidays = holidays.CA(prov="MB")
     sk_holidays = holidays.CA(prov="SK")
     for dt in [
             date(1990, 2, 19),
             date(1999, 2, 15),
             date(2000, 2, 21),
             date(2006, 2, 20)
     ]:
         self.assertFalse(dt in self.holidays)
         self.assertTrue(dt in ab_holidays)
         self.assertFalse(dt in bc_holidays)
         self.assertFalse(dt in mb_holidays)
         self.assertFalse(dt in sk_holidays)
     dt = date(2007, 2, 19)
     self.assertFalse(dt in self.holidays)
     self.assertTrue(dt in ab_holidays)
     self.assertFalse(dt in bc_holidays)
     self.assertFalse(dt in mb_holidays)
     self.assertTrue(dt in sk_holidays)
     for dt in [
             date(2008, 2, 18),
             date(2012, 2, 20),
             date(2014, 2, 17),
             date(2018, 2, 19),
             date(2019, 2, 18),
             date(2020, 2, 17)
     ]:
         self.assertTrue(dt in self.holidays)
         self.assertTrue(dt in ab_holidays)
         self.assertFalse(dt in bc_holidays)
         self.assertTrue(dt in mb_holidays)
         self.assertTrue(dt in sk_holidays)
     for dt in [date(2013, 2, 11), date(2016, 2, 8), date(2020, 2, 10)]:
         self.assertFalse(dt in self.holidays)
         self.assertFalse(dt in ab_holidays)
         self.assertTrue(dt in bc_holidays)
         self.assertFalse(dt in mb_holidays)
         self.assertFalse(dt in sk_holidays)
     self.assertEqual(mb_holidays[date(2014, 2, 17)], "Louis Riel Day")
Esempio n. 17
0
 def check_holiday(self, *args):
     countries_holidays = holidays.CA(years=2021)
     countries_holidays += holidays.USA(years=2021)
     countries_holidays += holidays.BR(years=2021)
     countries_holidays += holidays.MW(years=2021)
     for e in args:
         dt = self.check_instance(e)
         if not dt:
             return False
         feriado = dt in countries_holidays
         return feriado
Esempio n. 18
0
 def test_st_jean_baptiste_day(self):
     qc_holidays = holidays.CA(prov="QC", observed=False)
     self.assertNotIn(date(1924, 6, 24), qc_holidays)
     for year in range(1925, 2100):
         dt = date(year, 6, 24)
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, qc_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), qc_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), qc_holidays)
     self.assertNotIn(date(2001, 6, 25), qc_holidays)
     qc_holidays.observed = True
     self.assertIn(date(2001, 6, 25), qc_holidays)
Esempio n. 19
0
 def getholidays(self):
     ca_holidays = []
     for date, name in sorted(
             holidays.CA(prov='BC', years=datetime.today().year).items()):
         ca_holidays.append(date.strftime(self.__getdefaultdateformat()))
     if 'FOI_ADDITIONAL_HOLIDAYS' in os.environ and os.getenv(
             'FOI_ADDITIONAL_HOLIDAYS') != '':
         _addldays = os.getenv('FOI_ADDITIONAL_HOLIDAYS')
         for _addlday in _addldays.split(","):
             ca_holidays.append(_addlday.strip().replace(
                 'XXXX', str(datetime.today().year)))
     return ca_holidays
Esempio n. 20
0
 def test_st_georges_day(self):
     nl_holidays = holidays.CA(prov="NL")
     for dt in [
             date(1990, 4, 23),
             date(1999, 4, 26),
             date(2010, 4, 19),
             date(2016, 4, 25),
             date(2020, 4, 20),
     ]:
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, nl_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), nl_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), nl_holidays)
Esempio n. 21
0
 def test_thanksgiving(self):
     ns_holidays = holidays.CA(prov="NB")
     for dt in [
         date(1931, 10, 12),
         date(1990, 10, 8),
         date(1999, 10, 11),
         date(2000, 10, 9),
         date(2013, 10, 14),
         date(2020, 10, 12),
     ]:
         self.assertIn(dt, self.holidays)
         self.assertNotIn(dt + relativedelta(days=-1), self.holidays)
         self.assertNotIn(dt + relativedelta(days=+1), self.holidays)
         self.assertNotIn(dt, ns_holidays)
Esempio n. 22
0
 def test_st_georges_day(self):
     nl_holidays = holidays.CA(prov="NL")
     for dt in [
             date(1990, 4, 23),
             date(1999, 4, 26),
             date(2000, 4, 24),
             date(2010, 4, 19),
             date(2016, 4, 25),
             date(2020, 4, 20)
     ]:
         self.assertFalse(dt in self.holidays)
         self.assertTrue(dt in nl_holidays)
         self.assertFalse(dt + relativedelta(days=-1) in nl_holidays)
         self.assertFalse(dt + relativedelta(days=+1) in nl_holidays)
Esempio n. 23
0
 def test_nunavut_day(self):
     nu_holidays = holidays.CA(prov="NU", observed=False)
     self.assertNotIn(date(1999, 7, 9), nu_holidays)
     self.assertNotIn(date(2000, 7, 9), nu_holidays)
     self.assertIn(date(2000, 4, 1), nu_holidays)
     for year in range(2001, 2100):
         dt = date(year, 7, 9)
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, nu_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), nu_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), nu_holidays)
     self.assertNotIn(date(2017, 7, 10), nu_holidays)
     nu_holidays.observed = True
     self.assertIn(date(2017, 7, 10), nu_holidays)
Esempio n. 24
0
 def test_civic_holiday(self):
     bc_holidays = holidays.CA(prov="BC")
     for dt in [date(1900, 8, 6), date(1955, 8, 1), date(1973, 8, 6)]:
         self.assertIn(dt, self.holidays)
         self.assertNotIn(dt, bc_holidays)
     for dt in [
         date(1974, 8, 5),
         date(1999, 8, 2),
         date(2000, 8, 7),
         date(2010, 8, 2),
         date(2015, 8, 3),
         date(2020, 8, 3),
     ]:
         self.assertIn(dt, self.holidays)
         self.assertIn(dt, bc_holidays)
Esempio n. 25
0
 def test_isbday(self):
     self.assertFalse(isbday(date(2014, 1, 4)))
     self.assertFalse(isbday("2014-01-04"))
     self.assertTrue(isbday(date(2014, 1, 1)))
     self.assertTrue(isbday("2014-01-01"))
     self.assertFalse(isbday(date(2014, 1, 1), holidays=holidays.US()))
     self.assertTrue(isbday(datetime(2014, 1, 1, 16, 30)))
     self.assertTrue(isbday(datetime(2014, 1, 1, 17, 30)))
     self.assertFalse(
         isbday(datetime(2014, 1, 1, 16, 30), holidays=holidays.US()))
     self.assertFalse(
         isbday(datetime(2014, 1, 1, 17, 30), holidays=holidays.US()))
     isbday.holidays = holidays.US()
     self.assertFalse(isbday(date(2014, 1, 1)))
     self.assertFalse(isbday(date(2014, 7, 4)))
     self.assertTrue(isbday(date(2014, 7, 4), holidays=holidays.CA()))
Esempio n. 26
0
 def test_good_friday(self):
     qc_holidays = holidays.CA(prov="QC")
     for dt in [
         date(1900, 4, 13),
         date(1901, 4, 5),
         date(1902, 3, 28),
         date(1999, 4, 2),
         date(2000, 4, 21),
         date(2010, 4, 2),
         date(2018, 3, 30),
         date(2019, 4, 19),
         date(2020, 4, 10),
     ]:
         self.assertIn(dt, self.holidays)
         self.assertNotIn(dt + relativedelta(days=-1), self.holidays)
         self.assertNotIn(dt + relativedelta(days=+1), self.holidays)
         self.assertNotIn(dt, qc_holidays)
Esempio n. 27
0
 def test_st_patricks_day(self):
     nl_holidays = holidays.CA(prov="NL", observed=False)
     for dt in [
         date(1900, 3, 19),
         date(1999, 3, 15),
         date(2000, 3, 20),
         date(2012, 3, 19),
         date(2013, 3, 18),
         date(2014, 3, 17),
         date(2015, 3, 16),
         date(2016, 3, 14),
         date(2020, 3, 16),
     ]:
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, nl_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), nl_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), nl_holidays)
Esempio n. 28
0
 def test_easter_monday(self):
     qc_holidays = holidays.CA(prov="QC")
     for dt in [
         date(1900, 4, 16),
         date(1901, 4, 8),
         date(1902, 3, 31),
         date(1999, 4, 5),
         date(2000, 4, 24),
         date(2010, 4, 5),
         date(2018, 4, 2),
         date(2019, 4, 22),
         date(2020, 4, 13),
     ]:
         self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, qc_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), qc_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), qc_holidays)
Esempio n. 29
0
def make_out_of_sample_df(past_data, model, periods=24 * 30):
    """
    Sample function to create a dataframe with predicted values for the regressors using STL and ARIMA
    Likely does not run very efficiently.
    Reference: https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html#Forecasting-with-STL
    ----------
    Input
        - past_data: data used ing training Prophet model
        - model: trained model of the Prophet class.

    Returns
        - A panda dataframe with predicted values for regressors to use for forecasting
    """
    future_time_df = model.make_future_dataframe(periods=periods,
                                                 freq="H",
                                                 include_history=False)
    # Creating dummy for working days
    canada_holidays = holidays.CA()
    future_time_df["holiday"] = [
        1 if i.date() in canada_holidays else 0 for i in future_time_df["ds"]
    ]
    future_time_df["workingday"] = future_time_df.apply(lambda row: 0 if row[
        "holiday"] == 1 or row["ds"].weekday in ['Saturday', 'Sunday'] else 1,
                                                        axis=1)

    future_time_df.drop(columns=["holiday"], inplace=True)

    # Create predictions for future values of continuous regressors
    non_binary_regressors = [
        "Calgary_temp.1_hour_lag", "Edmonton_temp.1_hour_lag",
        "FortMM_temp.1_hour_lag", "Lethbridge_temp.1_hour_lag", "future 1",
        "WTI spot"
    ]
    past_data_copy = past_data.drop(columns=["y"]).set_index("ds")
    past_data_copy.index.freq = "H"
    for var in non_binary_regressors:
        var_forecast = STLForecast(past_data_copy[var],
                                   ARIMA,
                                   model_kwargs=dict(order=(1, 1, 0),
                                                     trend="t")).fit()
        future_time_df[var] = var_forecast.forecast(periods)
    future_time_df.reset_index(inplace=True)
    return future_time_df
Esempio n. 30
0
 def test_islander_day(self):
     pei_holidays = holidays.CA(prov="PE")
     for dt in [
         date(2009, 2, 9),
         date(2010, 2, 15),
         date(2011, 2, 21),
         date(2012, 2, 20),
         date(2013, 2, 18),
         date(2014, 2, 17),
         date(2015, 2, 16),
         date(2016, 2, 15),
         date(2020, 2, 17),
     ]:
         if dt.year >= 2010:
             self.assertNotEqual(self.holidays[dt], "Islander Day")
         elif dt.year == 2009:
             self.assertNotIn(dt, self.holidays)
         self.assertIn(dt, pei_holidays)
         self.assertNotIn(dt + relativedelta(days=-1), pei_holidays)
         self.assertNotIn(dt + relativedelta(days=+1), pei_holidays)