taxcalc 4.6.2__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.2 → taxcalc-4.6.3}/Makefile +3 -3
- {taxcalc-4.6.2/taxcalc.egg-info → taxcalc-4.6.3}/PKG-INFO +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/releases.md +27 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/RELEASING.md +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/cli.md +51 -5
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/index.md +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/tcja_after_2025.md +47 -46
- {taxcalc-4.6.2 → taxcalc-4.6.3}/setup.py +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/__init__.py +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cli/tc.py +85 -29
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/parameters.py +188 -118
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/policy.py +26 -4
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/policy_current_law.json +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/REFORMS.md +0 -2
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/taxcalcio.py +72 -21
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/conftest.py +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/reforms.json +8 -19
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/reforms_expect.csv +9 -10
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_parameters.py +18 -22
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_policy.py +153 -28
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_reforms.py +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_taxcalcio.py +16 -13
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/utils.py +5 -5
- {taxcalc-4.6.2 → taxcalc-4.6.3/taxcalc.egg-info}/PKG-INFO +1 -1
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.coveragerc +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/FUNDING.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/build_and_test.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/check_jupyterbook.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/deploy_jupyterbook.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/deploy_parameters_docs.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/.gitignore +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/LICENSE +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/MANIFEST.in +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/PSL_catalog.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/codecov.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/conda.recipe/bld.bat +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/conda.recipe/build.sh +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/conda.recipe/meta.yaml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/csv_show.sh +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/csv_vars.sh +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/PSL.svg +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_config.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_static/atr.png +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_static/mtr.png +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_static/pch.png +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_toc.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/LICENSE.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/history.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/roadmap.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/calcfunctions.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/calculator.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/consumption.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/data.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/decorators.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/growdiff.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/growfactors.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/parameters.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/policy.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/public_api.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/records.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/taxcalcio.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/utils.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/utilsprvt.rst +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/contributor_guide.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/param_naming.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/pr_workflow.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/testing.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/assumption_params.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/index.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/input_vars.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/make/make_io_vars.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/make/make_params.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/make/make_uguide.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/output_vars.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/policy_params.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/python_interface.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/assumption_params_template.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/input_vars_template.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/output_vars_template.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/policy_params_template.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/_static/reformA.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/_static/reformB.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/_static/reformC.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/convert_all.sh +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/index.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe00.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe01.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe02.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe03.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04_pandas.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe05.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe06.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe00.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe01.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe02.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe03.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe04.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe04_pandas.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe05.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe06.ipynb +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/data.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/overview.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/starting.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/use_cases.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/environment.yml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/extend_tcja.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/gitpr +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/gitpr.bat +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/gitsync +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/gitsync.bat +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/ppp.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/pyproject.toml +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/pytest.ini +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/setup.cfg +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/assumptions/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/calcfunctions.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/calculator.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cli/__init__.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/conftest.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/consumption.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/consumption.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cps.csv.gz +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cps_weights.csv.gz +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/data.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/decorators.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growdiff.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growdiff.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growfactors.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growfactors.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/puf_ratios.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/puf_weights.csv.gz +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/records.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/records_variables.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/CARES.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/CARES.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/Clinton2016.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/RyanBrady.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/cases.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/clp.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ext.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/growfactors_ext.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.out.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/benefits_expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_agg_expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_mtr_expect.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_4package.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_benefits.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_calcfunctions.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_calculator.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_compare.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_compatible_data.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_consumption.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_cpscsv.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_data.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_decorators.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_growdiff.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_growfactors.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_puf_var_stats.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_pufcsv.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_records.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_responses.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_utils.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/utilsprvt.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/README.md +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/input_setup.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tests_35.py +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/tests_35.sh +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/SOURCES.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/dependency_links.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/entry_points.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/requires.txt +0 -0
- {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/top_level.txt +0 -0
- {taxcalc-4.6.2 → 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)
|
@@ -4,6 +4,33 @@ 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
|
+
|
7
34
|
2025-05-16 Release 4.6.2
|
8
35
|
------------------------
|
9
36
|
(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
|
@@ -561,6 +561,52 @@ 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
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
|
+
|
564
610
|
More examples of analyzing different versions of the TCJA after 2025
|
565
611
|
are available in this
|
566
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
|
```
|
@@ -39,16 +39,17 @@ reform-minus-baseline differences by income decile and in aggregate.
|
|
39
39
|
|
40
40
|
Nobody knows how the 2025 tax legislation will turn out, so the idea
|
41
41
|
of this document is to illustrate how to use the Tax-Calculator CLI
|
42
|
-
tool to analyze some of the TCJA revisions that
|
42
|
+
tool to analyze some of the TCJA revisions that were being reported in
|
43
43
|
the press in early May 2025. The basic legislative goal is to extend
|
44
44
|
TCJA beyond 2025, but there is discussion of a number of **revisions**
|
45
45
|
to the basic extension. The revisions being discussed include, but
|
46
46
|
are not limited to, raising the SALT deduction cap, making social
|
47
47
|
security benefits nontaxable, and liberalizing the child tax credit.
|
48
|
-
(Given the nature of the rules under which the
|
49
|
-
developed, no changes in social security
|
50
|
-
there is discussion of a higher
|
51
|
-
amount to proxy the nontaxable
|
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.)
|
52
53
|
These revisions all cause reductions in income tax revenue, so there
|
53
54
|
is also discussion about **enhancements** to the extended-TCJA policy
|
54
55
|
that would raise revenue to pay for revisions. The enhancement
|
@@ -62,10 +63,10 @@ The analysis examples below focus on the following policy scenarios:
|
|
62
63
|
3. a TCJA extension with the higher elderly/disabled standard deduction revision
|
63
64
|
4. a TCJA extension with the higher elderly/disabled standard deduction revision and the new top tax bracket enhancement
|
64
65
|
|
65
|
-
All the examples use Tax-Calculator 4.6.
|
66
|
+
All the examples use Tax-Calculator 4.6.2 version.
|
66
67
|
```
|
67
68
|
% tc --version
|
68
|
-
Tax-Calculator 4.6.
|
69
|
+
Tax-Calculator 4.6.2 on Python 3.12
|
69
70
|
```
|
70
71
|
|
71
72
|
The examples below were done on an ancient Mac with an old Intel
|
@@ -85,25 +86,25 @@ this document for more information on `ext.json` contents.
|
|
85
86
|
% tc ../tmd.csv 2026 --numyears 10 --reform ext.json --exact --tables
|
86
87
|
Read input data for 2021; input data were extrapolated to 2026
|
87
88
|
Write tabular output to file tmd-26-#-ext-#-tables.text
|
88
|
-
Advance input data and
|
89
|
+
Advance input data and policy to 2027
|
89
90
|
Write tabular output to file tmd-27-#-ext-#-tables.text
|
90
|
-
Advance input data and
|
91
|
+
Advance input data and policy to 2028
|
91
92
|
Write tabular output to file tmd-28-#-ext-#-tables.text
|
92
|
-
Advance input data and
|
93
|
+
Advance input data and policy to 2029
|
93
94
|
Write tabular output to file tmd-29-#-ext-#-tables.text
|
94
|
-
Advance input data and
|
95
|
+
Advance input data and policy to 2030
|
95
96
|
Write tabular output to file tmd-30-#-ext-#-tables.text
|
96
|
-
Advance input data and
|
97
|
+
Advance input data and policy to 2031
|
97
98
|
Write tabular output to file tmd-31-#-ext-#-tables.text
|
98
|
-
Advance input data and
|
99
|
+
Advance input data and policy to 2032
|
99
100
|
Write tabular output to file tmd-32-#-ext-#-tables.text
|
100
|
-
Advance input data and
|
101
|
+
Advance input data and policy to 2033
|
101
102
|
Write tabular output to file tmd-33-#-ext-#-tables.text
|
102
|
-
Advance input data and
|
103
|
+
Advance input data and policy to 2034
|
103
104
|
Write tabular output to file tmd-34-#-ext-#-tables.text
|
104
|
-
Advance input data and
|
105
|
+
Advance input data and policy to 2035
|
105
106
|
Write tabular output to file tmd-35-#-ext-#-tables.text
|
106
|
-
Execution time is
|
107
|
+
Execution time is 56.8 seconds
|
107
108
|
```
|
108
109
|
|
109
110
|
Because the aggregate change in taxes is displayed on the last line of
|
@@ -113,22 +114,22 @@ this:
|
|
113
114
|
```
|
114
115
|
% tail -1 tmd-??-#-ext-#-tables.text
|
115
116
|
==> tmd-26-#-ext-#-tables.text <==
|
116
|
-
A 192.41 20828.3 -
|
117
|
+
A 192.41 20828.3 -284.1 0.0 0.0 -284.1
|
117
118
|
|
118
119
|
==> tmd-27-#-ext-#-tables.text <==
|
119
|
-
A 193.77 21613.4 -
|
120
|
+
A 193.77 21613.4 -291.8 0.0 0.0 -291.8
|
120
121
|
|
121
122
|
==> tmd-28-#-ext-#-tables.text <==
|
122
|
-
A 194.72 22404.7 -
|
123
|
+
A 194.72 22404.7 -299.6 0.0 0.0 -299.6
|
123
124
|
|
124
125
|
==> tmd-29-#-ext-#-tables.text <==
|
125
|
-
A 195.66 23243.3 -
|
126
|
+
A 195.66 23243.3 -291.9 0.0 0.0 -291.9
|
126
127
|
|
127
128
|
==> tmd-30-#-ext-#-tables.text <==
|
128
|
-
A 196.58 24115.1 -
|
129
|
+
A 196.58 24115.1 -299.9 0.0 0.0 -299.9
|
129
130
|
|
130
131
|
==> tmd-31-#-ext-#-tables.text <==
|
131
|
-
A 197.48 25020.0 -
|
132
|
+
A 197.48 25020.0 -307.9 0.0 0.0 -307.9
|
132
133
|
|
133
134
|
==> tmd-32-#-ext-#-tables.text <==
|
134
135
|
A 198.35 25952.7 -315.9 0.0 0.0 -315.9
|
@@ -148,7 +149,7 @@ be tabulated this way:
|
|
148
149
|
|
149
150
|
```
|
150
151
|
% tail -1 tmd-??-#-ext-#-tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
|
151
|
-
10 -
|
152
|
+
10 -3086.3
|
152
153
|
```
|
153
154
|
|
154
155
|
|
@@ -176,10 +177,10 @@ Write tabular output to file tmd-26-ext-ext+no_ssben_tax-#-tables.text
|
|
176
177
|
Execution time is 33.4 seconds
|
177
178
|
|
178
179
|
% tail -1 tmd-26-ext-ext+no_ssben_tax-#-tables.text
|
179
|
-
A 192.41 20828.3 -110.
|
180
|
+
A 192.41 20828.3 -110.7 0.0 0.0 -110.7
|
180
181
|
```
|
181
182
|
|
182
|
-
So, this reform reduces federal income tax liability by $110.
|
183
|
+
So, this reform reduces federal income tax liability by $110.7 billion in
|
183
184
|
2026.
|
184
185
|
|
185
186
|
|
@@ -200,27 +201,27 @@ statuses produces a reasonable approximation of the effects of the
|
|
200
201
|
% tc ../tmd.csv 2026 --baseline ext.json --reform ext.json+higher_aged_std.json --exact --tables
|
201
202
|
Read input data for 2021; input data were extrapolated to 2026
|
202
203
|
Write tabular output to file tmd-26-ext-ext+higher_aged_std-#-tables.text
|
203
|
-
Execution time is
|
204
|
+
Execution time is 32.4 seconds
|
204
205
|
|
205
206
|
% diff tmd-26-ext-ext+higher_aged_std-#-tables.text tmd-26-ext-ext+no_ssben_tax-#-tables.text | tail -18
|
206
207
|
22,29c22,29
|
207
|
-
< 3 19.24 629.1 -0.
|
208
|
+
< 3 19.24 629.1 -0.4 0.0 0.0 -0.4
|
208
209
|
< 4 19.24 876.9 -1.9 0.0 0.0 -1.9
|
209
|
-
< 5 19.24 1173.0 -6.
|
210
|
-
< 6 19.25 1581.6 -13.
|
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
|
211
212
|
< 7 19.24 2191.6 -25.6 0.0 0.0 -25.6
|
212
213
|
< 8 19.24 3238.1 -33.2 0.0 0.0 -33.2
|
213
214
|
< 9 19.24 10787.1 -29.5 0.0 0.0 -29.5
|
214
|
-
< A 192.41 20828.3 -
|
215
|
+
< A 192.41 20828.3 -111.1 0.0 0.0 -111.1
|
215
216
|
---
|
216
217
|
> 3 19.24 629.1 -0.1 0.0 0.0 -0.1
|
217
218
|
> 4 19.24 876.9 -1.0 0.0 0.0 -1.0
|
218
|
-
> 5 19.24 1173.0 -4.
|
219
|
-
> 6 19.25 1581.6 -11.
|
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
|
220
221
|
> 7 19.24 2191.6 -21.3 0.0 0.0 -21.3
|
221
222
|
> 8 19.24 3238.1 -29.9 0.0 0.0 -29.9
|
222
223
|
> 9 19.24 10787.1 -41.5 0.0 0.0 -41.5
|
223
|
-
> A 192.41 20828.3 -110.
|
224
|
+
> A 192.41 20828.3 -110.7 0.0 0.0 -110.7
|
224
225
|
```
|
225
226
|
|
226
227
|
|
@@ -245,9 +246,9 @@ Write tabular output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_
|
|
245
246
|
Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-pch.html
|
246
247
|
Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-atr.html
|
247
248
|
Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-mtr.html
|
248
|
-
Execution time is
|
249
|
+
Execution time is 39.8 seconds
|
249
250
|
|
250
|
-
tail -14 tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
251
|
+
% tail -14 tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
251
252
|
Weighted Tax Differences by Baseline Expanded-Income Decile
|
252
253
|
Returns ExpInc IncTax PayTax LSTax AllTax
|
253
254
|
(#m) ($b) ($b) ($b) ($b) ($b)
|
@@ -284,25 +285,25 @@ Here are the ten-year results for this run:
|
|
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
|
285
286
|
Read input data for 2021; input data were extrapolated to 2026
|
286
287
|
Write tabular output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
287
|
-
Advance input data and
|
288
|
+
Advance input data and policy to 2027
|
288
289
|
Write tabular output to file tmd-27-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
289
|
-
Advance input data and
|
290
|
+
Advance input data and policy to 2028
|
290
291
|
Write tabular output to file tmd-28-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
291
|
-
Advance input data and
|
292
|
+
Advance input data and policy to 2029
|
292
293
|
Write tabular output to file tmd-29-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
293
|
-
Advance input data and
|
294
|
+
Advance input data and policy to 2030
|
294
295
|
Write tabular output to file tmd-30-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
295
|
-
Advance input data and
|
296
|
+
Advance input data and policy to 2031
|
296
297
|
Write tabular output to file tmd-31-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
297
|
-
Advance input data and
|
298
|
+
Advance input data and policy to 2032
|
298
299
|
Write tabular output to file tmd-32-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
299
|
-
Advance input data and
|
300
|
+
Advance input data and policy to 2033
|
300
301
|
Write tabular output to file tmd-33-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
301
|
-
Advance input data and
|
302
|
+
Advance input data and policy to 2034
|
302
303
|
Write tabular output to file tmd-34-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
303
|
-
Advance input data and
|
304
|
+
Advance input data and policy to 2035
|
304
305
|
Write tabular output to file tmd-35-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
|
305
|
-
Execution time is
|
306
|
+
Execution time is 57.1 seconds
|
306
307
|
|
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}'
|
308
309
|
10 187.9
|
@@ -43,7 +43,7 @@ def cli_tc_main():
|
|
43
43
|
),
|
44
44
|
(
|
45
45
|
' '
|
46
|
-
'[--silent] [--test] [--version] [--usage]'
|
46
|
+
'[--runid N] [--silent] [--test] [--version] [--usage]'
|
47
47
|
)
|
48
48
|
)
|
49
49
|
parser = argparse.ArgumentParser(
|
@@ -75,20 +75,20 @@ def cli_tc_main():
|
|
75
75
|
parser.add_argument('--baseline',
|
76
76
|
help=('BASELINE is name of optional JSON reform file. '
|
77
77
|
'A compound reform can be specified using 2+ '
|
78
|
-
'file names
|
78
|
+
'file names connected by plus (+) character(s). '
|
79
79
|
'No --baseline implies baseline policy is '
|
80
80
|
'current-law policy.'),
|
81
81
|
default=None)
|
82
82
|
parser.add_argument('--reform',
|
83
83
|
help=('REFORM is name of optional JSON reform file. '
|
84
84
|
'A compound reform can be specified using 2+ '
|
85
|
-
'file names
|
85
|
+
'file names connected by plus (+) character(s). '
|
86
86
|
'No --reform implies reform policy is '
|
87
87
|
'current-law policy).'),
|
88
88
|
default=None)
|
89
89
|
parser.add_argument('--assump',
|
90
90
|
help=('ASSUMP is name of optional JSON economic '
|
91
|
-
'assumptions file.
|
91
|
+
'assumptions file. No --assump implies use '
|
92
92
|
'of no customized assumptions.'),
|
93
93
|
default=None)
|
94
94
|
parser.add_argument('--exact',
|
@@ -125,12 +125,19 @@ def cli_tc_main():
|
|
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 '
|
128
|
-
'in the dump database.
|
129
|
-
'
|
130
|
-
'
|
128
|
+
'in the dump database. No --dumpvars implies '
|
129
|
+
'a minimal set of variables. Valid variable '
|
130
|
+
'names include all variables in the '
|
131
131
|
'records_variables.json file plus mtr_itax and '
|
132
132
|
'mtr_ptax (MTRs wrt taxpayer earnings).'),
|
133
133
|
default=None)
|
134
|
+
parser.add_argument('--runid', metavar='N',
|
135
|
+
help=('N is a positive integer run id that is used '
|
136
|
+
'to construct simpler output file names. '
|
137
|
+
'No --runid implies legacy output file names '
|
138
|
+
'are used.'),
|
139
|
+
type=int,
|
140
|
+
default=0)
|
134
141
|
parser.add_argument('--silent',
|
135
142
|
help=('optional flag that suppresses messages about '
|
136
143
|
'input and output actions.'),
|
@@ -153,16 +160,23 @@ def cli_tc_main():
|
|
153
160
|
default=False,
|
154
161
|
action="store_true")
|
155
162
|
args = parser.parse_args()
|
163
|
+
using_error_file = args.silent and args.runid != 0
|
164
|
+
efilename = f'run{args.runid}.errors'
|
156
165
|
# check Python version
|
157
166
|
pyv = sys.version_info
|
158
167
|
pymin = tc.__min_python3_version__
|
159
168
|
pymax = tc.__max_python3_version__
|
160
169
|
if pyv[0] != 3 or pyv[1] < pymin or pyv[1] > pymax: # pragma: no cover
|
161
170
|
pyreq = f'at least Python 3.{pymin} and at most Python 3.{pymax}'
|
162
|
-
|
171
|
+
msg = (
|
163
172
|
f'ERROR: Tax-Calculator requires {pyreq}\n'
|
164
173
|
f' but Python {pyv[0]}.{pyv[1]} is installed\n'
|
165
174
|
)
|
175
|
+
if using_error_file:
|
176
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
177
|
+
efile.write(msg)
|
178
|
+
else:
|
179
|
+
sys.stderr.write(msg)
|
166
180
|
return 1
|
167
181
|
# show Tax-Calculator version and quit if --version option is specified
|
168
182
|
if args.version:
|
@@ -186,20 +200,32 @@ def cli_tc_main():
|
|
186
200
|
# check taxyear value
|
187
201
|
if taxyear > tc.Policy.LAST_BUDGET_YEAR:
|
188
202
|
msg = f'ERROR: TAXYEAR is greater than {tc.Policy.LAST_BUDGET_YEAR}\n'
|
189
|
-
|
190
|
-
|
203
|
+
if using_error_file:
|
204
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
205
|
+
efile.write(msg)
|
206
|
+
else:
|
207
|
+
sys.stderr.write(msg)
|
208
|
+
sys.stderr.write('USAGE: tc --help\n')
|
191
209
|
return 1
|
192
210
|
# check numyears value
|
193
211
|
if args.numyears < 1:
|
194
212
|
msg = 'ERROR: --numyears parameter N is less than one\n'
|
195
|
-
|
196
|
-
|
213
|
+
if using_error_file:
|
214
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
215
|
+
efile.write(msg)
|
216
|
+
else:
|
217
|
+
sys.stderr.write(msg)
|
218
|
+
sys.stderr.write('USAGE: tc --help\n')
|
197
219
|
return 1
|
198
220
|
max_numyears = tc.Policy.LAST_BUDGET_YEAR - taxyear + 1
|
199
221
|
if args.numyears > max_numyears:
|
200
222
|
msg = f'ERROR: --numyears parameter N is greater than {max_numyears}\n'
|
201
|
-
|
202
|
-
|
223
|
+
if using_error_file:
|
224
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
225
|
+
efile.write(msg)
|
226
|
+
else:
|
227
|
+
sys.stderr.write(msg)
|
228
|
+
sys.stderr.write('USAGE: tc --help\n')
|
203
229
|
return 1
|
204
230
|
# specify if aging input data
|
205
231
|
aging_data = (
|
@@ -210,8 +236,12 @@ def cli_tc_main():
|
|
210
236
|
# check args.dumpdb and args.dumpvars consistency
|
211
237
|
if not args.dumpdb and args.dumpvars:
|
212
238
|
msg = 'ERROR: DUMPVARS file specified without --dumpdb option\n'
|
213
|
-
|
214
|
-
|
239
|
+
if using_error_file:
|
240
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
241
|
+
efile.write(msg)
|
242
|
+
else:
|
243
|
+
sys.stderr.write(msg)
|
244
|
+
sys.stderr.write('USAGE: tc --help\n')
|
215
245
|
return 1
|
216
246
|
# specify dumpvars_str from args.dumpvars file
|
217
247
|
dumpvars_str = ''
|
@@ -221,9 +251,22 @@ def cli_tc_main():
|
|
221
251
|
dumpvars_str = dfile.read()
|
222
252
|
else:
|
223
253
|
msg = f'ERROR: DUMPVARS file {args.dumpvars} does not exist\n'
|
254
|
+
if using_error_file:
|
255
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
256
|
+
efile.write(msg)
|
257
|
+
else:
|
258
|
+
sys.stderr.write(msg)
|
259
|
+
sys.stderr.write('USAGE: tc --help\n')
|
260
|
+
return 1
|
261
|
+
if args.runid < 0:
|
262
|
+
msg = 'ERROR: --runid parameter N is less than zero\n'
|
263
|
+
if using_error_file:
|
264
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
265
|
+
efile.write(msg)
|
266
|
+
else:
|
224
267
|
sys.stderr.write(msg)
|
225
268
|
sys.stderr.write('USAGE: tc --help\n')
|
226
|
-
|
269
|
+
return 1
|
227
270
|
# do calculations for taxyear
|
228
271
|
# ... initialize TaxCalcIO object for taxyear
|
229
272
|
tcio = tc.TaxCalcIO(
|
@@ -232,14 +275,19 @@ def cli_tc_main():
|
|
232
275
|
baseline=args.baseline,
|
233
276
|
reform=args.reform,
|
234
277
|
assump=args.assump,
|
278
|
+
runid=args.runid,
|
235
279
|
silent=args.silent,
|
236
280
|
)
|
237
281
|
if tcio.errmsg:
|
238
|
-
|
239
|
-
|
282
|
+
msg = tcio.errmsg
|
283
|
+
if not msg.endswith('\n'):
|
284
|
+
msg += '\n'
|
285
|
+
if using_error_file:
|
286
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
287
|
+
efile.write(msg)
|
240
288
|
else:
|
241
|
-
sys.stderr.write(
|
242
|
-
|
289
|
+
sys.stderr.write(msg)
|
290
|
+
sys.stderr.write('USAGE: tc --help\n')
|
243
291
|
return 1
|
244
292
|
tcio.init(
|
245
293
|
input_data=inputfn,
|
@@ -251,19 +299,27 @@ def cli_tc_main():
|
|
251
299
|
exact_calculations=args.exact,
|
252
300
|
)
|
253
301
|
if tcio.errmsg:
|
254
|
-
|
255
|
-
|
302
|
+
msg = tcio.errmsg
|
303
|
+
if not msg.endswith('\n'):
|
304
|
+
msg += '\n'
|
305
|
+
if using_error_file:
|
306
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
307
|
+
efile.write(msg)
|
256
308
|
else:
|
257
|
-
sys.stderr.write(
|
258
|
-
|
309
|
+
sys.stderr.write(msg)
|
310
|
+
sys.stderr.write('USAGE: tc --help\n')
|
259
311
|
return 1
|
260
312
|
# ... conduct tax analysis for taxyear
|
261
313
|
dumpvars_list = tcio.dump_variables(dumpvars_str)
|
262
314
|
if tcio.errmsg:
|
263
|
-
|
264
|
-
|
315
|
+
msg = tcio.errmsg
|
316
|
+
if not msg.endswith('\n'):
|
317
|
+
msg += '\n'
|
318
|
+
if using_error_file:
|
319
|
+
with open(efilename, 'w', encoding='utf-8') as efile:
|
320
|
+
efile.write(msg)
|
265
321
|
else:
|
266
|
-
sys.stderr.write(
|
322
|
+
sys.stderr.write(msg)
|
267
323
|
sys.stderr.write('USAGE: tc --help\n')
|
268
324
|
return 1
|
269
325
|
tcio.analyze(
|
@@ -313,7 +369,7 @@ EXPECTED_TEST_OUTPUT = (
|
|
313
369
|
'1|131.88\n'
|
314
370
|
'2|28879.00\n'
|
315
371
|
)
|
316
|
-
TEST_DUMPDB_FILENAME = f'test-{str(TEST_TAXYEAR)[2:]}-#-#-#.
|
372
|
+
TEST_DUMPDB_FILENAME = f'test-{str(TEST_TAXYEAR)[2:]}-#-#-#.dumpdb'
|
317
373
|
TEST_SQLITE_QUERY = """
|
318
374
|
SELECT
|
319
375
|
RECID AS id,
|