"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "python/prophet/hdays.py" between
prophet-1.0.tar.gz and prophet-1.1.tar.gz

About: Prophet is a tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.

hdays.py  (prophet-1.0):hdays.py  (prophet-1.1)
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (c) Facebook, Inc. and its affiliates. # Copyright (c) Facebook, Inc. and its affiliates.
# This source code is licensed under the MIT license found in the # This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree. # LICENSE file in the root directory of this source tree.
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import warnings import warnings
from calendar import Calendar, MONDAY
from datetime import date, timedelta from datetime import date, timedelta
from convertdate.islamic import from_gregorian, to_gregorian from convertdate.islamic import from_gregorian, to_gregorian
from lunarcalendar import Lunar, Converter from lunarcalendar import Lunar, Converter
from lunarcalendar.converter import DateNotExist
from holidays import WEEKEND, HolidayBase, Turkey from holidays import WEEKEND, HolidayBase, Turkey
from dateutil.easter import easter, EASTER_ORTHODOX from dateutil.easter import easter, EASTER_ORTHODOX
from dateutil.relativedelta import relativedelta as rd from dateutil.relativedelta import relativedelta as rd
# Official public holidays at a country level # Official public holidays at a country level
# ------------ Holidays in Brazil---------------------
class Brazil(HolidayBase):
"""
Implement public holidays in Brazil
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Brazil
"""
def __init__(self, **kwargs):
self.country = "BR"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# New Year's Day
if not self.observed and date(year, 1, 1).weekday() in WEEKEND:
pass
else:
self[date(year, 1, 1)] = "New Year's Day"
# Tiradentes
self[date(year, 4, 21)] = "Tiradentes"
# Worker's Day
self[date(year, 5, 1)] = "Worker's Day"
# Independence Day
self[date(year, 9, 7)] = "Independence Day"
# Our Lady of the Apparition
self[date(year, 10, 12)] = "Our Lady of the Apparition"
# All Souls' Day
self[date(year, 11, 2)] = "All Souls' Day"
# Republic Proclamation Day
self[date(year, 11, 15)] = "Republic Proclamation Day"
# Christmas
self[date(year, 12, 25)] = "Christmas"
class BR(Brazil):
pass
# ------------ Holidays in Indonesia--------------------- # ------------ Holidays in Indonesia---------------------
class Indonesia(HolidayBase): class Indonesia(HolidayBase):
""" """
Implement public holidays in Indonesia Implement public holidays in Indonesia
Reference: Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Indonesia https://en.wikipedia.org/wiki/Public_holidays_in_Indonesia
Please note: Indonesia is a multi-cultural community and we only implement Please note: Indonesia is a multi-cultural community and we only implement
the national wide public holidays. the national wide public holidays.
skipping to change at line 210 skipping to change at line 164
# Christmas # Christmas
self[date(year, 12, 25)] = "Christmas" self[date(year, 12, 25)] = "Christmas"
class ID(Indonesia): class ID(Indonesia):
pass pass
# ------------ Holidays in India--------------------- # ------------ Holidays in India---------------------
class India(HolidayBase): class India(HolidayBase):
""" """
Implement public holidays in India Implement public holidays in India
Reference: Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_India https://en.wikipedia.org/wiki/Public_holidays_in_India
Please note: Please note:
India is a culturally diverse and fervent society, celebrate various India is a culturally diverse and fervent society, celebrate various
holidays and festivals. We only implement the holidays that **all states holidays and festivals. We only implement the holidays that **all states
and territories** celebrate. and territories** celebrate.
""" """
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.country = "IN" self.country = "IN"
HolidayBase.__init__(self, **kwargs) HolidayBase.__init__(self, **kwargs)
skipping to change at line 453 skipping to change at line 405
name = "Boxing Day" name = "Boxing Day"
self[date(year, 12, 26)] = name self[date(year, 12, 26)] = name
# Feast of Holy Family # Feast of Holy Family
name = "Feast of Holy Family" name = "Feast of Holy Family"
self[date(year, 12, 30)] = name self[date(year, 12, 30)] = name
class IN(India): class IN(India):
pass pass
# ------------ Holidays in Malaysia---------------------
class Malaysia(HolidayBase):
"""
Implement public holidays in Malaysia
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Malaysia
"""
def __init__(self, **kwargs):
self.country = "MY"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# New Year's Day
name = "New Year's Day"
self[date(year, 1, 1)] = name
# Birthday of Prophet, Mawlid in India
# 12th day of 3rd Islamic month
name = "Birth of Prophet"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 11, 20)[0]
y, m, d = to_gregorian(islam_year, 3, 12)
if y == year:
self[date(y, m, d)] = name
# Chinese New Year
name = "Chinese New Year"
for offset in range(-1, 2, 1):
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date()
if ds.year == year:
self[ds] = name
# Tamil New Year
# Note: it's not necessarily 04/14
# due to the local calendar
# other possible dates are 04/13 and 04/15
name = "Tamil New Year"
self[date(year, 4, 14)] = name
# Good Friday
name = "Good Friday"
for offset in range(-1, 2, 1):
ds = easter(year + offset) - rd(days=2)
if ds.year == year:
self[ds] = name
# Labor Day
name = "Labor Day"
self[date(year, 5, 1)] = name
# Buddha's Birthday
name = "Wesak Day"
for offset in range(-1, 2, 1):
ds = Converter.Lunar2Solar(Lunar(year + offset, 4, 15)).to_date()
if ds.year == year:
self[ds] = name
# King's birthday
# https://www.thestar.com.my/news/nation/2017/04/26/
# Before 2017: first Saturday of June
# 2017-2021: last Saturday of July
name = "King's birthday"
if year < 2017:
c = Calendar(firstweekday=MONDAY)
monthcal = c.monthdatescalendar(year, 6)
l1 = len(monthcal)
saturdays = []
for i in range(l1):
if monthcal[i][5].month == 6:
saturdays.append(monthcal[i][5])
self[saturdays[0]] = name
elif 2017 <= year <= 2021:
c = Calendar(firstweekday=MONDAY)
monthcal = c.monthdatescalendar(year, 7)
l1 = len(monthcal)
saturdays = []
for i in range(l1):
if monthcal[i][5].month == 7:
saturdays.append(monthcal[i][5])
self[saturdays[-1]] = name
# Eid al-Fitr
name = "Eid al-Fitr"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 6, 15)[0]
y1, m1, d1 = to_gregorian(islam_year, 10, 1)
y2, m2, d2 = to_gregorian(islam_year, 10, 2)
if y1 == year:
self[date(y1, m1, d1)] = name
if y2 == year:
self[date(y2, m2, d2)] = name
# Malaysia Day
name = "Malaysia Day"
self[date(year, 9, 16)] = name
# Feast of the Sacrifice
name = "Feast of the Sacrifice"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 8, 22)[0]
y, m, d = to_gregorian(islam_year, 12, 10)
if y == year:
self[date(y, m, d)] = name
# First Day of Muharram
name = "First Day of Muharram"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 9, 11)[0]
y, m, d = to_gregorian(islam_year + 1, 1, 1)
if y == year:
self[date(y, m, d)] = name
# Christmas
name = "Christmas Day"
self[date(year, 12, 25)] = name
class MY(Malaysia):
pass
# ------------ Holidays in Vietnam---------------------
class Vietnam(HolidayBase):
"""
Implement public holidays in Vietnam
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Vietnam
"""
def __init__(self, **kwargs):
self.country = "VN"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# New Year's Day
name = "New Year's Day"
self[date(year, 1, 1)] = name
# Vietnamese New Year
name = "Vietnamese New Year"
for offset in range(-1, 2, 1):
try:
ds = Converter.Lunar2Solar(Lunar(year - 1 + offset, 12, 30)).to_
date()
except DateNotExist:
ds = Converter.Lunar2Solar(Lunar(year - 1 + offset, 12, 29)).to_
date()
if ds.year == year:
self[ds] = name
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date()
if ds.year == year:
self[ds] = name
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 2)).to_date()
if ds.year == year:
self[ds] = name
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 3)).to_date()
if ds.year == year:
self[ds] = name
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 4)).to_date()
if ds.year == year:
self[ds] = name
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 5)).to_date()
if ds.year == year:
self[ds] = name
# Hung Kings Commemorations
name = "Hung Kings Commemorations"
for offset in range(-1, 2, 1):
ds = Converter.Lunar2Solar(Lunar(year + offset, 3, 10)).to_date()
if ds.year == year:
self[ds] = name
# Reunification Day
name = "Reunification Day"
self[date(year, 4, 30)] = name
# Labor Day/International Workers' Day
name = "Labor Day/International Workers' Day"
self[date(year, 5, 1)] = name
# National Day
name = "National Day"
self[date(year, 9, 2)] = name
class VN(Vietnam):
pass
# ------------ Holidays in Thailand--------------------- # ------------ Holidays in Thailand---------------------
class Thailand(HolidayBase): class Thailand(HolidayBase):
""" """
Implement public holidays in Thailand Implement public holidays in Thailand
Reference: Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Thailand https://en.wikipedia.org/wiki/Public_holidays_in_Thailand
""" """
def __init__(self, **kwargs): def __init__(self, **kwargs):
skipping to change at line 1020 skipping to change at line 784
name = "Defence Day" name = "Defence Day"
self[date(year, 9, 6)] = name self[date(year, 9, 6)] = name
# Death Anniversary of Quaid-e-Azam # Death Anniversary of Quaid-e-Azam
name = "Death Anniversary of Quaid-e-Azam" name = "Death Anniversary of Quaid-e-Azam"
self[date(year, 9, 11)] = name self[date(year, 9, 11)] = name
class PK(Pakistan): class PK(Pakistan):
pass pass
# ------------ Holidays in Bangladesh---------------------
class Bangladesh(HolidayBase):
"""
Implement public holidays in Bangladesh
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Bangladesh
"""
def __init__(self, **kwargs):
self.country = "BD"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# Language Martyrs' Day
name = "Language Martyrs' Day"
self[date(year, 2, 21)] = name
# Mujib's birthday
name = "Mujib's birthday"
self[date(year, 3, 17)] = name
# Independence Day
name = "Independence Day"
self[date(year, 3, 26)] = name
# Bengali New Year's Day
name = "Bengali New Year's Day"
self[date(year, 4, 14)] = name
# Labor Day, May Day (local name)
name = "Labor Day"
self[date(year, 5, 1)] = name
# National Mourning Day
name = "National Mourning Day"
self[date(year, 8, 15)] = name
# Victory Day
name = "Victory Day"
self[date(year, 12, 16)] = name
class BD(Bangladesh):
pass
# ------------ Holidays in Egypt---------------------
class Egypt(HolidayBase):
"""
Implement public holidays in Egypt
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Egypt
"""
def __init__(self, **kwargs):
self.country = "EG"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# Fixed holidays
# Christmas
name = "Christmas"
self[date(year, 1, 7)] = name
# Revolution Day, after 2011
name = "Revolution Day 2011"
if year <= 2011:
self[date(year, 1, 25)] = name
# Sinai Liberation Day, after 1982
name = "Sinai Liberation Day"
if year <= 1982:
self[date(year, 4, 25)] = name
# Labor Day
name = "Labor Day"
self[date(year, 5, 1)] = name
# Revolution Day
name = "Sinai Liberation Day"
self[date(year, 7, 23)] = name
# Armed Forces Day
name = "Armed Forces Day"
self[date(year, 10, 6)] = name
# Sham El Nessim
# The Monday following Orthodox Easter
name = "Sham El Nessim"
for offset in range(-1, 2, 1):
orthodox_easter = easter(year + offset, method=EASTER_ORTHODOX)
ds = orthodox_easter + timedelta(days=1)
if ds.year == year:
self[ds] = name
# Islamic New Year
name = "Islamic New Year"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 9, 11)[0]
y, m, d = to_gregorian(islam_year + 1, 1, 1)
if y == year:
self[date(y, m, d)] = name
# Birthday of Prophet, Mawlid in India
# 12th day of 3rd Islamic month
name = "Birth of Prophet"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 11, 20)[0]
y, m, d = to_gregorian(islam_year, 3, 12)
if y == year:
self[date(y, m, d)] = name
# Eid ul-Fitr
# 1st and 2nd day of 10th Islamic month
name = "Eid al-Fitr"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 6, 15)[0]
y1, m1, d1 = to_gregorian(islam_year, 10, 1)
y2, m2, d2 = to_gregorian(islam_year, 10, 2)
y3, m3, d3 = to_gregorian(islam_year, 10, 3)
if y1 == year:
self[date(y1, m1, d1)] = name
if y2 == year:
self[date(y2, m2, d2)] = name
if y3 == year:
self[date(y3, m3, d3)] = name
# Eid al-Adha, i.e., Feast of the Sacrifice
name = "Feast of the Sacrifice"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 8, 22)[0]
y1, m1, d1 = to_gregorian(islam_year, 12, 10)
y2, m2, d2 = to_gregorian(islam_year, 12, 11)
y3, m3, d3 = to_gregorian(islam_year, 12, 12)
y4, m4, d4 = to_gregorian(islam_year, 12, 13)
if y1 == year:
self[date(y1, m1, d1)] = name
if y2 == year:
self[date(y2, m2, d2)] = name
if y3 == year:
self[date(y3, m3, d3)] = name
if y4 == year:
self[date(y4, m4, d4)] = name
class EG(Egypt):
pass
# ------------ Holidays in China---------------------
class China(HolidayBase):
"""
Implement public holidays in China
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_China
"""
def __init__(self, **kwargs):
self.country = "CN"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# New Year's Day
name = "New Year's Day"
self[date(year, 1, 1)] = name
# Chinese New Year/ Spring Festival
name = "Chinese New Year"
for offset in range(-1, 2, 1):
ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date()
if ds.year == year:
self[ds] = name
# Tomb-Sweeping Day
name = "Tomb-Sweeping Day"
self[date(year, 4, 4)] = name
self[date(year, 4, 5)] = name
# Labor Day
name = "Labor Day"
self[date(year, 5, 1)] = name
# Dragon Boat Festival
name = "Dragon Boat Festival"
for offset in range(-1, 2, 1):
ds = Converter.Lunar2Solar(Lunar(year + offset, 5, 5)).to_date()
if ds.year == year:
self[ds] = name
# Mid-Autumn Festival
name = "Mid-Autumn Festival"
for offset in range(-1, 2, 1):
ds = Converter.Lunar2Solar(Lunar(year + offset, 8, 15)).to_date()
if ds.year == year:
self[ds] = name
# National Day
name = "National Day"
self[date(year, 10, 1)] = name
class CN(China):
pass
# ------------ Holidays in Russia--------------------- # ------------ Holidays in Russia---------------------
class Russia(HolidayBase): class Russia(HolidayBase):
""" """
Implement public holidays in Russia Implement public holidays in Russia
Reference: Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Russia https://en.wikipedia.org/wiki/Public_holidays_in_Russia
Please note: Please note:
Orthodox Christmas Day is official day off at Russia Orthodox Christmas Day is official day off at Russia
But the Dec. 25 Christmas is also celebrated. But the Dec. 25 Christmas is also celebrated.
""" """
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.country = "RU" self.country = "RU"
HolidayBase.__init__(self, **kwargs) HolidayBase.__init__(self, **kwargs)
def _populate(self, year): def _populate(self, year):
skipping to change at line 1342 skipping to change at line 900
name = "October Revolution Day" name = "October Revolution Day"
self[date(year, 11, 7)] = name self[date(year, 11, 7)] = name
# Dec. 25 Christmas Day # Dec. 25 Christmas Day
name = "Christmas Day" name = "Christmas Day"
self[date(year, 12, 25)] = name self[date(year, 12, 25)] = name
class BY(Belarus): class BY(Belarus):
pass pass
# ------------ Holidays in United Arab Emirates---------------------
class UnitedArabEmirates(HolidayBase):
"""
Implement public holidays in United Arab Emirates
Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_the_United_Arab_Emirates
"""
def __init__(self, **kwargs):
self.country = "AE"
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# New Year's Day
name = "New Year's Day"
self[date(year, 1, 1)] = name
# Eid al-Fitr
name = "Eid al-Fitr"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 6, 15)[0]
y1, m1, d1 = to_gregorian(islam_year, 9, 29)
y2, m2, d2 = to_gregorian(
islam_year, 9, 30
) # Note: Ramadan day count is determined by Moon Sighting
y3, m3, d3 = to_gregorian(islam_year, 10, 1)
y4, m4, d4 = to_gregorian(islam_year, 10, 2)
y5, m5, d5 = to_gregorian(islam_year, 10, 3)
if y1 == year:
self[date(y1, m1, d1)] = name
if y2 == year:
self[date(y2, m2, d2)] = name
if y3 == year:
self[date(y3, m3, d3)] = name
if y4 == year:
self[date(y4, m4, d4)] = name
if y5 == year:
self[date(y5, m5, d5)] = name
# Day of Arafah
name = "Day of Arafah"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 8, 22)[0]
y, m, d = to_gregorian(islam_year, 12, 9)
if y == year:
self[date(y, m, d)] = name
# Feast of the Sacrifice
name = "Feast of the Sacrifice"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 8, 22)[0]
y1, m1, d1 = to_gregorian(islam_year, 12, 10)
y2, m2, d2 = to_gregorian(islam_year, 12, 11)
y3, m3, d3 = to_gregorian(islam_year, 12, 12)
if y1 == year:
self[date(y1, m1, d1)] = name
if y2 == year:
self[date(y2, m2, d2)] = name
if y3 == year:
self[date(y3, m3, d3)] = name
# Islamic New Year
name = "Islamic New Year"
for offset in range(-1, 2, 1):
islam_year = from_gregorian(year + offset, 9, 11)[0]
y, m, d = to_gregorian(islam_year + 1, 1, 1)
if y == year:
self[date(y, m, d)] = name
# Commemoration Day
name = "Commemoration Day"
self[date(year, 11, 30)] = name
# National Day
name = "National Day"
self[date(year, 12, 2)] = name
self[date(year, 12, 3)] = name
class AE(UnitedArabEmirates):
pass
# ------------ Holidays in Georgia--------------------- # ------------ Holidays in Georgia---------------------
class Georgia(HolidayBase): class Georgia(HolidayBase):
""" """
Implement public holidays in Georgia Implement public holidays in Georgia
Reference: Reference:
https://en.wikipedia.org/wiki/Public_holidays_in_Georgia_(country) https://en.wikipedia.org/wiki/Public_holidays_in_Georgia_(country)
""" """
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.country = "GE" self.country = "GE"
HolidayBase.__init__(self, **kwargs) HolidayBase.__init__(self, **kwargs)
def _populate(self, year): def _populate(self, year):
# New Year's Day # New Year's Day
name = "New Year's Day" name = "New Year's Day"
self[date(year, 1, 1)] = name self[date(year, 1, 1)] = name
 End of changes. 12 change blocks. 
528 lines changed or deleted 0 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)