Repository: vacanza/holidays
Pull request #2298 (2025-02-15 12:52:49)

Update `IslamicHolidays`: add an option whether to add estimation label to holiday name
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

Update `IslamicHolidays`: add an option whether to add estimation label to holiday name.
I believe that this feature is useful not only for testing, but also for real use.

## Type of change

<!--
  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!)
- [ ] Supported country/market holidays update (calendar discrepancy fix, localization)
- [x] 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.rst
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298)


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2298?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 [(`9488f6e`)](https://app.codecov.io/gh/vacanza/holidays/commit/9488f6ee061a74023e5433a2ac9cdfb5c1bedd7e?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`795db05`)](https://app.codecov.io/gh/vacanza/holidays/commit/795db059e7db5acc0c36db421afccf05d1e20679?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

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


```diff
@@            Coverage Diff            @@
##               dev     #2298   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          200       200           
  Lines        12232     12233    +1     
  Branches      1742      1742           
=========================================
+ Hits         12232     12233    +1     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2298?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).

sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298)


coderabbitai[bot]: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: review in progress by coderabbit.ai -->

> [!NOTE]
> Currently processing new changes in this PR. This may take a few minutes, please wait...
> 
> <details>
> <summary>📥 Commits</summary>
> 
> Reviewing files that changed from the base of the PR and between 3f52858ffc7647ff57b14daa0859a6ee9146ea58 and d0b6815956c687f05bcf2c64bff4b411f788cdff.
> 
> </details>
> 
> <details>
> <summary>📒 Files selected for processing (3)</summary>
> 
> * `holidays/countries/pakistan.py` (1 hunks)
> * `holidays/groups/islamic.py` (2 hunks)
> * `tests/countries/test_pakistan.py` (7 hunks)
> 
> </details>
> 
> ```ascii
>  ________________________________________________________________________
> < Making the Death Star fully operational, with zero exhaust port flaws. >
>  ------------------------------------------------------------------------
>   \
>    \   \
>         \ /\
>         ( )
>       .( o ).
> ```

<!-- end of auto-generated comment: review in progress by coderabbit.ai -->
<!-- usage_tips_start -->

> [!TIP]
> <details>
> <summary>CodeRabbit can suggest fixes for GitHub Check annotations.</summary>
> 
> Configure `reviews.tools.github-checks` in your project's settings in CodeRabbit to adjust the time to wait for GitHub Checks to complete.
> 
> </details>

<!-- usage_tips_end -->
<!-- tips_start -->

---



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

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai):

- 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 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 -->
sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2298&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2298&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2298)



Patch:
diff --git a/holidays/countries/afghanistan.py b/holidays/countries/afghanistan.py
index 4ef6c679..fc8b6aff 100644
--- a/holidays/countries/afghanistan.py
+++ b/holidays/countries/afghanistan.py
@@ -48,9 +48,15 @@ class Afghanistan(HolidayBase, InternationalHolidays, IslamicHolidays, PersianCa
     start_year = 1919
     weekend = {FRI, SAT}
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, AfghanistanIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=AfghanistanIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         PersianCalendarHolidays.__init__(self)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/albania.py b/holidays/countries/albania.py
index 5f261ca4..0ab0f74c 100644
--- a/holidays/countries/albania.py
+++ b/holidays/countries/albania.py
@@ -46,10 +46,16 @@ class Albania(
     # Law No. 7651 from 21.12.1992.
     start_year = 1993
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, AlbaniaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=AlbaniaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, AlbaniaStaticHolidays)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/algeria.py b/holidays/countries/algeria.py
index 1affb5b7..b9796ebf 100644
--- a/holidays/countries/algeria.py
+++ b/holidays/countries/algeria.py
@@ -33,9 +33,13 @@ class Algeria(HolidayBase, InternationalHolidays, IslamicHolidays):
     estimated_label = tr("(تقدير) %s")
     supported_languages = ("ar", "en_US", "fr")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/azerbaijan.py b/holidays/countries/azerbaijan.py
index f4d4ccbc..a7086afc 100644
--- a/holidays/countries/azerbaijan.py
+++ b/holidays/countries/azerbaijan.py
@@ -44,9 +44,15 @@ class Azerbaijan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
     supported_languages = ("az", "en_US", "uk")
     start_year = 1990
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, AzerbaijanIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=AzerbaijanIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, AzerbaijanStaticHolidays)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
         kwargs.setdefault("observed_since", 2006)
diff --git a/holidays/countries/bahrain.py b/holidays/countries/bahrain.py
index 9d01c00a..dc1384fa 100644
--- a/holidays/countries/bahrain.py
+++ b/holidays/countries/bahrain.py
@@ -34,9 +34,15 @@ class Bahrain(HolidayBase, InternationalHolidays, IslamicHolidays):
     supported_languages = ("ar", "en_US")
     weekend = {FRI, SAT}
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=BahrainIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=BahrainIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/bosnia_and_herzegovina.py b/holidays/countries/bosnia_and_herzegovina.py
index aa719f1d..53b89db0 100644
--- a/holidays/countries/bosnia_and_herzegovina.py
+++ b/holidays/countries/bosnia_and_herzegovina.py
@@ -73,10 +73,16 @@ class BosniaAndHerzegovina(
         "RS": "SRP",
     }
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=BosniaAndHerzegovinaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=BosniaAndHerzegovinaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/brunei.py b/holidays/countries/brunei.py
index 9737a90d..0f89f63c 100644
--- a/holidays/countries/brunei.py
+++ b/holidays/countries/brunei.py
@@ -130,11 +130,17 @@ class Brunei(
     # Available post-Independence from 1984 afterwards
     start_year = 1984
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChineseCalendarHolidays.__init__(self)
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=BruneiIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=BruneiIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=BruneiStaticHolidays)
         kwargs.setdefault("observed_rule", FRI_SUN_TO_NEXT_SAT_MON)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/burkina_faso.py b/holidays/countries/burkina_faso.py
index 94a05231..43720039 100644
--- a/holidays/countries/burkina_faso.py
+++ b/holidays/countries/burkina_faso.py
@@ -28,10 +28,16 @@ class BurkinaFaso(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
     # gained independence from France.
     start_year = 1961
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=BurkinaFasoIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=BurkinaFasoIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/burundi.py b/holidays/countries/burundi.py
index 6277db6e..da37ce42 100644
--- a/holidays/countries/burundi.py
+++ b/holidays/countries/burundi.py
@@ -30,10 +30,14 @@ class Burundi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isl
     observed_label = "%s (observed)"
     start_year = 1962
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/cameroon.py b/holidays/countries/cameroon.py
index 0f4dc05e..d235c73d 100644
--- a/holidays/countries/cameroon.py
+++ b/holidays/countries/cameroon.py
@@ -36,10 +36,16 @@ class Cameroon(
     # On 1 January 1960, French Cameroun gained independence from France.
     start_year = 1960
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=CameroonIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=CameroonIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=CameroonStaticHolidays)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_WORKDAY)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/chad.py b/holidays/countries/chad.py
index 2da7820d..78f4d73c 100644
--- a/holidays/countries/chad.py
+++ b/holidays/countries/chad.py
@@ -35,10 +35,16 @@ class Chad(
     # On 11 August 1960, Chad gained independence from France.
     start_year = 1961
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=ChadIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=ChadIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, ChadStaticHolidays)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/djibouti.py b/holidays/countries/djibouti.py
index 0b516eb2..d34a505d 100644
--- a/holidays/countries/djibouti.py
+++ b/holidays/countries/djibouti.py
@@ -27,9 +27,13 @@ class Djibouti(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHol
     # On 27 June 1977, Djibouti gained independence from France.
     start_year = 1978
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         InternationalHolidays.__init__(self)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/egypt.py b/holidays/countries/egypt.py
index 16c082f6..6d175878 100644
--- a/holidays/countries/egypt.py
+++ b/holidays/countries/egypt.py
@@ -35,10 +35,14 @@ class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolida
     supported_languages = ("ar", "en_US")
     weekend = {FRI, SAT}
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/ethiopia.py b/holidays/countries/ethiopia.py
index 674ee9ed..672487c9 100644
--- a/holidays/countries/ethiopia.py
+++ b/holidays/countries/ethiopia.py
@@ -43,10 +43,16 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
         """
         return isleap(self._year + 1)
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, EthiopiaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=EthiopiaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/gabon.py b/holidays/countries/gabon.py
index 26f6d23d..3f1efc1b 100644
--- a/holidays/countries/gabon.py
+++ b/holidays/countries/gabon.py
@@ -29,10 +29,16 @@ class Gabon(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolida
     # On 17 August 1960, Gabon gained independence from France.
     start_year = 1961
 
-    def __init__(self, *args, **kwargs) -> None:
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=GabonIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=GabonIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/ghana.py b/holidays/countries/ghana.py
index ba02b420..3c05e583 100644
--- a/holidays/countries/ghana.py
+++ b/holidays/countries/ghana.py
@@ -30,10 +30,14 @@ class Ghana(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Islam
     observed_estimated_label = "%s (observed, estimated)"
     start_year = 1957
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/india.py b/holidays/countries/india.py
index b6a5e4fd..b4b90453 100644
--- a/holidays/countries/india.py
+++ b/holidays/countries/india.py
@@ -71,9 +71,13 @@ class India(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolida
         "OR",  # Orissa.
     )
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         InternationalHolidays.__init__(self)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/indonesia.py b/holidays/countries/indonesia.py
index 7c787bb8..f2795d99 100644
--- a/holidays/countries/indonesia.py
+++ b/holidays/countries/indonesia.py
@@ -62,13 +62,19 @@ class Indonesia(
     supported_categories = (GOVERNMENT, PUBLIC)
     start_year = 1946
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         BalineseSakaCalendarHolidays.__init__(self)
         BuddhistCalendarHolidays.__init__(self, cls=IndonesiaBuddhistHolidays, show_estimated=True)
         ChineseCalendarHolidays.__init__(self, cls=IndonesiaChineseHolidays, show_estimated=True)
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=IndonesiaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=IndonesiaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=IndonesiaStaticHolidays)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/iran.py b/holidays/countries/iran.py
index 863ca5ff..302a00fb 100644
--- a/holidays/countries/iran.py
+++ b/holidays/countries/iran.py
@@ -50,8 +50,14 @@ class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
     start_year = 1980
     weekend = {FRI}
 
-    def __init__(self, *args, **kwargs):
-        IslamicHolidays.__init__(self, IranIslamicHolidays)
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
+        IslamicHolidays.__init__(
+            self, cls=IranIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         PersianCalendarHolidays.__init__(self)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/jordan.py b/holidays/countries/jordan.py
index e0218a64..a82d6a3b 100644
--- a/holidays/countries/jordan.py
+++ b/holidays/countries/jordan.py
@@ -30,10 +30,14 @@ class Jordan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolid
     estimated_label = tr("(تقدير) %s")
     supported_languages = ("ar", "en_US")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/kazakhstan.py b/holidays/countries/kazakhstan.py
index 2eb90c7f..406dfed9 100644
--- a/holidays/countries/kazakhstan.py
+++ b/holidays/countries/kazakhstan.py
@@ -92,10 +92,16 @@ class Kazakhstan(
     # Kazakhstan declared its sovereignty on 25 October 1990.
     start_year = 1991
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, KazakhstanIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=KazakhstanIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, KazakhstanStaticHolidays)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
         kwargs.setdefault("observed_since", 2002)
diff --git a/holidays/countries/kenya.py b/holidays/countries/kenya.py
index c914f5a8..23cbe4dd 100644
--- a/holidays/countries/kenya.py
+++ b/holidays/countries/kenya.py
@@ -53,11 +53,17 @@ class Kenya(
     # Kenya gained independence on December 12, 1963.
     start_year = 1964
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         HinduCalendarHolidays.__init__(self, cls=KenyaHinduHolidays)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=KenyaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=KenyaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=KenyaStaticHolidays)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_WORKDAY)
         kwargs.setdefault("observed_since", 1985)
diff --git a/holidays/countries/kuwait.py b/holidays/countries/kuwait.py
index 57cca90e..66fb0128 100644
--- a/holidays/countries/kuwait.py
+++ b/holidays/countries/kuwait.py
@@ -31,9 +31,13 @@ class Kuwait(HolidayBase, InternationalHolidays, IslamicHolidays):
     estimated_label = tr("(تقدير) %s")
     supported_languages = ("ar", "en_US")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/kyrgyzstan.py b/holidays/countries/kyrgyzstan.py
index 4fc9c86c..ad00501d 100644
--- a/holidays/countries/kyrgyzstan.py
+++ b/holidays/countries/kyrgyzstan.py
@@ -25,10 +25,14 @@ class Kyrgyzstan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicH
 
     country = "KG"
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/malaysia.py b/holidays/countries/malaysia.py
index e70be1bf..31f2fe24 100644
--- a/holidays/countries/malaysia.py
+++ b/holidays/countries/malaysia.py
@@ -10,6 +10,7 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
+from datetime import date
 from gettext import gettext as tr
 
 from holidays.calendars import (
@@ -125,8 +126,11 @@ class Malaysia(
     supported_languages = ("en_US", "ms_MY", "th")
     start_year = 1952
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
         """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+
         References:
             - `Holidays Act 1951 <https://www.kabinet.gov.my/bkpp/pdf/akta_warta/1951_12_31_act369.pdf>`_
             - `Holidays Ordinance (Sabah Cap. 56) <https://sagc.sabah.gov.my/sites/default/files/law/HolidaysOrdinance.pdf>`_
@@ -147,11 +151,13 @@ class Malaysia(
         ChristianHolidays.__init__(self)
         HinduCalendarHolidays.__init__(self, cls=MalaysiaHinduHolidays)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=MalaysiaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=MalaysiaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=MalaysiaStaticHolidays)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_WORKDAY)
         super().__init__(*args, **kwargs)
