Repository: vacanza/holidays
Pull request #2502: Update India holidays: add missing Tamil Nadu holidays
Author: login: tr33k
Labels: name: l10n
name: test
Created: 2025-04-26T14:04:29Z | Merged: 2025-04-28T20:20:40Z

<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<h3>Added missing holidays for the Tamil Nadu subdivision (India).</h3>

Notably, Pongal and Marker Sankranti dates differ slightly. To handle this correctly, I introduced a separate add_pongal() method for Pongal-related holidays.

For accurate historical data, I referred to:
<a href="https://www.tamildailycalendar.com/tamil_monthly_calendar.php?month=01&year=2005&&msg=Tamil%20Monthly%20Calendar%202015">Tamil Daily Calendar (2005–2025)</a>

<a href="https://www.prokerala.com/general/calendar/tamilcalendar.php?mon=january&sb=1&year=2003">Prokerala Tamil Calendar (2001–2005)</a>

<h4>The sequence of holidays around Pongal is:</h4>

1) Bhogi (not declared as a public holiday)

2) Pongal (Main festival)

3) Thiruvalluvar Day (the day after Pongal)

4) Uzhavar Thirunal (the day after Thiruvalluvar Day)

This structure aligns with the traditional four-day Pongal celebrations in Tamil Nadu.

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

## Type of change

1) Added missing public and optional holidays.

2) Created a new add_pongal() function for better handling of Pongal-related holidays.

Closes #2500 

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [ ] New country/market holidays support (thank you!)
- [x] Supported country/market holidays update (calendar discrepancy fix, localization)
- [ ] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.md
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


Linked issue #2500: Missing "Thiruvalluvar Day" and "Uzhavar Thinam" in India (Tamil Nadu) regional holidays
<h1>Holidays Missed in Tamil Nadu, India:</h1>

<b>The day following Pongal, Thiruvalluvar Day.</b>

<b>Two days following Pongal, Uzhavar Thinam.</b>

<h1>Problem:</h1>

At the moment, Pongal and Makar Sankranti are considered to be the same holiday.

In 2003, Makar Sankranti was celebrated on January 14, while Pongal was celebrated on January 15 in Tamil Nadu.

Treating them as the same causes incorrect holiday representation.

<h2>Reference:</h2>

https://www.tn.gov.in/sites/default/holidays/public_e_792_2024.pdf
https://www.prokerala.com/general/calendar/tamilcalendar.php?year=2003&mon=january&la=ta&sb=1
https://www.timeanddate.com/holidays/india/makar-sankranti
Linked issue comments: user: login: tr33k
created_at: 2025-04-26T06:46:21Z
body: I would like to work on this issue. 
author_association: CONTRIBUTOR

Diff:
diff --git a/holidays/calendars/hindu.py b/holidays/calendars/hindu.py
index 03a7f9ce12..86a4e9df88 100644
--- a/holidays/calendars/hindu.py
+++ b/holidays/calendars/hindu.py
@@ -35,6 +35,7 @@
 MAHAVIR_JAYANTI = "MAHAVIR_JAYANTI"
 MAKAR_SANKRANTI = "MAKAR_SANKRANTI"
 ONAM = "ONAM"
+PONGAL = "PONGAL"
 RAKSHA_BANDHAN = "RAKSHA_BANDHAN"
 RAM_NAVAMI = "RAM_NAVAMI"
 SHARAD_NAVRATRI = "SHARAD_NAVRATRI"
@@ -865,6 +866,44 @@ class _HinduLunisolar:
         2035: (SEP, 14),
     }
 
