holidays 0.67__py3-none-any.whl → 0.69__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 (99) hide show
  1. holidays/calendars/__init__.py +1 -0
  2. holidays/calendars/balinese_saka.py +112 -0
  3. holidays/calendars/chinese.py +1 -1
  4. holidays/calendars/hindu.py +865 -1
  5. holidays/constants.py +1 -0
  6. holidays/countries/__init__.py +1 -0
  7. holidays/countries/afghanistan.py +8 -2
  8. holidays/countries/albania.py +8 -2
  9. holidays/countries/algeria.py +6 -2
  10. holidays/countries/american_samoa.py +6 -2
  11. holidays/countries/azerbaijan.py +26 -4
  12. holidays/countries/bahrain.py +8 -2
  13. holidays/countries/bosnia_and_herzegovina.py +8 -2
  14. holidays/countries/brunei.py +8 -2
  15. holidays/countries/burkina_faso.py +8 -2
  16. holidays/countries/burundi.py +6 -2
  17. holidays/countries/cameroon.py +8 -2
  18. holidays/countries/chad.py +8 -2
  19. holidays/countries/djibouti.py +6 -2
  20. holidays/countries/egypt.py +6 -2
  21. holidays/countries/ethiopia.py +8 -2
  22. holidays/countries/gabon.py +8 -2
  23. holidays/countries/ghana.py +6 -2
  24. holidays/countries/guam.py +6 -2
  25. holidays/countries/hongkong.py +38 -52
  26. holidays/countries/india.py +482 -166
  27. holidays/countries/indonesia.py +14 -58
  28. holidays/countries/iran.py +8 -2
  29. holidays/countries/jordan.py +6 -2
  30. holidays/countries/kazakhstan.py +8 -2
  31. holidays/countries/kenya.py +209 -47
  32. holidays/countries/kuwait.py +6 -2
  33. holidays/countries/kyrgyzstan.py +6 -2
  34. holidays/countries/macau.py +474 -0
  35. holidays/countries/malaysia.py +30 -6
  36. holidays/countries/maldives.py +6 -2
  37. holidays/countries/mauritania.py +6 -2
  38. holidays/countries/montenegro.py +8 -2
  39. holidays/countries/morocco.py +6 -2
  40. holidays/countries/nigeria.py +6 -2
  41. holidays/countries/north_macedonia.py +6 -2
  42. holidays/countries/northern_mariana_islands.py +6 -2
  43. holidays/countries/pakistan.py +8 -2
  44. holidays/countries/philippines.py +13 -3
  45. holidays/countries/poland.py +1 -1
  46. holidays/countries/puerto_rico.py +6 -2
  47. holidays/countries/saudi_arabia.py +6 -2
  48. holidays/countries/singapore.py +7 -2
  49. holidays/countries/spain.py +8 -2
  50. holidays/countries/sri_lanka.py +8 -2
  51. holidays/countries/taiwan.py +226 -29
  52. holidays/countries/tanzania.py +8 -2
  53. holidays/countries/timor_leste.py +21 -2
  54. holidays/countries/tunisia.py +6 -2
  55. holidays/countries/turkey.py +8 -2
  56. holidays/countries/united_arab_emirates.py +8 -2
  57. holidays/countries/united_states.py +84 -35
  58. holidays/countries/united_states_minor_outlying_islands.py +6 -2
  59. holidays/countries/united_states_virgin_islands.py +6 -2
  60. holidays/countries/uzbekistan.py +8 -2
  61. holidays/groups/__init__.py +1 -0
  62. holidays/groups/balinese_saka.py +45 -0
  63. holidays/groups/chinese.py +68 -3
  64. holidays/groups/hindu.py +255 -0
  65. holidays/groups/islamic.py +5 -2
  66. holidays/holiday_base.py +44 -29
  67. holidays/locale/de/LC_MESSAGES/PL.mo +0 -0
  68. holidays/locale/en_HK/LC_MESSAGES/HK.mo +0 -0
  69. holidays/locale/en_IN/LC_MESSAGES/IN.mo +0 -0
  70. holidays/locale/en_KE/LC_MESSAGES/KE.mo +0 -0
  71. holidays/locale/en_MO/LC_MESSAGES/MO.mo +0 -0
  72. holidays/locale/en_US/LC_MESSAGES/HK.mo +0 -0
  73. holidays/locale/en_US/LC_MESSAGES/IN.mo +0 -0
  74. holidays/locale/en_US/LC_MESSAGES/KE.mo +0 -0
  75. holidays/locale/en_US/LC_MESSAGES/MO.mo +0 -0
  76. holidays/locale/en_US/LC_MESSAGES/MY.mo +0 -0
  77. holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
  78. holidays/locale/hi/LC_MESSAGES/IN.mo +0 -0
  79. holidays/locale/ms_MY/LC_MESSAGES/MY.mo +0 -0
  80. holidays/locale/pt_MO/LC_MESSAGES/MO.mo +0 -0
  81. holidays/locale/sw/LC_MESSAGES/KE.mo +0 -0
  82. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  83. holidays/locale/th/LC_MESSAGES/MO.mo +0 -0
  84. holidays/locale/th/LC_MESSAGES/MY.mo +0 -0
  85. holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
  86. holidays/locale/zh_CN/LC_MESSAGES/HK.mo +0 -0
  87. holidays/locale/zh_CN/LC_MESSAGES/MO.mo +0 -0
  88. holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
  89. holidays/locale/zh_HK/LC_MESSAGES/HK.mo +0 -0
  90. holidays/locale/zh_MO/LC_MESSAGES/MO.mo +0 -0
  91. holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
  92. holidays/registry.py +1 -0
  93. holidays/version.py +1 -1
  94. {holidays-0.67.dist-info → holidays-0.69.dist-info}/AUTHORS +1 -0
  95. {holidays-0.67.dist-info → holidays-0.69.dist-info}/METADATA +24 -19
  96. {holidays-0.67.dist-info → holidays-0.69.dist-info}/RECORD +99 -83
  97. {holidays-0.67.dist-info → holidays-0.69.dist-info}/WHEEL +1 -1
  98. {holidays-0.67.dist-info → holidays-0.69.dist-info}/LICENSE +0 -0
  99. {holidays-0.67.dist-info → holidays-0.69.dist-info}/top_level.txt +0 -0
