policyengine-us 1.443.0__py3-none-any.whl → 1.444.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ description: Zohran Mamdani's proposed additional NYC income tax on income above a certain threshold is in effect if this is true.
2
+ values:
3
+ 0000-01-01: false
4
+ metadata:
5
+ unit: bool
6
+ period: year
7
+ label: Zohran Mamdani NYC additional millionaire income tax in effect
8
+ reference:
9
+ - title: Mamdani Revenue Proposal
10
+ href: https://drive.google.com/file/d/14-aM9DKG337SDMilmfQtLRR-pDwyWSTc/view
@@ -0,0 +1,18 @@
1
+ description: Zohran Mamdani proposed taxing New York City residents' income above a threshold at this rate.
2
+ metadata:
3
+ type: marginal_rate
4
+ threshold_unit: currency-USD
5
+ rate_unit: /1
6
+ label: Zohran Mamdani NYC high earner income tax rate
7
+ reference:
8
+ - title: Mamdani Revenue Proposal
9
+ href: https://drive.google.com/file/d/14-aM9DKG337SDMilmfQtLRR-pDwyWSTc/view
10
+ brackets:
11
+ - threshold:
12
+ 2026-01-01: 0
13
+ rate:
14
+ 2026-01-01: 0
15
+ - threshold:
16
+ 2026-01-01: 1_000_000
17
+ rate:
18
+ 2026-01-01: 0.02
@@ -0,0 +1,4 @@
1
+ from .mamdani_income_tax import (
2
+ create_nyc_mamdani_income_tax_reform,
3
+ nyc_mamdani_income_tax,
4
+ )
@@ -0,0 +1,84 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_core.periods import period as period_
3
+
4
+
5
+ def create_nyc_mamdani_income_tax() -> Reform:
6
+ class nyc_mamdani_income_tax(Variable):
7
+ value_type = float
8
+ entity = Person
9
+ label = "Zohran Mamdani NYC income tax"
10
+ unit = USD
11
+ definition_period = YEAR
12
+ defined_for = "in_nyc"
13
+
14
+ def formula(person, period, parameters):
15
+ taxable_income = person.tax_unit("nyc_taxable_income", period)
16
+ p = parameters(period).gov.local.ny.mamdani_income_tax
17
+ return p.rate.calc(taxable_income)
18
+
19
+ class nyc_income_tax_before_credits(Variable):
20
+ value_type = float
21
+ entity = TaxUnit
22
+ label = "NYC income tax before credits"
23
+ unit = USD
24
+ definition_period = YEAR
25
+ defined_for = "in_nyc"
26
+
27
+ def formula(tax_unit, period, parameters):
28
+ taxable_income = tax_unit("nyc_taxable_income", period)
29
+ filing_status = tax_unit("filing_status", period)
30
+ filing_statuses = filing_status.possible_values
31
+ p = parameters(period).gov.local.ny.nyc.tax.income.rates
32
+ regular_tax = select(
33
+ [
34
+ filing_status == filing_statuses.SINGLE,
35
+ filing_status == filing_statuses.JOINT,
36
+ filing_status == filing_statuses.HEAD_OF_HOUSEHOLD,
37
+ filing_status == filing_statuses.SURVIVING_SPOUSE,
38
+ filing_status == filing_statuses.SEPARATE,
39
+ ],
40
+ [
41
+ p.single.calc(taxable_income),
42
+ p.joint.calc(taxable_income),
43
+ p.head_of_household.calc(taxable_income),
44
+ p.surviving_spouse.calc(taxable_income),
45
+ p.separate.calc(taxable_income),
46
+ ],
47
+ )
48
+ mamdani_tax = add(tax_unit, period, ["nyc_mamdani_income_tax"])
49
+ return regular_tax + mamdani_tax
50
+
51
+ class reform(Reform):
52
+ def apply(self):
53
+ self.update_variable(nyc_mamdani_income_tax)
54
+ self.update_variable(nyc_income_tax_before_credits)
55
+
56
+ return reform
57
+
58
+
59
+ def create_nyc_mamdani_income_tax_reform(
60
+ parameters, period, bypass: bool = False
61
+ ):
62
+ if bypass:
63
+ return create_nyc_mamdani_income_tax()
64
+
65
+ p = parameters.gov.local.ny.mamdani_income_tax
66
+
67
+ reform_active = False
68
+ current_period = period_(period)
69
+
70
+ for i in range(5):
71
+ if p(current_period).in_effect:
72
+ reform_active = True
73
+ break
74
+ current_period = current_period.offset(1, "year")
75
+
76
+ if reform_active:
77
+ return create_nyc_mamdani_income_tax()
78
+ else:
79
+ return None
80
+
81
+
82
+ nyc_mamdani_income_tax = create_nyc_mamdani_income_tax_reform(
83
+ None, None, bypass=True
84
+ )
@@ -101,6 +101,9 @@ from .reconciliation import (
101
101
  from .states.mi.surtax import (
102
102
  create_mi_surtax_reform,
103
103
  )
104
+ from .local.ny.mamdani_income_tax import (
105
+ create_nyc_mamdani_income_tax_reform,
106
+ )
104
107
  from .states.ut import (
105
108
  create_ut_refundable_eitc_reform,
106
109
  )
@@ -252,6 +255,11 @@ def create_structural_reforms_from_parameters(parameters, period):
252
255
  parameters, period
253
256
  )
