Files
Time-Series-Analysis/.venv/lib/python3.12/site-packages/holidays/countries/cocos_islands.py
2025-07-30 18:53:50 +03:00

261 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 gettext import gettext as tr
from holidays.calendars import _CustomIslamicHolidays
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
from holidays.groups import (
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
)
from holidays.observed_holiday_base import (
ObservedHolidayBase,
MON_TO_NEXT_TUE,
SAT_SUN_TO_NEXT_MON,
SAT_SUN_TO_NEXT_MON_TUE,
)
class CocosIslands(
ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays
):
"""Cocos (Keeling) Islands holidays.
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_the_Cocos_(Keeling)_Islands>
* <https://web.archive.org/web/20250514044918/https://www.infrastructure.gov.au/territories-regions-cities/territories/indian-ocean-territories/community-bulletins>
* <https://web.archive.org/web/20250417205202/https://www.infrastructure.gov.au/territories-regions-cities/territories/indian-ocean-territories/gazettes-bulletins>
* [2007](https://web.archive.org/web/20250605022855/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2006/02_2006_Public_Holidays_2007_CKI.doc)
* [2008](https://web.archive.org/web/20240718120923/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2007/06-2007_Public_Holidays_CKI.pdf)
* [2008 Eid al-Fitr](https://web.archive.org/web/20240331104649/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2008/03_2008_Observance_of_Hari_Raya_Puasa_2008.pdf)
* [2009](https://web.archive.org/web/20231208153529/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2008/01-2008-2009-public-holiday-CKI-gazette.pdf)
* [2010](https://archive.org/details/cocos-island-2009-gazette-6-2009-cki-proclamation-of-2010-special-public-bank-holidays)
* [2013](https://web.archive.org/web/20240805055409/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2012/2012-Gazette_8-2012-CKI-Proclamation_of_2013_Public_Holidays_for_Cocos_(Keeling)_Islands.pdf)
* [2014](https://web.archive.org/web/20240718123844/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2013/2013-Gazette_3-2013-Cocos_K_Islands_2014_Public_Holidays.pdf)
* [2016](https://archive.org/details/cocos-island-2015-gazette-4-2015-cki-proclamation-of-2016-special-public-bank-holidays)
* [2016 Eid al-Fitr](https://web.archive.org/web/20231208203746/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2016/2016-Gazette_3-2016-CKI-Proclamation_Special_Public_and_Bank_Holidays_2016.pdf)
* [2017](https://web.archive.org/web/20240303203132/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2016/2016-Gazette_2-2016-CKI-Proclamation_Special_Public_and_Bank_Holidays_2017.pdf)
* [2019](https://web.archive.org/web/20241123131420/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2018/files/A38-2018.pdf)
* [2019 Act of Self Determination Day](https://web.archive.org/web/20220518200522/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2019/files/A10-2019-bank-holidays.pdf)
* [2020](https://web.archive.org/web/20240521203357/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2019/files/A53-2019.pdf)
* [2021](https://web.archive.org/web/20250502204052/https://www.infrastructure.gov.au/territories-regions-cities/territories/indian_ocean/iot_bulletins/2020/A041-2020-cki-public-holidays)
* [2022](https://web.archive.org/web/20250429071240/https://www.infrastructure.gov.au/sites/default/files/documents/a33-2021-2022-public-holidays-cocos-keeling-islands.pdf)
* [2022 Eid al-Fitr](https://web.archive.org/web/20220810061351/https://www.infrastructure.gov.au/sites/default/files/documents/Gazette-Change-to-CKI-Hari-Raya-Puasa-2022.pdf)
* [2023](https://web.archive.org/web/20240711221156/https://www.infrastructure.gov.au/sites/default/files/documents/a19-2022-community-bulletin-2023-kings-birthday-cocos-keeling-islands.pdf)
* [2023 Eid al-Fitr](https://web.archive.org/web/20250627103728/https://www.infrastructure.gov.au/sites/default/files/documents/a02-2023-community-bulletin-change-of-public-holiday-date-for-hari-raya-puasa-2023-cocos-keeling-islands.pdf)
* [2023 Eid al-Adha](https://web.archive.org/web/20240804112114/https://www.infrastructure.gov.au/sites/default/files/documents/a06-2023_community_bulletin_-_change_of_public_holiday_date_for_hari_raya_haji_2023.pdf)
* [2024](https://web.archive.org/web/20250207203100/https://www.infrastructure.gov.au/sites/default/files/documents/a12-2023-2024-public-holidays-cocos-k-islands.pdf)
* [2025](https://web.archive.org/web/20250413083314/https://www.infrastructure.gov.au/sites/default/files/documents/a21-2024-administrator-community-bulletin-cki-public-holidays-2025.pdf)
"""
country = "CC"
default_language = "en_CC"
# %s (observed).
observed_label = tr("%s (observed)")
# %s (estimated).
estimated_label = tr("%s (estimated)")
# %s (observed, estimated).
observed_estimated_label = tr("%s (observed, estimated)")
supported_languages = ("coa_CC", "en_CC", "en_US")
# Act of Self Determination 1984.
start_year = 1985
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
"""
Args:
islamic_show_estimated:
Whether to add "estimated" label to Islamic holidays name
if holiday date is estimated.
"""
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
IslamicHolidays.__init__(
self, cls=CocosIslandsIslamicHolidays, show_estimated=islamic_show_estimated
)
StaticHolidays.__init__(self, CocosIslandsStaticHolidays)
kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
super().__init__(*args, **kwargs)
def _populate_public_holidays(self):
# New Year's Day.
self._add_observed(self._add_new_years_day(tr("New Year's Day")))
# Australia Day.
self._add_observed(self._add_holiday_jan_26(tr("Australia Day")))
act_of_self_determination_dates = {
2007: (APR, 5),
}
# Act of Self Determination Day.
name = tr("Act of Self Determination Day")
if dt := act_of_self_determination_dates.get(self._year):
self._add_holiday(name, dt)
else:
dt = self._add_holiday_apr_6(name)
if self._year != 2019:
self._add_observed(dt)
# Good Friday.
self._add_good_friday(tr("Good Friday"))
# Easter Monday.
self._add_easter_monday(tr("Easter Monday"))
# ANZAC Day.
self._add_observed(self._add_anzac_day(tr("ANZAC Day")))
queens_kings_birthday_dates = {
2021: (JUN, 7),
2022: (JUN, 6),
2023: (JUN, 6),
2024: (JUN, 6),
}
name = (
# King's Birthday.
tr("King's Birthday")
if self._year >= 2023
# Queen's Birthday.
else tr("Queen's Birthday")
)
if dt := queens_kings_birthday_dates.get(self._year):
self._add_holiday(name, dt)
else:
self._add_holiday_2nd_mon_of_jun(name)
# Placed before Christmas Day for proper observed calculation.
self._add_observed(
# Boxing Day.
self._add_christmas_day_two(tr("Boxing Day")),
rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE,
)
# Christmas Day.
self._add_observed(self._add_christmas_day(tr("Christmas Day")))
# Islamic holidays.
if self._year <= 2019:
# Islamic New Year.
for dt in self._add_islamic_new_year_day(tr("Islamic New Year")):
self._add_observed(dt)
# Prophet's Birthday.
for dt in self._add_mawlid_day(tr("Prophet's Birthday")):
self._add_observed(dt)
# Eid al-Fitr.
for dt in self._add_eid_al_fitr_day(tr("Eid al-Fitr")):
self._add_observed(dt)
# Eid al-Adha.
for dt in self._add_eid_al_adha_day(tr("Eid al-Adha")):
if self._year != 2025:
self._add_observed(dt)
class CocosIslandsIslamicHolidays(_CustomIslamicHolidays):
EID_AL_ADHA_DATES = {
2007: (DEC, 20),
2008: (DEC, 8),
2009: (NOV, 30),
2010: (NOV, 16),
2013: (OCT, 15),
2014: (OCT, 4),
2016: (SEP, 13),
2017: (SEP, 1),
2019: (AUG, 11),
2020: (JUL, 31),
2021: (JUL, 20),
2022: (JUL, 9),
2023: (JUN, 28),
2024: (JUN, 17),
2025: (JUN, 7),
}
EID_AL_FITR_DATES = {
2007: (OCT, 15),
2008: (OCT, 1),
2009: (SEP, 21),
2010: (SEP, 10),
2013: (AUG, 8),
2014: (JUL, 28),
2016: (JUL, 6),
2017: (JUN, 24),
2019: (JUN, 5),
2020: (MAY, 24),
2021: (MAY, 13),
2022: (MAY, 3),
2023: (APR, 21),
2024: (APR, 10),
2025: (MAR, 31),
}
HIJRI_NEW_YEAR_DATES = {
2007: (JAN, 22),
2008: (JAN, 10),
2009: (DEC, 18),
2010: (DEC, 7),
2013: (NOV, 4),
2014: (OCT, 25),
2016: (OCT, 3),
2017: (SEP, 22),
2019: (SEP, 1),
}
MAWLID_DATES = {
2007: (APR, 2),
2008: (MAR, 20),
2009: (MAR, 9),
2010: (FEB, 26),
2013: (JAN, 24),
2014: (JAN, 13),
2016: (DEC, 12),
2017: (DEC, 1),
2019: (NOV, 9),
2020: (OCT, 29),
2021: (OCT, 19),
2022: (OCT, 8),
2023: (SEP, 27),
2024: (SEP, 16),
2025: (SEP, 5),
}
class CC(CocosIslands):
pass
class CCK(CocosIslands):
pass
class CocosIslandsStaticHolidays:
"""Cocos (Keeling) Islands special holidays.
References:
* [National Day of Mourning 2022](https://web.archive.org/web/20240712213751/https://www.infrastructure.gov.au/sites/default/files/documents/04-2022-proclamation-cki-day-of-mourning.pdf)
"""
special_public_holidays = {
# National Day of Mourning for Queen Elizabeth II.
2022: (SEP, 22, tr("National Day of Mourning for Queen Elizabeth II")),
}
special_public_holidays_observed = {
2019: (APR, 10, tr("Act of Self Determination Day")),
2025: (JUN, 6, tr("Eid al-Adha")),
}