taxcalc 5.0.4__tar.gz → 5.2.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.0.4/taxcalc.egg-info → taxcalc-5.2.0}/PKG-INFO +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/about/releases.md +38 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/index.md +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/extend_tcja.py +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/setup.py +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/__init__.py +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/calcfunctions.py +126 -49
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/calculator.py +2 -2
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/policy.py +17 -5
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/policy_current_law.json +817 -194
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/records_variables.json +6 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/2017_law.json +3 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/CARES.json +2 -2
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/TCJA.json +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ext.json +1 -1
- taxcalc-5.2.0/taxcalc/tests/cpscsv_agg_expect.csv +26 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +10 -10
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/puf_var_wght_means_by_year.csv +80 -80
- taxcalc-5.2.0/taxcalc/tests/pufcsv_agg_expect.csv +26 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/pufcsv_mtr_expect.txt +18 -18
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_calcfunctions.py +23 -16
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_calculator.py +1 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_cpscsv.py +2 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_policy.py +81 -103
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_puf_var_stats.py +1 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_pufcsv.py +2 -1
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_reforms.py +3 -3
- {taxcalc-5.0.4 → taxcalc-5.2.0/taxcalc.egg-info}/PKG-INFO +1 -1
- taxcalc-5.0.4/taxcalc/tests/cpscsv_agg_expect.csv +0 -26
- taxcalc-5.0.4/taxcalc/tests/pufcsv_agg_expect.csv +0 -26
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.coveragerc +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.github/FUNDING.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.github/workflows/build_and_test.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.github/workflows/check_jupyterbook.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/.gitignore +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/LICENSE +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/MANIFEST.in +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/Makefile +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/PSL_catalog.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/codecov.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/conda.recipe/bld.bat +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/conda.recipe/build.sh +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/conda.recipe/meta.yaml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/csv_show.sh +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/csv_vars.sh +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/PSL.svg +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/_config.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/_static/atr.png +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/_static/mtr.png +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/_static/pch.png +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/_toc.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/about/LICENSE.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/about/history.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/about/roadmap.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/calcfunctions.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/calculator.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/consumption.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/data.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/decorators.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/growdiff.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/growfactors.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/parameters.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/policy.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/public_api.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/records.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/taxcalcio.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/utils.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/api/utilsprvt.rst +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/contributing/RELEASING.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/contributing/contributor_guide.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/contributing/param_naming.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/contributing/pr_workflow.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/contributing/testing.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/assumption_params.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/cli.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/index.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/input_vars.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/make/make_io_vars.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/make/make_params.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/make/make_uguide.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/output_vars.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/policy_params.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/python_interface.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/templates/assumption_params_template.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/templates/input_vars_template.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/templates/output_vars_template.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/guide/templates/policy_params_template.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/_static/reformA.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/_static/reformB.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/_static/reformC.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/convert_all.sh +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/index.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe00.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe01.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe02.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe03.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe04.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe05.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/md_src/recipe06.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe00.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe01.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe02.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe03.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe04.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe05.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/recipes/recipe06.ipynb +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/usage/data.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/usage/overview.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/usage/starting.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/usage/tcja_after_2025.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/docs/use_cases.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/environment.yml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/gitpr +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/gitpr.bat +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/gitsync +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/gitsync.bat +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/ppp.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/pyproject.toml +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/pytest.ini +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/setup.cfg +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/assumptions/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/cli/__init__.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/cli/tc.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/conftest.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/consumption.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/consumption.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/cps.csv.gz +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/cps_weights.csv.gz +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/data.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/decorators.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/growdiff.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/growdiff.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/growfactors.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/growfactors.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/parameters.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/puf_ratios.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/puf_weights.csv.gz +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/records.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/2017_law.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ARPA.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ARPA.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/BrownKhanna.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/CARES.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Larson2019.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/REFORMS.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Renacci.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Renacci.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/TCJA.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/TCJA.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Trump2016.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Trump2017.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/cases.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/clp.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes0.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes1.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes2.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes3.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/taxcalcio.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/benefits_expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/conftest.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/reforms.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/reforms_expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_4package.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_benefits.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_compare.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_compatible_data.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_consumption.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_data.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_decorators.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_growdiff.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_growfactors.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_parameters.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_records.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_responses.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_taxcalcio.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/tests/test_utils.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/utils.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/utilsprvt.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/README.md +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc/validation/tests_35.sh +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc.egg-info/SOURCES.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc.egg-info/dependency_links.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc.egg-info/entry_points.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc.egg-info/requires.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/taxcalc.egg-info/top_level.txt +0 -0
- {taxcalc-5.0.4 → taxcalc-5.2.0}/tctest-nojit.sh +0 -0
@@ -4,6 +4,44 @@ Go [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclose
|
|
4
4
|
for a complete commit history.
|
5
5
|
|
6
6
|
|
7
|
+
2025-08-08 Release 5.2.0
|
8
|
+
------------------------
|
9
|
+
(last merged pull request is
|
10
|
+
[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944))
|
11
|
+
|
12
|
+
**This is an enhancement release.**
|
13
|
+
|
14
|
+
**API Changes**
|
15
|
+
|
16
|
+
**New Features**
|
17
|
+
- Make OBBBA reform be current-law policy in several PRs described in
|
18
|
+
[issue
|
19
|
+
2926](https://github.com/PSLmodels/Tax-Calculator/issues/2926) by
|
20
|
+
Martin Holmer
|
21
|
+
- Extend CPS and PUF aggregate tests through 2035
|
22
|
+
[[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944) by
|
23
|
+
Martin Holmer]
|
24
|
+
|
25
|
+
|
26
|
+
2025-07-22 Release 5.1.0
|
27
|
+
------------------------
|
28
|
+
(last merged pull request is
|
29
|
+
[#2933](https://github.com/PSLmodels/Tax-Calculator/pull/2933))
|
30
|
+
|
31
|
+
**This is an enhancement release.**
|
32
|
+
|
33
|
+
**API Changes**
|
34
|
+
|
35
|
+
**New Features**
|
36
|
+
- Add `PT_qbid_limited` policy parameter and associated logic
|
37
|
+
[[#2923](https://github.com/PSLmodels/Tax-Calculator/pull/2923) by Martin Holmer]
|
38
|
+
- Refactor tax-calculation function logic to reduce model execution time
|
39
|
+
[[#2924](https://github.com/PSLmodels/Tax-Calculator/pull/2924) by Martin Holmer]
|
40
|
+
- OBBBA-enhancement PRs 2927-2933 described in [issue 2926](https://github.com/PSLmodels/Tax-Calculator/issues/2926) by Martin Holmer
|
41
|
+
|
42
|
+
**Bug Fixes**
|
43
|
+
|
44
|
+
|
7
45
|
2025-07-02 Release 5.0.0
|
8
46
|
------------------------
|
9
47
|
(last merged pull request is
|
@@ -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.2.0 (2025-08-08) <about/releases>`
|
58
58
|
|
59
59
|
If you are already using Tax-Calculator, upgrade using the following command:
|
60
60
|
```
|
@@ -50,7 +50,7 @@ TCJA_PARAMETERS = {
|
|
50
50
|
"STD": {"indexed": True, "category": 4},
|
51
51
|
# category 5 ...
|
52
52
|
"ID_AllTaxes_c": {"indexed": False, "category": 5},
|
53
|
-
"
|
53
|
+
"ID_Charity_crt_all": {"indexed": False, "category": 5},
|
54
54
|
"ID_Casualty_hc": {"indexed": False, "category": 5},
|
55
55
|
"ID_Miscellaneous_hc": {"indexed": False, "category": 5},
|
56
56
|
"ID_ps": {"indexed": True, "category": 5},
|
@@ -842,26 +842,39 @@ def AGI(ymod1, c02500, c02900, XTOT, MARS, sep, DSI, exact, nu18, taxable_ubi,
|
|
842
842
|
|
843
843
|
|
844
844
|
@iterate_jit(nopython=True)
|
845
|
-
def
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
845
|
+
def MiscDed(age_head, age_spouse, MARS, c00100, exact,
|
846
|
+
SeniorDed_c, SeniorDed_ps, SeniorDed_prt,
|
847
|
+
auto_loan_interest,
|
848
|
+
AutoLoanInterestDed_c,
|
849
|
+
AutoLoanInterestDed_ps,
|
850
|
+
AutoLoanInterestDed_po_step_size,
|
851
|
+
AutoLoanInterestDed_po_rate_per_step,
|
852
|
+
senior_deduction, auto_loan_interest_deduction):
|
853
|
+
"""
|
854
|
+
Calculates below-the-line deduction for elderly head/spouse and
|
855
|
+
deduction on qualified auto loan interest paid.
|
853
856
|
|
854
857
|
Parameters
|
855
858
|
----------
|
856
|
-
|
857
|
-
|
859
|
+
age_head: int
|
860
|
+
Age of tax unit head
|
861
|
+
age_head: int
|
862
|
+
Age of tax unit spouse
|
858
863
|
MARS: int
|
859
864
|
Filing marital status (1=single, 2=joint, 3=separate,
|
860
865
|
4=household-head, 5=widow(er))
|
861
866
|
c00100: float
|
862
867
|
Adjusted gross income
|
863
868
|
exact: int
|
864
|
-
Whether or not to smooth
|
869
|
+
Whether or not to smooth deduction phase out
|
870
|
+
SeniorDed_c: float
|
871
|
+
Maximum amount of senior deduction per head/spouse aged 65+
|
872
|
+
SeniorDed_ps: list[float]
|
873
|
+
Senior deduction AGI phase-out start level
|
874
|
+
SeniorDed_prt: float
|
875
|
+
Senior deduction phase-out rate
|
876
|
+
auto_loan_interest: float
|
877
|
+
Qualified auto loan interest paid
|
865
878
|
AutoLoanInterestDed_c: float
|
866
879
|
Deduction cap
|
867
880
|
AutoLoanInterestDed_ps: float
|
@@ -875,9 +888,28 @@ def AutoLoanInterestDed(auto_loan_interest, MARS, c00100, exact,
|
|
875
888
|
|
876
889
|
Returns
|
877
890
|
-------
|
891
|
+
senior_deduction: float
|
892
|
+
Deduction available to both itemizers and nonitemizers
|
878
893
|
auto_loan_interest_deduction: float
|
879
894
|
Deduction available to both itemizers and nonitemizers
|
880
895
|
"""
|
896
|
+
# calculate senior deduction
|
897
|
+
senior_deduction = 0.
|
898
|
+
if SeniorDed_c > 0.:
|
899
|
+
seniors = 0
|
900
|
+
if age_head >= 65:
|
901
|
+
seniors += 1
|
902
|
+
if MARS == 2 and age_spouse >= 65:
|
903
|
+
seniors += 1
|
904
|
+
if seniors > 0:
|
905
|
+
ded = seniors * SeniorDed_c
|
906
|
+
po_start = SeniorDed_ps[MARS - 1]
|
907
|
+
if c00100 > po_start:
|
908
|
+
excess_agi = c00100 - po_start
|
909
|
+
po_amount = excess_agi * SeniorDed_prt
|
910
|
+
ded = max(0., ded - po_amount)
|
911
|
+
senior_deduction = ded
|
912
|
+
# calculate auto loan interest deduction
|
881
913
|
auto_loan_interest_deduction = 0.
|
882
914
|
if AutoLoanInterestDed_c > 0. and auto_loan_interest > 0.:
|
883
915
|
# cap deduction
|
@@ -895,23 +927,25 @@ def AutoLoanInterestDed(auto_loan_interest, MARS, c00100, exact,
|
|
895
927
|
po_amount = excess_agi * po_rate
|
896
928
|
ded = max(0., ded - po_amount)
|
897
929
|
auto_loan_interest_deduction = ded
|
898
|
-
return auto_loan_interest_deduction
|
930
|
+
return (senior_deduction, auto_loan_interest_deduction)
|
899
931
|
|
900
932
|
|
901
933
|
@iterate_jit(nopython=True)
|
902
934
|
def ItemDed(e17500, e18400, e18500, e19200,
|
903
935
|
e19800, e20100, e20400, g20500,
|
904
|
-
MARS, age_head, age_spouse, c00100, c04470, c21040, c21060,
|
905
|
-
c17000, c18300, c19200, c19700, c20500, c20800,
|
936
|
+
MARS, age_head, age_spouse, c00100, c04600, c04470, c21040, c21060,
|
937
|
+
c17000, c18300, c19200, c19700, c20500, c20800, II_brk6,
|
906
938
|
ID_ps, ID_Medical_frt, ID_Medical_frt_add4aged, ID_Medical_hc,
|
907
939
|
ID_Casualty_frt, ID_Casualty_hc, ID_Miscellaneous_frt,
|
908
|
-
ID_Miscellaneous_hc,
|
940
|
+
ID_Miscellaneous_hc, ID_Charity_crt_all, ID_Charity_crt_noncash,
|
909
941
|
ID_prt, ID_crt, ID_c, ID_StateLocalTax_hc, ID_Charity_frt,
|
910
942
|
ID_Charity_hc, ID_InterestPaid_hc, ID_RealEstate_hc,
|
911
943
|
ID_Medical_c, ID_StateLocalTax_c, ID_RealEstate_c,
|
912
944
|
ID_InterestPaid_c, ID_Charity_c, ID_Casualty_c,
|
913
945
|
ID_Miscellaneous_c, ID_AllTaxes_c, ID_AllTaxes_hc,
|
914
|
-
|
946
|
+
ID_AllTaxes_c_ps, ID_AllTaxes_c_po_rate, ID_AllTaxes_c_po_floor,
|
947
|
+
ID_StateLocalTax_crt, ID_RealEstate_crt, ID_Charity_f,
|
948
|
+
ID_reduction_rate):
|
915
949
|
"""
|
916
950
|
Calculates itemized deductions, Form 1040, Schedule A.
|
917
951
|
|
@@ -942,12 +976,14 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
942
976
|
Age in years of spouse
|
943
977
|
c00100: float
|
944
978
|
Adjusted gross income (AGI)
|
979
|
+
c04600: float
|
980
|
+
Personal exemptions after phase out
|
945
981
|
c04470: float
|
946
|
-
Itemized deductions after
|
982
|
+
Itemized deductions after all limitations (0 for non-itemizers)
|
947
983
|
c21040: float
|
948
|
-
Itemized deductions that are
|
984
|
+
Itemized deductions that are limited under the Pease limitations
|
949
985
|
c21060: float
|
950
|
-
Itemized deductions before
|
986
|
+
Itemized deductions before limitation (0 for non-itemizers)
|
951
987
|
c17000: float
|
952
988
|
Schedule A: medical expenses deducted
|
953
989
|
c18300: float
|
@@ -960,6 +996,8 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
960
996
|
Schedule A: net casualty or theft loss deducted
|
961
997
|
c20800: float
|
962
998
|
Schedule A: net limited miscellaneous deductions deducted
|
999
|
+
II_brk6: list
|
1000
|
+
Bottom of top income tax rate bracket
|
963
1001
|
ID_ps: list
|
964
1002
|
Itemized deduction phaseout AGI start (Pease)
|
965
1003
|
ID_Medical_frt: float
|
@@ -978,8 +1016,8 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
978
1016
|
miscellaneous expenses
|
979
1017
|
ID_Miscellaneous_hc: float
|
980
1018
|
Miscellaneous expense deduction haircut
|
981
|
-
|
982
|
-
Ceiling (as decimal fraction of AGI) for
|
1019
|
+
ID_Charity_crt_all: float
|
1020
|
+
Ceiling (as decimal fraction of AGI) for all charitable
|
983
1021
|
contribution deductions
|
984
1022
|
ID_Charity_crt_noncash: float
|
985
1023
|
Ceiling (as decimal fraction of AGI) for noncash charitable
|
@@ -1020,10 +1058,16 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1020
1058
|
Ceiling on the amount of miscellaneous expense deduction
|
1021
1059
|
allowed (dollars)
|
1022
1060
|
ID_AllTaxes_c: list
|
1023
|
-
|
1061
|
+
Cap on the amount of state and local income, sales, and
|
1024
1062
|
real estate deductions allowed (dollars)
|
1025
1063
|
ID_AllTaxes_hc: float
|
1026
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
|
1027
1071
|
ID_StateLocalTax_crt: float
|
1028
1072
|
Ceiling (as decimal fraction of AGI) for the combination of all
|
1029
1073
|
state and local income and sales tax deductions
|
@@ -1032,6 +1076,8 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1032
1076
|
state, local, and foreign real estate tax deductions
|
1033
1077
|
ID_Charity_f: list
|
1034
1078
|
Floor on the amount of charity expense deduction allowed (dollars)
|
1079
|
+
ID_reduction_rate: float
|
1080
|
+
OBBBA reduction rate for all itemized deductions
|
1035
1081
|
|
1036
1082
|
Returns
|
1037
1083
|
-------
|
@@ -1048,12 +1094,13 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1048
1094
|
c20800: float
|
1049
1095
|
Schedule A: net limited miscellaneous deductions deducted
|
1050
1096
|
c21040: float
|
1051
|
-
Itemized deductions that are phased out
|
1097
|
+
Itemized deductions that are phased out under Pease limitation
|
1052
1098
|
c21060: float
|
1053
|
-
Itemized deductions before
|
1099
|
+
Itemized deductions before any limitation (0 for non-itemizers)
|
1054
1100
|
c04470: float
|
1055
|
-
Itemized deductions after
|
1101
|
+
Itemized deductions after all limitations (0 for non-itemizers)
|
1056
1102
|
"""
|
1103
|
+
# pylint: disable=too-many-statements
|
1057
1104
|
posagi = max(c00100, 0.)
|
1058
1105
|
# Medical
|
1059
1106
|
medical_frt = ID_Medical_frt
|
@@ -1073,17 +1120,23 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1073
1120
|
c18400 = min(c18400, ID_StateLocalTax_crt * max(c00100, 0.0001))
|
1074
1121
|
c18500 = min(c18500, ID_RealEstate_crt * max(c00100, 0.0001))
|
1075
1122
|
c18300 = (c18400 + c18500) * (1. - ID_AllTaxes_hc)
|
1076
|
-
|
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)
|
1077
1129
|
# Interest paid
|
1078
1130
|
c19200 = e19200 * (1. - ID_InterestPaid_hc)
|
1079
1131
|
c19200 = min(c19200, ID_InterestPaid_c[MARS - 1])
|
1080
1132
|
# Charity
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
c19700 =
|
1133
|
+
floor = max(ID_Charity_frt * posagi, ID_Charity_f[MARS - 1])
|
1134
|
+
noncash_ded = max(0., e20100 - floor)
|
1135
|
+
charity_ded_noncash = min(ID_Charity_crt_noncash * posagi, noncash_ded)
|
1136
|
+
remaining_floor = max(0., floor - e20100)
|
1137
|
+
charity_ded_cash = max(0., e19800 - remaining_floor)
|
1138
|
+
c19700 = charity_ded_noncash + charity_ded_cash
|
1139
|
+
c19700 = min(c19700, ID_Charity_crt_all * posagi) * (1. - ID_Charity_hc)
|
1087
1140
|
c19700 = min(c19700, ID_Charity_c[MARS - 1])
|
1088
1141
|
# Casualty
|
1089
1142
|
c20500 = (max(0., g20500 - ID_Casualty_frt * posagi) *
|
@@ -1096,8 +1149,8 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1096
1149
|
c20800 = min(c20800, ID_Miscellaneous_c[MARS - 1])
|
1097
1150
|
# Gross total itemized deductions
|
1098
1151
|
c21060 = c17000 + c18300 + c19200 + c19700 + c20500 + c20800
|
1099
|
-
#
|
1100
|
-
# (no attempt to adjust c04470 components for
|
1152
|
+
# Pease limitation on total itemized deductions
|
1153
|
+
# (no attempt to adjust c04470 components for limitation)
|
1101
1154
|
nonlimited = c17000 + c20500
|
1102
1155
|
limitstart = ID_ps[MARS - 1]
|
1103
1156
|
if c21060 > nonlimited and c00100 > limitstart:
|
@@ -1108,8 +1161,19 @@ def ItemDed(e17500, e18400, e18500, e19200,
|
|
1108
1161
|
else:
|
1109
1162
|
c21040 = 0.
|
1110
1163
|
c04470 = c21060
|
1164
|
+
# OBBBA limitation on total itemized deductions
|
1165
|
+
# (no attempt to adjust c04470 components for limitation)
|
1166
|
+
reduction = 0.
|
1167
|
+
if ID_reduction_rate > 0.:
|
1168
|
+
assert c21040 <= 0.0, "Pease and OBBBA cannot both be in effect"
|
1169
|
+
tincome = max(0., c00100 - c04600)
|
1170
|
+
texcess = max(0., tincome - II_brk6[MARS - 1])
|
1171
|
+
reduction = ID_reduction_rate * texcess
|
1172
|
+
c04470 = max(0., c04470 - reduction)
|
1173
|
+
# Cap total itemized deductions
|
1174
|
+
# (no attempt to adjust c04470 components for limitation)
|
1111
1175
|
c04470 = min(c04470, ID_c[MARS - 1])
|
1112
|
-
# Return total itemized deduction amounts and components
|
1176
|
+
# Return total itemized deduction amounts and pre-limitation components
|
1113
1177
|
return (c17000, c18300, c19200, c19700, c20500, c20800,
|
1114
1178
|
c21040, c21060, c04470)
|
1115
1179
|
|
@@ -1165,7 +1229,7 @@ def AdditionalMedicareTax(e00200, MARS,
|
|
1165
1229
|
@iterate_jit(nopython=True)
|
1166
1230
|
def StdDed(DSI, earned, STD, age_head, age_spouse, STD_Aged, STD_Dep,
|
1167
1231
|
MARS, MIDR, blind_head, blind_spouse, standard,
|
1168
|
-
STD_allow_charity_ded_nonitemizers, e19800,
|
1232
|
+
STD_allow_charity_ded_nonitemizers, e19800, ID_Charity_crt_all,
|
1169
1233
|
c00100, STD_charity_ded_nonitemizers_max):
|
1170
1234
|
"""
|
1171
1235
|
Calculates standard deduction, including standard deduction for
|
@@ -1203,8 +1267,8 @@ def StdDed(DSI, earned, STD, age_head, age_spouse, STD_Aged, STD_Dep,
|
|
1203
1267
|
deduction
|
1204
1268
|
e19800: float
|
1205
1269
|
Schedule A: cash charitable contributions
|
1206
|
-
|
1207
|
-
Fraction of AGI cap on
|
1270
|
+
ID_Charity_crt_all: float
|
1271
|
+
Fraction of AGI cap on all charitable deductions
|
1208
1272
|
c00100: float
|
1209
1273
|
Federal AGI
|
1210
1274
|
STD_charity_ded_nonitemizers_max: float
|
@@ -1238,19 +1302,21 @@ def StdDed(DSI, earned, STD, age_head, age_spouse, STD_Aged, STD_Dep,
|
|
1238
1302
|
standard = 0.
|
1239
1303
|
# calculate CARES cash charity deduction for nonitemizers
|
1240
1304
|
if STD_allow_charity_ded_nonitemizers:
|
1241
|
-
capped_ded = min(e19800,
|
1305
|
+
capped_ded = min(e19800, ID_Charity_crt_all * c00100)
|
1242
1306
|
standard += min(capped_ded, STD_charity_ded_nonitemizers_max[MARS - 1])
|
1243
1307
|
return standard
|
1244
1308
|
|
1245
1309
|
|
1246
1310
|
@iterate_jit(nopython=True)
|
1247
1311
|
def TaxInc(c00100, standard, c04470, c04600, MARS, e00900, c03260, e26270,
|
1248
|
-
e02100, e27200, e00650, c01000,
|
1312
|
+
e02100, e27200, e00650, c01000,
|
1313
|
+
senior_deduction, auto_loan_interest_deduction,
|
1249
1314
|
PT_SSTB_income, PT_binc_w2_wages, PT_ubia_property,
|
1250
1315
|
PT_qbid_rt, PT_qbid_limited,
|
1251
1316
|
PT_qbid_taxinc_thd, PT_qbid_taxinc_gap, PT_qbid_w2_wages_rt,
|
1252
|
-
PT_qbid_alt_w2_wages_rt, PT_qbid_alt_property_rt,
|
1253
|
-
PT_qbid_ps, PT_qbid_prt,
|
1317
|
+
PT_qbid_alt_w2_wages_rt, PT_qbid_alt_property_rt,
|
1318
|
+
PT_qbid_ps, PT_qbid_prt, PT_qbid_min_ded, PT_qbid_min_qbi,
|
1319
|
+
c04800, qbided):
|
1254
1320
|
"""
|
1255
1321
|
Calculates taxable income, c04800, and
|
1256
1322
|
qualified business income deduction, qbided.
|
@@ -1282,6 +1348,8 @@ def TaxInc(c00100, standard, c04470, c04600, MARS, e00900, c03260, e26270,
|
|
1282
1348
|
Qualified dividends included in ordinary dividends
|
1283
1349
|
c01000: float
|
1284
1350
|
Limitation on capital losses
|
1351
|
+
senior_deduction: float
|
1352
|
+
Deduction for elderly head/spouse
|
1285
1353
|
auto_loan_interest_deduction: float
|
1286
1354
|
Deduction for qualified auto loan interest paid
|
1287
1355
|
PT_SSTB_income: int
|
@@ -1309,12 +1377,16 @@ def TaxInc(c00100, standard, c04470, c04600, MARS, e00900, c03260, e26270,
|
|
1309
1377
|
Alternative QBID cap rate on pass-through business W-2 wages paid
|
1310
1378
|
PT_qbid_alt_property_rt: float
|
1311
1379
|
Alternative QBID cap rate on pass-through business property owned
|
1312
|
-
c04800: float
|
1313
|
-
Regular taxable income
|
1314
1380
|
PT_qbid_ps: list
|
1315
1381
|
QBID phaseout taxable income start
|
1316
1382
|
PT_qbid_prt: float
|
1317
1383
|
QBID phaseout rate
|
1384
|
+
PT_qbid_min_ded: float
|
1385
|
+
Minimum QBID amount
|
1386
|
+
PT_qbid_min_qbi: float
|
1387
|
+
Minimum QBI necessary to get QBID no less than PT_qbid_min_ded
|
1388
|
+
c04800: float
|
1389
|
+
Regular taxable income
|
1318
1390
|
qbided: float
|
1319
1391
|
Qualified Business Income (QBI) deduction
|
1320
1392
|
|
@@ -1325,8 +1397,10 @@ def TaxInc(c00100, standard, c04470, c04600, MARS, e00900, c03260, e26270,
|
|
1325
1397
|
qbided: float
|
1326
1398
|
Qualified Business Income (QBI) deduction
|
1327
1399
|
"""
|
1328
|
-
# calculate taxable income before qualified business income deduction
|
1329
|
-
|
1400
|
+
# calculate taxable income before qualified business income deduction,
|
1401
|
+
# which is assumed to be stacked last in the list of deductions
|
1402
|
+
odeds = senior_deduction + auto_loan_interest_deduction
|
1403
|
+
pre_qbid_taxinc = max(0., c00100 - max(c04470, standard) - c04600 - odeds)
|
1330
1404
|
# calculate qualified business income deduction
|
1331
1405
|
qbinc = max(0., e00900 - c03260 + e26270 + e02100 + e27200)
|
1332
1406
|
qbid_before_limits = qbinc * PT_qbid_rt
|
@@ -1371,9 +1445,12 @@ def TaxInc(c00100, standard, c04470, c04600, MARS, e00900, c03260, e26270,
|
|
1371
1445
|
qbided = max(0., qbided - PT_qbid_prt * excess)
|
1372
1446
|
else: # if PT_qbid_limited is false
|
1373
1447
|
qbided = qbid_before_limits
|
1448
|
+
# apply minimum QBID logic
|
1449
|
+
if qbinc >= PT_qbid_min_qbi and qbided < PT_qbid_min_ded:
|
1450
|
+
qbided = PT_qbid_min_ded
|
1374
1451
|
|
1375
|
-
# calculate taxable income after
|
1376
|
-
c04800 = max(0., pre_qbid_taxinc - qbided
|
1452
|
+
# calculate taxable income after qbided
|
1453
|
+
c04800 = max(0., pre_qbid_taxinc - qbided)
|
1377
1454
|
return (c04800, qbided)
|
1378
1455
|
|
1379
1456
|
|
@@ -1823,7 +1900,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
|
|
1823
1900
|
taxbc: float
|
1824
1901
|
Regular tax on regular taxable income before credits
|
1825
1902
|
c04470: float
|
1826
|
-
Itemized deductions after phase-out (zero for non
|
1903
|
+
Itemized deductions after phase-out (zero for non-itemizers)
|
1827
1904
|
c17000: float
|
1828
1905
|
Schedule A: Medical expenses deducted
|
1829
1906
|
c20800: float
|
@@ -14,7 +14,7 @@ import paramtools
|
|
14
14
|
from taxcalc.calcfunctions import (TaxInc, SchXYZTax, GainsTax, AGIsurtax,
|
15
15
|
NetInvIncTax, AMT, EI_PayrollTax, Adj,
|
16
16
|
DependentCare, ALD_InvInc_ec_base, CapGains,
|
17
|
-
SSBenefits, UBI, AGI,
|
17
|
+
SSBenefits, UBI, AGI, MiscDed,
|
18
18
|
ItemDed, StdDed, AdditionalMedicareTax,
|
19
19
|
F2441, EITC, RefundablePayrollTaxCredit,
|
20
20
|
ChildDepTaxCredit, AdditionalCTC, CTC_new,
|
@@ -1391,7 +1391,7 @@ class Calculator():
|
|
1391
1391
|
CapGains(self.__policy, self.__records)
|
1392
1392
|
SSBenefits(self.__policy, self.__records)
|
1393
1393
|
AGI(self.__policy, self.__records)
|
1394
|
-
|
1394
|
+
MiscDed(self.__policy, self.__records)
|
1395
1395
|
ItemDed(self.__policy, self.__records)
|
1396
1396
|
AdditionalMedicareTax(self.__policy, self.__records)
|
1397
1397
|
StdDed(self.__policy, self.__records)
|
@@ -61,7 +61,7 @@ class Policy(Parameters):
|
|
61
61
|
# following parameters were renamed in PR 2918
|
62
62
|
'SS_thd50': 'was renamed SS_thd1 in Tax-Calculator 5.0.0',
|
63
63
|
'SS_thd85': 'was renamed SS_thd2 in Tax-Calculator 5.0.0',
|
64
|
-
# following parameters were removed in PR
|
64
|
+
# following parameters were removed in PR 2919
|
65
65
|
'PT_rt1': 'was removed in Tax-Calculator 5.0.0',
|
66
66
|
'PT_rt2': 'was removed in Tax-Calculator 5.0.0',
|
67
67
|
'PT_rt3': 'was removed in Tax-Calculator 5.0.0',
|
@@ -81,7 +81,7 @@ class Policy(Parameters):
|
|
81
81
|
'PT_EligibleRate_passive': 'was removed in Tax-Calculator 5.0.0',
|
82
82
|
'PT_wages_active_income': 'was removed in Tax-Calculator 5.0.0',
|
83
83
|
'PT_top_stacking': 'was removed in Tax-Calculator 5.0.0',
|
84
|
-
# following parameters were removed in PR
|
84
|
+
# following parameters were removed in PR 2920
|
85
85
|
'ID_AmountCap_Switch': 'was removed in Tax-Calculator 5.0.0',
|
86
86
|
'ID_AmountCap_rt': 'was removed in Tax-Calculator 5.0.0',
|
87
87
|
'ID_BenefitCap_Switch': 'was removed in Tax-Calculator 5.0.0',
|
@@ -90,13 +90,25 @@ class Policy(Parameters):
|
|
90
90
|
'ID_BenefitSurtax_crt': 'was removed in Tax-Calculator 5.0.0',
|
91
91
|
'ID_BenefitSurtax_trt': 'was removed in Tax-Calculator 5.0.0',
|
92
92
|
'ID_BenefitSurtax_em': 'was removed in Tax-Calculator 5.0.0',
|
93
|
-
# following parameters were renamed in PR
|
93
|
+
# following parameters were renamed in PR 2928
|
94
94
|
'CDCC_ps': 'was renamed CDCC_ps1 in Tax-Calculator 5.1.0',
|
95
95
|
'CDCC_crt': 'was renamed CDCC_po1_rate_max in Tax-Calculator 5.1.0',
|
96
96
|
'CDCC_frt': 'was renamed CDCC_po1_rate_min in Tax-Calculator 5.1.0',
|
97
97
|
'CDCC_po_step_size': (
|
98
|
-
'was renamed CDCC_po1_step_size'
|
99
|
-
|
98
|
+
'was renamed CDCC_po1_step_size in Tax-Calculator 5.1.0'
|
99
|
+
),
|
100
|
+
# following parameter was renamed in PR 2929
|
101
|
+
'II_prt': 'was renamed II_em_prt in Tax-Calculator 5.1.0',
|
102
|
+
# following parameter was renamed in PR 2932
|
103
|
+
'ID_Charity_crt_cash': (
|
104
|
+
'was renamed ID_Charity_crt_all in Tax-Calculator 5.1.0'
|
105
|
+
),
|
106
|
+
# following parameters were renamed in PR 2939
|
107
|
+
'ID_reduction_salt_rate': (
|
108
|
+
'was renamed ID_reduction_rate in Tax-Calculator 5.1.0'
|
109
|
+
),
|
110
|
+
'ID_reduction_other_rate': (
|
111
|
+
'was renamed ID_reduction_rate in Tax-Calculator 5.1.0'
|
100
112
|
),
|
101
113
|
}
|
102
114
|
# (2) specify which Policy parameters have been redefined recently
|