taxcalc 5.1.0__tar.gz → 5.3.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-5.1.0 → taxcalc-5.3.0}/.github/workflows/build_and_test.yml +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/Makefile +2 -1
- {taxcalc-5.1.0/taxcalc.egg-info → taxcalc-5.3.0}/PKG-INFO +3 -6
- {taxcalc-5.1.0 → taxcalc-5.3.0}/README.md +1 -4
- {taxcalc-5.1.0 → taxcalc-5.3.0}/conda.recipe/meta.yaml +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/releases.md +59 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/RELEASING.md +0 -4
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/index.md +2 -2
- taxcalc-5.3.0/docs/recipes/_static/reformA.json +10 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/data.md +36 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/tcja_after_2025.md +11 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/environment.yml +1 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/pytest.ini +1 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/setup.py +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/__init__.py +3 -3
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/calcfunctions.py +21 -16
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/calculator.py +3 -3
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cli/tc.py +15 -11
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/data.py +1 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/decorators.py +9 -8
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growfactors.py +2 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/policy.py +13 -5
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/policy_current_law.json +1191 -1395
- taxcalc-5.3.0/taxcalc/puf_ratios.csv +26 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/puf_weights.csv.gz +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/2017_law.json +2 -0
- taxcalc-5.3.0/taxcalc/reforms/ARPA.out.csv +10 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/taxcalcio.py +41 -26
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/conftest.py +1 -1
- taxcalc-5.3.0/taxcalc/tests/cpscsv_agg_expect.csv +26 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +24 -24
- taxcalc-5.3.0/taxcalc/tests/puf_var_wght_means_by_year.csv +80 -0
- taxcalc-5.3.0/taxcalc/tests/pufcsv_agg_expect.csv +26 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/pufcsv_mtr_expect.txt +21 -21
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/reforms.json +3 -1
- taxcalc-5.3.0/taxcalc/tests/reforms_expect.csv +61 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_4package.py +8 -9
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_calculator.py +152 -151
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_compare.py +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_consumption.py +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_cpscsv.py +4 -3
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_decorators.py +57 -52
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_growdiff.py +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_parameters.py +59 -53
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_policy.py +229 -251
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_puf_var_stats.py +2 -2
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_pufcsv.py +5 -4
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_records.py +5 -1
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_reforms.py +101 -99
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_taxcalcio.py +10 -4
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/utils.py +3 -3
- {taxcalc-5.1.0 → taxcalc-5.3.0/taxcalc.egg-info}/PKG-INFO +3 -6
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/SOURCES.txt +0 -3
- taxcalc-5.1.0/docs/recipes/_static/reformA.json +0 -15
- taxcalc-5.1.0/extend_tcja.py +0 -163
- taxcalc-5.1.0/ppp.py +0 -132
- taxcalc-5.1.0/taxcalc/puf_ratios.csv +0 -26
- taxcalc-5.1.0/taxcalc/reforms/ARPA.out.csv +0 -10
- taxcalc-5.1.0/taxcalc/reforms/clp.out.csv +0 -10
- taxcalc-5.1.0/taxcalc/tests/cpscsv_agg_expect.csv +0 -26
- taxcalc-5.1.0/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -80
- taxcalc-5.1.0/taxcalc/tests/pufcsv_agg_expect.csv +0 -26
- taxcalc-5.1.0/taxcalc/tests/reforms_expect.csv +0 -61
- {taxcalc-5.1.0 → taxcalc-5.3.0}/.coveragerc +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/FUNDING.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/check_jupyterbook.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/.gitignore +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/LICENSE +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/MANIFEST.in +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/PSL_catalog.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/codecov.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/conda.recipe/bld.bat +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/conda.recipe/build.sh +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/csv_show.sh +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/csv_vars.sh +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/PSL.svg +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_config.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_static/atr.png +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_static/mtr.png +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_static/pch.png +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_toc.yml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/LICENSE.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/history.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/roadmap.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/calcfunctions.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/calculator.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/consumption.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/data.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/decorators.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/growdiff.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/growfactors.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/parameters.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/policy.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/public_api.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/records.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/taxcalcio.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/utils.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/utilsprvt.rst +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/contributor_guide.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/param_naming.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/pr_workflow.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/testing.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/README.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/assumption_params.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/cli.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/index.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/input_vars.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/make/make_io_vars.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/make/make_params.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/make/make_uguide.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/output_vars.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/policy_params.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/python_interface.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/assumption_params_template.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/input_vars_template.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/output_vars_template.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/policy_params_template.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/README.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/_static/reformB.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/_static/reformC.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/convert_all.sh +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/index.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe00.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe01.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe02.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe03.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe04.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe05.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe06.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe00.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe01.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe02.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe03.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe04.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe05.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe06.ipynb +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/overview.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/starting.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/use_cases.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/gitpr +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/gitpr.bat +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/gitsync +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/gitsync.bat +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/pyproject.toml +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/setup.cfg +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/assumptions/README.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cli/__init__.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/conftest.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/consumption.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/consumption.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cps.csv.gz +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cps_weights.csv.gz +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growdiff.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growdiff.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growfactors.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/parameters.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/records.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/records_variables.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/2017_law.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ARPA.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/BrownKhanna.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/CARES.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/CARES.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Larson2019.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/README.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/REFORMS.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Renacci.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Renacci.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2016.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2017.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/cases.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ext.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes0.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes1.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes2.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes3.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/benefits_expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_benefits.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_calcfunctions.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_compatible_data.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_data.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_growfactors.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_responses.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_utils.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/utilsprvt.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/README.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/README.md +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/tests_35.sh +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/dependency_links.txt +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/entry_points.txt +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/requires.txt +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/top_level.txt +0 -0
- {taxcalc-5.1.0 → taxcalc-5.3.0}/tctest-nojit.sh +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
name: Build Package and Test Source Code [Python 3.
|
1
|
+
name: Build Package and Test Source Code [Python 3.11, 3.12, 3.13]
|
2
2
|
|
3
3
|
on: [push, pull_request]
|
4
4
|
|
@@ -8,7 +8,7 @@ jobs:
|
|
8
8
|
strategy:
|
9
9
|
matrix:
|
10
10
|
os: [ubuntu-latest, windows-latest]
|
11
|
-
python-version: ['3.
|
11
|
+
python-version: ['3.11', '3.12', '3.13']
|
12
12
|
|
13
13
|
steps:
|
14
14
|
- name: Checkout
|
@@ -85,7 +85,8 @@ TOPLEVEL_JSON_FILES := $(shell ls -l ./*json | awk '{print $$9}')
|
|
85
85
|
TAXCALC_JSON_FILES := $(shell ls -l ./taxcalc/*json | awk '{print $$9}')
|
86
86
|
TESTS_JSON_FILES := $(shell ls -l ./taxcalc/tests/*json | awk '{print $$9}')
|
87
87
|
PYLINT_DISABLE = locally-disabled,duplicate-code,cyclic-import
|
88
|
-
PYLINT_OPTIONS = --disable=$(PYLINT_DISABLE) --score=no --jobs=4
|
88
|
+
PYLINT_OPTIONS = --disable=$(PYLINT_DISABLE) --score=no --jobs=4 \
|
89
|
+
--check-quote-consistency=yes
|
89
90
|
EXCLUDED_PATHS = docs,taxcalc/validation
|
90
91
|
|
91
92
|
.PHONY=cstest
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: taxcalc
|
3
|
-
Version: 5.
|
3
|
+
Version: 5.3.0
|
4
4
|
Summary: Tax-Calculator
|
5
5
|
Home-page: https://github.com/PSLmodels/Tax-Calculator
|
6
6
|
Download-URL: https://github.com/PSLmodels/Tax-Calculator
|
@@ -12,9 +12,9 @@ Classifier: License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
13
13
|
Classifier: Programming Language :: Python
|
14
14
|
Classifier: Programming Language :: Python :: 3
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
16
15
|
Classifier: Programming Language :: Python :: 3.11
|
17
16
|
Classifier: Programming Language :: Python :: 3.12
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
18
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
19
19
|
Description-Content-Type: text/markdown
|
20
20
|
License-File: LICENSE
|
@@ -36,7 +36,7 @@ Dynamic: summary
|
|
36
36
|
| | |
|
37
37
|
| --- | --- |
|
38
38
|
| Org | [](https://www.PSLmodels.org) [](https://github.com/PSLmodels/Tax-Calculator/blob/master/LICENSE) [](https://pslmodels.github.io/Tax-Calculator/) |
|
39
|
-
| Package | [](https://www.python.org/downloads/release/python-3118/) [](https://www.python.org/downloads/release/python-3121/) [](https://www.python.org/downloads/release/python-3131/) [](https://pypi.org/project/taxcalc/) [](https://pypi.org/project/taxcalc/) [](https://anaconda.org/conda-forge/taxcalc)|
|
40
40
|
| Testing |   [](https://codecov.io/gh/PSLmodels/Tax-Calculator) |
|
41
41
|
|
42
42
|
|
@@ -57,6 +57,3 @@ explains the workflow involved in contributing model enhancements.
|
|
57
57
|
|
58
58
|
Complete documentation is available
|
59
59
|
[here](https://PSLmodels.github.io/Tax-Calculator/).
|
60
|
-
This documentation includes
|
61
|
-
[examples](https://taxcalc.pslmodels.org/usage/tcja_after_2025.html)
|
62
|
-
of how to analyze different ways of extending TCJA policy beyond 2025.
|
@@ -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-3118/) [](https://www.python.org/downloads/release/python-3121/) [](https://www.python.org/downloads/release/python-3131/) [](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
|
|
@@ -22,6 +22,3 @@ explains the workflow involved in contributing model enhancements.
|
|
22
22
|
|
23
23
|
Complete documentation is available
|
24
24
|
[here](https://PSLmodels.github.io/Tax-Calculator/).
|
25
|
-
This documentation includes
|
26
|
-
[examples](https://taxcalc.pslmodels.org/usage/tcja_after_2025.html)
|
27
|
-
of how to analyze different ways of extending TCJA policy beyond 2025.
|
@@ -8,7 +8,7 @@ build:
|
|
8
8
|
|
9
9
|
requirements:
|
10
10
|
build:
|
11
|
-
- "python>=3.
|
11
|
+
- "python>=3.11, <3.14"
|
12
12
|
- "numpy>=1.26"
|
13
13
|
- "pandas>=2.2"
|
14
14
|
- "bokeh>=3.7"
|
@@ -19,7 +19,7 @@ requirements:
|
|
19
19
|
- behresp
|
20
20
|
|
21
21
|
run:
|
22
|
-
- "python>=3.
|
22
|
+
- "python>=3.11, <3.14"
|
23
23
|
- "numpy>=1.26"
|
24
24
|
- "pandas>=2.2"
|
25
25
|
- "bokeh>=3.7"
|
@@ -3,8 +3,66 @@ Release history
|
|
3
3
|
Go [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclosed)
|
4
4
|
for a complete commit history.
|
5
5
|
|
6
|
+
2025-09-19 Release 5.3.0
|
7
|
+
------------------------
|
8
|
+
(last merged pull request is
|
9
|
+
[#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957))
|
10
|
+
|
11
|
+
**This is an enhancement release.**
|
12
|
+
|
13
|
+
**API Changes**
|
14
|
+
|
15
|
+
**New Features**
|
16
|
+
- Update new PUF weights and ratios files.
|
17
|
+
[[#2925](https://github.com/PSLmodels/Tax-Calculator/pull/2925) by
|
18
|
+
Bodi Yang], from the update in [[TaxData PR #452](https://github.com/PSLmodels/
|
19
|
+
taxdata/pull/452) by Bodi Yang]
|
20
|
+
|
21
|
+
Note: PUF users are required to produce new `puf.csv` file from TaxData repository and replace the old file in the Tax-Calculator directory.
|
22
|
+
Correct usage: Tax-Calculator >= 5.3.0 versions are compatible with the newly produced `puf.csv` file; Tax-Calculator <= 5.2.0 versions are compatible with the previous `puf.csv` file
|
23
|
+
|
24
|
+
- Make `FST_AGI_thd` parameters to be non inflation-indexed
|
25
|
+
[[#2951](https://github.com/PSLmodels/Tax-Calculator/pull/2951) by
|
26
|
+
Martin Holmer]
|
27
|
+
|
28
|
+
- Add support for Python 3.13
|
29
|
+
[[#2953](https://github.com/PSLmodels/Tax-Calculator/pull/2953) by
|
30
|
+
Martin Holmer]
|
31
|
+
|
32
|
+
- Add tests for consistent quote style
|
33
|
+
[[#2954](https://github.com/PSLmodels/Tax-Calculator/pull/2954) by
|
34
|
+
Martin Holmer]
|
35
|
+
|
36
|
+
- Allow CLI --dumpvars DUMPVARS to be the ALL string
|
37
|
+
[[#2956](https://github.com/PSLmodels/Tax-Calculator/pull/2956) by
|
38
|
+
Martin Holmer]
|
39
|
+
|
40
|
+
- Add documentation on using sub-national TMD weights with CLI tool
|
41
|
+
[[#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957) by
|
42
|
+
Martin Holmer]
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
2025-08-08 Release 5.2.0
|
47
|
+
------------------------
|
48
|
+
(last merged pull request is
|
49
|
+
[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944))
|
50
|
+
|
51
|
+
**This is an enhancement release.**
|
52
|
+
|
53
|
+
**API Changes**
|
54
|
+
|
55
|
+
**New Features**
|
56
|
+
- Make OBBBA reform be current-law policy in several PRs described in
|
57
|
+
[issue
|
58
|
+
2926](https://github.com/PSLmodels/Tax-Calculator/issues/2926) by
|
59
|
+
Martin Holmer
|
60
|
+
- Extend CPS and PUF aggregate tests through 2035
|
61
|
+
[[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944) by
|
62
|
+
Martin Holmer]
|
63
|
+
|
6
64
|
|
7
|
-
2025-07-
|
65
|
+
2025-07-22 Release 5.1.0
|
8
66
|
------------------------
|
9
67
|
(last merged pull request is
|
10
68
|
[#2933](https://github.com/PSLmodels/Tax-Calculator/pull/2933))
|
@@ -20,10 +20,6 @@ In the top-level Tax-Calculator directory, do the following:
|
|
20
20
|
|
21
21
|
--> run `python update_pcl.py` [to update policy_current_law.json if needed]
|
22
22
|
|
23
|
-
--> run `python ppp.py` [to update policy_current_law.json if needed]
|
24
|
-
|
25
|
-
--> run `python extend_tcja.py > ext.json` [to update reforms/ext.json]
|
26
|
-
|
27
23
|
--> run `make cstest` [to confirm project coding style is being followed]
|
28
24
|
|
29
25
|
--> run `make pytest-all` [or `pytest -m pre_release -n4` in taxcalc subdir]
|
@@ -54,7 +54,7 @@ cross-model validation work with NBER's TAXSIM-35 model is described
|
|
54
54
|
|
55
55
|
## Latest release
|
56
56
|
|
57
|
-
{doc}`5.
|
57
|
+
{doc}`5.3.0 (2025-09-19) <about/releases>`
|
58
58
|
|
59
59
|
If you are already using Tax-Calculator, upgrade using the following command:
|
60
60
|
```
|
@@ -83,4 +83,4 @@ If you wish to provide a link to Tax-Calculator, the preferred URL is:
|
|
83
83
|
`https://PSLmodels.github.io/Tax-Calculator`.
|
84
84
|
Additionally, we strongly recommend that you describe the input data used,
|
85
85
|
and provide a link to the materials required to replicate your analysis or,
|
86
|
-
at least, note that those materials are available upon request.
|
86
|
+
at least, note that those materials are available upon request.
|
@@ -61,7 +61,7 @@ file.
|
|
61
61
|
|
62
62
|
The [tax-microdata
|
63
63
|
repository](https://github.com/PSLmodels/tax-microdata-benchmarking)
|
64
|
-
produces an input variables file (`tmd.csv.gz`), a national weights
|
64
|
+
produces an input variables file (`tmd.csv.gz`), a **national** weights
|
65
65
|
file (`tmd_weights.csv.gz`), and a variable growth factors file
|
66
66
|
(`tmd_growfactors.csv`) that can be used with the Tax-Calculator
|
67
67
|
package beginning with the 3.6.0 release. The TMD files are available
|
@@ -77,6 +77,41 @@ Tax-Calculator in two ways:
|
|
77
77
|
- with the **CLI tool**, `tc`, when the three TMD files are all in
|
78
78
|
the same folder and the `tmd.csv.gz` file has been unzipped.
|
79
79
|
|
80
|
+
The [tax-microdata
|
81
|
+
repository](https://github.com/PSLmodels/tax-microdata-benchmarking)
|
82
|
+
also produces state and Congressional district weights files that can
|
83
|
+
be used to estimate federal taxes for various sub-national areas. The
|
84
|
+
easiest way to produce sub-national federal tax estimates is to supply
|
85
|
+
the **CLI tool** with the value of an environmental variable
|
86
|
+
(`TMD_AREA`) that indicates the sub-national area. So, for example,
|
87
|
+
if you have the New Mexico state weights in the
|
88
|
+
`nm_tmd_weights.csv.gz` file, put that file in the folder that
|
89
|
+
contains the three national TMD files described above. Then, execute
|
90
|
+
this command for tabular output under 2024 current-law policy:
|
91
|
+
```
|
92
|
+
(taxcalc-dev) myruns> TMD_AREA=nm tc tmd.csv 2024 --exact --tables
|
93
|
+
Read input data for 2021; input data were extrapolated to 2024
|
94
|
+
Write tabular output to file tmd_nm-24-#-#-#.tables
|
95
|
+
Execution time is 8.2 seconds
|
96
|
+
(taxcalc-dev) myruns> awk '$1~/Ret/||$1~/A/' tmd_nm-24-#-#-#.tables | head -2
|
97
|
+
Returns ExpInc IncTax PayTax LSTax AllTax
|
98
|
+
A 1.17 87.0 7.2 6.9 0.0 14.1
|
99
|
+
```
|
100
|
+
|
101
|
+
Or for the first Congressional district in New Mexico, put the
|
102
|
+
`nm01_tmd_weights.csv.gz` file in the folder with the other TMD
|
103
|
+
files and execute this command:
|
104
|
+
```
|
105
|
+
(taxcalc-dev) myruns> TMD_AREA=nm01 tc tmd.csv 2024 --exact --tables
|
106
|
+
Read input data for 2021; input data were extrapolated to 2024
|
107
|
+
Write tabular output to file tmd_nm01-24-#-#-#.tables
|
108
|
+
Execution time is 8.3 seconds
|
109
|
+
(taxcalc-dev) myruns> awk '$1~/Ret/||$1~/A/' tmd_nm01-24-#-#-#.tables | head -2
|
110
|
+
Returns ExpInc IncTax PayTax LSTax AllTax
|
111
|
+
A 0.40 31.9 2.8 2.5 0.0 5.3
|
112
|
+
```
|
113
|
+
|
114
|
+
|
80
115
|
## Using other data with Tax-Calculator
|
81
116
|
|
82
117
|
Using other data sources with Tax-Calculator is possible. Users can
|
@@ -1,4 +1,14 @@
|
|
1
|
-
# TCJA after 2025
|
1
|
+
# OBBBA: TCJA after 2025
|
2
|
+
|
3
|
+
TCJA was replaced by OBBBA when the latter was signed into law on July
|
4
|
+
4, 2025. Beginning with Tax-Calculator 5.2.0, OBBBA is current-law
|
5
|
+
policy. How the OBBBA changes were implemented as current-law policy
|
6
|
+
is described in detail in closed [issue
|
7
|
+
2926](https://github.com/PSLmodels/Tax-Calculator/issues/2926).
|
8
|
+
|
9
|
+
----------------------------------------------------------------------
|
10
|
+
|
11
|
+
**THE FOLLOWING TEXT IS OF HISTORICAL INTEREST ONLY:**
|
2
12
|
|
3
13
|
Many provisions of the TCJA are temporary and are scheduled to end
|
4
14
|
after 2025 under current-law policy. Tax policy parameters that are
|
@@ -331,4 +341,3 @@ added to the `policy_current_law.json` file thereby changing the
|
|
331
341
|
Beginning with the 4.5.0 version, Tax-Calculator incorporates the
|
332
342
|
January 2025 CBO economic projection and contains historical tax
|
333
343
|
policy parameter values through 2025.
|
334
|
-
|
@@ -7,7 +7,7 @@ from setuptools import setup
|
|
7
7
|
with open("README.md", "r", encoding="utf-8") as f:
|
8
8
|
longdesc = f.read()
|
9
9
|
|
10
|
-
VERSION = "5.
|
10
|
+
VERSION = "5.3.0"
|
11
11
|
|
12
12
|
config = {
|
13
13
|
"description": "Tax-Calculator",
|
@@ -35,9 +35,9 @@ config = {
|
|
35
35
|
"Operating System :: OS Independent",
|
36
36
|
"Programming Language :: Python",
|
37
37
|
"Programming Language :: Python :: 3",
|
38
|
-
"Programming Language :: Python :: 3.10",
|
39
38
|
"Programming Language :: Python :: 3.11",
|
40
39
|
"Programming Language :: Python :: 3.12",
|
40
|
+
"Programming Language :: Python :: 3.13",
|
41
41
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
42
42
|
],
|
43
43
|
"tests_require": ["pytest"],
|
@@ -14,6 +14,6 @@ from taxcalc.taxcalcio import *
|
|
14
14
|
from taxcalc.utils import *
|
15
15
|
from taxcalc.cli import *
|
16
16
|
|
17
|
-
__version__ = '5.
|
18
|
-
__min_python3_version__ =
|
19
|
-
__max_python3_version__ =
|
17
|
+
__version__ = '5.3.0'
|
18
|
+
__min_python3_version__ = 11
|
19
|
+
__max_python3_version__ = 13
|
@@ -943,8 +943,9 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
943
943
|
ID_Medical_c, ID_StateLocalTax_c, ID_RealEstate_c,
|
944
944
|
ID_InterestPaid_c, ID_Charity_c, ID_Casualty_c,
|
945
945
|
ID_Miscellaneous_c, ID_AllTaxes_c, ID_AllTaxes_hc,
|
946
|
+
ID_AllTaxes_c_ps, ID_AllTaxes_c_po_rate, ID_AllTaxes_c_po_floor,
|
946
947
|
ID_StateLocalTax_crt, ID_RealEstate_crt, ID_Charity_f,
|
947
|
-
|
948
|
+
ID_reduction_rate):
|
948
949
|
"""
|
949
950
|
Calculates itemized deductions, Form 1040, Schedule A.
|
950
951
|
|
@@ -1057,10 +1058,16 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1057
1058
|
Ceiling on the amount of miscellaneous expense deduction
|
1058
1059
|
allowed (dollars)
|
1059
1060
|
ID_AllTaxes_c: list
|
1060
|
-
|
1061
|
+
Cap on the amount of state and local income, sales, and
|
1061
1062
|
real estate deductions allowed (dollars)
|
1062
1063
|
ID_AllTaxes_hc: float
|
1063
1064
|
State and local income, sales, and real estate tax deduciton haircut
|
1065
|
+
ID_AllTaxes_c_ps: float
|
1066
|
+
AGI level above which ID_AllTaxes_c is reduced
|
1067
|
+
ID_AllTaxes_c_po_rate: float
|
1068
|
+
ID_AllTaxes_c reduction rate when AGI is above ID_AllTaxes_c_ps
|
1069
|
+
ID_AllTaxes_c_po_floor: float
|
1070
|
+
Floor below which ID_AllTaxes_c cannot be reduced
|
1064
1071
|
ID_StateLocalTax_crt: float
|
1065
1072
|
Ceiling (as decimal fraction of AGI) for the combination of all
|
1066
1073
|
state and local income and sales tax deductions
|
@@ -1069,10 +1076,8 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1069
1076
|
state, local, and foreign real estate tax deductions
|
1070
1077
|
ID_Charity_f: list
|
1071
1078
|
Floor on the amount of charity expense deduction allowed (dollars)
|
1072
|
-
|
1073
|
-
OBBBA reduction rate for
|
1074
|
-
ID_reduction_other_rate: float
|
1075
|
-
OBBBA reduction rate for other deductions
|
1079
|
+
ID_reduction_rate: float
|
1080
|
+
OBBBA reduction rate for all itemized deductions
|
1076
1081
|
|
1077
1082
|
Returns
|
1078
1083
|
-------
|
@@ -1115,7 +1120,12 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1115
1120
|
c18400 = min(c18400, ID_StateLocalTax_crt * max(c00100, 0.0001))
|
1116
1121
|
c18500 = min(c18500, ID_RealEstate_crt * max(c00100, 0.0001))
|
1117
1122
|
c18300 = (c18400 + c18500) * (1. - ID_AllTaxes_hc)
|
1118
|
-
|
1123
|
+
cap = ID_AllTaxes_c[MARS - 1]
|
1124
|
+
if posagi > ID_AllTaxes_c_ps[MARS - 1]:
|
1125
|
+
excess_agi = posagi - ID_AllTaxes_c_ps[MARS - 1]
|
1126
|
+
cap = max(0., cap - excess_agi * ID_AllTaxes_c_po_rate)
|
1127
|
+
cap = max(cap, ID_AllTaxes_c_po_floor[MARS - 1])
|
1128
|
+
c18300 = min(c18300, cap)
|
1119
1129
|
# Interest paid
|
1120
1130
|
c19200 = e19200 * (1. - ID_InterestPaid_hc)
|
1121
1131
|
c19200 = min(c19200, ID_InterestPaid_c[MARS - 1])
|
@@ -1154,16 +1164,11 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1154
1164
|
# OBBBA limitation on total itemized deductions
|
1155
1165
|
# (no attempt to adjust c04470 components for limitation)
|
1156
1166
|
reduction = 0.
|
1157
|
-
if
|
1158
|
-
assert c21040 <= 0.0,
|
1167
|
+
if ID_reduction_rate > 0.:
|
1168
|
+
assert c21040 <= 0.0, 'Pease and OBBBA cannot both be in effect'
|
1159
1169
|
tincome = max(0., c00100 - c04600)
|
1160
1170
|
texcess = max(0., tincome - II_brk6[MARS - 1])
|
1161
|
-
|
1162
|
-
salt_reduction = ID_reduction_salt_rate * smaller_salt
|
1163
|
-
other_deds = max(0, c04470 - c18300)
|
1164
|
-
smaller_other = min(other_deds, texcess)
|
1165
|
-
other_reduction = ID_reduction_other_rate * smaller_other
|
1166
|
-
reduction = salt_reduction + other_reduction
|
1171
|
+
reduction = ID_reduction_rate * texcess
|
1167
1172
|
c04470 = max(0., c04470 - reduction)
|
1168
1173
|
# Cap total itemized deductions
|
1169
1174
|
# (no attempt to adjust c04470 components for limitation)
|
@@ -2197,7 +2202,7 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800, exact, c00100,
|
|
2197
2202
|
)
|
2198
2203
|
# ... second phase-down from CDCC_po1_rate_min to CDCC_po2_rate_min
|
2199
2204
|
ps2 = CDCC_ps2[MARS - 1]
|
2200
|
-
assert ps2 >= ps1,
|
2205
|
+
assert ps2 >= ps1, 'CDCC_ps2 must be no less than CDCC_ps1'
|
2201
2206
|
if c00100 > ps2:
|
2202
2207
|
steps_fractional = (c00100 - ps2) / CDCC_po2_step_size[MARS - 1]
|
2203
2208
|
if exact == 1: # exact calculation as on tax forms
|
@@ -282,7 +282,7 @@ class Calculator():
|
|
282
282
|
"""
|
283
283
|
if param_value is None:
|
284
284
|
val = getattr(self.__policy, param_name)
|
285
|
-
if param_name.startswith(
|
285
|
+
if param_name.startswith('_'):
|
286
286
|
return val
|
287
287
|
return val[0] # drop down a dimension.
|
288
288
|
setattr(self.__policy, param_name, param_value)
|
@@ -1214,11 +1214,11 @@ class Calculator():
|
|
1214
1214
|
# ... write optional param-vector-index line
|
1215
1215
|
if isinstance(pval, list):
|
1216
1216
|
labels = paramtools.consistent_labels(
|
1217
|
-
[mdata_base[pname][
|
1217
|
+
[mdata_base[pname]['value'][0]]
|
1218
1218
|
)
|
1219
1219
|
label = None
|
1220
1220
|
for _label in labels:
|
1221
|
-
if _label not in (
|
1221
|
+
if _label not in ('value', 'year'):
|
1222
1222
|
label = _label
|
1223
1223
|
break
|
1224
1224
|
if label:
|
@@ -96,23 +96,23 @@ def cli_tc_main():
|
|
96
96
|
'"stair-step" provisions in the tax law that '
|
97
97
|
'complicate marginal-tax-rate calculations.'),
|
98
98
|
default=False,
|
99
|
-
action=
|
99
|
+
action='store_true')
|
100
100
|
parser.add_argument('--params',
|
101
101
|
help=('optional flag that causes policy parameter '
|
102
102
|
'values for baseline and reform to be written '
|
103
103
|
'to separate text files.'),
|
104
104
|
default=False,
|
105
|
-
action=
|
105
|
+
action='store_true')
|
106
106
|
parser.add_argument('--tables',
|
107
107
|
help=('optional flag that causes distributional '
|
108
108
|
'tables to be written to a text file.'),
|
109
109
|
default=False,
|
110
|
-
action=
|
110
|
+
action='store_true')
|
111
111
|
parser.add_argument('--graphs',
|
112
112
|
help=('optional flag that causes graphs to be written '
|
113
113
|
'to HTML files for viewing in browser.'),
|
114
114
|
default=False,
|
115
|
-
action=
|
115
|
+
action='store_true')
|
116
116
|
parser.add_argument('--dumpdb',
|
117
117
|
help=('optional flag that causes TAXYEAR variable '
|
118
118
|
'values for each tax-unit under both '
|
@@ -121,7 +121,7 @@ def cli_tc_main():
|
|
121
121
|
'included in the database are controlled by '
|
122
122
|
'the --dumpvars option).'),
|
123
123
|
default=False,
|
124
|
-
action=
|
124
|
+
action='store_true')
|
125
125
|
parser.add_argument('--dumpvars',
|
126
126
|
help=('DUMPVARS is name of optional file containing a '
|
127
127
|
'space-delimited list of variables to include '
|
@@ -129,7 +129,9 @@ def cli_tc_main():
|
|
129
129
|
'a minimal set of variables. Valid variable '
|
130
130
|
'names include all variables in the '
|
131
131
|
'records_variables.json file plus mtr_itax and '
|
132
|
-
'mtr_ptax (MTRs wrt taxpayer earnings).'
|
132
|
+
'mtr_ptax (MTRs wrt taxpayer earnings). If '
|
133
|
+
'DUMPVARS is ALL, then all valid variable names '
|
134
|
+
'are included in the dump database.'),
|
133
135
|
default=None)
|
134
136
|
parser.add_argument('--runid', metavar='N',
|
135
137
|
help=('N is a positive integer run id that is used '
|
@@ -142,23 +144,23 @@ def cli_tc_main():
|
|
142
144
|
help=('optional flag that suppresses messages about '
|
143
145
|
'input and output actions.'),
|
144
146
|
default=False,
|
145
|
-
action=
|
147
|
+
action='store_true')
|
146
148
|
parser.add_argument('--test',
|
147
149
|
help=('optional flag that conducts installation '
|
148
150
|
'test, writes test result to stdout, '
|
149
151
|
'and quits leaving the test-related files.'),
|
150
152
|
default=False,
|
151
|
-
action=
|
153
|
+
action='store_true')
|
152
154
|
parser.add_argument('--version',
|
153
155
|
help=('optional flag that writes Tax-Calculator '
|
154
156
|
'release version to stdout and quits.'),
|
155
157
|
default=False,
|
156
|
-
action=
|
158
|
+
action='store_true')
|
157
159
|
parser.add_argument('--usage',
|
158
160
|
help=('optional flag that writes short usage '
|
159
161
|
'reminder to stdout and quits.'),
|
160
162
|
default=False,
|
161
|
-
action=
|
163
|
+
action='store_true')
|
162
164
|
args = parser.parse_args()
|
163
165
|
using_error_file = args.silent and args.runid != 0
|
164
166
|
efilename = f'run{args.runid}.errors'
|
@@ -246,7 +248,9 @@ def cli_tc_main():
|
|
246
248
|
# specify dumpvars_str from args.dumpvars file
|
247
249
|
dumpvars_str = ''
|
248
250
|
if args.dumpvars:
|
249
|
-
if
|
251
|
+
if args.dumpvars == 'ALL':
|
252
|
+
dumpvars_str = 'ALL'
|
253
|
+
elif os.path.exists(args.dumpvars):
|
250
254
|
with open(args.dumpvars, 'r', encoding='utf-8') as dfile:
|
251
255
|
dumpvars_str = dfile.read()
|
252
256
|
else:
|
@@ -109,7 +109,7 @@ class Data():
|
|
109
109
|
self._read_weights(weights)
|
110
110
|
# ... weights must be same size as data
|
111
111
|
if self.array_length > len(self.WT.index):
|
112
|
-
raise ValueError(
|
112
|
+
raise ValueError('Data has more records than weights.')
|
113
113
|
if self.array_length < len(self.WT.index):
|
114
114
|
# scale-up sub-sample weights by year-specific factor
|
115
115
|
sum_full_weights = self.WT.sum()
|
@@ -39,7 +39,7 @@ def id_wrapper(*dec_args, **dec_kwargs): # pylint: disable=unused-argument
|
|
39
39
|
return wrap
|
40
40
|
|
41
41
|
|
42
|
-
if DO_JIT is False or
|
42
|
+
if DO_JIT is False or "NOTAXCALCJIT" in os.environ:
|
43
43
|
JIT = id_wrapper
|
44
44
|
else:
|
45
45
|
JIT = numba.jit
|
@@ -89,7 +89,8 @@ def create_apply_function_string(sigout, sigin, parameters):
|
|
89
89
|
out_args = ["x_" + str(i) for i in range(0, len(sigout))]
|
90
90
|
in_args = ["x_" + str(i) for i in range(len(sigout), total_len)]
|
91
91
|
|
92
|
-
|
92
|
+
all_args = ",".join(out_args + in_args)
|
93
|
+
fstr.write(f"def ap_func({all_args}):\n")
|
93
94
|
fstr.write(" for i in range(len(x_0)):\n")
|
94
95
|
out_index = [x + "[i]" for x in out_args]
|
95
96
|
in_index = []
|
@@ -194,8 +195,8 @@ def make_apply_function(func, out_args, in_args, parameters,
|
|
194
195
|
eval(func_code, # pylint: disable=eval-used
|
195
196
|
{"jitted_f": jitted_f}, fakeglobals)
|
196
197
|
if do_jit:
|
197
|
-
return JIT(**kwargs)(fakeglobals[
|
198
|
-
return fakeglobals[
|
198
|
+
return JIT(**kwargs)(fakeglobals["ap_func"])
|
199
|
+
return fakeglobals["ap_func"]
|
199
200
|
|
200
201
|
|
201
202
|
def apply_jit(dtype_sig_out, dtype_sig_in, parameters=None, **kwargs):
|
@@ -256,7 +257,7 @@ def iterate_jit(parameters=None, **kwargs):
|
|
256
257
|
# Get the input arguments from the function
|
257
258
|
in_args = inspect.getfullargspec(func).args
|
258
259
|
# Get the numba.jit arguments
|
259
|
-
jit_args_list = inspect.getfullargspec(JIT).args + [
|
260
|
+
jit_args_list = inspect.getfullargspec(JIT).args + ["nopython"]
|
260
261
|
kwargs_for_jit = {}
|
261
262
|
for key, val in kwargs.items():
|
262
263
|
if key in jit_args_list:
|
@@ -280,7 +281,7 @@ def iterate_jit(parameters=None, **kwargs):
|
|
280
281
|
# the AST of the function
|
281
282
|
grn = GetReturnNode()
|
282
283
|
all_out_args = None
|
283
|
-
for node in ast.walk(ast.parse(
|
284
|
+
for node in ast.walk(ast.parse("".join(src))):
|
284
285
|
all_out_args = grn.visit(node)
|
285
286
|
if all_out_args:
|
286
287
|
break
|
@@ -301,7 +302,7 @@ def iterate_jit(parameters=None, **kwargs):
|
|
301
302
|
in iterate_jit decorator.
|
302
303
|
"""
|
303
304
|
# os TESTING environment only accepts string arguments
|
304
|
-
if os.getenv(
|
305
|
+
if os.getenv("TESTING") == "True":
|
305
306
|
return func(*args, **kwargs)
|
306
307
|
|
307
308
|
in_arrays = []
|
@@ -321,7 +322,7 @@ def iterate_jit(parameters=None, **kwargs):
|
|
321
322
|
fakeglobals = {}
|
322
323
|
eval(func_code, # pylint: disable=eval-used
|
323
324
|
{"applied_f": applied_jitted_f}, fakeglobals)
|
324
|
-
high_level_fn = fakeglobals[
|
325
|
+
high_level_fn = fakeglobals["hl_func"]
|
325
326
|
ans = high_level_fn(*args, **kwargs)
|
326
327
|
return ans
|
327
328
|
|
@@ -35,7 +35,8 @@ class GrowFactors():
|
|
35
35
|
-----
|
36
36
|
Typical usage is "gfactor = GrowFactors()", which produces an object
|
37
37
|
containing baseline growth factors in the GrowFactors.FILE_NAME file,
|
38
|
-
which is
|
38
|
+
which is used to extrapolate cps and puf data from the taxdata repository,
|
39
|
+
and is used to index policy parameters.
|
39
40
|
"""
|
40
41
|
|
41
42
|
PACKAGE_FILE_NAMES = ['growfactors.csv']
|