-        self.dts_observed = set()
+        self.dts_observed: set[date] = set()
 
     def _populate_public_holidays(self):
         # This must be done for every `_populate_public_holidays()` call.
diff --git a/holidays/countries/maldives.py b/holidays/countries/maldives.py
index 5daac707..e4ad0324 100644
--- a/holidays/countries/maldives.py
+++ b/holidays/countries/maldives.py
@@ -26,9 +26,13 @@ class Maldives(HolidayBase, InternationalHolidays, IslamicHolidays):
     country = "MV"
     weekend = {FRI, SAT}
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/mauritania.py b/holidays/countries/mauritania.py
index 40156adb..48a2cc1a 100644
--- a/holidays/countries/mauritania.py
+++ b/holidays/countries/mauritania.py
@@ -25,9 +25,13 @@ class Mauritania(HolidayBase, InternationalHolidays, IslamicHolidays):
     country = "MR"
     weekend = {FRI, SAT}
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate(self, year):
diff --git a/holidays/countries/montenegro.py b/holidays/countries/montenegro.py
index 9f44bb9f..6f38016a 100644
--- a/holidays/countries/montenegro.py
+++ b/holidays/countries/montenegro.py
@@ -53,11 +53,17 @@ class Montenegro(
     supported_categories = (CATHOLIC, ISLAMIC, HEBREW, ORTHODOX, PUBLIC, WORKDAY)
     start_year = 2007
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, calendar=JULIAN_CALENDAR)
         HebrewCalendarHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=MontenegroIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=MontenegroIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=MontenegroStaticHolidays)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/morocco.py b/holidays/countries/morocco.py
