holidays 0.79__py3-none-any.whl → 0.81__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. holidays/calendars/chinese.py +39 -1
  2. holidays/calendars/hindu.py +1 -0
  3. holidays/constants.py +0 -1
  4. holidays/countries/__init__.py +13 -0
  5. holidays/countries/argentina.py +4 -0
  6. holidays/countries/australia.py +191 -295
  7. holidays/countries/bosnia_and_herzegovina.py +5 -1
  8. holidays/countries/burkina_faso.py +5 -0
  9. holidays/countries/burundi.py +95 -40
  10. holidays/countries/cameroon.py +5 -0
  11. holidays/countries/canada.py +7 -0
  12. holidays/countries/chad.py +5 -0
  13. holidays/countries/china.py +4 -0
  14. holidays/countries/christmas_island.py +6 -0
  15. holidays/countries/comoros.py +121 -0
  16. holidays/countries/eritrea.py +104 -0
  17. holidays/countries/gabon.py +2 -0
  18. holidays/countries/georgia.py +9 -7
  19. holidays/countries/guinea_bissau.py +0 -4
  20. holidays/countries/hongkong.py +5 -1
  21. holidays/countries/kyrgyzstan.py +2 -0
  22. holidays/countries/macau.py +74 -63
  23. holidays/countries/maldives.py +2 -0
  24. holidays/countries/mauritania.py +2 -0
  25. holidays/countries/mongolia.py +2 -0
  26. holidays/countries/nigeria.py +198 -27
  27. holidays/countries/philippines.py +11 -2
  28. holidays/countries/rwanda.py +162 -0
  29. holidays/countries/saint_helena_ascension_and_tristan_da_cunha.py +197 -0
  30. holidays/countries/sierra_leone.py +1 -1
  31. holidays/countries/singapore.py +4 -0
  32. holidays/countries/somalia.py +79 -0
  33. holidays/countries/south_korea.py +4 -0
  34. holidays/countries/south_sudan.py +133 -0
  35. holidays/countries/spain.py +26 -0
  36. holidays/countries/sudan.py +115 -0
  37. holidays/countries/taiwan.py +5 -1
  38. holidays/countries/tajikistan.py +116 -0
  39. holidays/countries/tanzania.py +291 -147
  40. holidays/countries/turkmenistan.py +6 -0
  41. holidays/countries/uganda.py +101 -0
  42. holidays/countries/vietnam.py +4 -0
  43. holidays/financial/__init__.py +5 -0
  44. holidays/financial/national_stock_exchange_of_india.py +169 -0
  45. holidays/groups/chinese.py +3 -15
  46. holidays/groups/eastern.py +1 -3
  47. holidays/groups/islamic.py +10 -0
  48. holidays/locale/ar_SD/LC_MESSAGES/SD.mo +0 -0
  49. holidays/locale/bs/LC_MESSAGES/BA.mo +0 -0
  50. holidays/locale/en_GB/LC_MESSAGES/SH.mo +0 -0
  51. holidays/locale/en_HK/LC_MESSAGES/HK.mo +0 -0
  52. holidays/locale/en_IN/LC_MESSAGES/XNSE.mo +0 -0
  53. holidays/locale/en_MO/LC_MESSAGES/MO.mo +0 -0
  54. holidays/locale/en_NG/LC_MESSAGES/NG.mo +0 -0
  55. holidays/locale/en_PH/LC_MESSAGES/PH.mo +0 -0
  56. holidays/locale/en_SG/LC_MESSAGES/SG.mo +0 -0
  57. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  58. holidays/locale/en_US/LC_MESSAGES/BA.mo +0 -0
  59. holidays/locale/en_US/LC_MESSAGES/BI.mo +0 -0
  60. holidays/locale/en_US/LC_MESSAGES/CN.mo +0 -0
  61. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  62. holidays/locale/en_US/LC_MESSAGES/GE.mo +0 -0
  63. holidays/locale/en_US/LC_MESSAGES/GW.mo +0 -0
  64. holidays/locale/en_US/LC_MESSAGES/HK.mo +0 -0
  65. holidays/locale/en_US/LC_MESSAGES/KR.mo +0 -0
  66. holidays/locale/en_US/LC_MESSAGES/MN.mo +0 -0
  67. holidays/locale/en_US/LC_MESSAGES/MO.mo +0 -0
  68. holidays/locale/en_US/LC_MESSAGES/NG.mo +0 -0
  69. holidays/locale/en_US/LC_MESSAGES/PH.mo +0 -0
  70. holidays/locale/en_US/LC_MESSAGES/RW.mo +0 -0
  71. holidays/locale/en_US/LC_MESSAGES/SD.mo +0 -0
  72. holidays/locale/en_US/LC_MESSAGES/SG.mo +0 -0
  73. holidays/locale/en_US/LC_MESSAGES/SH.mo +0 -0
  74. holidays/locale/en_US/LC_MESSAGES/TJ.mo +0 -0
  75. holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
  76. holidays/locale/en_US/LC_MESSAGES/TZ.mo +0 -0
  77. holidays/locale/en_US/LC_MESSAGES/VN.mo +0 -0
  78. holidays/locale/en_US/LC_MESSAGES/XNSE.mo +0 -0
  79. holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
  80. holidays/locale/es/LC_MESSAGES/ES.mo +0 -0
  81. holidays/locale/fil/LC_MESSAGES/PH.mo +0 -0
  82. holidays/locale/fr/LC_MESSAGES/RW.mo +0 -0
  83. holidays/locale/fr_BI/LC_MESSAGES/BI.mo +0 -0
  84. holidays/locale/hi/LC_MESSAGES/XNSE.mo +0 -0
  85. holidays/locale/ka/LC_MESSAGES/GE.mo +0 -0
  86. holidays/locale/ko/LC_MESSAGES/KR.mo +0 -0
  87. holidays/locale/mn/LC_MESSAGES/MN.mo +0 -0
  88. holidays/locale/pt_GW/LC_MESSAGES/GW.mo +0 -0
  89. holidays/locale/pt_MO/LC_MESSAGES/MO.mo +0 -0
  90. holidays/locale/ru/LC_MESSAGES/TJ.mo +0 -0
  91. holidays/locale/rw/LC_MESSAGES/RW.mo +0 -0
  92. holidays/locale/sr/LC_MESSAGES/BA.mo +0 -0
  93. holidays/locale/sw/LC_MESSAGES/TZ.mo +0 -0
  94. holidays/locale/tg/LC_MESSAGES/TJ.mo +0 -0
  95. holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
  96. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  97. holidays/locale/th/LC_MESSAGES/KR.mo +0 -0
  98. holidays/locale/th/LC_MESSAGES/MO.mo +0 -0
  99. holidays/locale/th/LC_MESSAGES/PH.mo +0 -0
  100. holidays/locale/th/LC_MESSAGES/SG.mo +0 -0
  101. holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
  102. holidays/locale/th/LC_MESSAGES/VN.mo +0 -0
  103. holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
  104. holidays/locale/uk/LC_MESSAGES/BA.mo +0 -0
  105. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  106. holidays/locale/uk/LC_MESSAGES/GE.mo +0 -0
  107. holidays/locale/vi/LC_MESSAGES/VN.mo +0 -0
  108. holidays/locale/zh_CN/LC_MESSAGES/CN.mo +0 -0
  109. holidays/locale/zh_CN/LC_MESSAGES/HK.mo +0 -0
  110. holidays/locale/zh_CN/LC_MESSAGES/MO.mo +0 -0
  111. holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
  112. holidays/locale/zh_HK/LC_MESSAGES/HK.mo +0 -0
  113. holidays/locale/zh_MO/LC_MESSAGES/MO.mo +0 -0
  114. holidays/locale/zh_TW/LC_MESSAGES/CN.mo +0 -0
  115. holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
  116. holidays/observed_holiday_base.py +1 -1
  117. holidays/registry.py +39 -14
  118. holidays/version.py +1 -1
  119. {holidays-0.79.dist-info → holidays-0.81.dist-info}/METADATA +76 -7
  120. {holidays-0.79.dist-info → holidays-0.81.dist-info}/RECORD +124 -97
  121. {holidays-0.79.dist-info → holidays-0.81.dist-info}/WHEEL +0 -0
  122. {holidays-0.79.dist-info → holidays-0.81.dist-info}/licenses/CONTRIBUTORS +0 -0
  123. {holidays-0.79.dist-info → holidays-0.81.dist-info}/licenses/LICENSE +0 -0
  124. {holidays-0.79.dist-info → holidays-0.81.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,101 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
14
+ from holidays.holiday_base import HolidayBase
15
+
16
+
17
+ class Uganda(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
18
+ """Uganda holidays.
19
+
20
+ References:
21
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Uganda>
22
+ * [Public Holidays Act, Cap. 255](https://web.archive.org/web/20250621140041/https://ulii.org/akn/ug/act/1965/23/eng@2000-12-31)
23
+ * [National Events and Calendar](https://web.archive.org/web/20250618053410/https://www.vicepresident.go.ug/national-events-and-calender/)
24
+ * [National Heroes Day](https://web.archive.org/web/20230622162351/https://publicholidays.africa/uganda/national-heroes-day/)
25
+ * [NRM Liberation Day](https://web.archive.org/web/20240124064853/https://thenilewires.com/38th-nrm-a-liberation-day-celebrations-minister-outlines-nrm-achievements/)
26
+ * [Archbishop Janani Luwum Day](https://web.archive.org/web/20200805133919/https://www.newvision.co.ug/news/1417242/uganda-declared-february-archbishop-janani-luwum-public-holiday)
27
+ * [School Calendar 2024](https://web.archive.org/web/20240519021615/https://www.education.go.ug/wp-content/uploads/2023/11/SCHOOL-CALENDAR.pdf)
28
+ * [Public Holidays 2025](https://web.archive.org/web/20250710193157/https://publicholidays.co.ug/)
29
+ """
30
+
31
+ country = "UG"
32
+ # %s (estimated).
33
+ estimated_label = "%s (estimated)"
34
+ # Uganda gained independence from the United Kingdom on October 9, 1962.
35
+ start_year = 1963
36
+
37
+ def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
38
+ """
39
+ Args:
40
+ islamic_show_estimated:
41
+ Whether to add "estimated" label to Islamic holidays name
42
+ if holiday date is estimated.
43
+ """
44
+ ChristianHolidays.__init__(self)
45
+ InternationalHolidays.__init__(self)
46
+ IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
47
+ super().__init__(*args, **kwargs)
48
+
49
+ def _populate_public_holidays(self):
50
+ # New Year's Day.
51
+ self._add_new_years_day("New Year's Day")
52
+
53
+ if self._year >= 1987:
54
+ # NRM Liberation Day.
55
+ self._add_holiday_jan_26("NRM Liberation Day")
56
+
57
+ if self._year >= 2016:
58
+ # Archbishop Janani Luwum Day.
59
+ self._add_holiday_feb_16("Archbishop Janani Luwum Day")
60
+
61
+ # Women's Day.
62
+ self._add_womens_day("Women's Day")
63
+
64
+ # Good Friday.
65
+ self._add_good_friday("Good Friday")
66
+
67
+ # Easter Monday.
68
+ self._add_easter_monday("Easter Monday")
69
+
70
+ # Labor Day.
71
+ self._add_labor_day("Labour Day")
72
+
73
+ # Uganda Martyrs' Day.
74
+ self._add_holiday_jun_3("Uganda Martyrs' Day")
75
+
76
+ if self._year >= 2001:
77
+ # National Heroes' Day.
78
+ self._add_holiday_jun_9("National Heroes' Day")
79
+
80
+ # Independence Day.
81
+ self._add_holiday_oct_9("Independence Day")
82
+
83
+ # Christmas Day.
84
+ self._add_christmas_day("Christmas Day")
85
+
86
+ # Boxing Day.
87
+ self._add_christmas_day_two("Boxing Day")
88
+
89
+ # Eid al-Fitr.
90
+ self._add_eid_al_fitr_day("Eid al-Fitr")
91
+
92
+ # Eid al-Adha.
93
+ self._add_eid_al_adha_day("Eid al-Adha")
94
+
95
+
96
+ class UG(Uganda):
97
+ pass
98
+
99
+
100
+ class UGA(Uganda):
101
+ pass
@@ -54,6 +54,10 @@ class Vietnam(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHoliday
54
54
  """
55
55
 
56
56
  country = "VN"
57
+ # %s (estimated).
58
+ estimated_label = tr("%s (dự kiến)")
59
+ # %s (observed, estimated).
60
+ observed_estimated_label = tr("%s (nghỉ bù, dự kiến)")
57
61
  # %s (observed).
58
62
  observed_label = tr("%s (nghỉ bù)")
59
63
  default_language = "vi"
@@ -15,4 +15,9 @@
15
15
  from holidays.financial.brasil_bolsa_balcao import BrasilBolsaBalcao, BVMF, B3
16
16
  from holidays.financial.european_central_bank import EuropeanCentralBank, XECB, ECB, TAR
17
17
  from holidays.financial.ice_futures_europe import ICEFuturesEurope, IFEU
18
+ from holidays.financial.national_stock_exchange_of_india import (
19
+ NationalStockExchangeOfIndia,
20
+ XNSE,
21
+ NSE,
22
+ )
18
23
  from holidays.financial.ny_stock_exchange import NewYorkStockExchange, XNYS, NYSE
@@ -0,0 +1,169 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars import _CustomHinduHolidays, _CustomIslamicHolidays
16
+ from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG
17
+ from holidays.groups import ChristianHolidays, HinduCalendarHolidays, IslamicHolidays
18
+ from holidays.observed_holiday_base import ObservedHolidayBase, SAT_TO_NONE, SUN_TO_NONE
19
+
20
+
21
+ class NationalStockExchangeOfIndia(
22
+ ObservedHolidayBase, HinduCalendarHolidays, ChristianHolidays, IslamicHolidays
23
+ ):
24
+ """National Stock Exchange of India (NSE) holidays.
25
+
26
+ References:
27
+ * <https://web.archive.org/web/20250821175252/https://www.nseindia.com/resources/exchange-communication-circulars>
28
+
29
+ Historical data:
30
+ * [2022](https://web.archive.org/web/20250821071611/https://nsearchives.nseindia.com/content/circulars/CMTR50560.pdf)
31
+ * [2023](https://web.archive.org/web/20250821071635/https://nsearchives.nseindia.com/content/circulars/CMTR54757.pdf)
32
+ * [2024](https://web.archive.org/web/20250821071650/https://nsearchives.nseindia.com/content/circulars/CMTR59722.pdf)
33
+ * [2025](https://web.archive.org/web/20250624132016/https://nsearchives.nseindia.com/content/circulars/CMTR65587.pdf)
34
+ """
35
+
36
+ market = "XNSE"
37
+ default_language = "en_IN"
38
+ # %s (estimated).
39
+ estimated_label = tr("%s (estimated)")
40
+ supported_languages = ("en_IN", "en_US", "hi")
41
+ start_year = 2001
42
+
43
+ def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
44
+ """
45
+ Args:
46
+ islamic_show_estimated:
47
+ Whether to add "estimated" label to Islamic holidays name
48
+ if holiday date is estimated.
49
+ """
50
+ ChristianHolidays.__init__(self)
51
+ HinduCalendarHolidays.__init__(self, cls=NationalStockExchangeOfIndiaHinduHolidays)
52
+ IslamicHolidays.__init__(
53
+ self,
54
+ cls=NationalStockExchangeOfIndiaIslamicHolidays,
55
+ show_estimated=islamic_show_estimated,
56
+ )
57
+ kwargs.setdefault("observed_rule", SAT_TO_NONE + SUN_TO_NONE)
58
+ super().__init__(*args, **kwargs)
59
+
60
+ def _populate_public_holidays(self):
61
+ # Republic Day.
62
+ self._move_holiday(self._add_holiday_jan_26(tr("Republic Day")))
63
+
64
+ # Good Friday.
65
+ self._add_good_friday(tr("Good Friday"))
66
+
67
+ # Dr. Baba Saheb Ambedkar Jayanti.
68
+ self._move_holiday(self._add_holiday_apr_14(tr("Dr. Baba Saheb Ambedkar Jayanti")))
69
+
70
+ # Maharashtra Day.
71
+ self._move_holiday(self._add_holiday_may_1(tr("Maharashtra Day")))
72
+
73
+ # Independence Day.
74
+ self._move_holiday(self._add_holiday_aug_15(tr("Independence Day")))
75
+
76
+ # Mahatma Gandhi Jayanti.
77
+ self._move_holiday(self._add_holiday_oct_2(tr("Mahatma Gandhi Jayanti")))
78
+
79
+ # Christmas Day.
80
+ self._move_holiday(self._add_christmas_day(tr("Christmas Day")))
81
+
82
+ # Hindu Calendar Holidays.
83
+
84
+ # Maha Shivaratri.
85
+ self._move_holiday(self._add_maha_shivaratri(tr("Maha Shivaratri")))
86
+
87
+ # Holi.
88
+ self._move_holiday(self._add_holi(tr("Holi")))
89
+
90
+ # Ram Navami.
91
+ self._move_holiday(self._add_ram_navami(tr("Ram Navami")))
92
+
93
+ # Mahavir Jayanti.
94
+ self._move_holiday(self._add_mahavir_jayanti(tr("Mahavir Jayanti")))
95
+
96
+ # Ganesh Chaturthi.
97
+ self._move_holiday(self._add_ganesh_chaturthi(tr("Ganesh Chaturthi")))
98
+
99
+ # Dussehra.
100
+ self._move_holiday(self._add_dussehra(tr("Dussehra")))
101
+
102
+ # Diwali Laxmi Pujan.
103
+ self._move_holiday(self._add_gau_krida(tr("Diwali Laxmi Pujan")))
104
+
105
+ # Diwali Balipratipada.
106
+ name = tr("Diwali Balipratipada")
107
+ # NSE's calendar adds an extra-day gap in 2022–2023
108
+ # between Diwali Laxmi Pujan and Diwali Balipratipada.
109
+ self._move_holiday(
110
+ self._add_bhai_dooj(name)
111
+ if self._year in {2022, 2023}
112
+ else self._add_govardhan_puja(name)
113
+ )
114
+
115
+ # Guru Nanak Jayanti.
116
+ self._move_holiday(self._add_guru_nanak_jayanti(tr("Guru Nanak Jayanti")))
117
+
118
+ # Islamic Calendar Holidays.
119
+
120
+ # Ashura.
121
+ for dt in self._add_ashura_day(tr("Muharram")):
122
+ self._move_holiday(dt)
123
+
124
+ # Eid al-Fitr.
125
+ for dt in self._add_eid_al_fitr_day(tr("Id-Ul-Fitr (Ramadan Eid)")):
126
+ self._move_holiday(dt)
127
+
128
+ # Eid al-Adha.
129
+ for dt in self._add_eid_al_adha_day(tr("Bakri Id")):
130
+ self._move_holiday(dt)
131
+
132
+
133
+ class XNSE(NationalStockExchangeOfIndia):
134
+ pass
135
+
136
+
137
+ class NSE(NationalStockExchangeOfIndia):
138
+ pass
139
+
140
+
141
+ class NationalStockExchangeOfIndiaHinduHolidays(_CustomHinduHolidays):
142
+ HOLI_DATES = {
143
+ 2023: (MAR, 7),
144
+ }
145
+
146
+
147
+ class NationalStockExchangeOfIndiaIslamicHolidays(_CustomIslamicHolidays):
148
+ ASHURA_DATES_CONFIRMED_YEARS = (2022, 2025)
149
+ ASHURA_DATES = {
150
+ 2022: (AUG, 9),
151
+ 2023: (JUL, 29),
152
+ 2024: (JUL, 17),
153
+ 2025: (JUL, 6),
154
+ }
155
+
156
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2022, 2025)
157
+ EID_AL_ADHA_DATES = {
158
+ 2022: (JUL, 10),
159
+ 2024: (JUN, 17),
160
+ 2025: (JUN, 7),
161
+ }
162
+
163
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2022, 2025)
164
+ EID_AL_FITR_DATES = {
165
+ 2022: (MAY, 3),
166
+ 2023: (APR, 22),
167
+ 2024: (APR, 11),
168
+ 2025: (MAR, 31),
169
+ }
@@ -14,7 +14,7 @@ from datetime import date
14
14
  from typing import Optional
15
15
 
16
16
  from holidays.calendars.chinese import _ChineseLunisolar, CHINESE_CALENDAR
17
- from holidays.calendars.gregorian import APR, DEC
17
+ from holidays.calendars.gregorian import APR
18
18
  from holidays.groups.eastern import EasternCalendarHolidays
19
19
 
20
20
 
@@ -79,20 +79,8 @@ class ChineseCalendarHolidays(EasternCalendarHolidays):
79
79
  def _dongzhi_festival(self):
80
80
  """
81
81
  Return Dongzhi Festival (Chinese Winter Solstice) date.
82
-
83
- This approximation is reliable for 1952-2099 years.
84
- """
85
- #
86
- if (
87
- (self._year % 4 == 0 and self._year >= 1988)
88
- or (self._year % 4 == 1 and self._year >= 2021)
89
- or (self._year % 4 == 2 and self._year >= 2058)
90
- or (self._year % 4 == 3 and self._year >= 2091)
91
- ):
92
- day = 21
93
- else:
94
- day = 22
95
- return date(self._year, DEC, day)
82
+ """
83
+ return self._chinese_calendar.winter_solstice_date(self._year)[0]
96
84
 
97
85
  def _add_chinese_calendar_holiday(
98
86
  self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
@@ -33,15 +33,13 @@ class EasternCalendarHolidays:
33
33
 
34
34
  Adds customizable estimation label to holiday name if holiday date is an estimation.
35
35
  """
36
- estimated_label = getattr(self, "estimated_label", "%s (estimated)")
37
36
  dt, is_estimated = dt_estimated
38
-
39
37
  if days_delta and dt:
40
38
  dt = _timedelta(dt, days_delta)
41
39
 
42
40
  return (
43
41
  self._add_holiday(
44
- self.tr(estimated_label) % self.tr(name)
42
+ self.tr(self.estimated_label) % self.tr(name)
45
43
  if is_estimated and show_estimated
46
44
  else name,
47
45
  dt,
@@ -182,6 +182,16 @@ class IslamicHolidays(EasternCalendarHolidays):
182
182
  name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+2
183
183
  )
184
184
 
185
+ def _add_eid_al_fitr_day_four(self, name) -> set[date]:
186
+ """
187
+ Add Eid al-Fitr Day Four.
188
+
189
+ https://en.wikipedia.org/wiki/Eid_al-Fitr
190
+ """
191
+ return self._add_islamic_calendar_holiday(
192
+ name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+3
193
+ )
194
+
185
195
  def _add_eid_al_fitr_eve(self, name) -> set[date]:
186
196
  """
187
197
  Add Eid al-Fitr Eve (last day of 9th month of Islamic calendar).
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -177,7 +177,7 @@ class ObservedHolidayBase(HolidayBase):
177
177
  )
178
178
  )
179
179
 
180
- estimated_label_text = estimated_label.strip("%s ()")
180
+ estimated_label_text = estimated_label.strip("%s ()()")
181
181
  # Use observed_estimated_label instead of observed_label for estimated dates.
182
182
  for name in (name,) if name else self.get_list(dt):
183
183
  holiday_name = self.tr(name)