Files
Time-Series-Analysis/venv/lib/python3.11/site-packages/holidays/countries/nepal.py
2025-08-01 04:33:03 -04:00

442 lines
13 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 holidays.calendars import _CustomIslamicHolidays, _CustomHinduHolidays
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
from holidays.constants import PUBLIC, WORKDAY
from holidays.groups import (
ChristianHolidays,
HinduCalendarHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
)
from holidays.holiday_base import HolidayBase
class Nepal(
HolidayBase,
ChristianHolidays,
HinduCalendarHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
):
"""Nepal holidays.
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_Nepal>
* <https://web.archive.org/web/20250422191700/https://narayanilawfirm.org.np/list-of-public-holidays-in-nepal-2079/>
* <https://web.archive.org/web/20250131082346/https://www.timeanddate.com/holidays/nepal/>
* <https://web.archive.org/web/20240911172745/https://kathmandupost.com/national/2018/03/29/government-trims-public-holidays-by-22-days>
* <https://web.archive.org/web/20250419211438/https://kathmandupost.com/national/2021/02/13/two-years-after-shortening-public-holiday-list-government-starts-adding-to-it-again>
* <https://web.archive.org/web/20250316094224/https://english.hamropatro.com/nepali-public-holidays>
* <https://web.archive.org/web/20250527164012/https://english.hamropatro.com/calendar>
* <https://web.archive.org/web/20250322000610/https://www.ashesh.com.np/nepali-calendar/>
* <https://web.archive.org/web/20250117021312/https://www.bolpatra.gov.np/egp/openDateConverter>
* <https://web.archive.org/web/20241013164133/https://www.moha.gov.np/en/page/holidays>
"""
country = "NP"
# %s (estimated).
estimated_label = "%s (estimated)"
start_year = 2010
supported_categories = (PUBLIC, WORKDAY)
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)
HinduCalendarHolidays.__init__(self, cls=NepalHinduHolidays)
InternationalHolidays.__init__(self)
IslamicHolidays.__init__(
self, cls=NepalIslamicHolidays, show_estimated=islamic_show_estimated
)
StaticHolidays.__init__(self, cls=NepalStaticHolidays)
super().__init__(*args, **kwargs)
def _add_non_continuous_holidays(self, is_workday: bool = False):
"""Holidays removed by MoHA between 2019-2020."""
if (2019 <= self._year <= 2020) == is_workday:
martyrs_day_dates = {
2010: (JAN, 30),
2011: (JAN, 30),
2012: (JAN, 30),
2013: (JAN, 29),
2014: (JAN, 30),
2015: (JAN, 30),
2016: (JAN, 30),
2017: (JAN, 29),
2018: (JAN, 30),
2019: (JAN, 30),
2020: (JAN, 30),
2021: (JAN, 29),
2022: (JAN, 30),
2023: (JAN, 30),
2024: (JAN, 30),
2025: (JAN, 29),
2026: (JAN, 29),
2027: (JAN, 29),
2028: (JAN, 29),
2029: (JAN, 29),
2030: (JAN, 29),
2031: (JAN, 30),
2032: (JAN, 30),
2033: (JAN, 29),
}
if dt := martyrs_day_dates.get(self._year):
# Martyr's Day.
self._add_holiday("Martyr's Day", dt)
democracy_day_dates = {
2010: (FEB, 19),
2011: (FEB, 19),
2012: (FEB, 19),
2013: (FEB, 18),
2014: (FEB, 19),
2015: (FEB, 19),
2016: (FEB, 19),
2017: (FEB, 18),
2018: (FEB, 19),
2019: (FEB, 19),
2020: (FEB, 19),
2021: (FEB, 19),
2022: (FEB, 19),
2023: (FEB, 19),
2024: (FEB, 19),
2025: (FEB, 19),
2026: (FEB, 19),
2027: (FEB, 19),
2028: (FEB, 19),
2029: (FEB, 19),
2030: (FEB, 19),
2031: (FEB, 20),
2032: (FEB, 20),
2033: (FEB, 19),
}
if dt := democracy_day_dates.get(self._year):
# National Democracy Day.
self._add_holiday("National Democracy Day", dt)
republic_day_dates = {
2010: (MAY, 29),
2011: (MAY, 29),
2012: (MAY, 28),
2013: (MAY, 29),
2014: (MAY, 29),
2015: (MAY, 29),
2016: (MAY, 28),
2017: (MAY, 29),
2018: (MAY, 29),
2019: (MAY, 29),
2020: (MAY, 28),
2021: (MAY, 29),
2022: (MAY, 29),
2023: (MAY, 29),
2024: (MAY, 28),
2025: (MAY, 28),
2026: (MAY, 29),
2027: (MAY, 29),
2028: (MAY, 28),
2029: (MAY, 28),
2030: (MAY, 29),
2031: (MAY, 29),
2032: (MAY, 28),
}
if dt := republic_day_dates.get(self._year):
# Established in 2009.
# Republic Day.
self._add_holiday("Republic Day", dt)
# Hindu Holidays.
# Ram Navami.
self._add_ram_navami("Ram Navami")
# Janai Poornima.
self._add_raksha_bandhan("Janai Poornima")
# Shree Krishna Janmashtami.
self._add_janmashtami("Shree Krishna Janmashtami")
# Ghatasthapana.
self._add_sharad_navratri("Ghatasthapana")
# Duwadashi (Dashain).
self._add_papankusha_duwadashi("Duwadashi (Dashain)")
def _populate_public_holidays(self):
if self._year >= 2023:
# Prithvi Jayanti.
self._add_holiday_jan_11("Prithvi Jayanti")
# International Women's Day.
self._add_womens_day("International Women's Day")
# Nepal New Year.
self._add_vaisakhi("Nepali New Year")
# International Labour Day.
self._add_labor_day("International Labour Day")
constitution_day_dates = {
2016: (SEP, 19),
2017: (SEP, 19),
2018: (SEP, 19),
2019: (SEP, 20),
2020: (SEP, 19),
2021: (SEP, 19),
2022: (SEP, 19),
2023: (SEP, 20),
2024: (SEP, 19),
2025: (SEP, 19),
2026: (SEP, 19),
2027: (SEP, 19),
2028: (SEP, 18),
2029: (SEP, 19),
2030: (SEP, 19),
2031: (SEP, 19),
2032: (SEP, 19),
}
if dt := constitution_day_dates.get(self._year):
# Constitution Day.
self._add_holiday("Constitution Day", dt)
# Christmas Day.
self._add_christmas_day("Christmas Day")
# Hindu holidays.
# Maghe Sankranti.
self._add_makar_sankranti("Maghe Sankranti")
# Sonam Lhochhar.
self._add_sonam_losar("Sonam Lhochhar")
# Maha Shivaratri.
self._add_maha_shivaratri("Maha Shivaratri")
# Gyalpo Lhosar.
self._add_gyalpo_losar("Gyalpo Lhosar")
# Fagu Poornima.
self._add_nepal_holi("Fagu Poornima")
# Fagu Poornima (Terai).
self._add_holi("Fagu Poornima (Terai)")
# Buddha Jayanti.
self._add_buddha_purnima("Buddha Jayanti")
# Fulpati.
self._add_maha_saptami("Fulpati")
# Maha Ashtami.
self._add_maha_ashtami("Maha Ashtami")
# Maha Navami.
self._add_maha_navami("Maha Navami")
# Bijaya Dashami.
self._add_dussehra("Bijaya Dashami")
# Ekadashi (Dashain).
self._add_papankusha_ekadashi("Ekadashi (Dashain)")
# Laxmi Pooja.
self._add_diwali_india("Laxmi Pooja")
# Gai Tihar.
self._add_gau_krida("Gai Tihar")
# Gobardhan Pooja.
self._add_govardhan_puja("Gobardhan Pooja")
# Mha Pooja.
self._add_govardhan_puja("Mha Pooja")
# Bhai Tika.
self._add_bhai_dooj("Bhai Tika")
# Chhath Parva.
self._add_chhath_puja("Chhath Parva")
# Tamu Lhochhar.
self._add_tamu_losar("Tamu Lhochhar")
# Islamic holidays.
# Eid al-Fitr.
self._add_eid_al_fitr_day("Id-ul-Fitr")
# Eid al-Adha.
self._add_eid_al_adha_day("Bakrid")
# Removed by MoHA between 2019-2020.
self._add_non_continuous_holidays()
def _populate_workday_holidays(self):
self._add_non_continuous_holidays(is_workday=True)
class NepalIslamicHolidays(_CustomIslamicHolidays):
# Bakrid / Eid-al-Adha.
EID_AL_ADHA_DATES = {
2010: (NOV, 17),
2011: (NOV, 7),
2012: (OCT, 27),
2013: (OCT, 16),
2014: (OCT, 6),
2015: (SEP, 25),
2016: (SEP, 13),
2017: (SEP, 2),
2018: (AUG, 22),
2019: (AUG, 12),
2020: (AUG, 1),
2021: (JUL, 21),
2022: (JUL, 10),
2023: (JUN, 29),
2024: (JUN, 17),
2025: (JUN, 7),
}
# Id-ul-Fitr / Eid-al-Fitr.
EID_AL_FITR_DATES = {
2010: (SEP, 10),
2011: (AUG, 31),
2012: (AUG, 20),
2013: (AUG, 8),
2014: (JUL, 29),
2015: (JUL, 18),
2016: (JUL, 7),
2017: (JUN, 26),
2018: (JUN, 16),
2019: (JUN, 5),
2020: (MAY, 25),
2021: (MAY, 14),
2022: (MAY, 3),
2023: (APR, 22),
2024: (APR, 11),
2025: (MAR, 31),
}
class NepalHinduHolidays(_CustomHinduHolidays):
# Maghe Sankranti.
MAKAR_SANKRANTI_DATES = {
2022: (JAN, 15),
2023: (JAN, 15),
2024: (JAN, 15),
2026: (JAN, 15),
}
# Fagu Poornima (Terai).
HOLI_DATES = {
2023: (MAR, 7),
2026: (MAR, 3),
}
# Ram Navami.
RAM_NAVAMI_DATES = {
2026: (MAR, 27),
}
# Nepal New Year.
VAISAKHI_DATES = {
2025: (APR, 14),
}
# Janai Punima.
RAKSHA_BANDHAN_DATES = {
2022: (AUG, 12),
2023: (AUG, 31),
}
# Shree Krishna Janmashtami.
JANMASHTAMI_DATES = {
2023: (SEP, 6),
}
# Maha Ashtami.
MAHA_ASHTAMI_DATES = {
2020: (OCT, 24),
}
# Maha Navami.
MAHA_NAVAMI_DATES = {
2020: (OCT, 25),
}
# Bijaya Dashami.
DUSSEHRA_DATES = {
2020: (OCT, 26),
}
# Gobardhan Pooja.
GOVARDHAN_PUJA_DATES = {
2020: (NOV, 16),
2022: (OCT, 26),
2023: (NOV, 14),
}
# Chhath Parva.
CHHATH_PUJA_DATES = {
2025: (OCT, 27),
}
class NP(Nepal):
pass
class NPL(Nepal):
pass
class NepalStaticHolidays:
"""Nepal special holidays.
References:
* [Death of Krishna Prasad Bhattarai](https://web.archive.org/web/20250527164153/https://myrepublica.nagariknetwork.com/news/27618/)
* [Death of Sushil Koirala](https://web.archive.org/web/20250527164210/https://kathmandupost.com/miscellaneous/2016/02/09/cabinet-decision-koirala-to-be-honoured-with-state-funeral)
* [Crash of Yeti Airlines Flight 691](https://web.archive.org/web/20250123204057/https://edition.cnn.com/2023/01/15/asia/nepal-yeti-airlines-crash-intl-hnk/index.html)
* [People's War Day Instituted](https://web.archive.org/web/20241211215602/https://kathmandupost.com/national/2023/02/12/government-announces-public-holiday-on-monday-to-mark-people-s-war-day)
* [People's War Day Annulled](https://web.archive.org/web/20240111230228/https://kathmandupost.com/national/2023/12/29/supreme-court-annuls-public-holiday-on-people-s-war-day)
* [Death of Subas Chandra Nembang](https://web.archive.org/web/20241214193305/https://en.nepalkhabar.com/news/detail/6023/)
"""
# Day of National Mourning.
name_day_of_national_mourning = "Day of National Mourning"
# Tihar Holiday.
name_tihar_holiday = "Tihar Holiday"
special_public_holidays = {
2011: (MAR, 6, name_day_of_national_mourning),
2016: (FEB, 10, name_day_of_national_mourning),
2021: (NOV, 7, name_tihar_holiday),
2022: (OCT, 28, name_tihar_holiday),
2023: (
(JAN, 16, name_day_of_national_mourning),
# People War's Day.
(FEB, 13, "People War's Day"),
(SEP, 14, name_day_of_national_mourning),
(NOV, 16, name_tihar_holiday),
),
2024: (NOV, 4, name_tihar_holiday),
2025: (OCT, 24, name_tihar_holiday),
}