frappe/env/lib/python3.12/site-packages/holidays/countries/united_states.py

1250 lines
43 KiB
Python

# holidays
# --------
# A fast, efficient Python library for generating country, province and state
# specific sets of holidays on the fly. It aims to make determining whether a
# specific date is a holiday as fast and flexible as possible.
#
# Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
# dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
# ryanss <ryanssdev@icloud.com> (c) 2014-2017
# Website: https://github.com/vacanza/holidays
# License: MIT (see LICENSE file)
from typing import Union
from holidays.calendars.gregorian import MON, TUE, WED, THU, FRI, SAT, SUN
from holidays.constants import GOVERNMENT, PUBLIC, UNOFFICIAL
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
ObservedRule,
MON_TO_NEXT_TUE,
FRI_TO_PREV_THU,
SAT_TO_PREV_FRI,
SUN_TO_NEXT_MON,
SAT_SUN_TO_PREV_FRI,
SAT_SUN_TO_NEXT_MON,
)
GA_IN_WASHINGTON_BIRTHDAY = ObservedRule(
{MON: +1, TUE: -1, WED: -1, THU: +1, FRI: -1, SAT: -2, SUN: -2}
)
class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
"""United States of America (the) holidays.
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_the_United_States>
* [Federal holidays](https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/)
* Washington's Birthday:
* [AK](https://doa.alaska.gov/calendar/)
* [AL](https://admincode.legislature.state.al.us/administrative-code/670-X-12-.01)
* [AR](https://arkleg.state.ar.us/Home/FTPDocument?path=/ACTS/2001/Public/ACT304.pdf)
* [AZ](https://www.azleg.gov/ars/1/00301.htm)
* [CA](https://www.sos.ca.gov/state-holidays)
* [CO](https://leg.colorado.gov/sites/default/files/images/olls/crs2023-title-24.pdf)
* [GA](https://www.gasupreme.us/court-information/holidays-2/)
* [HI](https://www.capitol.hawaii.gov/hrscurrent/Vol01_Ch0001-0042F/HRS0008/HRS_0008-0001.htm)
* [ID](https://idaho.gov/government/state-holidays/)
* IN:
* <https://digital.statelib.lib.in.us/infoexpress/holidays.aspx>
* <https://www.in.gov/spd/benefits/state-holidays/>
* [MD](https://msa.maryland.gov/msa/mdmanual/01glance/html/holidayl.html)
* [MI](https://www.michigan.gov/som/government/state-holidays)
* [MN](https://www.revisor.mn.gov/statutes/cite/645.44)
* [MT](https://archive.legmt.gov/bills/mca/title_0010/chapter_0010/part_0020/section_0160/0010-0010-0020-0160.html)
* [NJ](https://nj.gov/nj/about/facts/holidays/)
* [OH](https://codes.ohio.gov/ohio-revised-code/section-1.14)
* [OK](https://oklahoma.gov/omes/divisions/human-capital-management/employee-benefits/leave-holidays/holidays.html)
* [OR](https://www.oregonlegislature.gov/bills_laws/ors/ors187.html)
* [PA](https://www.legis.state.pa.us/WU01/LI/LI/US/PDF/1893/0/0138..PDF)
* [PR](https://en.wikipedia.org/wiki/Public_holidays_in_Puerto_Rico)
* [SC](https://www.scstatehouse.gov/code/t53c005.php)
* [TN](https://www.tn.gov/about-tn/state-holidays.html)
* [TX](https://www.tsl.texas.gov/ref/abouttx/holidays)
* [UT](https://le.utah.gov/xcode/Title63G/Chapter1/63G-1-S301.html)
* [VA](https://law.lis.virginia.gov/vacode/title2.2/chapter33/section2.2-3300/)
* [VT](https://legislature.vermont.gov/statutes/section/01/007/00371)
* [WA](https://app.leg.wa.gov/rcw/default.aspx?cite=1.16.050)
* [WV](https://code.wvlegislature.gov/2-2-1/)
* [WY](https://ai.wyo.gov/about-us/state-holidays-and-office-closures)
* Columbus Day / Indigenous Peoples' Day history:
* <https://www.pewresearch.org/short-reads/2023/10/05/working-on-columbus-day-or-indigenous-peoples-day-it-depends-on-where-your-job-is/>
* <https://www.officeholidays.com/holidays/usa/columbus-day-state-guide>
* <https://en.wikipedia.org/wiki/Indigenous_Peoples%27_Day_(United_States)>
* <https://www.sos.ri.gov/divisions/civics-and-education/reference-desk/ri-state-holidays>
* <https://web.archive.org/web/20080831103521/http://www.dpa.ca.gov/personnel-policies/holidays.htm>
* [Frances Xavier Cabrini Day](https://leg.colorado.gov/sites/default/files/2020a_1031_signed.pdf)
* Northern Mariana Islands (subdivision MP):
* <https://governor.gov.mp/archived-news/executive-actions-archive/memorandum-2022-legal-holidays/>
* <https://webcache.googleusercontent.com/search?q=cache:C17_7FBgPtQJ:https://governor.gov.mp/archived-news/executive-actions-archive/memorandum-2022-legal-holidays/&hl=en&gl=sg&strip=1&vwsrc=0>
* American Samoa:
* <https://asbar.org/code-annotated/1-0501-public-holidays/>
"""
country = "US"
observed_label = "%s (observed)"
start_year = 1777
subdivisions: Union[tuple[()], tuple[str, ...]] = (
"AK", # Alaska.
"AL", # Alabama.
"AR", # Arkansas.
"AS", # American Samoa.
"AZ", # Arizona.
"CA", # California.
"CO", # Colorado.
"CT", # Connecticut.
"DC", # District of Columbia.
"DE", # Delaware.
"FL", # Florida.
"GA", # Georgia.
"GU", # Guam.
"HI", # Hawaii.
"IA", # Iowa.
"ID", # Idaho.
"IL", # Illinois.
"IN", # Indiana.
"KS", # Kansas.
"KY", # Kentucky.
"LA", # Louisiana.
"MA", # Massachusetts.
"MD", # Maryland.
"ME", # Maine.
"MI", # Michigan.
"MN", # Minnesota.
"MO", # Missouri.
"MP", # Northern Mariana Islands.
"MS", # Mississippi.
"MT", # Montana.
"NC", # North Carolina.
"ND", # North Dakota.
"NE", # Nebraska.
"NH", # New Hampshire.
"NJ", # New Jersey.
"NM", # New Mexico.
"NV", # Nevada.
"NY", # New York.
"OH", # Ohio.
"OK", # Oklahoma.
"OR", # Oregon.
"PA", # Pennsylvania.
"PR", # Puerto Rico.
"RI", # Rhode Island.
"SC", # South Carolina.
"SD", # South Dakota.
"TN", # Tennessee.
"TX", # Texas.
"UM", # United States Minor Outlying Islands.
"UT", # Utah.
"VA", # Virginia.
"VI", # Virgin Islands, U.S..
"VT", # Vermont.
"WA", # Washington.
"WI", # Wisconsin.
"WV", # West Virginia.
"WY", # Wyoming.
)
subdivisions_aliases = {
"Alaska": "AK",
"Alabama": "AL",
"Arkansas": "AR",
"American Samoa": "AS",
"Arizona": "AZ",
"California": "CA",
"Colorado": "CO",
"Connecticut": "CT",
"District of Columbia": "DC",
"Delaware": "DE",
"Florida": "FL",
"Georgia": "GA",
"Guam": "GU",
"Hawaii": "HI",
"Iowa": "IA",
"Idaho": "ID",
"Illinois": "IL",
"Indiana": "IN",
"Kansas": "KS",
"Kentucky": "KY",
"Louisiana": "LA",
"Massachusetts": "MA",
"Maryland": "MD",
"Maine": "ME",
"Michigan": "MI",
"Minnesota": "MN",
"Missouri": "MO",
"Northern Mariana Islands": "MP",
"Mississippi": "MS",
"Montana": "MT",
"North Carolina": "NC",
"North Dakota": "ND",
"Nebraska": "NE",
"New Hampshire": "NH",
"New Jersey": "NJ",
"New Mexico": "NM",
"Nevada": "NV",
"New York": "NY",
"Ohio": "OH",
"Oklahoma": "OK",
"Oregon": "OR",
"Pennsylvania": "PA",
"Puerto Rico": "PR",
"Rhode Island": "RI",
"South Carolina": "SC",
"South Dakota": "SD",
"Tennessee": "TN",
"Texas": "TX",
"United States Minor Outlying Islands": "UM",
"Utah": "UT",
"Virginia": "VA",
"Virgin Islands, U.S.": "VI",
"Vermont": "VT",
"Washington": "WA",
"Wisconsin": "WI",
"West Virginia": "WV",
"Wyoming": "WY",
}
supported_categories = (GOVERNMENT, PUBLIC, UNOFFICIAL)
_deprecated_subdivisions = (
"FM",
"MH",
"PW",
)
def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
kwargs.setdefault("observed_rule", SAT_TO_PREV_FRI + SUN_TO_NEXT_MON)
super().__init__(*args, **kwargs)
def _populate_common(self, include_federal: bool = False):
"""
Populates common US holidays.
:param include_federal:
Whether to include federal-specific holidays.
"""
# New Year's Day
if self._year >= 1871:
name = "New Year's Day"
self._add_observed(self._add_new_years_day(name))
self._add_observed(self._next_year_new_years_day, name=name)
if include_federal:
# Birthday of Martin Luther King, Jr.
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan("Birthday of Martin Luther King, Jr.")
# Washington's Birthday
if self._year >= 1879:
name = "Washington's Birthday"
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb(name)
else:
self._add_holiday_feb_22(name)
# Memorial Day
if self._year >= 1971:
self._add_holiday_last_mon_of_may("Memorial Day")
# Juneteenth Day
if self._year >= 2021:
self._add_observed(self._add_holiday_jun_19("Juneteenth National Independence Day"))
# Independence Day
if self._year >= 1871:
self._add_observed(self._add_holiday_jul_4("Independence Day"))
# Labor Day
if self._year >= 1894:
self._add_holiday_1st_mon_of_sep("Labor Day")
if include_federal:
# Columbus Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct("Columbus Day")
# Veterans Day
if self._year >= 1938:
name = "Veterans Day" if self._year >= 1954 else "Armistice Day"
if 1971 <= self._year <= 1977:
self._add_holiday_4th_mon_of_oct(name)
else:
self._add_observed(self._add_remembrance_day(name))
# Thanksgiving Day
if self._year >= 1871:
self._add_holiday_4th_thu_of_nov("Thanksgiving Day")
# Christmas Day
if self._year >= 1871:
self._add_observed(self._add_christmas_day("Christmas Day"))
def _populate_public_holidays(self):
self._populate_common()
# Memorial Day
if 1888 <= self._year <= 1970:
self._add_holiday_may_30("Memorial Day")
def _add_christmas_eve_holiday(self):
# Christmas Eve
# If on Friday, observed on Thursday
# If on Saturday or Sunday, observed on Friday
name = "Christmas Eve"
self._add_observed(
self._add_christmas_eve(name), name=name, rule=FRI_TO_PREV_THU + SAT_SUN_TO_PREV_FRI
)
def _populate_subdiv_holidays(self):
if PUBLIC not in self.categories:
return None
# Martin Luther King Jr. Day
if self._year >= 1986 and self.subdiv not in {"AL", "AR", "AZ", "GA", "ID", "MS", "NH"}:
self._add_holiday_3rd_mon_of_jan("Martin Luther King Jr. Day")
# Washington's Birthday
if self._year >= 1879 and self.subdiv not in {
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"DE",
"FL",
"GA",
"HI",
"ID",
"IN",
"MD",
"MN",
"MT",
"NJ",
"NM",
"OH",
"OK",
"OR",
"PA",
"PR",
"SC",
"TN",
"TX",
"UT",
"VA",
"VI",
"VT",
"WA",
"WV",
"WY",
}:
name = "Washington's Birthday"
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb(name)
else:
self._add_holiday_feb_22(name)
# Columbus Day
if self._year >= 1937 and (
self.subdiv is None
or self.subdiv
in {
"AS",
"AZ",
"CT",
"GA",
"ID",
"IL",
"IN",
"MA",
"MD",
"MO",
"MT",
"NJ",
"NY",
"OH",
"PA",
"UT",
"WV",
}
):
name = "Columbus Day"
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(name)
else:
self._add_columbus_day(name)
super()._populate_subdiv_holidays()
def _populate_subdiv_ak_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Seward's Day
# No observance in 1921: https://chroniclingamerica.loc.gov/lccn/sn86072239/1922-03-29/ed-1/seq-8/
if self._year >= 1918 and self._year != 1921:
name = "Seward's Day"
if self._year >= 1955:
self._add_holiday_last_mon_of_mar(name)
else:
self._add_holiday_mar_30(name)
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day" if self._year >= 2015 else "Columbus Day"
)
# Alaska Day
# https://web.archive.org/web/20120502232826/http://www.alaskadispatch.com/article/happy-alaska-day-great-land
if self._year >= 1917:
self._add_observed(self._add_holiday_oct_18("Alaska Day"))
def _populate_subdiv_al_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan("Martin Luther King, Jr & Robert E. Lee's Birthday")
# Washington's Birthday
if self._year >= 1879:
name = "George Washington & Thomas Jefferson's Birthday"
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb(name)
else:
self._add_holiday_feb_22(name)
# Confederate Memorial Day
if self._year >= 1866:
self._add_holiday_4th_mon_of_apr("Confederate Memorial Day")
# Jefferson Davis Birthday
if self._year >= 1890:
self._add_holiday_1st_mon_of_jun("Jefferson Davis Birthday")
# Columbus Day / American Indian Heritage Day / Fraternal Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Columbus Day / American Indian Heritage Day / Fraternal Day"
if self._year >= 2000
else "Columbus Day / Fraternal Day"
)
def _populate_subdiv_ar_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan(
"Martin Luther King Jr. Day"
if self._year >= 2018
else "Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays"
)
# Washington's Birthday
if self._year >= 1879:
name = "George Washington's Birthday and Daisy Gatson Bates Day"
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb(name)
else:
self._add_holiday_feb_22(name)
def _populate_subdiv_as_public_holidays(self):
# American Samoa Flag Day
if self._year >= 1901:
self._add_observed(self._add_holiday_apr_17("American Samoa Flag Day"))
# Manu'a Islands Cession Day
if self._year >= 1983:
self._add_observed(self._add_holiday_jul_16("Manu'a Islands Cession Day"))
# White Sunday
self._add_holiday_2nd_sun_of_oct("White Sunday")
def _populate_subdiv_az_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan("Dr. Martin Luther King Jr. / Civil Rights Day")
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Lincoln/Washington Presidents' Day")
def _populate_subdiv_ca_public_holidays(self):
# Lincoln's Birthday
if 1971 <= self._year <= 2009:
self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday"))
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Susan B. Anthony Day
if self._year >= 2014:
self._add_holiday_feb_15("Susan B. Anthony Day")
# Cesar Chavez Day
if self._year >= 1995:
self._add_observed(self._add_holiday_mar_31("Cesar Chavez Day"), rule=SUN_TO_NEXT_MON)
# Columbus Day
if 1971 <= self._year <= 2008:
self._add_holiday_2nd_mon_of_oct("Columbus Day")
# Day After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_co_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Washington-Lincoln Day")
# Cesar Chavez Day
if self._year >= 2001:
self._add_holiday_mar_31("Cesar Chavez Day")
# Frances Xavier Cabrini Day
if self._year >= 2020:
self._add_holiday_1st_mon_of_oct("Frances Xavier Cabrini Day")
def _populate_subdiv_ct_public_holidays(self):
# Lincoln's Birthday
if self._year >= 1971:
self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday"))
# Good Friday
self._add_good_friday("Good Friday")
def _populate_subdiv_dc_public_holidays(self):
# Inauguration Day
if self._year >= 1789 and (self._year - 1789) % 4 == 0:
name = "Inauguration Day"
self._add_observed(
self._add_holiday_jan_20(name)
if self._year >= 1937
else self._add_holiday_mar_4(name),
rule=SUN_TO_NEXT_MON,
)
# Emancipation Day
if self._year >= 2005:
self._add_observed(self._add_holiday_apr_16("Emancipation Day"))
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day" if self._year >= 2019 else "Columbus Day"
)
def _populate_subdiv_de_public_holidays(self):
# Good Friday
self._add_good_friday("Good Friday")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
# Day After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_fl_public_holidays(self):
# Susan B. Anthony Day
if self._year >= 2011:
self._add_holiday_feb_15("Susan B. Anthony Day")
# Friday After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Friday After Thanksgiving")
def _populate_subdiv_ga_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan(
"Martin Luther King Jr. Day" if self._year >= 2012 else "Robert E. Lee's Birthday"
)
# Confederate Memorial Day
if self._year >= 1866:
name = "State Holiday" if self._year >= 2016 else "Confederate Memorial Day"
if self._year == 2020:
self._add_holiday_apr_10(name)
else:
self._add_holiday_4th_mon_of_apr(name)
# Robert E. Lee's Birthday
if self._year >= 1986:
self._add_holiday_1_day_past_4th_thu_of_nov(
"State Holiday" if self._year >= 2016 else "Robert E. Lee's Birthday"
)
# Washington's Birthday
if self._year >= 1879:
self._add_holiday(
"Washington's Birthday",
self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY),
)
def _populate_subdiv_gu_public_holidays(self):
# Guam Discovery Day
if self._year >= 1970:
self._add_holiday_1st_mon_of_mar("Guam Discovery Day")
# Good Friday
self._add_good_friday("Good Friday")
# Liberation Day (Guam)
if self._year >= 1945:
self._add_holiday_jul_21("Liberation Day (Guam)")
# All Souls' Day
self._add_all_souls_day("All Souls' Day")
# Lady of Camarin Day
self._add_immaculate_conception_day("Lady of Camarin Day")
def _populate_subdiv_hi_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Prince Jonah Kuhio Kalanianaole Day
if self._year >= 1949:
self._add_observed(self._add_holiday_mar_26("Prince Jonah Kuhio Kalanianaole Day"))
# Kamehameha Day
if self._year >= 1872:
jun_11 = self._add_holiday_jun_11("Kamehameha Day")
if self._year >= 2011:
self._add_observed(jun_11)
# Statehood Day
if self._year >= 1959:
self._add_holiday_3rd_fri_of_aug("Statehood Day")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
def _populate_subdiv_ia_public_holidays(self):
# Lincoln's Birthday
if self._year >= 1971:
self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday"))
def _populate_subdiv_id_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan(
"Martin Luther King Jr. / Idaho Human Rights Day"
if self._year >= 2006
else "Martin Luther King Jr. Day"
)
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
def _populate_subdiv_il_public_holidays(self):
# Lincoln's Birthday
if self._year >= 1971:
self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday"))
# Casimir Pulaski Day
if self._year >= 1978:
self._add_holiday_1st_mon_of_mar("Casimir Pulaski Day")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
def _populate_subdiv_in_public_holidays(self):
# Good Friday
self._add_good_friday("Good Friday")
# Primary Election Day
if self._year >= 2015 or (self._year >= 2006 and self._year % 2 == 0):
self._add_holiday_1_day_past_1st_mon_of_may("Primary Election Day")
# Election Day
if self._year >= 2015 or (self._year >= 2008 and self._year % 2 == 0):
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
# Lincoln's Birthday
if self._year >= 2010:
self._add_holiday_1_day_past_4th_thu_of_nov("Lincoln's Birthday")
# Washington's Birthday
if self._year >= 1879:
self._add_holiday(
"Washington's Birthday",
self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY),
)
def _populate_subdiv_ks_public_holidays(self):
# Christmas Eve
if self._year >= 2013:
self._add_christmas_eve_holiday()
def _populate_subdiv_ky_public_holidays(self):
# Good Friday
self._add_good_friday("Good Friday")
# New Year's Eve
if self._year >= 2013:
self._add_observed(self._add_new_years_eve("New Year's Eve"))
def _populate_subdiv_la_public_holidays(self):
# Inauguration Day
if self._year >= 1789 and (self._year - 1789) % 4 == 0:
name = "Inauguration Day"
self._add_observed(
self._add_holiday_jan_20(name)
if self._year >= 1937
else self._add_holiday_mar_4(name),
rule=SUN_TO_NEXT_MON,
)
# Mardi Gras
if self._year >= 1857:
self._add_carnival_tuesday("Mardi Gras")
# Good Friday
self._add_good_friday("Good Friday")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
def _populate_subdiv_ma_public_holidays(self):
# Evacuation Day
if self._year >= 1901:
self._add_observed(
self._add_holiday_mar_17("Evacuation Day"), rule=SAT_SUN_TO_NEXT_MON
)
# Patriots' Day
if self._year >= 1894:
name = "Patriots' Day"
if self._year >= 1969:
self._add_holiday_3rd_mon_of_apr(name)
else:
self._add_holiday_apr_19(name)
def _populate_subdiv_md_public_holidays(self):
if self._year >= 1789 and (self._year - 1789) % 4 == 0:
# Inauguration Day
name = "Inauguration Day"
self._add_observed(
self._add_holiday_jan_20(name)
if self._year >= 1937
else self._add_holiday_mar_4(name),
rule=SUN_TO_NEXT_MON,
)
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# American Indian Heritage Day
if self._year >= 2008:
self._add_holiday_1_day_past_4th_thu_of_nov("American Indian Heritage Day")
def _populate_subdiv_me_public_holidays(self):
# Patriots' Day
if self._year >= 1894:
name = "Patriots' Day"
if self._year >= 1969:
self._add_holiday_3rd_mon_of_apr("Patriots' Day")
else:
self._add_holiday_apr_19(name)
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day" if self._year >= 2019 else "Columbus Day"
)
def _populate_subdiv_mi_public_holidays(self):
if self._year >= 2013:
# Christmas Eve
self._add_christmas_eve_holiday()
# New Year's Eve
self._add_observed(self._add_new_years_eve("New Year's Eve"))
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
# Day after Thanksgiving
if self._year >= 2017:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_mn_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Washington's and Lincoln's Birthday")
def _populate_subdiv_mo_public_holidays(self):
# Truman Day
if self._year >= 1949:
self._add_observed(self._add_holiday_may_8("Truman Day"))
def _populate_subdiv_mp_public_holidays(self):
# Commonwealth Covenant Day in Northern Mariana Islands
self._add_observed(self._add_holiday_mar_24("Commonwealth Covenant Day"))
# Good Friday
self._add_good_friday("Good Friday")
# Commonwealth Cultural Day in Northern Mariana Islands
self._add_holiday_2nd_mon_of_oct("Commonwealth Cultural Day")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
# Citizenship Day in Northern Mariana Islands
self._add_observed(self._add_holiday_nov_4("Citizenship Day"))
# Constitution Day in Northern Mariana Islands
self._add_observed(self._add_holiday_dec_8("Constitution Day"))
def _populate_subdiv_ms_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan(
"Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays"
)
# Confederate Memorial Day
if self._year >= 1866:
self._add_holiday_last_mon_of_apr("Confederate Memorial Day")
def _populate_subdiv_mt_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Lincoln's and Washington's Birthdays")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
def _populate_subdiv_nc_public_holidays(self):
# Good Friday
self._add_good_friday("Good Friday")
# Day After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
# Christmas Eve
if self._year >= 2013:
self._add_christmas_eve_holiday()
# Day After Christmas
if self._year >= 2013:
# If on Saturday or Sunday, observed on Monday
# If on Monday, observed on Tuesday
name = "Day After Christmas"
self._add_observed(
self._add_christmas_day_two(name),
name=name,
rule=MON_TO_NEXT_TUE + SAT_SUN_TO_NEXT_MON,
)
def _populate_subdiv_nd_public_holidays(self):
pass
def _populate_subdiv_ne_public_holidays(self):
# Arbor Day
if self._year >= 1875:
name = "Arbor Day"
if self._year >= 1989:
self._add_holiday_last_fri_of_apr(name)
else:
self._add_holiday_apr_22(name)
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day" if self._year >= 2020 else "Columbus Day"
)
def _populate_subdiv_nh_public_holidays(self):
# Martin Luther King Jr. Day
if self._year >= 1986:
self._add_holiday_3rd_mon_of_jan("Dr. Martin Luther King Jr. / Civil Rights Day")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
# Day After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_nj_public_holidays(self):
# Lincoln's Birthday
if self._year >= 1971:
self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday"))
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents Day")
# Good Friday
self._add_good_friday("Good Friday")
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
def _populate_subdiv_nm_public_holidays(self):
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day" if self._year >= 2019 else "Columbus Day"
)
# Presidents' Day
self._add_holiday_1_day_past_4th_thu_of_nov("Presidents' Day")
def _populate_subdiv_nv_public_holidays(self):
# Nevada Day
if self._year >= 1933:
name = "Nevada Day"
self._add_observed(
self._add_holiday_last_fri_of_oct(name)
if self._year >= 2000
else self._add_holiday_oct_31(name)
)
# Family Day
self._add_holiday_1_day_past_4th_thu_of_nov("Family Day")
def _populate_subdiv_ny_public_holidays(self):
# Lincoln's Birthday
if self._year >= 1971:
self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday"))
# Susan B. Anthony Day
if self._year >= 2004:
self._add_holiday_feb_15("Susan B. Anthony Day")
# Election Day
if self._year >= 2015 or (self._year >= 2008 and self._year % 2 == 0):
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
def _populate_subdiv_oh_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Washington-Lincoln Day")
def _populate_subdiv_ok_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Day After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_or_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents Day")
def _populate_subdiv_pa_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Day After Thanksgiving
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_pr_public_holidays(self):
# Epiphany
self._add_epiphany_day("Epiphany")
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Emancipation Day
self._add_observed(self._add_holiday_mar_22("Emancipation Day"), rule=SUN_TO_NEXT_MON)
# Good Friday
self._add_good_friday("Good Friday")
# Constitution Day
self._add_observed(self._add_holiday_jul_25("Constitution Day"), rule=SUN_TO_NEXT_MON)
# Discovery Day
self._add_observed(self._add_holiday_nov_19("Discovery Day"), rule=SUN_TO_NEXT_MON)
def _populate_subdiv_ri_public_holidays(self):
# Victory Day
if self._year >= 1948:
self._add_holiday_2nd_mon_of_aug("Victory Day")
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day / Columbus Day" if self._year >= 2022 else "Columbus Day"
)
def _populate_subdiv_sc_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("President's Day")
# Confederate Memorial Day
if self._year >= 1866:
self._add_holiday_4th_mon_of_apr("Confederate Memorial Day")
def _populate_subdiv_sd_public_holidays(self):
# Native Americans' Day / Columbus Day
if self._year >= 1937:
name = "Native Americans' Day" if self._year >= 1990 else "Columbus Day"
if self._year >= 1970:
self._add_holiday_2nd_mon_of_oct(name)
else:
self._add_columbus_day(name)
def _populate_subdiv_tn_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("President's Day")
# Good Friday
self._add_good_friday("Good Friday")
def _populate_subdiv_tx_public_holidays(self):
# Confederate Memorial Day
if self._year >= 1931:
self._add_holiday_jan_19("Confederate Memorial Day")
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Texas Independence Day
if self._year >= 1874:
self._add_holiday_mar_2("Texas Independence Day")
# Cesar Chavez Day
if self._year >= 2000:
self._add_holiday_mar_31("Cesar Chavez Day")
# Good Friday
self._add_good_friday("Good Friday")
# San Jacinto Day
if self._year >= 1875:
self._add_holiday_apr_21("San Jacinto Day")
# Emancipation Day In Texas
if self._year >= 1980:
self._add_holiday_jun_19("Emancipation Day In Texas")
# Lyndon Baines Johnson Day
if self._year >= 1973:
self._add_holiday_aug_27("Lyndon Baines Johnson Day")
# Friday After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Friday After Thanksgiving")
# Christmas Eve
if self._year >= 1981:
self._add_christmas_eve_holiday()
# Day After Christmas
if self._year >= 1981:
self._add_christmas_day_two("Day After Christmas")
def _populate_subdiv_um_public_holidays(self):
pass
def _populate_subdiv_ut_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Washington and Lincoln Day")
# Pioneer Day
if self._year >= 1849:
self._add_observed(self._add_holiday_jul_24("Pioneer Day"))
def _populate_subdiv_va_public_holidays(self):
# Lee Jackson Day
if 1889 <= self._year <= 2020:
name = "Lee Jackson Day"
if self._year >= 2000:
self._add_holiday_3_days_prior_3rd_mon_of_jan(name)
elif self._year >= 1983:
self._add_holiday_3rd_mon_of_jan(name)
else:
self._add_holiday_jan_19(name)
# Inauguration Day
if self._year >= 1789 and (self._year - 1789) % 4 == 0:
name = "Inauguration Day"
self._add_observed(
self._add_holiday_jan_20(name)
if self._year >= 1937
else self._add_holiday_mar_4(name),
rule=SUN_TO_NEXT_MON,
)
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("George Washington Day")
# Indigenous Peoples' Day
if self._year >= 1971:
self._add_holiday_2nd_mon_of_oct(
"Indigenous Peoples' Day" if self._year >= 2020 else "Columbus Day"
)
def _populate_subdiv_vi_public_holidays(self):
# Three Kings Day
self._add_epiphany_day("Three Kings Day")
# Washington's Birthday
if self._year >= 1879:
name = "Presidents' Day"
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb(name)
else:
self._add_holiday_feb_22(name)
# Transfer Day
self._add_holiday_mar_31("Transfer Day")
# Holy Thursday
self._add_holy_thursday("Holy Thursday")
# Good Friday
self._add_good_friday("Good Friday")
# Easter Monday
self._add_easter_monday("Easter Monday")
# Emancipation Day in US Virgin Islands
self._add_holiday_jul_3("Emancipation Day")
# Columbus Day
if self._year >= 1937:
name = "Columbus Day and Puerto Rico Friendship Day"
if self._year >= 1970:
self._add_holiday_2nd_mon_of_oct(name)
else:
self._add_columbus_day(name)
# Liberty Day
self._add_holiday_nov_1("Liberty Day")
# Christmas Second Day
self._add_christmas_day_two("Christmas Second Day")
def _populate_subdiv_vt_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# Town Meeting Day
if self._year >= 1800:
self._add_holiday_1st_tue_of_mar("Town Meeting Day")
# Bennington Battle Day
if self._year >= 1778:
self._add_observed(self._add_holiday_aug_16("Bennington Battle Day"))
def _populate_subdiv_wa_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
def _populate_subdiv_wi_public_holidays(self):
# Susan B. Anthony Day
if self._year >= 1976:
self._add_holiday_feb_15("Susan B. Anthony Day")
if self._year >= 2012:
# Christmas Eve
self._add_christmas_eve_holiday()
# New Year's Eve
self._add_observed(self._add_new_years_eve("New Year's Eve"))
def _populate_subdiv_wv_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("Presidents' Day")
# West Virginia Day
if self._year >= 1927:
self._add_observed(self._add_holiday_jun_20("West Virginia Day"))
# Election Day
if self._year >= 2008 and self._year % 2 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
# Day After Thanksgiving
if self._year >= 1975:
self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving")
def _populate_subdiv_wy_public_holidays(self):
# Washington's Birthday
if self._year >= 1971:
self._add_holiday_3rd_mon_of_feb("President's Day")
def _populate_government_holidays(self):
# Federal holidays in the United States.
self._populate_common(include_federal=True)
def _populate_unofficial_holidays(self):
# Very common celebrated cultural days, but no official observance.
# Due to its nature, no in-lieus are observed.
# Valentine's Day
# While the modern iteration of Valentine's Day has started in the UK in 1797,
# it wasn't until 1847 in the US that this started to be observed here.
if self._year >= 1847:
self._add_holiday_feb_14("Valentine's Day")
# Saint Patrick's Day
# Started in Boston in 1737 for the US.
self._add_holiday_mar_17("Saint Patrick's Day")
# Halloween
# Halloween began in the US sometime around the 19th century.
self._add_holiday_oct_31("Halloween")
# Continental US non-Public dates
if self.subdiv not in {"AS", "GU", "MP", "PR", "UM", "VI"}:
# Groundhog Day
# First observed on Feb 2 in 1886 in Continental US + Hawaii.
if self._year >= 1886:
self._add_holiday_feb_2("Groundhog Day")
# Election Day
# May be duplicates for certain states which has this as their actual public holiday.
# The current US Presidential Election date pattern was codified in 1848 nationwide.
if self._year >= 1848 and self._year % 4 == 0:
self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
class US(UnitedStates):
pass
class USA(UnitedStates):
pass