holidays 0.25__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 (331) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/__init__.py +9 -7
  3. holidays/calendars/buddhist.py +445 -0
  4. holidays/calendars/chinese.py +1238 -431
  5. holidays/calendars/custom.py +1 -3
  6. holidays/calendars/hebrew.py +2 -2
  7. holidays/calendars/hindu.py +445 -0
  8. holidays/calendars/islamic.py +1347 -1347
  9. holidays/calendars/thai.py +229 -38
  10. holidays/countries/__init__.py +8 -0
  11. holidays/countries/albania.py +6 -17
  12. holidays/countries/andorra.py +2 -6
  13. holidays/countries/angola.py +53 -39
  14. holidays/countries/argentina.py +25 -35
  15. holidays/countries/armenia.py +1 -0
  16. holidays/countries/aruba.py +109 -48
  17. holidays/countries/australia.py +31 -69
  18. holidays/countries/austria.py +1 -0
  19. holidays/countries/azerbaijan.py +44 -71
  20. holidays/countries/bahrain.py +7 -7
  21. holidays/countries/bangladesh.py +1 -3
  22. holidays/countries/belarus.py +2 -3
  23. holidays/countries/belize.py +128 -0
  24. holidays/countries/bolivia.py +2 -6
  25. holidays/countries/bosnia_and_herzegovina.py +5 -17
  26. holidays/countries/botswana.py +37 -44
  27. holidays/countries/brazil.py +4 -7
  28. holidays/countries/brunei.py +427 -0
  29. holidays/countries/bulgaria.py +3 -6
  30. holidays/countries/burkina_faso.py +141 -0
  31. holidays/countries/burundi.py +2 -5
  32. holidays/countries/cambodia.py +323 -0
  33. holidays/countries/cameroon.py +183 -0
  34. holidays/countries/canada.py +20 -28
  35. holidays/countries/chad.py +133 -0
  36. holidays/countries/chile.py +6 -13
  37. holidays/countries/china.py +21 -25
  38. holidays/countries/colombia.py +18 -15
  39. holidays/countries/costa_rica.py +25 -27
  40. holidays/countries/cuba.py +28 -15
  41. holidays/countries/curacao.py +100 -46
  42. holidays/countries/cyprus.py +3 -6
  43. holidays/countries/czechia.py +4 -12
  44. holidays/countries/denmark.py +2 -3
  45. holidays/countries/dominican_republic.py +2 -3
  46. holidays/countries/ecuador.py +55 -54
  47. holidays/countries/egypt.py +2 -5
  48. holidays/countries/el_salvador.py +101 -0
  49. holidays/countries/eswatini.py +34 -44
  50. holidays/countries/ethiopia.py +7 -14
  51. holidays/countries/finland.py +2 -3
  52. holidays/countries/france.py +1 -0
  53. holidays/countries/gabon.py +139 -0
  54. holidays/countries/georgia.py +1 -0
  55. holidays/countries/germany.py +1 -0
  56. holidays/countries/greece.py +7 -6
  57. holidays/countries/honduras.py +17 -13
  58. holidays/countries/hongkong.py +117 -126
  59. holidays/countries/hungary.py +93 -92
  60. holidays/countries/iceland.py +1 -0
  61. holidays/countries/india.py +4 -11
  62. holidays/countries/indonesia.py +178 -142
  63. holidays/countries/ireland.py +5 -15
  64. holidays/countries/isle_of_man.py +23 -5
  65. holidays/countries/israel.py +12 -24
  66. holidays/countries/italy.py +6 -7
  67. holidays/countries/jamaica.py +10 -18
  68. holidays/countries/japan.py +11 -16
  69. holidays/countries/kazakhstan.py +7 -22
  70. holidays/countries/kenya.py +44 -26
  71. holidays/countries/kyrgyzstan.py +2 -5
  72. holidays/countries/latvia.py +2 -6
  73. holidays/countries/lesotho.py +52 -32
  74. holidays/countries/liechtenstein.py +1 -0
  75. holidays/countries/lithuania.py +4 -12
  76. holidays/countries/madagascar.py +3 -9
  77. holidays/countries/malawi.py +34 -26
  78. holidays/countries/malaysia.py +335 -343
  79. holidays/countries/marshall_islands.py +4 -9
  80. holidays/countries/mexico.py +2 -3
  81. holidays/countries/moldova.py +4 -6
  82. holidays/countries/monaco.py +17 -26
  83. holidays/countries/montenegro.py +34 -24
  84. holidays/countries/morocco.py +8 -5
  85. holidays/countries/mozambique.py +35 -31
  86. holidays/countries/namibia.py +54 -35
  87. holidays/countries/netherlands.py +1 -0
  88. holidays/countries/new_zealand.py +166 -134
  89. holidays/countries/nicaragua.py +27 -22
  90. holidays/countries/nigeria.py +6 -17
  91. holidays/countries/north_macedonia.py +3 -8
  92. holidays/countries/norway.py +2 -3
  93. holidays/countries/pakistan.py +73 -75
  94. holidays/countries/panama.py +25 -24
  95. holidays/countries/paraguay.py +55 -47
  96. holidays/countries/peru.py +1 -0
  97. holidays/countries/philippines.py +6 -2
  98. holidays/countries/poland.py +4 -9
  99. holidays/countries/portugal.py +4 -11
  100. holidays/countries/romania.py +4 -5
  101. holidays/countries/russia.py +1 -0
  102. holidays/countries/san_marino.py +26 -27
  103. holidays/countries/saudi_arabia.py +8 -22
  104. holidays/countries/serbia.py +22 -31
  105. holidays/countries/singapore.py +181 -189
  106. holidays/countries/slovakia.py +2 -4
  107. holidays/countries/south_africa.py +60 -62
  108. holidays/countries/south_korea.py +59 -26
  109. holidays/countries/spain.py +7 -10
  110. holidays/countries/sweden.py +2 -3
  111. holidays/countries/switzerland.py +1 -0
  112. holidays/countries/taiwan.py +20 -20
  113. holidays/countries/thailand.py +36 -82
  114. holidays/countries/turkey.py +1 -3
  115. holidays/countries/ukraine.py +7 -18
  116. holidays/countries/united_arab_emirates.py +23 -31
  117. holidays/countries/united_kingdom.py +124 -116
  118. holidays/countries/united_states.py +42 -72
  119. holidays/countries/uruguay.py +1 -0
  120. holidays/countries/vatican_city.py +64 -32
  121. holidays/countries/venezuela.py +9 -6
  122. holidays/countries/vietnam.py +6 -20
  123. holidays/countries/zambia.py +63 -33
  124. holidays/countries/zimbabwe.py +56 -37
  125. holidays/financial/european_central_bank.py +15 -16
  126. holidays/financial/ny_stock_exchange.py +80 -86
  127. holidays/groups/__init__.py +18 -0
  128. holidays/groups/buddhist.py +71 -0
  129. holidays/groups/chinese.py +235 -0
  130. holidays/groups/christian.py +483 -0
  131. holidays/groups/hindu.py +71 -0
  132. holidays/groups/international.py +157 -0
  133. holidays/groups/islamic.py +288 -0
  134. holidays/groups/thai.py +157 -0
  135. holidays/helpers.py +20 -0
  136. holidays/holiday_base.py +54 -76
  137. holidays/holiday_groups.py +11 -1053
  138. holidays/locale/am/LC_MESSAGES/ET.mo +0 -0
  139. holidays/locale/am/LC_MESSAGES/ET.po +20 -15
  140. holidays/locale/ar/LC_MESSAGES/CA.mo +0 -0
  141. holidays/locale/ar/LC_MESSAGES/CA.po +184 -0
  142. holidays/locale/ar/LC_MESSAGES/ET.mo +0 -0
  143. holidays/locale/ar/LC_MESSAGES/ET.po +92 -0
  144. holidays/locale/ar/LC_MESSAGES/UA.mo +0 -0
  145. holidays/locale/ar/LC_MESSAGES/UA.po +97 -0
  146. holidays/locale/be/LC_MESSAGES/BY.po +11 -13
  147. holidays/locale/bg/LC_MESSAGES/BG.po +13 -15
  148. holidays/locale/da/LC_MESSAGES/DK.po +13 -12
  149. holidays/locale/de/LC_MESSAGES/AT.po +14 -14
  150. holidays/locale/de/LC_MESSAGES/CH.po +91 -56
  151. holidays/locale/de/LC_MESSAGES/DE.po +32 -32
  152. holidays/locale/de/LC_MESSAGES/LI.po +23 -23
  153. holidays/locale/el/LC_MESSAGES/CY.po +16 -16
  154. holidays/locale/el/LC_MESSAGES/GR.mo +0 -0
  155. holidays/locale/el/LC_MESSAGES/GR.po +21 -17
  156. holidays/locale/en/LC_MESSAGES/CA.po +43 -43
  157. holidays/locale/en_US/LC_MESSAGES/AM.mo +0 -0
  158. holidays/locale/en_US/LC_MESSAGES/AM.po +20 -20
  159. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  160. holidays/locale/en_US/LC_MESSAGES/AR.po +34 -33
  161. holidays/locale/en_US/LC_MESSAGES/AT.po +13 -13
  162. holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
  163. holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
  164. holidays/locale/en_US/LC_MESSAGES/BG.po +13 -15
  165. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  166. holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
  167. holidays/locale/en_US/LC_MESSAGES/BY.po +11 -13
  168. holidays/locale/en_US/LC_MESSAGES/CA.mo +0 -0
  169. holidays/locale/en_US/LC_MESSAGES/CA.po +70 -37
  170. holidays/locale/en_US/LC_MESSAGES/CH.po +91 -56
  171. holidays/locale/en_US/LC_MESSAGES/CL.po +39 -38
  172. holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
  173. holidays/locale/en_US/LC_MESSAGES/CO.po +27 -27
  174. holidays/locale/en_US/LC_MESSAGES/CR.mo +0 -0
  175. holidays/locale/en_US/LC_MESSAGES/CR.po +19 -19
  176. holidays/locale/en_US/LC_MESSAGES/CU.po +10 -10
  177. holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
  178. holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
  179. holidays/locale/en_US/LC_MESSAGES/CY.po +16 -16
  180. holidays/locale/en_US/LC_MESSAGES/DE.po +30 -30
  181. holidays/locale/en_US/LC_MESSAGES/DK.po +12 -11
  182. holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
  183. holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
  184. holidays/locale/en_US/LC_MESSAGES/ET.mo +0 -0
  185. holidays/locale/en_US/LC_MESSAGES/ET.po +20 -15
  186. holidays/locale/en_US/LC_MESSAGES/FI.po +15 -15
  187. holidays/locale/en_US/LC_MESSAGES/FR.po +27 -24
  188. holidays/locale/en_US/LC_MESSAGES/GE.po +23 -27
  189. holidays/locale/en_US/LC_MESSAGES/GR.mo +0 -0
  190. holidays/locale/en_US/LC_MESSAGES/GR.po +21 -17
  191. holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
  192. holidays/locale/en_US/LC_MESSAGES/HN.po +17 -12
  193. holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
  194. holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
  195. holidays/locale/en_US/LC_MESSAGES/IS.po +17 -17
  196. holidays/locale/en_US/LC_MESSAGES/JP.po +25 -25
  197. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  198. holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
  199. holidays/locale/en_US/LC_MESSAGES/LI.po +22 -22
  200. holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
  201. holidays/locale/en_US/LC_MESSAGES/MC.po +27 -27
  202. holidays/locale/en_US/LC_MESSAGES/MD.po +13 -13
  203. holidays/locale/en_US/LC_MESSAGES/MX.po +9 -12
  204. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  205. holidays/locale/en_US/LC_MESSAGES/NI.po +15 -15
  206. holidays/locale/en_US/LC_MESSAGES/NL.po +12 -12
  207. holidays/locale/en_US/LC_MESSAGES/NO.po +13 -13
  208. holidays/locale/en_US/LC_MESSAGES/PE.po +30 -30
  209. holidays/locale/en_US/LC_MESSAGES/PL.po +38 -21
  210. holidays/locale/en_US/LC_MESSAGES/PT.po +39 -36
  211. holidays/locale/en_US/LC_MESSAGES/PY.po +16 -16
  212. holidays/locale/en_US/LC_MESSAGES/RO.po +12 -12
  213. holidays/locale/en_US/LC_MESSAGES/RS.mo +0 -0
  214. holidays/locale/en_US/LC_MESSAGES/RS.po +17 -19
  215. holidays/locale/en_US/LC_MESSAGES/RU.po +11 -10
  216. holidays/locale/en_US/LC_MESSAGES/SE.po +19 -19
  217. holidays/locale/en_US/LC_MESSAGES/SK.po +17 -18
  218. holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
  219. holidays/locale/en_US/LC_MESSAGES/UA.po +18 -19
  220. holidays/locale/en_US/LC_MESSAGES/UY.po +15 -15
  221. holidays/locale/en_US/LC_MESSAGES/VE.po +16 -16
  222. holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
  223. holidays/locale/es/LC_MESSAGES/AR.po +34 -33
  224. holidays/locale/es/LC_MESSAGES/CL.po +39 -38
  225. holidays/locale/es/LC_MESSAGES/CO.mo +0 -0
  226. holidays/locale/es/LC_MESSAGES/CO.po +24 -24
  227. holidays/locale/es/LC_MESSAGES/CR.mo +0 -0
  228. holidays/locale/es/LC_MESSAGES/CR.po +19 -19
  229. holidays/locale/es/LC_MESSAGES/CU.po +10 -10
  230. holidays/locale/es/LC_MESSAGES/DO.po +12 -12
  231. holidays/locale/es/LC_MESSAGES/EC.po +11 -12
  232. holidays/locale/es/LC_MESSAGES/HN.mo +0 -0
  233. holidays/locale/es/LC_MESSAGES/HN.po +17 -12
  234. holidays/locale/es/LC_MESSAGES/MX.po +9 -12
  235. holidays/locale/es/LC_MESSAGES/NI.po +12 -12
  236. holidays/locale/es/LC_MESSAGES/PE.po +30 -30
  237. holidays/locale/es/LC_MESSAGES/PY.po +16 -16
  238. holidays/locale/es/LC_MESSAGES/UY.po +15 -15
  239. holidays/locale/es/LC_MESSAGES/VE.po +16 -16
  240. holidays/locale/fi/LC_MESSAGES/FI.po +16 -16
  241. holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
  242. holidays/locale/fr/LC_MESSAGES/CH.po +91 -56
  243. holidays/locale/fr/LC_MESSAGES/FR.po +27 -24
  244. holidays/locale/fr/LC_MESSAGES/MC.po +23 -23
  245. holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
  246. holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
  247. holidays/locale/hy/LC_MESSAGES/AM.po +16 -16
  248. holidays/locale/is/LC_MESSAGES/IS.po +18 -18
  249. holidays/locale/it/LC_MESSAGES/CH.po +91 -56
  250. holidays/locale/ja/LC_MESSAGES/JP.po +25 -25
  251. holidays/locale/ka/LC_MESSAGES/GE.po +23 -27
  252. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  253. holidays/locale/km/LC_MESSAGES/KH.po +139 -0
  254. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  255. holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
  256. holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
  257. holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
  258. holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
  259. holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
  260. holidays/locale/nl/LC_MESSAGES/NL.po +13 -13
  261. holidays/locale/no/LC_MESSAGES/NO.po +14 -14
  262. holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
  263. holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
  264. holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
  265. holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
  266. holidays/locale/pl/LC_MESSAGES/PL.po +38 -21
  267. holidays/locale/pt_PT/LC_MESSAGES/PT.po +39 -36
  268. holidays/locale/ro/LC_MESSAGES/MD.po +14 -15
  269. holidays/locale/ro/LC_MESSAGES/RO.po +13 -14
  270. holidays/locale/ru/LC_MESSAGES/RU.po +11 -9
  271. holidays/locale/sk/LC_MESSAGES/SK.po +17 -18
  272. holidays/locale/sr/LC_MESSAGES/RS.mo +0 -0
  273. holidays/locale/sr/LC_MESSAGES/RS.po +15 -17
  274. holidays/locale/sv/LC_MESSAGES/FI.po +16 -16
  275. holidays/locale/sv/LC_MESSAGES/SE.po +20 -20
  276. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  277. holidays/locale/th/LC_MESSAGES/BN.po +96 -0
  278. holidays/locale/th/LC_MESSAGES/CA.po +42 -42
  279. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  280. holidays/locale/th/LC_MESSAGES/KH.po +145 -0
  281. holidays/locale/th/LC_MESSAGES/TH.po +41 -41
  282. holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
  283. holidays/locale/uk/LC_MESSAGES/AR.po +35 -35
  284. holidays/locale/uk/LC_MESSAGES/AT.po +15 -16
  285. holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
  286. holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
  287. holidays/locale/uk/LC_MESSAGES/CH.po +92 -58
  288. holidays/locale/uk/LC_MESSAGES/CL.po +40 -40
  289. holidays/locale/uk/LC_MESSAGES/CO.mo +0 -0
  290. holidays/locale/uk/LC_MESSAGES/CO.po +28 -29
  291. holidays/locale/uk/LC_MESSAGES/CR.mo +0 -0
  292. holidays/locale/uk/LC_MESSAGES/CR.po +20 -21
  293. holidays/locale/uk/LC_MESSAGES/CU.po +11 -12
  294. holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
  295. holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
  296. holidays/locale/uk/LC_MESSAGES/DE.po +33 -34
  297. holidays/locale/uk/LC_MESSAGES/DK.po +14 -14
  298. holidays/locale/uk/LC_MESSAGES/DO.po +13 -14
  299. holidays/locale/uk/LC_MESSAGES/EC.po +12 -14
  300. holidays/locale/uk/LC_MESSAGES/FI.po +17 -18
  301. holidays/locale/uk/LC_MESSAGES/FR.po +28 -26
  302. holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
  303. holidays/locale/uk/LC_MESSAGES/HN.po +18 -14
  304. holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
  305. holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
  306. holidays/locale/uk/LC_MESSAGES/IS.po +19 -20
  307. holidays/locale/uk/LC_MESSAGES/LI.po +24 -25
  308. holidays/locale/uk/LC_MESSAGES/MC.po +27 -28
  309. holidays/locale/uk/LC_MESSAGES/MD.po +14 -15
  310. holidays/locale/uk/LC_MESSAGES/MX.po +10 -14
  311. holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
  312. holidays/locale/uk/LC_MESSAGES/NI.po +16 -17
  313. holidays/locale/uk/LC_MESSAGES/NL.po +14 -15
  314. holidays/locale/uk/LC_MESSAGES/NO.po +15 -16
  315. holidays/locale/uk/LC_MESSAGES/PE.po +31 -32
  316. holidays/locale/uk/LC_MESSAGES/PL.po +38 -21
  317. holidays/locale/uk/LC_MESSAGES/PY.po +17 -18
  318. holidays/locale/uk/LC_MESSAGES/RO.po +13 -14
  319. holidays/locale/uk/LC_MESSAGES/SE.po +21 -22
  320. holidays/locale/uk/LC_MESSAGES/SK.po +18 -20
  321. holidays/locale/uk/LC_MESSAGES/UA.po +17 -17
  322. holidays/locale/uk/LC_MESSAGES/UY.po +16 -17
  323. holidays/locale/uk/LC_MESSAGES/VE.po +17 -18
  324. holidays/registry.py +21 -12
  325. holidays/utils.py +87 -17
  326. {holidays-0.25.dist-info → holidays-0.27.dist-info}/METADATA +282 -265
  327. holidays-0.27.dist-info/RECORD +449 -0
  328. holidays-0.25.dist-info/RECORD +0 -390
  329. {holidays-0.25.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
  330. {holidays-0.25.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
  331. {holidays-0.25.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
@@ -9,16 +9,14 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from datetime import date
13
12
  from datetime import timedelta as td
14
13
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, FEB, MAR, APR, MAY, SEP, NOV, DEC
14
+ from holidays.constants import FEB, MAR, APR, SEP, NOV, DEC
18
15
  from holidays.holiday_base import HolidayBase
16
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
17
 
20
18
 
21
- class Angola(HolidayBase):
19
+ class Angola(HolidayBase, ChristianHolidays, InternationalHolidays):
22
20
  """
23
21
  https://www.officeholidays.com/countries/angola/
24
22
  https://www.timeanddate.com/holidays/angola/
@@ -26,25 +24,28 @@ class Angola(HolidayBase):
26
24
 
27
25
  country = "AO"
28
26
 
29
- def _populate(self, year: int) -> None:
30
- def _add_with_observed(
31
- hol_date: date, hol_name: str, before: bool = True
32
- ) -> None:
33
- # As of 1995/1/1, whenever a public holiday falls on a Sunday,
34
- # it rolls over to the following Monday
35
- # Since 2018 when a public holiday falls on the Tuesday or Thursday
36
- # the Monday or Friday is also a holiday
37
- self[hol_date] = hol_name
38
- if self.observed and year >= 1995:
39
- if year <= 2017:
40
- if self._is_sunday(hol_date):
41
- self[hol_date + td(days=+1)] = f"{hol_name} (Observed)"
27
+ def __init__(self, *args, **kwargs):
28
+ ChristianHolidays.__init__(self)
29
+ InternationalHolidays.__init__(self)
30
+ super().__init__(*args, **kwargs)
31
+
32
+ def _add_observed_holiday(self, dt, before: bool = True) -> None:
33
+ # As of 1995/1/1, whenever a public holiday falls on a Sunday,
34
+ # it rolls over to the following Monday
35
+ # Since 2018 when a public holiday falls on the Tuesday or Thursday
36
+ # the Monday or Friday is also a holiday
37
+ if self.observed and self._year >= 1995:
38
+ for name in self.get_list(dt):
39
+ if self._year <= 2017:
40
+ if self._is_sunday(dt):
41
+ self._add_holiday("%s (Observed)" % name, dt + td(days=+1))
42
42
  else:
43
- if self._is_tuesday(hol_date) and before:
44
- self[hol_date + td(days=-1)] = f"{hol_name} (Day off)"
45
- elif self._is_thursday(hol_date):
46
- self[hol_date + td(days=+1)] = f"{hol_name} (Day off)"
43
+ if self._is_tuesday(dt) and before:
44
+ self._add_holiday("%s (Day off)" % name, dt + td(days=-1))
45
+ elif self._is_thursday(dt):
46
+ self._add_holiday("%s (Day off)" % name, dt + td(days=+1))
47
47
 
48
+ def _populate(self, year: int) -> None:
48
49
  # Observed since 1975
49
50
  # TODO do more research on history of Angolan holidays
50
51
  if year <= 1974:
@@ -52,36 +53,49 @@ class Angola(HolidayBase):
52
53
 
53
54
  super()._populate(year)
54
55
 
55
- _add_with_observed(date(year, JAN, 1), "Ano novo", before=False)
56
+ # New Year's Day.
57
+ self._add_observed_holiday(self._add_new_years_day("Ano novo"), before=False)
56
58
  # Since 2018, if the following year's New Year's Day falls on a
57
59
  # Tuesday, the 31st of the current year is also a holiday.
58
60
  if self.observed and self._is_monday(DEC, 31) and year >= 2018:
59
- self[date(year, DEC, 31)] = "Ano novo (Day off)"
61
+ self._add_holiday("Ano novo (Day off)", DEC, 31)
62
+
63
+ # Good Friday.
64
+ self._add_good_friday("Sexta-feira Santa")
60
65
 
61
- easter_date = easter(year)
62
- self[easter_date + td(days=-2)] = "Sexta-feira Santa"
66
+ # Carnival.
67
+ self._add_observed_holiday(self._add_carnival_tuesday("Carnaval"))
63
68
 
64
- # carnival is the Tuesday before Ash Wednesday
65
- # which is 40 days before easter excluding sundays
66
- _add_with_observed(easter_date + td(days=-47), "Carnaval")
69
+ # Liberation Movement Day.
70
+ self._add_observed_holiday(self._add_holiday("Dia do Início da Luta Armada", FEB, 4))
67
71
 
68
- _add_with_observed(date(year, FEB, 4), "Dia do Início da Luta Armada")
69
- _add_with_observed(date(year, MAR, 8), "Dia Internacional da Mulher")
72
+ # Day off for International Woman's Day.
73
+ self._add_observed_holiday(self._add_womens_day("Dia Internacional da Mulher"))
70
74
 
75
+ # Southern Africa Liberation Day.
71
76
  if year >= 2019:
72
- _add_with_observed(
73
- date(year, MAR, 23), "Dia da Libertação da África Austral"
77
+ self._add_observed_holiday(
78
+ self._add_holiday("Dia da Libertação da África Austral", MAR, 23)
74
79
  )
75
80
 
76
- _add_with_observed(date(year, APR, 4), "Dia da Paz e Reconciliação")
77
- _add_with_observed(date(year, MAY, 1), "Dia Mundial do Trabalho")
81
+ # Peace Day.
82
+ self._add_observed_holiday(self._add_holiday("Dia da Paz e Reconciliação", APR, 4))
78
83
 
84
+ # May Day.
85
+ self._add_observed_holiday(self._add_labor_day("Dia Mundial do Trabalho"))
86
+
87
+ # National Hero Day.
79
88
  if year >= 1980:
80
- _add_with_observed(date(year, SEP, 17), "Dia do Herói Nacional")
89
+ self._add_observed_holiday(self._add_holiday("Dia do Herói Nacional", SEP, 17))
90
+
91
+ # All Souls' Day.
92
+ self._add_observed_holiday(self._add_all_souls_day("Dia dos Finados"))
93
+
94
+ # Independence Day.
95
+ self._add_observed_holiday(self._add_holiday("Dia da Independência", NOV, 11))
81
96
 
82
- _add_with_observed(date(year, NOV, 2), "Dia dos Finados")
83
- _add_with_observed(date(year, NOV, 11), "Dia da Independência")
84
- _add_with_observed(date(year, DEC, 25), "Dia de Natal e da Família")
97
+ # Christmas Day.
98
+ self._add_observed_holiday(self._add_christmas_day("Dia de Natal e da Família"))
85
99
 
86
100
 
87
101
  class AO(Angola):
@@ -13,8 +13,7 @@ from datetime import date
13
13
  from gettext import gettext as tr
14
14
 
15
15
  from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
16
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
17
- from holidays.constants import OCT, NOV, DEC, MON
16
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, MON
18
17
  from holidays.holiday_base import HolidayBase
19
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
@@ -60,6 +59,7 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
60
59
 
61
60
  country = "AR"
62
61
  default_language = "es"
62
+ supported_languages = ("en_US", "es", "uk")
63
63
 
64
64
  # Special Bridge Holidays are given upto 3 days a year
65
65
  # as long as it's declared 50 days before calendar year's end
@@ -74,8 +74,7 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
74
74
  )
75
75
  bicentennial_battle_tucuman = tr("Bicentenario de la Batalla de Tucumán")
76
76
  bicentennial_assembly_1813 = tr(
77
- "Bicentenario de la sesión inaugural "
78
- "de la Asamblea Nacional Constituyente del año 1813"
77
+ "Bicentenario de la sesión inaugural de la Asamblea Nacional Constituyente del año 1813"
79
78
  )
80
79
  bicentennial_battle_salta = tr("Bicentenario de la Batalla de Salta")
81
80
  national_census_2022 = tr("Censo nacional 2022")
@@ -148,7 +147,7 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
148
147
  super().__init__(*args, **kwargs)
149
148
 
150
149
  def _populate(self, year):
151
- def _add_movable(hol_date: date, hol_name: str) -> None:
150
+ def add_movable_holiday(dt: date, name: str) -> None:
152
151
  """
153
152
  !!! Movable Holidays Law !!!
154
153
 
@@ -159,13 +158,13 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
159
158
  - If THU/FRI - observed on next MON
160
159
  """
161
160
  if self.observed:
162
- if self._is_tuesday(hol_date) or self._is_wednesday(hol_date):
163
- hol_date = _get_nth_weekday_from(-1, MON, hol_date)
164
- hol_name = self.tr("%s (Observado)") % self.tr(hol_name)
165
- elif self._is_thursday(hol_date) or self._is_friday(hol_date):
166
- hol_date = _get_nth_weekday_from(1, MON, hol_date)
167
- hol_name = self.tr("%s (Observado)") % self.tr(hol_name)
168
- self._add_holiday(hol_name, hol_date)
161
+ if self._is_tuesday(dt) or self._is_wednesday(dt):
162
+ dt = _get_nth_weekday_from(-1, MON, dt)
163
+ name = self.tr("%s (Observado)") % self.tr(name)
164
+ elif self._is_thursday(dt) or self._is_friday(dt):
165
+ dt = _get_nth_weekday_from(1, MON, dt)
166
+ name = self.tr("%s (Observado)") % self.tr(name)
167
+ self._add_holiday(name, dt)
169
168
 
170
169
  super()._populate(year)
171
170
 
@@ -208,9 +207,7 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
208
207
  self._add_holiday(
209
208
  tr("Día del Veterano de Guerra")
210
209
  if year <= 2000
211
- else tr(
212
- "Día del Veterano y de los Caidos en la Guerra de Malvinas"
213
- ),
210
+ else tr("Día del Veterano y de los Caidos en la Guerra de Malvinas"),
214
211
  date(year, MAR, 31) if year == 2020 else date(year, APR, 2),
215
212
  )
216
213
 
@@ -260,9 +257,7 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
260
257
  self._add_holiday(tr("Día de la Independencia"), JUL, 9)
261
258
 
262
259
  # Immaculate Conception.
263
- self._add_immaculate_conception_day(
264
- tr("Inmaculada Concepción de María")
265
- )
260
+ self._add_immaculate_conception_day(tr("Inmaculada Concepción de María"))
266
261
 
267
262
  # Christmas.
268
263
  self._add_christmas_day(tr("Navidad"))
@@ -275,16 +270,13 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
275
270
 
276
271
  if year >= 2016:
277
272
  dt = date(year, JUN, 17)
278
- name = tr(
279
- "Paso a la Inmortalidad del General Don Martín Miguel "
280
- "de Güemes"
281
- )
273
+ name = tr("Paso a la Inmortalidad del General Don Martín Miguel de Güemes")
282
274
  # If Jun 17 is Friday, then it should move to Mon, Jun 20
283
275
  # but Jun 20 is Gen. Belgrano holiday
284
276
  if self._is_friday(dt):
285
277
  self._add_holiday(name, dt)
286
278
  else:
287
- _add_movable(dt, name)
279
+ add_movable_holiday(dt, name)
288
280
 
289
281
  # Day Pass to the Immortality of General José de San Martin.
290
282
  # Status: In-Use.
@@ -299,24 +291,22 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
299
291
  elif 1938 <= year <= 1994:
300
292
  self._add_holiday(name, AUG, 17)
301
293
  elif 1995 <= year <= 2010:
302
- self._add_holiday(
303
- name, _get_nth_weekday_of_month(3, MON, AUG, year)
304
- )
294
+ self._add_holiday(name, _get_nth_weekday_of_month(3, MON, AUG, year))
305
295
  elif year >= 2012:
306
- _add_movable(date(year, AUG, 17), name)
296
+ add_movable_holiday(date(year, AUG, 17), name)
307
297
 
308
298
  # Respect for Cultural Diversity Day or Columbus Day.
309
299
  # Status: In-Use.
310
300
  # First started in 1917 for Argentina.
311
- # Have its name changed from 2010 onwards.
301
+ # In 2010 the holiday became movable and its name was changed.
312
302
 
313
- if year >= 1917:
314
- name = (
315
- tr("Día del Respeto a la Diversidad Cultural")
316
- if year >= 2010
317
- else tr("Día de la Raza")
303
+ if 1917 <= year <= 2009:
304
+ self._add_columbus_day(tr("Día de la Raza"))
305
+ elif year >= 2010:
306
+ add_movable_holiday(
307
+ date(year, OCT, 12),
308
+ tr("Día del Respeto a la Diversidad Cultural"),
318
309
  )
319
- _add_movable(date(year, OCT, 12), name)
320
310
 
321
311
  # National Sovereignty Day.
322
312
  # Status: In-Use.
@@ -332,7 +322,7 @@ class Argentina(HolidayBase, ChristianHolidays, InternationalHolidays):
332
322
  elif year == 2016:
333
323
  self._add_holiday(name, NOV, 28)
334
324
  elif year >= 2010:
335
- _add_movable(date(year, NOV, 20), name)
325
+ add_movable_holiday(date(year, NOV, 20), name)
336
326
 
337
327
 
338
328
  class AR(Argentina):
@@ -29,6 +29,7 @@ class Armenia(HolidayBase, ChristianHolidays, InternationalHolidays):
29
29
 
30
30
  country = "AM"
31
31
  default_language = "hy"
32
+ supported_languages = ("en_US", "hy")
32
33
 
33
34
  def __init__(self, *args, **kwargs):
34
35
  ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -11,81 +11,142 @@
11
11
 
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
+ from gettext import gettext as tr
14
15
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, MAR, APR, MAY, AUG, DEC
16
+ from holidays.constants import JAN, MAR, APR, AUG
18
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
19
 
20
20
 
21
- class Aruba(HolidayBase):
21
+ class Aruba(HolidayBase, ChristianHolidays, InternationalHolidays):
22
22
  """
23
- http://www.gobierno.aw/informacion-tocante-servicio/vakantie-y-dia-di-fiesta_43437/item/dia-di-fiesta_14809.html
23
+ https://www.government.aw/information-public-services/hiring-people_47940/item/holidays_43823.html # noqa: E501
24
+ https://www.overheid.aw/informatie-dienstverlening/ondernemen-en-werken-subthemas_46970/item/feestdagen_37375.html # noqa: E501
25
+ https://www.gobierno.aw/informacion-tocante-servicio/haci-negoshi-y-traha-sub-topics_47789/item/dia-di-fiesta_41242.html # noqa: E501
24
26
  https://www.visitaruba.com/about-aruba/national-holidays-and-celebrations/
27
+ https://www.arubatoday.com/we-celebrate-our-national-hero-betico-croes/
28
+ https://www.caribbeannewsglobal.com/carnival-monday-remains-a-festive-day-in-aruba/ # noqa: E501
29
+ https://www.aruba.com/us/calendar/national-anthem-and-flag-day
25
30
  """
26
31
 
27
32
  country = "AW"
33
+ default_language = "pap"
34
+ supported_languages = ("en_US", "nl", "pap", "uk")
28
35
 
29
- def _populate(self, year):
30
- super()._populate(year)
36
+ def __init__(self, *args, **kwargs):
37
+ ChristianHolidays.__init__(self)
38
+ InternationalHolidays.__init__(self)
39
+ super().__init__(*args, **kwargs)
31
40
 
32
- # New Year's Day
33
- self[date(year, JAN, 1)] = "Aña Nobo [New Year's Day]"
41
+ def _populate(self, year):
42
+ # AUG 1947: Autonomous State status in the Kingdom of the Netherlands.
43
+ if year <= 1946:
44
+ return None
34
45
 
35
- # Dia di Betico
36
- self[date(year, JAN, 25)] = "Dia Di Betico [Betico Day]"
46
+ super()._populate(year)
37
47
 
38
- easter_date = easter(year)
39
- # Carnaval Monday
40
- self[
41
- easter_date + td(days=-48)
42
- ] = "Dialuna di Carnaval [Carnaval Monday]"
48
+ # Aña Nobo.
49
+ # Status: In-Use.
43
50
 
44
- # Dia di Himno y Bandera
45
- self[
46
- date(year, MAR, 18)
47
- ] = "Dia di Himno y Bandera [National Anthem & Flag Day]"
51
+ # New Year's Day
52
+ self._add_new_years_day(tr("Aña Nobo"))
53
+
54
+ # Dia Di Betico.
55
+ # Status: In-Use.
56
+ # Started in 1989.
57
+
58
+ if year >= 1989:
59
+ # Betico Day
60
+ self._add_holiday(tr("Dia di Betico"), JAN, 25)
61
+
62
+ # Dialuna prome cu diaranson di shinish.
63
+ # Status: In-Use.
64
+ # Starts as a public holiday from 1956 onwards.
65
+ # Event cancelled but remain a holiday in 2021.
66
+ # Have its name changed from 2023 onwards.
67
+
68
+ if year >= 1956:
69
+ self._add_ash_monday(
70
+ # Carnival Monday
71
+ tr("Dialuna despues di Carnaval Grandi")
72
+ if year <= 2022
73
+ # Monday before Ash Wednesday
74
+ else tr("Dialuna prome cu diaranson di shinish")
75
+ )
76
+
77
+ # Dia di Himno y Bandera.
78
+ # Status: In-Use.
79
+ # Started in 1976.
80
+
81
+ if year >= 1976:
82
+ # National Anthem and Flag Day
83
+ self._add_holiday(tr("Dia di Himno y Bandera"), MAR, 18)
84
+
85
+ # Bierna Santo.
86
+ # Status: In-Use.
48
87
 
49
88
  # Good Friday
50
- self[easter_date + td(days=-2)] = "Bierna Santo [Good Friday]"
89
+ self._add_good_friday(tr("Bierna Santo"))
51
90
 
52
- # Easter Monday
53
- self[
54
- easter_date + td(days=+1)
55
- ] = "Di Dos Dia di Pasco di Resureccion [Easter Monday]"
91
+ # Di dos dia di Pasco di Resureccion.
92
+ # Status: In-Use.
56
93
 
57
- # King's Day
94
+ # Easter Monday
95
+ self._add_easter_monday(tr("Di dos dia di Pasco di Resureccion"))
96
+
97
+ # Aña di La Reina/Aña di Rey/Dia di Rey.
98
+ # Status: In-Use.
99
+ # Started under Queen Wilhelmina in 1891.
100
+ # Queen Beatrix kept Queen Juliana's Birthday after her coronation.
101
+ # Switched to Aña di Rey in 2014 for King Willem-Alexander.
102
+ # Have its name changed again to Dia di Rey from 2021 onwards.
103
+
104
+ # King's / Queen's Day
105
+ name = (
106
+ # King's Day.
107
+ tr("Dia di Rey")
108
+ if year >= 2021
109
+ else (
110
+ # King's Day.
111
+ tr("Aña di Rey")
112
+ if year >= 2014
113
+ # Queen's Day.
114
+ else tr("Aña di La Reina")
115
+ )
116
+ )
58
117
  if year >= 2014:
59
- kings_day = date(year, APR, 27)
60
- if self._is_sunday(kings_day):
61
- kings_day += td(days=-1)
62
-
63
- self[kings_day] = "Aña di Rey [King's Day]"
118
+ dt = date(year, APR, 27)
119
+ elif year >= 1949:
120
+ dt = date(year, APR, 30)
121
+ else:
122
+ dt = date(year, AUG, 31)
123
+ if self._is_sunday(dt):
124
+ dt += td(days=-1) if year >= 1980 else td(days=+1)
125
+ self._add_holiday(name, dt)
64
126
 
65
- # Queen's Day
66
- if 1891 <= year <= 2013:
67
- queens_day = date(year, APR, 30)
68
- if year <= 1948:
69
- queens_day = date(year, AUG, 31)
127
+ # Dia di Labor/Dia di Obrero.
128
+ # Status: In-Use.
70
129
 
71
- if self._is_sunday(queens_day):
72
- queens_day += td(days=+1) if year < 1980 else td(days=-1)
130
+ # Labor Day
131
+ self._add_labor_day(tr("Dia di Obrero"))
73
132
 
74
- self[queens_day] = "Aña di La Reina [Queen's Day]"
75
-
76
- # Labour Day
77
- self[date(year, MAY, 1)] = "Dia di Obrero [Labour Day]"
133
+ # Dia di Asuncion.
134
+ # Status: In-Use.
78
135
 
79
136
  # Ascension Day
80
- self[easter_date + td(days=+39)] = "Dia di Asuncion [Ascension Day]"
137
+ self._add_ascension_thursday(tr("Dia di Asuncion"))
138
+
139
+ # Pasco di Nacemento.
140
+ # Status: In-Use.
81
141
 
82
142
  # Christmas Day
83
- self[date(year, DEC, 25)] = "Pasco di Nacemento [Christmas]"
143
+ self._add_christmas_day(tr("Pasco di Nacemento"))
144
+
145
+ # Di dos dia di Pasco di Nacemento.
146
+ # Status: In-Use.
84
147
 
85
- # Second Christmas
86
- self[
87
- date(year, DEC, 26)
88
- ] = "Di Dos Dia di Pasco di Nacemento [Second Christmas]"
148
+ # Second Day of Christmas
149
+ self._add_christmas_day_two(tr("Di dos dia di Pasco di Nacemento"))
89
150
 
90
151
 
91
152
  class AW(Aruba):