index 152de2cc..cbe2ca4a 100644
--- a/holidays/countries/morocco.py
+++ b/holidays/countries/morocco.py
@@ -31,9 +31,13 @@ class Morocco(HolidayBase, InternationalHolidays, IslamicHolidays):
     estimated_label = tr("(تقدير) %s")
     supported_languages = ("ar", "en_US", "fr")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/nigeria.py b/holidays/countries/nigeria.py
index 119cef1f..8b534b14 100644
--- a/holidays/countries/nigeria.py
+++ b/holidays/countries/nigeria.py
@@ -31,10 +31,14 @@ class Nigeria(
     observed_label = "%s (observed)"
     start_year = 1979
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         StaticHolidays.__init__(self, NigeriaStaticHolidays)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
         kwargs.setdefault("observed_since", 2016)
diff --git a/holidays/countries/north_macedonia.py b/holidays/countries/north_macedonia.py
index bb926542..9c9d0888 100644
--- a/holidays/countries/north_macedonia.py
+++ b/holidays/countries/north_macedonia.py
@@ -22,10 +22,14 @@ class NorthMacedonia(HolidayBase, ChristianHolidays, InternationalHolidays, Isla
 
     country = "MK"
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/pakistan.py b/holidays/countries/pakistan.py
index 265de6cd..abc710b2 100644
--- a/holidays/countries/pakistan.py
+++ b/holidays/countries/pakistan.py
@@ -20,9 +20,15 @@ class Pakistan(HolidayBase, InternationalHolidays, IslamicHolidays):
     country = "PK"
     start_year = 1948
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=PakistanIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=PakistanIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/philippines.py b/holidays/countries/philippines.py
index 5f0eeb62..19f79aa0 100644
--- a/holidays/countries/philippines.py
+++ b/holidays/countries/philippines.py
@@ -61,11 +61,17 @@ class Philippines(
     supported_languages = ("en_PH", "en_US", "fil", "th")
     start_year = 1988
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChineseCalendarHolidays.__init__(self, cls=PhilippinesChineseHolidays)
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=PhilippinesIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=PhilippinesIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=PhilippinesStaticHolidays)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/saudi_arabia.py b/holidays/countries/saudi_arabia.py
index 4d1bb10a..78f9b4ca 100644
--- a/holidays/countries/saudi_arabia.py
+++ b/holidays/countries/saudi_arabia.py
@@ -51,8 +51,12 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
     observed_estimated_label = tr("(تقدير ملاحظة) %s")
     supported_languages = ("ar", "en_US")
 
-    def __init__(self, *args, **kwargs):
-        IslamicHolidays.__init__(self)
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         StaticHolidays.__init__(self, SaudiArabiaStaticHolidays)
         kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_NEXT_SUN)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/singapore.py b/holidays/countries/singapore.py
index 0c68bdd7..e5746924 100644
--- a/holidays/countries/singapore.py
+++ b/holidays/countries/singapore.py
@@ -47,8 +47,11 @@ class Singapore(
     observed_label = tr("%s (observed)")
     supported_languages = ("en_SG", "en_US", "th")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
         """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+
         A subclass of :py:class:`HolidayBase` representing public holidays in
         Singapore.
 
@@ -86,7 +89,9 @@ class Singapore(
         ChristianHolidays.__init__(self)
         HinduCalendarHolidays.__init__(self, cls=SingaporeHinduHolidays)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=SingaporeIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=SingaporeIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=SingaporeStaticHolidays)
         # Implement Section 4(2) of the Holidays Act:
         # "if any day specified in the Schedule falls on a Sunday,
diff --git a/holidays/countries/spain.py b/holidays/countries/spain.py
index d42a781e..5179aa40 100644
--- a/holidays/countries/spain.py
+++ b/holidays/countries/spain.py
@@ -78,10 +78,16 @@ class Spain(
     )
     supported_languages = ("en_US", "es", "uk")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=SpainIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=SpainIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, cls=SpainStaticHolidays)
         kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/sri_lanka.py b/holidays/countries/sri_lanka.py
index ded4bb19..8b3e0a69 100644
--- a/holidays/countries/sri_lanka.py
+++ b/holidays/countries/sri_lanka.py
@@ -87,11 +87,17 @@ class SriLanka(
     start_year = 1972
     end_year = 2025
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         HinduCalendarHolidays.__init__(self, SriLankaHinduHolidays)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, SriLankaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=SriLankaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         SinhalaCalendarHolidays.__init__(self)
         StaticHolidays.__init__(self, cls=SriLankaStaticHolidays)
         super().__init__(*args, **kwargs)
diff --git a/holidays/countries/tanzania.py b/holidays/countries/tanzania.py
index 637e367e..146aaeb4 100644
--- a/holidays/countries/tanzania.py
+++ b/holidays/countries/tanzania.py
@@ -67,10 +67,16 @@ class Tanzania(
     # Written Law (Miscellaneous Amendments) (No. 2) Act, 1994.
     start_year = 1994
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=TanzaniaIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=TanzaniaIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, TanzaniaStaticHolidays)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/timor_leste.py b/holidays/countries/timor_leste.py
index a2052ee3..ee742d16 100644
--- a/holidays/countries/timor_leste.py
+++ b/holidays/countries/timor_leste.py
@@ -52,10 +52,16 @@ class TimorLeste(
     # Law No. 10/2005 Of 10 August, Public Holidays and Official Commemorative Dates.
     start_year = 2006
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         ChristianHolidays.__init__(self)
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=TimorLesteIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=TimorLesteIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, TimorLesteStaticHolidays)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/tunisia.py b/holidays/countries/tunisia.py
index 7a65d69d..cb05b235 100644
--- a/holidays/countries/tunisia.py
+++ b/holidays/countries/tunisia.py
@@ -25,9 +25,13 @@ class Tunisia(HolidayBase, InternationalHolidays, IslamicHolidays):
     estimated_label = tr("(تقدير) %s")
     supported_languages = ("ar", "en_US")
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/turkey.py b/holidays/countries/turkey.py
index 93735276..8611aa27 100644
--- a/holidays/countries/turkey.py
+++ b/holidays/countries/turkey.py
@@ -38,9 +38,15 @@ class Turkey(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays
     # Law 2739 of 27 May 1935.
     start_year = 1936
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, TurkeyIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=TurkeyIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, TurkeyStaticHolidays)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/united_arab_emirates.py b/holidays/countries/united_arab_emirates.py
index f151fa40..a671bc87 100644
--- a/holidays/countries/united_arab_emirates.py
+++ b/holidays/countries/united_arab_emirates.py
@@ -62,9 +62,15 @@ class UnitedArabEmirates(HolidayBase, InternationalHolidays, IslamicHolidays, St
     # Founded on DEC 2, 1971.
     start_year = 1972
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, cls=UnitedArabEmiratesIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=UnitedArabEmiratesIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, UnitedArabEmiratesStaticHolidays)
         super().__init__(*args, **kwargs)
 
diff --git a/holidays/countries/uzbekistan.py b/holidays/countries/uzbekistan.py
index 442d04d6..cd2e60f1 100644
--- a/holidays/countries/uzbekistan.py
+++ b/holidays/countries/uzbekistan.py
@@ -38,9 +38,15 @@ class Uzbekistan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
     supported_languages = ("en_US", "uk", "uz")
     start_year = 1992
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        :param islamic_show_estimated:
+            Whether to add "estimated" label to Islamic holidays name if holiday date is estimated.
+        """
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self, UzbekistanIslamicHolidays)
+        IslamicHolidays.__init__(
+            self, cls=UzbekistanIslamicHolidays, show_estimated=islamic_show_estimated
+        )
         StaticHolidays.__init__(self, UzbekistanStaticHolidays)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
         super().__init__(*args, **kwargs)
diff --git a/holidays/groups/islamic.py b/holidays/groups/islamic.py
index a86853fc..3045a5d6 100644
--- a/holidays/groups/islamic.py
+++ b/holidays/groups/islamic.py
@@ -25,8 +25,9 @@ class IslamicHolidays(EasternCalendarHolidays):
     calendar consisting of 12 lunar months in a year of 354 or 355 days.
     """
 
-    def __init__(self, cls=None) -> None:
+    def __init__(self, cls=None, show_estimated=True) -> None:
         self._islamic_calendar = cls() if cls else _IslamicLunar()
+        self._islamic_calendar_show_estimated = show_estimated
 
     def _add_ali_al_rida_death_day(self, name) -> set[date]:
         """
@@ -262,7 +263,9 @@ class IslamicHolidays(EasternCalendarHolidays):
         """
         added_dates = set()
         for dts in dates:
-            if dt := self._add_eastern_calendar_holiday(name, dts, days_delta=days_delta):
+            if dt := self._add_eastern_calendar_holiday(
+                name, dts, self._islamic_calendar_show_estimated, days_delta
+            ):
                 added_dates.add(dt)
 
         return added_dates


Test patch:
diff --git a/tests/countries/test_afghanistan.py b/tests/countries/test_afghanistan.py
index 0ca501e6..8e4ce194 100644
--- a/tests/countries/test_afghanistan.py
+++ b/tests/countries/test_afghanistan.py
@@ -22,6 +22,9 @@ class TestAfghanistan(CommonCountryTests, TestCase):
         super().setUpClass(
             Afghanistan, years=range(1919, 2050), years_non_observed=range(1919, 2050)
         )
+        cls.no_estimated_holidays = Afghanistan(
+            years=range(1919, 2050), islamic_show_estimated=False
+        )
 
     def test_country_aliases(self):
         self.assertAliases(Afghanistan, AF, AFG)
@@ -86,8 +89,9 @@ class TestAfghanistan(CommonCountryTests, TestCase):
         self.assertNoHolidayName(name, range(1919, 2022))
 
     def test_independence_day(self):
-        name = "روز استقلال افغانستان"
-        self.assertHolidayName(name, (f"{year}-08-19" for year in range(1919, 2050)))
+        self.assertHolidayName(
+            "روز استقلال افغانستان", (f"{year}-08-19" for year in range(1919, 2050))
+        )
 
     def test_martyrs_day(self):
         name = "روز شهیدان"
@@ -107,8 +111,8 @@ class TestAfghanistan(CommonCountryTests, TestCase):
             "2020-08-30",
             "2021-08-19",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertEqual(set(range(1924, 2022)), years_found)
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1924, 2022))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(2022, 2050))
 
     def test_prophets_birthday(self):
         name = "میلاد پیامبر"
@@ -127,8 +131,7 @@ class TestAfghanistan(CommonCountryTests, TestCase):
             "2023-09-27",
             "2024-09-16",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertEqual(set(range(1924, 2050)), years_found)
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1924, 2050))
 
     def test_first_day_of_ramadan(self):
         name = "اول رمضان"
@@ -146,8 +149,7 @@ class TestAfghanistan(CommonCountryTests, TestCase):
             "2023-03-23",
             "2024-03-11",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertEqual(set(range(1925, 2050)), years_found)
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1925, 2050))
 
     def test_eid_al_fitr(self):
         name = "عید فطر"
@@ -187,8 +189,7 @@ class TestAfghanistan(CommonCountryTests, TestCase):
             "2024-04-11",
             "2024-04-12",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertEqual(set(range(1925, 2050)), years_found)
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1925, 2050))
 
     def test_arafah_day(self):
         name = "روز عرفه"
@@ -206,8 +207,7 @@ class TestAfghanistan(CommonCountryTests, TestCase):
             "2023-06-27",
             "2024-06-16",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertEqual(set(range(1925, 2050)), years_found)
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1925, 2050))
 
     def test_eid_al_adha(self):
         name = "عید قربانی"
@@ -247,8 +247,7 @@ class TestAfghanistan(CommonCountryTests, TestCase):
             "2024-06-18",
             "2024-06-19",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertEqual(set(range(1925, 2050)), years_found)
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1925, 2050))
 
     def test_2021(self):
         self.assertHolidays(
diff --git a/tests/countries/test_albania.py b/tests/countries/test_albania.py
index 5fae3a1b..0576ec97 100644
--- a/tests/countries/test_albania.py
+++ b/tests/countries/test_albania.py
@@ -20,6 +20,7 @@ class TestAlbania(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass(Albania, years=range(1993, 2050))
+        cls.no_estimated_holidays = Albania(years=range(1993, 2050), islamic_show_estimated=False)
 
     def test_country_aliases(self):
         self.assertAliases(Albania, AL, ALB)
@@ -125,8 +126,7 @@ class TestAlbania(CommonCountryTests, TestCase):
             "2023-04-21",
             "2024-04-10",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1993, 2050)).issubset(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1993, 2050))
 
     def test_eid_al_adha(self):
         name = "Dita e Kurban Bajramit"
@@ -144,8 +144,7 @@ class TestAlbania(CommonCountryTests, TestCase):
             "2006-01-10",
             "2006-12-31",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1993, 2050)).issubset(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1993, 2050))
 
     def test_observed(self):
         dt = (
diff --git a/tests/countries/test_indonesia.py b/tests/countries/test_indonesia.py
index 7943245a..6e3f900f 100644
--- a/tests/countries/test_indonesia.py
+++ b/tests/countries/test_indonesia.py
@@ -21,6 +21,9 @@ class TestIndonesia(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass(Indonesia, years=range(1946, 2050), years_non_observed=(2004, 2020))
+        cls.no_estimated_holidays = Indonesia(
+            years=range(1946, 2050), islamic_show_estimated=False
+        )
 
     def test_country_aliases(self):
         self.assertAliases(Indonesia, ID, IDN)
@@ -302,8 +305,9 @@ class TestIndonesia(CommonCountryTests, TestCase):
 
     def test_labor_day(self):
         name = "Hari Buruh Internasional"
-        self.assertHolidayName(name, (f"{year}-05-01" for year in range(1953, 1968)))
-        self.assertHolidayName(name, (f"{year}-05-01" for year in range(2014, 2050)))
+        self.assertHolidayName(
+            name, (f"{year}-05-01" for year in (*range(1953, 1968), *range(2014, 2050)))
+        )
         self.assertNoHoliday(
             f"{year}-05-01" for year in set(range(1968, 2014)).difference({2004, 2008})
         )
@@ -364,8 +368,9 @@ class TestIndonesia(CommonCountryTests, TestCase):
         self.assertNoHolidayName(name, years_no_exist)
 
     def test_independence_day(self):
-        name = "Hari Kemerdekaan Republik Indonesia"
-        self.assertHolidayName(name, (f"{year}-08-17" for year in range(1946, 2050)))
+        self.assertHolidayName(
+            "Hari Kemerdekaan Republik Indonesia", (f"{year}-08-17" for year in range(1946, 2050))
+        )
 
     def test_armed_forces_day(self):
         name = "Hari Angkatan Perang"
@@ -397,9 +402,8 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "2022-05-02",
             "2023-04-22",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1953, 2050))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(1946, 1953))
 
     def test_eid_al_fitr_second_day(self):
         name = "Hari kedua dari Hari Raya Idul Fitri"
@@ -412,9 +416,8 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "2022-05-03",
             "2023-04-23",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1953, 2050))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(1946, 1953))
 
     def test_eid_al_adha(self):
         name = "Hari Raya Idul Adha"
@@ -427,9 +430,8 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "2022-07-10",
             "2023-06-29",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1953, 2050))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(1946, 1953))
 
     def test_islamic_new_year(self):
         name = "Tahun Baru Islam"
@@ -444,11 +446,12 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "2022-07-30",
             "2023-07-19",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 1964)).issubset(years_found))
-        self.assertTrue(set(range(1968, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
-        self.assertFalse(set(range(1964, 1968)).intersection(years_found))
+        self.assertHolidayName(
+            name, self.no_estimated_holidays, range(1953, 1964), range(1968, 2050)
+        )
+        self.assertNoHolidayName(
+            name, self.no_estimated_holidays, range(1946, 1953), range(1964, 1968)
+        )
 
     def test_prophets_birthday(self):
         name = "Maulid Nabi Muhammad"
@@ -460,11 +463,12 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "2021-10-20",
             "2022-10-08",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 1964)).issubset(years_found))
-        self.assertTrue(set(range(1968, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
-        self.assertFalse(set(range(1964, 1968)).intersection(years_found))
+        self.assertHolidayName(
+            name, self.no_estimated_holidays, range(1953, 1964), range(1968, 2050)
+        )
+        self.assertNoHolidayName(
+            name, self.no_estimated_holidays, range(1946, 1953), range(1964, 1968)
+        )
 
     def test_isra_and_miraj(self):
         name = "Isra Mikraj Nabi Muhammad"
@@ -477,11 +481,12 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "2022-02-28",
             "2023-02-18",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 1963)).issubset(years_found))
-        self.assertTrue(set(range(1968, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
-        self.assertFalse(set(range(1963, 1968)).intersection(years_found))
+        self.assertHolidayName(
+            name, self.no_estimated_holidays, range(1953, 1963), range(1968, 2050)
+        )
+        self.assertNoHolidayName(
+            name, self.no_estimated_holidays, range(1946, 1953), range(1963, 1968)
+        )
 
     def test_nuzul_al_quran(self):
         name = "Nuzululqur'an"
@@ -497,10 +502,10 @@ class TestIndonesia(CommonCountryTests, TestCase):
             "1961-03-04",
             "1962-02-21",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1953, 1964)).issubset(years_found))
-        self.assertFalse(set(range(1946, 1953)).intersection(years_found))
-        self.assertFalse(set(range(1964, 2050)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1953, 1964))
+        self.assertNoHolidayName(
+            name, self.no_estimated_holidays, range(1946, 1953), range(1964, 2050)
+        )
 
     def test_2021(self):
         self.assertHolidays(
diff --git a/tests/countries/test_kenya.py b/tests/countries/test_kenya.py
index 083bd18a..e1574536 100644
--- a/tests/countries/test_kenya.py
+++ b/tests/countries/test_kenya.py
@@ -204,8 +204,9 @@ class TestKenya(CommonCountryTests, TestCase):
             "2023-04-21",
             "2024-04-10",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1964, 2050)).issubset(years_found))
+        self.assertHolidayName(
+            name, Kenya(years=range(1964, 2050), islamic_show_estimated=False), range(1964, 2050)
+        )
 
         dt = (
             "2001-12-17",
@@ -253,8 +254,11 @@ class TestKenya(CommonCountryTests, TestCase):
             "2023-06-28",
             "2024-06-17",
         )
-        years_found = {dt.year for dt in islamic_holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(1964, 2050)).issubset(years_found))
+        self.assertHolidayName(
+            name,
+            Kenya(categories=ISLAMIC, years=range(1964, 2050), islamic_show_estimated=False),
+            range(1964, 2050),
+        )
 
     def test_2010(self):
         self.assertHolidays(
diff --git a/tests/countries/test_pakistan.py b/tests/countries/test_pakistan.py
index 1d04372f..67194f7d 100644
--- a/tests/countries/test_pakistan.py
+++ b/tests/countries/test_pakistan.py
@@ -22,6 +22,7 @@ class TestPakistan(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass(Pakistan, years=range(1948, 2050))
+        cls.no_estimated_holidays = Pakistan(years=range(2000, 2024), islamic_show_estimated=False)
 
     def test_country_aliases(self):
         self.assertAliases(Pakistan, PK, PAK)
@@ -49,8 +50,9 @@ class TestPakistan(CommonCountryTests, TestCase):
 
     def test_iqbal_day(self):
         name = "Iqbal Day"
-        self.assertHolidayName(name, (f"{year}-11-09" for year in range(1948, 2015)))
-        self.assertHolidayName(name, (f"{year}-11-09" for year in range(2022, 2050)))
+        self.assertHolidayName(
+            name, (f"{year}-11-09" for year in (*range(1948, 2015), *range(2022, 2050)))
+        )
         self.assertNoHolidayName(name, range(2015, 2022))
 
     def test_quaid_e_azam_day(self):
@@ -74,10 +76,9 @@ class TestPakistan(CommonCountryTests, TestCase):
             date(2022, 5, 3),
             date(2023, 4, 22),
         ):
-            self.assertHoliday(dt)
-            self.assertHoliday(_timedelta(dt, +1))
-            self.assertHoliday(_timedelta(dt, +2))
-            self.assertIn(name, self.holidays.get(dt))
+            self.assertHolidayName(
+                name, self.no_estimated_holidays, dt, _timedelta(dt, +1), _timedelta(dt, +2)
+            )
 
     def test_eid_ul_adha(self):
         name = "Eid-ul-Adha"
@@ -97,10 +98,9 @@ class TestPakistan(CommonCountryTests, TestCase):
             date(2022, 7, 10),
             date(2023, 6, 29),
         ):
-            self.assertHoliday(dt)
-            self.assertHoliday(_timedelta(dt, +1))
-            self.assertHoliday(_timedelta(dt, +2))
-            self.assertIn(name, self.holidays.get(dt))
+            self.assertHolidayName(
+                name, self.no_estimated_holidays, dt, _timedelta(dt, +1), _timedelta(dt, +2)
+            )
 
     def test_eid_milad_un_nabi(self):
         name = "Eid Milad-un-Nabi"
@@ -119,8 +119,7 @@ class TestPakistan(CommonCountryTests, TestCase):
             date(2022, 10, 9),
             date(2023, 9, 27),
         ):
-            self.assertHoliday(dt)
-            self.assertIn(name, self.holidays.get(dt))
+            self.assertHolidayName(name, self.no_estimated_holidays, dt)
 
     def test_ashura(self):
         name = "Ashura"
@@ -141,9 +140,7 @@ class TestPakistan(CommonCountryTests, TestCase):
             date(2022, 8, 9),
             date(2023, 7, 28),
         ):
-            self.assertHoliday(dt)
-            self.assertHoliday(_timedelta(dt, -1))
-            self.assertIn(name, self.holidays.get(dt))
+            self.assertHolidayName(name, self.no_estimated_holidays, dt, _timedelta(dt, -1))
 
     def test_2002(self):
         self.assertHolidays(
@@ -164,6 +161,25 @@ class TestPakistan(CommonCountryTests, TestCase):
             ("2002-12-25", "Quaid-e-Azam Day"),
         )
 
+    def test_2002_no_estimated_label(self):
+        self.assertHolidays(
+            Pakistan(years=2002, islamic_show_estimated=False),
+            ("2002-02-05", "Kashmir Solidarity Day"),
+            ("2002-02-22", "Eid-ul-Adha"),
+            ("2002-02-23", "Eid-ul-Adha"),
+            ("2002-02-24", "Eid-ul-Adha"),
+            ("2002-03-23", "Ashura; Pakistan Day"),
+            ("2002-03-24", "Ashura"),
+            ("2002-05-01", "Labour Day"),
+            ("2002-05-24", "Eid Milad-un-Nabi"),
+            ("2002-08-14", "Independence Day"),
+            ("2002-11-09", "Iqbal Day"),
+            ("2002-12-05", "Eid-ul-Fitr"),
+            ("2002-12-06", "Eid-ul-Fitr"),
+            ("2002-12-07", "Eid-ul-Fitr"),
+            ("2002-12-25", "Quaid-e-Azam Day"),
+        )
+
     def test_2022(self):
         self.assertHolidays(
             Pakistan(years=2022),
diff --git a/tests/countries/test_philippines.py b/tests/countries/test_philippines.py
index e29fcee0..96288ca0 100644
--- a/tests/countries/test_philippines.py
+++ b/tests/countries/test_philippines.py
@@ -21,6 +21,9 @@ class TestPhilippines(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass(Philippines, years=range(1988, 2050))
+        cls.no_estimated_holidays = Philippines(
+            years=range(1988, 2050), islamic_show_estimated=False
+        )
 
     def test_country_aliases(self):
         self.assertAliases(Philippines, PH, PHL)
@@ -279,9 +282,8 @@ class TestPhilippines(CommonCountryTests, TestCase):
             "2024-04-10",
             "2025-03-31",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(2002, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1988, 2002)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(2002, 2050))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(1988, 2002))
 
     def test_eid_al_adha(self):
         name = "Eid'l Adha"
@@ -298,9 +300,8 @@ class TestPhilippines(CommonCountryTests, TestCase):
             "2024-06-17",
             "2025-06-06",
         )
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
-        self.assertTrue(set(range(2010, 2050)).issubset(years_found))
-        self.assertFalse(set(range(1988, 2010)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(2010, 2050))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(1988, 2010))
 
     def test_2018(self):
         self.assertHolidays(
diff --git a/tests/countries/test_united_arab_emirates.py b/tests/countries/test_united_arab_emirates.py
index 1542cc44..1078ea30 100644
--- a/tests/countries/test_united_arab_emirates.py
+++ b/tests/countries/test_united_arab_emirates.py
@@ -21,6 +21,9 @@ class TestUnitedArabEmirates(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass(UnitedArabEmirates, years=range(1972, 2050))
+        cls.no_estimated_holidays = UnitedArabEmirates(
+            years=range(1972, 2050), islamic_show_estimated=False
+        )
 
     def test_country_aliases(self):
         self.assertAliases(UnitedArabEmirates, AE, ARE)
@@ -79,16 +82,8 @@ class TestUnitedArabEmirates(CommonCountryTests, TestCase):
             "2024-04-10",
             "2025-03-30",
         )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named(name, lookup="icontains")}
-            )
-        )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named(name_holiday, lookup="icontains")}
-            )
-        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1972, 2050))
+        self.assertHolidayName(name_holiday, self.no_estimated_holidays, range(1972, 2050))
         self.assertNoHolidayName(name_holiday, "2018-06-14", "2025-03-29")
 
     def test_eid_al_adha(self):
@@ -105,21 +100,9 @@ class TestUnitedArabEmirates(CommonCountryTests, TestCase):
             "2024-06-16",
             "2025-06-04",
         )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named(name, lookup="icontains")}
-            )
-        )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named("عطلة عيد الأضحى", lookup="icontains")}
-            )
-        )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named("وقفة عرفة", lookup="icontains")}
-            )
-        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1972, 2050))
+        self.assertHolidayName("عطلة عيد الأضحى", self.no_estimated_holidays, range(1972, 2050))
+        self.assertHolidayName("وقفة عرفة", self.no_estimated_holidays, range(1972, 2050))
 
     def test_islamic_new_year(self):
         name = "رأس السنة الهجرية"
@@ -135,11 +118,7 @@ class TestUnitedArabEmirates(CommonCountryTests, TestCase):
             "2024-07-07",
             "2025-06-26",
         )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named(name, lookup="icontains")}
-            )
-        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1972, 2050))
 
     def test_prophets_birthday(self):
         name = "عيد المولد النبوي"
@@ -155,18 +134,13 @@ class TestUnitedArabEmirates(CommonCountryTests, TestCase):
             "2024-09-15",
             "2025-09-05",
         )
-        self.assertTrue(
-            set(range(1972, 2050)).issubset(
-                {dt.year for dt in self.holidays.get_named(name, lookup="icontains")}
-            )
-        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1972, 2050))
 
     def test_isra_and_miraj(self):
         name = "ليلة المعراج"
         self.assertHolidayName(name, "2017-04-23", "2018-04-14")
-        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="icontains")}
-        self.assertTrue(set(range(1972, 2018)).issubset(years_found))
-        self.assertFalse(set(range(2019, 2050)).intersection(years_found))
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1972, 2019))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(2019, 2050))
 
     def test_2020(self):
         # https://gulfbusiness.com/revealed-uae-private-sector-holidays-for-eid-al-fitr-2020/