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.
Files changed (243) hide show
  1. {taxcalc-4.6.1 → taxcalc-4.6.3}/Makefile +3 -3
  2. {taxcalc-4.6.1/taxcalc.egg-info → taxcalc-4.6.3}/PKG-INFO +5 -2
  3. {taxcalc-4.6.1 → taxcalc-4.6.3}/README.md +3 -0
  4. {taxcalc-4.6.1 → taxcalc-4.6.3}/conda.recipe/meta.yaml +2 -2
  5. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/releases.md +45 -0
  6. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/RELEASING.md +1 -1
  7. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/cli.md +55 -5
  8. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/index.md +1 -1
  9. taxcalc-4.6.3/docs/usage/tcja_after_2025.md +334 -0
  10. {taxcalc-4.6.1 → taxcalc-4.6.3}/environment.yml +1 -2
  11. {taxcalc-4.6.1 → taxcalc-4.6.3}/setup.py +2 -2
  12. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/__init__.py +1 -1
  13. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/calcfunctions.py +2 -2
  14. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cli/tc.py +85 -29
  15. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/parameters.py +188 -118
  16. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/policy.py +26 -4
  17. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/policy_current_law.json +2 -2
  18. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/REFORMS.md +0 -2
  19. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ext.json +0 -2
  20. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/taxcalcio.py +95 -24
  21. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/conftest.py +1 -1
  22. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/reforms.json +8 -19
  23. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/reforms_expect.csv +9 -10
  24. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_4package.py +0 -1
  25. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_parameters.py +18 -22
  26. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_policy.py +153 -41
  27. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_reforms.py +2 -2
  28. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_taxcalcio.py +35 -13
  29. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/utils.py +32 -10
  30. {taxcalc-4.6.1 → taxcalc-4.6.3/taxcalc.egg-info}/PKG-INFO +5 -2
  31. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/requires.txt +1 -1
  32. taxcalc-4.6.1/docs/usage/tcja_after_2025.md +0 -127
  33. {taxcalc-4.6.1 → taxcalc-4.6.3}/.coveragerc +0 -0
  34. {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/FUNDING.yml +0 -0
  35. {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/build_and_test.yml +0 -0
  36. {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/check_jupyterbook.yml +0 -0
  37. {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/deploy_jupyterbook.yml +0 -0
  38. {taxcalc-4.6.1 → taxcalc-4.6.3}/.github/workflows/deploy_parameters_docs.yml +0 -0
  39. {taxcalc-4.6.1 → taxcalc-4.6.3}/.gitignore +0 -0
  40. {taxcalc-4.6.1 → taxcalc-4.6.3}/LICENSE +0 -0
  41. {taxcalc-4.6.1 → taxcalc-4.6.3}/MANIFEST.in +0 -0
  42. {taxcalc-4.6.1 → taxcalc-4.6.3}/PSL_catalog.json +0 -0
  43. {taxcalc-4.6.1 → taxcalc-4.6.3}/codecov.yml +0 -0
  44. {taxcalc-4.6.1 → taxcalc-4.6.3}/conda.recipe/bld.bat +0 -0
  45. {taxcalc-4.6.1 → taxcalc-4.6.3}/conda.recipe/build.sh +0 -0
  46. {taxcalc-4.6.1 → taxcalc-4.6.3}/csv_show.sh +0 -0
  47. {taxcalc-4.6.1 → taxcalc-4.6.3}/csv_vars.sh +0 -0
  48. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/PSL.svg +0 -0
  49. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_config.yml +0 -0
  50. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_static/atr.png +0 -0
  51. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_static/mtr.png +0 -0
  52. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_static/pch.png +0 -0
  53. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/_toc.yml +0 -0
  54. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/LICENSE.md +0 -0
  55. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/history.md +0 -0
  56. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/about/roadmap.md +0 -0
  57. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/calcfunctions.rst +0 -0
  58. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/calculator.rst +0 -0
  59. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/consumption.rst +0 -0
  60. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/data.rst +0 -0
  61. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/decorators.rst +0 -0
  62. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/growdiff.rst +0 -0
  63. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/growfactors.rst +0 -0
  64. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/parameters.rst +0 -0
  65. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/policy.rst +0 -0
  66. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/public_api.rst +0 -0
  67. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/records.rst +0 -0
  68. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/taxcalcio.rst +0 -0
  69. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/utils.rst +0 -0
  70. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/api/utilsprvt.rst +0 -0
  71. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/contributor_guide.md +0 -0
  72. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/param_naming.md +0 -0
  73. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/pr_workflow.md +0 -0
  74. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/contributing/testing.md +0 -0
  75. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/README.md +0 -0
  76. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/assumption_params.md +0 -0
  77. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/index.md +0 -0
  78. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/input_vars.md +0 -0
  79. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/make/make_io_vars.py +0 -0
  80. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/make/make_params.py +0 -0
  81. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/make/make_uguide.py +0 -0
  82. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/output_vars.md +0 -0
  83. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/policy_params.md +0 -0
  84. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/python_interface.md +0 -0
  85. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/assumption_params_template.md +0 -0
  86. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/input_vars_template.md +0 -0
  87. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/output_vars_template.md +0 -0
  88. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/guide/templates/policy_params_template.md +0 -0
  89. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/README.md +0 -0
  90. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/_static/reformA.json +0 -0
  91. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/_static/reformB.json +0 -0
  92. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/_static/reformC.json +0 -0
  93. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/convert_all.sh +0 -0
  94. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/index.md +0 -0
  95. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe00.md +0 -0
  96. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe01.md +0 -0
  97. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe02.md +0 -0
  98. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe03.md +0 -0
  99. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04.md +0 -0
  100. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04_pandas.md +0 -0
  101. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe05.md +0 -0
  102. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/md_src/recipe06.md +0 -0
  103. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe00.ipynb +0 -0
  104. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe01.ipynb +0 -0
  105. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe02.ipynb +0 -0
  106. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe03.ipynb +0 -0
  107. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe04.ipynb +0 -0
  108. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe04_pandas.ipynb +0 -0
  109. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe05.ipynb +0 -0
  110. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/recipes/recipe06.ipynb +0 -0
  111. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/usage/data.md +0 -0
  112. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/usage/overview.md +0 -0
  113. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/usage/starting.md +0 -0
  114. {taxcalc-4.6.1 → taxcalc-4.6.3}/docs/use_cases.md +0 -0
  115. {taxcalc-4.6.1 → taxcalc-4.6.3}/extend_tcja.py +0 -0
  116. {taxcalc-4.6.1 → taxcalc-4.6.3}/gitpr +0 -0
  117. {taxcalc-4.6.1 → taxcalc-4.6.3}/gitpr.bat +0 -0
  118. {taxcalc-4.6.1 → taxcalc-4.6.3}/gitsync +0 -0
  119. {taxcalc-4.6.1 → taxcalc-4.6.3}/gitsync.bat +0 -0
  120. {taxcalc-4.6.1 → taxcalc-4.6.3}/ppp.py +0 -0
  121. {taxcalc-4.6.1 → taxcalc-4.6.3}/pyproject.toml +0 -0
  122. {taxcalc-4.6.1 → taxcalc-4.6.3}/pytest.ini +0 -0
  123. {taxcalc-4.6.1 → taxcalc-4.6.3}/setup.cfg +0 -0
  124. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
  125. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/assumptions/README.md +0 -0
  126. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
  127. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/calculator.py +0 -0
  128. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cli/__init__.py +0 -0
  129. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/conftest.py +0 -0
  130. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/consumption.json +0 -0
  131. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/consumption.py +0 -0
  132. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cps.csv.gz +0 -0
  133. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/cps_weights.csv.gz +0 -0
  134. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/data.py +0 -0
  135. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/decorators.py +0 -0
  136. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growdiff.json +0 -0
  137. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growdiff.py +0 -0
  138. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growfactors.csv +0 -0
  139. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/growfactors.py +0 -0
  140. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/puf_ratios.csv +0 -0
  141. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/puf_weights.csv.gz +0 -0
  142. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/records.py +0 -0
  143. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/records_variables.json +0 -0
  144. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.json +0 -0
  145. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.out.csv +0 -0
  146. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.json +0 -0
  147. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.out.csv +0 -0
  148. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.json +0 -0
  149. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
  150. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/CARES.json +0 -0
  151. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/CARES.out.csv +0 -0
  152. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
  153. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
  154. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.json +0 -0
  155. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.out.csv +0 -0
  156. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/README.md +0 -0
  157. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.json +0 -0
  158. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.out.csv +0 -0
  159. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.json +0 -0
  160. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
  161. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.json +0 -0
  162. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.md +0 -0
  163. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.out.csv +0 -0
  164. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.json +0 -0
  165. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.out.csv +0 -0
  166. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.json +0 -0
  167. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.out.csv +0 -0
  168. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/Clinton2016.json +0 -0
  169. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/RyanBrady.json +0 -0
  170. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House.json +0 -0
  171. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
  172. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
  173. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
  174. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
  175. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
  176. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/cases.csv +0 -0
  177. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/clp.out.csv +0 -0
  178. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/growfactors_ext.csv +0 -0
  179. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.json +0 -0
  180. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.out.csv +0 -0
  181. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.json +0 -0
  182. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.out.csv +0 -0
  183. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.json +0 -0
  184. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.out.csv +0 -0
  185. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.json +0 -0
  186. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.out.csv +0 -0
  187. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/benefits_expect.csv +0 -0
  188. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
  189. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
  190. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
  191. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +0 -0
  192. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -0
  193. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_agg_expect.csv +0 -0
  194. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_mtr_expect.txt +0 -0
  195. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_benefits.py +0 -0
  196. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_calcfunctions.py +0 -0
  197. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_calculator.py +0 -0
  198. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_compare.py +0 -0
  199. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_compatible_data.py +0 -0
  200. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_consumption.py +0 -0
  201. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_cpscsv.py +0 -0
  202. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_data.py +0 -0
  203. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_decorators.py +0 -0
  204. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_growdiff.py +0 -0
  205. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_growfactors.py +0 -0
  206. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_puf_var_stats.py +0 -0
  207. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_pufcsv.py +0 -0
  208. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_records.py +0 -0
  209. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_responses.py +0 -0
  210. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/tests/test_utils.py +0 -0
  211. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/utilsprvt.py +0 -0
  212. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
  213. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
  214. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/README.md +0 -0
  215. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
  216. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/README.md +0 -0
  217. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
  218. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
  219. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
  220. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
  221. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
  222. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
  223. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
  224. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
  225. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
  226. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
  227. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
  228. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
  229. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
  230. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/input_setup.py +0 -0
  231. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
  232. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
  233. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
  234. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
  235. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
  236. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
  237. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tests_35.py +0 -0
  238. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc/validation/tests_35.sh +0 -0
  239. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/SOURCES.txt +0 -0
  240. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/dependency_links.txt +0 -0
  241. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/entry_points.txt +0 -0
  242. {taxcalc-4.6.1 → taxcalc-4.6.3}/taxcalc.egg-info/top_level.txt +0 -0
  243. {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.1
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.19.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.19.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.19.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 make confirm project coding style is being followed]
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.8 seconds
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 60.9 seconds
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.1 (2025-05-09) <about/releases>`
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
+
@@ -19,5 +19,4 @@ dependencies:
19
19
  - pip
20
20
  - pip:
21
21
  - jupyter-book
22
- - "marshmallow>=3.22, <4.0" # TODO: drop this after ParamTools is fixed
23
- - "paramtools>=0.19.0" # TODO: bump version after ParamTools is fixed
22
+ - "paramtools>=0.20.0"
@@ -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.1"
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.19.0",
28
+ "paramtools>=0.20.0",
29
29
  ],
30
30
  "classifiers": [
31
31
  "Development Status :: 4 - Beta",
@@ -14,6 +14,6 @@ from taxcalc.taxcalcio import *
14
14
  from taxcalc.utils import *
15
15
  from taxcalc.cli import *
16
16
 
17
- __version__ = '4.6.1'
17
+ __version__ = '4.6.3'
18
18
  __min_python3_version__ = 10
19
19
  __max_python3_version__ = 12
@@ -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)