holidays 0.26__py3-none-any.whl → 0.27__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 (256) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/__init__.py +5 -7
  3. holidays/calendars/buddhist.py +1 -3
  4. holidays/calendars/chinese.py +1 -3
  5. holidays/calendars/custom.py +1 -3
  6. holidays/calendars/hindu.py +1 -3
  7. holidays/calendars/islamic.py +1341 -1345
  8. holidays/calendars/thai.py +217 -26
  9. holidays/countries/__init__.py +4 -0
  10. holidays/countries/albania.py +6 -17
  11. holidays/countries/andorra.py +2 -6
  12. holidays/countries/angola.py +53 -39
  13. holidays/countries/argentina.py +13 -24
  14. holidays/countries/aruba.py +109 -48
  15. holidays/countries/australia.py +31 -69
  16. holidays/countries/azerbaijan.py +30 -38
  17. holidays/countries/bahrain.py +5 -5
  18. holidays/countries/bangladesh.py +1 -3
  19. holidays/countries/belarus.py +1 -3
  20. holidays/countries/belize.py +4 -16
  21. holidays/countries/bolivia.py +2 -6
  22. holidays/countries/bosnia_and_herzegovina.py +5 -17
  23. holidays/countries/botswana.py +9 -18
  24. holidays/countries/brazil.py +2 -5
  25. holidays/countries/brunei.py +427 -0
  26. holidays/countries/bulgaria.py +2 -6
  27. holidays/countries/burkina_faso.py +141 -0
  28. holidays/countries/burundi.py +2 -5
  29. holidays/countries/cambodia.py +323 -0
  30. holidays/countries/cameroon.py +71 -77
  31. holidays/countries/canada.py +19 -28
  32. holidays/countries/chad.py +133 -0
  33. holidays/countries/chile.py +4 -11
  34. holidays/countries/china.py +1 -2
  35. holidays/countries/colombia.py +17 -15
  36. holidays/countries/costa_rica.py +2 -6
  37. holidays/countries/curacao.py +100 -46
  38. holidays/countries/cyprus.py +2 -6
  39. holidays/countries/czechia.py +4 -12
  40. holidays/countries/denmark.py +1 -3
  41. holidays/countries/dominican_republic.py +1 -3
  42. holidays/countries/ecuador.py +54 -54
  43. holidays/countries/egypt.py +2 -5
  44. holidays/countries/eswatini.py +34 -44
  45. holidays/countries/ethiopia.py +5 -14
  46. holidays/countries/finland.py +1 -3
  47. holidays/countries/gabon.py +49 -53
  48. holidays/countries/greece.py +1 -2
  49. holidays/countries/honduras.py +16 -13
  50. holidays/countries/hongkong.py +7 -8
  51. holidays/countries/hungary.py +93 -92
  52. holidays/countries/india.py +4 -11
  53. holidays/countries/indonesia.py +120 -114
  54. holidays/countries/ireland.py +5 -15
  55. holidays/countries/isle_of_man.py +9 -4
  56. holidays/countries/israel.py +6 -18
  57. holidays/countries/italy.py +1 -2
  58. holidays/countries/jamaica.py +10 -18
  59. holidays/countries/japan.py +10 -16
  60. holidays/countries/kazakhstan.py +7 -22
  61. holidays/countries/kenya.py +1 -3
  62. holidays/countries/kyrgyzstan.py +2 -5
  63. holidays/countries/latvia.py +2 -6
  64. holidays/countries/lesotho.py +52 -32
  65. holidays/countries/lithuania.py +4 -12
  66. holidays/countries/madagascar.py +3 -9
  67. holidays/countries/malawi.py +34 -26
  68. holidays/countries/malaysia.py +223 -248
  69. holidays/countries/marshall_islands.py +4 -9
  70. holidays/countries/mexico.py +1 -3
  71. holidays/countries/moldova.py +3 -6
  72. holidays/countries/monaco.py +16 -26
  73. holidays/countries/montenegro.py +23 -19
  74. holidays/countries/morocco.py +2 -5
  75. holidays/countries/mozambique.py +35 -31
  76. holidays/countries/namibia.py +54 -35
  77. holidays/countries/new_zealand.py +11 -21
  78. holidays/countries/nicaragua.py +26 -22
  79. holidays/countries/nigeria.py +6 -17
  80. holidays/countries/north_macedonia.py +3 -8
  81. holidays/countries/norway.py +1 -3
  82. holidays/countries/pakistan.py +71 -72
  83. holidays/countries/panama.py +25 -24
  84. holidays/countries/paraguay.py +54 -47
  85. holidays/countries/philippines.py +6 -2
  86. holidays/countries/poland.py +3 -9
  87. holidays/countries/portugal.py +3 -11
  88. holidays/countries/romania.py +3 -5
  89. holidays/countries/saudi_arabia.py +8 -22
  90. holidays/countries/serbia.py +19 -29
  91. holidays/countries/singapore.py +70 -74
  92. holidays/countries/slovakia.py +1 -4
  93. holidays/countries/south_africa.py +60 -62
  94. holidays/countries/south_korea.py +14 -23
  95. holidays/countries/spain.py +2 -5
  96. holidays/countries/sweden.py +1 -3
  97. holidays/countries/taiwan.py +2 -5
  98. holidays/countries/thailand.py +34 -81
  99. holidays/countries/turkey.py +1 -3
  100. holidays/countries/ukraine.py +6 -18
  101. holidays/countries/united_arab_emirates.py +21 -29
  102. holidays/countries/united_kingdom.py +47 -67
  103. holidays/countries/united_states.py +42 -72
  104. holidays/countries/vatican_city.py +1 -3
  105. holidays/countries/venezuela.py +8 -6
  106. holidays/countries/vietnam.py +6 -18
  107. holidays/countries/zambia.py +63 -33
  108. holidays/countries/zimbabwe.py +56 -37
  109. holidays/financial/european_central_bank.py +1 -3
  110. holidays/financial/ny_stock_exchange.py +31 -48
  111. holidays/groups/__init__.py +18 -0
  112. holidays/groups/buddhist.py +71 -0
  113. holidays/groups/chinese.py +235 -0
  114. holidays/groups/christian.py +483 -0
  115. holidays/groups/hindu.py +71 -0
  116. holidays/groups/international.py +157 -0
  117. holidays/groups/islamic.py +288 -0
  118. holidays/groups/thai.py +157 -0
  119. holidays/helpers.py +20 -0
  120. holidays/holiday_base.py +49 -75
  121. holidays/holiday_groups.py +11 -1190
  122. holidays/locale/am/LC_MESSAGES/ET.po +18 -15
  123. holidays/locale/ar/LC_MESSAGES/CA.po +43 -43
  124. holidays/locale/ar/LC_MESSAGES/ET.po +18 -15
  125. holidays/locale/ar/LC_MESSAGES/UA.po +16 -14
  126. holidays/locale/be/LC_MESSAGES/BY.po +9 -8
  127. holidays/locale/bg/LC_MESSAGES/BG.po +14 -12
  128. holidays/locale/da/LC_MESSAGES/DK.po +7 -6
  129. holidays/locale/el/LC_MESSAGES/CY.po +5 -3
  130. holidays/locale/el/LC_MESSAGES/GR.po +13 -13
  131. holidays/locale/en/LC_MESSAGES/CA.po +43 -43
  132. holidays/locale/en_US/LC_MESSAGES/AR.po +26 -25
  133. holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
  134. holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
  135. holidays/locale/en_US/LC_MESSAGES/BG.po +14 -12
  136. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  137. holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
  138. holidays/locale/en_US/LC_MESSAGES/BY.po +9 -8
  139. holidays/locale/en_US/LC_MESSAGES/CA.po +43 -43
  140. holidays/locale/en_US/LC_MESSAGES/CL.po +18 -18
  141. holidays/locale/en_US/LC_MESSAGES/CO.po +19 -19
  142. holidays/locale/en_US/LC_MESSAGES/CR.po +6 -5
  143. holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
  144. holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
  145. holidays/locale/en_US/LC_MESSAGES/CY.po +5 -3
  146. holidays/locale/en_US/LC_MESSAGES/DK.po +7 -6
  147. holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
  148. holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
  149. holidays/locale/en_US/LC_MESSAGES/ET.po +18 -15
  150. holidays/locale/en_US/LC_MESSAGES/FI.po +13 -13
  151. holidays/locale/en_US/LC_MESSAGES/GR.po +13 -13
  152. holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
  153. holidays/locale/en_US/LC_MESSAGES/HN.po +13 -13
  154. holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
  155. holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
  156. holidays/locale/en_US/LC_MESSAGES/JP.po +19 -17
  157. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  158. holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
  159. holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
  160. holidays/locale/en_US/LC_MESSAGES/MC.po +16 -15
  161. holidays/locale/en_US/LC_MESSAGES/MD.po +5 -5
  162. holidays/locale/en_US/LC_MESSAGES/MX.po +3 -2
  163. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  164. holidays/locale/en_US/LC_MESSAGES/NI.po +13 -13
  165. holidays/locale/en_US/LC_MESSAGES/NO.po +1 -1
  166. holidays/locale/en_US/LC_MESSAGES/PL.po +23 -21
  167. holidays/locale/en_US/LC_MESSAGES/PT.po +31 -31
  168. holidays/locale/en_US/LC_MESSAGES/PY.po +13 -11
  169. holidays/locale/en_US/LC_MESSAGES/RO.po +4 -3
  170. holidays/locale/en_US/LC_MESSAGES/RS.po +10 -10
  171. holidays/locale/en_US/LC_MESSAGES/SE.po +1 -1
  172. holidays/locale/en_US/LC_MESSAGES/SK.po +14 -14
  173. holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
  174. holidays/locale/en_US/LC_MESSAGES/UA.po +16 -14
  175. holidays/locale/en_US/LC_MESSAGES/VE.po +6 -6
  176. holidays/locale/es/LC_MESSAGES/AR.po +26 -25
  177. holidays/locale/es/LC_MESSAGES/CL.po +18 -18
  178. holidays/locale/es/LC_MESSAGES/CO.po +19 -19
  179. holidays/locale/es/LC_MESSAGES/CR.po +6 -5
  180. holidays/locale/es/LC_MESSAGES/DO.po +12 -12
  181. holidays/locale/es/LC_MESSAGES/EC.po +11 -12
  182. holidays/locale/es/LC_MESSAGES/HN.po +12 -12
  183. holidays/locale/es/LC_MESSAGES/MX.po +3 -2
  184. holidays/locale/es/LC_MESSAGES/NI.po +10 -10
  185. holidays/locale/es/LC_MESSAGES/PY.po +13 -11
  186. holidays/locale/es/LC_MESSAGES/VE.po +6 -6
  187. holidays/locale/fi/LC_MESSAGES/FI.po +13 -13
  188. holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
  189. holidays/locale/fr/LC_MESSAGES/MC.po +15 -14
  190. holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
  191. holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
  192. holidays/locale/ja/LC_MESSAGES/JP.po +19 -17
  193. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  194. holidays/locale/km/LC_MESSAGES/KH.po +139 -0
  195. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  196. holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
  197. holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
  198. holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
  199. holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
  200. holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
  201. holidays/locale/no/LC_MESSAGES/NO.po +1 -1
  202. holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
  203. holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
  204. holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
  205. holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
  206. holidays/locale/pl/LC_MESSAGES/PL.po +23 -21
  207. holidays/locale/pt_PT/LC_MESSAGES/PT.po +31 -31
  208. holidays/locale/ro/LC_MESSAGES/MD.po +5 -5
  209. holidays/locale/ro/LC_MESSAGES/RO.po +4 -3
  210. holidays/locale/sk/LC_MESSAGES/SK.po +14 -14
  211. holidays/locale/sr/LC_MESSAGES/RS.po +10 -10
  212. holidays/locale/sv/LC_MESSAGES/FI.po +13 -13
  213. holidays/locale/sv/LC_MESSAGES/SE.po +1 -1
  214. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  215. holidays/locale/th/LC_MESSAGES/BN.po +96 -0
  216. holidays/locale/th/LC_MESSAGES/CA.po +43 -43
  217. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  218. holidays/locale/th/LC_MESSAGES/KH.po +145 -0
  219. holidays/locale/th/LC_MESSAGES/TH.po +41 -41
  220. holidays/locale/uk/LC_MESSAGES/AR.po +26 -25
  221. holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
  222. holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
  223. holidays/locale/uk/LC_MESSAGES/CL.po +18 -18
  224. holidays/locale/uk/LC_MESSAGES/CO.po +19 -19
  225. holidays/locale/uk/LC_MESSAGES/CR.po +6 -5
  226. holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
  227. holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
  228. holidays/locale/uk/LC_MESSAGES/DK.po +7 -6
  229. holidays/locale/uk/LC_MESSAGES/DO.po +12 -12
  230. holidays/locale/uk/LC_MESSAGES/EC.po +11 -12
  231. holidays/locale/uk/LC_MESSAGES/FI.po +13 -13
  232. holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
  233. holidays/locale/uk/LC_MESSAGES/HN.po +13 -13
  234. holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
  235. holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
  236. holidays/locale/uk/LC_MESSAGES/MC.po +15 -14
  237. holidays/locale/uk/LC_MESSAGES/MD.po +5 -5
  238. holidays/locale/uk/LC_MESSAGES/MX.po +3 -2
  239. holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
  240. holidays/locale/uk/LC_MESSAGES/NI.po +13 -13
  241. holidays/locale/uk/LC_MESSAGES/NO.po +1 -1
  242. holidays/locale/uk/LC_MESSAGES/PL.po +23 -21
  243. holidays/locale/uk/LC_MESSAGES/PY.po +13 -11
  244. holidays/locale/uk/LC_MESSAGES/RO.po +4 -3
  245. holidays/locale/uk/LC_MESSAGES/SE.po +1 -1
  246. holidays/locale/uk/LC_MESSAGES/SK.po +14 -14
  247. holidays/locale/uk/LC_MESSAGES/UA.po +16 -14
  248. holidays/locale/uk/LC_MESSAGES/VE.po +6 -6
  249. holidays/registry.py +7 -11
  250. holidays/utils.py +5 -15
  251. {holidays-0.26.dist-info → holidays-0.27.dist-info}/METADATA +25 -7
  252. holidays-0.27.dist-info/RECORD +449 -0
  253. holidays-0.26.dist-info/RECORD +0 -402
  254. {holidays-0.26.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
  255. {holidays-0.26.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
  256. {holidays-0.26.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
@@ -16,8 +16,24 @@ from typing import Tuple, Union
16
16
  from dateutil.easter import easter
17
17
 
18
18
  from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
19
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
20
- from holidays.constants import OCT, NOV, DEC, MON, TUE, THU, FRI
19
+ from holidays.constants import (
20
+ JAN,
21
+ FEB,
22
+ MAR,
23
+ APR,
24
+ MAY,
25
+ JUN,
26
+ JUL,
27
+ AUG,
28
+ SEP,
29
+ OCT,
30
+ NOV,
31
+ DEC,
32
+ MON,
33
+ TUE,
34
+ THU,
35
+ FRI,
36
+ )
21
37
  from holidays.holiday_base import HolidayBase
22
38
 
23
39
 
@@ -138,11 +154,7 @@ class UnitedStates(HolidayBase):
138
154
  self[date(year, JAN, 19)] = name
139
155
 
140
156
  # Inauguration Day
141
- if (
142
- self.subdiv in {"DC", "LA", "MD", "VA"}
143
- and year >= 1789
144
- and (year - 1789) % 4 == 0
145
- ):
157
+ if self.subdiv in {"DC", "LA", "MD", "VA"} and year >= 1789 and (year - 1789) % 4 == 0:
146
158
  if year >= 1937:
147
159
  dt = date(year, JAN, 20)
148
160
  else:
@@ -154,13 +166,8 @@ class UnitedStates(HolidayBase):
154
166
  name = "Martin Luther King Jr. Day"
155
167
  if self.subdiv == "AL":
156
168
  name = "Robert E. Lee/Martin Luther King Birthday"
157
- elif (self.subdiv == "MS") or (
158
- (self.subdiv == "AR") and (year <= 2017)
159
- ):
160
- name = (
161
- "Dr. Martin Luther King Jr. "
162
- "and Robert E. Lee's Birthdays"
163
- )
169
+ elif (self.subdiv == "MS") or ((self.subdiv == "AR") and (year <= 2017)):
170
+ name = "Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays"
164
171
  elif self.subdiv in {"AZ", "NH"}:
165
172
  name = "Dr. Martin Luther King Jr./Civil Rights Day"
166
173
  elif self.subdiv == "GA" and year <= 2011:
@@ -170,9 +177,9 @@ class UnitedStates(HolidayBase):
170
177
  self[_get_nth_weekday_of_month(3, MON, JAN, year)] = name
171
178
 
172
179
  # Lincoln's Birthday
173
- if (
174
- self.subdiv in {"CT", "IA", "IL", "NJ", "NY"} and year >= 1971
175
- ) or (self.subdiv == "CA" and 1971 <= year <= 2009):
180
+ if (self.subdiv in {"CT", "IA", "IL", "NJ", "NY"} and year >= 1971) or (
181
+ self.subdiv == "CA" and 1971 <= year <= 2009
182
+ ):
176
183
  self._add_with_observed(date(year, FEB, 12), "Lincoln's Birthday")
177
184
 
178
185
  # Susan B. Anthony Day
@@ -212,15 +219,11 @@ class UnitedStates(HolidayBase):
212
219
 
213
220
  # Guam Discovery Day
214
221
  if self.subdiv == "GU" and year >= 1970:
215
- self[
216
- _get_nth_weekday_of_month(1, MON, MAR, year)
217
- ] = "Guam Discovery Day"
222
+ self[_get_nth_weekday_of_month(1, MON, MAR, year)] = "Guam Discovery Day"
218
223
 
219
224
  # Casimir Pulaski Day
220
225
  if self.subdiv == "IL" and year >= 1978:
221
- self[
222
- _get_nth_weekday_of_month(1, MON, MAR, year)
223
- ] = "Casimir Pulaski Day"
226
+ self[_get_nth_weekday_of_month(1, MON, MAR, year)] = "Casimir Pulaski Day"
224
227
 
225
228
  # Texas Independence Day
226
229
  if self.subdiv == "TX" and year >= 1874:
@@ -228,9 +231,7 @@ class UnitedStates(HolidayBase):
228
231
 
229
232
  # Town Meeting Day
230
233
  if self.subdiv == "VT" and year >= 1800:
231
- self[
232
- _get_nth_weekday_of_month(1, TUE, MAR, year)
233
- ] = "Town Meeting Day"
234
+ self[_get_nth_weekday_of_month(1, TUE, MAR, year)] = "Town Meeting Day"
234
235
 
235
236
  # Evacuation Day
236
237
  if self.subdiv == "MA" and year >= 1901:
@@ -242,21 +243,15 @@ class UnitedStates(HolidayBase):
242
243
 
243
244
  # Emancipation Day
244
245
  if self.subdiv == "PR":
245
- self._add_with_observed(
246
- date(year, MAR, 22), "Emancipation Day", before=False
247
- )
246
+ self._add_with_observed(date(year, MAR, 22), "Emancipation Day", before=False)
248
247
 
249
248
  # Commonwealth Covenant Day in Northern Mariana Islands
250
249
  if self.subdiv == "MP":
251
- self._add_with_observed(
252
- date(year, MAR, 24), "Commonwealth Covenant Day"
253
- )
250
+ self._add_with_observed(date(year, MAR, 24), "Commonwealth Covenant Day")
254
251
 
255
252
  # Prince Jonah Kuhio Kalanianaole Day
256
253
  if self.subdiv == "HI" and year >= 1949:
257
- self._add_with_observed(
258
- date(year, MAR, 26), "Prince Jonah Kuhio Kalanianaole Day"
259
- )
254
+ self._add_with_observed(date(year, MAR, 26), "Prince Jonah Kuhio Kalanianaole Day")
260
255
 
261
256
  # Seward's Day
262
257
  if self.subdiv == "AK":
@@ -341,9 +336,7 @@ class UnitedStates(HolidayBase):
341
336
  self[date(year, APR, 22)] = name
342
337
 
343
338
  # Primary Election Day
344
- if self.subdiv == "IN" and (
345
- (year >= 2006 and year % 2 == 0) or year >= 2015
346
- ):
339
+ if self.subdiv == "IN" and ((year >= 2006 and year % 2 == 0) or year >= 2015):
347
340
  self[
348
341
  _get_nth_weekday_of_month(1, MON, MAY, year) + td(days=+1)
349
342
  ] = "Primary Election Day"
@@ -354,17 +347,13 @@ class UnitedStates(HolidayBase):
354
347
 
355
348
  # Memorial Day
356
349
  if year >= 1971:
357
- self[
358
- _get_nth_weekday_of_month(-1, MON, MAY, year)
359
- ] = "Memorial Day"
350
+ self[_get_nth_weekday_of_month(-1, MON, MAY, year)] = "Memorial Day"
360
351
  elif year >= 1888:
361
352
  self[date(year, MAY, 30)] = "Memorial Day"
362
353
 
363
354
  # Juneteenth Day
364
355
  if year >= 2021:
365
- self._add_with_observed(
366
- date(year, JUN, 19), "Juneteenth National Independence Day"
367
- )
356
+ self._add_with_observed(date(year, JUN, 19), "Juneteenth National Independence Day")
368
357
 
369
358
  # Jefferson Davis Birthday
370
359
  name = "Jefferson Davis Birthday"
@@ -406,9 +395,7 @@ class UnitedStates(HolidayBase):
406
395
 
407
396
  # Constitution Day
408
397
  if self.subdiv == "PR":
409
- self._add_with_observed(
410
- date(year, JUL, 25), "Constitution Day", before=False
411
- )
398
+ self._add_with_observed(date(year, JUL, 25), "Constitution Day", before=False)
412
399
 
413
400
  # Victory Day
414
401
  if self.subdiv == "RI" and year >= 1948:
@@ -416,15 +403,11 @@ class UnitedStates(HolidayBase):
416
403
 
417
404
  # Statehood Day (Hawaii)
418
405
  if self.subdiv == "HI" and year >= 1959:
419
- self[
420
- _get_nth_weekday_of_month(3, FRI, AUG, year)
421
- ] = "Statehood Day"
406
+ self[_get_nth_weekday_of_month(3, FRI, AUG, year)] = "Statehood Day"
422
407
 
423
408
  # Bennington Battle Day
424
409
  if self.subdiv == "VT" and year >= 1778:
425
- self._add_with_observed(
426
- date(year, AUG, 16), "Bennington Battle Day"
427
- )
410
+ self._add_with_observed(date(year, AUG, 16), "Bennington Battle Day")
428
411
 
429
412
  # Lyndon Baines Johnson Day
430
413
  if self.subdiv == "TX" and year >= 1973:
@@ -449,9 +432,7 @@ class UnitedStates(HolidayBase):
449
432
 
450
433
  # Commonwealth Cultural Day in Northern Mariana Islands
451
434
  if self.subdiv == "MP":
452
- self[
453
- _get_nth_weekday_of_month(2, MON, OCT, year)
454
- ] = "Commonwealth Cultural Day"
435
+ self[_get_nth_weekday_of_month(2, MON, OCT, year)] = "Commonwealth Cultural Day"
455
436
 
456
437
  # Alaska Day
457
438
  if self.subdiv == "AK" and year >= 1867:
@@ -487,9 +468,7 @@ class UnitedStates(HolidayBase):
487
468
  and year >= 2008
488
469
  and year % 2 == 0
489
470
  ) or (self.subdiv in {"IN", "NY"} and year >= 2015):
490
- self[
491
- _get_nth_weekday_of_month(1, MON, NOV, year) + td(days=+1)
492
- ] = "Election Day"
471
+ self[_get_nth_weekday_of_month(1, MON, NOV, year) + td(days=+1)] = "Election Day"
493
472
 
494
473
  # All Souls' Day
495
474
  if self.subdiv == "GU":
@@ -511,9 +490,7 @@ class UnitedStates(HolidayBase):
511
490
 
512
491
  # Discovery Day
513
492
  if self.subdiv == "PR":
514
- self._add_with_observed(
515
- date(year, NOV, 19), "Discovery Day", before=False
516
- )
493
+ self._add_with_observed(date(year, NOV, 19), "Discovery Day", before=False)
517
494
 
518
495
  # Thanksgiving
519
496
  if year >= 1871:
@@ -526,10 +503,7 @@ class UnitedStates(HolidayBase):
526
503
  # Family Day
527
504
  # New Mexico Presidents' Day
528
505
  if (
529
- (
530
- self.subdiv in {"CA", "DE", "FL", "NC", "NH", "OK", "TX", "WV"}
531
- and year >= 1975
532
- )
506
+ (self.subdiv in {"CA", "DE", "FL", "NC", "NH", "OK", "TX", "WV"} and year >= 1975)
533
507
  or (self.subdiv == "IN" and year >= 2010)
534
508
  or (self.subdiv == "MD" and year >= 2008)
535
509
  or self.subdiv in {"NM", "NV", "PA"}
@@ -546,9 +520,7 @@ class UnitedStates(HolidayBase):
546
520
  name = "Family Day"
547
521
  if self.subdiv == "NM":
548
522
  name = "Presidents' Day"
549
- self[
550
- _get_nth_weekday_of_month(4, THU, NOV, year) + td(days=+1)
551
- ] = name
523
+ self[_get_nth_weekday_of_month(4, THU, NOV, year) + td(days=+1)] = name
552
524
 
553
525
  # Robert E. Lee's Birthday
554
526
  if self.subdiv == "GA" and year >= 1986:
@@ -556,9 +528,7 @@ class UnitedStates(HolidayBase):
556
528
  name = "State Holiday"
557
529
  else:
558
530
  name = "Robert E. Lee's Birthday"
559
- self[
560
- _get_nth_weekday_of_month(4, THU, NOV, year) + td(days=+1)
561
- ] = name
531
+ self[_get_nth_weekday_of_month(4, THU, NOV, year) + td(days=+1)] = name
562
532
 
563
533
  # Lady of Camarin Day
564
534
  if self.subdiv == "GU":
@@ -55,9 +55,7 @@ class VaticanCity(HolidayBase, ChristianHolidays):
55
55
  else:
56
56
  # Anniversary of the election of Pope John Paul II.
57
57
  dt = (OCT, 16)
58
- self._add_holiday(
59
- "Anniversary of the Election of the Holy Father", *dt
60
- )
58
+ self._add_holiday("Anniversary of the Election of the Holy Father", *dt)
61
59
 
62
60
  # In 2005-2013 - also name day for the civilian name of
63
61
  # Pope Benedict XVI (Josef Ratzinger)
@@ -83,12 +83,14 @@ class Venezuela(HolidayBase, ChristianHolidays, InternationalHolidays):
83
83
  # Birthday of Simon Bolivar.
84
84
  self._add_holiday(tr("Natalicio de Simón Bolívar"), JUL, 24)
85
85
 
86
- if year >= 2002:
87
- # Day of Indigenous Resistance.
88
- self._add_holiday(tr("Día de la Resistencia Indígena"), OCT, 12)
89
- elif year >= 1921:
90
- # Columbus Day.
91
- self._add_holiday(tr("Día de la Raza"), OCT, 12)
86
+ if year >= 1921:
87
+ self._add_columbus_day(
88
+ # Day of Indigenous Resistance.
89
+ tr("Día de la Resistencia Indígena")
90
+ if year >= 2002
91
+ # Columbus Day.
92
+ else tr("Día de la Raza")
93
+ )
92
94
 
93
95
  # Note: not sure about the start year nor the reason this was
94
96
  # Note: celebrated; the historical records are unclear
@@ -13,8 +13,7 @@ from datetime import timedelta as td
13
13
 
14
14
  from holidays.constants import APR, SEP
15
15
  from holidays.holiday_base import HolidayBase
16
- from holidays.holiday_groups import ChineseCalendarHolidays
17
- from holidays.holiday_groups import InternationalHolidays
16
+ from holidays.holiday_groups import ChineseCalendarHolidays, InternationalHolidays
18
17
 
19
18
 
20
19
  class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
@@ -36,9 +35,7 @@ class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
36
35
  observed_dates = set()
37
36
 
38
37
  # New Year's Day
39
- observed_dates.add(
40
- self._add_new_years_day("International New Year's Day")
41
- )
38
+ observed_dates.add(self._add_new_years_day("International New Year's Day"))
42
39
 
43
40
  # Lunar New Year
44
41
  self._add_chinese_new_years_eve("Vietnamese New Year's Eve")
@@ -51,14 +48,10 @@ class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
51
48
  # Vietnamese Kings' Commemoration Day
52
49
  # https://en.wikipedia.org/wiki/H%C3%B9ng_Kings%27_Festival
53
50
  if year >= 2007:
54
- observed_dates.add(
55
- self._add_hung_kings_day("Hung Kings Commemoration Day")
56
- )
51
+ observed_dates.add(self._add_hung_kings_day("Hung Kings Commemoration Day"))
57
52
 
58
53
  # Liberation Day/Reunification Day
59
- observed_dates.add(
60
- self._add_holiday("Liberation Day/Reunification Day", APR, 30)
61
- )
54
+ observed_dates.add(self._add_holiday("Liberation Day/Reunification Day", APR, 30))
62
55
 
63
56
  # International Labor Day
64
57
  observed_dates.add(self._add_labor_day("International Labor Day"))
@@ -71,14 +64,9 @@ class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
71
64
  if not self._is_weekend(dt):
72
65
  continue
73
66
  next_workday = dt + td(days=+1)
74
- while (
75
- self._is_weekend(next_workday)
76
- or next_workday in observed_dates
77
- ):
67
+ while self._is_weekend(next_workday) or next_workday in observed_dates:
78
68
  next_workday += td(days=+1)
79
- observed_dates.add(
80
- self._add_holiday(f"{self[dt]} (Observed)", next_workday)
81
- )
69
+ observed_dates.add(self._add_holiday(f"{self[dt]} (Observed)", next_workday))
82
70
 
83
71
 
84
72
  class VN(Vietnam):
@@ -12,14 +12,13 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import easter
16
-
17
15
  from holidays.calendars import _get_nth_weekday_of_month
18
- from holidays.constants import JAN, MAR, APR, MAY, JUL, AUG, SEP, OCT, DEC, MON
16
+ from holidays.constants import MAR, APR, JUL, AUG, SEP, OCT, MON
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Zambia(HolidayBase):
21
+ class Zambia(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  """
24
23
  https://www.officeholidays.com/countries/zambia/
25
24
  https://www.timeanddate.com/holidays/zambia/
@@ -34,8 +33,7 @@ class Zambia(HolidayBase):
34
33
  (
35
34
  SEP,
36
35
  13,
37
- "Inauguration ceremony of President-elect "
38
- "and Vice President-elect",
36
+ "Inauguration ceremony of President-elect and Vice President-elect",
39
37
  ),
40
38
  ),
41
39
  2018: (
@@ -49,54 +47,86 @@ class Zambia(HolidayBase):
49
47
  (AUG, 13, "Counting in general elections"),
50
48
  (AUG, 24, "Presidential inauguration"),
51
49
  ),
52
- 2022: ((MAR, 18, "Funeral of Rupiah Banda"),),
50
+ 2022: (MAR, 18, "Funeral of Rupiah Banda"),
53
51
  }
54
52
 
55
- def _populate(self, year):
56
- def _add_with_observed(hol_date: date, hol_name: str) -> None:
57
- # whenever a public holiday falls on a Sunday,
58
- # it rolls over to the following Monday
59
- self[hol_date] = hol_name
60
- if self.observed and self._is_sunday(hol_date):
61
- self[hol_date + td(days=+1)] = f"{hol_name} (Observed)"
53
+ def __init__(self, *args, **kwargs):
54
+ ChristianHolidays.__init__(self)
55
+ InternationalHolidays.__init__(self)
56
+ super().__init__(*args, **kwargs)
57
+
58
+ def _add_observed(self, dt: date) -> None:
59
+ # whenever a public holiday falls on a Sunday,
60
+ # it rolls over to the following Monday
61
+ if self.observed and self._is_sunday(dt):
62
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=+1))
62
63
 
64
+ def _populate(self, year):
63
65
  # Observed since 1965
64
66
  if year <= 1964:
65
67
  return None
66
68
 
67
69
  super()._populate(year)
68
70
 
69
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
71
+ # New Year's Day.
72
+ self._add_observed(self._add_new_years_day("New Year's Day"))
70
73
 
71
74
  if year >= 1991:
72
- _add_with_observed(date(year, MAR, 8), "International Women's Day")
75
+ self._add_observed(
76
+ # International Women's Day.
77
+ self._add_womens_day("International Women's Day")
78
+ )
79
+
80
+ # Youth Day.
81
+ self._add_observed(self._add_holiday("Youth Day", MAR, 12))
73
82
 
74
- _add_with_observed(date(year, MAR, 12), "Youth Day")
83
+ # Good Friday.
84
+ self._add_good_friday("Good Friday")
75
85
 
76
- easter_date = easter(year)
77
- self[easter_date + td(days=-2)] = "Good Friday"
78
- self[easter_date + td(days=-1)] = "Holy Saturday"
79
- self[easter_date + td(days=+1)] = "Easter Monday"
86
+ # Holy Saturday.
87
+ self._add_holy_saturday("Holy Saturday")
88
+
89
+ # Easter Monday.
90
+ self._add_easter_monday("Easter Monday")
80
91
 
81
92
  if year >= 2022:
82
- _add_with_observed(date(year, APR, 28), "Kenneth Kaunda Day")
93
+ self._add_observed(
94
+ # Kenneth Kaunda Day.
95
+ self._add_holiday("Kenneth Kaunda Day", APR, 28)
96
+ )
97
+
98
+ # Labour Day.
99
+ self._add_observed(self._add_labor_day("Labour Day"))
83
100
 
84
- _add_with_observed(date(year, MAY, 1), "Labour Day")
85
- _add_with_observed(date(year, MAY, 25), "Africa Freedom Day")
101
+ # Africa Freedom Day.
102
+ self._add_observed(self._add_africa_day("Africa Freedom Day"))
86
103
 
87
- # 1st Monday of July = "Heroes' Day"
88
- dt = _get_nth_weekday_of_month(1, MON, JUL, year)
89
- self[dt] = "Heroes' Day"
90
- self[dt + td(days=+1)] = "Unity Day"
104
+ first_mon_of_july = self._add_holiday(
105
+ # Heroes' Day.
106
+ "Heroes' Day",
107
+ _get_nth_weekday_of_month(1, MON, JUL, year),
108
+ )
91
109
 
92
- # 1st Monday of Aug = "Farmers' Day"
93
- self[_get_nth_weekday_of_month(1, MON, AUG, year)] = "Farmers' Day"
110
+ # Unity Day.
111
+ self._add_holiday("Unity Day", first_mon_of_july + td(days=+1))
112
+
113
+ self._add_holiday(
114
+ # Farmers' Day.
115
+ "Farmers' Day",
116
+ _get_nth_weekday_of_month(1, MON, AUG, year),
117
+ )
94
118
 
95
119
  if year >= 2015:
96
- _add_with_observed(date(year, OCT, 18), "National Prayer Day")
120
+ self._add_observed(
121
+ # National Prayer Day.
122
+ self._add_holiday("National Prayer Day", OCT, 18)
123
+ )
124
+
125
+ # Independence Day.
126
+ self._add_observed(self._add_holiday("Independence Day", OCT, 24))
97
127
 
98
- _add_with_observed(date(year, OCT, 24), "Independence Day")
99
- _add_with_observed(date(year, DEC, 25), "Christmas Day")
128
+ # Christmas Day.
129
+ self._add_observed(self._add_christmas_day("Christmas Day"))
100
130
 
101
131
 
102
132
  class ZM(Zambia):
@@ -12,68 +12,87 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import easter
16
-
17
15
  from holidays.calendars import _get_nth_weekday_of_month
18
- from holidays.constants import JAN, FEB, APR, MAY, AUG, DEC, MON
16
+ from holidays.constants import FEB, APR, AUG, DEC, MON
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Zimbabwe(HolidayBase):
21
+ class Zimbabwe(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  """
24
- https://en.wikipedia.org/wiki/Robert_Mugabe
25
23
  https://en.wikipedia.org/wiki/Public_holidays_in_Zimbabwe
24
+ https://en.wikipedia.org/wiki/Robert_Gabriel_Mugabe_National_Youth_Day
26
25
  """
27
26
 
28
27
  country = "ZW"
29
28
 
30
- def _populate(self, year):
31
- def _add_with_observed(
32
- hol_date: date, hol_name: str, days: int = +1
33
- ) -> None:
34
- self[hol_date] = hol_name
35
- if self.observed and self._is_sunday(hol_date):
36
- self[hol_date + td(days=days)] = f"{hol_name} (Observed)"
29
+ def __init__(self, *args, **kwargs):
30
+ ChristianHolidays.__init__(self)
31
+ InternationalHolidays.__init__(self)
32
+ super().__init__(*args, **kwargs)
33
+
34
+ def _add_observed(self, dt: date, days: int = +1) -> None:
35
+ if self.observed and self._is_sunday(dt):
36
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=days))
37
37
 
38
+ def _populate(self, year):
38
39
  if year <= 1987:
39
40
  return None
40
41
 
41
42
  super()._populate(year)
42
43
 
43
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
44
+ # New Year's Day.
45
+ self._add_observed(self._add_new_years_day("New Year's Day"))
44
46
 
45
- # https://en.wikipedia.org/wiki/Robert_Gabriel_Mugabe_National_Youth_Day
46
47
  if year >= 2018:
47
- _add_with_observed(
48
- date(year, FEB, 21), "Robert Gabriel Mugabe National Youth Day"
48
+ self._add_observed(
49
+ self._add_holiday(
50
+ # Robert Gabriel Mugabe National Youth Day.
51
+ "Robert Gabriel Mugabe National Youth Day",
52
+ FEB,
53
+ 21,
54
+ )
49
55
  )
50
56
 
51
- easter_date = easter(year)
52
- self[easter_date + td(days=-2)] = "Good Friday"
53
- self[easter_date + td(days=-1)] = "Easter Saturday"
54
- self[easter_date + td(days=+1)] = "Easter Monday"
55
-
56
- # In 2049, 2055, 2060 Apr 19 is Easter Monday,
57
- # so observed on Apr 20 (Tue)
58
- _add_with_observed(
59
- date(year, APR, 18),
60
- "Independence Day",
61
- +2 if year in {2049, 2055, 2060} else +1,
57
+ # Good Friday.
58
+ self._add_good_friday("Good Friday")
59
+
60
+ # Easter Saturday.
61
+ self._add_holy_saturday("Easter Saturday")
62
+
63
+ # Easter Monday.
64
+ self._add_easter_monday("Easter Monday")
65
+
66
+ # Independence Day.
67
+ apr_18 = self._add_holiday("Independence Day", APR, 18)
68
+ self._add_observed(apr_18, days=+2 if apr_18 == self._easter_sunday else +1)
69
+
70
+ # Workers' Day.
71
+ self._add_observed(self._add_labor_day("Workers' Day"))
72
+
73
+ # Africa Day.
74
+ self._add_observed(self._add_africa_day("Africa Day"))
75
+
76
+ second_mon_of_august = self._add_holiday(
77
+ # Zimbabwe Heroes' Day.
78
+ "Zimbabwe Heroes' Day",
79
+ _get_nth_weekday_of_month(2, MON, AUG, year),
62
80
  )
63
81
 
64
- _add_with_observed(date(year, MAY, 1), "Workers' Day")
65
- _add_with_observed(date(year, MAY, 25), "Africa Day")
82
+ self._add_holiday(
83
+ # Defense Forces Day.
84
+ "Defense Forces Day",
85
+ second_mon_of_august + td(days=+1),
86
+ )
66
87
 
67
- # 2nd Monday of August
68
- zimbabwe_heroes_day = _get_nth_weekday_of_month(2, MON, AUG, year)
69
- self[zimbabwe_heroes_day] = "Zimbabwe Heroes' Day"
88
+ # Unity Day.
89
+ self._add_observed(self._add_holiday("Unity Day", DEC, 22))
70
90
 
71
- # Tuesday after 2nd Monday of August
72
- self[zimbabwe_heroes_day + td(days=+1)] = "Defense Forces Day"
91
+ # Christmas Day.
92
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
73
93
 
74
- _add_with_observed(date(year, DEC, 22), "Unity Day")
75
- _add_with_observed(date(year, DEC, 25), "Christmas Day", days=+2)
76
- _add_with_observed(date(year, DEC, 26), "Boxing Day")
94
+ # Boxing Day.
95
+ self._add_observed(self._add_christmas_day_two("Boxing Day"))
77
96
 
78
97
 
79
98
  class ZW(Zimbabwe):
@@ -13,9 +13,7 @@ from holidays.holiday_base import HolidayBase
13
13
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
14
14
 
15
15
 
16
- class EuropeanCentralBank(
17
- HolidayBase, ChristianHolidays, InternationalHolidays
18
- ):
16
+ class EuropeanCentralBank(HolidayBase, ChristianHolidays, InternationalHolidays):
19
17
  # https://en.wikipedia.org/wiki/TARGET2
20
18
  # http://www.ecb.europa.eu/press/pr/date/2000/html/pr001214_4.en.html
21
19