holidays 0.78__py3-none-any.whl → 0.80__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 (161) hide show
  1. holidays/calendars/__init__.py +1 -0
  2. holidays/calendars/chinese.py +14 -4
  3. holidays/calendars/ethiopian.py +31 -0
  4. holidays/calendars/hindu.py +1 -0
  5. holidays/calendars/islamic.py +16 -4
  6. holidays/calendars/julian.py +14 -0
  7. holidays/calendars/mandaean.py +59 -0
  8. holidays/calendars/tibetan.py +1466 -0
  9. holidays/constants.py +2 -1
  10. holidays/countries/__init__.py +20 -0
  11. holidays/countries/afghanistan.py +6 -39
  12. holidays/countries/albania.py +3 -22
  13. holidays/countries/argentina.py +7 -18
  14. holidays/countries/australia.py +191 -295
  15. holidays/countries/azerbaijan.py +6 -39
  16. holidays/countries/bahrain.py +29 -38
  17. holidays/countries/bhutan.py +194 -0
  18. holidays/countries/bosnia_and_herzegovina.py +7 -28
  19. holidays/countries/brunei.py +7 -117
  20. holidays/countries/burkina_faso.py +9 -15
  21. holidays/countries/burundi.py +95 -40
  22. holidays/countries/cameroon.py +8 -34
  23. holidays/countries/canada.py +9 -1
  24. holidays/countries/central_african_republic.py +3 -16
  25. holidays/countries/chad.py +9 -17
  26. holidays/countries/chile.py +20 -4
  27. holidays/countries/christmas_island.py +10 -15
  28. holidays/countries/cocos_islands.py +5 -24
  29. holidays/countries/comoros.py +121 -0
  30. holidays/countries/egypt.py +5 -37
  31. holidays/countries/eritrea.py +104 -0
  32. holidays/countries/ethiopia.py +18 -47
  33. holidays/countries/fiji.py +1 -2
  34. holidays/countries/gabon.py +5 -23
  35. holidays/countries/gambia.py +168 -0
  36. holidays/countries/georgia.py +9 -7
  37. holidays/countries/guinea.py +5 -27
  38. holidays/countries/guinea_bissau.py +96 -0
  39. holidays/countries/guyana.py +2 -17
  40. holidays/countries/india.py +12 -25
  41. holidays/countries/indonesia.py +6 -158
  42. holidays/countries/iran.py +16 -126
  43. holidays/countries/iraq.py +276 -0
  44. holidays/countries/kazakhstan.py +2 -18
  45. holidays/countries/kenya.py +2 -8
  46. holidays/countries/kiribati.py +124 -0
  47. holidays/countries/kyrgyzstan.py +2 -0
  48. holidays/countries/lebanon.py +5 -87
  49. holidays/countries/liberia.py +80 -0
  50. holidays/countries/libya.py +5 -37
  51. holidays/countries/macau.py +65 -63
  52. holidays/countries/malaysia.py +9 -130
  53. holidays/countries/maldives.py +2 -0
  54. holidays/countries/mali.py +4 -9
  55. holidays/countries/mauritania.py +2 -0
  56. holidays/countries/mauritius.py +1 -2
  57. holidays/countries/montenegro.py +3 -18
  58. holidays/countries/nepal.py +42 -44
  59. holidays/countries/niger.py +14 -74
  60. holidays/countries/nigeria.py +198 -27
  61. holidays/countries/north_macedonia.py +3 -39
  62. holidays/countries/oman.py +6 -28
  63. holidays/countries/pakistan.py +5 -30
  64. holidays/countries/palestine.py +2 -5
  65. holidays/countries/philippines.py +3 -33
  66. holidays/countries/qatar.py +3 -45
  67. holidays/countries/rwanda.py +162 -0
  68. holidays/countries/saudi_arabia.py +3 -0
  69. holidays/countries/senegal.py +6 -16
  70. holidays/countries/sierra_leone.py +5 -21
  71. holidays/countries/singapore.py +7 -59
  72. holidays/countries/somalia.py +79 -0
  73. holidays/countries/south_georgia_and_the_south_sandwich_islands.py +160 -0
  74. holidays/countries/south_sudan.py +133 -0
  75. holidays/countries/spain.py +7 -10
  76. holidays/countries/sri_lanka.py +3 -14
  77. holidays/countries/suriname.py +11 -19
  78. holidays/countries/syrian_arab_republic.py +134 -0
  79. holidays/countries/tajikistan.py +116 -0
  80. holidays/countries/tanzania.py +291 -153
  81. holidays/countries/timor_leste.py +2 -17
  82. holidays/countries/togo.py +4 -29
  83. holidays/countries/trinidad_and_tobago.py +2 -9
  84. holidays/countries/turkey.py +2 -116
  85. holidays/countries/turkmenistan.py +164 -0
  86. holidays/countries/uganda.py +101 -0
  87. holidays/countries/united_arab_emirates.py +5 -29
  88. holidays/countries/uzbekistan.py +3 -31
  89. holidays/countries/yemen.py +8 -52
  90. holidays/financial/__init__.py +5 -0
  91. holidays/financial/national_stock_exchange_of_india.py +169 -0
  92. holidays/groups/__init__.py +2 -0
  93. holidays/groups/christian.py +48 -12
  94. holidays/groups/eastern.py +1 -1
  95. holidays/groups/international.py +17 -1
  96. holidays/groups/islamic.py +1 -1
  97. holidays/groups/mandaean.py +107 -0
  98. holidays/groups/tibetan.py +153 -0
  99. holidays/holiday_base.py +14 -0
  100. holidays/locale/ar/LC_MESSAGES/BH.mo +0 -0
  101. holidays/locale/ar/LC_MESSAGES/IQ.mo +0 -0
  102. holidays/locale/ar/LC_MESSAGES/SY.mo +0 -0
  103. holidays/locale/bs/LC_MESSAGES/BA.mo +0 -0
  104. holidays/locale/en_GM/LC_MESSAGES/GM.mo +0 -0
  105. holidays/locale/en_GS/LC_MESSAGES/GS.mo +0 -0
  106. holidays/locale/en_IN/LC_MESSAGES/XNSE.mo +0 -0
  107. holidays/locale/en_MO/LC_MESSAGES/MO.mo +0 -0
  108. holidays/locale/en_NG/LC_MESSAGES/NG.mo +0 -0
  109. holidays/locale/en_SG/LC_MESSAGES/SG.mo +0 -0
  110. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  111. holidays/locale/en_US/LC_MESSAGES/BA.mo +0 -0
  112. holidays/locale/en_US/LC_MESSAGES/BH.mo +0 -0
  113. holidays/locale/en_US/LC_MESSAGES/BI.mo +0 -0
  114. holidays/locale/en_US/LC_MESSAGES/CL.mo +0 -0
  115. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  116. holidays/locale/en_US/LC_MESSAGES/GE.mo +0 -0
  117. holidays/locale/en_US/LC_MESSAGES/GM.mo +0 -0
  118. holidays/locale/en_US/LC_MESSAGES/GS.mo +0 -0
  119. holidays/locale/en_US/LC_MESSAGES/GW.mo +0 -0
  120. holidays/locale/en_US/LC_MESSAGES/IQ.mo +0 -0
  121. holidays/locale/en_US/LC_MESSAGES/MO.mo +0 -0
  122. holidays/locale/en_US/LC_MESSAGES/NG.mo +0 -0
  123. holidays/locale/en_US/LC_MESSAGES/RW.mo +0 -0
  124. holidays/locale/en_US/LC_MESSAGES/SG.mo +0 -0
  125. holidays/locale/en_US/LC_MESSAGES/SY.mo +0 -0
  126. holidays/locale/en_US/LC_MESSAGES/TJ.mo +0 -0
  127. holidays/locale/en_US/LC_MESSAGES/TM.mo +0 -0
  128. holidays/locale/en_US/LC_MESSAGES/TZ.mo +0 -0
  129. holidays/locale/en_US/LC_MESSAGES/XNSE.mo +0 -0
  130. holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
  131. holidays/locale/es/LC_MESSAGES/ES.mo +0 -0
  132. holidays/locale/fr/LC_MESSAGES/RW.mo +0 -0
  133. holidays/locale/fr_BI/LC_MESSAGES/BI.mo +0 -0
  134. holidays/locale/hi/LC_MESSAGES/XNSE.mo +0 -0
  135. holidays/locale/ka/LC_MESSAGES/GE.mo +0 -0
  136. holidays/locale/pt_GW/LC_MESSAGES/GW.mo +0 -0
  137. holidays/locale/pt_MO/LC_MESSAGES/MO.mo +0 -0
  138. holidays/locale/ru/LC_MESSAGES/TJ.mo +0 -0
  139. holidays/locale/ru/LC_MESSAGES/TM.mo +0 -0
  140. holidays/locale/rw/LC_MESSAGES/RW.mo +0 -0
  141. holidays/locale/sr/LC_MESSAGES/BA.mo +0 -0
  142. holidays/locale/sw/LC_MESSAGES/TZ.mo +0 -0
  143. holidays/locale/tg/LC_MESSAGES/TJ.mo +0 -0
  144. holidays/locale/th/LC_MESSAGES/MO.mo +0 -0
  145. holidays/locale/th/LC_MESSAGES/SG.mo +0 -0
  146. holidays/locale/tk/LC_MESSAGES/TM.mo +0 -0
  147. holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
  148. holidays/locale/uk/LC_MESSAGES/BA.mo +0 -0
  149. holidays/locale/uk/LC_MESSAGES/CL.mo +0 -0
  150. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  151. holidays/locale/uk/LC_MESSAGES/GE.mo +0 -0
  152. holidays/locale/zh_CN/LC_MESSAGES/MO.mo +0 -0
  153. holidays/locale/zh_MO/LC_MESSAGES/MO.mo +0 -0
  154. holidays/registry.py +46 -14
  155. holidays/version.py +1 -1
  156. {holidays-0.78.dist-info → holidays-0.80.dist-info}/METADATA +127 -9
  157. {holidays-0.78.dist-info → holidays-0.80.dist-info}/RECORD +161 -113
  158. {holidays-0.78.dist-info → holidays-0.80.dist-info}/licenses/CONTRIBUTORS +2 -0
  159. {holidays-0.78.dist-info → holidays-0.80.dist-info}/WHEEL +0 -0
  160. {holidays-0.78.dist-info → holidays-0.80.dist-info}/licenses/LICENSE +0 -0
  161. {holidays-0.78.dist-info → holidays-0.80.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,1466 @@
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 datetime import date
14
+ from typing import Optional
15
+
16
+ from holidays.calendars.custom import _CustomCalendar
17
+ from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
18
+
19
+ BIRTH_OF_GURU_RINPOCHE = "BIRTH_OF_GURU_RINPOCHE"
20
+ BLESSED_RAINY_DAY = "BLESSED_RAINY_DAY"
21
+ BUDDHA_FIRST_SERMON = "BUDDHA_FIRST_SERMON"
22
+ BUDDHA_PARINIRVANA = "BUDDHA_PARINIRVANA"
23
+ DAY_OF_OFFERING = "DAY_OF_OFFERING"
24
+ DEATH_OF_ZHABDRUNG = "DEATH_OF_ZHABDRUNG"
25
+ DESCENDING_DAY_OF_LORD_BUDDHA = "DESCENDING_DAY_OF_LORD_BUDDHA"
26
+ LOSAR = "LOSAR"
27
+ THIMPHU_DRUBCHEN = "THIMPHU_DRUBCHEN"
28
+ THIMPHU_TSHECHU = "THIMPHU_TSHECHU"
29
+ WINTER_SOLSTICE = "WINTER_SOLSTICE"
30
+
31
+
32
+ class _TibetanLunisolar:
33
+ """Tibetan lunisolar calendar.
34
+
35
+ Dates calculation is based on the Tibetan lunisolar calendar,
36
+ which is sourced from <https://github.com/wp-plugins/bhutanese-calendar>.
37
+ """
38
+
39
+ BIRTH_OF_GURU_RINPOCHE_DATES = {
40
+ 1970: (JUN, 14),
41
+ 1971: (JUL, 3),
42
+ 1972: (JUN, 21),
43
+ 1973: (JUL, 10),
44
+ 1974: (JUN, 29),
45
+ 1977: (JUN, 26),
46
+ 1978: (JUN, 16),
47
+ 1979: (JUL, 5),
48
+ 1980: (JUN, 23),
49
+ 1981: (JUL, 11),
50
+ 1982: (JUN, 30),
51
+ 1983: (JUN, 20),
52
+ 1984: (JUL, 8),
53
+ 1986: (JUN, 17),
54
+ 1987: (JUL, 6),
55
+ 1988: (JUN, 24),
56
+ 1989: (JUN, 13),
57
+ 1990: (JUL, 2),
58
+ 1991: (JUN, 21),
59
+ 1992: (JUL, 9),
60
+ 1993: (JUN, 29),
61
+ 1996: (JUN, 26),
62
+ 1997: (JUN, 15),
63
+ 1998: (JUL, 4),
64
+ 1999: (JUN, 23),
65
+ 2000: (JUL, 11),
66
+ 2001: (JUN, 30),
67
+ 2002: (JUN, 20),
68
+ 2003: (JUL, 9),
69
+ 2005: (JUN, 17),
70
+ 2006: (JUL, 6),
71
+ 2007: (JUN, 25),
72
+ 2008: (JUL, 12),
73
+ 2009: (JUL, 2),
74
+ 2010: (JUN, 21),
75
+ 2011: (JUL, 10),
76
+ 2012: (JUN, 29),
77
+ 2013: (JUN, 18),
78
+ 2014: (JUL, 7),
79
+ 2015: (JUN, 26),
80
+ 2016: (JUN, 15),
81
+ 2017: (JUL, 3),
82
+ 2018: (JUN, 23),
83
+ 2019: (JUL, 11),
84
+ 2020: (JUN, 30),
85
+ 2021: (JUN, 20),
86
+ 2022: (JUL, 9),
87
+ 2023: (JUN, 28),
88
+ 2024: (JUN, 16),
89
+ 2025: (JUL, 5),
90
+ 2026: (JUN, 24),
91
+ 2028: (JUL, 1),
92
+ 2029: (JUN, 21),
93
+ 2030: (JUL, 10),
94
+ 2031: (JUN, 30),
95
+ 2032: (JUN, 18),
96
+ 2033: (JUL, 7),
97
+ 2034: (JUN, 26),
98
+ 2035: (JUN, 15),
99
+ 2036: (JUL, 3),
100
+ 2037: (JUN, 22),
101
+ 2038: (JUL, 11),
102
+ 2039: (JUL, 1),
103
+ 2040: (JUN, 20),
104
+ 2041: (JUL, 8),
105
+ 2042: (JUN, 28),
106
+ 2043: (JUN, 17),
107
+ 2044: (JUL, 4),
108
+ 2045: (JUN, 24),
109
+ 2046: (JUL, 13),
110
+ 2047: (JUL, 2),
111
+ 2048: (JUN, 21),
112
+ 2049: (JUL, 10),
113
+ 2050: (JUN, 29),
114
+ 2051: (JUN, 18),
115
+ 2052: (JUL, 6),
116
+ 2053: (JUN, 25),
117
+ 2054: (JUN, 15),
118
+ 2055: (JUL, 4),
119
+ 2057: (JUL, 11),
120
+ 2058: (JUL, 1),
121
+ 2059: (JUN, 20),
122
+ 2060: (JUL, 8),
123
+ 2061: (JUN, 27),
124
+ 2062: (JUN, 16),
125
+ 2063: (JUL, 5),
126
+ 2064: (JUN, 24),
127
+ 2065: (JUL, 13),
128
+ 2066: (JUL, 2),
129
+ 2067: (JUN, 22),
130
+ 2068: (JUL, 10),
131
+ 2069: (JUN, 29),
132
+ 2070: (JUN, 18),
133
+ 2071: (JUL, 7),
134
+ 2072: (JUN, 25),
135
+ 2073: (JUN, 15),
136
+ 2074: (JUL, 4),
137
+ 2075: (JUN, 23),
138
+ 2076: (JUL, 11),
139
+ 2077: (JUN, 30),
140
+ 2078: (JUN, 20),
141
+ 2079: (JUL, 8),
142
+ 2081: (JUN, 16),
143
+ 2082: (JUL, 5),
144
+ 2083: (JUN, 25),
145
+ 2084: (JUL, 13),
146
+ 2085: (JUL, 2),
147
+ 2086: (JUN, 21),
148
+ 2087: (JUL, 10),
149
+ 2088: (JUN, 28),
150
+ 2089: (JUN, 17),
151
+ 2090: (JUL, 6),
152
+ 2091: (JUN, 26),
153
+ 2092: (JUN, 15),
154
+ 2093: (JUL, 4),
155
+ 2094: (JUN, 23),
156
+ 2095: (JUL, 12),
157
+ 2096: (JUN, 30),
158
+ 2097: (JUN, 19),
159
+ 2098: (JUL, 8),
160
+ 2099: (JUN, 27),
161
+ }
162
+
163
+ BLESSED_RAINY_DAY_DATES = {
164
+ 1970: (SEP, 23),
165
+ 1971: (SEP, 23),
166
+ 1972: (SEP, 23),
167
+ 1973: (SEP, 23),
168
+ 1974: (SEP, 23),
169
+ 1975: (SEP, 23),
170
+ 1976: (SEP, 23),
171
+ 1977: (SEP, 23),
172
+ 1978: (SEP, 23),
173
+ 1979: (SEP, 23),
174
+ 1980: (SEP, 23),
175
+ 1981: (SEP, 23),
176
+ 1982: (SEP, 23),
177
+ 1983: (SEP, 23),
178
+ 1984: (SEP, 23),
179
+ 1985: (SEP, 23),
180
+ 1986: (SEP, 23),
181
+ 1987: (SEP, 23),
182
+ 1988: (SEP, 23),
183
+ 1989: (SEP, 23),
184
+ 1990: (SEP, 23),
185
+ 1991: (SEP, 23),
186
+ 1992: (SEP, 23),
187
+ 1993: (SEP, 23),
188
+ 1994: (SEP, 23),
189
+ 1995: (SEP, 23),
190
+ 1996: (SEP, 23),
191
+ 1997: (SEP, 23),
192
+ 1998: (SEP, 23),
193
+ 1999: (SEP, 23),
194
+ 2000: (SEP, 22),
195
+ 2001: (SEP, 23),
196
+ 2002: (SEP, 23),
197
+ 2003: (SEP, 23),
198
+ 2004: (SEP, 22),
199
+ 2005: (SEP, 23),
200
+ 2006: (SEP, 23),
201
+ 2007: (SEP, 23),
202
+ 2008: (SEP, 22),
203
+ 2009: (SEP, 23),
204
+ 2010: (SEP, 23),
205
+ 2011: (SEP, 23),
206
+ 2012: (SEP, 22),
207
+ 2013: (SEP, 23),
208
+ 2014: (SEP, 23),
209
+ 2015: (SEP, 22),
210
+ 2016: (SEP, 23),
211
+ 2017: (SEP, 23),
212
+ 2018: (SEP, 23),
213
+ 2019: (SEP, 24),
214
+ 2020: (SEP, 23),
215
+ 2021: (SEP, 23),
216
+ 2022: (SEP, 23),
217
+ 2023: (SEP, 24),
218
+ 2024: (SEP, 23),
219
+ 2025: (SEP, 23),
220
+ 2026: (SEP, 23),
221
+ 2027: (SEP, 23),
222
+ 2028: (SEP, 22),
223
+ 2029: (SEP, 22),
224
+ 2030: (SEP, 23),
225
+ 2031: (SEP, 23),
226
+ 2032: (SEP, 22),
227
+ 2033: (SEP, 22),
228
+ 2034: (SEP, 23),
229
+ 2035: (SEP, 23),
230
+ 2036: (SEP, 22),
231
+ 2037: (SEP, 22),
232
+ 2038: (SEP, 23),
233
+ 2039: (SEP, 23),
234
+ 2040: (SEP, 22),
235
+ 2041: (SEP, 22),
236
+ 2042: (SEP, 23),
237
+ 2043: (SEP, 23),
238
+ 2044: (SEP, 22),
239
+ 2045: (SEP, 22),
240
+ 2046: (SEP, 23),
241
+ 2047: (SEP, 23),
242
+ 2048: (SEP, 22),
243
+ 2049: (SEP, 22),
244
+ 2050: (SEP, 23),
245
+ 2051: (SEP, 23),
246
+ 2052: (SEP, 22),
247
+ }
248
+
249
+ BUDDHA_FIRST_SERMON_DATES = {
250
+ 1970: (JUL, 7),
251
+ 1971: (JUL, 26),
252
+ 1972: (JUL, 14),
253
+ 1973: (AUG, 2),
254
+ 1974: (JUL, 23),
255
+ 1975: (JUL, 12),
256
+ 1976: (JUL, 30),
257
+ 1977: (JUL, 20),
258
+ 1978: (JUL, 9),
259
+ 1979: (JUL, 28),
260
+ 1980: (JUL, 16),
261
+ 1981: (AUG, 4),
262
+ 1982: (JUL, 24),
263
+ 1983: (JUL, 14),
264
+ 1984: (AUG, 1),
265
+ 1985: (JUL, 21),
266
+ 1986: (JUL, 11),
267
+ 1987: (JUL, 30),
268
+ 1988: (JUL, 18),
269
+ 1989: (JUL, 7),
270
+ 1990: (JUL, 25),
271
+ 1991: (JUL, 15),
272
+ 1992: (AUG, 2),
273
+ 1993: (JUL, 23),
274
+ 1994: (JUL, 12),
275
+ 1995: (JUL, 31),
276
+ 1996: (JUL, 19),
277
+ 1997: (JUL, 8),
278
+ 1998: (JUL, 27),
279
+ 1999: (JUL, 16),
280
+ 2000: (AUG, 3),
281
+ 2001: (JUL, 24),
282
+ 2002: (JUL, 14),
283
+ 2003: (AUG, 2),
284
+ 2004: (JUL, 21),
285
+ 2005: (JUL, 10),
286
+ 2006: (JUL, 29),
287
+ 2007: (JUL, 18),
288
+ 2008: (AUG, 5),
289
+ 2009: (JUL, 25),
290
+ 2010: (JUL, 15),
291
+ 2011: (AUG, 3),
292
+ 2012: (JUL, 23),
293
+ 2013: (JUL, 12),
294
+ 2014: (JUL, 31),
295
+ 2015: (JUL, 20),
296
+ 2016: (JUL, 8),
297
+ 2017: (JUL, 27),
298
+ 2018: (JUL, 16),
299
+ 2019: (AUG, 4),
300
+ 2020: (JUL, 24),
301
+ 2021: (JUL, 14),
302
+ 2022: (AUG, 1),
303
+ 2023: (JUL, 21),
304
+ 2024: (JUL, 10),
305
+ 2025: (JUL, 28),
306
+ 2026: (JUL, 18),
307
+ 2027: (AUG, 6),
308
+ 2028: (JUL, 25),
309
+ 2029: (JUL, 15),
310
+ 2030: (AUG, 3),
311
+ 2031: (JUL, 23),
312
+ 2032: (JUL, 11),
313
+ 2033: (JUL, 30),
314
+ 2034: (JUL, 19),
315
+ 2035: (JUL, 9),
316
+ 2036: (JUL, 27),
317
+ 2037: (JUL, 16),
318
+ 2038: (AUG, 4),
319
+ 2039: (JUL, 25),
320
+ 2040: (JUL, 13),
321
+ 2041: (AUG, 1),
322
+ 2042: (JUL, 21),
323
+ 2043: (JUL, 10),
324
+ 2044: (JUL, 28),
325
+ 2045: (JUL, 18),
326
+ 2046: (AUG, 6),
327
+ 2047: (JUL, 26),
328
+ 2048: (JUL, 15),
329
+ 2049: (AUG, 2),
330
+ 2050: (JUL, 23),
331
+ 2051: (JUL, 12),
332
+ 2052: (JUL, 29),
333
+ 2053: (JUL, 19),
334
+ 2054: (JUL, 9),
335
+ 2055: (JUL, 28),
336
+ 2056: (JUL, 16),
337
+ 2057: (AUG, 4),
338
+ 2058: (JUL, 24),
339
+ 2059: (JUL, 13),
340
+ 2060: (JUL, 31),
341
+ 2061: (JUL, 20),
342
+ 2062: (JUL, 10),
343
+ 2063: (JUL, 29),
344
+ 2064: (JUL, 18),
345
+ 2065: (AUG, 6),
346
+ 2066: (JUL, 26),
347
+ 2067: (JUL, 15),
348
+ 2068: (AUG, 2),
349
+ 2069: (JUL, 22),
350
+ 2070: (JUL, 11),
351
+ 2071: (JUL, 30),
352
+ 2072: (JUL, 19),
353
+ 2073: (AUG, 7),
354
+ 2074: (JUL, 28),
355
+ 2075: (JUL, 17),
356
+ 2076: (AUG, 4),
357
+ 2077: (JUL, 24),
358
+ 2078: (JUL, 13),
359
+ 2079: (AUG, 1),
360
+ 2080: (JUL, 20),
361
+ 2081: (JUL, 10),
362
+ 2082: (JUL, 29),
363
+ 2084: (AUG, 5),
364
+ 2085: (JUL, 25),
365
+ 2086: (JUL, 14),
366
+ 2087: (AUG, 2),
367
+ 2088: (JUL, 22),
368
+ 2089: (JUL, 11),
369
+ 2090: (JUL, 30),
370
+ 2091: (JUL, 20),
371
+ 2092: (AUG, 7),
372
+ 2093: (JUL, 27),
373
+ 2094: (JUL, 16),
374
+ 2095: (AUG, 4),
375
+ 2096: (JUL, 23),
376
+ 2097: (JUL, 13),
377
+ 2099: (JUL, 21),
378
+ }
379
+
380
+ BUDDHA_PARINIRVANA_DATES = {
381
+ 1970: (MAY, 21),
382
+ 1971: (JUN, 8),
383
+ 1972: (MAY, 28),
384
+ 1973: (JUN, 15),
385
+ 1974: (JUN, 4),
386
+ 1975: (MAY, 25),
387
+ 1976: (JUN, 12),
388
+ 1977: (JUN, 1),
389
+ 1978: (MAY, 22),
390
+ 1979: (JUN, 10),
391
+ 1980: (MAY, 29),
392
+ 1981: (MAY, 18),
393
+ 1982: (JUN, 6),
394
+ 1983: (MAY, 26),
395
+ 1984: (JUN, 13),
396
+ 1985: (JUN, 3),
397
+ 1986: (MAY, 23),
398
+ 1987: (JUN, 11),
399
+ 1988: (MAY, 31),
400
+ 1989: (MAY, 20),
401
+ 1990: (JUN, 8),
402
+ 1991: (MAY, 28),
403
+ 1992: (JUN, 15),
404
+ 1993: (JUN, 4),
405
+ 1994: (MAY, 25),
406
+ 1995: (JUN, 13),
407
+ 1996: (JUN, 1),
408
+ 1997: (MAY, 22),
409
+ 1998: (JUN, 10),
410
+ 1999: (MAY, 30),
411
+ 2000: (MAY, 18),
412
+ 2001: (JUN, 6),
413
+ 2002: (MAY, 26),
414
+ 2003: (JUN, 14),
415
+ 2004: (JUN, 3),
416
+ 2005: (MAY, 23),
417
+ 2006: (JUN, 11),
418
+ 2007: (MAY, 31),
419
+ 2008: (MAY, 19),
420
+ 2009: (JUN, 7),
421
+ 2010: (MAY, 27),
422
+ 2011: (JUN, 15),
423
+ 2012: (JUN, 4),
424
+ 2013: (MAY, 25),
425
+ 2014: (JUN, 13),
426
+ 2015: (JUN, 2),
427
+ 2016: (MAY, 21),
428
+ 2017: (JUN, 9),
429
+ 2018: (MAY, 29),
430
+ 2019: (JUN, 17),
431
+ 2020: (JUN, 5),
432
+ 2021: (MAY, 26),
433
+ 2022: (JUN, 14),
434
+ 2023: (JUN, 4),
435
+ 2024: (MAY, 23),
436
+ 2025: (JUN, 11),
437
+ 2026: (MAY, 31),
438
+ 2027: (MAY, 20),
439
+ 2028: (JUN, 7),
440
+ 2029: (MAY, 27),
441
+ 2030: (JUN, 15),
442
+ 2031: (JUN, 5),
443
+ 2032: (MAY, 25),
444
+ 2033: (JUN, 12),
445
+ 2034: (JUN, 2),
446
+ 2035: (MAY, 22),
447
+ 2036: (JUN, 8),
448
+ 2037: (MAY, 29),
449
+ 2038: (JUN, 17),
450
+ 2039: (JUN, 6),
451
+ 2040: (MAY, 26),
452
+ 2041: (JUN, 14),
453
+ 2042: (JUN, 3),
454
+ 2043: (MAY, 23),
455
+ 2044: (JUN, 10),
456
+ 2045: (MAY, 30),
457
+ 2046: (MAY, 20),
458
+ 2047: (JUN, 8),
459
+ 2048: (MAY, 27),
460
+ 2049: (JUN, 15),
461
+ 2050: (JUN, 5),
462
+ 2051: (MAY, 25),
463
+ 2052: (JUN, 12),
464
+ 2053: (JUN, 1),
465
+ 2054: (MAY, 21),
466
+ 2055: (JUN, 9),
467
+ 2056: (MAY, 29),
468
+ 2057: (JUN, 17),
469
+ 2058: (JUN, 6),
470
+ 2059: (MAY, 27),
471
+ 2060: (JUN, 14),
472
+ 2061: (JUN, 3),
473
+ 2062: (MAY, 23),
474
+ 2063: (JUN, 11),
475
+ 2064: (MAY, 30),
476
+ 2065: (MAY, 20),
477
+ 2066: (JUN, 8),
478
+ 2067: (MAY, 28),
479
+ 2068: (JUN, 15),
480
+ 2069: (JUN, 4),
481
+ 2070: (MAY, 24),
482
+ 2071: (JUN, 12),
483
+ 2072: (MAY, 31),
484
+ 2073: (MAY, 21),
485
+ 2074: (JUN, 9),
486
+ 2075: (MAY, 30),
487
+ 2076: (JUN, 17),
488
+ 2077: (JUN, 6),
489
+ 2078: (MAY, 26),
490
+ 2079: (JUN, 14),
491
+ 2080: (JUN, 2),
492
+ 2081: (MAY, 22),
493
+ 2082: (JUN, 10),
494
+ 2083: (MAY, 31),
495
+ 2084: (JUN, 18),
496
+ 2085: (JUN, 8),
497
+ 2086: (MAY, 28),
498
+ 2087: (JUN, 16),
499
+ 2088: (JUN, 4),
500
+ 2089: (MAY, 24),
501
+ 2090: (JUN, 12),
502
+ 2091: (JUN, 1),
503
+ 2092: (MAY, 21),
504
+ 2093: (JUN, 9),
505
+ 2094: (MAY, 30),
506
+ 2095: (JUN, 17),
507
+ 2096: (JUN, 5),
508
+ 2097: (MAY, 26),
509
+ 2098: (JUN, 13),
510
+ 2099: (JUN, 3),
511
+ }
512
+
513
+ DAY_OF_OFFERING_DATES = {
514
+ 1971: (JAN, 27),
515
+ 1972: (JAN, 17),
516
+ 1973: (JAN, 5),
517
+ 1974: (JAN, 24),
518
+ 1975: (JAN, 13),
519
+ 1976: (FEB, 1),
520
+ 1977: (JAN, 20),
521
+ 1979: (JAN, 29),
522
+ 1980: (JAN, 18),
523
+ 1981: (JAN, 7),
524
+ 1982: (JAN, 26),
525
+ 1983: (JAN, 15),
526
+ 1984: (JAN, 4),
527
+ 1985: (JAN, 21),
528
+ 1986: (JAN, 11),
529
+ 1987: (JAN, 30),
530
+ 1988: (JAN, 20),
531
+ 1989: (JAN, 8),
532
+ 1990: (JAN, 27),
533
+ 1991: (JAN, 16),
534
+ 1992: (JAN, 5),
535
+ 1993: (JAN, 23),
536
+ 1994: (JAN, 12),
537
+ 1995: (JAN, 31),
538
+ 1996: (JAN, 21),
539
+ 1997: (JAN, 10),
540
+ 1998: (JAN, 29),
541
+ 1999: (JAN, 18),
542
+ 2000: (JAN, 7),
543
+ 2001: (JAN, 25),
544
+ 2002: (JAN, 14),
545
+ 2003: (JAN, 3),
546
+ 2004: (JAN, 22),
547
+ 2005: (JAN, 11),
548
+ 2006: (JAN, 30),
549
+ 2007: (JAN, 20),
550
+ 2008: (JAN, 9),
551
+ 2009: (JAN, 27),
552
+ 2010: (JAN, 16),
553
+ 2011: (JAN, 5),
554
+ 2012: (JAN, 24),
555
+ 2013: (JAN, 12),
556
+ 2014: (JAN, 31),
557
+ 2015: (JAN, 21),
558
+ 2016: (JAN, 10),
559
+ 2017: (JAN, 28),
560
+ 2018: (JAN, 17),
561
+ 2019: (JAN, 6),
562
+ 2020: (JAN, 25),
563
+ 2021: (JAN, 14),
564
+ 2022: (JAN, 3),
565
+ 2023: (JAN, 22),
566
+ 2024: (JAN, 12),
567
+ 2025: (JAN, 30),
568
+ 2026: (JAN, 19),
569
+ 2027: (JAN, 8),
570
+ 2028: (JAN, 27),
571
+ 2029: (JAN, 15),
572
+ 2030: (JAN, 4),
573
+ 2032: (JAN, 13),
574
+ 2033: (JAN, 31),
575
+ 2034: (JAN, 21),
576
+ 2035: (JAN, 10),
577
+ 2036: (JAN, 29),
578
+ 2037: (JAN, 17),
579
+ 2038: (JAN, 6),
580
+ 2039: (JAN, 25),
581
+ 2041: (FEB, 2),
582
+ 2042: (JAN, 22),
583
+ 2043: (JAN, 12),
584
+ 2044: (JAN, 31),
585
+ 2045: (JAN, 19),
586
+ 2046: (JAN, 8),
587
+ 2047: (JAN, 26),
588
+ 2048: (JAN, 16),
589
+ 2049: (JAN, 4),
590
+ 2050: (JAN, 24),
591
+ 2051: (JAN, 13),
592
+ 2052: (FEB, 1),
593
+ 2053: (JAN, 20),
594
+ 2054: (JAN, 9),
595
+ 2055: (JAN, 28),
596
+ 2056: (JAN, 17),
597
+ 2057: (JAN, 6),
598
+ 2058: (JAN, 25),
599
+ 2060: (FEB, 3),
600
+ 2061: (JAN, 22),
601
+ 2062: (JAN, 11),
602
+ 2063: (JAN, 30),
603
+ 2064: (JAN, 19),
604
+ 2065: (JAN, 7),
605
+ 2066: (JAN, 26),
606
+ 2067: (JAN, 16),
607
+ 2070: (JAN, 13),
608
+ 2071: (FEB, 1),
609
+ 2072: (JAN, 21),
610
+ 2073: (JAN, 9),
611
+ 2074: (JAN, 28),
612
+ 2075: (JAN, 17),
613
+ 2076: (JAN, 7),
614
+ 2077: (JAN, 25),
615
+ 2078: (JAN, 14),
616
+ 2079: (FEB, 2),
617
+ 2080: (JAN, 22),
618
+ 2081: (JAN, 10),
619
+ 2082: (JAN, 29),
620
+ 2084: (JAN, 8),
621
+ 2085: (JAN, 26),
622
+ 2086: (JAN, 16),
623
+ 2087: (JAN, 5),
624
+ 2088: (JAN, 24),
625
+ 2089: (JAN, 12),
626
+ 2090: (JAN, 31),
627
+ 2091: (JAN, 20),
628
+ 2092: (JAN, 9),
629
+ 2094: (JAN, 17),
630
+ 2095: (JAN, 7),
631
+ 2096: (JAN, 26),
632
+ 2097: (JAN, 14),
633
+ 2098: (FEB, 2),
634
+ 2099: (JAN, 22),
635
+ }
636
+
637
+ DEATH_OF_ZHABDRUNG_DATES = {
638
+ 1970: (APR, 16),
639
+ 1971: (MAY, 5),
640
+ 1972: (APR, 23),
641
+ 1973: (APR, 12),
642
+ 1974: (MAY, 1),
643
+ 1975: (APR, 21),
644
+ 1976: (MAY, 9),
645
+ 1977: (APR, 28),
646
+ 1978: (APR, 18),
647
+ 1979: (MAY, 6),
648
+ 1980: (APR, 24),
649
+ 1981: (APR, 14),
650
+ 1983: (APR, 22),
651
+ 1984: (MAY, 10),
652
+ 1985: (APR, 30),
653
+ 1986: (APR, 19),
654
+ 1987: (MAY, 8),
655
+ 1988: (APR, 26),
656
+ 1989: (APR, 15),
657
+ 1990: (MAY, 4),
658
+ 1991: (APR, 23),
659
+ 1993: (MAY, 1),
660
+ 1994: (APR, 21),
661
+ 1995: (MAY, 10),
662
+ 1996: (APR, 28),
663
+ 1997: (APR, 17),
664
+ 1998: (MAY, 6),
665
+ 1999: (APR, 25),
666
+ 2000: (APR, 13),
667
+ 2002: (APR, 22),
668
+ 2003: (MAY, 11),
669
+ 2004: (APR, 30),
670
+ 2005: (APR, 19),
671
+ 2006: (MAY, 7),
672
+ 2007: (APR, 26),
673
+ 2008: (APR, 15),
674
+ 2009: (MAY, 4),
675
+ 2012: (MAY, 1),
676
+ 2013: (APR, 20),
677
+ 2014: (MAY, 9),
678
+ 2015: (APR, 28),
679
+ 2016: (APR, 16),
680
+ 2017: (MAY, 5),
681
+ 2018: (APR, 25),
682
+ 2019: (APR, 14),
683
+ 2021: (APR, 22),
684
+ 2022: (MAY, 11),
685
+ 2023: (APR, 30),
686
+ 2024: (APR, 18),
687
+ 2025: (MAY, 7),
688
+ 2026: (APR, 26),
689
+ 2027: (APR, 16),
690
+ 2028: (MAY, 4),
691
+ 2029: (APR, 23),
692
+ 2030: (MAY, 12),
693
+ 2031: (MAY, 2),
694
+ 2032: (APR, 20),
695
+ 2033: (MAY, 8),
696
+ 2034: (APR, 28),
697
+ 2035: (APR, 17),
698
+ 2036: (MAY, 5),
699
+ 2037: (APR, 25),
700
+ 2038: (APR, 14),
701
+ 2039: (MAY, 3),
702
+ 2040: (APR, 21),
703
+ 2041: (MAY, 10),
704
+ 2042: (APR, 29),
705
+ 2043: (APR, 19),
706
+ 2044: (MAY, 6),
707
+ 2045: (APR, 26),
708
+ 2046: (APR, 16),
709
+ 2047: (MAY, 5),
710
+ 2048: (APR, 23),
711
+ 2049: (MAY, 12),
712
+ 2050: (MAY, 1),
713
+ 2051: (APR, 20),
714
+ 2052: (MAY, 8),
715
+ 2053: (APR, 27),
716
+ 2054: (APR, 17),
717
+ 2055: (MAY, 6),
718
+ 2056: (APR, 25),
719
+ 2057: (MAY, 14),
720
+ 2058: (MAY, 3),
721
+ 2059: (APR, 22),
722
+ 2060: (MAY, 10),
723
+ 2061: (APR, 29),
724
+ 2062: (APR, 18),
725
+ 2063: (MAY, 7),
726
+ 2064: (APR, 26),
727
+ 2065: (APR, 16),
728
+ 2066: (MAY, 5),
729
+ 2067: (APR, 24),
730
+ 2068: (MAY, 11),
731
+ 2069: (APR, 30),
732
+ 2070: (APR, 20),
733
+ 2071: (MAY, 9),
734
+ 2072: (APR, 27),
735
+ 2073: (APR, 17),
736
+ 2074: (MAY, 6),
737
+ 2075: (APR, 25),
738
+ 2076: (MAY, 13),
739
+ 2077: (MAY, 2),
740
+ 2078: (APR, 21),
741
+ 2079: (MAY, 10),
742
+ 2080: (APR, 29),
743
+ 2081: (APR, 18),
744
+ 2082: (MAY, 7),
745
+ 2083: (APR, 27),
746
+ 2084: (APR, 15),
747
+ 2085: (MAY, 4),
748
+ 2086: (APR, 23),
749
+ 2087: (MAY, 12),
750
+ 2088: (APR, 30),
751
+ 2089: (APR, 20),
752
+ 2090: (MAY, 9),
753
+ 2091: (APR, 28),
754
+ 2092: (APR, 17),
755
+ 2093: (MAY, 6),
756
+ 2094: (APR, 25),
757
+ 2095: (MAY, 13),
758
+ 2096: (MAY, 2),
759
+ 2097: (APR, 21),
760
+ 2098: (MAY, 10),
761
+ 2099: (APR, 30),
762
+ }
763
+
764
+ DESCENDING_DAY_OF_LORD_BUDDHA_DATES = {
765
+ 1970: (NOV, 20),
766
+ 1971: (NOV, 9),
767
+ 1972: (OCT, 28),
768
+ 1973: (NOV, 16),
769
+ 1974: (NOV, 6),
770
+ 1975: (OCT, 27),
771
+ 1976: (NOV, 14),
772
+ 1977: (NOV, 3),
773
+ 1978: (NOV, 22),
774
+ 1979: (NOV, 11),
775
+ 1980: (OCT, 30),
776
+ 1981: (NOV, 18),
777
+ 1982: (NOV, 7),
778
+ 1983: (OCT, 28),
779
+ 1984: (NOV, 15),
780
+ 1985: (NOV, 5),
781
+ 1986: (OCT, 25),
782
+ 1987: (NOV, 12),
783
+ 1988: (OCT, 31),
784
+ 1989: (NOV, 19),
785
+ 1990: (NOV, 9),
786
+ 1991: (OCT, 29),
787
+ 1993: (NOV, 6),
788
+ 1994: (OCT, 26),
789
+ 1995: (NOV, 14),
790
+ 1996: (NOV, 2),
791
+ 1997: (NOV, 21),
792
+ 1998: (NOV, 10),
793
+ 1999: (OCT, 31),
794
+ 2000: (NOV, 18),
795
+ 2001: (NOV, 7),
796
+ 2002: (OCT, 28),
797
+ 2003: (NOV, 16),
798
+ 2004: (NOV, 4),
799
+ 2005: (OCT, 24),
800
+ 2006: (NOV, 12),
801
+ 2007: (NOV, 1),
802
+ 2008: (NOV, 19),
803
+ 2009: (NOV, 9),
804
+ 2010: (OCT, 29),
805
+ 2011: (NOV, 17),
806
+ 2012: (NOV, 6),
807
+ 2013: (OCT, 26),
808
+ 2014: (NOV, 13),
809
+ 2015: (NOV, 3),
810
+ 2016: (NOV, 20),
811
+ 2017: (NOV, 10),
812
+ 2018: (OCT, 31),
813
+ 2019: (NOV, 19),
814
+ 2020: (NOV, 7),
815
+ 2021: (OCT, 27),
816
+ 2022: (NOV, 15),
817
+ 2023: (NOV, 4),
818
+ 2024: (NOV, 22),
819
+ 2025: (NOV, 11),
820
+ 2026: (NOV, 1),
821
+ 2027: (NOV, 20),
822
+ 2028: (NOV, 9),
823
+ 2029: (OCT, 29),
824
+ 2030: (NOV, 17),
825
+ 2031: (NOV, 6),
826
+ 2032: (OCT, 25),
827
+ 2033: (NOV, 13),
828
+ 2034: (NOV, 2),
829
+ 2035: (NOV, 21),
830
+ 2036: (NOV, 10),
831
+ 2037: (OCT, 31),
832
+ 2038: (NOV, 19),
833
+ 2039: (NOV, 8),
834
+ 2040: (OCT, 27),
835
+ 2041: (NOV, 15),
836
+ 2042: (NOV, 4),
837
+ 2043: (NOV, 23),
838
+ 2044: (NOV, 11),
839
+ 2045: (NOV, 1),
840
+ 2046: (NOV, 20),
841
+ 2047: (NOV, 9),
842
+ 2048: (OCT, 29),
843
+ 2049: (NOV, 16),
844
+ 2050: (NOV, 5),
845
+ 2051: (OCT, 26),
846
+ 2052: (NOV, 13),
847
+ 2053: (NOV, 2),
848
+ 2054: (NOV, 21),
849
+ 2055: (NOV, 11),
850
+ 2056: (OCT, 30),
851
+ 2057: (NOV, 18),
852
+ 2058: (NOV, 7),
853
+ 2059: (OCT, 27),
854
+ 2060: (NOV, 14),
855
+ 2061: (NOV, 4),
856
+ 2062: (NOV, 23),
857
+ 2063: (NOV, 12),
858
+ 2064: (NOV, 1),
859
+ 2065: (NOV, 20),
860
+ 2066: (NOV, 9),
861
+ 2067: (OCT, 29),
862
+ 2068: (NOV, 16),
863
+ 2069: (NOV, 5),
864
+ 2070: (OCT, 26),
865
+ 2071: (NOV, 14),
866
+ 2072: (NOV, 2),
867
+ 2073: (NOV, 21),
868
+ 2074: (NOV, 11),
869
+ 2075: (OCT, 31),
870
+ 2076: (NOV, 17),
871
+ 2077: (NOV, 7),
872
+ 2078: (OCT, 27),
873
+ 2079: (NOV, 15),
874
+ 2080: (NOV, 4),
875
+ 2081: (NOV, 23),
876
+ 2082: (NOV, 12),
877
+ 2083: (NOV, 1),
878
+ 2084: (NOV, 19),
879
+ 2085: (NOV, 8),
880
+ 2086: (OCT, 28),
881
+ 2087: (NOV, 16),
882
+ 2088: (NOV, 5),
883
+ 2089: (NOV, 24),
884
+ 2090: (NOV, 14),
885
+ 2091: (NOV, 3),
886
+ 2092: (NOV, 21),
887
+ 2093: (NOV, 10),
888
+ 2094: (OCT, 30),
889
+ 2095: (NOV, 18),
890
+ 2096: (NOV, 6),
891
+ 2097: (OCT, 27),
892
+ 2098: (NOV, 15),
893
+ 2099: (NOV, 5),
894
+ }
895
+
896
+ LOSAR_DATES = {
897
+ 1970: (FEB, 7),
898
+ 1971: (FEB, 26),
899
+ 1972: (FEB, 15),
900
+ 1973: (FEB, 4),
901
+ 1974: (FEB, 23),
902
+ 1975: (FEB, 12),
903
+ 1976: (MAR, 1),
904
+ 1977: (FEB, 19),
905
+ 1978: (FEB, 8),
906
+ 1979: (FEB, 27),
907
+ 1980: (FEB, 17),
908
+ 1981: (FEB, 5),
909
+ 1982: (FEB, 24),
910
+ 1983: (FEB, 13),
911
+ 1984: (FEB, 2),
912
+ 1985: (FEB, 20),
913
+ 1986: (FEB, 9),
914
+ 1987: (FEB, 28),
915
+ 1988: (FEB, 18),
916
+ 1989: (FEB, 7),
917
+ 1990: (FEB, 26),
918
+ 1991: (FEB, 15),
919
+ 1992: (FEB, 4),
920
+ 1993: (FEB, 22),
921
+ 1994: (FEB, 11),
922
+ 1995: (MAR, 2),
923
+ 1996: (FEB, 19),
924
+ 1997: (FEB, 8),
925
+ 1998: (FEB, 27),
926
+ 1999: (FEB, 17),
927
+ 2000: (FEB, 6),
928
+ 2001: (FEB, 24),
929
+ 2002: (FEB, 13),
930
+ 2003: (MAR, 4),
931
+ 2004: (FEB, 21),
932
+ 2005: (FEB, 9),
933
+ 2006: (FEB, 28),
934
+ 2007: (FEB, 18),
935
+ 2008: (FEB, 8),
936
+ 2009: (FEB, 25),
937
+ 2010: (FEB, 14),
938
+ 2011: (FEB, 3),
939
+ 2012: (FEB, 22),
940
+ 2013: (FEB, 11),
941
+ 2014: (MAR, 2),
942
+ 2015: (FEB, 19),
943
+ 2016: (FEB, 9),
944
+ 2017: (FEB, 27),
945
+ 2018: (FEB, 16),
946
+ 2019: (FEB, 5),
947
+ 2020: (FEB, 24),
948
+ 2021: (FEB, 12),
949
+ 2022: (MAR, 3),
950
+ 2023: (FEB, 21),
951
+ 2024: (FEB, 10),
952
+ 2025: (FEB, 28),
953
+ 2026: (FEB, 18),
954
+ 2027: (FEB, 7),
955
+ 2028: (FEB, 26),
956
+ 2029: (FEB, 14),
957
+ 2030: (FEB, 3),
958
+ 2031: (FEB, 22),
959
+ 2032: (FEB, 12),
960
+ 2033: (MAR, 2),
961
+ 2034: (FEB, 19),
962
+ 2035: (FEB, 9),
963
+ 2036: (FEB, 28),
964
+ 2037: (FEB, 16),
965
+ 2038: (FEB, 5),
966
+ 2039: (FEB, 24),
967
+ 2040: (FEB, 13),
968
+ 2041: (MAR, 3),
969
+ 2042: (FEB, 21),
970
+ 2043: (FEB, 10),
971
+ 2044: (FEB, 29),
972
+ 2045: (FEB, 17),
973
+ 2046: (FEB, 6),
974
+ 2047: (FEB, 25),
975
+ 2048: (FEB, 14),
976
+ 2049: (FEB, 3),
977
+ 2050: (FEB, 22),
978
+ 2051: (FEB, 12),
979
+ 2052: (MAR, 2),
980
+ 2053: (FEB, 19),
981
+ 2054: (FEB, 8),
982
+ 2055: (FEB, 27),
983
+ 2056: (FEB, 16),
984
+ 2057: (FEB, 4),
985
+ 2058: (FEB, 23),
986
+ 2059: (FEB, 13),
987
+ 2060: (MAR, 3),
988
+ 2061: (FEB, 21),
989
+ 2062: (FEB, 10),
990
+ 2063: (MAR, 1),
991
+ 2064: (FEB, 18),
992
+ 2065: (FEB, 6),
993
+ 2066: (FEB, 25),
994
+ 2067: (FEB, 14),
995
+ 2068: (MAR, 4),
996
+ 2069: (FEB, 22),
997
+ 2070: (FEB, 12),
998
+ 2071: (MAR, 2),
999
+ 2072: (FEB, 19),
1000
+ 2073: (FEB, 7),
1001
+ 2074: (FEB, 26),
1002
+ 2075: (FEB, 16),
1003
+ 2076: (FEB, 5),
1004
+ 2077: (FEB, 23),
1005
+ 2078: (FEB, 13),
1006
+ 2079: (MAR, 4),
1007
+ 2080: (FEB, 21),
1008
+ 2081: (FEB, 9),
1009
+ 2082: (FEB, 28),
1010
+ 2083: (FEB, 17),
1011
+ 2084: (FEB, 7),
1012
+ 2085: (FEB, 25),
1013
+ 2086: (FEB, 14),
1014
+ 2087: (MAR, 5),
1015
+ 2088: (FEB, 23),
1016
+ 2089: (FEB, 11),
1017
+ 2090: (MAR, 2),
1018
+ 2091: (FEB, 19),
1019
+ 2092: (FEB, 8),
1020
+ 2093: (FEB, 26),
1021
+ 2094: (FEB, 16),
1022
+ 2095: (FEB, 5),
1023
+ 2096: (FEB, 24),
1024
+ 2097: (FEB, 13),
1025
+ 2098: (MAR, 4),
1026
+ 2099: (FEB, 21),
1027
+ }
1028
+
1029
+ THIMPHU_DRUBCHEN_DATES = {
1030
+ 1970: (OCT, 6),
1031
+ 1971: (SEP, 25),
1032
+ 1972: (SEP, 13),
1033
+ 1973: (OCT, 2),
1034
+ 1974: (SEP, 21),
1035
+ 1975: (SEP, 11),
1036
+ 1976: (SEP, 29),
1037
+ 1978: (SEP, 8),
1038
+ 1979: (SEP, 27),
1039
+ 1980: (SEP, 15),
1040
+ 1981: (OCT, 4),
1041
+ 1982: (SEP, 23),
1042
+ 1983: (SEP, 12),
1043
+ 1984: (SEP, 30),
1044
+ 1985: (SEP, 20),
1045
+ 1987: (SEP, 28),
1046
+ 1988: (SEP, 17),
1047
+ 1989: (OCT, 6),
1048
+ 1990: (SEP, 25),
1049
+ 1991: (SEP, 14),
1050
+ 1992: (OCT, 2),
1051
+ 1993: (SEP, 21),
1052
+ 1994: (SEP, 11),
1053
+ 1995: (SEP, 30),
1054
+ 1996: (SEP, 18),
1055
+ 1997: (OCT, 7),
1056
+ 1998: (SEP, 26),
1057
+ 1999: (SEP, 16),
1058
+ 2000: (OCT, 3),
1059
+ 2001: (SEP, 23),
1060
+ 2002: (SEP, 12),
1061
+ 2003: (OCT, 1),
1062
+ 2004: (SEP, 20),
1063
+ 2005: (SEP, 9),
1064
+ 2006: (SEP, 28),
1065
+ 2007: (SEP, 17),
1066
+ 2008: (OCT, 5),
1067
+ 2009: (SEP, 24),
1068
+ 2010: (SEP, 13),
1069
+ 2011: (OCT, 2),
1070
+ 2012: (SEP, 21),
1071
+ 2013: (SEP, 11),
1072
+ 2014: (SEP, 29),
1073
+ 2015: (SEP, 19),
1074
+ 2016: (OCT, 7),
1075
+ 2017: (SEP, 26),
1076
+ 2018: (SEP, 15),
1077
+ 2019: (OCT, 4),
1078
+ 2020: (SEP, 22),
1079
+ 2021: (SEP, 11),
1080
+ 2022: (SEP, 30),
1081
+ 2023: (SEP, 20),
1082
+ 2024: (SEP, 9),
1083
+ 2025: (SEP, 28),
1084
+ 2026: (SEP, 17),
1085
+ 2027: (OCT, 5),
1086
+ 2028: (SEP, 24),
1087
+ 2029: (SEP, 13),
1088
+ 2030: (OCT, 2),
1089
+ 2031: (SEP, 22),
1090
+ 2032: (SEP, 11),
1091
+ 2033: (SEP, 29),
1092
+ 2034: (SEP, 18),
1093
+ 2035: (OCT, 7),
1094
+ 2036: (SEP, 25),
1095
+ 2037: (SEP, 15),
1096
+ 2038: (OCT, 4),
1097
+ 2039: (SEP, 23),
1098
+ 2040: (SEP, 12),
1099
+ 2041: (OCT, 1),
1100
+ 2042: (SEP, 20),
1101
+ 2043: (SEP, 9),
1102
+ 2044: (SEP, 27),
1103
+ 2045: (SEP, 16),
1104
+ 2046: (OCT, 5),
1105
+ 2047: (SEP, 25),
1106
+ 2048: (SEP, 13),
1107
+ 2049: (OCT, 2),
1108
+ 2050: (SEP, 22),
1109
+ 2051: (SEP, 11),
1110
+ 2052: (SEP, 29),
1111
+ 2053: (SEP, 18),
1112
+ 2054: (OCT, 7),
1113
+ 2055: (SEP, 26),
1114
+ 2056: (SEP, 15),
1115
+ 2057: (OCT, 4),
1116
+ 2058: (SEP, 23),
1117
+ 2059: (SEP, 13),
1118
+ 2060: (SEP, 30),
1119
+ 2061: (SEP, 19),
1120
+ 2062: (OCT, 8),
1121
+ 2063: (SEP, 27),
1122
+ 2064: (SEP, 16),
1123
+ 2065: (OCT, 5),
1124
+ 2066: (SEP, 25),
1125
+ 2067: (SEP, 14),
1126
+ 2068: (OCT, 2),
1127
+ 2069: (SEP, 21),
1128
+ 2070: (SEP, 10),
1129
+ 2071: (SEP, 29),
1130
+ 2072: (SEP, 17),
1131
+ 2073: (OCT, 6),
1132
+ 2074: (SEP, 26),
1133
+ 2075: (SEP, 16),
1134
+ 2076: (OCT, 4),
1135
+ 2077: (SEP, 23),
1136
+ 2078: (SEP, 12),
1137
+ 2079: (OCT, 1),
1138
+ 2080: (SEP, 19),
1139
+ 2081: (OCT, 8),
1140
+ 2082: (SEP, 27),
1141
+ 2083: (SEP, 17),
1142
+ 2084: (OCT, 5),
1143
+ 2085: (SEP, 25),
1144
+ 2086: (SEP, 14),
1145
+ 2087: (OCT, 3),
1146
+ 2088: (SEP, 21),
1147
+ 2089: (SEP, 10),
1148
+ 2090: (SEP, 29),
1149
+ 2091: (SEP, 18),
1150
+ 2092: (OCT, 6),
1151
+ 2093: (SEP, 26),
1152
+ 2094: (SEP, 16),
1153
+ 2095: (OCT, 4),
1154
+ 2096: (SEP, 22),
1155
+ 2097: (SEP, 11),
1156
+ 2098: (SEP, 30),
1157
+ 2099: (SEP, 20),
1158
+ }
1159
+
1160
+ THIMPHU_TSHECHU_DATES = {
1161
+ 1970: (OCT, 10),
1162
+ 1971: (SEP, 29),
1163
+ 1972: (SEP, 18),
1164
+ 1973: (OCT, 6),
1165
+ 1974: (SEP, 25),
1166
+ 1975: (SEP, 15),
1167
+ 1977: (SEP, 22),
1168
+ 1978: (SEP, 12),
1169
+ 1979: (OCT, 1),
1170
+ 1980: (SEP, 19),
1171
+ 1981: (OCT, 8),
1172
+ 1982: (SEP, 27),
1173
+ 1983: (SEP, 16),
1174
+ 1984: (OCT, 4),
1175
+ 1985: (SEP, 23),
1176
+ 1986: (SEP, 13),
1177
+ 1987: (OCT, 2),
1178
+ 1988: (SEP, 21),
1179
+ 1989: (OCT, 10),
1180
+ 1990: (SEP, 29),
1181
+ 1991: (SEP, 18),
1182
+ 1992: (OCT, 6),
1183
+ 1993: (SEP, 25),
1184
+ 1994: (SEP, 14),
1185
+ 1995: (OCT, 3),
1186
+ 1996: (SEP, 22),
1187
+ 1997: (OCT, 11),
1188
+ 1998: (OCT, 1),
1189
+ 1999: (SEP, 20),
1190
+ 2000: (OCT, 8),
1191
+ 2001: (SEP, 27),
1192
+ 2002: (SEP, 16),
1193
+ 2003: (OCT, 5),
1194
+ 2004: (SEP, 23),
1195
+ 2005: (SEP, 13),
1196
+ 2006: (OCT, 2),
1197
+ 2007: (SEP, 22),
1198
+ 2008: (OCT, 9),
1199
+ 2009: (SEP, 28),
1200
+ 2010: (SEP, 17),
1201
+ 2011: (OCT, 6),
1202
+ 2012: (SEP, 25),
1203
+ 2013: (SEP, 14),
1204
+ 2014: (OCT, 3),
1205
+ 2015: (SEP, 23),
1206
+ 2016: (OCT, 11),
1207
+ 2017: (SEP, 30),
1208
+ 2018: (SEP, 19),
1209
+ 2019: (OCT, 8),
1210
+ 2020: (SEP, 26),
1211
+ 2021: (SEP, 15),
1212
+ 2022: (OCT, 4),
1213
+ 2023: (SEP, 24),
1214
+ 2024: (SEP, 13),
1215
+ 2025: (OCT, 2),
1216
+ 2026: (SEP, 21),
1217
+ 2027: (OCT, 10),
1218
+ 2028: (SEP, 28),
1219
+ 2029: (SEP, 17),
1220
+ 2030: (OCT, 6),
1221
+ 2031: (SEP, 26),
1222
+ 2032: (SEP, 14),
1223
+ 2033: (OCT, 3),
1224
+ 2034: (SEP, 23),
1225
+ 2035: (OCT, 11),
1226
+ 2036: (SEP, 29),
1227
+ 2037: (SEP, 19),
1228
+ 2038: (OCT, 7),
1229
+ 2039: (SEP, 27),
1230
+ 2040: (SEP, 16),
1231
+ 2041: (OCT, 5),
1232
+ 2042: (SEP, 24),
1233
+ 2043: (SEP, 13),
1234
+ 2044: (OCT, 1),
1235
+ 2045: (SEP, 20),
1236
+ 2046: (OCT, 9),
1237
+ 2047: (SEP, 28),
1238
+ 2048: (SEP, 17),
1239
+ 2049: (OCT, 6),
1240
+ 2050: (SEP, 26),
1241
+ 2051: (SEP, 15),
1242
+ 2052: (OCT, 3),
1243
+ 2053: (SEP, 22),
1244
+ 2054: (OCT, 11),
1245
+ 2055: (SEP, 30),
1246
+ 2056: (SEP, 18),
1247
+ 2057: (OCT, 7),
1248
+ 2058: (SEP, 27),
1249
+ 2059: (SEP, 17),
1250
+ 2060: (OCT, 5),
1251
+ 2061: (SEP, 24),
1252
+ 2062: (OCT, 12),
1253
+ 2063: (OCT, 2),
1254
+ 2064: (SEP, 20),
1255
+ 2065: (OCT, 9),
1256
+ 2066: (SEP, 28),
1257
+ 2067: (SEP, 18),
1258
+ 2068: (OCT, 6),
1259
+ 2069: (SEP, 25),
1260
+ 2070: (SEP, 15),
1261
+ 2071: (OCT, 3),
1262
+ 2072: (SEP, 21),
1263
+ 2073: (OCT, 10),
1264
+ 2074: (SEP, 30),
1265
+ 2075: (SEP, 19),
1266
+ 2076: (OCT, 7),
1267
+ 2077: (SEP, 27),
1268
+ 2078: (SEP, 16),
1269
+ 2079: (OCT, 5),
1270
+ 2080: (SEP, 23),
1271
+ 2081: (OCT, 12),
1272
+ 2082: (OCT, 1),
1273
+ 2083: (SEP, 21),
1274
+ 2084: (OCT, 9),
1275
+ 2085: (SEP, 28),
1276
+ 2086: (SEP, 18),
1277
+ 2087: (OCT, 7),
1278
+ 2088: (SEP, 25),
1279
+ 2089: (SEP, 14),
1280
+ 2090: (OCT, 3),
1281
+ 2091: (SEP, 22),
1282
+ 2092: (OCT, 10),
1283
+ 2093: (SEP, 30),
1284
+ 2094: (SEP, 19),
1285
+ 2095: (OCT, 8),
1286
+ 2096: (SEP, 27),
1287
+ 2097: (SEP, 16),
1288
+ 2098: (OCT, 4),
1289
+ 2099: (SEP, 24),
1290
+ }
1291
+
1292
+ WINTER_SOLSTICE_DATES = {
1293
+ 1970: (JAN, 2),
1294
+ 1971: (JAN, 2),
1295
+ 1972: (JAN, 2),
1296
+ 1973: (JAN, 2),
1297
+ 1974: (JAN, 2),
1298
+ 1975: (JAN, 2),
1299
+ 1976: (JAN, 2),
1300
+ 1977: (JAN, 2),
1301
+ 1978: (JAN, 2),
1302
+ 1979: (JAN, 2),
1303
+ 1980: (JAN, 2),
1304
+ 1981: (JAN, 2),
1305
+ 1982: (JAN, 2),
1306
+ 1983: (JAN, 2),
1307
+ 1984: (JAN, 2),
1308
+ 1985: (JAN, 2),
1309
+ 1986: (JAN, 2),
1310
+ 1987: (JAN, 2),
1311
+ 1988: (JAN, 2),
1312
+ 1989: (JAN, 2),
1313
+ 1990: (JAN, 2),
1314
+ 1991: (JAN, 2),
1315
+ 1992: (JAN, 2),
1316
+ 1993: (JAN, 2),
1317
+ 1994: (JAN, 2),
1318
+ 1995: (JAN, 2),
1319
+ 1996: (JAN, 2),
1320
+ 1997: (JAN, 2),
1321
+ 1998: (JAN, 2),
1322
+ 1999: (JAN, 2),
1323
+ 2000: (JAN, 2),
1324
+ 2001: (JAN, 2),
1325
+ 2002: (JAN, 2),
1326
+ 2003: (JAN, 2),
1327
+ 2004: (JAN, 2),
1328
+ 2005: (JAN, 2),
1329
+ 2006: (JAN, 2),
1330
+ 2007: (JAN, 2),
1331
+ 2008: (JAN, 2),
1332
+ 2009: (JAN, 2),
1333
+ 2010: (JAN, 2),
1334
+ 2011: (JAN, 2),
1335
+ 2012: (JAN, 2),
1336
+ 2013: (JAN, 2),
1337
+ 2014: (JAN, 2),
1338
+ 2015: (JAN, 2),
1339
+ 2016: (JAN, 2),
1340
+ 2017: (JAN, 2),
1341
+ 2018: (JAN, 2),
1342
+ 2019: (JAN, 3),
1343
+ 2020: (JAN, 2),
1344
+ 2021: (JAN, 2),
1345
+ 2022: (JAN, 1),
1346
+ 2023: (JAN, 2),
1347
+ 2024: (JAN, 2),
1348
+ 2025: (JAN, 2),
1349
+ 2026: (JAN, 2),
1350
+ 2027: (JAN, 2),
1351
+ 2028: (JAN, 2),
1352
+ 2029: (JAN, 2),
1353
+ 2030: (JAN, 2),
1354
+ 2031: (JAN, 2),
1355
+ 2032: (JAN, 2),
1356
+ 2033: (JAN, 2),
1357
+ 2034: (JAN, 2),
1358
+ 2035: (JAN, 2),
1359
+ 2036: (JAN, 2),
1360
+ 2037: (JAN, 2),
1361
+ 2038: (JAN, 2),
1362
+ 2039: (JAN, 2),
1363
+ 2040: (JAN, 2),
1364
+ 2041: (JAN, 2),
1365
+ 2042: (JAN, 2),
1366
+ 2043: (JAN, 2),
1367
+ 2044: (JAN, 2),
1368
+ 2045: (JAN, 2),
1369
+ 2046: (JAN, 2),
1370
+ 2047: (JAN, 2),
1371
+ 2048: (JAN, 2),
1372
+ 2049: (JAN, 2),
1373
+ 2050: (JAN, 2),
1374
+ 2051: (JAN, 2),
1375
+ 2052: (JAN, 2),
1376
+ 2053: (JAN, 2),
1377
+ 2054: (JAN, 2),
1378
+ 2055: (JAN, 2),
1379
+ 2056: (JAN, 2),
1380
+ 2057: (JAN, 2),
1381
+ 2058: (JAN, 2),
1382
+ 2059: (JAN, 2),
1383
+ 2060: (JAN, 2),
1384
+ 2061: (JAN, 2),
1385
+ 2062: (JAN, 2),
1386
+ 2063: (JAN, 2),
1387
+ 2064: (JAN, 2),
1388
+ 2065: (JAN, 2),
1389
+ 2066: (JAN, 2),
1390
+ 2067: (JAN, 2),
1391
+ 2068: (JAN, 2),
1392
+ 2069: (JAN, 2),
1393
+ 2070: (JAN, 2),
1394
+ 2071: (JAN, 2),
1395
+ 2072: (JAN, 2),
1396
+ 2073: (JAN, 2),
1397
+ 2074: (JAN, 2),
1398
+ 2075: (JAN, 2),
1399
+ 2076: (JAN, 2),
1400
+ 2077: (JAN, 2),
1401
+ 2078: (JAN, 2),
1402
+ 2079: (JAN, 2),
1403
+ 2080: (JAN, 2),
1404
+ 2081: (JAN, 2),
1405
+ 2082: (JAN, 2),
1406
+ 2083: (JAN, 2),
1407
+ 2084: (JAN, 2),
1408
+ 2085: (JAN, 2),
1409
+ 2086: (JAN, 2),
1410
+ 2087: (JAN, 2),
1411
+ 2088: (JAN, 2),
1412
+ 2089: (JAN, 2),
1413
+ 2090: (JAN, 2),
1414
+ 2091: (JAN, 2),
1415
+ 2092: (JAN, 2),
1416
+ 2093: (JAN, 2),
1417
+ 2094: (JAN, 2),
1418
+ 2095: (JAN, 2),
1419
+ 2096: (JAN, 2),
1420
+ 2097: (JAN, 2),
1421
+ 2098: (JAN, 2),
1422
+ 2099: (JAN, 2),
1423
+ }
1424
+
1425
+ def _get_holiday(self, holiday: str, year: int) -> tuple[Optional[date], bool]:
1426
+ estimated_dates = getattr(self, f"{holiday}_DATES", {})
1427
+ exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
1428
+ dt = exact_dates.get(year, estimated_dates.get(year, ()))
1429
+ return date(year, *dt) if dt else None, year not in exact_dates
1430
+
1431
+ def blessed_rainy_day_date(self, year: int) -> tuple[Optional[date], bool]:
1432
+ return self._get_holiday(BLESSED_RAINY_DAY, year)
1433
+
1434
+ def birth_of_guru_rinpoche_date(self, year: int) -> tuple[Optional[date], bool]:
1435
+ return self._get_holiday(BIRTH_OF_GURU_RINPOCHE, year)
1436
+
1437
+ def buddha_first_sermon_date(self, year: int) -> tuple[Optional[date], bool]:
1438
+ return self._get_holiday(BUDDHA_FIRST_SERMON, year)
1439
+
1440
+ def buddha_parinirvana_date(self, year: int) -> tuple[Optional[date], bool]:
1441
+ return self._get_holiday(BUDDHA_PARINIRVANA, year)
1442
+
1443
+ def day_of_offering_date(self, year: int) -> tuple[Optional[date], bool]:
1444
+ return self._get_holiday(DAY_OF_OFFERING, year)
1445
+
1446
+ def death_of_zhabdrung_date(self, year: int) -> tuple[Optional[date], bool]:
1447
+ return self._get_holiday(DEATH_OF_ZHABDRUNG, year)
1448
+
1449
+ def descending_day_of_lord_buddha_date(self, year: int) -> tuple[Optional[date], bool]:
1450
+ return self._get_holiday(DESCENDING_DAY_OF_LORD_BUDDHA, year)
1451
+
1452
+ def losar_date(self, year: int) -> tuple[Optional[date], bool]:
1453
+ return self._get_holiday(LOSAR, year)
1454
+
1455
+ def thimphu_drubchen_date(self, year: int) -> tuple[Optional[date], bool]:
1456
+ return self._get_holiday(THIMPHU_DRUBCHEN, year)
1457
+
1458
+ def thimphu_tshechu_date(self, year: int) -> tuple[Optional[date], bool]:
1459
+ return self._get_holiday(THIMPHU_TSHECHU, year)
1460
+
1461
+ def tibetan_winter_solstice_date(self, year: int) -> tuple[Optional[date], bool]:
1462
+ return self._get_holiday(WINTER_SOLSTICE, year)
1463
+
1464
+
1465
+ class _CustomTibetanHolidays(_CustomCalendar, _TibetanLunisolar):
1466
+ pass