@@ -10,17 +10,117 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
+ from collections.abc import Iterable
13
14
  from datetime import date
14
15
  from typing import Optional
15
16
 
16
17
  from holidays.calendars.custom import _CustomCalendar
17
- from holidays.calendars.gregorian import JAN, FEB, MAR, OCT, NOV
18
+ from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, AUG, SEP, OCT, NOV, DEC
19
+ from holidays.helpers import _normalize_tuple
18
20
 
21
+ BUDDHA_PURNIMA = "BUDDHA_PURNIMA"
22
+ CHHATH_PUJA = "CHHATH_PUJA"
19
23
  DIWALI = "DIWALI"
24
+ DIWALI_INDIA = "DIWALI_INDIA"
25
+ DUSSEHRA = "DUSSEHRA"
26
+ GANESH_CHATURTHI = "GANESH_CHATURTHI"
27
+ GOVARDHAN_PUJA = "GOVARDHAN_PUJA"
28
+ GUDI_PADWA = "GUDI_PADWA"
29
+ GURU_GOBIND_SINGH_JAYANTI = "GURU_GOBIND_SINGH_JAYANTI"
30
+ GURU_NANAK_JAYANTI = "GURU_NANAK_JAYANTI"
31
+ HOLI = "HOLI"
32
+ JANMASHTAMI = "JANMASHTAMI"
33
+ MAHA_NAVAMI = "MAHA_NAVAMI"
34
+ MAHA_SHIVARATRI = "MAHA_SHIVARATRI"
35
+ MAHAVIR_JAYANTI = "MAHAVIR_JAYANTI"
36
+ MAKAR_SANKRANTI = "MAKAR_SANKRANTI"
37
+ ONAM = "ONAM"
38
+ RAKSHA_BANDHAN = "RAKSHA_BANDHAN"
39
+ RAM_NAVAMI = "RAM_NAVAMI"
40
+ SHARAD_NAVRATRI = "SHARAD_NAVRATRI"
20
41
  THAIPUSAM = "THAIPUSAM"
42
+ VAISAKHI = "VAISAKHI"
21
43
 
22
44
 
23
45
  class _HinduLunisolar:
46
+ # https://www.timeanddate.com/holidays/india/buddha-purnima
47
+ BUDDHA_PURNIMA_DATES = {
48
+ 2001: (APR, 30),
49
+ 2002: (MAY, 19),
50
+ 2003: (MAY, 8),
51
+ 2004: (MAY, 26),
52
+ 2005: (MAY, 23),
53
+ 2006: (MAY, 13),
54
+ 2007: (MAY, 2),
55
+ 2008: (MAY, 20),
56
+ 2009: (MAY, 8),
57
+ 2010: (MAY, 27),
58
+ 2011: (MAY, 17),
59
+ 2012: (MAY, 6),
60
+ 2013: (MAY, 25),
61
+ 2014: (MAY, 14),
62
+ 2015: (MAY, 4),
63
+ 2016: (MAY, 21),
64
+ 2017: (MAY, 10),
65
+ 2018: (APR, 30),
66
+ 2019: (MAY, 18),
67
+ 2020: (MAY, 7),
68
+ 2021: (MAY, 26),
69
+ 2022: (MAY, 16),
70
+ 2023: (MAY, 5),
71
+ 2024: (MAY, 23),
72
+ 2025: (MAY, 12),
73
+ 2026: (MAY, 1),
74
+ 2027: (MAY, 20),
75
+ 2028: (MAY, 8),
76
+ 2029: (MAY, 27),
77
+ 2030: (MAY, 17),
78
+ 2031: (MAY, 7),
79
+ 2032: (MAY, 25),
80
+ 2033: (MAY, 14),
81
+ 2034: (MAY, 3),
82
+ 2035: (MAY, 22),
83
+ }
84
+
85
+ # https://www.timeanddate.com/holidays/india/chhat-puja
86
+ CHHATH_PUJA_DATES = {
87
+ 2001: (NOV, 21),
88
+ 2002: (NOV, 10),
89
+ 2003: (OCT, 30),
90
+ 2004: (NOV, 17),
91
+ 2005: (NOV, 7),
92
+ 2006: (OCT, 28),
93
+ 2007: (NOV, 16),
94
+ 2008: (NOV, 4),
95
+ 2009: (OCT, 24),
96
+ 2010: (NOV, 11),
97
+ 2011: (NOV, 1),
98
+ 2012: (NOV, 19),
99
+ 2013: (NOV, 8),
100
+ 2014: (OCT, 29),
101
+ 2015: (NOV, 17),
102
+ 2016: (NOV, 6),
103
+ 2017: (OCT, 26),
104
+ 2018: (NOV, 13),
105
+ 2019: (NOV, 2),
106
+ 2020: (NOV, 20),
107
+ 2021: (NOV, 10),
108
+ 2022: (OCT, 30),
109
+ 2023: (NOV, 19),
110
+ 2024: (NOV, 7),
111
+ 2025: (OCT, 28),
112
+ 2026: (NOV, 15),
113
+ 2027: (NOV, 4),
114
+ 2028: (OCT, 23),
115
+ 2029: (NOV, 11),
116
+ 2030: (NOV, 1),
117
+ 2031: (NOV, 20),
118
+ 2032: (NOV, 9),
119
+ 2033: (OCT, 29),
120
+ 2034: (NOV, 17),
121
+ 2035: (NOV, 6),
122
+ }
123
+
24
124
  DIWALI_DATES = {
25
125
  1901: (NOV, 9),
26
126
  1902: (OCT, 29),
@@ -223,6 +323,664 @@ class _HinduLunisolar:
223
323
  2099: (NOV, 10),
224
324
  }
