445 lines
11 KiB
Python
445 lines
11 KiB
Python
# holidays
|
|
# --------
|
|
# A fast, efficient Python library for generating country, province and state
|
|
# specific sets of holidays on the fly. It aims to make determining whether a
|
|
# specific date is a holiday as fast and flexible as possible.
|
|
#
|
|
# Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
|
|
# dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
|
|
# ryanss <ryanssdev@icloud.com> (c) 2014-2017
|
|
# Website: https://github.com/vacanza/holidays
|
|
# License: MIT (see LICENSE file)
|
|
|
|
from datetime import date
|
|
from typing import Optional
|
|
|
|
from holidays.calendars.custom import _CustomCalendar
|
|
from holidays.calendars.gregorian import MAY, JUN
|
|
|
|
VESAK = "VESAK"
|
|
VESAK_MAY = "VESAK_MAY"
|
|
|
|
|
|
class _BuddhistLunisolar:
|
|
VESAK_DATES = {
|
|
1901: (JUN, 1),
|
|
1902: (MAY, 22),
|
|
1903: (MAY, 11),
|
|
1904: (MAY, 29),
|
|
1905: (MAY, 18),
|
|
1906: (MAY, 8),
|
|
1907: (MAY, 26),
|
|
1908: (MAY, 14),
|
|
1909: (JUN, 2),
|
|
1910: (MAY, 23),
|
|
1911: (MAY, 13),
|
|
1912: (MAY, 31),
|
|
1913: (MAY, 20),
|
|
1914: (MAY, 9),
|
|
1915: (MAY, 28),
|
|
1916: (MAY, 16),
|
|
1917: (JUN, 4),
|
|
1918: (MAY, 24),
|
|
1919: (MAY, 14),
|
|
1920: (JUN, 1),
|
|
1921: (MAY, 22),
|
|
1922: (MAY, 11),
|
|
1923: (MAY, 30),
|
|
1924: (MAY, 18),
|
|
1925: (MAY, 7),
|
|
1926: (MAY, 26),
|
|
1927: (MAY, 15),
|
|
1928: (JUN, 2),
|
|
1929: (MAY, 23),
|
|
1930: (MAY, 13),
|
|
1931: (MAY, 31),
|
|
1932: (MAY, 20),
|
|
1933: (MAY, 9),
|
|
1934: (MAY, 27),
|
|
1935: (MAY, 17),
|
|
1936: (JUN, 4),
|
|
1937: (MAY, 24),
|
|
1938: (MAY, 14),
|
|
1939: (JUN, 2),
|
|
1940: (MAY, 21),
|
|
1941: (MAY, 10),
|
|
1942: (MAY, 29),
|
|
1943: (MAY, 18),
|
|
1944: (MAY, 7),
|
|
1945: (MAY, 26),
|
|
1946: (MAY, 15),
|
|
1947: (JUN, 3),
|
|
1948: (MAY, 23),
|
|
1949: (MAY, 12),
|
|
1950: (MAY, 31),
|
|
1951: (MAY, 20),
|
|
1952: (MAY, 8),
|
|
1953: (MAY, 27),
|
|
1954: (MAY, 17),
|
|
1955: (JUN, 5),
|
|
1956: (MAY, 24),
|
|
1957: (MAY, 14),
|
|
1958: (JUN, 2),
|
|
1959: (MAY, 22),
|
|
1960: (MAY, 10),
|
|
1961: (MAY, 29),
|
|
1962: (MAY, 18),
|
|
1963: (MAY, 8),
|
|
1964: (MAY, 26),
|
|
1965: (MAY, 15),
|
|
1966: (JUN, 3),
|
|
1967: (MAY, 23),
|
|
1968: (MAY, 11),
|
|
1969: (MAY, 30),
|
|
1970: (MAY, 19),
|
|
1971: (MAY, 9),
|
|
1972: (MAY, 27),
|
|
1973: (MAY, 17),
|
|
1974: (MAY, 6),
|
|
1975: (MAY, 25),
|
|
1976: (MAY, 13),
|
|
1977: (JUN, 1),
|
|
1978: (MAY, 21),
|
|
1979: (MAY, 10),
|
|
1980: (MAY, 28),
|
|
1981: (MAY, 18),
|
|
1982: (MAY, 8),
|
|
1983: (MAY, 27),
|
|
1984: (MAY, 15),
|
|
1985: (JUN, 3),
|
|
1986: (MAY, 23),
|
|
1987: (MAY, 12),
|
|
1988: (MAY, 30),
|
|
1989: (MAY, 19),
|
|
1990: (MAY, 9),
|
|
1991: (MAY, 28),
|
|
1992: (MAY, 17),
|
|
1993: (JUN, 4),
|
|
1994: (MAY, 25),
|
|
1995: (MAY, 14),
|
|
1996: (MAY, 31),
|
|
1997: (MAY, 21),
|
|
1998: (MAY, 10),
|
|
1999: (MAY, 29),
|
|
2000: (MAY, 18),
|
|
2001: (MAY, 7),
|
|
2002: (MAY, 26),
|
|
2003: (MAY, 15),
|
|
2004: (JUN, 2),
|
|
2005: (MAY, 22),
|
|
2006: (MAY, 12),
|
|
2007: (MAY, 31),
|
|
2008: (MAY, 19),
|
|
2009: (MAY, 9),
|
|
2010: (MAY, 28),
|
|
2011: (MAY, 17),
|
|
2012: (MAY, 5),
|
|
2013: (MAY, 24),
|
|
2014: (MAY, 13),
|
|
2015: (JUN, 1),
|
|
2016: (MAY, 21),
|
|
2017: (MAY, 10),
|
|
2018: (MAY, 29),
|
|
2019: (MAY, 19),
|
|
2020: (MAY, 7),
|
|
2021: (MAY, 26),
|
|
2022: (MAY, 15),
|
|
2023: (JUN, 2),
|
|
2024: (MAY, 22),
|
|
2025: (MAY, 12),
|
|
2026: (MAY, 31),
|
|
2027: (MAY, 20),
|
|
2028: (MAY, 9),
|
|
2029: (MAY, 27),
|
|
2030: (MAY, 16),
|
|
2031: (JUN, 4),
|
|
2032: (MAY, 23),
|
|
2033: (MAY, 13),
|
|
2034: (JUN, 1),
|
|
2035: (MAY, 22),
|
|
2036: (MAY, 10),
|
|
2037: (MAY, 29),
|
|
2038: (MAY, 18),
|
|
2039: (MAY, 7),
|
|
2040: (MAY, 25),
|
|
2041: (MAY, 14),
|
|
2042: (JUN, 2),
|
|
2043: (MAY, 23),
|
|
2044: (MAY, 12),
|
|
2045: (MAY, 31),
|
|
2046: (MAY, 20),
|
|
2047: (MAY, 9),
|
|
2048: (MAY, 27),
|
|
2049: (MAY, 16),
|
|
2050: (JUN, 4),
|
|
2051: (MAY, 24),
|
|
2052: (MAY, 13),
|
|
2053: (JUN, 1),
|
|
2054: (MAY, 22),
|
|
2055: (MAY, 11),
|
|
2056: (MAY, 29),
|
|
2057: (MAY, 18),
|
|
2058: (MAY, 7),
|
|
2059: (MAY, 26),
|
|
2060: (MAY, 14),
|
|
2061: (JUN, 2),
|
|
2062: (MAY, 23),
|
|
2063: (MAY, 12),
|
|
2064: (MAY, 30),
|
|
2065: (MAY, 19),
|
|
2066: (MAY, 8),
|
|
2067: (MAY, 27),
|
|
2068: (MAY, 16),
|
|
2069: (MAY, 5),
|
|
2070: (MAY, 24),
|
|
2071: (MAY, 14),
|
|
2072: (JUN, 1),
|
|
2073: (MAY, 21),
|
|
2074: (MAY, 10),
|
|
2075: (MAY, 29),
|
|
2076: (MAY, 17),
|
|
2077: (MAY, 7),
|
|
2078: (MAY, 26),
|
|
2079: (MAY, 15),
|
|
2080: (JUN, 2),
|
|
2081: (MAY, 23),
|
|
2082: (MAY, 12),
|
|
2083: (MAY, 31),
|
|
2084: (MAY, 19),
|
|
2085: (MAY, 8),
|
|
2086: (MAY, 27),
|
|
2087: (MAY, 17),
|
|
2088: (MAY, 5),
|
|
2089: (MAY, 24),
|
|
2090: (MAY, 14),
|
|
2091: (JUN, 1),
|
|
2092: (MAY, 20),
|
|
2093: (MAY, 10),
|
|
2094: (MAY, 28),
|
|
2095: (MAY, 18),
|
|
2096: (MAY, 7),
|
|
2097: (MAY, 26),
|
|
2098: (MAY, 15),
|
|
2099: (JUN, 3),
|
|
2100: (MAY, 23),
|
|
}
|
|
|
|
VESAK_MAY_DATES = {
|
|
1901: (MAY, 3),
|
|
1902: (MAY, 22),
|
|
1903: (MAY, 11),
|
|
1904: (MAY, 29),
|
|
1905: (MAY, 18),
|
|
1906: (MAY, 8),
|
|
1907: (MAY, 26),
|
|
1908: (MAY, 14),
|
|
1909: (MAY, 4),
|
|
1910: (MAY, 23),
|
|
1911: (MAY, 13),
|
|
1912: (MAY, 1),
|
|
1913: (MAY, 20),
|
|
1914: (MAY, 9),
|
|
1915: (MAY, 28),
|
|
1916: (MAY, 16),
|
|
1917: (MAY, 5),
|
|
1918: (MAY, 24),
|
|
1919: (MAY, 14),
|
|
1920: (MAY, 3),
|
|
1921: (MAY, 22),
|
|
1922: (MAY, 11),
|
|
1923: (MAY, 30),
|
|
1924: (MAY, 18),
|
|
1925: (MAY, 7),
|
|
1926: (MAY, 26),
|
|
1927: (MAY, 15),
|
|
1928: (MAY, 4),
|
|
1929: (MAY, 23),
|
|
1930: (MAY, 13),
|
|
1931: (MAY, 2),
|
|
1932: (MAY, 20),
|
|
1933: (MAY, 9),
|
|
1934: (MAY, 27),
|
|
1935: (MAY, 17),
|
|
1936: (MAY, 5),
|
|
1937: (MAY, 24),
|
|
1938: (MAY, 14),
|
|
1939: (MAY, 4),
|
|
1940: (MAY, 21),
|
|
1941: (MAY, 10),
|
|
1942: (MAY, 29),
|
|
1943: (MAY, 18),
|
|
1944: (MAY, 7),
|
|
1945: (MAY, 26),
|
|
1946: (MAY, 15),
|
|
1947: (MAY, 5),
|
|
1948: (MAY, 23),
|
|
1949: (MAY, 12),
|
|
1950: (MAY, 1),
|
|
1951: (MAY, 20),
|
|
1952: (MAY, 8),
|
|
1953: (MAY, 27),
|
|
1954: (MAY, 17),
|
|
1955: (MAY, 6),
|
|
1956: (MAY, 24),
|
|
1957: (MAY, 14),
|
|
1958: (MAY, 3),
|
|
1959: (MAY, 22),
|
|
1960: (MAY, 10),
|
|
1961: (MAY, 29),
|
|
1962: (MAY, 18),
|
|
1963: (MAY, 8),
|
|
1964: (MAY, 26),
|
|
1965: (MAY, 15),
|
|
1966: (MAY, 5),
|
|
1967: (MAY, 23),
|
|
1968: (MAY, 11),
|
|
1969: (MAY, 1),
|
|
1970: (MAY, 19),
|
|
1971: (MAY, 9),
|
|
1972: (MAY, 27),
|
|
1973: (MAY, 17),
|
|
1974: (MAY, 6),
|
|
1975: (MAY, 25),
|
|
1976: (MAY, 13),
|
|
1977: (MAY, 2),
|
|
1978: (MAY, 21),
|
|
1979: (MAY, 10),
|
|
1980: (MAY, 28),
|
|
1981: (MAY, 18),
|
|
1982: (MAY, 8),
|
|
1983: (MAY, 27),
|
|
1984: (MAY, 15),
|
|
1985: (MAY, 4),
|
|
1986: (MAY, 23),
|
|
1987: (MAY, 12),
|
|
1988: (MAY, 30),
|
|
1989: (MAY, 19),
|
|
1990: (MAY, 9),
|
|
1991: (MAY, 28),
|
|
1992: (MAY, 17),
|
|
1993: (MAY, 6),
|
|
1994: (MAY, 25),
|
|
1995: (MAY, 14),
|
|
1996: (MAY, 2),
|
|
1997: (MAY, 21),
|
|
1998: (MAY, 10),
|
|
1999: (MAY, 29),
|
|
2000: (MAY, 18),
|
|
2001: (MAY, 7),
|
|
2002: (MAY, 26),
|
|
2003: (MAY, 15),
|
|
2004: (MAY, 3),
|
|
2005: (MAY, 22),
|
|
2006: (MAY, 12),
|
|
2007: (MAY, 1),
|
|
2008: (MAY, 19),
|
|
2009: (MAY, 9),
|
|
2010: (MAY, 28),
|
|
2011: (MAY, 17),
|
|
2012: (MAY, 5),
|
|
2013: (MAY, 24),
|
|
2014: (MAY, 13),
|
|
2015: (MAY, 3),
|
|
2016: (MAY, 21),
|
|
2017: (MAY, 10),
|
|
2018: (MAY, 29),
|
|
2019: (MAY, 19),
|
|
2020: (MAY, 7),
|
|
2021: (MAY, 26),
|
|
2022: (MAY, 15),
|
|
2023: (MAY, 4),
|
|
2024: (MAY, 22),
|
|
2025: (MAY, 12),
|
|
2026: (MAY, 1),
|
|
2027: (MAY, 20),
|
|
2028: (MAY, 9),
|
|
2029: (MAY, 27),
|
|
2030: (MAY, 16),
|
|
2031: (MAY, 6),
|
|
2032: (MAY, 23),
|
|
2033: (MAY, 13),
|
|
2034: (MAY, 3),
|
|
2035: (MAY, 22),
|
|
2036: (MAY, 10),
|
|
2037: (MAY, 29),
|
|
2038: (MAY, 18),
|
|
2039: (MAY, 7),
|
|
2040: (MAY, 25),
|
|
2041: (MAY, 14),
|
|
2042: (MAY, 4),
|
|
2043: (MAY, 23),
|
|
2044: (MAY, 12),
|
|
2045: (MAY, 1),
|
|
2046: (MAY, 20),
|
|
2047: (MAY, 9),
|
|
2048: (MAY, 27),
|
|
2049: (MAY, 16),
|
|
2050: (MAY, 5),
|
|
2051: (MAY, 24),
|
|
2052: (MAY, 13),
|
|
2053: (MAY, 3),
|
|
2054: (MAY, 22),
|
|
2055: (MAY, 11),
|
|
2056: (MAY, 29),
|
|
2057: (MAY, 18),
|
|
2058: (MAY, 7),
|
|
2059: (MAY, 26),
|
|
2060: (MAY, 14),
|
|
2061: (MAY, 4),
|
|
2062: (MAY, 23),
|
|
2063: (MAY, 12),
|
|
2064: (MAY, 1),
|
|
2065: (MAY, 19),
|
|
2066: (MAY, 8),
|
|
2067: (MAY, 27),
|
|
2068: (MAY, 16),
|
|
2069: (MAY, 5),
|
|
2070: (MAY, 24),
|
|
2071: (MAY, 14),
|
|
2072: (MAY, 2),
|
|
2073: (MAY, 21),
|
|
2074: (MAY, 10),
|
|
2075: (MAY, 29),
|
|
2076: (MAY, 17),
|
|
2077: (MAY, 7),
|
|
2078: (MAY, 26),
|
|
2079: (MAY, 15),
|
|
2080: (MAY, 4),
|
|
2081: (MAY, 23),
|
|
2082: (MAY, 12),
|
|
2083: (MAY, 1),
|
|
2084: (MAY, 19),
|
|
2085: (MAY, 8),
|
|
2086: (MAY, 27),
|
|
2087: (MAY, 17),
|
|
2088: (MAY, 5),
|
|
2089: (MAY, 24),
|
|
2090: (MAY, 14),
|
|
2091: (MAY, 3),
|
|
2092: (MAY, 20),
|
|
2093: (MAY, 10),
|
|
2094: (MAY, 28),
|
|
2095: (MAY, 18),
|
|
2096: (MAY, 7),
|
|
2097: (MAY, 26),
|
|
2098: (MAY, 15),
|
|
2099: (MAY, 4),
|
|
2100: (MAY, 23),
|
|
}
|
|
|
|
def _get_holiday(self, holiday: str, year: int) -> tuple[Optional[date], bool]:
|
|
estimated_dates = getattr(self, f"{holiday}_DATES", {})
|
|
exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
|
|
dt = exact_dates.get(year, estimated_dates.get(year, ()))
|
|
return date(year, *dt) if dt else None, year not in exact_dates
|
|
|
|
def vesak_date(self, year: int) -> tuple[Optional[date], bool]:
|
|
return self._get_holiday(VESAK, year)
|
|
|
|
def vesak_may_date(self, year: int) -> tuple[Optional[date], bool]:
|
|
return self._get_holiday(VESAK_MAY, year)
|
|
|
|
|
|
class _CustomBuddhistHolidays(_CustomCalendar, _BuddhistLunisolar):
|
|
pass
|