taxcalc 5.1.0__tar.gz → 5.3.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.
Files changed (249) hide show
  1. {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/build_and_test.yml +2 -2
  2. {taxcalc-5.1.0 → taxcalc-5.3.0}/Makefile +2 -1
  3. {taxcalc-5.1.0/taxcalc.egg-info → taxcalc-5.3.0}/PKG-INFO +3 -6
  4. {taxcalc-5.1.0 → taxcalc-5.3.0}/README.md +1 -4
  5. {taxcalc-5.1.0 → taxcalc-5.3.0}/conda.recipe/meta.yaml +2 -2
  6. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/releases.md +59 -1
  7. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/RELEASING.md +0 -4
  8. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/index.md +2 -2
  9. taxcalc-5.3.0/docs/recipes/_static/reformA.json +10 -0
  10. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/data.md +36 -1
  11. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/tcja_after_2025.md +11 -2
  12. {taxcalc-5.1.0 → taxcalc-5.3.0}/environment.yml +1 -1
  13. {taxcalc-5.1.0 → taxcalc-5.3.0}/pytest.ini +1 -1
  14. {taxcalc-5.1.0 → taxcalc-5.3.0}/setup.py +2 -2
  15. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/__init__.py +3 -3
  16. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/calcfunctions.py +21 -16
  17. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/calculator.py +3 -3
  18. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cli/tc.py +15 -11
  19. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/data.py +1 -1
  20. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/decorators.py +9 -8
  21. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growfactors.py +2 -1
  22. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/policy.py +13 -5
  23. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/policy_current_law.json +1191 -1395
  24. taxcalc-5.3.0/taxcalc/puf_ratios.csv +26 -0
  25. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/puf_weights.csv.gz +0 -0
  26. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/2017_law.json +2 -0
  27. taxcalc-5.3.0/taxcalc/reforms/ARPA.out.csv +10 -0
  28. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/taxcalcio.py +41 -26
  29. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/conftest.py +1 -1
  30. taxcalc-5.3.0/taxcalc/tests/cpscsv_agg_expect.csv +26 -0
  31. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +24 -24
  32. taxcalc-5.3.0/taxcalc/tests/puf_var_wght_means_by_year.csv +80 -0
  33. taxcalc-5.3.0/taxcalc/tests/pufcsv_agg_expect.csv +26 -0
  34. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/pufcsv_mtr_expect.txt +21 -21
  35. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/reforms.json +3 -1
  36. taxcalc-5.3.0/taxcalc/tests/reforms_expect.csv +61 -0
  37. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_4package.py +8 -9
  38. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_calculator.py +152 -151
  39. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_compare.py +2 -2
  40. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_consumption.py +2 -2
  41. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_cpscsv.py +4 -3
  42. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_decorators.py +57 -52
  43. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_growdiff.py +2 -2
  44. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_parameters.py +59 -53
  45. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_policy.py +229 -251
  46. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_puf_var_stats.py +2 -2
  47. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_pufcsv.py +5 -4
  48. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_records.py +5 -1
  49. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_reforms.py +101 -99
  50. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_taxcalcio.py +10 -4
  51. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/utils.py +3 -3
  52. {taxcalc-5.1.0 → taxcalc-5.3.0/taxcalc.egg-info}/PKG-INFO +3 -6
  53. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/SOURCES.txt +0 -3
  54. taxcalc-5.1.0/docs/recipes/_static/reformA.json +0 -15
  55. taxcalc-5.1.0/extend_tcja.py +0 -163
  56. taxcalc-5.1.0/ppp.py +0 -132
  57. taxcalc-5.1.0/taxcalc/puf_ratios.csv +0 -26
  58. taxcalc-5.1.0/taxcalc/reforms/ARPA.out.csv +0 -10
  59. taxcalc-5.1.0/taxcalc/reforms/clp.out.csv +0 -10
  60. taxcalc-5.1.0/taxcalc/tests/cpscsv_agg_expect.csv +0 -26
  61. taxcalc-5.1.0/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -80
  62. taxcalc-5.1.0/taxcalc/tests/pufcsv_agg_expect.csv +0 -26
  63. taxcalc-5.1.0/taxcalc/tests/reforms_expect.csv +0 -61
  64. {taxcalc-5.1.0 → taxcalc-5.3.0}/.coveragerc +0 -0
  65. {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/FUNDING.yml +0 -0
  66. {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/check_jupyterbook.yml +0 -0
  67. {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
  68. {taxcalc-5.1.0 → taxcalc-5.3.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
  69. {taxcalc-5.1.0 → taxcalc-5.3.0}/.gitignore +0 -0
  70. {taxcalc-5.1.0 → taxcalc-5.3.0}/LICENSE +0 -0
  71. {taxcalc-5.1.0 → taxcalc-5.3.0}/MANIFEST.in +0 -0
  72. {taxcalc-5.1.0 → taxcalc-5.3.0}/PSL_catalog.json +0 -0
  73. {taxcalc-5.1.0 → taxcalc-5.3.0}/codecov.yml +0 -0
  74. {taxcalc-5.1.0 → taxcalc-5.3.0}/conda.recipe/bld.bat +0 -0
  75. {taxcalc-5.1.0 → taxcalc-5.3.0}/conda.recipe/build.sh +0 -0
  76. {taxcalc-5.1.0 → taxcalc-5.3.0}/csv_show.sh +0 -0
  77. {taxcalc-5.1.0 → taxcalc-5.3.0}/csv_vars.sh +0 -0
  78. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/PSL.svg +0 -0
  79. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_config.yml +0 -0
  80. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_static/atr.png +0 -0
  81. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_static/mtr.png +0 -0
  82. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_static/pch.png +0 -0
  83. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/_toc.yml +0 -0
  84. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/LICENSE.md +0 -0
  85. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/history.md +0 -0
  86. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/about/roadmap.md +0 -0
  87. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/calcfunctions.rst +0 -0
  88. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/calculator.rst +0 -0
  89. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/consumption.rst +0 -0
  90. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/data.rst +0 -0
  91. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/decorators.rst +0 -0
  92. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/growdiff.rst +0 -0
  93. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/growfactors.rst +0 -0
  94. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/parameters.rst +0 -0
  95. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/policy.rst +0 -0
  96. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/public_api.rst +0 -0
  97. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/records.rst +0 -0
  98. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/taxcalcio.rst +0 -0
  99. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/utils.rst +0 -0
  100. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/api/utilsprvt.rst +0 -0
  101. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/contributor_guide.md +0 -0
  102. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/param_naming.md +0 -0
  103. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/pr_workflow.md +0 -0
  104. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/contributing/testing.md +0 -0
  105. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/README.md +0 -0
  106. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/assumption_params.md +0 -0
  107. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/cli.md +0 -0
  108. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/index.md +0 -0
  109. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/input_vars.md +0 -0
  110. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/make/make_io_vars.py +0 -0
  111. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/make/make_params.py +0 -0
  112. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/make/make_uguide.py +0 -0
  113. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/output_vars.md +0 -0
  114. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/policy_params.md +0 -0
  115. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/python_interface.md +0 -0
  116. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/assumption_params_template.md +0 -0
  117. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/input_vars_template.md +0 -0
  118. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/output_vars_template.md +0 -0
  119. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/guide/templates/policy_params_template.md +0 -0
  120. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/README.md +0 -0
  121. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/_static/reformB.json +0 -0
  122. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/_static/reformC.json +0 -0
  123. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/convert_all.sh +0 -0
  124. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/index.md +0 -0
  125. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe00.md +0 -0
  126. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe01.md +0 -0
  127. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe02.md +0 -0
  128. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe03.md +0 -0
  129. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe04.md +0 -0
  130. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
  131. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe05.md +0 -0
  132. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe06.md +0 -0
  133. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe00.ipynb +0 -0
  134. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe01.ipynb +0 -0
  135. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe02.ipynb +0 -0
  136. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe03.ipynb +0 -0
  137. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe04.ipynb +0 -0
  138. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
  139. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe05.ipynb +0 -0
  140. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/recipes/recipe06.ipynb +0 -0
  141. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/overview.md +0 -0
  142. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/usage/starting.md +0 -0
  143. {taxcalc-5.1.0 → taxcalc-5.3.0}/docs/use_cases.md +0 -0
  144. {taxcalc-5.1.0 → taxcalc-5.3.0}/gitpr +0 -0
  145. {taxcalc-5.1.0 → taxcalc-5.3.0}/gitpr.bat +0 -0
  146. {taxcalc-5.1.0 → taxcalc-5.3.0}/gitsync +0 -0
  147. {taxcalc-5.1.0 → taxcalc-5.3.0}/gitsync.bat +0 -0
  148. {taxcalc-5.1.0 → taxcalc-5.3.0}/pyproject.toml +0 -0
  149. {taxcalc-5.1.0 → taxcalc-5.3.0}/setup.cfg +0 -0
  150. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
  151. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/assumptions/README.md +0 -0
  152. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
  153. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cli/__init__.py +0 -0
  154. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/conftest.py +0 -0
  155. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/consumption.json +0 -0
  156. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/consumption.py +0 -0
  157. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cps.csv.gz +0 -0
  158. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/cps_weights.csv.gz +0 -0
  159. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growdiff.json +0 -0
  160. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growdiff.py +0 -0
  161. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/growfactors.csv +0 -0
  162. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/parameters.py +0 -0
  163. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/records.py +0 -0
  164. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/records_variables.json +0 -0
  165. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/2017_law.out.csv +0 -0
  166. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ARPA.json +0 -0
  167. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/BrownKhanna.json +0 -0
  168. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
  169. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/CARES.json +0 -0
  170. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/CARES.out.csv +0 -0
  171. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
  172. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
  173. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Larson2019.json +0 -0
  174. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
  175. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/README.md +0 -0
  176. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/REFORMS.md +0 -0
  177. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Renacci.json +0 -0
  178. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Renacci.out.csv +0 -0
  179. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
  180. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
  181. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.json +0 -0
  182. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.md +0 -0
  183. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.out.csv +0 -0
  184. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2016.json +0 -0
  185. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
  186. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2017.json +0 -0
  187. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
  188. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
  189. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
  190. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
  191. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
  192. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
  193. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
  194. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
  195. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
  196. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/cases.csv +0 -0
  197. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ext.json +0 -0
  198. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
  199. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes0.json +0 -0
  200. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
  201. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes1.json +0 -0
  202. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
  203. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes2.json +0 -0
  204. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
  205. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes3.json +0 -0
  206. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
  207. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/benefits_expect.csv +0 -0
  208. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
  209. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
  210. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_benefits.py +0 -0
  211. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_calcfunctions.py +0 -0
  212. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_compatible_data.py +0 -0
  213. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_data.py +0 -0
  214. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_growfactors.py +0 -0
  215. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_responses.py +0 -0
  216. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/tests/test_utils.py +0 -0
  217. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/utilsprvt.py +0 -0
  218. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
  219. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
  220. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/README.md +0 -0
  221. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
  222. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/README.md +0 -0
  223. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
  224. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
  225. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
  226. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
  227. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
  228. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
  229. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
  230. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
  231. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
  232. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
  233. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
  234. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
  235. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
  236. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
  237. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
  238. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
  239. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
  240. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
  241. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
  242. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
  243. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
  244. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc/validation/tests_35.sh +0 -0
  245. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/dependency_links.txt +0 -0
  246. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/entry_points.txt +0 -0
  247. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/requires.txt +0 -0
  248. {taxcalc-5.1.0 → taxcalc-5.3.0}/taxcalc.egg-info/top_level.txt +0 -0
  249. {taxcalc-5.1.0 → taxcalc-5.3.0}/tctest-nojit.sh +0 -0
@@ -1,4 +1,4 @@
1
- name: Build Package and Test Source Code [Python 3.10, 3.11, 3.12]
1
+ name: Build Package and Test Source Code [Python 3.11, 3.12, 3.13]
2
2
 
3
3
  on: [push, pull_request]
4
4
 
@@ -8,7 +8,7 @@ jobs:
8
8
  strategy:
9
9
  matrix:
10
10
  os: [ubuntu-latest, windows-latest]
11
- python-version: ['3.10', '3.11', '3.12']
11
+ python-version: ['3.11', '3.12', '3.13']
12
12
 
13
13
  steps:
14
14
  - name: Checkout
@@ -85,7 +85,8 @@ TOPLEVEL_JSON_FILES := $(shell ls -l ./*json | awk '{print $$9}')
85
85
  TAXCALC_JSON_FILES := $(shell ls -l ./taxcalc/*json | awk '{print $$9}')
86
86
  TESTS_JSON_FILES := $(shell ls -l ./taxcalc/tests/*json | awk '{print $$9}')
87
87
  PYLINT_DISABLE = locally-disabled,duplicate-code,cyclic-import
88
- PYLINT_OPTIONS = --disable=$(PYLINT_DISABLE) --score=no --jobs=4
88
+ PYLINT_OPTIONS = --disable=$(PYLINT_DISABLE) --score=no --jobs=4 \
89
+ --check-quote-consistency=yes
89
90
  EXCLUDED_PATHS = docs,taxcalc/validation
90
91
 
91
92
  .PHONY=cstest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxcalc
3
- Version: 5.1.0
3
+ Version: 5.3.0
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
@@ -12,9 +12,9 @@ Classifier: License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
@@ -36,7 +36,7 @@ Dynamic: summary
36
36
  | | |
37
37
  | --- | --- |
38
38
  | Org | [![PSL cataloged](https://img.shields.io/badge/PSL-cataloged-a0a0a0.svg)](https://www.PSLmodels.org) [![OS License: CCO-1.0](https://img.shields.io/badge/OS%20License-CCO%201.0-yellow)](https://github.com/PSLmodels/Tax-Calculator/blob/master/LICENSE) [![Jupyter Book Badge](https://jupyterbook.org/badge.svg)](https://pslmodels.github.io/Tax-Calculator/) |
39
- | Package | [![Python 3.10](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3108/) [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/downloads/release/python-3118/) [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3121/) [![PyPI Latest Release](https://img.shields.io/pypi/v/taxcalc.svg)](https://pypi.org/project/taxcalc/) [![PyPI Downloads](https://img.shields.io/pypi/dm/taxcalc.svg?label=PyPI%20downloads)](https://pypi.org/project/taxcalc/) [![Anaconda](https://img.shields.io/conda/dn/conda-forge/taxcalc?color=brightgreen&label=downloads&logo=conda-forge)](https://anaconda.org/conda-forge/taxcalc)|
39
+ | Package | [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/downloads/release/python-3118/) [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3121/) [![Python 3.13](https://img.shields.io/badge/python-3.13-blue.svg)](https://www.python.org/downloads/release/python-3131/) [![PyPI Latest Release](https://img.shields.io/pypi/v/taxcalc.svg)](https://pypi.org/project/taxcalc/) [![PyPI Downloads](https://img.shields.io/pypi/dm/taxcalc.svg?label=PyPI%20downloads)](https://pypi.org/project/taxcalc/) [![Anaconda](https://img.shields.io/conda/dn/conda-forge/taxcalc?color=brightgreen&label=downloads&logo=conda-forge)](https://anaconda.org/conda-forge/taxcalc)|
40
40
  | Testing | ![example event parameter](https://github.com/PSLmodels/Tax-Calculator/actions/workflows/build_and_test.yml/badge.svg?branch=master) ![example event parameter](https://github.com/PSLmodels/Tax-Calculator/actions/workflows/deploy_jupyterbook.yml/badge.svg?branch=master) [![Codecov](https://codecov.io/gh/PSLmodels/Tax-Calculator/branch/master/graph/badge.svg)](https://codecov.io/gh/PSLmodels/Tax-Calculator) |
41
41
 
42
42
 
@@ -57,6 +57,3 @@ 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.
@@ -1,7 +1,7 @@
1
1
  | | |
2
2
  | --- | --- |
3
3
  | Org | [![PSL cataloged](https://img.shields.io/badge/PSL-cataloged-a0a0a0.svg)](https://www.PSLmodels.org) [![OS License: CCO-1.0](https://img.shields.io/badge/OS%20License-CCO%201.0-yellow)](https://github.com/PSLmodels/Tax-Calculator/blob/master/LICENSE) [![Jupyter Book Badge](https://jupyterbook.org/badge.svg)](https://pslmodels.github.io/Tax-Calculator/) |
4
- | Package | [![Python 3.10](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3108/) [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/downloads/release/python-3118/) [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3121/) [![PyPI Latest Release](https://img.shields.io/pypi/v/taxcalc.svg)](https://pypi.org/project/taxcalc/) [![PyPI Downloads](https://img.shields.io/pypi/dm/taxcalc.svg?label=PyPI%20downloads)](https://pypi.org/project/taxcalc/) [![Anaconda](https://img.shields.io/conda/dn/conda-forge/taxcalc?color=brightgreen&label=downloads&logo=conda-forge)](https://anaconda.org/conda-forge/taxcalc)|
4
+ | Package | [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/downloads/release/python-3118/) [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3121/) [![Python 3.13](https://img.shields.io/badge/python-3.13-blue.svg)](https://www.python.org/downloads/release/python-3131/) [![PyPI Latest Release](https://img.shields.io/pypi/v/taxcalc.svg)](https://pypi.org/project/taxcalc/) [![PyPI Downloads](https://img.shields.io/pypi/dm/taxcalc.svg?label=PyPI%20downloads)](https://pypi.org/project/taxcalc/) [![Anaconda](https://img.shields.io/conda/dn/conda-forge/taxcalc?color=brightgreen&label=downloads&logo=conda-forge)](https://anaconda.org/conda-forge/taxcalc)|
5
5
  | Testing | ![example event parameter](https://github.com/PSLmodels/Tax-Calculator/actions/workflows/build_and_test.yml/badge.svg?branch=master) ![example event parameter](https://github.com/PSLmodels/Tax-Calculator/actions/workflows/deploy_jupyterbook.yml/badge.svg?branch=master) [![Codecov](https://codecov.io/gh/PSLmodels/Tax-Calculator/branch/master/graph/badge.svg)](https://codecov.io/gh/PSLmodels/Tax-Calculator) |
6
6
 
7
7
 
@@ -22,6 +22,3 @@ 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.
@@ -8,7 +8,7 @@ build:
8
8
 
9
9
  requirements:
10
10
  build:
11
- - "python>=3.10, <3.13"
11
+ - "python>=3.11, <3.14"
12
12
  - "numpy>=1.26"
13
13
  - "pandas>=2.2"
14
14
  - "bokeh>=3.7"
@@ -19,7 +19,7 @@ requirements:
19
19
  - behresp
20
20
 
21
21
  run:
22
- - "python>=3.10, <3.13"
22
+ - "python>=3.11, <3.14"
23
23
  - "numpy>=1.26"
24
24
  - "pandas>=2.2"
25
25
  - "bokeh>=3.7"
@@ -3,8 +3,66 @@ Release history
3
3
  Go [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclosed)
4
4
  for a complete commit history.
5
5
 
6
+ 2025-09-19 Release 5.3.0
7
+ ------------------------
8
+ (last merged pull request is
9
+ [#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957))
10
+
11
+ **This is an enhancement release.**
12
+
13
+ **API Changes**
14
+
15
+ **New Features**
16
+ - Update new PUF weights and ratios files.
17
+ [[#2925](https://github.com/PSLmodels/Tax-Calculator/pull/2925) by
18
+ Bodi Yang], from the update in [[TaxData PR #452](https://github.com/PSLmodels/
19
+ taxdata/pull/452) by Bodi Yang]
20
+
21
+ Note: PUF users are required to produce new `puf.csv` file from TaxData repository and replace the old file in the Tax-Calculator directory.
22
+ Correct usage: Tax-Calculator >= 5.3.0 versions are compatible with the newly produced `puf.csv` file; Tax-Calculator <= 5.2.0 versions are compatible with the previous `puf.csv` file
23
+
24
+ - Make `FST_AGI_thd` parameters to be non inflation-indexed
25
+ [[#2951](https://github.com/PSLmodels/Tax-Calculator/pull/2951) by
26
+ Martin Holmer]
27
+
28
+ - Add support for Python 3.13
29
+ [[#2953](https://github.com/PSLmodels/Tax-Calculator/pull/2953) by
30
+ Martin Holmer]
31
+
32
+ - Add tests for consistent quote style
33
+ [[#2954](https://github.com/PSLmodels/Tax-Calculator/pull/2954) by
34
+ Martin Holmer]
35
+
36
+ - Allow CLI --dumpvars DUMPVARS to be the ALL string
37
+ [[#2956](https://github.com/PSLmodels/Tax-Calculator/pull/2956) by
38
+ Martin Holmer]
39
+
40
+ - Add documentation on using sub-national TMD weights with CLI tool
41
+ [[#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957) by
42
+ Martin Holmer]
43
+
44
+
45
+
46
+ 2025-08-08 Release 5.2.0
47
+ ------------------------
48
+ (last merged pull request is
49
+ [#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944))
50
+
51
+ **This is an enhancement release.**
52
+
53
+ **API Changes**
54
+
55
+ **New Features**
56
+ - Make OBBBA reform be current-law policy in several PRs described in
57
+ [issue
58
+ 2926](https://github.com/PSLmodels/Tax-Calculator/issues/2926) by
59
+ Martin Holmer
60
+ - Extend CPS and PUF aggregate tests through 2035
61
+ [[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944) by
62
+ Martin Holmer]
63
+
6
64
 
7
- 2025-07-23 Release 5.1.0
65
+ 2025-07-22 Release 5.1.0
8
66
  ------------------------
9
67
  (last merged pull request is
10
68
  [#2933](https://github.com/PSLmodels/Tax-Calculator/pull/2933))
@@ -20,10 +20,6 @@ In the top-level Tax-Calculator directory, do the following:
20
20
 
21
21
  --> run `python update_pcl.py` [to update policy_current_law.json if needed]
22
22
 
23
- --> run `python ppp.py` [to update policy_current_law.json if needed]
24
-
25
- --> run `python extend_tcja.py > ext.json` [to update reforms/ext.json]
26
-
27
23
  --> run `make cstest` [to confirm project coding style is being followed]
28
24
 
29
25
  --> run `make pytest-all` [or `pytest -m pre_release -n4` in taxcalc subdir]
@@ -54,7 +54,7 @@ cross-model validation work with NBER's TAXSIM-35 model is described
54
54
 
55
55
  ## Latest release
56
56
 
57
- {doc}`5.1.0 (2025-07-23) <about/releases>`
57
+ {doc}`5.3.0 (2025-09-19) <about/releases>`
58
58
 
59
59
  If you are already using Tax-Calculator, upgrade using the following command:
60
60
  ```
@@ -83,4 +83,4 @@ If you wish to provide a link to Tax-Calculator, the preferred URL is:
83
83
  `https://PSLmodels.github.io/Tax-Calculator`.
84
84
  Additionally, we strongly recommend that you describe the input data used,
85
85
  and provide a link to the materials required to replicate your analysis or,
86
- at least, note that those materials are available upon request.
86
+ at least, note that those materials are available upon request.
@@ -0,0 +1,10 @@
1
+ {
2
+ "policy": {
3
+ // raise personal exemption amount and index in subsequent years
4
+ "II_em": {"2020": 1000},
5
+ // raise non-AMT tax rates in the top three brackets
6
+ "II_rt5": {"2020": 0.36},
7
+ "II_rt6": {"2020": 0.39},
8
+ "II_rt7": {"2020": 0.41}
9
+ }
10
+ }
@@ -61,7 +61,7 @@ file.
61
61
 
62
62
  The [tax-microdata
63
63
  repository](https://github.com/PSLmodels/tax-microdata-benchmarking)
64
- produces an input variables file (`tmd.csv.gz`), a national weights
64
+ produces an input variables file (`tmd.csv.gz`), a **national** weights
65
65
  file (`tmd_weights.csv.gz`), and a variable growth factors file
66
66
  (`tmd_growfactors.csv`) that can be used with the Tax-Calculator
67
67
  package beginning with the 3.6.0 release. The TMD files are available
@@ -77,6 +77,41 @@ Tax-Calculator in two ways:
77
77
  - with the **CLI tool**, `tc`, when the three TMD files are all in
78
78
  the same folder and the `tmd.csv.gz` file has been unzipped.
79
79
 
80
+ The [tax-microdata
81
+ repository](https://github.com/PSLmodels/tax-microdata-benchmarking)
82
+ also produces state and Congressional district weights files that can
83
+ be used to estimate federal taxes for various sub-national areas. The
84
+ easiest way to produce sub-national federal tax estimates is to supply
85
+ the **CLI tool** with the value of an environmental variable
86
+ (`TMD_AREA`) that indicates the sub-national area. So, for example,
87
+ if you have the New Mexico state weights in the
88
+ `nm_tmd_weights.csv.gz` file, put that file in the folder that
89
+ contains the three national TMD files described above. Then, execute
90
+ this command for tabular output under 2024 current-law policy:
91
+ ```
92
+ (taxcalc-dev) myruns> TMD_AREA=nm tc tmd.csv 2024 --exact --tables
93
+ Read input data for 2021; input data were extrapolated to 2024
94
+ Write tabular output to file tmd_nm-24-#-#-#.tables
95
+ Execution time is 8.2 seconds
96
+ (taxcalc-dev) myruns> awk '$1~/Ret/||$1~/A/' tmd_nm-24-#-#-#.tables | head -2
97
+ Returns ExpInc IncTax PayTax LSTax AllTax
98
+ A 1.17 87.0 7.2 6.9 0.0 14.1
99
+ ```
100
+
101
+ Or for the first Congressional district in New Mexico, put the
102
+ `nm01_tmd_weights.csv.gz` file in the folder with the other TMD
103
+ files and execute this command:
104
+ ```
105
+ (taxcalc-dev) myruns> TMD_AREA=nm01 tc tmd.csv 2024 --exact --tables
106
+ Read input data for 2021; input data were extrapolated to 2024
107
+ Write tabular output to file tmd_nm01-24-#-#-#.tables
108
+ Execution time is 8.3 seconds
109
+ (taxcalc-dev) myruns> awk '$1~/Ret/||$1~/A/' tmd_nm01-24-#-#-#.tables | head -2
110
+ Returns ExpInc IncTax PayTax LSTax AllTax
111
+ A 0.40 31.9 2.8 2.5 0.0 5.3
112
+ ```
113
+
114
+
80
115
  ## Using other data with Tax-Calculator
81
116
 
82
117
  Using other data sources with Tax-Calculator is possible. Users can
@@ -1,4 +1,14 @@
1
- # TCJA after 2025
1
+ # OBBBA: TCJA after 2025
2
+
3
+ TCJA was replaced by OBBBA when the latter was signed into law on July
4
+ 4, 2025. Beginning with Tax-Calculator 5.2.0, OBBBA is current-law
5
+ policy. How the OBBBA changes were implemented as current-law policy
6
+ is described in detail in closed [issue
7
+ 2926](https://github.com/PSLmodels/Tax-Calculator/issues/2926).
8
+
9
+ ----------------------------------------------------------------------
10
+
11
+ **THE FOLLOWING TEXT IS OF HISTORICAL INTEREST ONLY:**
2
12
 
3
13
  Many provisions of the TCJA are temporary and are scheduled to end
4
14
  after 2025 under current-law policy. Tax policy parameters that are
@@ -331,4 +341,3 @@ added to the `policy_current_law.json` file thereby changing the
331
341
  Beginning with the 4.5.0 version, Tax-Calculator incorporates the
332
342
  January 2025 CBO economic projection and contains historical tax
333
343
  policy parameter values through 2025.
334
-
@@ -2,7 +2,7 @@ name: taxcalc-dev
2
2
  channels:
3
3
  - conda-forge
4
4
  dependencies:
5
- - "python>=3.10, <3.13"
5
+ - "python>=3.11, <3.14"
6
6
  - "numpy>=1.26"
7
7
  - "pandas>=2.2"
8
8
  - "bokeh>=3.7"
@@ -7,8 +7,8 @@ markers =
7
7
  local
8
8
  benefits
9
9
  compatible_data
10
+ cps
10
11
  cpscsv_agg
11
- extend_tcja
12
12
  itmded_vars
13
13
  pufcsv_agg
14
14
  qbid
@@ -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 = "5.1.0"
10
+ VERSION = "5.3.0"
11
11
 
12
12
  config = {
13
13
  "description": "Tax-Calculator",
@@ -35,9 +35,9 @@ config = {
35
35
  "Operating System :: OS Independent",
36
36
  "Programming Language :: Python",
37
37
  "Programming Language :: Python :: 3",
38
- "Programming Language :: Python :: 3.10",
39
38
  "Programming Language :: Python :: 3.11",
40
39
  "Programming Language :: Python :: 3.12",
40
+ "Programming Language :: Python :: 3.13",
41
41
  "Topic :: Software Development :: Libraries :: Python Modules",
42
42
  ],
43
43
  "tests_require": ["pytest"],
@@ -14,6 +14,6 @@ from taxcalc.taxcalcio import *
14
14
  from taxcalc.utils import *
15
15
  from taxcalc.cli import *
16
16
 
17
- __version__ = '5.1.0'
18
- __min_python3_version__ = 10
19
- __max_python3_version__ = 12
17
+ __version__ = '5.3.0'
18
+ __min_python3_version__ = 11
19
+ __max_python3_version__ = 13
@@ -943,8 +943,9 @@ def ItemDed(e17500, e18400, e18500, e19200,
943
943
  ID_Medical_c, ID_StateLocalTax_c, ID_RealEstate_c,
944
944
  ID_InterestPaid_c, ID_Charity_c, ID_Casualty_c,
945
945
  ID_Miscellaneous_c, ID_AllTaxes_c, ID_AllTaxes_hc,
946
+ ID_AllTaxes_c_ps, ID_AllTaxes_c_po_rate, ID_AllTaxes_c_po_floor,
946
947
  ID_StateLocalTax_crt, ID_RealEstate_crt, ID_Charity_f,
947
- ID_reduction_salt_rate, ID_reduction_other_rate):
948
+ ID_reduction_rate):
948
949
  """
949
950
  Calculates itemized deductions, Form 1040, Schedule A.
950
951
 
@@ -1057,10 +1058,16 @@ def ItemDed(e17500, e18400, e18500, e19200,
1057
1058
  Ceiling on the amount of miscellaneous expense deduction
1058
1059
  allowed (dollars)
1059
1060
  ID_AllTaxes_c: list
1060
- Ceiling on the amount of state and local income, stales, and
1061
+ Cap on the amount of state and local income, sales, and
1061
1062
  real estate deductions allowed (dollars)
1062
1063
  ID_AllTaxes_hc: float
1063
1064
  State and local income, sales, and real estate tax deduciton haircut
1065
+ ID_AllTaxes_c_ps: float
1066
+ AGI level above which ID_AllTaxes_c is reduced
1067
+ ID_AllTaxes_c_po_rate: float
1068
+ ID_AllTaxes_c reduction rate when AGI is above ID_AllTaxes_c_ps
1069
+ ID_AllTaxes_c_po_floor: float
1070
+ Floor below which ID_AllTaxes_c cannot be reduced
1064
1071
  ID_StateLocalTax_crt: float
1065
1072
  Ceiling (as decimal fraction of AGI) for the combination of all
1066
1073
  state and local income and sales tax deductions
@@ -1069,10 +1076,8 @@ def ItemDed(e17500, e18400, e18500, e19200,
1069
1076
  state, local, and foreign real estate tax deductions
1070
1077
  ID_Charity_f: list
1071
1078
  Floor on the amount of charity expense deduction allowed (dollars)
1072
- ID_reduction_salt_rate: float
1073
- OBBBA reduction rate for SALT deductions
1074
- ID_reduction_other_rate: float
1075
- OBBBA reduction rate for other deductions
1079
+ ID_reduction_rate: float
1080
+ OBBBA reduction rate for all itemized deductions
1076
1081
 
1077
1082
  Returns
1078
1083
  -------
@@ -1115,7 +1120,12 @@ def ItemDed(e17500, e18400, e18500, e19200,
1115
1120
  c18400 = min(c18400, ID_StateLocalTax_crt * max(c00100, 0.0001))
1116
1121
  c18500 = min(c18500, ID_RealEstate_crt * max(c00100, 0.0001))
1117
1122
  c18300 = (c18400 + c18500) * (1. - ID_AllTaxes_hc)
1118
- c18300 = min(c18300, ID_AllTaxes_c[MARS - 1])
1123
+ cap = ID_AllTaxes_c[MARS - 1]
1124
+ if posagi > ID_AllTaxes_c_ps[MARS - 1]:
1125
+ excess_agi = posagi - ID_AllTaxes_c_ps[MARS - 1]
1126
+ cap = max(0., cap - excess_agi * ID_AllTaxes_c_po_rate)
1127
+ cap = max(cap, ID_AllTaxes_c_po_floor[MARS - 1])
1128
+ c18300 = min(c18300, cap)
1119
1129
  # Interest paid
1120
1130
  c19200 = e19200 * (1. - ID_InterestPaid_hc)
1121
1131
  c19200 = min(c19200, ID_InterestPaid_c[MARS - 1])
@@ -1154,16 +1164,11 @@ def ItemDed(e17500, e18400, e18500, e19200,
1154
1164
  # OBBBA limitation on total itemized deductions
1155
1165
  # (no attempt to adjust c04470 components for limitation)
1156
1166
  reduction = 0.
1157
- if ID_reduction_salt_rate > 0. or ID_reduction_other_rate > 0.:
1158
- assert c21040 <= 0.0, "Pease and OBBBA cannot both be in effect"
1167
+ if ID_reduction_rate > 0.:
1168
+ assert c21040 <= 0.0, 'Pease and OBBBA cannot both be in effect'
1159
1169
  tincome = max(0., c00100 - c04600)
1160
1170
  texcess = max(0., tincome - II_brk6[MARS - 1])
1161
- smaller_salt = min(c18300, texcess)
1162
- salt_reduction = ID_reduction_salt_rate * smaller_salt
1163
- other_deds = max(0, c04470 - c18300)
1164
- smaller_other = min(other_deds, texcess)
1165
- other_reduction = ID_reduction_other_rate * smaller_other
1166
- reduction = salt_reduction + other_reduction
1171
+ reduction = ID_reduction_rate * texcess
1167
1172
  c04470 = max(0., c04470 - reduction)
1168
1173
  # Cap total itemized deductions
1169
1174
  # (no attempt to adjust c04470 components for limitation)
@@ -2197,7 +2202,7 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800, exact, c00100,
2197
2202
  )
2198
2203
  # ... second phase-down from CDCC_po1_rate_min to CDCC_po2_rate_min
2199
2204
  ps2 = CDCC_ps2[MARS - 1]
2200
- assert ps2 >= ps1, "CDCC_ps2 must be no less than CDCC_ps1"
2205
+ assert ps2 >= ps1, 'CDCC_ps2 must be no less than CDCC_ps1'
2201
2206
  if c00100 > ps2:
2202
2207
  steps_fractional = (c00100 - ps2) / CDCC_po2_step_size[MARS - 1]
2203
2208
  if exact == 1: # exact calculation as on tax forms
@@ -282,7 +282,7 @@ class Calculator():
282
282
  """
283
283
  if param_value is None:
284
284
  val = getattr(self.__policy, param_name)
285
- if param_name.startswith("_"):
285
+ if param_name.startswith('_'):
286
286
  return val
287
287
  return val[0] # drop down a dimension.
288
288
  setattr(self.__policy, param_name, param_value)
@@ -1214,11 +1214,11 @@ class Calculator():
1214
1214
  # ... write optional param-vector-index line
1215
1215
  if isinstance(pval, list):
1216
1216
  labels = paramtools.consistent_labels(
1217
- [mdata_base[pname]["value"][0]]
1217
+ [mdata_base[pname]['value'][0]]
1218
1218
  )
1219
1219
  label = None
1220
1220
  for _label in labels:
1221
- if _label not in ("value", "year"):
1221
+ if _label not in ('value', 'year'):
1222
1222
  label = _label
1223
1223
  break
1224
1224
  if label:
@@ -96,23 +96,23 @@ def cli_tc_main():
96
96
  '"stair-step" provisions in the tax law that '
97
97
  'complicate marginal-tax-rate calculations.'),
98
98
  default=False,
99
- action="store_true")
99
+ action='store_true')
100
100
  parser.add_argument('--params',
101
101
  help=('optional flag that causes policy parameter '
102
102
  'values for baseline and reform to be written '
103
103
  'to separate text files.'),
104
104
  default=False,
105
- action="store_true")
105
+ action='store_true')
106
106
  parser.add_argument('--tables',
107
107
  help=('optional flag that causes distributional '
108
108
  'tables to be written to a text file.'),
109
109
  default=False,
110
- action="store_true")
110
+ action='store_true')
111
111
  parser.add_argument('--graphs',
112
112
  help=('optional flag that causes graphs to be written '
113
113
  'to HTML files for viewing in browser.'),
114
114
  default=False,
115
- action="store_true")
115
+ action='store_true')
116
116
  parser.add_argument('--dumpdb',
117
117
  help=('optional flag that causes TAXYEAR variable '
118
118
  'values for each tax-unit under both '
@@ -121,7 +121,7 @@ def cli_tc_main():
121
121
  'included in the database are controlled by '
122
122
  'the --dumpvars option).'),
123
123
  default=False,
124
- action="store_true")
124
+ action='store_true')
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 '
@@ -129,7 +129,9 @@ def cli_tc_main():
129
129
  'a minimal set of variables. Valid variable '
130
130
  'names include all variables in the '
131
131
  'records_variables.json file plus mtr_itax and '
132
- 'mtr_ptax (MTRs wrt taxpayer earnings).'),
132
+ 'mtr_ptax (MTRs wrt taxpayer earnings). If '
133
+ 'DUMPVARS is ALL, then all valid variable names '
134
+ 'are included in the dump database.'),
133
135
  default=None)
134
136
  parser.add_argument('--runid', metavar='N',
135
137
  help=('N is a positive integer run id that is used '
@@ -142,23 +144,23 @@ def cli_tc_main():
142
144
  help=('optional flag that suppresses messages about '
143
145
  'input and output actions.'),
144
146
  default=False,
145
- action="store_true")
147
+ action='store_true')
146
148
  parser.add_argument('--test',
147
149
  help=('optional flag that conducts installation '
148
150
  'test, writes test result to stdout, '
149
151
  'and quits leaving the test-related files.'),
150
152
  default=False,
151
- action="store_true")
153
+ action='store_true')
152
154
  parser.add_argument('--version',
153
155
  help=('optional flag that writes Tax-Calculator '
154
156
  'release version to stdout and quits.'),
155
157
  default=False,
156
- action="store_true")
158
+ action='store_true')
157
159
  parser.add_argument('--usage',
158
160
  help=('optional flag that writes short usage '
159
161
  'reminder to stdout and quits.'),
160
162
  default=False,
161
- action="store_true")
163
+ action='store_true')
162
164
  args = parser.parse_args()
163
165
  using_error_file = args.silent and args.runid != 0
164
166
  efilename = f'run{args.runid}.errors'
@@ -246,7 +248,9 @@ def cli_tc_main():
246
248
  # specify dumpvars_str from args.dumpvars file
247
249
  dumpvars_str = ''
248
250
  if args.dumpvars:
249
- if os.path.exists(args.dumpvars):
251
+ if args.dumpvars == 'ALL':
252
+ dumpvars_str = 'ALL'
253
+ elif os.path.exists(args.dumpvars):
250
254
  with open(args.dumpvars, 'r', encoding='utf-8') as dfile:
251
255
  dumpvars_str = dfile.read()
252
256
  else:
@@ -109,7 +109,7 @@ class Data():
109
109
  self._read_weights(weights)
110
110
  # ... weights must be same size as data
111
111
  if self.array_length > len(self.WT.index):
112
- raise ValueError("Data has more records than weights.")
112
+ raise ValueError('Data has more records than weights.')
113
113
  if self.array_length < len(self.WT.index):
114
114
  # scale-up sub-sample weights by year-specific factor
115
115
  sum_full_weights = self.WT.sum()
@@ -39,7 +39,7 @@ def id_wrapper(*dec_args, **dec_kwargs): # pylint: disable=unused-argument
39
39
  return wrap
40
40
 
41
41
 
42
- if DO_JIT is False or 'NOTAXCALCJIT' in os.environ:
42
+ if DO_JIT is False or "NOTAXCALCJIT" in os.environ:
43
43
  JIT = id_wrapper
44
44
  else:
45
45
  JIT = numba.jit
@@ -89,7 +89,8 @@ def create_apply_function_string(sigout, sigin, parameters):
89
89
  out_args = ["x_" + str(i) for i in range(0, len(sigout))]
90
90
  in_args = ["x_" + str(i) for i in range(len(sigout), total_len)]
91
91
 
92
- fstr.write(f"def ap_func({','.join(out_args + in_args)}):\n")
92
+ all_args = ",".join(out_args + in_args)
93
+ fstr.write(f"def ap_func({all_args}):\n")
93
94
  fstr.write(" for i in range(len(x_0)):\n")
94
95
  out_index = [x + "[i]" for x in out_args]
95
96
  in_index = []
@@ -194,8 +195,8 @@ def make_apply_function(func, out_args, in_args, parameters,
194
195
  eval(func_code, # pylint: disable=eval-used
195
196
  {"jitted_f": jitted_f}, fakeglobals)
196
197
  if do_jit:
197
- return JIT(**kwargs)(fakeglobals['ap_func'])
198
- return fakeglobals['ap_func']
198
+ return JIT(**kwargs)(fakeglobals["ap_func"])
199
+ return fakeglobals["ap_func"]
199
200
 
200
201
 
201
202
  def apply_jit(dtype_sig_out, dtype_sig_in, parameters=None, **kwargs):
@@ -256,7 +257,7 @@ def iterate_jit(parameters=None, **kwargs):
256
257
  # Get the input arguments from the function
257
258
  in_args = inspect.getfullargspec(func).args
258
259
  # Get the numba.jit arguments
259
- jit_args_list = inspect.getfullargspec(JIT).args + ['nopython']
260
+ jit_args_list = inspect.getfullargspec(JIT).args + ["nopython"]
260
261
  kwargs_for_jit = {}
261
262
  for key, val in kwargs.items():
262
263
  if key in jit_args_list:
@@ -280,7 +281,7 @@ def iterate_jit(parameters=None, **kwargs):
280
281
  # the AST of the function
281
282
  grn = GetReturnNode()
282
283
  all_out_args = None
283
- for node in ast.walk(ast.parse(''.join(src))):
284
+ for node in ast.walk(ast.parse("".join(src))):
284
285
  all_out_args = grn.visit(node)
285
286
  if all_out_args:
286
287
  break
@@ -301,7 +302,7 @@ def iterate_jit(parameters=None, **kwargs):
301
302
  in iterate_jit decorator.
302
303
  """
303
304
  # os TESTING environment only accepts string arguments
304
- if os.getenv('TESTING') == 'True':
305
+ if os.getenv("TESTING") == "True":
305
306
  return func(*args, **kwargs)
306
307
 
307
308
  in_arrays = []
@@ -321,7 +322,7 @@ def iterate_jit(parameters=None, **kwargs):
321
322
  fakeglobals = {}
322
323
  eval(func_code, # pylint: disable=eval-used
323
324
  {"applied_f": applied_jitted_f}, fakeglobals)
324
- high_level_fn = fakeglobals['hl_func']
325
+ high_level_fn = fakeglobals["hl_func"]
325
326
  ans = high_level_fn(*args, **kwargs)
326
327
  return ans
327
328
 
@@ -35,7 +35,8 @@ class GrowFactors():
35
35
  -----
36
36
  Typical usage is "gfactor = GrowFactors()", which produces an object
37
37
  containing baseline growth factors in the GrowFactors.FILE_NAME file,
38
- which is for use with puf and cps data from the taxdata repository.
38
+ which is used to extrapolate cps and puf data from the taxdata repository,
39
+ and is used to index policy parameters.
39
40
  """
40
41
 
41
42
  PACKAGE_FILE_NAMES = ['growfactors.csv']