taxcalc 4.6.1__tar.gz → 4.6.3__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-4.6.1 → taxcalc-4.6.3}/Makefile +3 -3
- {taxcalc-4.6.1/taxcalc.egg-info → taxcalc-4.6.3}/PKG-INFO +5 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/README.md +3 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/conda.recipe/meta.yaml +2 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/releases.md +45 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/RELEASING.md +1 -1
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/cli.md +55 -5
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/index.md +1 -1
- taxcalc-4.6.3/docs/usage/tcja_after_2025.md +334 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/environment.yml +1 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/setup.py +2 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/__init__.py +1 -1
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/calcfunctions.py +2 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cli/tc.py +85 -29
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/parameters.py +188 -118
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/policy.py +26 -4
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/policy_current_law.json +2 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/REFORMS.md +0 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ext.json +0 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/taxcalcio.py +95 -24
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/conftest.py +1 -1
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/reforms.json +8 -19
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/reforms_expect.csv +9 -10
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_4package.py +0 -1
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_parameters.py +18 -22
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_policy.py +153 -41
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_reforms.py +2 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_taxcalcio.py +35 -13
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/utils.py +32 -10
- {taxcalc-4.6.1 → taxcalc-4.6.3/taxcalc.egg-info}/PKG-INFO +5 -2
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/requires.txt +1 -1
- taxcalc-4.6.1/docs/usage/tcja_after_2025.md +0 -127
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.coveragerc +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/FUNDING.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/build_and_test.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/check_jupyterbook.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/deploy_jupyterbook.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/deploy_parameters_docs.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/.gitignore +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/LICENSE +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/MANIFEST.in +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/PSL_catalog.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/codecov.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/conda.recipe/bld.bat +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/conda.recipe/build.sh +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/csv_show.sh +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/csv_vars.sh +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/PSL.svg +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_config.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_static/atr.png +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_static/mtr.png +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_static/pch.png +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_toc.yml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/LICENSE.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/history.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/roadmap.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/calcfunctions.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/calculator.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/consumption.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/data.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/decorators.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/growdiff.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/growfactors.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/parameters.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/policy.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/public_api.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/records.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/taxcalcio.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/utils.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/utilsprvt.rst +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/contributor_guide.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/param_naming.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/pr_workflow.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/testing.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/README.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/assumption_params.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/index.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/input_vars.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/make/make_io_vars.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/make/make_params.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/make/make_uguide.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/output_vars.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/policy_params.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/python_interface.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/assumption_params_template.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/input_vars_template.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/output_vars_template.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/policy_params_template.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/README.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/_static/reformA.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/_static/reformB.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/_static/reformC.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/convert_all.sh +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/index.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe00.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe01.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe02.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe03.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04_pandas.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe05.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe06.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe00.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe01.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe02.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe03.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe04.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe04_pandas.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe05.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe06.ipynb +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/usage/data.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/usage/overview.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/usage/starting.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/use_cases.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/extend_tcja.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/gitpr +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/gitpr.bat +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/gitsync +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/gitsync.bat +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/ppp.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/pyproject.toml +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/pytest.ini +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/setup.cfg +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/assumptions/README.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/calculator.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cli/__init__.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/conftest.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/consumption.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/consumption.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cps.csv.gz +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cps_weights.csv.gz +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/data.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/decorators.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growdiff.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growdiff.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growfactors.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growfactors.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/puf_ratios.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/puf_weights.csv.gz +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/records.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/records_variables.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/CARES.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/CARES.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/README.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/Clinton2016.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/RyanBrady.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/cases.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/clp.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/growfactors_ext.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.out.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/benefits_expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_agg_expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_mtr_expect.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_benefits.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_calcfunctions.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_calculator.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_compare.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_compatible_data.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_consumption.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_cpscsv.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_data.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_decorators.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_growdiff.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_growfactors.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_puf_var_stats.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_pufcsv.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_records.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_responses.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_utils.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/utilsprvt.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/README.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/README.md +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/input_setup.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tests_35.py +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/tests_35.sh +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/SOURCES.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/dependency_links.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/entry_points.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/top_level.txt +0 -0
- {taxcalc-4.6.1 → taxcalc-4.6.3}/tctest-nojit.sh +0 -0
@@ -49,19 +49,19 @@ rm -f tmp??????-??-#-tmp*
|
|
49
49
|
endef
|
50
50
|
|
51
51
|
.PHONY=pytest-cps
|
52
|
-
pytest-cps:
|
52
|
+
pytest-cps: clean
|
53
53
|
@$(pytest-setup)
|
54
54
|
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not requires_pufcsv and not pre_release"
|
55
55
|
@$(pytest-cleanup)
|
56
56
|
|
57
57
|
.PHONY=pytest
|
58
|
-
pytest:
|
58
|
+
pytest: clean
|
59
59
|
@$(pytest-setup)
|
60
60
|
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not pre_release"
|
61
61
|
@$(pytest-cleanup)
|
62
62
|
|
63
63
|
.PHONY=pytest-all
|
64
|
-
pytest-all:
|
64
|
+
pytest-all: clean
|
65
65
|
@$(pytest-setup)
|
66
66
|
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m ""
|
67
67
|
@$(pytest-cleanup)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: taxcalc
|
3
|
-
Version: 4.6.
|
3
|
+
Version: 4.6.3
|
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
|
@@ -22,7 +22,7 @@ Requires-Dist: numpy>=1.26
|
|
22
22
|
Requires-Dist: pandas>=2.2
|
23
23
|
Requires-Dist: bokeh>=2.4
|
24
24
|
Requires-Dist: numba
|
25
|
-
Requires-Dist: paramtools>=0.
|
25
|
+
Requires-Dist: paramtools>=0.20.0
|
26
26
|
Dynamic: classifier
|
27
27
|
Dynamic: description
|
28
28
|
Dynamic: description-content-type
|
@@ -57,3 +57,6 @@ 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.
|
@@ -22,3 +22,6 @@ 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.
|
@@ -12,7 +12,7 @@ requirements:
|
|
12
12
|
- "numpy>=1.26"
|
13
13
|
- "pandas>=2.2"
|
14
14
|
- "bokeh>=3.7"
|
15
|
-
- "paramtools>=0.
|
15
|
+
- "paramtools>=0.20.0"
|
16
16
|
- numba
|
17
17
|
- curl
|
18
18
|
- openpyxl
|
@@ -23,7 +23,7 @@ requirements:
|
|
23
23
|
- "numpy>=1.26"
|
24
24
|
- "pandas>=2.2"
|
25
25
|
- "bokeh>=3.7"
|
26
|
-
- "paramtools>=0.
|
26
|
+
- "paramtools>=0.20.0"
|
27
27
|
- numba
|
28
28
|
- curl
|
29
29
|
- openpyxl
|
@@ -4,6 +4,51 @@ 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-06-13 Release 4.6.3
|
8
|
+
------------------------
|
9
|
+
(last merged pull request is
|
10
|
+
[#2915](https://github.com/PSLmodels/Tax-Calculator/pull/2915))
|
11
|
+
|
12
|
+
**This is a minor enhancement release.**
|
13
|
+
|
14
|
+
**API Changes**
|
15
|
+
|
16
|
+
**New Features**
|
17
|
+
- Update CLI documentation
|
18
|
+
[[#2907](https://github.com/PSLmodels/Tax-Calculator/pull/2907) by Martin Holmer]
|
19
|
+
- Add deprecation warnings for planned Tax-Calculator 5.0.0 changes, add two tests, and remove one obsolete test
|
20
|
+
[[#2908](https://github.com/PSLmodels/Tax-Calculator/pull/2908),
|
21
|
+
[#2909](https://github.com/PSLmodels/Tax-Calculator/pull/2909), and
|
22
|
+
[#2910](https://github.com/PSLmodels/Tax-Calculator/pull/2910) by Martin Holmer]
|
23
|
+
- Add optional `--runid N` CLI option that simplifies output file names
|
24
|
+
[[#2912](https://github.com/PSLmodels/Tax-Calculator/pull/2912) by Martin Holmer]
|
25
|
+
- Add a default `income_group` definition to the CLI --dumpdb output
|
26
|
+
[[#2913](https://github.com/PSLmodels/Tax-Calculator/pull/2913) and
|
27
|
+
[#2914](https://github.com/PSLmodels/Tax-Calculator/pull/2914) by Martin Holmer]
|
28
|
+
- Standardize CLI output file name extensions
|
29
|
+
[[#2915](https://github.com/PSLmodels/Tax-Calculator/pull/2915) by Martin Holmer]
|
30
|
+
|
31
|
+
**Bug Fixes**
|
32
|
+
|
33
|
+
|
34
|
+
2025-05-16 Release 4.6.2
|
35
|
+
------------------------
|
36
|
+
(last merged pull request is
|
37
|
+
[#2905](https://github.com/PSLmodels/Tax-Calculator/pull/2905))
|
38
|
+
|
39
|
+
**This is a bug-fix release.**
|
40
|
+
|
41
|
+
**API Changes**
|
42
|
+
|
43
|
+
**New Features**
|
44
|
+
|
45
|
+
**Bug Fixes**
|
46
|
+
- Work around multiple-indexing-change limitations in `parameters.py` code
|
47
|
+
[[#2904](https://github.com/PSLmodels/Tax-Calculator/pull/2904) by Martin Holmer]
|
48
|
+
- Require `paramtools` 0.20.0 that works with the current `marshmallow` 4.0.0
|
49
|
+
[[#2905](https://github.com/PSLmodels/Tax-Calculator/pull/2905) by Martin Holmer]
|
50
|
+
|
51
|
+
|
7
52
|
2025-05-09 Release 4.6.1
|
8
53
|
------------------------
|
9
54
|
(last merged pull request is
|
@@ -24,7 +24,7 @@ In the top-level Tax-Calculator directory, do the following:
|
|
24
24
|
|
25
25
|
--> run `python extend_tcja.py > ext.json` [to update reforms/ext.json]
|
26
26
|
|
27
|
-
--> run `make cstest` [to
|
27
|
+
--> run `make cstest` [to confirm project coding style is being followed]
|
28
28
|
|
29
29
|
--> run `make pytest-all` [or `pytest -m pre_release -n4` in taxcalc subdir]
|
30
30
|
|
@@ -412,10 +412,7 @@ exploratory data analysis.
|
|
412
412
|
% tc cps.csv 2024 --reform ref3.json --dumpdb
|
413
413
|
Read input data for 2014; input data were extrapolated to 2024
|
414
414
|
Write dump output to sqlite3 database file cps-24-#-ref3-#.db
|
415
|
-
Execution time is 35.
|
416
|
-
Read input data for 2014; input data were extrapolated to 2025
|
417
|
-
Write dump output to sqlite3 database file cps-25-#-ref3-#.db
|
418
|
-
Execution time is 35.1 seconds
|
415
|
+
Execution time is 35.6 seconds
|
419
416
|
|
420
417
|
% sqlite3 cps-24-#-ref3-#.db
|
421
418
|
SQLite version 3.39.5 2022-10-14 20:58:05
|
@@ -531,6 +528,9 @@ to generate such budget-window results is to use the CLI tool's
|
|
531
528
|
extend-TCJA-beyond-2025 reform, then we can execute the following run:
|
532
529
|
|
533
530
|
```
|
531
|
+
% tc --version
|
532
|
+
Tax-Calculator 4.6.2 on Python 3.12
|
533
|
+
|
534
534
|
% tc ../tmd.csv 2026 --numyears 10 --reform ext.json --tables
|
535
535
|
Read input data for 2021; input data were extrapolated to 2026
|
536
536
|
Write tabular output to file tmd-26-#-ext-#-tables.text
|
@@ -552,7 +552,7 @@ Advance input data and policy to 2034
|
|
552
552
|
Write tabular output to file tmd-34-#-ext-#-tables.text
|
553
553
|
Advance input data and policy to 2035
|
554
554
|
Write tabular output to file tmd-35-#-ext-#-tables.text
|
555
|
-
Execution time is
|
555
|
+
Execution time is 55.6 seconds
|
556
556
|
```
|
557
557
|
|
558
558
|
[PR
|
@@ -560,3 +560,53 @@ Execution time is 60.9 seconds
|
|
560
560
|
discusses how much faster this is relative to executing ten separate
|
561
561
|
`tc` runs, and also shows how to tabulate the ten-year aggregate
|
562
562
|
reform result from the files generated by this run.
|
563
|
+
|
564
|
+
Because the reform-induced change in aggregate federal income tax
|
565
|
+
liability is located on the last row of each tables output file in the
|
566
|
+
fourth column, we can look at the ten-year results quickly:
|
567
|
+
|
568
|
+
```
|
569
|
+
% tail -1 tmd-??-*tables.text
|
570
|
+
==> tmd-26-#-ext-#-tables.text <==
|
571
|
+
A 192.41 20828.3 -284.0 0.0 0.0 -284.0
|
572
|
+
|
573
|
+
==> tmd-27-#-ext-#-tables.text <==
|
574
|
+
A 193.77 21613.4 -291.7 0.0 0.0 -291.7
|
575
|
+
|
576
|
+
==> tmd-28-#-ext-#-tables.text <==
|
577
|
+
A 194.72 22404.7 -299.5 0.0 0.0 -299.5
|
578
|
+
|
579
|
+
==> tmd-29-#-ext-#-tables.text <==
|
580
|
+
A 195.66 23243.3 -291.8 0.0 0.0 -291.8
|
581
|
+
|
582
|
+
==> tmd-30-#-ext-#-tables.text <==
|
583
|
+
A 196.58 24115.1 -299.8 0.0 0.0 -299.8
|
584
|
+
|
585
|
+
==> tmd-31-#-ext-#-tables.text <==
|
586
|
+
A 197.48 25020.0 -307.8 0.0 0.0 -307.8
|
587
|
+
|
588
|
+
==> tmd-32-#-ext-#-tables.text <==
|
589
|
+
A 198.35 25952.7 -315.7 0.0 0.0 -315.7
|
590
|
+
|
591
|
+
==> tmd-33-#-ext-#-tables.text <==
|
592
|
+
A 199.21 26905.4 -323.6 0.0 0.0 -323.6
|
593
|
+
|
594
|
+
==> tmd-34-#-ext-#-tables.text <==
|
595
|
+
A 200.03 27878.9 -331.6 0.0 0.0 -331.6
|
596
|
+
|
597
|
+
==> tmd-35-#-ext-#-tables.text <==
|
598
|
+
A 200.83 28883.0 -339.6 0.0 0.0 -339.6
|
599
|
+
```
|
600
|
+
|
601
|
+
A simple way to sum up the ten annual changes is to use the [`awk`
|
602
|
+
program](https://www.gnu.org/software/gawk/manual/gawk.html), which
|
603
|
+
could be called `gawk` or `gawk.exe` on your computer, as follows:
|
604
|
+
|
605
|
+
```
|
606
|
+
% tail -1 tmd-??-*tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
|
607
|
+
10 -3085.1
|
608
|
+
```
|
609
|
+
|
610
|
+
More examples of analyzing different versions of the TCJA after 2025
|
611
|
+
are available in this
|
612
|
+
[document](https://taxcalc.pslmodels.org/usage/tcja_after_2025.html).
|
@@ -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}`4.6.
|
57
|
+
{doc}`4.6.3 (2025-06-13) <about/releases>`
|
58
58
|
|
59
59
|
If you are already using Tax-Calculator, upgrade using the following command:
|
60
60
|
```
|
@@ -0,0 +1,334 @@
|
|
1
|
+
# TCJA after 2025
|
2
|
+
|
3
|
+
Many provisions of the TCJA are temporary and are scheduled to end
|
4
|
+
after 2025 under current-law policy. Tax policy parameters that are
|
5
|
+
associated with expiring provisions and that are not inflation indexed
|
6
|
+
will revert to their 2017 values in 2026. Tax policy parameters that
|
7
|
+
are associated with expiring provisions and that are inflation indexed
|
8
|
+
will revert to their 2017 values indexed to 2026 using a chained CPI-U
|
9
|
+
inflation factor. For a list of the ending TCJA provisions, see this
|
10
|
+
Congressional Research Service document: [Reference Table: Expiring
|
11
|
+
Provisions in the "Tax Cuts and Jobs Act" (TCJA, P.L. 115-97)](
|
12
|
+
https://crsreports.congress.gov/product/pdf/R/R47846), which is dated
|
13
|
+
November 21, 2023.
|
14
|
+
|
15
|
+
This document provides examples of using the PSLmodels Tax-Calculator
|
16
|
+
command-line-interface tool
|
17
|
+
[tc](https://taxcalc.pslmodels.org/guide/cli.html) with the newer
|
18
|
+
`tmd.csv` file generated in the PSLmodels
|
19
|
+
[tax-microdata](https://github.com/PSLmodels/tax-microdata-benchmarking)
|
20
|
+
repository. The `tmd` data and weights are based on the 2015 IRS/SOI
|
21
|
+
PUF data and on recent CPS data, and therefore, are the best data to
|
22
|
+
use with Tax-Calculator. All the examples assume you have the [three
|
23
|
+
`tmd` data
|
24
|
+
files](https://taxcalc.pslmodels.org/usage/data.html#irs-public-use-data-tmd-csv)
|
25
|
+
in the parent directory of your working directory. The `tmd` data
|
26
|
+
contain information on 225,256 tax filing units.
|
27
|
+
|
28
|
+
Before reading the rest of this document, be sure you understand how
|
29
|
+
to use the Tax-Calculator command-line tool
|
30
|
+
[tc](https://taxcalc.pslmodels.org/guide/cli.html), particularly the
|
31
|
+
`--baseline` and `--reform` command-line options. For complete and
|
32
|
+
up-to-date `tc` documentation, enter `tc --help` at the command
|
33
|
+
prompt. Omitting the `--baseline` option means the baseline policy is
|
34
|
+
current-law policy. Omitting the `--reform` option means the reform
|
35
|
+
policy is current-law policy. The `--tables` option produces two
|
36
|
+
tables in one file: the top table contains aggregate and income decile
|
37
|
+
estimates under the reform and the bottom table contains estimates of
|
38
|
+
reform-minus-baseline differences by income decile and in aggregate.
|
39
|
+
|
40
|
+
Nobody knows how the 2025 tax legislation will turn out, so the idea
|
41
|
+
of this document is to illustrate how to use the Tax-Calculator CLI
|
42
|
+
tool to analyze some of the TCJA revisions that were being reported in
|
43
|
+
the press in early May 2025. The basic legislative goal is to extend
|
44
|
+
TCJA beyond 2025, but there is discussion of a number of **revisions**
|
45
|
+
to the basic extension. The revisions being discussed include, but
|
46
|
+
are not limited to, raising the SALT deduction cap, making social
|
47
|
+
security benefits nontaxable, and liberalizing the child tax credit.
|
48
|
+
(Given the nature of the reconciliation rules under which the
|
49
|
+
legislation is being developed, no changes in social security
|
50
|
+
financing can be made, so there is discussion of a higher
|
51
|
+
elderly/disability standard deduction amount to proxy the nontaxable
|
52
|
+
social security benefits revision.)
|
53
|
+
These revisions all cause reductions in income tax revenue, so there
|
54
|
+
is also discussion about **enhancements** to the extended-TCJA policy
|
55
|
+
that would raise revenue to pay for revisions. The enhancement
|
56
|
+
considered here is the one that adds a new top income tax bracket with
|
57
|
+
a 39.6 percent marginal tax rate.
|
58
|
+
|
59
|
+
The analysis examples below focus on the following policy scenarios:
|
60
|
+
|
61
|
+
1. a strict extension of TCJA without any revisions or enhancements
|
62
|
+
2. a TCJA extension with the nontaxable social security benefits revision
|
63
|
+
3. a TCJA extension with the higher elderly/disabled standard deduction revision
|
64
|
+
4. a TCJA extension with the higher elderly/disabled standard deduction revision and the new top tax bracket enhancement
|
65
|
+
|
66
|
+
All the examples use Tax-Calculator 4.6.2 version.
|
67
|
+
```
|
68
|
+
% tc --version
|
69
|
+
Tax-Calculator 4.6.2 on Python 3.12
|
70
|
+
```
|
71
|
+
|
72
|
+
The examples below were done on an ancient Mac with an old Intel
|
73
|
+
processor with four CPU cores. The execution times on newer computers
|
74
|
+
should be substantially less than shown below. In all the examples,
|
75
|
+
each `tc` run is using just one CPU core.
|
76
|
+
|
77
|
+
The
|
78
|
+
[`ext.json`](https://github.com/PSLmodels/Tax-Calculator/blob/master/taxcalc/reforms/ext.json)
|
79
|
+
reform file is used all the examples. See the section at the end of
|
80
|
+
this document for more information on `ext.json` contents.
|
81
|
+
|
82
|
+
|
83
|
+
## 1. TCJA extension without any revisions or enhancements
|
84
|
+
|
85
|
+
```
|
86
|
+
% tc ../tmd.csv 2026 --numyears 10 --reform ext.json --exact --tables
|
87
|
+
Read input data for 2021; input data were extrapolated to 2026
|
88
|
+
Write tabular output to file tmd-26-#-ext-#-tables.text
|
89
|
+
Advance input data and policy to 2027
|
90
|
+
Write tabular output to file tmd-27-#-ext-#-tables.text
|
91
|
+
Advance input data and policy to 2028
|
92
|
+
Write tabular output to file tmd-28-#-ext-#-tables.text
|
93
|
+
Advance input data and policy to 2029
|
94
|
+
Write tabular output to file tmd-29-#-ext-#-tables.text
|
95
|
+
Advance input data and policy to 2030
|
96
|
+
Write tabular output to file tmd-30-#-ext-#-tables.text
|
97
|
+
Advance input data and policy to 2031
|
98
|
+
Write tabular output to file tmd-31-#-ext-#-tables.text
|
99
|
+
Advance input data and policy to 2032
|
100
|
+
Write tabular output to file tmd-32-#-ext-#-tables.text
|
101
|
+
Advance input data and policy to 2033
|
102
|
+
Write tabular output to file tmd-33-#-ext-#-tables.text
|
103
|
+
Advance input data and policy to 2034
|
104
|
+
Write tabular output to file tmd-34-#-ext-#-tables.text
|
105
|
+
Advance input data and policy to 2035
|
106
|
+
Write tabular output to file tmd-35-#-ext-#-tables.text
|
107
|
+
Execution time is 56.8 seconds
|
108
|
+
```
|
109
|
+
|
110
|
+
Because the aggregate change in taxes is displayed on the last line of
|
111
|
+
the tables file (in column four), we can look at the ten changes like
|
112
|
+
this:
|
113
|
+
|
114
|
+
```
|
115
|
+
% tail -1 tmd-??-#-ext-#-tables.text
|
116
|
+
==> tmd-26-#-ext-#-tables.text <==
|
117
|
+
A 192.41 20828.3 -284.1 0.0 0.0 -284.1
|
118
|
+
|
119
|
+
==> tmd-27-#-ext-#-tables.text <==
|
120
|
+
A 193.77 21613.4 -291.8 0.0 0.0 -291.8
|
121
|
+
|
122
|
+
==> tmd-28-#-ext-#-tables.text <==
|
123
|
+
A 194.72 22404.7 -299.6 0.0 0.0 -299.6
|
124
|
+
|
125
|
+
==> tmd-29-#-ext-#-tables.text <==
|
126
|
+
A 195.66 23243.3 -291.9 0.0 0.0 -291.9
|
127
|
+
|
128
|
+
==> tmd-30-#-ext-#-tables.text <==
|
129
|
+
A 196.58 24115.1 -299.9 0.0 0.0 -299.9
|
130
|
+
|
131
|
+
==> tmd-31-#-ext-#-tables.text <==
|
132
|
+
A 197.48 25020.0 -307.9 0.0 0.0 -307.9
|
133
|
+
|
134
|
+
==> tmd-32-#-ext-#-tables.text <==
|
135
|
+
A 198.35 25952.7 -315.9 0.0 0.0 -315.9
|
136
|
+
|
137
|
+
==> tmd-33-#-ext-#-tables.text <==
|
138
|
+
A 199.21 26905.4 -323.8 0.0 0.0 -323.8
|
139
|
+
|
140
|
+
==> tmd-34-#-ext-#-tables.text <==
|
141
|
+
A 200.03 27878.9 -331.7 0.0 0.0 -331.7
|
142
|
+
|
143
|
+
==> tmd-35-#-ext-#-tables.text <==
|
144
|
+
A 200.83 28883.0 -339.7 0.0 0.0 -339.7
|
145
|
+
```
|
146
|
+
|
147
|
+
And the ten-year change in aggregate federal income tax liability can
|
148
|
+
be tabulated this way:
|
149
|
+
|
150
|
+
```
|
151
|
+
% tail -1 tmd-??-#-ext-#-tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
|
152
|
+
10 -3086.3
|
153
|
+
```
|
154
|
+
|
155
|
+
|
156
|
+
## 2. TCJA extension with the nontaxable social security benefits revision
|
157
|
+
|
158
|
+
There is some discussion of exempting all social security benefits
|
159
|
+
from federal income taxation. Here is a JSON file that implements
|
160
|
+
that reform:
|
161
|
+
|
162
|
+
```
|
163
|
+
% cat no_ssben_tax.json
|
164
|
+
{
|
165
|
+
"SS_percentage1": {"2026": 0.0},
|
166
|
+
"SS_percentage2": {"2026": 0.0}
|
167
|
+
}
|
168
|
+
```
|
169
|
+
|
170
|
+
The marginal effect of adding that reform on to the TCJA-extension can be
|
171
|
+
estimated in this 2026 run:
|
172
|
+
|
173
|
+
```
|
174
|
+
% tc ../tmd.csv 2026 --baseline ext.json --reform ext.json+no_ssben_tax.json --exact --tables
|
175
|
+
Read input data for 2021; input data were extrapolated to 2026
|
176
|
+
Write tabular output to file tmd-26-ext-ext+no_ssben_tax-#-tables.text
|
177
|
+
Execution time is 33.4 seconds
|
178
|
+
|
179
|
+
% tail -1 tmd-26-ext-ext+no_ssben_tax-#-tables.text
|
180
|
+
A 192.41 20828.3 -110.7 0.0 0.0 -110.7
|
181
|
+
```
|
182
|
+
|
183
|
+
So, this reform reduces federal income tax liability by $110.7 billion in
|
184
|
+
2026.
|
185
|
+
|
186
|
+
|
187
|
+
## 3. TCJA extension with the higher elderly/disabled standard deduction revision
|
188
|
+
|
189
|
+
Next we find a reform that approximates the `no_ssben_tax` reform
|
190
|
+
analyzed in the previous section. Trying higher values for the
|
191
|
+
`STD_Aged` parameter, we quickly find that $31,500 for all filing
|
192
|
+
statuses produces a reasonable approximation of the effects of the
|
193
|
+
`no_ssben_tax` reform.
|
194
|
+
|
195
|
+
```
|
196
|
+
% cat higher_aged_std.json
|
197
|
+
{
|
198
|
+
"STD_Aged": {"2026": [31500, 31500, 31500, 31500, 31500]}
|
199
|
+
}
|
200
|
+
|
201
|
+
% tc ../tmd.csv 2026 --baseline ext.json --reform ext.json+higher_aged_std.json --exact --tables
|
202
|
+
Read input data for 2021; input data were extrapolated to 2026
|
203
|
+
Write tabular output to file tmd-26-ext-ext+higher_aged_std-#-tables.text
|
204
|
+
Execution time is 32.4 seconds
|
205
|
+
|
206
|
+
% diff tmd-26-ext-ext+higher_aged_std-#-tables.text tmd-26-ext-ext+no_ssben_tax-#-tables.text | tail -18
|
207
|
+
22,29c22,29
|
208
|
+
< 3 19.24 629.1 -0.4 0.0 0.0 -0.4
|
209
|
+
< 4 19.24 876.9 -1.9 0.0 0.0 -1.9
|
210
|
+
< 5 19.24 1173.0 -6.9 0.0 0.0 -6.9
|
211
|
+
< 6 19.25 1581.6 -13.4 0.0 0.0 -13.4
|
212
|
+
< 7 19.24 2191.6 -25.6 0.0 0.0 -25.6
|
213
|
+
< 8 19.24 3238.1 -33.2 0.0 0.0 -33.2
|
214
|
+
< 9 19.24 10787.1 -29.5 0.0 0.0 -29.5
|
215
|
+
< A 192.41 20828.3 -111.1 0.0 0.0 -111.1
|
216
|
+
---
|
217
|
+
> 3 19.24 629.1 -0.1 0.0 0.0 -0.1
|
218
|
+
> 4 19.24 876.9 -1.0 0.0 0.0 -1.0
|
219
|
+
> 5 19.24 1173.0 -4.9 0.0 0.0 -4.9
|
220
|
+
> 6 19.25 1581.6 -11.9 0.0 0.0 -11.9
|
221
|
+
> 7 19.24 2191.6 -21.3 0.0 0.0 -21.3
|
222
|
+
> 8 19.24 3238.1 -29.9 0.0 0.0 -29.9
|
223
|
+
> 9 19.24 10787.1 -41.5 0.0 0.0 -41.5
|
224
|
+
> A 192.41 20828.3 -110.7 0.0 0.0 -110.7
|
225
|
+
```
|
226
|
+
|
227
|
+
|
228
|
+
## 4. TCJA extension with the higher elderly/disabled standard deduction revision and the new top tax bracket enhancement
|
229
|
+
|
230
|
+
In this last example, we look at how much of the extra cost of the
|
231
|
+
`higher_aged_std` reform can be paid for by adding a new top income
|
232
|
+
tax bracket to the TCJA-extension reform.
|
233
|
+
|
234
|
+
```
|
235
|
+
(taxcalc-dev) Tax-Calculator% cat new_top_bracket.json
|
236
|
+
{
|
237
|
+
"II_brk7": {"2026": [2.5e6, 5.0e6, 2.5e6, 4.2e6, 5.0e6]},
|
238
|
+
"II_rt8": {"2026": 0.396},
|
239
|
+
"PT_brk7": {"2026": [2.5e6, 5.0e6, 2.5e6, 4.2e6, 5.0e6]},
|
240
|
+
"PT_rt8": {"2026": 0.396}
|
241
|
+
}
|
242
|
+
|
243
|
+
% tc ../tmd.csv 2026 --baseline ext.json+higher_aged_std.json --reform ext.json+higher_aged_std.json+new_top_bracket.json --exact --tables --graphs
|
244
|
+
Read input data for 2021; input data were extrapolated to 2026
|
245
|
+
Write tabular output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
246
|
+
Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-pch.html
|
247
|
+
Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-atr.html
|
248
|
+
Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-mtr.html
|
249
|
+
Execution time is 39.8 seconds
|
250
|
+
|
251
|
+
% tail -14 tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
252
|
+
Weighted Tax Differences by Baseline Expanded-Income Decile
|
253
|
+
Returns ExpInc IncTax PayTax LSTax AllTax
|
254
|
+
(#m) ($b) ($b) ($b) ($b) ($b)
|
255
|
+
0 19.24 -274.9 0.1 0.0 0.0 0.1
|
256
|
+
1 19.24 210.9 0.0 0.0 0.0 0.0
|
257
|
+
2 19.24 414.9 0.0 0.0 0.0 0.0
|
258
|
+
3 19.24 629.1 0.0 0.0 0.0 0.0
|
259
|
+
4 19.24 876.9 0.0 0.0 0.0 0.0
|
260
|
+
5 19.24 1173.0 0.0 0.0 0.0 0.0
|
261
|
+
6 19.25 1581.6 0.0 0.0 0.0 0.0
|
262
|
+
7 19.24 2191.6 0.0 0.0 0.0 0.0
|
263
|
+
8 19.24 3238.1 0.0 0.0 0.0 0.0
|
264
|
+
9 19.24 10787.1 15.8 0.0 0.0 15.8
|
265
|
+
A 192.41 20828.3 15.8 0.0 0.0 15.8
|
266
|
+
```
|
267
|
+
|
268
|
+
So, the new top bracket (with a 39.6% marginal tax rate) raises
|
269
|
+
aggregate federal income tax liability by enough to pay for the TCJA
|
270
|
+
revision that approximates making social security benefits tax-free
|
271
|
+
and produces an additional $15.8 billion (in 2026) that could be used
|
272
|
+
to pay for other revisions.
|
273
|
+
|
274
|
+
While those with the highest incomes do pay more tax, the reduction in
|
275
|
+
their after-tax expanded income is quite small as can be seen in one
|
276
|
+
of the standard graphs:
|
277
|
+
`tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-pch.html`.
|
278
|
+
This graph shows that the top one percent of the income distribution
|
279
|
+
experiences a decline in after-tax income of about 0.36 percent (or
|
280
|
+
less than four dollars per thousand dollars).
|
281
|
+
|
282
|
+
Here are the ten-year results for this run:
|
283
|
+
|
284
|
+
```
|
285
|
+
% tc ../tmd.csv 2026 --numyears 10 --baseline ext.json+higher_aged_std.json --reform ext.json+higher_aged_std.json+new_top_bracket.json --exact --tables
|
286
|
+
Read input data for 2021; input data were extrapolated to 2026
|
287
|
+
Write tabular output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
288
|
+
Advance input data and policy to 2027
|
289
|
+
Write tabular output to file tmd-27-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
290
|
+
Advance input data and policy to 2028
|
291
|
+
Write tabular output to file tmd-28-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
292
|
+
Advance input data and policy to 2029
|
293
|
+
Write tabular output to file tmd-29-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
294
|
+
Advance input data and policy to 2030
|
295
|
+
Write tabular output to file tmd-30-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
296
|
+
Advance input data and policy to 2031
|
297
|
+
Write tabular output to file tmd-31-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
298
|
+
Advance input data and policy to 2032
|
299
|
+
Write tabular output to file tmd-32-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
300
|
+
Advance input data and policy to 2033
|
301
|
+
Write tabular output to file tmd-33-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
302
|
+
Advance input data and policy to 2034
|
303
|
+
Write tabular output to file tmd-34-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
304
|
+
Advance input data and policy to 2035
|
305
|
+
Write tabular output to file tmd-35-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
306
|
+
Execution time is 57.1 seconds
|
307
|
+
|
308
|
+
% tail -1 tmd-??-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
|
309
|
+
10 187.9
|
310
|
+
```
|
311
|
+
|
312
|
+
So, there is nearly $188 billion left to pay for other revisions to
|
313
|
+
the basic TCJA extension.
|
314
|
+
|
315
|
+
|
316
|
+
## How is the `ext.json` file generated?
|
317
|
+
|
318
|
+
The short answer is by using the
|
319
|
+
[`extend_tcja.py`](https://github.com/PSLmodels/Tax-Calculator/blob/master/extend_tcja.py) script.
|
320
|
+
|
321
|
+
Reading the `extend_tcja.py` script will provide details on how the
|
322
|
+
values in the `ext.json` file are generated.
|
323
|
+
|
324
|
+
It is important to bear in mind that the `extend_tcja.py` script will
|
325
|
+
generate a different `ext.json` file whenever the CBO economic
|
326
|
+
projection (incorporated in the Tax-Calculator `growfactors.csv` file)
|
327
|
+
changes or whenever new historical values of policy parameters are
|
328
|
+
added to the `policy_current_law.json` file thereby changing the
|
329
|
+
`Policy.LAST_KNOWN_YEAR`.
|
330
|
+
|
331
|
+
Beginning with the 4.5.0 version, Tax-Calculator incorporates the
|
332
|
+
January 2025 CBO economic projection and contains historical tax
|
333
|
+
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 = "4.6.
|
10
|
+
VERSION = "4.6.3"
|
11
11
|
|
12
12
|
config = {
|
13
13
|
"description": "Tax-Calculator",
|
@@ -25,7 +25,7 @@ config = {
|
|
25
25
|
"pandas>=2.2",
|
26
26
|
"bokeh>=2.4",
|
27
27
|
"numba",
|
28
|
-
"paramtools>=0.
|
28
|
+
"paramtools>=0.20.0",
|
29
29
|
],
|
30
30
|
"classifiers": [
|
31
31
|
"Development Status :: 4 - Beta",
|
@@ -3190,7 +3190,7 @@ def NonrefundableCredits(c05800, e07240, e07260, e07300, e07400,
|
|
3190
3190
|
@iterate_jit(nopython=True)
|
3191
3191
|
def AdditionalCTC(codtc_limited, ACTC_c, n24, earned, ACTC_Income_thd,
|
3192
3192
|
ACTC_rt, nu06, ACTC_rt_bonus_under6family, ACTC_ChildNum,
|
3193
|
-
CTC_is_refundable, CTC_include17,
|
3193
|
+
CTC_is_refundable, CTC_include17, CTC_c,
|
3194
3194
|
age_head, age_spouse, MARS, nu18,
|
3195
3195
|
ptax_was, c03260, e09800, c59660, e11200,
|
3196
3196
|
c11070):
|
@@ -3251,7 +3251,7 @@ def AdditionalCTC(codtc_limited, ACTC_c, n24, earned, ACTC_Income_thd,
|
|
3251
3251
|
childnum = n24 + max(0, nu18 - tu18 - su18 - n24)
|
3252
3252
|
else:
|
3253
3253
|
childnum = n24
|
3254
|
-
line4 = ACTC_c * childnum
|
3254
|
+
line4 = min(ACTC_c, CTC_c) * childnum
|
3255
3255
|
c11070 = 0. # line15
|
3256
3256
|
if line3 > 0. and line4 > 0.:
|
3257
3257
|
line5 = min(line3, line4)
|