+    PONGAL_DATES = {
+        2001: (JAN, 14),
+        2002: (JAN, 14),
+        2003: (JAN, 15),
+        2004: (JAN, 15),
+        2005: (JAN, 14),
+        2006: (JAN, 14),
+        2007: (JAN, 15),
+        2008: (JAN, 15),
+        2009: (JAN, 14),
+        2010: (JAN, 14),
+        2011: (JAN, 15),
+        2012: (JAN, 15),
+        2013: (JAN, 14),
+        2014: (JAN, 14),
+        2015: (JAN, 15),
+        2016: (JAN, 15),
+        2017: (JAN, 14),
+        2018: (JAN, 14),
+        2019: (JAN, 15),
+        2020: (JAN, 15),
+        2021: (JAN, 14),
+        2022: (JAN, 14),
+        2023: (JAN, 15),
+        2024: (JAN, 15),
+        2025: (JAN, 14),
+        2026: (JAN, 14),
+        2027: (JAN, 15),
+        2028: (JAN, 15),
+        2029: (JAN, 14),
+        2030: (JAN, 14),
+        2031: (JAN, 15),
+        2032: (JAN, 15),
+        2033: (JAN, 14),
+        2034: (JAN, 14),
+        2035: (JAN, 15),
+    }
+
     # https://www.timeanddate.com/holidays/india/raksha-bandhan
     RAKSHA_BANDHAN_DATES = {
         2001: (AUG, 4),
@@ -1270,6 +1309,9 @@ def guru_nanak_jayanti_date(self, year: int) -> tuple[Optional[date], bool]:
     def holi_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(HOLI, year)
 
+    def pongal_date(self, year: int) -> tuple[Optional[date], bool]:
+        return self._get_holiday(PONGAL, year)
+
     def janmashtami_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(JANMASHTAMI, year)
 
diff --git a/holidays/countries/india.py b/holidays/countries/india.py
index 56ee2be0a5..9df9989321 100644
--- a/holidays/countries/india.py
+++ b/holidays/countries/india.py
@@ -37,6 +37,9 @@ class India(
         * <https://www.calendarlabs.com/holidays/india/2021>
         * <https://slusi.dacnet.nic.in/watershedatlas/list_of_state_abbreviation.htm>
         * <https://vahan.parivahan.gov.in/vahan4dashboard/>
+        * Tamil Nadu:
+            * [Tamil Monthly Calendar](https://www.tamildailycalendar.com/tamil_monthly_calendar.php)
+            * [Tamil Calendar](https://www.prokerala.com/general/calendar/tamilcalendar.php)
     """
 
     country = "IN"
@@ -456,7 +459,11 @@ def _populate_subdiv_sk_public_holidays(self):
     # Tamil Nadu.
     def _populate_subdiv_tn_public_holidays(self):
         # Pongal.
-        self._add_makar_sankranti(tr("Pongal"))
+        self._add_pongal(tr("Pongal"))
+        # Thiruvalluvar Day / Mattu Pongal.
+        self._add_thiruvalluvar_day(tr("Thiruvalluvar Day / Mattu Pongal"))
+        # Uzhavar Thirunal.
+        self._add_uzhavar_thirunal(tr("Uzhavar Thirunal"))
         # Dr. B. R. Ambedkar Jayanti.
         self._add_holiday_apr_14(tr("Dr. B. R. Ambedkar's Jayanti"))
         # Puthandu.
diff --git a/holidays/groups/hindu.py b/holidays/groups/hindu.py
index e08c156d94..6843cf1a6b 100644
--- a/holidays/groups/hindu.py
+++ b/holidays/groups/hindu.py
@@ -28,7 +28,7 @@ def __init__(self, cls=None, show_estimated=False) -> None:
         self._hindu_calendar_show_estimated = show_estimated
 
     def _add_hindu_calendar_holiday(
-        self, name: str, dt_estimated: tuple[Optional[date], bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
     ) -> Optional[date]:
         """
         Add Hindu calendar holiday.
@@ -38,7 +38,7 @@ def _add_hindu_calendar_holiday(
         """
 
         return self._add_eastern_calendar_holiday(
-            name, dt_estimated, self._hindu_calendar_show_estimated
+            name, dt_estimated, self._hindu_calendar_show_estimated, days_delta
         )
 
     def _add_hindu_calendar_holiday_set(
@@ -256,6 +256,18 @@ def _add_onam(self, name) -> Optional[date]:
         """
         return self._add_hindu_calendar_holiday(name, self._hindu_calendar.onam_date(self._year))
 
+    def _add_pongal(self, name) -> Optional[date]:
+        """
+        Add Pongal.
+
+        Pongal is a major harvest festival celebrated in Tamil Nadu, India, marking the
+        beginning of the sun's northward journey (Uttarayana). It is usually observed
+        on January 14th or 15th every year, coinciding with the Tamil month of Thai.
+        The festival is dedicated to the Sun God and marks a season of prosperity and abundance.
+        https://en.wikipedia.org/wiki/Pongal_(festival)
+        """
+        return self._add_hindu_calendar_holiday(name, self._hindu_calendar.pongal_date(self._year))
+
     def _add_raksha_bandhan(self, name) -> Optional[date]:
         """
         Add Raksha Bandhan.
@@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
+        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
+        )
+
     def _add_vaisakhi(self, name) -> Optional[date]:
         """
         Add Vaisakhi.
diff --git a/holidays/locale/en_IN/LC_MESSAGES/IN.po b/holidays/locale/en_IN/LC_MESSAGES/IN.po
index 7e321e12aa..fe3deb1e2e 100644
--- a/holidays/locale/en_IN/LC_MESSAGES/IN.po
+++ b/holidays/locale/en_IN/LC_MESSAGES/IN.po
@@ -14,7 +14,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.69\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2025-02-28 02:31+0530\n"
 "PO-Revision-Date: 2025-03-01 15:11+0530\n"
 "Last-Translator: Ankush Kapoor <work.ankushkapoor1626@gmail.com>\n"
@@ -306,3 +306,11 @@ msgstr ""
 #. Buddha Purnima.
 msgid "Buddha Purnima"
 msgstr ""
+
+#. Thiruvalluvar Day / Mattu Pongal.
+msgid "Thiruvalluvar Day / Mattu Pongal"
+msgstr ""
+
+#. Uzhavar Thirunal.
+msgid "Uzhavar Thirunal"
+msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/IN.po b/holidays/locale/en_US/LC_MESSAGES/IN.po
index 2924b9f822..6167109020 100644
--- a/holidays/locale/en_US/LC_MESSAGES/IN.po
+++ b/holidays/locale/en_US/LC_MESSAGES/IN.po
@@ -14,7 +14,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.69\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2025-03-02 12:31+0530\n"
 "PO-Revision-Date: 2025-03-02 12:54+0530\n"
 "Last-Translator: Ankush Kapoor <work.ankushkapoor1626@gmail.com>\n"
@@ -307,3 +307,11 @@ msgstr "Magh Bihu"
 #. Buddha Purnima.
 msgid "Buddha Purnima"
 msgstr "Buddha Purnima"
+
+#. Thiruvalluvar Day / Mattu Pongal.
+msgid "Thiruvalluvar Day / Mattu Pongal"
+msgstr "Thiruvalluvar Day / Mattu Pongal"
+
+#. Uzhavar Thirunal.
+msgid "Uzhavar Thirunal"
+msgstr "Uzhavar Thirunal"
diff --git a/holidays/locale/hi/LC_MESSAGES/IN.po b/holidays/locale/hi/LC_MESSAGES/IN.po
index 86b400c3de..dd28b20691 100644
--- a/holidays/locale/hi/LC_MESSAGES/IN.po
+++ b/holidays/locale/hi/LC_MESSAGES/IN.po
@@ -14,7 +14,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.69\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2025-02-28 01:24+0530\n"
 "PO-Revision-Date: 2025-03-01 15:11+0530\n"
 "Last-Translator: Ankush Kapoor <work.ankushkapoor1626@gmail.com>\n"
@@ -306,3 +306,11 @@ msgstr "माघ बिहू"
 #. Buddha Purnima.
 msgid "Buddha Purnima"
 msgstr "बुद्ध पूर्णिमा"
+
+#. Thiruvalluvar Day / Mattu Pongal.
+msgid "Thiruvalluvar Day / Mattu Pongal"
+msgstr "तिरुवल्लुवर दिवस / मट्टू पोंगल"
+
+#. Uzhavar Thirunal.
+msgid "Uzhavar Thirunal"
+msgstr "उझावर थिरुनल"
diff --git a/tests/countries/test_india.py b/tests/countries/test_india.py
index 07dc3624f9..2dd385b4f3 100644
--- a/tests/countries/test_india.py
+++ b/tests/countries/test_india.py
@@ -147,6 +147,8 @@ def test_2018(self):
             ),
             "TN": (
                 "2018-01-14",
+                "2018-01-15",
+                "2018-01-16",
                 "2018-04-14",
             ),
             "TS": (
@@ -393,6 +395,32 @@ def test_ranged_subdiv_holidays(self):
             else:
                 self.assertNoHolidayName(name, India(subdiv=subdiv), dt)
 
+        dt = (
+            "2001-01-15",
+            "2010-01-15",
+            "2025-01-15",
+            "2035-01-16",
+        )
+        name = "Thiruvalluvar Day / Mattu Pongal"
+        for subdiv in India.subdivisions:
+            if subdiv in {"TN"}:
+                self.assertHolidayName(name, India(subdiv=subdiv), dt)
+            else:
+                self.assertNoHolidayName(name, India(subdiv=subdiv), dt)
+
+        dt = (
+            "2001-01-16",
+            "2010-01-16",
+            "2025-01-16",
+            "2035-01-17",
+        )
+        name = "Uzhavar Thirunal"
+        for subdiv in India.subdivisions:
+            if subdiv in {"TN"}:
+                self.assertHolidayName(name, India(subdiv=subdiv), dt)
+            else:
+                self.assertNoHolidayName(name, India(subdiv=subdiv), dt)
+
     def test_ranged_optional_holidays(self):
         opt_holidays = India(categories=OPTIONAL)
 
@@ -501,6 +529,8 @@ def test_l10n_default(self):
         self.assertLocalizedHolidays(
             ("2018-01-13", "Lohri"),
             ("2018-01-14", "Magh Bihu; Makar Sankranti; Pongal; Uttarayan"),
+            ("2018-01-15", "Thiruvalluvar Day / Mattu Pongal"),
+            ("2018-01-16", "Uzhavar Thirunal"),
             ("2018-01-24", "UP Formation Day"),
             ("2018-01-26", "Republic Day"),
             ("2018-02-13", "Maha Shivaratri"),
@@ -567,6 +597,8 @@ def test_l10n_hi(self):
             "hi",
             ("2018-01-13", "लोहड़ी"),
             ("2018-01-14", "उत्तरायण; पोंगल; मकर संक्रांति; माघ बिहू"),
+            ("2018-01-15", "तिरुवल्लुवर दिवस / मट्टू पोंगल"),
+            ("2018-01-16", "उझावर थिरुनल"),
             ("2018-01-24", "यूपी स्थापना दिवस"),
             ("2018-01-26", "गणतंत्र दिवस"),
             ("2018-02-13", "महाशिवरात्रि"),
@@ -628,6 +660,8 @@ def test_l10n_en_us(self):
             "en_US",
             ("2018-01-13", "Lohri"),
             ("2018-01-14", "Magh Bihu; Makar Sankranti; Pongal; Uttarayan"),
+            ("2018-01-15", "Thiruvalluvar Day / Mattu Pongal"),
+            ("2018-01-16", "Uzhavar Thirunal"),
             ("2018-01-24", "UP Formation Day"),
             ("2018-01-26", "Republic Day"),
             ("2018-02-13", "Maha Shivaratri"),


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 2af98c26dd8c2d30eef8ff50e269dd49d926dd61 and 59879cd768eb2b3a45a596a7e3d5daff5b7f25f4.

</details>

<details>
<summary>📒 Files selected for processing (7)</summary>

* `holidays/calendars/hindu.py` (5 hunks)
* `holidays/countries/india.py` (1 hunks)
* `holidays/groups/hindu.py` (2 hunks)
* `holidays/locale/en_IN/LC_MESSAGES/IN.po` (2 hunks)
* `holidays/locale/en_US/LC_MESSAGES/IN.po` (2 hunks)
* `holidays/locale/hi/LC_MESSAGES/IN.po` (2 hunks)
* `tests/countries/test_india.py` (4 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (3)</summary>

<details>
<summary>holidays/countries/india.py (1)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (3)</summary>

* `_add_pongal` (259-269)
* `_add_thiruvalluvar_day` (321-335)
* `_add_uzhavar_thirunal` (337-349)

</details>

</blockquote></details>
<details>
<summary>holidays/groups/hindu.py (1)</summary><blockquote>

<details>
<summary>holidays/calendars/hindu.py (3)</summary>

* `pongal_date` (1390-1391)
* `thiruvalluvar_day_date` (1423-1424)
* `uzhavar_thirunal_date` (1426-1427)

</details>

</blockquote></details>
<details>
<summary>holidays/calendars/hindu.py (1)</summary><blockquote>

<details>
<summary>holidays/calendars/buddhist.py (1)</summary>

* `_get_holiday` (430-434)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (19)</summary><blockquote>

<details>
<summary>holidays/locale/en_IN/LC_MESSAGES/IN.po (2)</summary>

`17-17`: **Project version updated correctly.**

Version number has been updated from 0.69 to 0.72, maintaining consistency with other locale files.

---

`309-316`: **New holiday entries added properly.**

The two new holidays for Tamil Nadu - "Thiruvalluvar Day / Mattu Pongal" and "Uzhavar Thirunal" - have been correctly added to the translation file following the existing format. Both entries have empty msgstr fields which is appropriate for the en_IN locale since the original holiday names are already in English.

</details>
<details>
<summary>holidays/locale/en_US/LC_MESSAGES/IN.po (2)</summary>

`17-17`: **Project version updated correctly.**

Version number has been updated from 0.69 to 0.72, maintaining consistency with other locale files.

---

`310-317`: **New holiday entries properly added with translations.**

The two new holidays for Tamil Nadu - "Thiruvalluvar Day / Mattu Pongal" and "Uzhavar Thirunal" - have been correctly added and translated for the US English locale. The translation strings match the source strings as expected for English variants.

</details>
<details>
<summary>holidays/locale/hi/LC_MESSAGES/IN.po (2)</summary>

`17-17`: **Project version updated correctly.**

Version number has been updated from 0.69 to 0.72, maintaining consistency with other locale files.

---

`310-316`: **Hindi translations added correctly for new Tamil Nadu holidays.**

The Hindi translations for "Thiruvalluvar Day / Mattu Pongal" (तिरुवल्लुवर दिवस / मट्टू पोंगल) and "Uzhavar Thirunal" (उझावर थिरुनल) have been properly implemented, following the translation pattern for other regional holidays.

</details>
<details>
<summary>tests/countries/test_india.py (4)</summary>

`149-151`: **Test coverage added for the new Tamil Nadu holidays.**

The test case now correctly verifies the two new Tamil Nadu holidays: Thiruvalluvar Day / Mattu Pongal (Jan 15) and Uzhavar Thirunal (Jan 16) for 2018. This matches the implementation of the Pongal festival sequence.

---

`506-507`: **Localization test updated with new holiday names.**

The default locale test has been properly updated to include the localized names for the newly added Tamil Nadu holidays. This ensures that the holiday names are correctly displayed in the default locale.

---

`574-575`: **Hindi localization added for the new holidays.**

The Hindi locale test has been correctly updated with translated names for the new Tamil Nadu holidays. The translations appear to be appropriate Hindi equivalents for Thiruvalluvar Day / Mattu Pongal and Uzhavar Thirunal.

---

`637-638`: **US English localization verified for the new holidays.**

The US English locale test has been appropriately updated with the English names for the Tamil Nadu holidays. The names match those in the default locale, ensuring consistency across English variants.

</details>
<details>
<summary>holidays/groups/hindu.py (3)</summary>

`259-270`: **Well-documented Pongal holiday method added.**

The `_add_pongal` method is well implemented with a comprehensive docstring that clearly explains:
- What Pongal is (a major harvest festival in Tamil Nadu)
- When it's observed (January 14-15)
- Its significance (sun's northward journey, prosperity season)
- A reference link to Wikipedia

The implementation correctly uses the Hindu calendar to retrieve the appropriate date.

---

`321-336`: **Clear implementation of Thiruvalluvar Day method.**

The `_add_thiruvalluvar_day` method properly implements the holiday with a thorough docstring explaining:
- The dual nature of the holiday (Thiruvalluvar Day and Mattu Pongal)
- The cultural significance of honoring both the Tamil poet and cattle
- The timing (January 15-16, part of Pongal festival)
- Wikipedia references for both aspects

The implementation follows the established pattern for adding Hindu calendar holidays.

---

`337-349`: **Uzhavar Thirunal method completes the Pongal holiday sequence.**

The `_add_uzhavar_thirunal` method rounds out the Pongal festival sequence with:
- Clear explanation of the farmers' harvest festival
- Proper timing (January 16-17)
- Appropriate Wikipedia reference
- Consistent implementation pattern

This completes the set of methods needed for the Tamil Nadu Pongal festival sequence.

</details>
<details>
<summary>holidays/calendars/hindu.py (6)</summary>

`38-44`: **New holiday constants added in alphabetical order.**

The new constants `PONGAL`, `THIRUVALLUVAR_DAY`, and `UZHAVAR_THIRUNAL` have been properly added to the list of constants, maintaining the alphabetical ordering that helps with code readability and maintenance.

---

`871-907`: **Pongal date mappings follow established pattern.**

The `PONGAL_DATES` dictionary is correctly implemented with:
- Comprehensive coverage from 2001-2035
- Dates follow the expected January 14-15 pattern (Jan 14 in standard years, Jan 15 in leap years and certain other years)
- Format consistent with other holiday date mappings

This provides a reliable date source for the Pongal holiday calculations.

---

`1229-1265`: **Thiruvalluvar Day dates properly mapped.**

The `THIRUVALLUVAR_DAY_DATES` dictionary correctly:
- Covers years 2001-2035
- Places the holiday on January 15-16 (the day after Pongal)
- Maintains the consistent format of other date mappings

This ensures the Thiruvalluvar Day / Mattu Pongal holiday is correctly placed in the sequence of Pongal celebrations.

---

`1267-1303`: **Uzhavar Thirunal dates complete the festival sequence.**

The `UZHAVAR_THIRUNAL_DATES` dictionary properly:
- Spans 2001-2035
- Places the holiday on January 16-17 (the day after Thiruvalluvar Day)
- Follows the consistent pattern of the other date mappings

This completes the date sequence for the four-day Pongal celebration as observed in Tamil Nadu.

---

`1390-1392`: **Pongal date retrieval method added.**

The `pongal_date` method correctly implements the date retrieval by calling the common `_get_holiday` helper with the appropriate constant and year. This follows the established pattern for holiday date access.

---

`1423-1428`: **Date retrieval methods for other Pongal-related holidays.**

The `thiruvalluvar_day_date` and `uzhavar_thirunal_date` methods correctly implement the date retrieval functionality following the established pattern of other holiday date methods in the class. These complete the API needed for the Tamil Nadu holidays.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-26T14:06:39Z
user: login: KJhellico
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-26T14:53:14Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🔭 Outside diff range comments (1)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (1)</summary><blockquote>

`30-42`: _🛠️ Refactor suggestion_

**Method signature needs updating for new use cases**

The existing `_add_hindu_calendar_holiday` method doesn't support the `days_delta` parameter needed by the new holiday methods.


As suggested in previous review comments, you should update this method to include the `days_delta` parameter:

```diff
    def _add_hindu_calendar_holiday(
-        self, name: str, dt_estimated: tuple[Optional[date], bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
    ) -> Optional[date]:
        """
        Add Hindu calendar holiday.

        Adds customizable estimation label to holiday name if holiday date
        is an estimation.
        """

        return self._add_eastern_calendar_holiday(
-            name, dt_estimated, self._hindu_calendar_show_estimated
+            name, dt_estimated, self._hindu_calendar_show_estimated, days_delta
        )
```

This approach would make the new method calls work correctly and eliminate the need for separate calendar constants for related holidays.

</blockquote></details>

</blockquote></details>

<details>
<summary>♻️ Duplicate comments (1)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (1)</summary><blockquote>

`337-349`: _⚠️ Potential issue_

**Parameter mismatch in method call**

The same issue exists here - the `_add_hindu_calendar_holiday` method doesn't accept a `days_delta` parameter.



Apply the same fix pattern as for the previous method:
```diff
-        return self._add_hindu_calendar_holiday(
-            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
-        )
+        return self._add_eastern_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), self._hindu_calendar_show_estimated, days_delta=+2
+        )
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 6cf47e4424f81acd23b3f3ecc24e72c902e1d8d0 and 2f4ce474e0f69c311fac775eccab8f99dc249221.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `holidays/groups/hindu.py` (2 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (1)</summary>

<details>
<summary>holidays/groups/hindu.py (1)</summary><blockquote>

<details>
<summary>holidays/calendars/hindu.py (1)</summary>

* `pongal_date` (1390-1391)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (1)</summary>

`259-269`: **Well-structured addition of Pongal holiday method**

This implementation follows the established pattern of other Hindu calendar holidays in the class. The docstring provides clear cultural context with appropriate Wikipedia reference.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-26T15:17:52Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 2f4ce474e0f69c311fac775eccab8f99dc249221 and 2e17c1653bd0ca2d26d43978dacc17ba2dba441c.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `holidays/groups/hindu.py` (2 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (1)</summary>

<details>
<summary>holidays/groups/hindu.py (2)</summary><blockquote>

<details>
<summary>holidays/calendars/hindu.py (1)</summary>

* `pongal_date` (1390-1391)

</details>
<details>
<summary>holidays/groups/eastern.py (1)</summary>

* `_add_eastern_calendar_holiday` (24-51)

</details>

</blockquote></details>

</details><details>
<summary>🪛 Ruff (0.8.2)</summary>

<details>
<summary>holidays/groups/hindu.py</summary>

333-333: SyntaxError: Expected an identifier, but found a keyword 'return' that cannot be used here

---

333-333: SyntaxError: Simple statements must be separated by newlines or semicolons

---

335-335: SyntaxError: Expected an expression

---

336-336: SyntaxError: Expected an identifier, but found a keyword 'return' that cannot be used here

---

336-336: SyntaxError: Simple statements must be separated by newlines or semicolons

---

340-340: SyntaxError: Expected a parameter name

---

341-341: SyntaxError: Positional argument cannot follow keyword argument

---

341-341: SyntaxError: Expected an expression

---

343-343: SyntaxError: Unexpected indentation

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (2)</summary>

`259-269`: **Implementation of Pongal holiday looks good!**

This new method correctly adds the Pongal festival holiday following the same pattern as other Hindu holidays in the file. The comprehensive docstring provides clear context about the festival's significance and timing.

---

`321-341`: **Good fix for parameter handling!**

You've correctly updated the implementation to use `_add_eastern_calendar_holiday` directly with the appropriate parameters instead of using `_add_hindu_calendar_holiday`. This addresses the parameter mismatch issue identified in previous reviews.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 Ruff (0.8.2)</summary>

333-333: SyntaxError: Expected an identifier, but found a keyword 'return' that cannot be used here

---

333-333: SyntaxError: Simple statements must be separated by newlines or semicolons

---

335-335: SyntaxError: Expected an expression

---

336-336: SyntaxError: Expected an identifier, but found a keyword 'return' that cannot be used here

---

336-336: SyntaxError: Simple statements must be separated by newlines or semicolons

---

340-340: SyntaxError: Expected a parameter name

---

341-341: SyntaxError: Positional argument cannot follow keyword argument

---

341-341: SyntaxError: Expected an expression

</details>

</details>

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-26T16:28:17Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 2e17c1653bd0ca2d26d43978dacc17ba2dba441c and 9a78ecce59477347d4d929cfd2bbce97b0fbb1a7.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `holidays/calendars/hindu.py` (3 hunks)

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>holidays/calendars/hindu.py (2)</summary>

`38-38`: **Nice addition of the PONGAL constant**  
The new `PONGAL` constant aligns perfectly with the existing holiday constants and sets up the new date method.

---

`1312-1314`: **Method signature follows established pattern**  
The `pongal_date` method correctly delegates to `_get_holiday` and mirrors the signatures of the other date methods.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-26T16:36:44Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 12a922e24f2af7503d413a4e433833c39abe471a and d14aa1fef49e2e534a029d42a108a48ab42430d1.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `holidays/groups/hindu.py` (4 hunks)

</details>

<details>
<summary>🔇 Additional comments (4)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (4)</summary>

`31-42`: **Good implementation of days_delta parameter**

The addition of the days_delta parameter to _add_hindu_calendar_holiday is well-implemented. The validation check for None before applying timedelta is a smart defensive programming approach.

---

`259-269`: **Well-documented Pongal implementation**

The Pongal method is well-implemented with comprehensive documentation explaining the festival's significance, timing, and cultural context.

---

`321-335`: **Well-documented Thiruvalluvar Day implementation**

Good implementation of the Thiruvalluvar Day / Mattu Pongal holiday with a clear days_delta of 1 from Pongal. The documentation provides excellent context about this Tamil Nadu celebration.

---

`337-349`: **Well-documented Uzhavar Thirunal implementation**

Good implementation of Uzhavar Thirunal with appropriate days_delta of 2 from Pongal. The documentation clearly explains the significance of this farmers' celebration day.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-27T04:42:08Z
user: login: KJhellico
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-27T09:22:52Z
user: login: KJhellico
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-27T20:19:59Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3e441910f01fd06cad44def455d298193e7959ac and 7fa14880fea5b31780a2631a0ba7daeb0078cc70.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `holidays/countries/india.py` (2 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (1)</summary>

<details>
<summary>holidays/countries/india.py (1)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (3)</summary>

* `_add_pongal` (259-269)
* `_add_thiruvalluvar_day` (321-335)
* `_add_uzhavar_thirunal` (337-349)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>holidays/countries/india.py (1)</summary>

`40-41`: **Good addition of Tamil calendar reference sources.**

Adding these reference URLs directly supports the PR objective of accurately representing Tamil Nadu holidays. These sources provide authoritative data for calculating the traditional Pongal festival dates.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-28T15:12:36Z
user: login: KJhellico
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-28T16:44:31Z
user: login: KJhellico
body: LGTM.
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-28T19:00:07Z
user: login: arkid15r
body: Nicely done, thanks @tr33k 👍 
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-28T20:13:09Z

Review comments:
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.thiruvalluvar_day_date(self._year)
path: holidays/groups/hindu.py
user: login: KJhellico
body: ```suggestion
            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
```
created_at: 2025-04-26T14:49:36Z
author_association: COLLABORATOR
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.thiruvalluvar_day_date(self._year)
+        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.uzhavar_thirunal_date(self._year)
path: holidays/groups/hindu.py
user: login: KJhellico
body: ```suggestion
            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
```
created_at: 2025-04-26T14:49:48Z
author_association: COLLABORATOR
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.thiruvalluvar_day_date(self._year)
+        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.uzhavar_thirunal_date(self._year)
path: holidays/groups/hindu.py
user: login: KJhellico
body: And update `_add_hindu_calendar_holiday()` method as
```python
    def _add_hindu_calendar_holiday(
        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
    ) -> Optional[date]:
        """
        Add Hindu calendar holiday.

        Adds customizable estimation label to holiday name if holiday date
        is an estimation.
        """

        return self._add_eastern_calendar_holiday(
            name, dt_estimated, self._hindu_calendar_show_estimated, days_delta
        )
```
Then we don't need THIRUVALLUVAR_DAY and UZHAVAR_THIRUNAL in calendar.
created_at: 2025-04-26T14:52:29Z
author_association: COLLABORATOR
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
+        )
path: holidays/groups/hindu.py
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Parameter mismatch in method call**

The `_add_hindu_calendar_holiday` method (lines 30-32) doesn't have a `days_delta` parameter, but you're passing it here. This will cause a runtime error.


Based on past review comments, update the method call to match the suggestion:
```diff
-        return self._add_hindu_calendar_holiday(
-            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
-        )
+        return self._add_eastern_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), self._hindu_calendar_show_estimated, days_delta=+1
+        )
```

Alternatively, modify the `_add_hindu_calendar_holiday` method to include the `days_delta` parameter as suggested in the past review comments.


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
        """
        Add Thiruvalluvar Day and Mattu Pongal.

        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
        their importance in agriculture. Both events usually fall on January 15th or 16th
        each year during the Tamil month of Thai.
        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
        """
-        return self._add_hindu_calendar_holiday(
-            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
-        )
+        return self._add_eastern_calendar_holiday(
+            name,
+            self._hindu_calendar.pongal_date(self._year),
+            self._hindu_calendar_show_estimated,
+            days_delta=+1,
+        )
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-26T15:17:52Z
author_association: CONTRIBUTOR
diff_hunk: @@ -306,6 +318,42 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+-        return self._add_hindu_calendar_holiday(
+-            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
+-        )
++        return self._add_eastern_calendar_holiday(
++            name,
++            self._hindu_calendar.pongal_date(self._year),
++            self._hindu_calendar_show_estimated,
++            days_delta=+1,
++        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
+        )
path: holidays/groups/hindu.py
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Same fix needed for Uzhavar Thirunal method**

This method still uses `_add_hindu_calendar_holiday` with a `days_delta` parameter, which will cause the same parameter mismatch issue that was fixed in the `_add_thiruvalluvar_day` method.


Please update the implementation to match the pattern used for Thiruvalluvar Day:

```diff
-    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
-        """
-        Add Uzhavar Thirunal.
-
-        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
-        as part of the Pongal festivities. It is dedicated to honoring farmers
-        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
-        falls on January 16th or 17th each year.
-        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
-        """
-        return self._add_hindu_calendar_holiday(
-            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
-        )
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_eastern_calendar_holiday(
+            name,
+            self._hindu_calendar.pongal_date(self._year),
+            self._hindu_calendar_show_estimated,
+            days_delta=+2,
+        )
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
        """
        Add Uzhavar Thirunal.

        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
        as part of the Pongal festivities. It is dedicated to honoring farmers
        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
        falls on January 16th or 17th each year.
        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
        """
        return self._add_eastern_calendar_holiday(
            name,
            self._hindu_calendar.pongal_date(self._year),
            self._hindu_calendar_show_estimated,
            days_delta=+2,
        )
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 Ruff (0.8.2)</summary>

343-343: SyntaxError: Unexpected indentation

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-26T16:28:16Z
author_association: CONTRIBUTOR
diff_hunk: @@ -865,6 +866,44 @@ class _HinduLunisolar:
         2035: (SEP, 14),
     }
 
+    PONGAL_DATES = {
+        2001: (JAN, 14),
+        2002: (JAN, 14),
+        2003: (JAN, 15),
+        2004: (JAN, 15),
+        2005: (JAN, 14),
+        2006: (JAN, 14),
+        2007: (JAN, 15),
+        2008: (JAN, 15),
+        2009: (JAN, 14),
+        2010: (JAN, 14),
+        2011: (JAN, 15),
+        2012: (JAN, 15),
+        2013: (JAN, 14),
+        2014: (JAN, 14),
+        2015: (JAN, 15),
+        2016: (JAN, 15),
+        2017: (JAN, 14),
+        2018: (JAN, 14),
+        2019: (JAN, 15),
+        2020: (JAN, 15),
+        2021: (JAN, 14),
+        2022: (JAN, 14),
+        2023: (JAN, 15),
+        2024: (JAN, 15),
+        2025: (JAN, 14),
+        2026: (JAN, 14),
+        2027: (JAN, 15),
+        2028: (JAN, 15),
+        2029: (JAN, 14),
+        2030: (JAN, 14),
+        2031: (JAN, 15),
+        2032: (JAN, 15),
+        2033: (JAN, 14),
+        2034: (JAN, 14),
+        2035: (JAN, 15),
+    }
path: holidays/calendars/hindu.py
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Consider adding a source comment and extending coverage**  
All other date mappings include a URL comment pointing to the reference (e.g., timeanddate.com). Adding a similar comment above `PONGAL_DATES` will aid future maintainability. Also, since other holidays map out to 2100, you might consider either extending the `PONGAL_DATES` range beyond 2035 or implementing a fallback strategy (e.g., a simple formula) for years outside the precomputed range.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-26T16:36:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -28,17 +28,17 @@ def __init__(self, cls=None, show_estimated=False) -> None:
         self._hindu_calendar_show_estimated = show_estimated
 
     def _add_hindu_calendar_holiday(
-        self, name: str, dt_estimated: tuple[Optional[date], bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
     ) -> Optional[date]:
         """
-        Add Hindu calendar holiday.
-
-        Adds customizable estimation label to holiday name if holiday date
-        is an estimation.
+        Add Hindu calendar holiday with optional day offset.
         """
+        if dt_estimated[0] is None:
+            return None
 
+        dt = dt_estimated[0] + timedelta(days=days_delta)
         return self._add_eastern_calendar_holiday(
-            name, dt_estimated, self._hindu_calendar_show_estimated
+            name, (dt, dt_estimated[1]), self._hindu_calendar_show_estimated
         )
path: holidays/groups/hindu.py
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Consider consistency in days_delta handling**

There's a potential inconsistency in how days_delta is handled between _add_hindu_calendar_holiday and _add_hindu_calendar_holiday_set. In this method, you apply days_delta manually, while in _add_hindu_calendar_holiday_set (line 56), you pass it as a parameter to _add_eastern_calendar_holiday.

Both methods should use the same approach to avoid unexpected behavior.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-27T04:42:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.thiruvalluvar_day_date(self._year)
+        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.uzhavar_thirunal_date(self._year)
path: holidays/groups/hindu.py
user: login: KJhellico
body: Why not simply use this code?
created_at: 2025-04-27T09:22:52Z
author_association: COLLABORATOR
diff_hunk: @@ -28,17 +28,17 @@ def __init__(self, cls=None, show_estimated=False) -> None:
         self._hindu_calendar_show_estimated = show_estimated
 
     def _add_hindu_calendar_holiday(
-        self, name: str, dt_estimated: tuple[Optional[date], bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
     ) -> Optional[date]:
         """
-        Add Hindu calendar holiday.
-
-        Adds customizable estimation label to holiday name if holiday date
-        is an estimation.
+        Add Hindu calendar holiday with optional day offset.
         """
+        if dt_estimated[0] is None:
+            return None
 
+        dt = dt_estimated[0] + timedelta(days=days_delta)
         return self._add_eastern_calendar_holiday(
-            name, dt_estimated, self._hindu_calendar_show_estimated
+            name, (dt, dt_estimated[1]), self._hindu_calendar_show_estimated
         )
path: holidays/groups/hindu.py
user: login: KJhellico
body: ```suggestion
    def _add_hindu_calendar_holiday(
        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
    ) -> Optional[date]:
        """
        Add Hindu calendar holiday.

        Adds customizable estimation label to holiday name if holiday date
        is an estimation.
        """

        return self._add_eastern_calendar_holiday(
            name, dt_estimated, self._hindu_calendar_show_estimated, days_delta
        )
```
created_at: 2025-04-27T20:18:37Z
author_association: COLLABORATOR
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=1
path: holidays/groups/hindu.py
user: login: KJhellico
body: ```suggestion
            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
```
created_at: 2025-04-27T20:18:57Z
author_association: COLLABORATOR
diff_hunk: @@ -306,6 +318,36 @@ def _add_thaipusam(self, name) -> Optional[date]:
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=1
+        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=2
path: holidays/groups/hindu.py
user: login: KJhellico
body: ```suggestion
            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
```
created_at: 2025-04-27T20:19:05Z
author_association: COLLABORATOR
diff_hunk: @@ -456,7 +458,11 @@ def _populate_subdiv_sk_public_holidays(self):
     # Tamil Nadu.
     def _populate_subdiv_tn_public_holidays(self):
         # Pongal.
-        self._add_makar_sankranti(tr("Pongal"))
+        self._add_pongal(tr("Pongal"))
+        # Thiruvalluvar Day / Mattu Pongal.
+        self._add_thiruvalluvar_day(tr("Thiruvalluvar Day / Mattu Pongal"))
+        # Uzhavar Thirunal.
+        self._add_uzhavar_thirunal(tr("Uzhavar Thirunal"))
path: holidays/countries/india.py
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Well-structured implementation of the Pongal festival sequence.**

The implementation now properly handles all three parts of the Pongal festival as separate holidays:
- Pongal (main festival)
- Thiruvalluvar Day / Mattu Pongal (day after Pongal) 
- Uzhavar Thirunal (day after Thiruvalluvar Day)

This is much more accurate than the previous implementation and correctly reflects the traditional sequence of celebrations in Tamil Nadu.


---

🏁 Script executed:

```shell
#!/bin/bash
# Check if all three methods exist in the Hindu holidays group

echo "Checking implementation of Hindu calendar methods for Pongal holidays:"
rg -A 2 "_add_(pongal|thiruvalluvar_day|uzhavar_thirunal)" holidays/groups/hindu.py

echo "Checking if there are tests for Tamil Nadu's Pongal holidays:"
rg -A 5 "test.*tamil.*nadu.*pongal" tests/
```

Length of output: 731

---



</details>

**Well-structured implementation; add test coverage for Pongal holidays**

Great job splitting the Pongal festival into three distinct holidays in `holidays/groups/hindu.py`. The methods below are correctly defined:

- `_add_pongal`
- `_add_thiruvalluvar_day`
- `_add_uzhavar_thirunal`

However, I couldn’t find any tests in the `tests/` directory that verify these events for Tamil Nadu. Please add or update tests (for example in `tests/countries/test_india.py`) to cover:

- Pongal (main festival)  
- Thiruvalluvar Day / Mattu Pongal  
- Uzhavar Thirunal  

This will ensure the new holiday logic remains covered and prevent regressions.

<details>
<summary>🤖 Prompt for AI Agents (early access)</summary>

```
In holidays/countries/india.py around lines 460 to 465, the Pongal festival is correctly split into three distinct holidays, but there are no corresponding tests to verify these events. Add or update test cases in tests/countries/test_india.py to cover the three holidays: Pongal, Thiruvalluvar Day / Mattu Pongal, and Uzhavar Thirunal, ensuring the new holiday logic is properly tested and protected against regressions.
```

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-28T15:12:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -37,6 +37,8 @@ class India(
         * <https://www.calendarlabs.com/holidays/india/2021>
         * <https://slusi.dacnet.nic.in/watershedatlas/list_of_state_abbreviation.htm>
         * <https://vahan.parivahan.gov.in/vahan4dashboard/>
+        * <https://www.tamildailycalendar.com/tamil_monthly_calendar.php>
+        * <https://www.prokerala.com/general/calendar/tamilcalendar.php>
path: holidays/countries/india.py
user: login: KJhellico
body: ```suggestion
        * Tamil Nadu:
            * [Tamil Monthly Calendar](https://www.tamildailycalendar.com/tamil_monthly_calendar.php)
            * [Tamil Calendar](https://www.prokerala.com/general/calendar/tamilcalendar.php)
```
created_at: 2025-04-28T16:44:31Z
author_association: COLLABORATOR

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-04-26T14:04:35Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Summary by CodeRabbit

- **New Features**
  - Added Pongal, Thiruvalluvar Day / Mattu Pongal, and Uzhavar Thirunal as official holidays for Tamil Nadu, India.
- **Localization**
  - Introduced translations for Thiruvalluvar Day / Mattu Pongal and Uzhavar Thirunal in Hindi and English (India and US variants).
- **Documentation**
  - Updated references for Tamil Nadu holidays in the documentation.
- **Tests**
  - Expanded test coverage to verify the addition and localization of the new Tamil Nadu holidays.
## Summary by CodeRabbit

- **New Features**
  - Added Pongal, Thiruvalluvar Day / Mattu Pongal, and Uzhavar Thirunal as recognized holidays for Tamil Nadu, India.
  - These holidays are now included in holiday listings and date calculations for the Tamil Nadu region.

- **Localization**
  - Introduced translations for Thiruvalluvar Day / Mattu Pongal and Uzhavar Thirunal in Hindi and Indian English locales.
  - Updated translation files to reflect the new holidays.

- **Tests**
  - Extended test coverage to verify the new holidays and their localized names for Tamil Nadu.

## Walkthrough

This update introduces three new Hindu holidays—Pongal, Thiruvalluvar Day / Mattu Pongal, and Uzhavar Thirunal—into the holiday calendar logic and Tamil Nadu's public holidays. The changes include new constants, date mappings, and methods for these holidays in the core calendar module, new methods in the Hindu holiday group, and updates to Tamil Nadu's holiday population method. Localization files for English (India and US) and Hindi are updated with entries for the new holidays, and tests are expanded to cover these additions and their localized names.

## Changes

| Files/Paths                                                                 | Change Summary                                                                                      |
|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| holidays/calendars/hindu.py                                                  | Added constant `PONGAL`, date mappings for Pongal (2001–2035), and method to retrieve Pongal date.|
| holidays/groups/hindu.py                                                     | Added methods `_add_pongal`, `_add_thiruvalluvar_day`, and `_add_uzhavar_thirunal` to add these holidays. |
| holidays/countries/india.py                                                  | Modified Tamil Nadu subdivision holiday population to replace Makar Sankranti with Pongal and add Thiruvalluvar Day and Uzhavar Thirunal. |
| holidays/locale/en_IN/LC_MESSAGES/IN.po<br>holidays/locale/en_US/LC_MESSAGES/IN.po<br>holidays/locale/hi/LC_MESSAGES/IN.po | Added new translation entries for "Thiruvalluvar Day / Mattu Pongal" and "Uzhavar Thirunal"; updated project version. |
| tests/countries/test_india.py                                                | Added tests for the new Tamil Nadu holidays and their localized names for multiple years.         |

## Assessment against linked issues

| Objective                                                                                         | Addressed | Explanation                                                                                     |
|--------------------------------------------------------------------------------------------------|-----------|------------------------------------------------------------------------------------------------|
| Add missing "Thiruvalluvar Day" and "Uzhavar Thinam" as separate holidays for Tamil Nadu (#2500) | ✅        |                                                                                                |
| Separate Pongal from Makar Sankranti to reflect correct dates in Tamil Nadu (#2500)               | ✅        |                                                                                                |
| Ensure holidays are correctly added only for Tamil Nadu subdivision (#2500)                       | ✅        |                                                                                                |

## Suggested reviewers

- KJhellico  
- PPsyrius

<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 7fa14880fea5b31780a2631a0ba7daeb0078cc70 and 73279571b8053ba4981117cc4bd4b8f9879553b3.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `holidays/countries/india.py` (2 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (1)</summary>

<details>
<summary>holidays/countries/india.py (1)</summary><blockquote>

<details>
<summary>holidays/groups/hindu.py (3)</summary>

* `_add_pongal` (259-269)
* `_add_thiruvalluvar_day` (321-335)
* `_add_uzhavar_thirunal` (337-349)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 300000ms (1)</summary>

* GitHub Check: Test build on windows-latest

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>holidays/countries/india.py (2)</summary>

`40-42`: **Well-structured documentation addition.**

The addition of Tamil calendar references directly supports the new implementation of Tamil Nadu holiday features. Good job including both sources that were used for historical date accuracy.

---

`462-466`: **Excellent implementation of the Pongal festival sequence.**

The implementation now properly handles all three parts of the Pongal festival as separate holidays:
- Pongal (main festival)
- Thiruvalluvar Day / Mattu Pongal (day after Pongal) 
- Uzhavar Thirunal (day after Thiruvalluvar Day)

This matches the traditional sequence observed in Tamil Nadu and properly uses the new methods from the Hindu holidays group. The implementation is accurate and consistent with the project's structure.

</details>

</blockquote></details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=vacanza/holidays&utm_content=2502):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: codecov[bot]
created_at: 2025-04-26T14:07:45Z
body: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2502?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`856390c`)](https://app.codecov.io/gh/vacanza/holidays/commit/856390cd907b7341762a096da75b03dfa66765de?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`7327957`)](https://app.codecov.io/gh/vacanza/holidays/commit/73279571b8053ba4981117cc4bd4b8f9879553b3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).
> Report is 1 commits behind head on dev.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff            @@
##               dev     #2502   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          215       215           
  Lines        13588     13600   +12     
  Branches      1931      1931           
=========================================
+ Hits         13588     13600   +12     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2502?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>
author_association: NONE
user: login: KJhellico
created_at: 2025-04-28T14:43:32Z
body: It's worth adding these links to References in India class docstring:
[Tamil Daily Calendar (2005–2025)](https://www.tamildailycalendar.com/tamil_monthly_calendar.php?month=01&year=2005&&msg=Tamil%20Monthly%20Calendar%202015)

[Prokerala Tamil Calendar (2001–2005)](https://www.prokerala.com/general/calendar/tamilcalendar.php?mon=january&sb=1&year=2003)
author_association: COLLABORATOR
user: login: sonarqubecloud[bot]
created_at: 2025-04-28T16:45:58Z
body: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2502) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [18.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2502&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2502)


author_association: NONE