225
325
 
326
+ # https://www.timeanddate.com/holidays/india/diwali
327
+ DIWALI_INDIA_DATES = {
328
+ 2001: (NOV, 14),
329
+ 2002: (NOV, 4),
330
+ 2003: (OCT, 25),
331
+ 2004: (NOV, 12),
332
+ 2005: (NOV, 1),
333
+ 2006: (OCT, 21),
334
+ 2007: (NOV, 9),
335
+ 2008: (OCT, 28),
336
+ 2009: (OCT, 17),
337
+ 2010: (NOV, 5),
338
+ 2011: (OCT, 26),
339
+ 2012: (NOV, 13),
340
+ 2013: (NOV, 3),
341
+ 2014: (OCT, 23),
342
+ 2015: (NOV, 11),
343
+ 2016: (OCT, 30),
344
+ 2017: (OCT, 19),
345
+ 2018: (NOV, 7),
346
+ 2019: (OCT, 27),
347
+ 2020: (NOV, 14),
348
+ 2021: (NOV, 4),
349
+ 2022: (OCT, 24),
350
+ 2023: (NOV, 12),
351
+ 2024: (NOV, 1),
352
+ 2025: (OCT, 20),
353
+ 2026: (NOV, 8),
354
+ 2027: (OCT, 29),
355
+ 2028: (OCT, 17),
356
+ 2029: (NOV, 5),
357
+ 2030: (OCT, 26),
358
+ 2031: (NOV, 14),
359
+ 2032: (NOV, 2),
360
+ 2033: (OCT, 22),
361
+ 2034: (NOV, 10),
362
+ 2035: (OCT, 30),
363
+ }
364
+
365
+ # https://www.timeanddate.com/holidays/india/dussehra
366
+ DUSSEHRA_DATES = {
367
+ 2001: (OCT, 26),
368
+ 2002: (OCT, 15),
369
+ 2003: (OCT, 5),
370
+ 2004: (OCT, 22),
371
+ 2005: (OCT, 12),
372
+ 2006: (OCT, 2),
373
+ 2007: (OCT, 21),
374
+ 2008: (OCT, 9),
375
+ 2009: (SEP, 28),
376
+ 2010: (OCT, 17),
377
+ 2011: (OCT, 6),
378
+ 2012: (OCT, 24),
379
+ 2013: (OCT, 13),
380
+ 2014: (OCT, 3),
381
+ 2015: (OCT, 22),
382
+ 2016: (OCT, 11),
383
+ 2017: (SEP, 30),
384
+ 2018: (OCT, 19),
385
+ 2019: (OCT, 8),
386
+ 2020: (OCT, 25),
387
+ 2021: (OCT, 15),
388
+ 2022: (OCT, 5),
389
+ 2023: (OCT, 24),
390
+ 2024: (OCT, 12),
391
+ 2025: (OCT, 2),
392
+ 2026: (OCT, 20),
393
+ 2027: (OCT, 9),
394
+ 2028: (SEP, 27),
395
+ 2029: (OCT, 16),
396
+ 2030: (OCT, 6),
397
+ 2031: (OCT, 25),
398
+ 2032: (OCT, 14),
399
+ 2033: (OCT, 3),
400
+ 2034: (OCT, 22),
401
+ 2035: (OCT, 11),
402
+ }
403
+
404
+ # https://www.timeanddate.com/holidays/india/ganesh-chaturthi
405
+ GANESH_CHATURTHI_DATES = {
406
+ 2001: (AUG, 22),
407
+ 2002: (SEP, 10),
408
+ 2003: (AUG, 31),
409
+ 2004: (SEP, 18),
410
+ 2005: (SEP, 7),
411
+ 2006: (AUG, 27),
412
+ 2007: (SEP, 15),
413
+ 2008: (SEP, 3),
414
+ 2009: (AUG, 23),
415
+ 2010: (SEP, 11),
416
+ 2011: (SEP, 1),
417
+ 2012: (SEP, 19),
418
+ 2013: (SEP, 9),
419
+ 2014: (AUG, 29),
420
+ 2015: (SEP, 17),
421
+ 2016: (SEP, 5),
422
+ 2017: (AUG, 25),
423
+ 2018: (SEP, 13),
424
+ 2019: (SEP, 2),
425
+ 2020: (AUG, 22),
426
+ 2021: (SEP, 10),
427
+ 2022: (AUG, 31),
428
+ 2023: (SEP, 19),
429
+ 2024: (SEP, 7),
430
+ 2025: (AUG, 27),
431
+ 2026: (SEP, 14),
432
+ 2027: (SEP, 4),
433
+ 2028: (AUG, 23),
434
+ 2029: (SEP, 11),
435
+ 2030: (SEP, 1),
436
+ 2031: (SEP, 20),
437
+ 2032: (SEP, 8),
438
+ 2033: (AUG, 28),
439
+ 2034: (SEP, 16),
440
+ 2035: (SEP, 5),
441
+ }
442
+
443
+ # https://www.timeanddate.com/holidays/india/govardhan-puja
444
+ GOVARDHAN_PUJA_DATES = {
445
+ 2001: (NOV, 15),
446
+ 2002: (NOV, 5),
447
+ 2003: (OCT, 26),
448
+ 2004: (NOV, 13),
449
+ 2005: (NOV, 2),
450
+ 2006: (OCT, 22),
451
+ 2007: (NOV, 10),
452
+ 2008: (OCT, 29),
453
+ 2009: (OCT, 18),
454
+ 2010: (NOV, 6),
455
+ 2011: (OCT, 27),
456
+ 2012: (NOV, 14),
457
+ 2013: (NOV, 4),
458
+ 2014: (OCT, 24),
459
+ 2015: (NOV, 12),
460
+ 2016: (OCT, 31),
461
+ 2017: (OCT, 20),
462
+ 2018: (NOV, 8),
463
+ 2019: (OCT, 28),
464
+ 2020: (NOV, 15),
465
+ 2021: (NOV, 5),
466
+ 2022: (OCT, 25),
467
+ 2023: (NOV, 13),
468
+ 2024: (NOV, 2),
469
+ 2025: (OCT, 22),
470
+ 2026: (NOV, 10),
471
+ 2027: (OCT, 30),
472
+ 2028: (OCT, 18),
473
+ 2029: (NOV, 6),
474
+ 2030: (OCT, 27),
475
+ 2031: (NOV, 15),
476
+ 2032: (NOV, 3),
477
+ 2033: (OCT, 23),
478
+ 2034: (NOV, 11),
479
+ 2035: (OCT, 31),
480
+ }
481
+
482
+ # https://www.timeanddate.com/holidays/india/gudi-padwa
483
+ GUDI_PADWA_DATES = {
484
+ 2001: (MAR, 26),
485
+ 2002: (APR, 13),
486
+ 2003: (APR, 2),
487
+ 2004: (MAR, 21),
488
+ 2005: (APR, 9),
489
+ 2006: (MAR, 30),
490
+ 2007: (MAR, 19),
491
+ 2008: (APR, 6),
492
+ 2009: (MAR, 27),
493
+ 2010: (MAR, 16),
494
+ 2011: (APR, 4),
495
+ 2012: (MAR, 23),
496
+ 2013: (APR, 11),
497
+ 2014: (MAR, 31),
498
+ 2015: (MAR, 21),
499
+ 2016: (APR, 8),
500
+ 2017: (MAR, 28),
501
+ 2018: (MAR, 18),
502
+ 2019: (APR, 6),
503
+ 2020: (MAR, 25),
504
+ 2021: (APR, 13),
505
+ 2022: (APR, 2),
506
+ 2023: (MAR, 22),
507
+ 2024: (APR, 9),
508
+ 2025: (MAR, 30),
509
+ 2026: (MAR, 19),
510
+ 2027: (APR, 7),
511
+ 2028: (MAR, 27),
512
+ 2029: (APR, 14),
513
+ 2030: (APR, 3),
514
+ 2031: (MAR, 24),
515
+ 2032: (APR, 11),
516
+ 2033: (MAR, 31),
517
+ 2034: (MAR, 21),
518
+ 2035: (APR, 9),
519
+ }
520
+
521
+ # https://www.timeanddate.com/holidays/india/guru-govind-singh-jayanti
522
+ GURU_GOBIND_SINGH_JAYANTI_DATES = {
523
+ 2001: (JAN, 2),
524
+ 2002: (JAN, 21),
525
+ 2003: (DEC, 29),
526
+ 2004: (NOV, 20),
527
+ 2005: (JAN, 5),
528
+ 2006: (JAN, 5),
529
+ 2007: (JAN, 5),
530
+ 2008: (JAN, 5),
531
+ 2009: (JAN, 5),
532
+ 2010: (JAN, 5),
533
+ 2011: (JAN, 5),
534
+ 2012: (JAN, 5),
535
+ 2013: (JAN, 18),
536
+ 2014: (JAN, 7),
537
+ 2015: (JAN, 5),
538
+ 2016: (JAN, 16),
539
+ 2017: ((JAN, 5), (DEC, 25)),
540
+ 2019: (JAN, 13),
541
+ 2020: (JAN, 2),
542
+ 2021: (JAN, 20),
543
+ 2022: ((JAN, 9), (DEC, 29)),
544
+ 2024: (JAN, 17),
545
+ 2025: ((JAN, 6), (DEC, 27)),
546
+ 2027: (JAN, 15),
547
+ 2028: (JAN, 4),
548
+ 2029: (JAN, 15),
549
+ 2030: ((JAN, 10), (DEC, 31)),
550
+ 2032: (JAN, 18),
551
+ 2033: (JAN, 7),
552
+ 2034: (JAN, 17),
553
+ 2035: (JAN, 16),
554
+ }
555
+
556
+ # https://www.timeanddate.com/holidays/india/guru-nanak-jayanti
557
+ GURU_NANAK_JAYANTI_DATES = {
558
+ 2001: (NOV, 30),
559
+ 2002: (NOV, 19),
560
+ 2003: (NOV, 8),
561
+ 2004: (NOV, 26),
562
+ 2005: (NOV, 15),
563
+ 2006: (NOV, 5),
564
+ 2007: (NOV, 24),
565
+ 2008: (NOV, 13),
566
+ 2009: (NOV, 2),
567
+ 2010: (NOV, 21),
568
+ 2011: (NOV, 10),
569
+ 2012: (NOV, 28),
570
+ 2013: (NOV, 17),
571
+ 2014: (NOV, 6),
572
+ 2015: (NOV, 25),
573
+ 2016: (NOV, 14),
574
+ 2017: (NOV, 4),
575
+ 2018: (NOV, 23),
576
+ 2019: (NOV, 12),
577
+ 2020: (NOV, 30),
578
+ 2021: (NOV, 19),
579
+ 2022: (NOV, 8),
580
+ 2023: (NOV, 27),
581
+ 2024: (NOV, 15),
582
+ 2025: (NOV, 5),
583
+ 2027: (NOV, 14),
584
+ 2028: (NOV, 2),
585
+ 2029: (NOV, 21),
586
+ 2030: (NOV, 10),
587
+ 2031: (NOV, 28),
588
+ 2032: (NOV, 17),
589
+ 2033: (NOV, 6),
590
+ 2034: (NOV, 25),
591
+ 2035: (NOV, 15),
592
+ }
593
+
594
+ # https://www.timeanddate.com/holidays/india/holi
595
+ HOLI_DATES = {
596
+ 2001: (MAR, 10),
597
+ 2002: (MAR, 29),
598
+ 2003: (MAR, 18),
599
+ 2004: (MAR, 7),
600
+ 2005: (MAR, 26),
601
+ 2006: (MAR, 15),
602
+ 2007: (MAR, 4),
603
+ 2008: (MAR, 22),
604
+ 2009: (MAR, 11),
605
+ 2010: (MAR, 1),
606
+ 2011: (MAR, 20),
607
+ 2012: (MAR, 8),
608
+ 2013: (MAR, 27),
609
+ 2014: (MAR, 17),
610
+ 2015: (MAR, 6),
611
+ 2016: (MAR, 24),
612
+ 2017: (MAR, 13),
613
+ 2018: (MAR, 2),
614
+ 2019: (MAR, 21),
615
+ 2020: (MAR, 10),
616
+ 2021: (MAR, 29),
617
+ 2022: (MAR, 18),
618
+ 2023: (MAR, 8),
619
+ 2024: (MAR, 25),
620
+ 2025: (MAR, 14),
621
+ 2026: (MAR, 4),
622
+ 2027: (MAR, 22),
623
+ 2028: (MAR, 11),
624
+ 2029: (MAR, 1),
625
+ 2030: (MAR, 20),
626
+ 2031: (MAR, 9),
627
+ 2032: (MAR, 27),
628
+ 2033: (MAR, 16),
629
+ 2034: (MAR, 5),
630
+ 2035: (MAR, 24),
631
+ }
632
+
633
+ # https://www.timeanddate.com/holidays/india/janmashtami
634
+ JANMASHTAMI_DATES = {
635
+ 2001: (AUG, 12),
636
+ 2002: (AUG, 31),
637
+ 2003: (AUG, 20),
638
+ 2004: (SEP, 7),
639
+ 2005: (AUG, 27),
640
+ 2006: (AUG, 16),
641
+ 2007: (SEP, 4),
642
+ 2008: (AUG, 24),
643
+ 2009: (AUG, 14),
644
+ 2010: (SEP, 2),
645
+ 2011: (AUG, 22),
646
+ 2012: (AUG, 10),
647
+ 2013: (AUG, 28),
648
+ 2014: (AUG, 18),
649
+ 2015: (SEP, 5),
650
+ 2016: (AUG, 25),
651
+ 2017: (AUG, 15),
652
+ 2018: (SEP, 3),
653
+ 2019: (AUG, 24),
654
+ 2020: (AUG, 12),
655
+ 2021: (AUG, 30),
656
+ 2022: (AUG, 19),
657
+ 2023: (SEP, 7),
658
+ 2024: (AUG, 26),
659
+ 2025: (AUG, 16),
660
+ 2026: (SEP, 4),
661
+ 2027: (AUG, 25),
662
+ 2028: (AUG, 13),
663
+ 2029: (SEP, 1),
664
+ 2030: (AUG, 21),
665
+ 2031: (AUG, 10),
666
+ 2032: (AUG, 28),
667
+ 2033: (AUG, 17),
668
+ 2034: (SEP, 6),
669
+ 2035: (AUG, 26),
670
+ }
671
+
672
+ # https://www.timeanddate.com/holidays/india/maha-navami
673
+ MAHA_NAVAMI_DATES = {
674
+ 2001: (OCT, 25),
675
+ 2002: (OCT, 14),
676
+ 2003: (OCT, 3),
677
+ 2004: (OCT, 21),
678
+ 2005: (OCT, 11),
679
+ 2006: (OCT, 1),
680
+ 2007: (OCT, 20),
681
+ 2008: (OCT, 8),
682
+ 2009: (SEP, 27),
683
+ 2010: (OCT, 16),
684
+ 2011: (OCT, 5),
685
+ 2012: (OCT, 23),
686
+ 2013: (OCT, 12),
687
+ 2014: (OCT, 2),
688
+ 2015: (OCT, 21),
689
+ 2016: (OCT, 10),
690
+ 2017: (SEP, 29),
691
+ 2018: (OCT, 18),
692
+ 2019: (OCT, 7),
693
+ 2020: (OCT, 24),
694
+ 2021: (OCT, 14),
695
+ 2022: (OCT, 4),
696
+ 2023: (OCT, 23),
697
+ 2024: (OCT, 11),
698
+ 2025: (OCT, 1),
699
+ 2026: (OCT, 19),
700
+ 2027: (OCT, 8),
701
+ 2028: (SEP, 26),
702
+ 2029: (OCT, 15),
703
+ 2030: (OCT, 5),
704
+ 2031: (OCT, 24),
705
+ 2032: (OCT, 13),
706
+ 2033: (OCT, 2),
707
+ 2034: (OCT, 21),
708
+ 2035: (OCT, 10),
709
+ }
710
+
711
+ # https://www.timeanddate.com/holidays/india/maha-shivaratri-shivaratri
712
+ MAHA_SHIVARATRI_DATES = {
713
+ 2001: (FEB, 21),
714
+ 2002: (MAR, 12),
715
+ 2003: (MAR, 1),
716
+ 2004: (FEB, 18),
717
+ 2005: (MAR, 8),
718
+ 2006: (FEB, 26),
719
+ 2007: (FEB, 16),
720
+ 2008: (MAR, 6),
721
+ 2009: (FEB, 23),
722
+ 2010: (FEB, 12),
723
+ 2011: (MAR, 2),
724
+ 2012: (FEB, 20),
725
+ 2013: (MAR, 10),
726
+ 2014: (FEB, 27),
727
+ 2015: (FEB, 17),
728
+ 2016: (MAR, 7),
729
+ 2017: (FEB, 24),
730
+ 2018: (FEB, 13),
731
+ 2019: (MAR, 4),
732
+ 2020: (FEB, 21),
733
+ 2021: (MAR, 11),
734
+ 2022: (MAR, 1),
735
+ 2023: (FEB, 18),
736
+ 2024: (MAR, 8),
737
+ 2025: (FEB, 26),
738
+ 2026: (FEB, 15),
739
+ 2027: (MAR, 6),
740
+ 2028: (FEB, 23),
741
+ 2029: (FEB, 11),
742
+ 2030: (MAR, 2),
743
+ 2031: (FEB, 20),
744
+ 2032: (MAR, 10),
745
+ 2033: (FEB, 27),
746
+ 2034: (FEB, 17),
747
+ 2035: (MAR, 8),
748
+ }
749
+
750
+ # https://www.timeanddate.com/holidays/india/mahavir-jayanti
751
+ MAHAVIR_JAYANTI_DATES = {
752
+ 2001: (APR, 6),
753
+ 2002: (APR, 25),
754
+ 2003: (APR, 15),
755
+ 2004: (APR, 3),
756
+ 2005: (APR, 22),
757
+ 2006: (APR, 11),
758
+ 2007: (MAR, 31),
759
+ 2008: (APR, 18),
760
+ 2009: (APR, 7),
761
+ 2010: (APR, 28),
762
+ 2011: (APR, 16),
763
+ 2012: (APR, 5),
764
+ 2013: (APR, 24),
765
+ 2014: (APR, 13),
766
+ 2015: (APR, 2),
767
+ 2016: (APR, 20),
768
+ 2017: (APR, 9),
769
+ 2018: (MAR, 29),
770
+ 2019: (APR, 17),
771
+ 2020: (APR, 6),
772
+ 2021: (APR, 25),
773
+ 2022: (APR, 14),
774
+ 2023: (APR, 4),
775
+ 2024: (APR, 21),
776
+ 2025: (APR, 10),
777
+ 2026: (MAR, 31),
778
+ 2027: (APR, 18),
779
+ 2028: (APR, 7),
780
+ 2029: (APR, 26),
781
+ 2030: (APR, 16),
782
+ 2031: (APR, 5),
783
+ 2032: (APR, 23),
784
+ 2033: (APR, 12),
785
+ 2034: (APR, 1),
786
+ 2035: (APR, 20),
787
+ }
788
+
789
+ # https://www.timeanddate.com/holidays/india/makar-sankranti
790
+ MAKAR_SANKRANTI_DATES = {
791
+ 2001: (JAN, 14),
792
+ 2002: (JAN, 14),
793
+ 2003: (JAN, 14),
794
+ 2004: (JAN, 15),
795
+ 2005: (JAN, 14),
796
+ 2006: (JAN, 14),
797
+ 2007: (JAN, 15),
798
+ 2008: (JAN, 15),
799
+ 2009: (JAN, 14),
800
+ 2010: (JAN, 14),
801
+ 2011: (JAN, 15),
802
+ 2012: (JAN, 15),
803
+ 2013: (JAN, 14),
804
+ 2014: (JAN, 14),
805
+ 2015: (JAN, 15),
806
+ 2016: (JAN, 15),
807
+ 2017: (JAN, 14),
808
+ 2018: (JAN, 14),
809
+ 2019: (JAN, 15),
810
+ 2020: (JAN, 15),
811
+ 2021: (JAN, 14),
812
+ 2022: (JAN, 14),
813
+ 2023: (JAN, 14),
814
+ 2024: (JAN, 14),
815
+ 2025: (JAN, 14),
816
+ 2026: (JAN, 14),
817
+ 2027: (JAN, 15),
818
+ 2028: (JAN, 15),
819
+ 2029: (JAN, 14),
820
+ 2030: (JAN, 14),
821
+ 2031: (JAN, 15),
822
+ 2032: (JAN, 15),
823
+ 2033: (JAN, 14),
824
+ 2034: (JAN, 14),
825
+ 2035: (JAN, 15),
826
+ }
827
+
828
+ # https://www.timeanddate.com/holidays/india/onam
829
+ ONAM_DATES = {
830
+ 2001: (AUG, 31),
831
+ 2002: (AUG, 21),
832
+ 2003: (SEP, 8),
833
+ 2004: (AUG, 28),
834
+ 2005: (SEP, 15),
835
+ 2006: (SEP, 5),
836
+ 2007: (AUG, 26),
837
+ 2008: (SEP, 12),
838
+ 2009: (SEP, 2),
839
+ 2010: (AUG, 23),
840
+ 2011: (SEP, 9),
841
+ 2012: (AUG, 29),
842
+ 2013: (AUG, 20),
843
+ 2014: (SEP, 6),
844
+ 2015: (AUG, 28),
845
+ 2016: (SEP, 13),
846
+ 2017: (SEP, 4),
847
+ 2018: (AUG, 24),
848
+ 2019: (SEP, 11),
849
+ 2020: (AUG, 31),
850
+ 2021: (AUG, 21),
851
+ 2022: (SEP, 8),
852
+ 2023: (AUG, 29),
853
+ 2024: (SEP, 15),
854
+ 2025: (SEP, 5),
855
+ 2026: (AUG, 26),
856
+ 2027: (SEP, 12),
857
+ 2028: (SEP, 1),
858
+ 2029: (AUG, 22),
859
+ 2030: (SEP, 9),
860
+ 2031: (AUG, 30),
861
+ 2032: (AUG, 20),
862
+ 2033: (SEP, 6),
863
+ 2034: (AUG, 28),
864
+ 2035: (SEP, 14),
865
+ }
866
+
867
+ # https://www.timeanddate.com/holidays/india/raksha-bandhan
868
+ RAKSHA_BANDHAN_DATES = {
869
+ 2001: (AUG, 4),
870
+ 2002: (AUG, 22),
871
+ 2003: (AUG, 12),
872
+ 2004: (AUG, 29),
873
+ 2005: (AUG, 19),
874
+ 2006: (AUG, 9),
875
+ 2007: (AUG, 28),
876
+ 2008: (AUG, 16),
877
+ 2009: (AUG, 5),
878
+ 2010: (AUG, 24),
879
+ 2011: (AUG, 13),
880
+ 2012: (AUG, 2),
881
+ 2013: (AUG, 20),
882
+ 2014: (AUG, 10),
883
+ 2015: (AUG, 29),
884
+ 2016: (AUG, 18),
885
+ 2017: (AUG, 7),
886
+ 2018: (AUG, 26),
887
+ 2019: (AUG, 15),
888
+ 2020: (AUG, 3),
889
+ 2021: (AUG, 22),
890
+ 2022: (AUG, 11),
891
+ 2023: (AUG, 30),
892
+ 2024: (AUG, 19),
893
+ 2025: (AUG, 9),
894
+ 2026: (AUG, 28),
895
+ 2027: (AUG, 17),
896
+ 2028: (AUG, 5),
897
+ 2029: (AUG, 23),
898
+ 2030: (AUG, 13),
899
+ 2031: (AUG, 2),
900
+ 2032: (AUG, 20),
901
+ 2033: (AUG, 10),
902
+ 2034: (AUG, 29),
903
+ 2035: (AUG, 18),
904
+ }
905
+
906
+ # https://www.timeanddate.com/holidays/india/rama-navami
907
+ RAM_NAVAMI_DATES = {
908
+ 2001: (APR, 2),
909
+ 2002: (APR, 21),
910
+ 2003: (APR, 11),
911
+ 2004: (MAR, 30),
912
+ 2005: (APR, 18),
913
+ 2006: (APR, 6),
914
+ 2007: (MAR, 26),
915
+ 2008: (APR, 13),
916
+ 2009: (APR, 3),
917
+ 2010: (MAR, 24),
918
+ 2011: (APR, 12),
919
+ 2012: (APR, 1),
920
+ 2013: (APR, 19),
921
+ 2014: (APR, 8),
922
+ 2015: (MAR, 28),
923
+ 2016: (APR, 15),
924
+ 2017: (APR, 4),
925
+ 2018: (MAR, 25),
926
+ 2019: (APR, 13),
927
+ 2020: (APR, 2),
928
+ 2021: (APR, 21),
929
+ 2022: (APR, 10),
930
+ 2023: (MAR, 30),
931
+ 2024: (APR, 17),
932
+ 2025: (APR, 6),
933
+ 2026: (MAR, 26),
934
+ 2027: (APR, 15),
935
+ 2028: (APR, 3),
936
+ 2029: (APR, 22),
937
+ 2030: (APR, 12),
938
+ 2031: (APR, 1),
939
+ 2032: (APR, 19),
940
+ 2033: (APR, 7),
941
+ 2034: (MAR, 28),
942
+ 2035: (APR, 16),
943
+ }
944
+
945
+ # https://www.timeanddate.com/holidays/india/navratri
946
+ SHARAD_NAVRATRI_DATES = {
947
+ 2001: (OCT, 17),
948
+ 2002: (OCT, 7),
949
+ 2003: (SEP, 26),
950
+ 2004: (OCT, 14),
951
+ 2005: (OCT, 4),
952
+ 2006: (SEP, 23),
953
+ 2007: (OCT, 12),
954
+ 2008: (SEP, 30),
955
+ 2009: (SEP, 19),
956
+ 2010: (OCT, 8),
957
+ 2011: (SEP, 28),
958
+ 2012: (OCT, 16),
959
+ 2013: (OCT, 5),
960
+ 2014: (SEP, 25),
961
+ 2015: (OCT, 13),
962
+ 2016: (OCT, 1),
963
+ 2017: (SEP, 21),
964
+ 2018: (OCT, 10),
965
+ 2019: (SEP, 29),
966
+ 2020: (OCT, 17),
967
+ 2021: (OCT, 7),
968
+ 2022: (SEP, 26),
969
+ 2023: (OCT, 15),
970
+ 2024: (OCT, 3),
971
+ 2025: (SEP, 22),
972
+ 2026: (OCT, 11),
973
+ 2027: (SEP, 30),
974
+ 2028: (SEP, 19),
975
+ 2029: (OCT, 8),
976
+ 2030: (SEP, 28),
977
+ 2031: (OCT, 17),
978
+ 2032: (OCT, 5),
979
+ 2033: (SEP, 24),
980
+ 2034: (OCT, 13),
981
+ 2035: (OCT, 2),
982
+ }
983
+
226
984
  THAIPUSAM_DATES = {
227
985
  1901: (MAR, 5),
228
986
  1902: (FEB, 23),
@@ -425,18 +1183,124 @@ class _HinduLunisolar:
425
1183
  2099: (JAN, 6),
426
1184
  }
