diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..243a11b1695 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Add Emergency Medicaid eligibility for undocumented immigrants diff --git a/policyengine_us/parameters/gov/hhs/medicaid/emergency_medicaid/enabled.yaml b/policyengine_us/parameters/gov/hhs/medicaid/emergency_medicaid/enabled.yaml new file mode 100644 index 00000000000..320d9f2428c --- /dev/null +++ b/policyengine_us/parameters/gov/hhs/medicaid/emergency_medicaid/enabled.yaml @@ -0,0 +1,14 @@ +description: The United States provides Emergency Medicaid for individuals who meet Medicaid eligibility requirements but for their immigration status. +values: + 0001-01-01: false + 1987-01-01: true + +metadata: + unit: bool + period: year + label: Emergency Medicaid enabled + reference: + - title: 42 USC 1396b(v)(2) - Exception for Emergency Medical Services + href: https://www.law.cornell.edu/uscode/text/42/1396b#v + - title: 8 USC 1611(b)(1)(A) - Exception for Emergency Medical Care + href: https://www.law.cornell.edu/uscode/text/8/1611#b_1_A diff --git a/policyengine_us/parameters/gov/hhs/medicaid/emergency_medicaid/uses_medicaid_income_thresholds.yaml b/policyengine_us/parameters/gov/hhs/medicaid/emergency_medicaid/uses_medicaid_income_thresholds.yaml new file mode 100644 index 00000000000..83fa01576f4 --- /dev/null +++ b/policyengine_us/parameters/gov/hhs/medicaid/emergency_medicaid/uses_medicaid_income_thresholds.yaml @@ -0,0 +1,13 @@ +description: The United States requires Emergency Medicaid applicants to meet the same income thresholds as regular Medicaid for their eligibility category. +values: + 1987-01-01: true + +metadata: + unit: bool + period: year + label: Emergency Medicaid uses Medicaid income thresholds + reference: + - title: 42 USC 1396b(v)(2)(B) - Emergency Medicaid Eligibility Requirements + href: https://www.law.cornell.edu/uscode/text/42/1396b#v_2_B + - title: 42 CFR 435.406 - Citizenship and Noncitizen Eligibility + href: https://www.law.cornell.edu/cfr/text/42/435.406 diff --git a/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/emergency_medicaid/integration.yaml b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/emergency_medicaid/integration.yaml new file mode 100644 index 00000000000..dfc67e6e773 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/emergency_medicaid/integration.yaml @@ -0,0 +1,667 @@ +# Integration tests for Emergency Medicaid +# Per 42 USC 1396b(v), Emergency Medicaid provides coverage for individuals who: +# 1. Are NOT eligible for regular Medicaid due to immigration status +# 2. Meet all other Medicaid eligibility requirements (income, categorical) +# 3. Have an emergency medical condition +# +# References: +# - 42 USC 1396b(v): https://www.law.cornell.edu/uscode/text/42/1396b#v +# - 42 CFR 440.255: https://www.law.cornell.edu/cfr/text/42/440.255 +# - 8 USC 1611(b)(1)(A): https://www.law.cornell.edu/uscode/text/8/1611#b_1_A +# +# 2025 FPL for 1 person in contiguous US: $15,650 +# 133% FPL (Medicaid adult threshold): ~$20,815 +# 138% FPL (with 5% disregard): ~$21,597 + +# ============================================================ +# ELIGIBLE CASES - Integration tests showing full pipeline +# ============================================================ + +- name: Case 1, undocumented single adult with emergency condition and low income. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 18_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + # Using CO (Medicaid expansion state) instead of TX (non-expansion) + # CO does NOT cover undocumented immigrants + state_code: CO + output: + # Immigration status check + # Undocumented immigrants are not eligible for regular Medicaid in CO + is_medicaid_immigration_status_eligible: [false] + # Has emergency condition + has_emergency_medical_condition: [true] + # Income: $18,000 < ~$21,597 (138% FPL with 5% disregard), meets income requirement + # Medicaid category should be ADULT (age 35, income-eligible in expansion state) + # Therefore eligible for Emergency Medicaid + is_emergency_medicaid_eligible: [true] + +- name: Case 2, US citizen with emergency condition should get regular Medicaid. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 18_000 + immigration_status: CITIZEN + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: TX + output: + # Citizens are eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [true] + # Has emergency condition + has_emergency_medical_condition: [true] + # Should NOT be eligible for Emergency Medicaid (gets regular Medicaid instead) + is_emergency_medicaid_eligible: [false] + +- name: Case 3, undocumented adult without emergency condition. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + employment_income: 15_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: false + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: FL + output: + # Undocumented, not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + # No emergency condition + has_emergency_medical_condition: [false] + # Not eligible - missing emergency condition requirement + is_emergency_medicaid_eligible: [false] + +- name: Case 4, undocumented pregnant woman in labor. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 28 + employment_income: 20_000 + immigration_status: UNDOCUMENTED + is_pregnant: true + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AZ + output: + # Undocumented, not eligible for regular Medicaid in AZ + is_medicaid_immigration_status_eligible: [false] + # Pregnant with emergency condition (labor and delivery is emergency per statute) + is_pregnant: [true] + has_emergency_medical_condition: [true] + # Income $20,000 is below pregnant woman threshold (typically 133-319% FPL) + # Eligible for Emergency Medicaid for labor and delivery + is_emergency_medicaid_eligible: [true] + +- name: Case 5, undocumented adult with income too high. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + employment_income: 50_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: OH + output: + # Undocumented, not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + # Has emergency condition + has_emergency_medical_condition: [true] + # Income $50,000 >> ~$20,815 (133% FPL for single adult) + # Does not meet Medicaid income eligibility - medicaid_category should be NONE + # Not eligible for Emergency Medicaid due to income + is_emergency_medicaid_eligible: [false] + +- name: Case 6, DACA recipient with emergency condition. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 25 + employment_income: 16_000 + immigration_status: DACA + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + # Using NV (Medicaid expansion state) instead of GA (non-expansion) + # NV does NOT cover undocumented/DACA immigrants + state_code: NV + output: + # DACA recipients generally not eligible for regular Medicaid in most states + is_medicaid_immigration_status_eligible: [false] + # Has emergency condition + has_emergency_medical_condition: [true] + # Income $16,000 < ~$21,597 (138% FPL with 5% disregard), meets income requirement + # Eligible for Emergency Medicaid + is_emergency_medicaid_eligible: [true] + +- name: Case 7, legal permanent resident should get regular Medicaid. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + employment_income: 14_000 + immigration_status: LEGAL_PERMANENT_RESIDENT + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + # LPRs are eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [true] + # Has emergency condition + has_emergency_medical_condition: [true] + # Should NOT be eligible for Emergency Medicaid (gets regular Medicaid instead) + is_emergency_medicaid_eligible: [false] + +# ============================================================ +# EDGE CASES - Zero income +# ============================================================ + +- name: Case 8, undocumented adult with zero income and emergency. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 0 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + # Using CO instead of CA (CA covers undocumented immigrants) + # CO is a Medicaid expansion state that does NOT cover undocumented + state_code: CO + output: + # Zero income - definitely meets income requirements + # Undocumented, not eligible for regular Medicaid in CO + is_medicaid_immigration_status_eligible: [false] + # Has emergency condition + has_emergency_medical_condition: [true] + # Should be eligible for Emergency Medicaid + is_emergency_medicaid_eligible: [true] + +# ============================================================ +# EDGE CASES - Multiple people in household +# ============================================================ + +- name: Case 9, mixed household with citizen parent and undocumented child. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 25_000 + immigration_status: CITIZEN + has_emergency_medical_condition: false + person2: + age: 10 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: TX + output: + # Person1 (citizen) is eligible for regular Medicaid + # Person2 (undocumented child) is NOT eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [true, false] + # Person1 has no emergency, Person2 has emergency + has_emergency_medical_condition: [false, true] + # Person1: Citizen, so not eligible for Emergency Medicaid (gets regular) + # Person2: Undocumented child with emergency, should be eligible + is_emergency_medicaid_eligible: [false, true] + +- name: Case 10, household with two undocumented adults only one with emergency. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + employment_income: 20_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + person2: + age: 38 + employment_income: 15_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: false + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: NV + output: + # Both undocumented, neither eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false, false] + # Person1 has emergency, Person2 does not + has_emergency_medical_condition: [true, false] + # Combined income $35,000 for 2-person household + # 2-person FPL = $21,150, 138% FPL = $29,187 + # Income level = $35,000 / $21,150 = 1.65 (165% FPL) > 138% limit + # Both have medicaid_category = NONE due to income exceeding limit + # Neither eligible for Emergency Medicaid (no valid Medicaid category) + is_emergency_medicaid_eligible: [false, false] + +- name: Case 11, household with undocumented parent and citizen child. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 32 + employment_income: 18_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + person2: + age: 5 + immigration_status: CITIZEN + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: FL + output: + # Person1 (undocumented) NOT eligible for regular Medicaid + # Person2 (citizen child) IS eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false, true] + # Both have emergency conditions + has_emergency_medical_condition: [true, true] + # Person1: FL has no Medicaid expansion (adult income limit = -inf) + # So person1 has medicaid_category = NONE, not eligible for Emergency Medicaid + # Person2: Citizen child - gets regular Medicaid, NOT Emergency Medicaid + is_emergency_medicaid_eligible: [false, false] + +# ============================================================ +# EDGE CASES - Large household +# ============================================================ + +- name: Case 12, large household with mixed immigration status and emergency conditions. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + employment_income: 40_000 + immigration_status: CITIZEN + has_emergency_medical_condition: false + person2: + age: 42 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + person3: + age: 16 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: false + person4: + age: 12 + immigration_status: CITIZEN + has_emergency_medical_condition: true + person5: + age: 8 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5] + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: AZ + output: + # Person1: Citizen - eligible for regular Medicaid + # Person2: Undocumented - NOT eligible for regular Medicaid + # Person3: Undocumented - NOT eligible for regular Medicaid + # Person4: Citizen - eligible for regular Medicaid + # Person5: Undocumented - NOT eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [true, false, false, true, false] + # Emergency conditions: 1=F, 2=T, 3=F, 4=T, 5=T + has_emergency_medical_condition: [false, true, false, true, true] + # Person1: Citizen, no emergency - NOT eligible for Emergency Medicaid + # Person2: Undocumented, emergency - ELIGIBLE for Emergency Medicaid + # Person3: Undocumented, no emergency - NOT eligible + # Person4: Citizen, emergency - gets regular Medicaid instead + # Person5: Undocumented, emergency - ELIGIBLE for Emergency Medicaid + is_emergency_medicaid_eligible: [false, true, false, false, true] + +# ============================================================ +# EDGE CASES - All immigration status types in household +# ============================================================ + +- name: Case 13, TPS recipient with emergency condition. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + employment_income: 15_000 + immigration_status: TPS + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: IL + output: + # TPS generally not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + has_emergency_medical_condition: [true] + # Should be eligible for Emergency Medicaid + is_emergency_medicaid_eligible: [true] + +- name: Case 14, refugee with emergency should get regular Medicaid. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 28 + employment_income: 12_000 + immigration_status: REFUGEE + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: MI + output: + # Refugees ARE eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [true] + has_emergency_medical_condition: [true] + # Should NOT be eligible for Emergency Medicaid (gets regular instead) + is_emergency_medicaid_eligible: [false] + +- name: Case 15, asylee with emergency should get regular Medicaid. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 33 + employment_income: 10_000 + immigration_status: ASYLEE + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: WA + output: + # Asylees ARE eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [true] + has_emergency_medical_condition: [true] + # Should NOT be eligible for Emergency Medicaid + is_emergency_medicaid_eligible: [false] + +# ============================================================ +# EDGE CASES - Age boundaries +# ============================================================ + +- name: Case 16, undocumented newborn with emergency. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 0 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: TX + output: + # Undocumented infant not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + has_emergency_medical_condition: [true] + # Should be eligible for Emergency Medicaid (if meets Medicaid category) + is_emergency_medicaid_eligible: [true] + +- name: Case 17, undocumented elderly person with emergency. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 75 + employment_income: 10_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: FL + output: + # Undocumented elderly not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + has_emergency_medical_condition: [true] + # Should be eligible for Emergency Medicaid + is_emergency_medicaid_eligible: [true] + +# ============================================================ +# EDGE CASES - Income boundary conditions +# ============================================================ + +- name: Case 18, undocumented adult at exactly FPL threshold. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 20_815 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CO + output: + # Undocumented, not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + has_emergency_medical_condition: [true] + # Income at 133% FPL threshold (~$20,815 for single adult in 2025) + # Whether eligible depends on exact Medicaid income calculation + is_emergency_medicaid_eligible: [true] + +- name: Case 19, undocumented adult just above FPL threshold. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + employment_income: 25_000 + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: PA + output: + # Undocumented, not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + has_emergency_medical_condition: [true] + # Income $25,000 > ~$21,597 (138% FPL with 5% disregard) + # Should NOT be eligible - income too high, no Medicaid category + is_emergency_medicaid_eligible: [false] + +# ============================================================ +# EDGE CASES - Disabled and SSI recipients +# ============================================================ + +- name: Case 20, undocumented disabled adult with emergency. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 55 + employment_income: 0 + is_disabled: true + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + tax_units: + tax_unit: + members: [person1] + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + # Changed from NY to TX because NY covers undocumented immigrants + # TX does not cover undocumented immigrants + state_code: TX + output: + # Undocumented in TX, not eligible for regular Medicaid + is_medicaid_immigration_status_eligible: [false] + has_emergency_medical_condition: [true] + # TX does not expand Medicaid for adults (income limit = -inf) + # So medicaid_category = NONE for adults + # However, disabled people may qualify under senior_or_disabled category + # Need to check if disabled person qualifies for Emergency Medicaid + is_emergency_medicaid_eligible: [true] diff --git a/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/emergency_medicaid/is_emergency_medicaid_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/emergency_medicaid/is_emergency_medicaid_eligible.yaml new file mode 100644 index 00000000000..45de412de03 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/emergency_medicaid/is_emergency_medicaid_eligible.yaml @@ -0,0 +1,376 @@ +# Unit tests for is_emergency_medicaid_eligible variable +# Per 42 USC 1396b(v)(2), Emergency Medicaid eligibility requires: +# 1. Person is NOT eligible for regular Medicaid due to immigration status +# 2. Person meets other Medicaid eligibility requirements (income, categorical) +# 3. Person has an emergency medical condition +# +# Reference: https://www.law.cornell.edu/uscode/text/42/1396b#v + +# ============================================================ +# ELIGIBLE CASES - Undocumented/ineligible immigrants with emergency +# ============================================================ + +- name: Case 1, undocumented immigrant with emergency condition and low income. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 2, DACA recipient with emergency condition. + period: 2025 + input: + immigration_status: DACA + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 3, TPS recipient with emergency condition. + period: 2025 + input: + immigration_status: TPS + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 4, DACA-TPS combined status with emergency condition. + period: 2025 + input: + immigration_status: DACA_TPS + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +# ============================================================ +# ELIGIBLE CASES - All Medicaid Category Types +# ============================================================ + +- name: Case 5, undocumented infant with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: INFANT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 6, undocumented young child with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: YOUNG_CHILD + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 7, undocumented older child with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: OLDER_CHILD + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 8, undocumented young adult with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: YOUNG_ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 9, undocumented parent with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: PARENT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 10, undocumented pregnant woman with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: PREGNANT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 11, undocumented SSI recipient with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: SSI_RECIPIENT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +- name: Case 12, undocumented senior or disabled with emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: SENIOR_OR_DISABLED + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +# ============================================================ +# INELIGIBLE CASES - US citizens and qualified aliens +# (Should get regular Medicaid, not Emergency Medicaid) +# ============================================================ + +- name: Case 13, US citizen should get regular Medicaid not Emergency Medicaid. + period: 2025 + input: + immigration_status: CITIZEN + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 14, legal permanent resident eligible for regular Medicaid. + period: 2025 + input: + immigration_status: LEGAL_PERMANENT_RESIDENT + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 15, refugee should get regular Medicaid not Emergency Medicaid. + period: 2025 + input: + immigration_status: REFUGEE + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 16, asylee should get regular Medicaid not Emergency Medicaid. + period: 2025 + input: + immigration_status: ASYLEE + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 17, deportation withheld status eligible for regular Medicaid. + period: 2025 + input: + immigration_status: DEPORTATION_WITHHELD + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 18, Cuban-Haitian entrant eligible for regular Medicaid. + period: 2025 + input: + immigration_status: CUBAN_HAITIAN_ENTRANT + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 19, conditional entrant eligible for regular Medicaid. + period: 2025 + input: + immigration_status: CONDITIONAL_ENTRANT + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 20, paroled one year eligible for regular Medicaid. + period: 2025 + input: + immigration_status: PAROLED_ONE_YEAR + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +# ============================================================ +# INELIGIBLE CASES - No emergency medical condition +# ============================================================ + +- name: Case 21, undocumented immigrant without emergency condition. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: false + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 22, DACA recipient without emergency condition. + period: 2025 + input: + immigration_status: DACA + has_emergency_medical_condition: false + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +# ============================================================ +# INELIGIBLE CASES - No Medicaid category eligibility +# ============================================================ + +- name: Case 23, undocumented immigrant with emergency but no Medicaid category. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: NONE + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 24, DACA recipient with emergency but no Medicaid category. + period: 2025 + input: + immigration_status: DACA + has_emergency_medical_condition: true + medicaid_category: NONE + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 25, TPS recipient with emergency but no Medicaid category. + period: 2025 + input: + immigration_status: TPS + has_emergency_medical_condition: true + medicaid_category: NONE + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +# ============================================================ +# EDGE CASES - Program enabled check (pre-1987) +# ============================================================ + +- name: Case 26, program not enabled before 1987. + period: 1986 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 27, program enabled starting 1987. + period: 1987 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: true + +# ============================================================ +# EDGE CASES - All conditions must be met +# ============================================================ + +- name: Case 28, all conditions false. + period: 2025 + input: + immigration_status: CITIZEN + has_emergency_medical_condition: false + medicaid_category: NONE + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 29, only emergency condition true. + period: 2025 + input: + immigration_status: CITIZEN + has_emergency_medical_condition: true + medicaid_category: NONE + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 30, only medicaid category met. + period: 2025 + input: + immigration_status: CITIZEN + has_emergency_medical_condition: false + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false + +- name: Case 31, only immigration ineligible. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: false + medicaid_category: NONE + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 32, emergency and immigration ineligible but no category. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: true + medicaid_category: NONE + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 33, category and immigration ineligible but no emergency. + period: 2025 + input: + immigration_status: UNDOCUMENTED + has_emergency_medical_condition: false + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: false + output: + is_emergency_medicaid_eligible: false + +- name: Case 34, category and emergency but immigration eligible. + period: 2025 + input: + immigration_status: CITIZEN + has_emergency_medical_condition: true + medicaid_category: ADULT + is_medicaid_immigration_status_eligible: true + output: + is_emergency_medicaid_eligible: false diff --git a/policyengine_us/variables/gov/hhs/medicaid/emergency_medicaid/has_emergency_medical_condition.py b/policyengine_us/variables/gov/hhs/medicaid/emergency_medicaid/has_emergency_medical_condition.py new file mode 100644 index 00000000000..abf856133e5 --- /dev/null +++ b/policyengine_us/variables/gov/hhs/medicaid/emergency_medicaid/has_emergency_medical_condition.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class has_emergency_medical_condition(Variable): + value_type = bool + entity = Person + label = "Has emergency medical condition" + definition_period = YEAR + default_value = False + reference = ( + "https://www.law.cornell.edu/uscode/text/42/1396b#v_3", + "https://www.law.cornell.edu/cfr/text/42/440.255#c", + ) + # Placing the patient's health in serious jeopardy + # Serious impairment to bodily functions + # Serious dysfunction of any bodily organ or part diff --git a/policyengine_us/variables/gov/hhs/medicaid/emergency_medicaid/is_emergency_medicaid_eligible.py b/policyengine_us/variables/gov/hhs/medicaid/emergency_medicaid/is_emergency_medicaid_eligible.py new file mode 100644 index 00000000000..e59e6c31fa9 --- /dev/null +++ b/policyengine_us/variables/gov/hhs/medicaid/emergency_medicaid/is_emergency_medicaid_eligible.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * + + +class is_emergency_medicaid_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for Emergency Medicaid" + definition_period = YEAR + reference = ( + "https://www.law.cornell.edu/uscode/text/42/1396b#v_2", + "https://www.law.cornell.edu/cfr/text/42/435.406", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.hhs.medicaid.emergency_medicaid + + has_emergency_condition = person( + "has_emergency_medical_condition", period + ) + medicaid_category = person("medicaid_category", period) + meets_medicaid_requirements = ( + medicaid_category != medicaid_category.possible_values.NONE + ) + immigration_status_eligible = person( + "is_medicaid_immigration_status_eligible", period + ) + + return ( + p.enabled + & has_emergency_condition + & meets_medicaid_requirements + & ~immigration_status_eligible + ) diff --git a/uv.lock b/uv.lock index 0c06d6e488c..8b7ecb78323 100644 --- a/uv.lock +++ b/uv.lock @@ -586,7 +586,7 @@ version = "3.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/6a/0d79de0b025aa85dc8864de8e97659c94cf3d23148394a954dc5ca52f8c8/h5py-3.15.1.tar.gz", hash = "sha256:c86e3ed45c4473564de55aa83b6fc9e5ead86578773dfbd93047380042e26b69", size = 426236, upload-time = "2025-10-16T10:35:27.404Z" } wheels = [ @@ -714,14 +714,14 @@ wheels = [ [[package]] name = "importlib-metadata" -version = "8.7.0" +version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, ] [[package]] @@ -1079,7 +1079,7 @@ version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/31/e9/7f77ee19b2d3dcdb561ceaeb915ef6a944eb315412d0e8065c12817b7ff4/microdf_python-1.1.1.tar.gz", hash = "sha256:97dd0cb8562d98a32bbd35861719ae565544143e2ad8a462d6f6261058d9c469", size = 17290, upload-time = "2025-12-01T14:13:57.131Z" } @@ -1089,19 +1089,19 @@ wheels = [ [[package]] name = "mistune" -version = "3.1.4" +version = "3.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588, upload-time = "2025-08-29T07:20:43.594Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467, upload-time = "2025-12-23T11:36:34.994Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload-time = "2025-08-29T07:20:42.218Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598, upload-time = "2025-12-23T11:36:33.211Z" }, ] [[package]] name = "nbclient" -version = "0.10.3" +version = "0.10.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, @@ -1109,9 +1109,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8d/f3/1f6cf2ede4b026bc5f0b424cb41adf22f9c804e90a4dbd4fdb42291a35d5/nbclient-0.10.3.tar.gz", hash = "sha256:0baf171ee246e3bb2391da0635e719f27dc77d99aef59e0b04dcb935ee04c575", size = 62564, upload-time = "2025-12-19T15:50:09.331Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554, upload-time = "2025-12-23T07:45:46.369Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/77/0c73678f5260501a271fd7342bee5d639440f2e9e07d590f1100a056d87c/nbclient-0.10.3-py3-none-any.whl", hash = "sha256:39e9bd403504dd2484dd0fd25235bb6a683ce8cd9873356e40d880696adc9e35", size = 25473, upload-time = "2025-12-19T15:50:07.671Z" }, + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465, upload-time = "2025-12-23T07:45:44.51Z" }, ] [[package]] @@ -1203,7 +1203,7 @@ version = "2.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400, upload-time = "2025-10-13T16:17:27.351Z" } wheels = [ @@ -1316,65 +1316,64 @@ wheels = [ [[package]] name = "numpy" -version = "2.3.5" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" }, - { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" }, - { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, - { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" }, - { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, - { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" }, - { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" }, - { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, - { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, - { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, - { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, - { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, - { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, - { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, - { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, - { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, - { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, - { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, - { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, - { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, - { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, - { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, - { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, - { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, - { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, - { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, - { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, - { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, - { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, - { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, - { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, - { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, - { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, - { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, - { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, - { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" }, - { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" }, - { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" }, - { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" }, - { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a4/7a/6a3d14e205d292b738db449d0de649b373a59edb0d0b4493821d0a3e8718/numpy-2.4.0.tar.gz", hash = "sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934", size = 20685720, upload-time = "2025-12-20T16:18:19.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/7bae7cbcc2f8132271967aa03e03954fc1e48aa1f3bf32b29ca95fbef352/numpy-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e", size = 16940166, upload-time = "2025-12-20T16:15:43.434Z" }, + { url = "https://files.pythonhosted.org/packages/0f/27/6c13f5b46776d6246ec884ac5817452672156a506d08a1f2abb39961930a/numpy-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db", size = 12641781, upload-time = "2025-12-20T16:15:45.701Z" }, + { url = "https://files.pythonhosted.org/packages/14/1c/83b4998d4860d15283241d9e5215f28b40ac31f497c04b12fa7f428ff370/numpy-2.4.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b", size = 5470247, upload-time = "2025-12-20T16:15:47.943Z" }, + { url = "https://files.pythonhosted.org/packages/54/08/cbce72c835d937795571b0464b52069f869c9e78b0c076d416c5269d2718/numpy-2.4.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7", size = 6799807, upload-time = "2025-12-20T16:15:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/ff/be/2e647961cd8c980591d75cdcd9e8f647d69fbe05e2a25613dc0a2ea5fb1a/numpy-2.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548", size = 14701992, upload-time = "2025-12-20T16:15:51.615Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/e1652fb8b6fd91ce6ed429143fe2e01ce714711e03e5b762615e7b36172c/numpy-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346", size = 16646871, upload-time = "2025-12-20T16:15:54.129Z" }, + { url = "https://files.pythonhosted.org/packages/62/23/d841207e63c4322842f7cd042ae981cffe715c73376dcad8235fb31debf1/numpy-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25", size = 16487190, upload-time = "2025-12-20T16:15:56.147Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/6a842c8421ebfdec0a230e65f61e0dabda6edbef443d999d79b87c273965/numpy-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a", size = 18580762, upload-time = "2025-12-20T16:15:58.524Z" }, + { url = "https://files.pythonhosted.org/packages/0a/d1/c79e0046641186f2134dde05e6181825b911f8bdcef31b19ddd16e232847/numpy-2.4.0-cp311-cp311-win32.whl", hash = "sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53", size = 6233359, upload-time = "2025-12-20T16:16:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f0/74965001d231f28184d6305b8cdc1b6fcd4bf23033f6cb039cfe76c9fca7/numpy-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479", size = 12601132, upload-time = "2025-12-20T16:16:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/65/32/55408d0f46dfebce38017f5bd931affa7256ad6beac1a92a012e1fbc67a7/numpy-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6", size = 10573977, upload-time = "2025-12-20T16:16:04.77Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ff/f6400ffec95de41c74b8e73df32e3fff1830633193a7b1e409be7fb1bb8c/numpy-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037", size = 16653117, upload-time = "2025-12-20T16:16:06.709Z" }, + { url = "https://files.pythonhosted.org/packages/fd/28/6c23e97450035072e8d830a3c411bf1abd1f42c611ff9d29e3d8f55c6252/numpy-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83", size = 12369711, upload-time = "2025-12-20T16:16:08.758Z" }, + { url = "https://files.pythonhosted.org/packages/bc/af/acbef97b630ab1bb45e6a7d01d1452e4251aa88ce680ac36e56c272120ec/numpy-2.4.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344", size = 5198355, upload-time = "2025-12-20T16:16:10.902Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c8/4e0d436b66b826f2e53330adaa6311f5cac9871a5b5c31ad773b27f25a74/numpy-2.4.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6", size = 6545298, upload-time = "2025-12-20T16:16:12.607Z" }, + { url = "https://files.pythonhosted.org/packages/ef/27/e1f5d144ab54eac34875e79037011d511ac57b21b220063310cb96c80fbc/numpy-2.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb", size = 14398387, upload-time = "2025-12-20T16:16:14.257Z" }, + { url = "https://files.pythonhosted.org/packages/67/64/4cb909dd5ab09a9a5d086eff9586e69e827b88a5585517386879474f4cf7/numpy-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63", size = 16363091, upload-time = "2025-12-20T16:16:17.32Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9c/8efe24577523ec6809261859737cf117b0eb6fdb655abdfdc81b2e468ce4/numpy-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95", size = 16176394, upload-time = "2025-12-20T16:16:19.524Z" }, + { url = "https://files.pythonhosted.org/packages/61/f0/1687441ece7b47a62e45a1f82015352c240765c707928edd8aef875d5951/numpy-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6", size = 18287378, upload-time = "2025-12-20T16:16:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/d3/6f/f868765d44e6fc466467ed810ba9d8d6db1add7d4a748abfa2a4c99a3194/numpy-2.4.0-cp312-cp312-win32.whl", hash = "sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c", size = 5955432, upload-time = "2025-12-20T16:16:25.06Z" }, + { url = "https://files.pythonhosted.org/packages/d4/b5/94c1e79fcbab38d1ca15e13777477b2914dd2d559b410f96949d6637b085/numpy-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98", size = 12306201, upload-time = "2025-12-20T16:16:26.979Z" }, + { url = "https://files.pythonhosted.org/packages/70/09/c39dadf0b13bb0768cd29d6a3aaff1fb7c6905ac40e9aaeca26b1c086e06/numpy-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667", size = 10308234, upload-time = "2025-12-20T16:16:29.417Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0d/853fd96372eda07c824d24adf02e8bc92bb3731b43a9b2a39161c3667cc4/numpy-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea", size = 16649088, upload-time = "2025-12-20T16:16:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/e3/37/cc636f1f2a9f585434e20a3e6e63422f70bfe4f7f6698e941db52ea1ac9a/numpy-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d", size = 12364065, upload-time = "2025-12-20T16:16:33.491Z" }, + { url = "https://files.pythonhosted.org/packages/ed/69/0b78f37ca3690969beee54103ce5f6021709134e8020767e93ba691a72f1/numpy-2.4.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee", size = 5192640, upload-time = "2025-12-20T16:16:35.636Z" }, + { url = "https://files.pythonhosted.org/packages/1d/2a/08569f8252abf590294dbb09a430543ec8f8cc710383abfb3e75cc73aeda/numpy-2.4.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e", size = 6541556, upload-time = "2025-12-20T16:16:37.276Z" }, + { url = "https://files.pythonhosted.org/packages/93/e9/a949885a4e177493d61519377952186b6cbfdf1d6002764c664ba28349b5/numpy-2.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2", size = 14396562, upload-time = "2025-12-20T16:16:38.953Z" }, + { url = "https://files.pythonhosted.org/packages/99/98/9d4ad53b0e9ef901c2ef1d550d2136f5ac42d3fd2988390a6def32e23e48/numpy-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a", size = 16351719, upload-time = "2025-12-20T16:16:41.503Z" }, + { url = "https://files.pythonhosted.org/packages/28/de/5f3711a38341d6e8dd619f6353251a0cdd07f3d6d101a8fd46f4ef87f895/numpy-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681", size = 16176053, upload-time = "2025-12-20T16:16:44.552Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5b/2a3753dc43916501b4183532e7ace862e13211042bceafa253afb5c71272/numpy-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475", size = 18277859, upload-time = "2025-12-20T16:16:47.174Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c5/a18bcdd07a941db3076ef489d036ab16d2bfc2eae0cf27e5a26e29189434/numpy-2.4.0-cp313-cp313-win32.whl", hash = "sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344", size = 5953849, upload-time = "2025-12-20T16:16:49.554Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f1/719010ff8061da6e8a26e1980cf090412d4f5f8060b31f0c45d77dd67a01/numpy-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d", size = 12302840, upload-time = "2025-12-20T16:16:51.227Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5a/b3d259083ed8b4d335270c76966cb6cf14a5d1b69e1a608994ac57a659e6/numpy-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d", size = 10308509, upload-time = "2025-12-20T16:16:53.313Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/95edcffd1bb6c0633df4e808130545c4f07383ab629ac7e316fb44fff677/numpy-2.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6", size = 12491815, upload-time = "2025-12-20T16:16:55.496Z" }, + { url = "https://files.pythonhosted.org/packages/59/ea/5644b8baa92cc1c7163b4b4458c8679852733fa74ca49c942cfa82ded4e0/numpy-2.4.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5", size = 5320321, upload-time = "2025-12-20T16:16:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/26/4e/e10938106d70bc21319bd6a86ae726da37edc802ce35a3a71ecdf1fdfe7f/numpy-2.4.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3", size = 6641635, upload-time = "2025-12-20T16:16:59.379Z" }, + { url = "https://files.pythonhosted.org/packages/b3/8d/a8828e3eaf5c0b4ab116924df82f24ce3416fa38d0674d8f708ddc6c8aac/numpy-2.4.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d", size = 14456053, upload-time = "2025-12-20T16:17:01.768Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/17d97609d87d4520aa5ae2dcfb32305654550ac6a35effb946d303e594ce/numpy-2.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3", size = 16401702, upload-time = "2025-12-20T16:17:04.235Z" }, + { url = "https://files.pythonhosted.org/packages/18/32/0f13c1b2d22bea1118356b8b963195446f3af124ed7a5adfa8fdecb1b6ca/numpy-2.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa", size = 16242493, upload-time = "2025-12-20T16:17:06.856Z" }, + { url = "https://files.pythonhosted.org/packages/ae/23/48f21e3d309fbc137c068a1475358cbd3a901b3987dcfc97a029ab3068e2/numpy-2.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c", size = 18324222, upload-time = "2025-12-20T16:17:09.392Z" }, + { url = "https://files.pythonhosted.org/packages/ac/52/41f3d71296a3dcaa4f456aaa3c6fc8e745b43d0552b6bde56571bb4b4a0f/numpy-2.4.0-cp313-cp313t-win32.whl", hash = "sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93", size = 6076216, upload-time = "2025-12-20T16:17:11.437Z" }, + { url = "https://files.pythonhosted.org/packages/35/ff/46fbfe60ab0710d2a2b16995f708750307d30eccbb4c38371ea9e986866e/numpy-2.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4", size = 12444263, upload-time = "2025-12-20T16:17:13.182Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e3/9189ab319c01d2ed556c932ccf55064c5d75bb5850d1df7a482ce0badead/numpy-2.4.0-cp313-cp313t-win_arm64.whl", hash = "sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c", size = 10378265, upload-time = "2025-12-20T16:17:15.211Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ef/088e7c7342f300aaf3ee5f2c821c4b9996a1bef2aaf6a49cc8ab4883758e/numpy-2.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6", size = 16819003, upload-time = "2025-12-20T16:18:03.41Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ce/a53017b5443b4b84517182d463fc7bcc2adb4faa8b20813f8e5f5aeb5faa/numpy-2.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4", size = 12567105, upload-time = "2025-12-20T16:18:05.594Z" }, + { url = "https://files.pythonhosted.org/packages/77/58/5ff91b161f2ec650c88a626c3905d938c89aaadabd0431e6d9c1330c83e2/numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba", size = 5395590, upload-time = "2025-12-20T16:18:08.031Z" }, + { url = "https://files.pythonhosted.org/packages/1d/4e/f1a084106df8c2df8132fc437e56987308e0524836aa7733721c8429d4fe/numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d", size = 6709947, upload-time = "2025-12-20T16:18:09.836Z" }, + { url = "https://files.pythonhosted.org/packages/63/09/3d8aeb809c0332c3f642da812ac2e3d74fc9252b3021f8c30c82e99e3f3d/numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf", size = 14535119, upload-time = "2025-12-20T16:18:12.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7f/68f0fc43a2cbdc6bb239160c754d87c922f60fbaa0fa3cd3d312b8a7f5ee/numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98", size = 16475815, upload-time = "2025-12-20T16:18:14.433Z" }, + { url = "https://files.pythonhosted.org/packages/11/73/edeacba3167b1ca66d51b1a5a14697c2c40098b5ffa01811c67b1785a5ab/numpy-2.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b", size = 12489376, upload-time = "2025-12-20T16:18:16.524Z" }, ] [[package]] @@ -1401,7 +1400,7 @@ version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, @@ -1517,7 +1516,7 @@ dependencies = [ { name = "microdf-python" }, { name = "numexpr" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas" }, { name = "plotly" }, { name = "psutil" }, @@ -1535,7 +1534,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.469.0" +version = "1.470.1" source = { editable = "." } dependencies = [ { name = "microdf-python" }, @@ -2321,15 +2320,15 @@ wheels = [ [[package]] name = "typer-slim" -version = "0.20.1" +version = "0.21.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3f/3d/6a4ec47010e8de34dade20c8e7bce90502b173f62a6b41619523a3fcf562/typer_slim-0.20.1.tar.gz", hash = "sha256:bb9e4f7e6dc31551c8a201383df322b81b0ce37239a5ead302598a2ebb6f7c9c", size = 106113, upload-time = "2025-12-19T16:48:54.206Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/3b/2f60ce16f578b1db5b8816d37d6a4d9786b33b76407fc8c13b0b86312c31/typer_slim-0.21.0.tar.gz", hash = "sha256:f2dbd150cfa0fead2242e21fa9f654dfc64773763ddf07c6be9a49ad34f79557", size = 106841, upload-time = "2025-12-25T09:54:55.998Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/f9/a273c8b57c69ac1b90509ebda204972265fdc978fbbecc25980786f8c038/typer_slim-0.20.1-py3-none-any.whl", hash = "sha256:8e89c5dbaffe87a4f86f4c7a9e2f7059b5b68c66f558f298969d42ce34f10122", size = 47440, upload-time = "2025-12-19T16:48:52.678Z" }, + { url = "https://files.pythonhosted.org/packages/b4/84/e97abf10e4a699194ff07fd586ec7f4cf867d9d04bead559a65f9e7aff84/typer_slim-0.21.0-py3-none-any.whl", hash = "sha256:92aee2188ac6fc2b2924bd75bb61a340b78bd8cd51fd9735533ce5a856812c8e", size = 47174, upload-time = "2025-12-25T09:54:54.609Z" }, ] [[package]]