taxcalc 3.6.0__tar.gz → 4.1.0__tar.gz
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.
- {taxcalc-3.6.0 → taxcalc-4.1.0}/MANIFEST.in +1 -0
- {taxcalc-3.6.0/taxcalc.egg-info → taxcalc-4.1.0}/PKG-INFO +3 -2
- {taxcalc-3.6.0 → taxcalc-4.1.0}/README.md +1 -1
- {taxcalc-3.6.0 → taxcalc-4.1.0}/setup.py +2 -1
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/__init__.py +1 -1
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/calcfunctions.py +70 -33
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/calculator.py +5 -3
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/cli/tc.py +18 -2
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/growfactors.py +30 -19
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/parameters.py +1 -1
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/policy_current_law.json +85 -33
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/records.py +2 -1
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/records_variables.json +10 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/taxcalcio.py +12 -2
- taxcalc-4.1.0/taxcalc/tmd_growfactors.csv +55 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/tmd_weights.csv.gz +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0/taxcalc.egg-info}/PKG-INFO +3 -2
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc.egg-info/SOURCES.txt +1 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/LICENSE +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/setup.cfg +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/cli/__init__.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/conftest.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/consumption.json +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/consumption.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/cps.csv.gz +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/cps_weights.csv.gz +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/data.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/decorators.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/growdiff.json +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/growdiff.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/growfactors.csv +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/policy.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/puf_ratios.csv +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/puf_weights.csv.gz +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/utils.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc/utilsprvt.py +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc.egg-info/dependency_links.txt +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc.egg-info/entry_points.txt +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc.egg-info/requires.txt +0 -0
- {taxcalc-3.6.0 → taxcalc-4.1.0}/taxcalc.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: taxcalc
|
3
|
-
Version:
|
3
|
+
Version: 4.1.0
|
4
4
|
Summary: taxcalc
|
5
5
|
Home-page: https://github.com/PSLmodels/Tax-Calculator
|
6
6
|
Download-URL: https://github.com/PSLmodels/Tax-Calculator
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.9
|
16
16
|
Classifier: Programming Language :: Python :: 3.10
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
18
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
19
20
|
Description-Content-Type: text/markdown
|
20
21
|
License-File: LICENSE
|
@@ -29,7 +30,7 @@ Requires-Dist: paramtools
|
|
29
30
|
| | |
|
30
31
|
| --- | --- |
|
31
32
|
| Org | [](https://www.PSLmodels.org) [](https://github.com/PSLmodels/Tax-Calculator/blob/master/LICENSE) [](https://pslmodels.github.io/Tax-Calculator/) |
|
32
|
-
| Package | [](https://www.python.org/downloads/release/python-3916/) [](https://www.python.org/downloads/release/python-3108/)
|
33
|
+
| Package | [](https://www.python.org/downloads/release/python-3916/) [](https://www.python.org/downloads/release/python-3108/) [](https://www.python.org/downloads/release/python-3118/) [](https://www.python.org/downloads/release/python-3121/) [](https://pypi.org/project/taxcalc/) [](https://pypi.org/project/taxcalc/) [](https://anaconda.org/conda-forge/taxcalc)|
|
33
34
|
| Testing |   [](https://codecov.io/gh/PSLmodels/Tax-Calculator) |
|
34
35
|
|
35
36
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
| | |
|
2
2
|
| --- | --- |
|
3
3
|
| Org | [](https://www.PSLmodels.org) [](https://github.com/PSLmodels/Tax-Calculator/blob/master/LICENSE) [](https://pslmodels.github.io/Tax-Calculator/) |
|
4
|
-
| Package | [](https://www.python.org/downloads/release/python-3916/) [](https://www.python.org/downloads/release/python-3108/)
|
4
|
+
| Package | [](https://www.python.org/downloads/release/python-3916/) [](https://www.python.org/downloads/release/python-3108/) [](https://www.python.org/downloads/release/python-3118/) [](https://www.python.org/downloads/release/python-3121/) [](https://pypi.org/project/taxcalc/) [](https://pypi.org/project/taxcalc/) [](https://anaconda.org/conda-forge/taxcalc)|
|
5
5
|
| Testing |   [](https://codecov.io/gh/PSLmodels/Tax-Calculator) |
|
6
6
|
|
7
7
|
|
@@ -3,7 +3,7 @@ from setuptools import setup
|
|
3
3
|
with open("README.md") as f:
|
4
4
|
longdesc = f.read()
|
5
5
|
|
6
|
-
version = "
|
6
|
+
version = "4.1.0"
|
7
7
|
|
8
8
|
config = {
|
9
9
|
"description": "Tax Calculator",
|
@@ -37,6 +37,7 @@ config = {
|
|
37
37
|
"Programming Language :: Python :: 3.9",
|
38
38
|
"Programming Language :: Python :: 3.10",
|
39
39
|
"Programming Language :: Python :: 3.11",
|
40
|
+
"Programming Language :: Python :: 3.12",
|
40
41
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
41
42
|
],
|
42
43
|
"tests_require": ["pytest"],
|
@@ -100,8 +100,9 @@ def BenefitPrograms(calc):
|
|
100
100
|
|
101
101
|
@iterate_jit(nopython=True)
|
102
102
|
def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s,
|
103
|
-
|
104
|
-
|
103
|
+
FICA_ss_trt_employer, FICA_ss_trt_employee,
|
104
|
+
FICA_mc_trt_employer, FICA_mc_trt_employee,
|
105
|
+
ALD_SelfEmploymentTax_hc, SS_Earnings_thd, SECA_Earnings_thd,
|
105
106
|
e00900p, e00900s, e02100p, e02100s, k1bx14p,
|
106
107
|
k1bx14s, payrolltax, ptax_was, setax, c03260, ptax_oasdi,
|
107
108
|
sey, earned, earned_p, earned_s,
|
@@ -123,10 +124,14 @@ def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s,
|
|
123
124
|
Contributions to defined-contribution pension plans for taxpayer
|
124
125
|
pencon_s: float
|
125
126
|
Contributions to defined-contribution pension plans for spouse
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
127
|
+
FICA_ss_trt_employer: float
|
128
|
+
Employer side social security payroll tax rate
|
129
|
+
FICA_ss_trt_employee: float
|
130
|
+
Employee side social security payroll tax rate
|
131
|
+
FICA_mc_trt_employer: float
|
132
|
+
Employer side medicare payroll tax rate
|
133
|
+
FICA_mc_trt_employee: float
|
134
|
+
Employee side medicare payroll tax rate
|
130
135
|
ALD_SelfEmploymentTax_hc: float
|
131
136
|
Adjustment for self-employment tax haircut
|
132
137
|
If greater than zero, reduces the employer equivalent portion of self-employment adjustment
|
@@ -218,22 +223,22 @@ def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s,
|
|
218
223
|
txearn_was_s = min(SS_Earnings_c, gross_was_s)
|
219
224
|
|
220
225
|
# compute OASDI and HI payroll taxes on wage-and-salary income, FICA
|
221
|
-
ptax_ss_was_p =
|
222
|
-
ptax_ss_was_s =
|
223
|
-
ptax_mc_was_p =
|
224
|
-
ptax_mc_was_s =
|
226
|
+
ptax_ss_was_p = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_was_p
|
227
|
+
ptax_ss_was_s = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_was_s
|
228
|
+
ptax_mc_was_p = (FICA_mc_trt_employer + FICA_mc_trt_employee) * gross_was_p
|
229
|
+
ptax_mc_was_s = (FICA_mc_trt_employer + FICA_mc_trt_employee) * gross_was_s
|
225
230
|
ptax_was = ptax_ss_was_p + ptax_ss_was_s + ptax_mc_was_p + ptax_mc_was_s
|
226
231
|
|
227
232
|
# compute taxable self-employment income for OASDI SECA
|
228
|
-
sey_frac = 1.0 - 0.5 * (
|
233
|
+
sey_frac = 1.0 - 0.5 * (FICA_ss_trt_employer + FICA_ss_trt_employee + FICA_mc_trt_employer + FICA_mc_trt_employee)
|
229
234
|
txearn_sey_p = min(max(0., sey_p * sey_frac), SS_Earnings_c - txearn_was_p)
|
230
235
|
txearn_sey_s = min(max(0., sey_s * sey_frac), SS_Earnings_c - txearn_was_s)
|
231
236
|
|
232
237
|
# compute self-employment tax on taxable self-employment income, SECA
|
233
|
-
setax_ss_p =
|
234
|
-
setax_ss_s =
|
235
|
-
setax_mc_p =
|
236
|
-
setax_mc_s =
|
238
|
+
setax_ss_p = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_sey_p
|
239
|
+
setax_ss_s = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_sey_s
|
240
|
+
setax_mc_p = (FICA_mc_trt_employer + FICA_mc_trt_employee) * max(0., sey_p * sey_frac)
|
241
|
+
setax_mc_s = (FICA_mc_trt_employer + FICA_mc_trt_employee) * max(0., sey_s * sey_frac)
|
237
242
|
setax_p = setax_ss_p + setax_mc_p
|
238
243
|
setax_s = setax_ss_s + setax_mc_s
|
239
244
|
setax = setax_p + setax_s
|
@@ -246,13 +251,13 @@ def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s,
|
|
246
251
|
# compute extra OASDI payroll taxes on the portion of the sum
|
247
252
|
# of wage-and-salary income and taxable self employment income
|
248
253
|
# that exceeds SS_Earnings_thd
|
249
|
-
sey_frac = 1.0 - 0.5 *
|
254
|
+
sey_frac = 1.0 - 0.5 * (FICA_ss_trt_employer + FICA_ss_trt_employee)
|
250
255
|
was_plus_sey_p = gross_was_p + max(0., sey_p * sey_frac)
|
251
256
|
was_plus_sey_s = gross_was_s + max(0., sey_s * sey_frac)
|
252
257
|
extra_ss_income_p = max(0., was_plus_sey_p - SS_Earnings_thd)
|
253
258
|
extra_ss_income_s = max(0., was_plus_sey_s - SS_Earnings_thd)
|
254
|
-
extra_payrolltax = (extra_ss_income_p *
|
255
|
-
extra_ss_income_s *
|
259
|
+
extra_payrolltax = (extra_ss_income_p * (FICA_ss_trt_employer + FICA_ss_trt_employee) +
|
260
|
+
extra_ss_income_s * (FICA_ss_trt_employer + FICA_ss_trt_employee))
|
256
261
|
|
257
262
|
# compute part of total payroll taxes for filing unit
|
258
263
|
# (the ptax_amc part of total payroll taxes for the filing unit is
|
@@ -1080,7 +1085,8 @@ def ItemDed(e17500_capped, e18400_capped, e18500_capped, e19200_capped,
|
|
1080
1085
|
@iterate_jit(nopython=True)
|
1081
1086
|
def AdditionalMedicareTax(e00200, MARS,
|
1082
1087
|
AMEDT_ec, sey, AMEDT_rt,
|
1083
|
-
|
1088
|
+
FICA_mc_trt_employer, FICA_mc_trt_employee,
|
1089
|
+
FICA_ss_trt_employer, FICA_ss_trt_employee,
|
1084
1090
|
ptax_amc, payrolltax):
|
1085
1091
|
"""
|
1086
1092
|
Computes Additional Medicare Tax (Form 8959) included in payroll taxes.
|
@@ -1093,10 +1099,14 @@ def AdditionalMedicareTax(e00200, MARS,
|
|
1093
1099
|
Additional Medicare Tax earnings exclusion
|
1094
1100
|
AMEDT_rt: float
|
1095
1101
|
Additional Medicare Tax rate
|
1096
|
-
|
1097
|
-
FICA Social Security tax rate
|
1098
|
-
|
1099
|
-
FICA
|
1102
|
+
FICA_ss_trt_employer: float
|
1103
|
+
Employer side FICA Social Security tax rate
|
1104
|
+
FICA_ss_trt_employee: float
|
1105
|
+
Employee side FICA Social Security tax rate
|
1106
|
+
FICA_mc_trt_employer: float
|
1107
|
+
Employer side FICA Medicare tax rate
|
1108
|
+
FICA_mc_trt_employee: float
|
1109
|
+
Employee side FICA Medicare tax rate
|
1100
1110
|
e00200: float
|
1101
1111
|
Wages and salaries
|
1102
1112
|
sey: float
|
@@ -1113,7 +1123,7 @@ def AdditionalMedicareTax(e00200, MARS,
|
|
1113
1123
|
payrolltax: float
|
1114
1124
|
payroll tax augmented by Additional Medicare Tax
|
1115
1125
|
"""
|
1116
|
-
line8 = max(0., sey) * (1. - 0.5 * (
|
1126
|
+
line8 = max(0., sey) * (1. - 0.5 * (FICA_mc_trt_employer + FICA_mc_trt_employee + FICA_ss_trt_employer + FICA_ss_trt_employee))
|
1117
1127
|
line11 = max(0., AMEDT_ec[MARS - 1] - e00200)
|
1118
1128
|
ptax_amc = AMEDT_rt * (max(0., e00200 - AMEDT_ec[MARS - 1]) +
|
1119
1129
|
max(0., line8 - line11))
|
@@ -2149,15 +2159,23 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800,
|
|
2149
2159
|
c00100: float
|
2150
2160
|
Adjusted Gross Income (AGI)
|
2151
2161
|
CDCC_ps: float
|
2152
|
-
Child/dependent care credit phaseout start
|
2162
|
+
Child/dependent care credit first phaseout start
|
2163
|
+
CDCC_ps2: float
|
2164
|
+
Child/dependent care credit second phaseout start
|
2153
2165
|
CDCC_crt: float
|
2154
|
-
Child/dependent care credit phaseout
|
2166
|
+
Child/dependent care credit phaseout rate ceiling
|
2167
|
+
CDCC_frt: float
|
2168
|
+
Child/dependent care credit phaseout rate floor
|
2169
|
+
CDCC_prt: float
|
2170
|
+
Child/dependent care credit phaseout rate
|
2155
2171
|
c05800: float
|
2156
2172
|
Total (regular + AMT) income tax liability before credits
|
2157
2173
|
e07300: float
|
2158
2174
|
Foreign tax credit from Form 1116
|
2159
2175
|
c07180: float
|
2160
2176
|
Credit for child and dependent care expenses from Form 2441
|
2177
|
+
CDCC_refund: bool
|
2178
|
+
Indicator for whether CDCC is refundable
|
2161
2179
|
|
2162
2180
|
Returns
|
2163
2181
|
-------
|
@@ -2189,7 +2207,8 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800,
|
|
2189
2207
|
if c00100 > CDCC_ps2:
|
2190
2208
|
crate = max(0., CDCC_frt -
|
2191
2209
|
max(((c00100 - CDCC_ps2) * CDCC_prt), 0.))
|
2192
|
-
|
2210
|
+
|
2211
|
+
c33200 = c33000 * crate
|
2193
2212
|
# credit is limited by tax liability if not refundable
|
2194
2213
|
if CDCC_refundable:
|
2195
2214
|
c07180 = 0.
|
@@ -3199,7 +3218,7 @@ def C1040(c05800, c07180, c07200, c07220, c07230, c07240, c07260, c07300,
|
|
3199
3218
|
def CTC_new(CTC_new_c, CTC_new_rt, CTC_new_c_under6_bonus,
|
3200
3219
|
CTC_new_ps, CTC_new_prt, CTC_new_for_all, CTC_include17,
|
3201
3220
|
CTC_new_refund_limited, CTC_new_refund_limit_payroll_rt,
|
3202
|
-
CTC_new_refund_limited_all_payroll, payrolltax,
|
3221
|
+
CTC_new_refund_limited_all_payroll, payrolltax, exact,
|
3203
3222
|
n24, nu06, age_head, age_spouse, nu18, c00100, MARS, ptax_oasdi,
|
3204
3223
|
c09200, ctc_new):
|
3205
3224
|
"""
|
@@ -3227,6 +3246,8 @@ def CTC_new(CTC_new_c, CTC_new_rt, CTC_new_c_under6_bonus,
|
|
3227
3246
|
New child tax credit refund limit applies to all FICA taxes, not just OASDI
|
3228
3247
|
payrolltax: float
|
3229
3248
|
Total (employee + employer) payroll tax liability
|
3249
|
+
exact: int
|
3250
|
+
Whether or not exact phase-out calculation is being done
|
3230
3251
|
n24: int
|
3231
3252
|
Number of children who are Child-Tax-Credit eligible, one condition for which is being under age 17
|
3232
3253
|
nu06: int
|
@@ -3261,8 +3282,12 @@ def CTC_new(CTC_new_c, CTC_new_rt, CTC_new_c_under6_bonus,
|
|
3261
3282
|
ctc_new = min(CTC_new_rt * posagi, ctc_new)
|
3262
3283
|
ymax = CTC_new_ps[MARS - 1]
|
3263
3284
|
if posagi > ymax:
|
3264
|
-
|
3265
|
-
|
3285
|
+
over = posagi - ymax
|
3286
|
+
if exact == 1: # exact calculation as on tax form
|
3287
|
+
excess = math.ceil(over / 1000.) * 1000.
|
3288
|
+
else: # smoothed calculation
|
3289
|
+
excess = over
|
3290
|
+
ctc_new_reduced = max(0., ctc_new - CTC_new_prt * excess)
|
3266
3291
|
ctc_new = min(ctc_new, ctc_new_reduced)
|
3267
3292
|
if ctc_new > 0. and CTC_new_refund_limited:
|
3268
3293
|
refund_new = max(0., ctc_new - c09200)
|
@@ -3280,7 +3305,8 @@ def CTC_new(CTC_new_c, CTC_new_rt, CTC_new_c_under6_bonus,
|
|
3280
3305
|
@iterate_jit(nopython=True)
|
3281
3306
|
def IITAX(c59660, c11070, c10960, personal_refundable_credit, ctc_new, rptc,
|
3282
3307
|
c09200, payrolltax, CDCC_refund, recovery_rebate_credit,
|
3283
|
-
eitc, c07220, odc, CTC_refundable, ODC_refundable, refund,
|
3308
|
+
eitc, c07220, odc, CTC_refundable, ODC_refundable, refund,
|
3309
|
+
ctc_total, ctc_refundable, iitax, combined):
|
3284
3310
|
"""
|
3285
3311
|
Computes final taxes.
|
3286
3312
|
|
@@ -3307,6 +3333,10 @@ def IITAX(c59660, c11070, c10960, personal_refundable_credit, ctc_new, rptc,
|
|
3307
3333
|
Earned Income Credit
|
3308
3334
|
refund: float
|
3309
3335
|
Total refundable income tax credits
|
3336
|
+
ctc_total: float
|
3337
|
+
Total CTC amount (c07220 + c11070 + odc + ctc_new)
|
3338
|
+
ctc_refundable: float
|
3339
|
+
Portion of total CTC amount that is refundable
|
3310
3340
|
iitax: float
|
3311
3341
|
Total federal individual income tax liability
|
3312
3342
|
combined: float
|
@@ -3318,6 +3348,10 @@ def IITAX(c59660, c11070, c10960, personal_refundable_credit, ctc_new, rptc,
|
|
3318
3348
|
Earned Income Credit
|
3319
3349
|
refund: float
|
3320
3350
|
Total refundable income tax credits
|
3351
|
+
ctc_total: float
|
3352
|
+
Total CTC amount (c07220 + c11070 + odc + ctc_new)
|
3353
|
+
ctc_refundable: float
|
3354
|
+
Portion of total CTC amount that is refundable
|
3321
3355
|
iitax: float
|
3322
3356
|
Total federal individual income tax liability
|
3323
3357
|
combined: float
|
@@ -3333,10 +3367,13 @@ def IITAX(c59660, c11070, c10960, personal_refundable_credit, ctc_new, rptc,
|
|
3333
3367
|
else:
|
3334
3368
|
odc_refund = 0.
|
3335
3369
|
refund = (eitc + c11070 + c10960 + CDCC_refund + recovery_rebate_credit +
|
3336
|
-
personal_refundable_credit + ctc_new + rptc + ctc_refund +
|
3370
|
+
personal_refundable_credit + ctc_new + rptc + ctc_refund +
|
3371
|
+
odc_refund)
|
3372
|
+
ctc_total = c07220 + c11070 + odc + ctc_new
|
3373
|
+
ctc_refundable = ctc_refund + c11070 + odc_refund + ctc_new
|
3337
3374
|
iitax = c09200 - refund
|
3338
3375
|
combined = iitax + payrolltax
|
3339
|
-
return (eitc, refund, iitax, combined)
|
3376
|
+
return (eitc, refund, ctc_total, ctc_refundable, iitax, combined)
|
3340
3377
|
|
3341
3378
|
|
3342
3379
|
@JIT(nopython=True)
|
@@ -694,9 +694,11 @@ class Calculator():
|
|
694
694
|
variable >= self.policy_param('SS_Earnings_thd')
|
695
695
|
)
|
696
696
|
adj = np.where(oasdi_taxed,
|
697
|
-
0.5 * (self.policy_param('
|
698
|
-
self.policy_param('
|
699
|
-
|
697
|
+
0.5 * (self.policy_param('FICA_ss_trt_employer') +
|
698
|
+
self.policy_param('FICA_ss_trt_employee') +
|
699
|
+
self.policy_param('FICA_mc_trt_employer') +
|
700
|
+
self.policy_param('FICA_mc_trt_employee')),
|
701
|
+
0.5 * (self.policy_param('FICA_mc_trt_employer') + self.policy_param('FICA_mc_trt_employee')))
|
700
702
|
else:
|
701
703
|
adj = 0.0
|
702
704
|
# compute marginal tax rates
|
@@ -8,6 +8,7 @@ which can be accessed as 'tc' from an installed taxcalc conda package.
|
|
8
8
|
|
9
9
|
import os
|
10
10
|
import sys
|
11
|
+
import time
|
11
12
|
import argparse
|
12
13
|
import difflib
|
13
14
|
import taxcalc as tc
|
@@ -29,7 +30,7 @@ def cli_tc_main():
|
|
29
30
|
(' '
|
30
31
|
'[--baseline BASELINE] [--reform REFORM] [--assump ASSUMP]\n'),
|
31
32
|
(' '
|
32
|
-
'[--exact] [--tables] [--graphs]\n'),
|
33
|
+
'[--exact] [--tables] [--graphs] [--timings]\n'),
|
33
34
|
(' '
|
34
35
|
'[--dump] [--dvars DVARS] [--sqldb] [--outdir OUTDIR]\n'),
|
35
36
|
(' '
|
@@ -88,6 +89,11 @@ def cli_tc_main():
|
|
88
89
|
'to HTML files for viewing in browser.'),
|
89
90
|
default=False,
|
90
91
|
action="store_true")
|
92
|
+
parser.add_argument('--timings',
|
93
|
+
help=('optional flag that causes execution times to '
|
94
|
+
'be written to stdout.'),
|
95
|
+
default=False,
|
96
|
+
action="store_true")
|
91
97
|
parser.add_argument('--dump',
|
92
98
|
help=('optional flag that causes OUTPUT to contain '
|
93
99
|
'all INPUT variables (extrapolated to TAXYEAR) '
|
@@ -158,11 +164,16 @@ def cli_tc_main():
|
|
158
164
|
inputfn.endswith('cps.csv') or
|
159
165
|
inputfn.endswith('tmd.csv')
|
160
166
|
)
|
167
|
+
if args.timings:
|
168
|
+
stime = time.time()
|
161
169
|
tcio.init(input_data=inputfn, tax_year=taxyear,
|
162
170
|
baseline=args.baseline,
|
163
171
|
reform=args.reform, assump=args.assump,
|
164
172
|
aging_input_data=aging,
|
165
173
|
exact_calculations=args.exact)
|
174
|
+
if args.timings:
|
175
|
+
xtime = time.time() - stime
|
176
|
+
sys.stdout.write(f'TIMINGS: init time = {xtime:.2f} secs\n')
|
166
177
|
if tcio.errmsg:
|
167
178
|
sys.stderr.write(tcio.errmsg)
|
168
179
|
sys.stderr.write('USAGE: tc --help\n')
|
@@ -183,12 +194,17 @@ def cli_tc_main():
|
|
183
194
|
sys.stderr.write('USAGE: tc --help\n')
|
184
195
|
return 1
|
185
196
|
# conduct tax analysis
|
197
|
+
if args.timings:
|
198
|
+
stime = time.time()
|
186
199
|
tcio.analyze(writing_output_file=True,
|
187
200
|
output_tables=args.tables,
|
188
201
|
output_graphs=args.graphs,
|
189
202
|
dump_varset=dumpvar_set,
|
190
203
|
output_dump=args.dump,
|
191
204
|
output_sqldb=args.sqldb)
|
205
|
+
if args.timings:
|
206
|
+
xtime = time.time() - stime
|
207
|
+
sys.stdout.write(f'TIMINGS: calc time = {xtime:.2f} secs\n')
|
192
208
|
# compare test output with expected test output if --test option specified
|
193
209
|
if args.test:
|
194
210
|
retcode = _compare_test_output_files()
|
@@ -214,7 +230,7 @@ def _write_expected_test_output():
|
|
214
230
|
ifile.write(input_data)
|
215
231
|
expected_output_data = (
|
216
232
|
'RECID,YEAR,WEIGHT,INCTAX,LSTAX,PAYTAX\n'
|
217
|
-
'1,2018,0.00,
|
233
|
+
'1,2018,0.00,131.88,0.00,6120.00\n'
|
218
234
|
'2,2018,0.00,28879.00,0.00,21721.60\n'
|
219
235
|
)
|
220
236
|
with open(EXPECTED_TEST_OUTPUT_FILENAME, 'w') as ofile:
|
@@ -17,14 +17,15 @@ class GrowFactors():
|
|
17
17
|
|
18
18
|
Parameters
|
19
19
|
----------
|
20
|
-
growfactors_filename: string
|
21
|
-
string is
|
22
|
-
default value
|
20
|
+
growfactors_filename: None or string
|
21
|
+
string is path to the CSV file in which grow factors reside;
|
22
|
+
default value of None uses file containing puf/cps grow factors.
|
23
23
|
|
24
24
|
Raises
|
25
25
|
------
|
26
26
|
ValueError:
|
27
|
-
if growfactors_filename is
|
27
|
+
if growfactors_filename is neither None or a string.
|
28
|
+
if growfactors_filename string points to a non-existent file.
|
28
29
|
|
29
30
|
Returns
|
30
31
|
-------
|
@@ -33,10 +34,11 @@ class GrowFactors():
|
|
33
34
|
Notes
|
34
35
|
-----
|
35
36
|
Typical usage is "gfactor = GrowFactors()", which produces an object
|
36
|
-
containing growth factors in the GrowFactors.FILE_NAME file
|
37
|
+
containing baseline growth factors in the GrowFactors.FILE_NAME file,
|
38
|
+
which is for use with puf and cps data from the taxdata repository.
|
37
39
|
"""
|
38
40
|
|
39
|
-
|
41
|
+
PACKAGE_FILE_NAMES = ['growfactors.csv', 'tmd_growfactors.csv']
|
40
42
|
FILE_PATH = os.path.abspath(os.path.dirname(__file__))
|
41
43
|
|
42
44
|
VALID_NAMES = set(['ABOOK', 'ACGNS', 'ACPIM', 'ACPIU',
|
@@ -48,17 +50,27 @@ class GrowFactors():
|
|
48
50
|
'ABENSSI', 'ABENSNAP', 'ABENWIC',
|
49
51
|
'ABENHOUSING', 'ABENTANF', 'ABENVET'])
|
50
52
|
|
51
|
-
def __init__(self, growfactors_filename=
|
53
|
+
def __init__(self, growfactors_filename=None):
|
52
54
|
# read grow factors from specified growfactors_filename
|
53
55
|
gfdf = pd.DataFrame()
|
54
|
-
if
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
if growfactors_filename is None:
|
57
|
+
# read puf/cps growfactors from package
|
58
|
+
gfdf = read_egg_csv(GrowFactors.PACKAGE_FILE_NAMES[0],
|
59
|
+
index_col='YEAR') # pragma: no cover
|
60
|
+
elif isinstance(growfactors_filename, str):
|
61
|
+
if growfactors_filename in GrowFactors.PACKAGE_FILE_NAMES:
|
62
|
+
# read growfactors from package
|
63
|
+
gfdf = read_egg_csv(growfactors_filename,
|
61
64
|
index_col='YEAR') # pragma: no cover
|
65
|
+
else:
|
66
|
+
if os.path.isfile(growfactors_filename):
|
67
|
+
gfdf = pd.read_csv(growfactors_filename, index_col='YEAR')
|
68
|
+
else: # file does not exist
|
69
|
+
msg = (
|
70
|
+
f'growfactors file {growfactors_filename} '
|
71
|
+
'does not exist'
|
72
|
+
)
|
73
|
+
raise ValueError(msg)
|
62
74
|
else:
|
63
75
|
raise ValueError('growfactors_filename is not a string')
|
64
76
|
assert isinstance(gfdf, pd.DataFrame)
|
@@ -143,7 +155,7 @@ class GrowFactors():
|
|
143
155
|
if year > self.last_year:
|
144
156
|
msg = 'year={} > GrowFactors.last_year={}'
|
145
157
|
raise ValueError(msg.format(year, self.last_year))
|
146
|
-
return self.gfdf.loc[year,name]
|
158
|
+
return self.gfdf.loc[year, name]
|
147
159
|
|
148
160
|
def update(self, name, year, diff):
|
149
161
|
"""
|
@@ -153,7 +165,6 @@ class GrowFactors():
|
|
153
165
|
msg = 'cannot update growfactors after they have been used'
|
154
166
|
raise ValueError(msg)
|
155
167
|
assert name in GrowFactors.VALID_NAMES
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
self.gfdf.loc[year,name] += diff
|
168
|
+
if year >= self.first_year and year <= self.last_year:
|
169
|
+
assert isinstance(diff, float)
|
170
|
+
self.gfdf.loc[year, name] += diff
|
@@ -117,9 +117,9 @@
|
|
117
117
|
"cps": true
|
118
118
|
}
|
119
119
|
},
|
120
|
-
"
|
121
|
-
"title": "Social Security payroll tax rate",
|
122
|
-
"description": "Social Security FICA rate, including both employer and employee.",
|
120
|
+
"FICA_ss_trt_employer": {
|
121
|
+
"title": "Employer side Social Security payroll tax rate",
|
122
|
+
"description": "Employer side Social Security FICA rate, including both employer and employee.",
|
123
123
|
"notes": "",
|
124
124
|
"section_1": "Payroll Taxes",
|
125
125
|
"section_2": "Social Security FICA",
|
@@ -129,13 +129,39 @@
|
|
129
129
|
"value": [
|
130
130
|
{
|
131
131
|
"year": 2013,
|
132
|
-
"value": 0.
|
132
|
+
"value": 0.062
|
133
133
|
}
|
134
134
|
],
|
135
135
|
"validators": {
|
136
136
|
"range": {
|
137
137
|
"min": 0,
|
138
|
-
"max":
|
138
|
+
"max": 0.5
|
139
|
+
}
|
140
|
+
},
|
141
|
+
"compatible_data": {
|
142
|
+
"puf": true,
|
143
|
+
"cps": true
|
144
|
+
}
|
145
|
+
},
|
146
|
+
"FICA_ss_trt_employee": {
|
147
|
+
"title": "Employee side Social Security payroll tax rate",
|
148
|
+
"description": "Employee side Social Security FICA rate, including both employer and employee.",
|
149
|
+
"notes": "",
|
150
|
+
"section_1": "Payroll Taxes",
|
151
|
+
"section_2": "Social Security FICA",
|
152
|
+
"indexable": false,
|
153
|
+
"indexed": false,
|
154
|
+
"type": "float",
|
155
|
+
"value": [
|
156
|
+
{
|
157
|
+
"year": 2013,
|
158
|
+
"value": 0.062
|
159
|
+
}
|
160
|
+
],
|
161
|
+
"validators": {
|
162
|
+
"range": {
|
163
|
+
"min": 0,
|
164
|
+
"max": 0.5
|
139
165
|
}
|
140
166
|
},
|
141
167
|
"compatible_data": {
|
@@ -257,9 +283,9 @@
|
|
257
283
|
"cps": true
|
258
284
|
}
|
259
285
|
},
|
260
|
-
"
|
261
|
-
"title": "Medicare payroll tax rate",
|
262
|
-
"description": "Medicare FICA rate, including both employer and employee.",
|
286
|
+
"FICA_mc_trt_employer": {
|
287
|
+
"title": "Employer side Medicare payroll tax rate",
|
288
|
+
"description": "Employer side Medicare FICA rate, including both employer and employee.",
|
263
289
|
"notes": "",
|
264
290
|
"section_1": "Payroll Taxes",
|
265
291
|
"section_2": "Medicare FICA",
|
@@ -269,13 +295,39 @@
|
|
269
295
|
"value": [
|
270
296
|
{
|
271
297
|
"year": 2013,
|
272
|
-
"value": 0.
|
298
|
+
"value": 0.0145
|
273
299
|
}
|
274
300
|
],
|
275
301
|
"validators": {
|
276
302
|
"range": {
|
277
303
|
"min": 0,
|
278
|
-
"max":
|
304
|
+
"max": 0.5
|
305
|
+
}
|
306
|
+
},
|
307
|
+
"compatible_data": {
|
308
|
+
"puf": true,
|
309
|
+
"cps": true
|
310
|
+
}
|
311
|
+
},
|
312
|
+
"FICA_mc_trt_employee": {
|
313
|
+
"title": "Employee side Medicare payroll tax rate",
|
314
|
+
"description": "Employee side Medicare FICA rate, including both employer and employee.",
|
315
|
+
"notes": "",
|
316
|
+
"section_1": "Payroll Taxes",
|
317
|
+
"section_2": "Medicare FICA",
|
318
|
+
"indexable": false,
|
319
|
+
"indexed": false,
|
320
|
+
"type": "float",
|
321
|
+
"value": [
|
322
|
+
{
|
323
|
+
"year": 2013,
|
324
|
+
"value": 0.0145
|
325
|
+
}
|
326
|
+
],
|
327
|
+
"validators": {
|
328
|
+
"range": {
|
329
|
+
"min": 0,
|
330
|
+
"max": 0.5
|
279
331
|
}
|
280
332
|
},
|
281
333
|
"compatible_data": {
|
@@ -16350,8 +16402,8 @@
|
|
16350
16402
|
}
|
16351
16403
|
},
|
16352
16404
|
"CDCC_crt": {
|
16353
|
-
"title": "Child & dependent care credit phaseout
|
16354
|
-
"description": "The maximum
|
16405
|
+
"title": "Child & dependent care credit phaseout rate ceiling",
|
16406
|
+
"description": "The maximum rate for the CDCC; this rate decreases as AGI rises above the CDCC_ps level.",
|
16355
16407
|
"notes": "",
|
16356
16408
|
"section_1": "Nonrefundable Credits",
|
16357
16409
|
"section_2": "Child And Dependent Care",
|
@@ -16361,21 +16413,21 @@
|
|
16361
16413
|
"value": [
|
16362
16414
|
{
|
16363
16415
|
"year": 2013,
|
16364
|
-
"value":
|
16416
|
+
"value": 0.350
|
16365
16417
|
},
|
16366
16418
|
{
|
16367
16419
|
"year": 2021,
|
16368
|
-
"value":
|
16420
|
+
"value": 0.500
|
16369
16421
|
},
|
16370
16422
|
{
|
16371
16423
|
"year": 2022,
|
16372
|
-
"value":
|
16424
|
+
"value": 0.350
|
16373
16425
|
}
|
16374
16426
|
],
|
16375
16427
|
"validators": {
|
16376
16428
|
"range": {
|
16377
16429
|
"min": 0,
|
16378
|
-
"max":
|
16430
|
+
"max": 1
|
16379
16431
|
}
|
16380
16432
|
},
|
16381
16433
|
"compatible_data": {
|
@@ -16384,8 +16436,8 @@
|
|
16384
16436
|
}
|
16385
16437
|
},
|
16386
16438
|
"CDCC_frt": {
|
16387
|
-
"title": "Child & dependent care credit phaseout
|
16388
|
-
"description": "The minimum
|
16439
|
+
"title": "Child & dependent care credit phaseout rate floor",
|
16440
|
+
"description": "The minimum rate for the first AGI phaseout of the CDCC.",
|
16389
16441
|
"notes": "",
|
16390
16442
|
"section_1": "Nonrefundable Credits",
|
16391
16443
|
"section_2": "Child And Dependent Care",
|
@@ -16395,13 +16447,13 @@
|
|
16395
16447
|
"value": [
|
16396
16448
|
{
|
16397
16449
|
"year": 2013,
|
16398
|
-
"value":
|
16450
|
+
"value": 0.200
|
16399
16451
|
}
|
16400
16452
|
],
|
16401
16453
|
"validators": {
|
16402
16454
|
"range": {
|
16403
16455
|
"min": 0,
|
16404
|
-
"max":
|
16456
|
+
"max": 1
|
16405
16457
|
}
|
16406
16458
|
},
|
16407
16459
|
"compatible_data": {
|
@@ -16410,9 +16462,9 @@
|
|
16410
16462
|
}
|
16411
16463
|
},
|
16412
16464
|
"CDCC_prt": {
|
16413
|
-
"title": "Child & dependent care credit phaseout
|
16414
|
-
"description": "The CDCC credit rate is reduced by this many percentage points for each
|
16415
|
-
"notes": "In the law, the credit rate is reduced by 1 percentage point for every $2,000 of AGI over the limit.",
|
16465
|
+
"title": "Child & dependent care credit phaseout rate",
|
16466
|
+
"description": "The CDCC credit rate is reduced by this many percentage points for each dollar of AGI over the phase-out thresholds.",
|
16467
|
+
"notes": "In the law, the credit rate is reduced by 1 percentage point for every $2,000 of AGI over the limit. 0.01 / 2000 = 0.000005",
|
16416
16468
|
"section_1": "Nonrefundable Credits",
|
16417
16469
|
"section_2": "Child And Dependent Care",
|
16418
16470
|
"indexable": false,
|
@@ -16421,7 +16473,7 @@
|
|
16421
16473
|
"value": [
|
16422
16474
|
{
|
16423
16475
|
"year": 2013,
|
16424
|
-
"value":
|
16476
|
+
"value": 5e-06
|
16425
16477
|
}
|
16426
16478
|
],
|
16427
16479
|
"validators": {
|
@@ -17798,22 +17850,22 @@
|
|
17798
17850
|
{
|
17799
17851
|
"year": 2018,
|
17800
17852
|
"EIC": "0kids",
|
17801
|
-
"value":
|
17853
|
+
"value": 8510.0
|
17802
17854
|
},
|
17803
17855
|
{
|
17804
17856
|
"year": 2018,
|
17805
17857
|
"EIC": "1kid",
|
17806
|
-
"value":
|
17858
|
+
"value": 18700.0
|
17807
17859
|
},
|
17808
17860
|
{
|
17809
17861
|
"year": 2018,
|
17810
17862
|
"EIC": "2kids",
|
17811
|
-
"value":
|
17863
|
+
"value": 18700.0
|
17812
17864
|
},
|
17813
17865
|
{
|
17814
17866
|
"year": 2018,
|
17815
17867
|
"EIC": "3+kids",
|
17816
|
-
"value":
|
17868
|
+
"value": 18700.0
|
17817
17869
|
},
|
17818
17870
|
{
|
17819
17871
|
"year": 2019,
|
@@ -18020,22 +18072,22 @@
|
|
18020
18072
|
{
|
18021
18073
|
"year": 2018,
|
18022
18074
|
"EIC": "0kids",
|
18023
|
-
"value":
|
18075
|
+
"value": 5690.0
|
18024
18076
|
},
|
18025
18077
|
{
|
18026
18078
|
"year": 2018,
|
18027
18079
|
"EIC": "1kid",
|
18028
|
-
"value":
|
18080
|
+
"value": 5700.0
|
18029
18081
|
},
|
18030
18082
|
{
|
18031
18083
|
"year": 2018,
|
18032
18084
|
"EIC": "2kids",
|
18033
|
-
"value":
|
18085
|
+
"value": 5700.0
|
18034
18086
|
},
|
18035
18087
|
{
|
18036
18088
|
"year": 2018,
|
18037
18089
|
"EIC": "3+kids",
|
18038
|
-
"value":
|
18090
|
+
"value": 5700.0
|
18039
18091
|
},
|
18040
18092
|
{
|
18041
18093
|
"year": 2019,
|
@@ -18080,7 +18132,7 @@
|
|
18080
18132
|
{
|
18081
18133
|
"year": 2021,
|
18082
18134
|
"EIC": "0kids",
|
18083
|
-
"value":
|
18135
|
+
"value": 5940.0
|
18084
18136
|
},
|
18085
18137
|
{
|
18086
18138
|
"year": 2021,
|
@@ -117,6 +117,7 @@ class Records(Data):
|
|
117
117
|
CPS_WEIGHTS_FILENAME = 'cps_weights.csv.gz'
|
118
118
|
CPS_RATIOS_FILENAME = None
|
119
119
|
TMD_WEIGHTS_FILENAME = 'tmd_weights.csv.gz'
|
120
|
+
TMD_GROWFACTORS_FILENAME = 'tmd_growfactors.csv'
|
120
121
|
TMD_RATIOS_FILENAME = None
|
121
122
|
CODE_PATH = os.path.abspath(os.path.dirname(__file__))
|
122
123
|
VARINFO_FILE_NAME = 'records_variables.json'
|
@@ -226,7 +227,7 @@ class Records(Data):
|
|
226
227
|
|
227
228
|
@staticmethod
|
228
229
|
def tmd_constructor(data, # path to tmd.csv file or dataframe
|
229
|
-
gfactors=GrowFactors(),
|
230
|
+
gfactors=GrowFactors(TMD_GROWFACTORS_FILENAME),
|
230
231
|
exact_calculations=False): # pragma: no cover
|
231
232
|
"""
|
232
233
|
Static method returns a Records object instantiated with TMD
|
@@ -1041,6 +1041,16 @@
|
|
1041
1041
|
"desc": "Other Dependent Credit",
|
1042
1042
|
"form": {"2013-20??": "calculated variable"}
|
1043
1043
|
},
|
1044
|
+
"ctc_total": {
|
1045
|
+
"type": "float",
|
1046
|
+
"desc": "Total CTC amount (c07220 + c11070 + odc + ctc_new)",
|
1047
|
+
"form": {"2013-20??": "calculated variable"}
|
1048
|
+
},
|
1049
|
+
"ctc_refundable": {
|
1050
|
+
"type": "float",
|
1051
|
+
"desc": "Portion of total CTC amount that is refundable",
|
1052
|
+
"form": {"2013-20??": "calculated variable"}
|
1053
|
+
},
|
1044
1054
|
"personal_refundable_credit": {
|
1045
1055
|
"type": "float",
|
1046
1056
|
"desc": "Personal refundable credit",
|
@@ -251,7 +251,12 @@ class TaxCalcIO():
|
|
251
251
|
except paramtools.ValidationError as valerr_msg:
|
252
252
|
self.errmsg += valerr_msg.__str__()
|
253
253
|
# create GrowFactors base object that incorporates gdiff_baseline
|
254
|
-
|
254
|
+
if self.tmd_input_data:
|
255
|
+
gfactors_base = GrowFactors( # pragma: no cover
|
256
|
+
Records.TMD_GROWFACTORS_FILENAME
|
257
|
+
)
|
258
|
+
else:
|
259
|
+
gfactors_base = GrowFactors()
|
255
260
|
gdiff_baseline.apply_to(gfactors_base)
|
256
261
|
# specify gdiff_response object
|
257
262
|
gdiff_response = GrowDiff()
|
@@ -260,7 +265,12 @@ class TaxCalcIO():
|
|
260
265
|
except paramtools.ValidationError as valerr_msg:
|
261
266
|
self.errmsg += valerr_msg.__str__()
|
262
267
|
# create GrowFactors ref object that has all gdiff objects applied
|
263
|
-
|
268
|
+
if self.tmd_input_data:
|
269
|
+
gfactors_ref = GrowFactors( # pragma: no cover
|
270
|
+
Records.TMD_GROWFACTORS_FILENAME
|
271
|
+
)
|
272
|
+
else:
|
273
|
+
gfactors_ref = GrowFactors()
|
264
274
|
gdiff_baseline.apply_to(gfactors_ref)
|
265
275
|
gdiff_response.apply_to(gfactors_ref)
|
266
276
|
# create Policy objects:
|
@@ -0,0 +1,55 @@
|
|
1
|
+
YEAR,ATXPY,ASCHF,ABOOK,ACPIU,ACPIM,AWAGE,ASCHCI,ASCHCL,ASCHEI,ASCHEL,AINTS,ADIVS,ACGNS,ASOCSEC,AUCOMP,AIPD,ABENOTHER,ABENMCARE,ABENMCAID,ABENSSI,ABENSNAP,ABENWIC,ABENHOUSING,ABENTANF,ABENVET
|
2
|
+
2021,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
3
|
+
2022,1.014347,1.742914,1.047552,1.07229,1.040311,1.076282,1.022527,1.022546,1.047553,1.047566,1.049118,1.042358,0.631565,1.04749,0.152665,1.022138,1.030159,1.048769,1.047573,0.999851,1.0,1.002545,1.034942,1.0,1.0
|
4
|
+
2023,1.050108,0.653145,1.091056,1.05402,1.004761,1.050035,1.013156,1.013121,1.091037,1.091047,1.026196,1.126711,1.0525,1.085497,0.748857,1.058072,1.030193,1.050822,1.048715,1.000448,1.0,1.003807,1.034968,1.0,1.0
|
5
|
+
2024,1.046242,0.895528,1.007166,1.0255,1.01407,1.040377,1.0397,1.03963,1.007187,1.007157,1.156028,1.023049,0.932271,1.052921,1.337549,1.054081,1.030334,1.048426,1.051767,0.99776,1.0,1.002528,1.034951,1.0,1.0
|
6
|
+
2025,1.040442,0.963117,1.020457,1.02198,0.958663,1.038977,1.037682,1.037745,1.020415,1.020444,1.091746,1.02538,0.97747,1.031721,1.154874,1.047914,1.030635,1.046248,1.052213,1.002245,1.0,1.003783,1.034897,1.0,1.0
|
7
|
+
2026,1.039294,0.987094,1.014705,1.02074,1.014023,1.035978,1.037783,1.037762,1.014711,1.014716,1.098184,1.019802,0.970235,1.030992,1.035291,1.046856,1.030633,1.072236,1.0,0.999552,1.0,1.002513,1.034808,1.0,1.0
|
8
|
+
2027,1.037119,0.998822,1.017535,1.01946,1.013312,1.033569,1.03414,1.034138,1.017568,1.017583,1.066606,1.013266,0.993714,1.031791,1.045541,1.044372,1.030788,1.0,1.0,1.0,1.0,1.002506,1.034863,1.0,1.0
|
9
|
+
2028,1.036799,1.006582,1.023966,1.01942,1.013356,1.033042,1.031594,1.03158,1.023985,1.02393,1.050716,1.021542,1.009158,1.03344,1.043558,1.043967,1.030942,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
10
|
+
2029,1.035913,1.010333,1.028149,1.01966,1.013612,1.033365,1.030869,1.030888,1.028085,1.028143,1.03013,1.032091,1.018962,1.033664,1.045739,1.042825,1.031131,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
11
|
+
2030,1.036423,1.01018,1.024121,1.01977,1.013855,1.03321,1.030563,1.030595,1.02417,1.024128,1.036979,1.032934,1.024538,1.034401,1.043738,1.043174,1.03133,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
12
|
+
2031,1.036362,1.010259,1.024733,1.01991,1.014016,1.032812,1.031233,1.03124,1.024699,1.024734,1.039197,1.032793,1.027842,1.036645,1.038241,1.042951,1.03151,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
13
|
+
2032,1.036409,1.009979,1.028,1.01999,1.014306,1.032126,1.032334,1.032295,1.028004,1.027983,1.04014,1.03261,1.029719,1.036435,1.031319,1.042807,1.031644,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
14
|
+
2033,1.035793,1.008195,1.02813,1.02002,1.014309,1.031481,1.033961,1.033991,1.028128,1.02811,1.031669,1.03246,1.030798,1.037554,1.028443,1.042009,1.031857,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
15
|
+
2034,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
16
|
+
2035,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
17
|
+
2036,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
18
|
+
2037,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
19
|
+
2038,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
20
|
+
2039,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
21
|
+
2040,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
22
|
+
2041,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
23
|
+
2042,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
24
|
+
2043,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
25
|
+
2044,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
26
|
+
2045,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
27
|
+
2046,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
28
|
+
2047,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
29
|
+
2048,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
30
|
+
2049,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
31
|
+
2050,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
32
|
+
2051,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
33
|
+
2052,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
34
|
+
2053,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
35
|
+
2054,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
36
|
+
2055,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
37
|
+
2056,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
38
|
+
2057,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
39
|
+
2058,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
40
|
+
2059,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
41
|
+
2060,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
42
|
+
2061,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
43
|
+
2062,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
44
|
+
2063,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
45
|
+
2064,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
46
|
+
2065,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
47
|
+
2066,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
48
|
+
2067,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
49
|
+
2068,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
50
|
+
2069,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
51
|
+
2070,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
52
|
+
2071,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
53
|
+
2072,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
54
|
+
2073,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
55
|
+
2074,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: taxcalc
|
3
|
-
Version:
|
3
|
+
Version: 4.1.0
|
4
4
|
Summary: taxcalc
|
5
5
|
Home-page: https://github.com/PSLmodels/Tax-Calculator
|
6
6
|
Download-URL: https://github.com/PSLmodels/Tax-Calculator
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.9
|
16
16
|
Classifier: Programming Language :: Python :: 3.10
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
18
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
19
20
|
Description-Content-Type: text/markdown
|
20
21
|
License-File: LICENSE
|
@@ -29,7 +30,7 @@ Requires-Dist: paramtools
|
|
29
30
|
| | |
|
30
31
|
| --- | --- |
|
31
32
|
| Org | [](https://www.PSLmodels.org) [](https://github.com/PSLmodels/Tax-Calculator/blob/master/LICENSE) [](https://pslmodels.github.io/Tax-Calculator/) |
|
32
|
-
| Package | [](https://www.python.org/downloads/release/python-3916/) [](https://www.python.org/downloads/release/python-3108/)
|
33
|
+
| Package | [](https://www.python.org/downloads/release/python-3916/) [](https://www.python.org/downloads/release/python-3108/) [](https://www.python.org/downloads/release/python-3118/) [](https://www.python.org/downloads/release/python-3121/) [](https://pypi.org/project/taxcalc/) [](https://pypi.org/project/taxcalc/) [](https://anaconda.org/conda-forge/taxcalc)|
|
33
34
|
| Testing |   [](https://codecov.io/gh/PSLmodels/Tax-Calculator) |
|
34
35
|
|
35
36
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|