427
1185
 
1186
+ # https://www.timeanddate.com/holidays/india/vaisakhi
1187
+ VAISAKHI_DATES = {
1188
+ 2001: (APR, 13),
1189
+ 2002: (APR, 14),
1190
+ 2003: (APR, 14),
1191
+ 2004: (APR, 13),
1192
+ 2005: (APR, 14),
1193
+ 2006: (APR, 14),
1194
+ 2007: (APR, 14),
1195
+ 2008: (APR, 13),
1196
+ 2009: (APR, 14),
1197
+ 2010: (APR, 14),
1198
+ 2011: (APR, 14),
1199
+ 2012: (APR, 13),
1200
+ 2013: (APR, 13),
1201
+ 2014: (APR, 14),
1202
+ 2015: (APR, 14),
1203
+ 2016: (APR, 13),
1204
+ 2017: (APR, 14),
1205
+ 2018: (APR, 14),
1206
+ 2019: (APR, 14),
1207
+ 2020: (APR, 13),
1208
+ 2021: (APR, 14),
1209
+ 2022: (APR, 14),
1210
+ 2023: (APR, 14),
1211
+ 2024: (APR, 13),
1212
+ 2025: (APR, 13),
1213
+ 2026: (APR, 14),
1214
+ 2027: (APR, 14),
1215
+ 2028: (APR, 13),
1216
+ 2029: (APR, 14),
1217
+ 2030: (APR, 14),
1218
+ 2031: (APR, 14),
1219
+ 2032: (APR, 13),
1220
+ 2033: (APR, 14),
1221
+ 2034: (APR, 14),
1222
+ 2035: (APR, 14),
1223
+ }
1224
+
428
1225
  def _get_holiday(self, holiday: str, year: int) -> tuple[Optional[date], bool]:
