taxcalc 5.3.0__tar.gz → 6.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/build_and_test.yml +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.gitignore +5 -3
- {taxcalc-5.3.0 → taxcalc-6.1.0}/MANIFEST.in +0 -2
- {taxcalc-5.3.0 → taxcalc-6.1.0}/Makefile +12 -13
- {taxcalc-5.3.0/taxcalc.egg-info → taxcalc-6.1.0}/PKG-INFO +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/conda.recipe/meta.yaml +2 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/releases.md +61 -5
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/RELEASING.md +3 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/contributor_guide.md +5 -5
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/testing.md +24 -43
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/index.md +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe00.md +1 -10
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/data.md +14 -16
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/overview.md +21 -20
- {taxcalc-5.3.0 → taxcalc-6.1.0}/environment.yml +4 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/pytest.ini +2 -6
- {taxcalc-5.3.0 → taxcalc-6.1.0}/setup.py +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/__init__.py +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/calcfunctions.py +11 -11
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/calculator.py +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cli/tc.py +1 -8
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/data.py +1 -2
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/policy.py +7 -22
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/policy_current_law.json +6 -6
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/records.py +78 -82
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/records_variables.json +106 -106
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/2017_law.json +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ARPA.json +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Renacci.json +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/TCJA.json +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2016.json +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2017.json +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/taxcalcio.py +60 -51
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/conftest.py +19 -14
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/reforms.json +1 -1
- taxcalc-6.1.0/taxcalc/tests/reforms_expect.csv +61 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_4package.py +3 -15
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_calcfunctions.py +2 -2
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_calculator.py +197 -160
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_cpscsv.py +0 -22
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_data.py +11 -3
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_parameters.py +42 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_records.py +139 -8
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_reforms.py +5 -7
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_taxcalcio.py +3 -58
- {taxcalc-5.3.0 → taxcalc-6.1.0/taxcalc.egg-info}/PKG-INFO +1 -1
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/SOURCES.txt +0 -6
- taxcalc-5.3.0/taxcalc/puf_ratios.csv +0 -26
- taxcalc-5.3.0/taxcalc/puf_weights.csv.gz +0 -0
- taxcalc-5.3.0/taxcalc/tests/reforms_expect.csv +0 -61
- taxcalc-5.3.0/taxcalc/tests/test_compare.py +0 -330
- taxcalc-5.3.0/taxcalc/tests/test_compatible_data.py +0 -334
- taxcalc-5.3.0/taxcalc/tests/test_puf_var_stats.py +0 -194
- taxcalc-5.3.0/taxcalc/tests/test_pufcsv.py +0 -328
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.coveragerc +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/FUNDING.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/check_jupyterbook.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/LICENSE +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/PSL_catalog.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/codecov.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/conda.recipe/bld.bat +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/conda.recipe/build.sh +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/csv_show.sh +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/csv_vars.sh +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/PSL.svg +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_config.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_static/atr.png +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_static/mtr.png +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_static/pch.png +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_toc.yml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/LICENSE.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/history.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/roadmap.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/calcfunctions.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/calculator.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/consumption.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/data.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/decorators.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/growdiff.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/growfactors.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/parameters.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/policy.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/public_api.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/records.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/taxcalcio.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/utils.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/utilsprvt.rst +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/param_naming.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/pr_workflow.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/assumption_params.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/cli.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/index.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/input_vars.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/make/make_io_vars.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/make/make_params.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/make/make_uguide.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/output_vars.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/policy_params.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/python_interface.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/assumption_params_template.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/input_vars_template.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/output_vars_template.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/policy_params_template.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/_static/reformA.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/_static/reformB.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/_static/reformC.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/convert_all.sh +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/index.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe01.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe02.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe03.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe04.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe05.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe06.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe00.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe01.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe02.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe03.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe04.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe05.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe06.ipynb +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/starting.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/tcja_after_2025.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/use_cases.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/gitpr +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/gitpr.bat +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/gitsync +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/gitsync.bat +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/pyproject.toml +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/setup.cfg +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/assumptions/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cli/__init__.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/conftest.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/consumption.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/consumption.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cps.csv.gz +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cps_weights.csv.gz +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/decorators.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growdiff.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growdiff.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growfactors.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growfactors.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/parameters.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/2017_law.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ARPA.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/BrownKhanna.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/CARES.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/CARES.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Larson2019.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/REFORMS.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Renacci.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/TCJA.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/TCJA.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/cases.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ext.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes0.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes1.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes2.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes3.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/benefits_expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/pufcsv_agg_expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/pufcsv_mtr_expect.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_benefits.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_consumption.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_decorators.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_growdiff.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_growfactors.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_policy.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_responses.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_utils.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/utils.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/utilsprvt.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/README.md +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/tests_35.sh +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/dependency_links.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/entry_points.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/requires.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/top_level.txt +0 -0
- {taxcalc-5.3.0 → taxcalc-6.1.0}/tctest-nojit.sh +0 -0
@@ -35,7 +35,7 @@ jobs:
|
|
35
35
|
shell: bash -l {0}
|
36
36
|
working-directory: ./
|
37
37
|
run: |
|
38
|
-
pytest -m 'not
|
38
|
+
pytest -m 'not requires_puf and not requires_tmd and not local' --cov=./ --cov-report=xml
|
39
39
|
|
40
40
|
- name: Upload coverage to Codecov
|
41
41
|
if: matrix.os == 'ubuntu-latest' && contains(github.repository, 'PSLmodels/Tax-Calculator')
|
@@ -13,9 +13,11 @@ read-the-docs/_build/
|
|
13
13
|
# Mac OS X
|
14
14
|
*.DS_Store
|
15
15
|
|
16
|
-
# IRS-SOI PUF data
|
17
|
-
puf
|
18
|
-
|
16
|
+
# Non-public IRS-SOI PUF and TMD data files
|
17
|
+
puf*csv*
|
18
|
+
puf*zip
|
19
|
+
*tmd*csv*
|
20
|
+
tmd*zip
|
19
21
|
|
20
22
|
# Jupyter notebook checkpoints
|
21
23
|
*.ipynb_checkpoints*
|
@@ -12,10 +12,8 @@ help:
|
|
12
12
|
@echo "help : show help message"
|
13
13
|
@echo "clean : remove .pyc files and local taxcalc package"
|
14
14
|
@echo "package : build and install local package"
|
15
|
-
@echo "pytest-cps : generate report for and cleanup after"
|
16
|
-
@echo " pytest -m 'not requires_pufcsv and not pre_release'"
|
17
15
|
@echo "pytest : generate report for and cleanup after"
|
18
|
-
@echo " pytest -m 'not
|
16
|
+
@echo " pytest -m 'not requires_puf and not requires_tmd'"
|
19
17
|
@echo "pytest-all : generate report for and cleanup after"
|
20
18
|
@echo " pytest -m ''"
|
21
19
|
@echo "tctest : generate report for and cleanup after"
|
@@ -24,6 +22,8 @@ help:
|
|
24
22
|
@echo " tc --test when environment var NOTAXCALCJIT is set"
|
25
23
|
@echo "cstest : generate coding-style errors using the"
|
26
24
|
@echo " pycodestyle (nee pep8) and pylint tools"
|
25
|
+
@echo "idtest : generate report for and cleanup after executing"
|
26
|
+
@echo " taxcalc/cli/input_data_tests/tests.sh"
|
27
27
|
@echo "coverage : generate test coverage report"
|
28
28
|
@echo "git-sync : synchronize local, origin, and upstream Git repos"
|
29
29
|
@echo "git-pr N=n : create local pr-n branch containing upstream PR"
|
@@ -36,7 +36,7 @@ clean:
|
|
36
36
|
|
37
37
|
.PHONY=package
|
38
38
|
package:
|
39
|
-
@pip install -e .
|
39
|
+
@pip install -e . | tail -1
|
40
40
|
|
41
41
|
define pytest-setup
|
42
42
|
rm -f taxcalc/tests/reforms_actual_init
|
@@ -48,19 +48,13 @@ rm -f df-??-#-*
|
|
48
48
|
rm -f tmp??????-??-#-tmp*
|
49
49
|
endef
|
50
50
|
|
51
|
-
.PHONY=pytest-cps
|
52
|
-
pytest-cps: clean
|
53
|
-
@$(pytest-setup)
|
54
|
-
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not requires_pufcsv and not pre_release"
|
55
|
-
@$(pytest-cleanup)
|
56
|
-
|
57
51
|
.PHONY=pytest
|
58
52
|
pytest: clean
|
59
53
|
@$(pytest-setup)
|
60
|
-
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not
|
54
|
+
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not requires_puf and not requires_tmd"
|
61
55
|
@$(pytest-cleanup)
|
62
56
|
|
63
|
-
.PHONY=pytest
|
57
|
+
.PHONY=pytest
|
64
58
|
pytest-all: clean
|
65
59
|
@$(pytest-setup)
|
66
60
|
@cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m ""
|
@@ -97,11 +91,16 @@ cstest:
|
|
97
91
|
@-pycodestyle --ignore=E501,E121 $(TESTS_JSON_FILES)
|
98
92
|
@-pylint $(PYLINT_OPTIONS) --ignore-paths=$(EXCLUDED_PATHS) .
|
99
93
|
|
94
|
+
.PHONY=idtest
|
95
|
+
idtest: package
|
96
|
+
@echo "Executing taxcalc/cli/input_data_tests"
|
97
|
+
@cd taxcalc/cli/input_data_tests ; ./tests.sh
|
98
|
+
|
100
99
|
define coverage-cleanup
|
101
100
|
rm -f .coverage htmlcov/*
|
102
101
|
endef
|
103
102
|
|
104
|
-
COVMARK = "not
|
103
|
+
COVMARK = "not requires_puf and not requires_tmd"
|
105
104
|
|
106
105
|
OS := $(shell uname -s)
|
107
106
|
|
@@ -1,8 +1,57 @@
|
|
1
1
|
Release history
|
2
2
|
===============
|
3
|
-
Go
|
3
|
+
Go
|
4
|
+
[here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclosed)
|
4
5
|
for a complete commit history.
|
5
6
|
|
7
|
+
|
8
|
+
2025-10-11 Release 6.1.0
|
9
|
+
------------------------
|
10
|
+
(last merged pull request is
|
11
|
+
[#2965](https://github.com/PSLmodels/Tax-Calculator/pull/2965))
|
12
|
+
|
13
|
+
**This is an enhancement release.**
|
14
|
+
|
15
|
+
**API Changes**
|
16
|
+
|
17
|
+
**New Features**
|
18
|
+
|
19
|
+
- Rename two policy parameters to clarify they are addons not levels
|
20
|
+
[[#2965](https://github.com/PSLmodels/Tax-Calculator/pull/2965) by
|
21
|
+
Martin Holmer]
|
22
|
+
|
23
|
+
- Update dependencies in `environment.yml` and `conda.recipe/meta.yaml` files
|
24
|
+
[[#2964](https://github.com/PSLmodels/Tax-Calculator/pull/2964) by
|
25
|
+
Martin Holmer]
|
26
|
+
|
27
|
+
**Bug Fixes**
|
28
|
+
|
29
|
+
|
30
|
+
2025-09-24 Release 6.0.0
|
31
|
+
------------------------
|
32
|
+
(last merged pull request is
|
33
|
+
[#2961](https://github.com/PSLmodels/Tax-Calculator/pull/2961))
|
34
|
+
|
35
|
+
**This is a major release with changes that make Tax-Calculator
|
36
|
+
incompatible with earlier releases.**
|
37
|
+
|
38
|
+
**API Changes**
|
39
|
+
|
40
|
+
- Remove the [taxdata](https://github.com/PSLmodels/taxdata)-produced
|
41
|
+
`puf_weights.csv.gz` and `puf_ratios.csv` files from the
|
42
|
+
Tax-Calculator repository. Adds a new `Records.puf_constructor`
|
43
|
+
static method for use with PUF data. Users will now need to supply
|
44
|
+
those PUF weights and PUF ratios files (from the `taxdata`
|
45
|
+
repository) just as they have always needed to supply the `puf.csv`
|
46
|
+
file from the `taxdata` repository.
|
47
|
+
[[#2961](https://github.com/PSLmodels/Tax-Calculator/pull/2961) by
|
48
|
+
Martin Holmer]
|
49
|
+
|
50
|
+
**New Features**
|
51
|
+
|
52
|
+
**Bug Fixes**
|
53
|
+
|
54
|
+
|
6
55
|
2025-09-19 Release 5.3.0
|
7
56
|
------------------------
|
8
57
|
(last merged pull request is
|
@@ -13,13 +62,17 @@ for a complete commit history.
|
|
13
62
|
**API Changes**
|
14
63
|
|
15
64
|
**New Features**
|
65
|
+
|
16
66
|
- Update new PUF weights and ratios files.
|
17
67
|
[[#2925](https://github.com/PSLmodels/Tax-Calculator/pull/2925) by
|
18
|
-
Bodi Yang], from the update in [[TaxData PR
|
19
|
-
taxdata/pull/452) by Bodi Yang]
|
68
|
+
Bodi Yang], from the update in [[TaxData PR
|
69
|
+
#452](https://github.com/PSLmodels/ taxdata/pull/452) by Bodi Yang]
|
20
70
|
|
21
|
-
Note: PUF users are required to produce new `puf.csv` file from
|
22
|
-
|
71
|
+
Note: PUF users are required to produce new `puf.csv` file from
|
72
|
+
TaxData repository and replace the old file in the Tax-Calculator
|
73
|
+
directory. Correct usage: Tax-Calculator >= 5.3.0 versions are
|
74
|
+
compatible with the newly produced `puf.csv` file; Tax-Calculator <=
|
75
|
+
5.2.0 versions are compatible with the previous `puf.csv` file
|
23
76
|
|
24
77
|
- Make `FST_AGI_thd` parameters to be non inflation-indexed
|
25
78
|
[[#2951](https://github.com/PSLmodels/Tax-Calculator/pull/2951) by
|
@@ -41,6 +94,7 @@ for a complete commit history.
|
|
41
94
|
[[#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957) by
|
42
95
|
Martin Holmer]
|
43
96
|
|
97
|
+
**Bug Fixes**
|
44
98
|
|
45
99
|
|
46
100
|
2025-08-08 Release 5.2.0
|
@@ -61,6 +115,8 @@ for a complete commit history.
|
|
61
115
|
[[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944) by
|
62
116
|
Martin Holmer]
|
63
117
|
|
118
|
+
**Bug Fixes**
|
119
|
+
|
64
120
|
|
65
121
|
2025-07-22 Release 5.1.0
|
66
122
|
------------------------
|
@@ -22,7 +22,9 @@ In the top-level Tax-Calculator directory, do the following:
|
|
22
22
|
|
23
23
|
--> run `make cstest` [to confirm project coding style is being followed]
|
24
24
|
|
25
|
-
--> run `make pytest-all` [
|
25
|
+
--> run `make pytest-all` [to confirm all pytest test are passing]
|
26
|
+
|
27
|
+
--> run `make idtest` [to check CLI results for CPS, PUF, TMD input data]
|
26
28
|
|
27
29
|
--> run `make tctest-jit` [to make sure JIT decorators are not hiding bugs]
|
28
30
|
|
@@ -115,11 +115,11 @@ page](https://github.com).
|
|
115
115
|
the command line in the Tax-Calculator directory:
|
116
116
|
```
|
117
117
|
cd taxcalc
|
118
|
-
pytest -m "not
|
118
|
+
pytest -m "not requires_puf and not requires_tmd" -n4
|
119
119
|
```
|
120
|
-
If you do have
|
121
|
-
|
122
|
-
|
120
|
+
If you do have the PUF-related files used by Tax-Calculator and
|
121
|
+
the TMD-related files used by Tax-Calculator, then the second line
|
122
|
+
above can be simplified to `pytest -n4`.
|
123
123
|
|
124
124
|
If all the tests pass, you're good to go. If they don't pass, enter
|
125
125
|
the following updates at the command line and then try running the
|
@@ -227,7 +227,7 @@ situations, in which case other contributors are here to help.
|
|
227
227
|
from the command line in the Tax-Calculator directory:
|
228
228
|
```
|
229
229
|
make cstest
|
230
|
-
make pytest
|
230
|
+
make pytest
|
231
231
|
```
|
232
232
|
Consult {doc}`testing` for more details.
|
233
233
|
|
@@ -38,56 +38,38 @@ all these coding-style tests, proceed to the second phase of testing.
|
|
38
38
|
## Testing with pytest
|
39
39
|
|
40
40
|
There are two variants of this second testing phase depending on
|
41
|
-
whether or not you have access to
|
42
|
-
|
43
|
-
IRS-SOI PUF data.
|
44
|
-
|
45
|
-
A brief description of the `puf.csv` file is followed by instructions
|
46
|
-
on how to run the two variants of the second-phase tests.
|
47
|
-
|
48
|
-
The Tax-Calculator `puf.csv` file has been constructed by the core
|
49
|
-
development team by merging information from a publicly available
|
50
|
-
IRS-SOI PUF file for 2011 and from the Census CPS file for the
|
51
|
-
corresponding year. If you have acquired from IRS the 2011 SOI PUF
|
52
|
-
file and want to execute the tests that require the `puf.csv` file,
|
53
|
-
contact the core development team to discuss your options.
|
54
|
-
|
55
|
-
**NO PUF.CSV**: If you do not have access to the `puf.csv` file (or if
|
56
|
-
you just want to do a quick test), run the second-phase of testing as
|
57
|
-
follows at the command prompt in the Tax-Calculator directory:
|
58
|
-
|
59
|
-
```
|
60
|
-
make pytest-cps
|
61
|
-
```
|
41
|
+
whether or not you have access to the PUF-related and TMD-related
|
42
|
+
input data files.
|
62
43
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
prepared.
|
67
|
-
|
68
|
-
**HAVE PUF.CSV**: If you do have access to the `puf.csv` file, copy it
|
69
|
-
into the Tax-Calculator directory at the top of the repository
|
70
|
-
directory tree (but **never** add it to your repository) and run the
|
71
|
-
second-phase of testing as follows at the command prompt in the
|
72
|
-
Tax-Calculator directory:
|
44
|
+
**NO PUF AND NO TMD**: If you do not have access to the PUF or TMD
|
45
|
+
input data files, run the second-phase of testing as follows at the
|
46
|
+
command prompt in the Tax-Calculator directory:
|
73
47
|
|
74
48
|
```
|
75
49
|
make pytest
|
76
50
|
```
|
77
51
|
|
78
52
|
This will start executing a pytest suite containing hundreds of tests,
|
79
|
-
|
80
|
-
|
81
|
-
is being prepared.
|
53
|
+
but will skip the tests that require the `puf.csv` file or the `tmd.csv`
|
54
|
+
file as input.
|
82
55
|
|
83
|
-
|
84
|
-
|
85
|
-
|
56
|
+
**HAVE PUF AND HAVE TMD**: If you do have access to the PUF-related
|
57
|
+
files and the TMD-related files, copy them into the Tax-Calculator
|
58
|
+
directory at the top of the repository directory tree (but **never**
|
59
|
+
add them to your repository) and run the second-phase of testing as
|
60
|
+
follows at the command prompt in the Tax-Calculator directory:
|
86
61
|
|
87
62
|
```
|
88
63
|
make pytest-all
|
64
|
+
make idtest
|
89
65
|
```
|
90
66
|
|
67
|
+
The first command will start executing a pytest suite containing
|
68
|
+
hundreds of tests, including the tests that require the `puf.csv` file
|
69
|
+
as input and the tests that require the `tmd.csv` file as input. The
|
70
|
+
second command checks that the Tax-Calculator CLI generates expected
|
71
|
+
results when using the CPS, PUF, and TMD input data.
|
72
|
+
|
91
73
|
## Interpreting test results
|
92
74
|
|
93
75
|
If you are adding an enhancement that expands the capabilities of the
|
@@ -108,9 +90,8 @@ demonstrate that the newly-added test, which used to fail, now passes.
|
|
108
90
|
|
109
91
|
After an enhancement or bug fix, you may be convinced that the new and
|
110
92
|
different second-phase test results are, in fact, correct. How do you
|
111
|
-
eliminate the test failures?
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
to update the test results.
|
93
|
+
eliminate the test failures? Simply edit the appropriate
|
94
|
+
`taxcalc/tests/test_*.py` file so that the test passes when you rerun
|
95
|
+
pytest. If there are failures for the tests that write results files,
|
96
|
+
read the test error message for instructions about how to update the
|
97
|
+
test results.
|
@@ -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}`
|
57
|
+
{doc}`6.1.0 (2025-10-11) <about/releases>`
|
58
58
|
|
59
59
|
If you are already using Tax-Calculator, upgrade using the following command:
|
60
60
|
```
|
@@ -45,16 +45,7 @@ from bokeh.io import show, output_notebook
|
|
45
45
|
|
46
46
|
## Setup
|
47
47
|
|
48
|
-
Use publicly-available CPS input
|
49
|
-
|
50
|
-
NOTE: if you have access to the restricted-use IRS-SOI PUF-based input file
|
51
|
-
and you have that file (named ‘puf.csv’) located in the directory
|
52
|
-
where this script is located, then you can substitute the following
|
53
|
-
statement for the prior statement:
|
54
|
-
|
55
|
-
``
|
56
|
-
recs = tc.Records()
|
57
|
-
``
|
48
|
+
Use publicly-available CPS input data included in Tax-Calculator.
|
58
49
|
|
59
50
|
```{code-cell} ipython3
|
60
51
|
:hide-output: false
|
@@ -41,21 +41,20 @@ validation of those data.
|
|
41
41
|
|
42
42
|
The taxdata repository also produces a weights file and growth
|
43
43
|
factors file for use with the 2011 IRS-SOI Public Use File (PUF). For
|
44
|
-
users who have purchased their own version of the 2011 PUF, the
|
45
|
-
`puf_weights.csv.gz` and `
|
46
|
-
|
47
|
-
|
44
|
+
users who have purchased their own version of the 2011 PUF, the `puf.csv`,
|
45
|
+
`puf_weights.csv.gz` and `puf_ratios.csv` files from the taxdata repository,
|
46
|
+
can be used by Tax-Calculator using the `Records.puf_constructor(...)`
|
47
|
+
static method.
|
48
48
|
|
49
49
|
We refer users of the PUF to the IRS limitations on the use of those
|
50
|
-
data and their distribution. We also refer users of the PUF
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
file.
|
50
|
+
data and their distribution. We also refer users of the PUF input
|
51
|
+
data to the [taxdata](https://github.com/PSLmodels/taxdata)
|
52
|
+
documentation for details on how to use these files with the PUF and
|
53
|
+
to see how well the resulting tax calculations hit aggregate targets
|
54
|
+
published by the IRS. However, we do note that analysis with a
|
55
|
+
PUF-based data file tends to be more accurate than the `cps.csv` file
|
56
|
+
and that the validation of Tax-Calculator with other microsimulation
|
57
|
+
models uses the `puf.csv` file.
|
59
58
|
|
60
59
|
### 2015 IRS public use data (`tmd.csv`)
|
61
60
|
|
@@ -71,9 +70,8 @@ tax-microdata repository. The three TMD files can be used with
|
|
71
70
|
Tax-Calculator in two ways:
|
72
71
|
- with the **Python API** by instantiating a GrowFactors object that
|
73
72
|
uses TMD growth factors [`gf=GrowFactors("path/to/tmd_growfactors.csv")`]
|
74
|
-
and by using the `Records.tmd_constructor()`
|
75
|
-
|
76
|
-
object and a Policy object, or
|
73
|
+
and by using the `Records.tmd_constructor(...)` static method to
|
74
|
+
instantiate a Records object, or
|
77
75
|
- with the **CLI tool**, `tc`, when the three TMD files are all in
|
78
76
|
the same folder and the `tmd.csv.gz` file has been unzipped.
|
79
77
|
|
@@ -1,32 +1,32 @@
|
|
1
1
|
Structural overview
|
2
2
|
===================
|
3
3
|
|
4
|
-
Tax-Calculator has been designed using [object-oriented programming
|
5
|
-
|
6
|
-
There are seven classes and a collection of global
|
7
|
-
but most Python programming involves using only a
|
4
|
+
Tax-Calculator has been designed using [object-oriented programming
|
5
|
+
(OOP)](https://www.programiz.com/python-programming/object-oriented-programming)
|
6
|
+
principles. There are seven classes and a collection of global
|
7
|
+
utility functions, but most Python programming involves using only a
|
8
|
+
few methods in three classes.
|
8
9
|
|
9
10
|
## Quick summary
|
10
11
|
|
11
|
-
Typical Tax-Calculator usage involves creating two Calculator class
|
12
|
-
both containing the same sample of filing units (that is,
|
13
|
-
but each containing a different tax policy
|
14
|
-
The idea is to compare the calculated
|
15
|
-
the two different tax
|
16
|
-
one of which is usually current-law policy and the other is
|
17
|
-
interest.
|
12
|
+
Typical Tax-Calculator usage involves creating two Calculator class
|
13
|
+
objects: both containing the same sample of filing units (that is,
|
14
|
+
Records class object), but each containing a different tax policy
|
15
|
+
(that is, Policy class object). The idea is to compare the calculated
|
16
|
+
tax liabilities of the sample units under the two different tax
|
17
|
+
policies, one of which is usually current-law policy and the other is
|
18
|
+
a tax reform of interest.
|
18
19
|
|
19
20
|
* `rec` → Records class object.
|
20
|
-
Created by `Records()` when containing
|
21
|
-
|
22
|
-
filing-unit data.
|
21
|
+
Created by `Records.cps_constructor()` when containing CPS-derived
|
22
|
+
filing-unit data.
|
23
23
|
|
24
24
|
* `clp` → `Policy` class object containing parameters that characterize
|
25
25
|
current-law policy.
|
26
26
|
Created by `Policy()`.
|
27
27
|
|
28
|
-
*
|
29
|
-
reform.
|
28
|
+
* `ref` → `Policy` class object containing parameters that
|
29
|
+
characterize a tax reform.
|
30
30
|
Created using a Python dictionary `refdict` representing the reform by
|
31
31
|
using the `implement_reform(refdict)` method on a `Policy` object created
|
32
32
|
by `Policy()`.
|
@@ -68,10 +68,11 @@ for Calculator class and all its methods.
|
|
68
68
|
|
69
69
|
## Complete story
|
70
70
|
|
71
|
-
Tax-Calculator contains eight basic classes, and a collection of
|
72
|
-
functions, that together provide the full range of
|
73
|
-
Here is a description of their role in
|
74
|
-
|
71
|
+
Tax-Calculator contains eight basic classes, and a collection of
|
72
|
+
global utility functions, that together provide the full range of
|
73
|
+
Tax-Calculator capabilities. Here is a description of their role in
|
74
|
+
Tax-Calculator and a link to each the detailed documentation and
|
75
|
+
source code for each class and all its methods.
|
75
76
|
|
76
77
|
### Classes
|
77
78
|
|
@@ -11,6 +11,9 @@ dependencies:
|
|
11
11
|
- setuptools
|
12
12
|
- pytest
|
13
13
|
- pytest-xdist
|
14
|
+
- pytest-asyncio
|
15
|
+
- requests
|
16
|
+
- aiohttp
|
14
17
|
- pycodestyle
|
15
18
|
- pylint
|
16
19
|
- coverage
|
@@ -20,3 +23,4 @@ dependencies:
|
|
20
23
|
- pip:
|
21
24
|
- jupyter-book
|
22
25
|
- "paramtools>=0.20.0"
|
26
|
+
- "mcp[cli]"
|
@@ -1871,7 +1871,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
|
|
1871
1871
|
dwks14, c05700, e62900, e00700, dwks10, age_head, age_spouse,
|
1872
1872
|
earned, cmbtp, qbided,
|
1873
1873
|
AMT_child_em_c_age, AMT_brk1,
|
1874
|
-
AMT_em, AMT_prt, AMT_rt1,
|
1874
|
+
AMT_em, AMT_prt, AMT_rt1, AMT_rt2_addon,
|
1875
1875
|
AMT_child_em, AMT_em_ps, AMT_em_pe,
|
1876
1876
|
AMT_CG_brk1, AMT_CG_brk2, AMT_CG_brk3, AMT_CG_rt1, AMT_CG_rt2,
|
1877
1877
|
AMT_CG_rt3, AMT_CG_rt4, c05800, c09600, c62100):
|
@@ -1946,8 +1946,8 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
|
|
1946
1946
|
AMT exemption phaseout rate
|
1947
1947
|
AMT_rt1: float
|
1948
1948
|
AMT rate 1
|
1949
|
-
|
1950
|
-
Additional AMT rate for AMT taxable income
|
1949
|
+
AMT_rt2_addon: float
|
1950
|
+
Additional AMT rate for AMT taxable income above AMT bracket 1
|
1951
1951
|
AMT_child_em: float
|
1952
1952
|
Child AMT exemption additional income base
|
1953
1953
|
AMT_em_ps: list
|
@@ -1977,14 +1977,14 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
|
|
1977
1977
|
c09600: float
|
1978
1978
|
Alternative Minimum Tax (AMT) liability
|
1979
1979
|
c62100: float
|
1980
|
-
Alternative Minimum Tax (AMT)
|
1980
|
+
Alternative Minimum Tax (AMT) taxable income
|
1981
1981
|
|
1982
1982
|
Returns
|
1983
1983
|
-------
|
1984
1984
|
c62100: float
|
1985
|
-
Alternative Minimum Tax (AMT)
|
1985
|
+
Alternative Minimum Tax (AMT) taxable income
|
1986
1986
|
c09600: float
|
1987
|
-
Alternative Minimum Tax (AMT) liability
|
1987
|
+
Alternative Minimum Tax (AMT) tax liability
|
1988
1988
|
c05800: float
|
1989
1989
|
Total (regular + AMT) income tax liability before credits
|
1990
1990
|
"""
|
@@ -2012,7 +2012,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
|
|
2012
2012
|
line29 = min(line29, earned + AMT_child_em)
|
2013
2013
|
line30 = max(0., c62100 - line29)
|
2014
2014
|
line3163 = (AMT_rt1 * line30 +
|
2015
|
-
|
2015
|
+
AMT_rt2_addon * max(0., (line30 - (AMT_brk1 / sep))))
|
2016
2016
|
if dwks10 > 0. or dwks13 > 0. or dwks14 > 0. or dwks19 > 0. or e24515 > 0.:
|
2017
2017
|
# complete Form 6251, Part III (line36 is equal to line30)
|
2018
2018
|
line37 = dwks13
|
@@ -2021,7 +2021,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
|
|
2021
2021
|
line40 = min(line30, line39)
|
2022
2022
|
line41 = max(0., line30 - line40)
|
2023
2023
|
line42 = (AMT_rt1 * line41 +
|
2024
|
-
|
2024
|
+
AMT_rt2_addon * max(0., (line41 - (AMT_brk1 / sep))))
|
2025
2025
|
line44 = dwks14
|
2026
2026
|
line45 = max(0., AMT_CG_brk1[MARS - 1] - line44)
|
2027
2027
|
line46 = min(line30, line37)
|
@@ -2268,7 +2268,7 @@ def EITCamount(basic_frac, phasein_rate, earnings, max_amount,
|
|
2268
2268
|
@iterate_jit(nopython=True)
|
2269
2269
|
def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
|
2270
2270
|
e02000, e26270, age_head, age_spouse, earned, earned_p, earned_s,
|
2271
|
-
EITC_ps, EITC_MinEligAge, EITC_MaxEligAge,
|
2271
|
+
EITC_ps, EITC_MinEligAge, EITC_MaxEligAge, EITC_ps_addon_MarriedJ,
|
2272
2272
|
EITC_rt, EITC_c, EITC_prt, EITC_basic_frac,
|
2273
2273
|
EITC_InvestIncome_c, EITC_excess_InvestIncome_rt,
|
2274
2274
|
EITC_indiv, EITC_sep_filers_elig, c59660):
|
@@ -2315,7 +2315,7 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
|
|
2315
2315
|
Minimum age for childless EITC eligibility
|
2316
2316
|
EITC_MaxEligAge: int
|
2317
2317
|
Maximum age for childless EITC eligibility
|
2318
|
-
|
2318
|
+
EITC_ps_addon_MarriedJ: list
|
2319
2319
|
Extra earned income credit phaseout start AGI for
|
2320
2320
|
married filling jointly
|
2321
2321
|
EITC_rt: list
|
@@ -2360,7 +2360,7 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
|
|
2360
2360
|
c59660 = eitc
|
2361
2361
|
|
2362
2362
|
if MARS == 2:
|
2363
|
-
po_start = EITC_ps[EIC] +
|
2363
|
+
po_start = EITC_ps[EIC] + EITC_ps_addon_MarriedJ[EIC]
|
2364
2364
|
if not EITC_indiv:
|
2365
2365
|
# filing unit EITC rather than individual EITC
|
2366
2366
|
eitc = EITCamount(EITC_basic_frac,
|
@@ -81,7 +81,7 @@ class Calculator():
|
|
81
81
|
The most efficient way to specify current-law and reform Calculator
|
82
82
|
objects is as follows:
|
83
83
|
pol = Policy()
|
84
|
-
rec = Records()
|
84
|
+
rec = Records.cps_constructor()
|
85
85
|
calc1 = Calculator(policy=pol, records=rec) # current-law
|
86
86
|
pol.implement_reform(...)
|
87
87
|
calc2 = Calculator(policy=pol, records=rec) # reform
|