254
257
  mi_surtax = create_mi_surtax_reform(parameters, period)
258
+
259
+ nyc_mamdani_income_tax = create_nyc_mamdani_income_tax_reform(
260
+ parameters, period
261
+ )
262
+
255
263
  ut_refundable_eitc = create_ut_refundable_eitc_reform(parameters, period)
256
264
 
257
265
  american_worker_rebate_act = create_american_worker_rebate_act_reform(
@@ -320,6 +328,7 @@ def create_structural_reforms_from_parameters(parameters, period):
320
328
  reconciled_ssn_for_llc_and_aoc,
321
329
  ctc_additional_bracket,
322
330
  mi_surtax,
331
+ nyc_mamdani_income_tax,
323
332
  ut_refundable_eitc,
324
333
  additional_tax_bracket,
325
334
  american_worker_rebate_act,
@@ -0,0 +1,51 @@
1
+ - name: Person below threshold in 2026
2
+ period: 2026
3
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
4
+ input:
5
+ gov.local.ny.mamdani_income_tax.in_effect: True
6
+ nyc_taxable_income: 800_000
7
+ in_nyc: true
8
+ output:
9
+ nyc_mamdani_income_tax: 0
10
+
11
+ - name: Person at threshold in 2026
12
+ period: 2026
13
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
14
+ input:
15
+ gov.local.ny.mamdani_income_tax.in_effect: True
16
+ nyc_taxable_income: 1_000_000
17
+ in_nyc: true
18
+ output:
19
+ nyc_mamdani_income_tax: 0
20
+
21
+ - name: Person above threshold in 2026
22
+ period: 2026
23
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
24
+ input:
25
+ gov.local.ny.mamdani_income_tax.in_effect: True
26
+ nyc_taxable_income: 1_200_000
27
+ in_nyc: true
28
+ output:
29
+ # (1_200_000 - 1_000_000) * 0.02 = 200_000 * 0.02 = 4_000
30
+ nyc_mamdani_income_tax: 4_000
31
+
32
+ - name: Person well above threshold in 2026
33
+ period: 2026
34
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
35
+ input:
36
+ gov.local.ny.mamdani_income_tax.in_effect: True
37
+ nyc_taxable_income: 2_000_000
38
+ in_nyc: true
39
+ output:
40
+ # (2_000_000 - 1_000_000) * 0.02 = 1_000_000 * 0.02 = 20_000
41
+ nyc_mamdani_income_tax: 20_000
42
+
43
+ - name: Person not in NYC (no tax)
44
+ period: 2026
45
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
46
+ input:
47
+ gov.local.ny.mamdani_income_tax.in_effect: True
48
+ nyc_taxable_income: 1_500_000
49
+ in_nyc: false
50
+ output:
51
+ nyc_mamdani_income_tax: 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine-us
3
- Version: 1.443.0
3
+ Version: 1.444.0
4
4
  Summary: Add your description here.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License-File: LICENSE
@@ -877,6 +877,8 @@ policyengine_us/parameters/gov/local/co/denver/dhs/property_tax_relief/amount/ho
877
877
  policyengine_us/parameters/gov/local/co/denver/dhs/property_tax_relief/amount/renter.yaml,sha256=-PsxqV-gvz-mIEOoVFGWK6d57jZyUERlxCiKeR41ztc,808
878
878
  policyengine_us/parameters/gov/local/md/montgomery/tax/income/credits/eitc/README.md,sha256=8WsaWutBw5kaloVJ0HEU-S3TCKXVKh0YjeJcrhWYL6I,27
879
879
  policyengine_us/parameters/gov/local/md/montgomery/tax/income/credits/eitc/refundable/match.yaml,sha256=ZksNCK4j8ztAzzh7iewTwqIVZEL-Zyz2Ci8jKOxDEjk,1833
880
+ policyengine_us/parameters/gov/local/ny/mamdani_income_tax/in_effect.yaml,sha256=8I-_3ipnyX2W0JFwg4NzdDwhpCTmHmeyI9VZGfCNKEg,404
881
+ policyengine_us/parameters/gov/local/ny/mamdani_income_tax/rate.yaml,sha256=JELlesv-8Gi4UxbFpSu7Z_Z3sTqFTM3sQEkdRxepB0k,528
880
882
  policyengine_us/parameters/gov/local/ny/nyc/tax/income/credits/non_refundable.yaml,sha256=25IANzXEQo0E4MmYeXFG8aau7degKcdHCqEEMFqYpms,198
881
883
  policyengine_us/parameters/gov/local/ny/nyc/tax/income/credits/refundable.yaml,sha256=zO9ZB-IYuM4N_L2X2O7Mj_vTi8rZS5k_3teDEU_Yr6M,180
882
884
  policyengine_us/parameters/gov/local/ny/nyc/tax/income/credits/cdcc/child_age_restriction.yaml,sha256=tMLgPt-tnecVYHBlRd7t4cxKc1bEEFCOYEppzZFbbIc,314
@@ -3316,7 +3318,7 @@ policyengine_us/params_on_demand/gov/hhs/medicaid/geography/medicaid_rating_area
3316
3318
  policyengine_us/reforms/__init__.py,sha256=FPV8k2633kzUhbKUK8jC6yJONbnZ5n9zLAq2UL57KH4,113
3317
3319
  policyengine_us/reforms/dc_kccatc.py,sha256=LyGMfEKe-0TgQ-2vCYGOD8W-EGEW8_DgIqCQP89qDyg,4283
3318
3320
  policyengine_us/reforms/dc_tax_threshold_joint_ratio.py,sha256=G-5E1EJFGZ3VeUl_fuyj82nMIttHRNRdlT-x98koJrk,1633
3319
- policyengine_us/reforms/reforms.py,sha256=FwH26TRW6PqP26ePOx0cfJzvrz8KMjgXYzrv-6hqPTw,11633
3321
+ policyengine_us/reforms/reforms.py,sha256=ahVB9aEgXo9LQ8zEt3Xe9FH9ARBvUpId9hy2JEb0u7s,11854
3320
3322
  policyengine_us/reforms/taxsim.py,sha256=bXNFWfjBX5USld1C7fziT6BBmRy-avz00QtL8WmCHy0,5276
3321
3323
  policyengine_us/reforms/winship.py,sha256=_q74Af1nkmoh0-M6PZJ2FcJAn6v5zf5sAEgvxjwHwyA,3069
3322
3324
  policyengine_us/reforms/aca/__init__.py,sha256=ugTekuQuCQw7EScXFCp5U3NSKhut8wIrrJK-1Y0aL9Q,234
@@ -3377,6 +3379,8 @@ policyengine_us/reforms/harris/lift/__init__.py,sha256=-ckwJS8DfVDWjDg00-5GhRLzp
3377
3379
  policyengine_us/reforms/harris/lift/middle_class_tax_credit.py,sha256=R90lF62fN-qdF6r04vhqumfy_ZPMA-WjrPcCgTKK0H4,2649
3378
3380
  policyengine_us/reforms/harris/rent_relief_act/__init__.py,sha256=DW52D-5yP-LrhEeLUaM1bS_vECR9BNpnHXMj_a5ZqSo,82
3379
3381
  policyengine_us/reforms/harris/rent_relief_act/rent_relief_tax_credit.py,sha256=srDUVpky8yTN-e-8wwtV3TH_y1KzNcFiEzFwBoEQ00M,3437
3382
+ policyengine_us/reforms/local/ny/__init__.py,sha256=z_WF8fYdvlb-o7GX9tdSzyaJfvHeV7jYboFpmxBr-yE,106
3383
+ policyengine_us/reforms/local/ny/mamdani_income_tax.py,sha256=se_dctX645T4JLZ7cefkMGOdEc104VuWZEQD9PTSNhs,2833
3380
3384
  policyengine_us/reforms/local/nyc/stc/adjust_income_limit_by_filing_status_and_eligibility_by_children.py,sha256=NHbdSqhs0ug0Mc-bQkiaY3FJhwaEXAaBdbEOBC-l9EE,2287
3381
3385
  policyengine_us/reforms/local/nyc/stc/phase_out/README.md,sha256=MU4Oy0wnRuo-NCEQsmt1jO0gfpt67I4NIFL92DPAv2U,429
3382
3386
  policyengine_us/reforms/local/nyc/stc/phase_out/__init__.py,sha256=jFduppr6cvdSzRSPDvgo_wF5E2x8Bl2Apefb7_wTnrM,110
@@ -5583,6 +5587,7 @@ policyengine_us/tests/policy/contrib/federal/reported_state_income_tax.yaml,sha2
5583
5587
  policyengine_us/tests/policy/contrib/harris/capital_gains/harris_capital_gains.yaml,sha256=05HA36fzyqlF-5LDYpindM5Qq7sNH41WUqG1jHoGWWI,2347
5584
5588
  policyengine_us/tests/policy/contrib/harris/lift/middle_class_tax_credit.yaml,sha256=rhO2tPPKU0fpeUCF5LbSad4tnE_MhYWia8doZAchQuw,2966
5585
5589
  policyengine_us/tests/policy/contrib/harris/rent_relief_act/rent_relief_tax_credit.yaml,sha256=8pUm_jmYn2R5LVABvSFoYfVgs172WDqWi1phRhs2X2g,6747
5590
+ policyengine_us/tests/policy/contrib/local/ny/nyc_mamdani_income_tax.yaml,sha256=hYsnQhUsOW3XpYjIXP7c-XHpos2HKTQjbpPCAGPZtnU,1597
5586
5591
  policyengine_us/tests/policy/contrib/local/nyc/stc/nyc_school_tax_credit_with_phase_out.yaml,sha256=CSTdYl3fCrK5JeMOfHjHXC44s2f-gN__Qe0AwXglCDI,1859
5587
5592
  policyengine_us/tests/policy/contrib/reconciliation/reconciled_ssn_for_llc_and_aoc.yaml,sha256=C_qZkr9JCIwEo3SiW4Xui8UOTsbeQSNsI64Pa350zdo,2755
5588
5593
  policyengine_us/tests/policy/contrib/snap/abolish_snap_deductions.yaml,sha256=5pgcUuafSNIF2dWsBHMebB7YSrRq9svD0SkzJcvy6po,467
@@ -8920,8 +8925,8 @@ policyengine_us/variables/input/farm_income.py,sha256=BEKxYmHNNnWJAAvULl5qZJigy5
8920
8925
  policyengine_us/variables/input/geography.py,sha256=Ux0ueAf0rhZaflyEqz81UuXP3xKCKBDvoO3CrKhiQEc,5421
8921
8926
  policyengine_us/variables/input/self_employment_income.py,sha256=PwsGz8R4lRikKWUYOhsC0qosNNLXq4f5SQmfw4S3mk8,511
8922
8927
  policyengine_us/variables/input/self_employment_income_before_lsr.py,sha256=E8fcX9Nlyqz8dziHhQv_euutdmoIwFMMWePUwbbwv_w,379
8923
- policyengine_us-1.443.0.dist-info/METADATA,sha256=CSzYBlxitPr9rfaoD70ER9lzizOy76op7A-r9K8VTOw,1649
8924
- policyengine_us-1.443.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8925
- policyengine_us-1.443.0.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8926
- policyengine_us-1.443.0.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8927
- policyengine_us-1.443.0.dist-info/RECORD,,
8928
+ policyengine_us-1.444.0.dist-info/METADATA,sha256=hiGSeDF7EReWOF4Hkk5mfw_hfWaTtM0SqVRJ6lOdb40,1649
8929
+ policyengine_us-1.444.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
8930
+ policyengine_us-1.444.0.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8931
+ policyengine_us-1.444.0.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8932
+ policyengine_us-1.444.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any