429
1226
  estimated_dates = getattr(self, f"{holiday}_DATES", {})
430
1227
  exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
431
1228
  dt = exact_dates.get(year, estimated_dates.get(year, ()))
432
1229
  return date(year, *dt) if dt else None, year not in exact_dates
433
1230
 
1231
+ def _get_holiday_set(self, holiday: str, year: int) -> Iterable[tuple[date, bool]]:
1232
+ estimated_dates = getattr(self, f"{holiday}_DATES", {})
1233
+ exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
1234
+ for year in (year - 1, year):
1235
+ for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))):
1236
+ yield date(year, *dt), year not in exact_dates
1237
+
1238
+ def buddha_purnima_date(self, year: int) -> tuple[Optional[date], bool]:
1239
+ return self._get_holiday(BUDDHA_PURNIMA, year)
1240
+
1241
+ def chhath_puja_date(self, year: int) -> tuple[Optional[date], bool]:
1242
+ return self._get_holiday(CHHATH_PUJA, year)
1243
+
434
1244
  def diwali_date(self, year: int) -> tuple[Optional[date], bool]:
435
1245
  return self._get_holiday(DIWALI, year)
436
1246
 
1247
+ def diwali_india_date(self, year: int) -> tuple[Optional[date], bool]:
1248
+ return self._get_holiday(DIWALI_INDIA, year)
1249
+
1250
+ def dussehra_date(self, year: int) -> tuple[Optional[date], bool]:
1251
+ return self._get_holiday(DUSSEHRA, year)
1252
+
1253
+ def ganesh_chaturthi_date(self, year: int) -> tuple[Optional[date], bool]:
1254
+ return self._get_holiday(GANESH_CHATURTHI, year)
1255
+
1256
+ def govardhan_puja_date(self, year: int) -> tuple[Optional[date], bool]:
1257
+ return self._get_holiday(GOVARDHAN_PUJA, year)
1258
+
1259
+ def gudi_padwa_date(self, year: int) -> tuple[Optional[date], bool]:
1260
+ return self._get_holiday(GUDI_PADWA, year)
1261
+
1262
+ def guru_gobind_singh_jayanti_date(self, year: int) -> Iterable[tuple[date, bool]]:
1263
+ return self._get_holiday_set(GURU_GOBIND_SINGH_JAYANTI, year)
1264
+
1265
+ def guru_nanak_jayanti_date(self, year: int) -> tuple[Optional[date], bool]:
1266
+ return self._get_holiday(GURU_NANAK_JAYANTI, year)
1267
+
1268
+ def holi_date(self, year: int) -> tuple[Optional[date], bool]:
1269
+ return self._get_holiday(HOLI, year)
1270
+
1271
+ def janmashtami_date(self, year: int) -> tuple[Optional[date], bool]:
1272
+ return self._get_holiday(JANMASHTAMI, year)
1273
+
1274
+ def maha_navami_date(self, year: int) -> tuple[Optional[date], bool]:
1275
+ return self._get_holiday(MAHA_NAVAMI, year)
1276
+
1277
+ def maha_shivaratri_date(self, year: int) -> tuple[Optional[date], bool]:
1278
+ return self._get_holiday(MAHA_SHIVARATRI, year)
1279
+
1280
+ def mahavir_jayanti_date(self, year: int) -> tuple[Optional[date], bool]:
1281
+ return self._get_holiday(MAHAVIR_JAYANTI, year)
1282
+
1283
+ def makar_sankranti_date(self, year: int) -> tuple[Optional[date], bool]:
1284
+ return self._get_holiday(MAKAR_SANKRANTI, year)
1285
+
1286
+ def onam_date(self, year: int) -> tuple[Optional[date], bool]:
1287
+ return self._get_holiday(ONAM, year)
1288
+
1289
+ def raksha_bandhan_date(self, year: int) -> tuple[Optional[date], bool]:
1290
+ return self._get_holiday(RAKSHA_BANDHAN, year)
1291
+
1292
+ def ram_navami_date(self, year: int) -> tuple[Optional[date], bool]:
1293
+ return self._get_holiday(RAM_NAVAMI, year)
1294
+
1295
+ def sharad_navratri_date(self, year: int) -> tuple[Optional[date], bool]:
1296
+ return self._get_holiday(SHARAD_NAVRATRI, year)
1297
+
437
1298
  def thaipusam_date(self, year: int) -> tuple[Optional[date], bool]:
438
1299
  return self._get_holiday(THAIPUSAM, year)
439
1300
 
1301
+ def vaisakhi_date(self, year: int) -> tuple[Optional[date], bool]:
1302
+ return self._get_holiday(VAISAKHI, year)
1303
+
440
1304
 
441
1305
  class _CustomHinduHolidays(_CustomCalendar, _HinduLunisolar):
442
1306
  pass