taxcalc 5.2.0__tar.gz → 6.0.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 (246) hide show
  1. {taxcalc-5.2.0 → taxcalc-6.0.0}/.github/workflows/build_and_test.yml +3 -3
  2. {taxcalc-5.2.0 → taxcalc-6.0.0}/.gitignore +5 -3
  3. {taxcalc-5.2.0 → taxcalc-6.0.0}/MANIFEST.in +0 -2
  4. {taxcalc-5.2.0 → taxcalc-6.0.0}/Makefile +14 -14
  5. {taxcalc-5.2.0/taxcalc.egg-info → taxcalc-6.0.0}/PKG-INFO +3 -6
  6. {taxcalc-5.2.0 → taxcalc-6.0.0}/README.md +1 -4
  7. {taxcalc-5.2.0 → taxcalc-6.0.0}/conda.recipe/meta.yaml +2 -2
  8. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/about/releases.md +52 -0
  9. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/contributing/RELEASING.md +3 -5
  10. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/contributing/contributor_guide.md +5 -5
  11. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/contributing/testing.md +24 -43
  12. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/index.md +2 -2
  13. taxcalc-6.0.0/docs/recipes/_static/reformA.json +10 -0
  14. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe00.md +1 -10
  15. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/usage/data.md +50 -17
  16. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/usage/overview.md +21 -20
  17. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/usage/tcja_after_2025.md +11 -2
  18. {taxcalc-5.2.0 → taxcalc-6.0.0}/environment.yml +1 -1
  19. {taxcalc-5.2.0 → taxcalc-6.0.0}/pytest.ini +2 -6
  20. {taxcalc-5.2.0 → taxcalc-6.0.0}/setup.py +2 -2
  21. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/__init__.py +3 -3
  22. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/calcfunctions.py +2 -2
  23. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/calculator.py +4 -4
  24. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/cli/tc.py +16 -19
  25. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/data.py +2 -3
  26. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/decorators.py +9 -8
  27. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/growfactors.py +2 -1
  28. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/policy.py +6 -23
  29. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/policy_current_law.json +31 -631
  30. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/records.py +78 -82
  31. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/records_variables.json +106 -106
  32. taxcalc-6.0.0/taxcalc/reforms/ARPA.out.csv +10 -0
  33. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/taxcalcio.py +101 -77
  34. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/conftest.py +20 -15
  35. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +24 -24
  36. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/puf_var_wght_means_by_year.csv +11 -11
  37. taxcalc-6.0.0/taxcalc/tests/pufcsv_agg_expect.csv +26 -0
  38. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/pufcsv_mtr_expect.txt +21 -21
  39. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/reforms.json +3 -1
  40. taxcalc-6.0.0/taxcalc/tests/reforms_expect.csv +61 -0
  41. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_4package.py +8 -9
  42. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_calculator.py +55 -18
  43. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_consumption.py +2 -2
  44. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_cpscsv.py +2 -24
  45. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_data.py +11 -3
  46. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_decorators.py +57 -52
  47. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_growdiff.py +2 -2
  48. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_parameters.py +101 -53
  49. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_policy.py +154 -154
  50. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_records.py +144 -9
  51. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_reforms.py +104 -104
  52. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_taxcalcio.py +13 -62
  53. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/utils.py +3 -3
  54. {taxcalc-5.2.0 → taxcalc-6.0.0/taxcalc.egg-info}/PKG-INFO +3 -6
  55. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc.egg-info/SOURCES.txt +0 -9
  56. taxcalc-5.2.0/docs/recipes/_static/reformA.json +0 -15
  57. taxcalc-5.2.0/extend_tcja.py +0 -163
  58. taxcalc-5.2.0/ppp.py +0 -132
  59. taxcalc-5.2.0/taxcalc/puf_ratios.csv +0 -26
  60. taxcalc-5.2.0/taxcalc/puf_weights.csv.gz +0 -0
  61. taxcalc-5.2.0/taxcalc/reforms/ARPA.out.csv +0 -10
  62. taxcalc-5.2.0/taxcalc/reforms/clp.out.csv +0 -10
  63. taxcalc-5.2.0/taxcalc/tests/pufcsv_agg_expect.csv +0 -26
  64. taxcalc-5.2.0/taxcalc/tests/reforms_expect.csv +0 -61
  65. taxcalc-5.2.0/taxcalc/tests/test_compare.py +0 -330
  66. taxcalc-5.2.0/taxcalc/tests/test_compatible_data.py +0 -334
  67. taxcalc-5.2.0/taxcalc/tests/test_puf_var_stats.py +0 -194
  68. taxcalc-5.2.0/taxcalc/tests/test_pufcsv.py +0 -328
  69. {taxcalc-5.2.0 → taxcalc-6.0.0}/.coveragerc +0 -0
  70. {taxcalc-5.2.0 → taxcalc-6.0.0}/.github/FUNDING.yml +0 -0
  71. {taxcalc-5.2.0 → taxcalc-6.0.0}/.github/workflows/check_jupyterbook.yml +0 -0
  72. {taxcalc-5.2.0 → taxcalc-6.0.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
  73. {taxcalc-5.2.0 → taxcalc-6.0.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
  74. {taxcalc-5.2.0 → taxcalc-6.0.0}/LICENSE +0 -0
  75. {taxcalc-5.2.0 → taxcalc-6.0.0}/PSL_catalog.json +0 -0
  76. {taxcalc-5.2.0 → taxcalc-6.0.0}/codecov.yml +0 -0
  77. {taxcalc-5.2.0 → taxcalc-6.0.0}/conda.recipe/bld.bat +0 -0
  78. {taxcalc-5.2.0 → taxcalc-6.0.0}/conda.recipe/build.sh +0 -0
  79. {taxcalc-5.2.0 → taxcalc-6.0.0}/csv_show.sh +0 -0
  80. {taxcalc-5.2.0 → taxcalc-6.0.0}/csv_vars.sh +0 -0
  81. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/PSL.svg +0 -0
  82. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/_config.yml +0 -0
  83. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/_static/atr.png +0 -0
  84. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/_static/mtr.png +0 -0
  85. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/_static/pch.png +0 -0
  86. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/_toc.yml +0 -0
  87. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/about/LICENSE.md +0 -0
  88. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/about/history.md +0 -0
  89. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/about/roadmap.md +0 -0
  90. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/calcfunctions.rst +0 -0
  91. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/calculator.rst +0 -0
  92. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/consumption.rst +0 -0
  93. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/data.rst +0 -0
  94. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/decorators.rst +0 -0
  95. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/growdiff.rst +0 -0
  96. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/growfactors.rst +0 -0
  97. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/parameters.rst +0 -0
  98. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/policy.rst +0 -0
  99. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/public_api.rst +0 -0
  100. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/records.rst +0 -0
  101. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/taxcalcio.rst +0 -0
  102. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/utils.rst +0 -0
  103. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/api/utilsprvt.rst +0 -0
  104. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/contributing/param_naming.md +0 -0
  105. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/contributing/pr_workflow.md +0 -0
  106. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/README.md +0 -0
  107. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/assumption_params.md +0 -0
  108. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/cli.md +0 -0
  109. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/index.md +0 -0
  110. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/input_vars.md +0 -0
  111. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/make/make_io_vars.py +0 -0
  112. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/make/make_params.py +0 -0
  113. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/make/make_uguide.py +0 -0
  114. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/output_vars.md +0 -0
  115. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/policy_params.md +0 -0
  116. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/python_interface.md +0 -0
  117. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/templates/assumption_params_template.md +0 -0
  118. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/templates/input_vars_template.md +0 -0
  119. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/templates/output_vars_template.md +0 -0
  120. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/guide/templates/policy_params_template.md +0 -0
  121. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/README.md +0 -0
  122. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/_static/reformB.json +0 -0
  123. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/_static/reformC.json +0 -0
  124. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/convert_all.sh +0 -0
  125. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/index.md +0 -0
  126. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe01.md +0 -0
  127. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe02.md +0 -0
  128. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe03.md +0 -0
  129. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe04.md +0 -0
  130. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
  131. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe05.md +0 -0
  132. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/md_src/recipe06.md +0 -0
  133. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe00.ipynb +0 -0
  134. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe01.ipynb +0 -0
  135. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe02.ipynb +0 -0
  136. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe03.ipynb +0 -0
  137. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe04.ipynb +0 -0
  138. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
  139. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe05.ipynb +0 -0
  140. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/recipes/recipe06.ipynb +0 -0
  141. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/usage/starting.md +0 -0
  142. {taxcalc-5.2.0 → taxcalc-6.0.0}/docs/use_cases.md +0 -0
  143. {taxcalc-5.2.0 → taxcalc-6.0.0}/gitpr +0 -0
  144. {taxcalc-5.2.0 → taxcalc-6.0.0}/gitpr.bat +0 -0
  145. {taxcalc-5.2.0 → taxcalc-6.0.0}/gitsync +0 -0
  146. {taxcalc-5.2.0 → taxcalc-6.0.0}/gitsync.bat +0 -0
  147. {taxcalc-5.2.0 → taxcalc-6.0.0}/pyproject.toml +0 -0
  148. {taxcalc-5.2.0 → taxcalc-6.0.0}/setup.cfg +0 -0
  149. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
  150. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/assumptions/README.md +0 -0
  151. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
  152. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/cli/__init__.py +0 -0
  153. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/conftest.py +0 -0
  154. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/consumption.json +0 -0
  155. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/consumption.py +0 -0
  156. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/cps.csv.gz +0 -0
  157. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/cps_weights.csv.gz +0 -0
  158. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/growdiff.json +0 -0
  159. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/growdiff.py +0 -0
  160. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/growfactors.csv +0 -0
  161. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/parameters.py +0 -0
  162. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/2017_law.json +0 -0
  163. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/2017_law.out.csv +0 -0
  164. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ARPA.json +0 -0
  165. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/BrownKhanna.json +0 -0
  166. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
  167. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/CARES.json +0 -0
  168. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/CARES.out.csv +0 -0
  169. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
  170. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
  171. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Larson2019.json +0 -0
  172. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
  173. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/README.md +0 -0
  174. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/REFORMS.md +0 -0
  175. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Renacci.json +0 -0
  176. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Renacci.out.csv +0 -0
  177. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
  178. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
  179. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/TCJA.json +0 -0
  180. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/TCJA.md +0 -0
  181. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/TCJA.out.csv +0 -0
  182. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Trump2016.json +0 -0
  183. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
  184. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Trump2017.json +0 -0
  185. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
  186. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
  187. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
  188. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
  189. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
  190. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
  191. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
  192. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
  193. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
  194. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/cases.csv +0 -0
  195. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ext.json +0 -0
  196. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
  197. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes0.json +0 -0
  198. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
  199. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes1.json +0 -0
  200. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
  201. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes2.json +0 -0
  202. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
  203. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes3.json +0 -0
  204. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
  205. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/benefits_expect.csv +0 -0
  206. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
  207. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
  208. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
  209. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_benefits.py +0 -0
  210. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_calcfunctions.py +0 -0
  211. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_growfactors.py +0 -0
  212. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_responses.py +0 -0
  213. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/tests/test_utils.py +0 -0
  214. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/utilsprvt.py +0 -0
  215. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
  216. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
  217. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/README.md +0 -0
  218. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
  219. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/README.md +0 -0
  220. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
  221. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
  222. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
  223. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
  224. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
  225. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
  226. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
  227. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
  228. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
  229. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
  230. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
  231. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
  232. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
  233. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
  234. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
  235. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
  236. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
  237. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
  238. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
  239. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
  240. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
  241. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc/validation/tests_35.sh +0 -0
  242. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc.egg-info/dependency_links.txt +0 -0
  243. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc.egg-info/entry_points.txt +0 -0
  244. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc.egg-info/requires.txt +0 -0
  245. {taxcalc-5.2.0 → taxcalc-6.0.0}/taxcalc.egg-info/top_level.txt +0 -0
  246. {taxcalc-5.2.0 → taxcalc-6.0.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
@@ -35,7 +35,7 @@ jobs:
35
35
  shell: bash -l {0}
36
36
  working-directory: ./
37
37
  run: |
38
- pytest -m 'not requires_pufcsv and not pre_release and not local' --cov=./ --cov-report=xml
38
+ pytest -m 'not requires_puf and not requires_tmd and not local' --cov=./ --cov-report=xml
39
39
 
40
40
  - name: Upload coverage to Codecov
41
41
  if: matrix.os == 'ubuntu-latest' && contains(github.repository, 'PSLmodels/Tax-Calculator')
@@ -13,9 +13,11 @@ read-the-docs/_build/
13
13
  # Mac OS X
14
14
  *.DS_Store
15
15
 
16
- # IRS-SOI PUF data file
17
- puf.csv
18
- tmd.csv
16
+ # Non-public IRS-SOI PUF and TMD data files
17
+ puf*csv*
18
+ puf*zip
19
+ *tmd*csv*
20
+ tmd*zip
19
21
 
20
22
  # Jupyter notebook checkpoints
21
23
  *.ipynb_checkpoints*
@@ -4,6 +4,4 @@ include taxcalc/cps_weights.csv.gz
4
4
  include taxcalc/growdiff.json
5
5
  include taxcalc/growfactors.csv
6
6
  include taxcalc/policy_current_law.json
7
- include taxcalc/puf_weights.csv.gz
8
- include taxcalc/puf_ratios.csv
9
7
  include taxcalc/records_variables.json
@@ -12,10 +12,8 @@ help:
12
12
  @echo "help : show help message"
13
13
  @echo "clean : remove .pyc files and local taxcalc package"
14
14
  @echo "package : build and install local package"
15
- @echo "pytest-cps : generate report for and cleanup after"
16
- @echo " pytest -m 'not requires_pufcsv and not pre_release'"
17
15
  @echo "pytest : generate report for and cleanup after"
18
- @echo " pytest -m 'not pre_release'"
16
+ @echo " pytest -m 'not requires_puf and not requires_tmd'"
19
17
  @echo "pytest-all : generate report for and cleanup after"
20
18
  @echo " pytest -m ''"
21
19
  @echo "tctest : generate report for and cleanup after"
@@ -24,6 +22,8 @@ help:
24
22
  @echo " tc --test when environment var NOTAXCALCJIT is set"
25
23
  @echo "cstest : generate coding-style errors using the"
26
24
  @echo " pycodestyle (nee pep8) and pylint tools"
25
+ @echo "idtest : generate report for and cleanup after executing"
26
+ @echo " taxcalc/cli/input_data_tests/tests.sh"
27
27
  @echo "coverage : generate test coverage report"
28
28
  @echo "git-sync : synchronize local, origin, and upstream Git repos"
29
29
  @echo "git-pr N=n : create local pr-n branch containing upstream PR"
@@ -36,7 +36,7 @@ clean:
36
36
 
37
37
  .PHONY=package
38
38
  package:
39
- @pip install -e .
39
+ @pip install -e . | tail -1
40
40
 
41
41
  define pytest-setup
42
42
  rm -f taxcalc/tests/reforms_actual_init
@@ -48,19 +48,13 @@ rm -f df-??-#-*
48
48
  rm -f tmp??????-??-#-tmp*
49
49
  endef
50
50
 
51
- .PHONY=pytest-cps
52
- pytest-cps: clean
53
- @$(pytest-setup)
54
- @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not requires_pufcsv and not pre_release"
55
- @$(pytest-cleanup)
56
-
57
51
  .PHONY=pytest
58
52
  pytest: clean
59
53
  @$(pytest-setup)
60
- @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not pre_release"
54
+ @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not requires_puf and not requires_tmd"
61
55
  @$(pytest-cleanup)
62
56
 
63
- .PHONY=pytest-all
57
+ .PHONY=pytest
64
58
  pytest-all: clean
65
59
  @$(pytest-setup)
66
60
  @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m ""
@@ -85,7 +79,8 @@ TOPLEVEL_JSON_FILES := $(shell ls -l ./*json | awk '{print $$9}')
85
79
  TAXCALC_JSON_FILES := $(shell ls -l ./taxcalc/*json | awk '{print $$9}')
86
80
  TESTS_JSON_FILES := $(shell ls -l ./taxcalc/tests/*json | awk '{print $$9}')
87
81
  PYLINT_DISABLE = locally-disabled,duplicate-code,cyclic-import
88
- PYLINT_OPTIONS = --disable=$(PYLINT_DISABLE) --score=no --jobs=4
82
+ PYLINT_OPTIONS = --disable=$(PYLINT_DISABLE) --score=no --jobs=4 \
83
+ --check-quote-consistency=yes
89
84
  EXCLUDED_PATHS = docs,taxcalc/validation
90
85
 
91
86
  .PHONY=cstest
@@ -96,11 +91,16 @@ cstest:
96
91
  @-pycodestyle --ignore=E501,E121 $(TESTS_JSON_FILES)
97
92
  @-pylint $(PYLINT_OPTIONS) --ignore-paths=$(EXCLUDED_PATHS) .
98
93
 
94
+ .PHONY=idtest
95
+ idtest: package
96
+ @echo "Executing taxcalc/cli/input_data_tests"
97
+ @cd taxcalc/cli/input_data_tests ; ./tests.sh
98
+
99
99
  define coverage-cleanup
100
100
  rm -f .coverage htmlcov/*
101
101
  endef
102
102
 
103
- COVMARK = "not requires_pufcsv and not pre_release"
103
+ COVMARK = "not requires_puf and not requires_tmd"
104
104
 
105
105
  OS := $(shell uname -s)
106
106
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxcalc
3
- Version: 5.2.0
3
+ Version: 6.0.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,6 +3,58 @@ 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-24 Release 6.0.0
7
+ ------------------------
8
+ (last merged pull request is
9
+ [#2961](https://github.com/PSLmodels/Tax-Calculator/pull/2961))
10
+
11
+ **This is a major release with changes that make Tax-Calculator incompatible with earlier releases.**
12
+
13
+ **API Changes**
14
+ - Removes the taxdata-produced `puf_weights.csv.gz` and `puf_ratios.csv` files. Adds a new `Records.puf_constructor` method for use with PUF data. Users will need to supply their own weights and growfactors files for the PUF as they are no longer included in Tax-Calculator. [[#2961](https://github.com/PSLmodels/Tax-Calculator/pull/2961) by Martin Holmer]
15
+
16
+ **New Features**
17
+
18
+
19
+ 2025-09-19 Release 5.3.0
20
+ ------------------------
21
+ (last merged pull request is
22
+ [#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957))
23
+
24
+ **This is an enhancement release.**
25
+
26
+ **API Changes**
27
+
28
+ **New Features**
29
+ - Update new PUF weights and ratios files.
30
+ [[#2925](https://github.com/PSLmodels/Tax-Calculator/pull/2925) by
31
+ Bodi Yang], from the update in [[TaxData PR #452](https://github.com/PSLmodels/
32
+ taxdata/pull/452) by Bodi Yang]
33
+
34
+ Note: PUF users are required to produce new `puf.csv` file from TaxData repository and replace the old file in the Tax-Calculator directory.
35
+ 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
36
+
37
+ - Make `FST_AGI_thd` parameters to be non inflation-indexed
38
+ [[#2951](https://github.com/PSLmodels/Tax-Calculator/pull/2951) by
39
+ Martin Holmer]
40
+
41
+ - Add support for Python 3.13
42
+ [[#2953](https://github.com/PSLmodels/Tax-Calculator/pull/2953) by
43
+ Martin Holmer]
44
+
45
+ - Add tests for consistent quote style
46
+ [[#2954](https://github.com/PSLmodels/Tax-Calculator/pull/2954) by
47
+ Martin Holmer]
48
+
49
+ - Allow CLI --dumpvars DUMPVARS to be the ALL string
50
+ [[#2956](https://github.com/PSLmodels/Tax-Calculator/pull/2956) by
51
+ Martin Holmer]
52
+
53
+ - Add documentation on using sub-national TMD weights with CLI tool
54
+ [[#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957) by
55
+ Martin Holmer]
56
+
57
+
6
58
 
7
59
  2025-08-08 Release 5.2.0
8
60
  ------------------------
@@ -20,13 +20,11 @@ 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
- --> run `make pytest-all` [or `pytest -m pre_release -n4` in taxcalc subdir]
25
+ --> run `make pytest-all` [to confirm all pytest test are passing]
26
+
27
+ --> run `make idtest` [to check CLI results for CPS, PUF, TMD input data]
30
28
 
31
29
  --> run `make tctest-jit` [to make sure JIT decorators are not hiding bugs]
32
30
 
@@ -115,11 +115,11 @@ page](https://github.com).
115
115
  the command line in the Tax-Calculator directory:
116
116
  ```
117
117
  cd taxcalc
118
- pytest -m "not requires_pufcsv and not pre_release" -n4
118
+ pytest -m "not requires_puf and not requires_tmd" -n4
119
119
  ```
120
- If you do have a copy of the `puf.csv` file used by Tax-Calculator,
121
- then on the second line above omit the `not requires_pufcsv and`
122
- expression so as to execute `pytest -m "not pre_release" -n4`.
120
+ If you do have the PUF-related files used by Tax-Calculator and
121
+ the TMD-related files used by Tax-Calculator, then the second line
122
+ above can be simplified to `pytest -n4`.
123
123
 
124
124
  If all the tests pass, you're good to go. If they don't pass, enter
125
125
  the following updates at the command line and then try running the
@@ -227,7 +227,7 @@ situations, in which case other contributors are here to help.
227
227
  from the command line in the Tax-Calculator directory:
228
228
  ```
229
229
  make cstest
230
- make pytest-cps
230
+ make pytest
231
231
  ```
232
232
  Consult {doc}`testing` for more details.
233
233
 
@@ -38,56 +38,38 @@ all these coding-style tests, proceed to the second phase of testing.
38
38
  ## Testing with pytest
39
39
 
40
40
  There are two variants of this second testing phase depending on
41
- whether or not you have access to a file called `puf.csv` that
42
- contains a representative sample of tax filing units derived from the
43
- IRS-SOI PUF data.
44
-
45
- A brief description of the `puf.csv` file is followed by instructions
46
- on how to run the two variants of the second-phase tests.
47
-
48
- The Tax-Calculator `puf.csv` file has been constructed by the core
49
- development team by merging information from a publicly available
50
- IRS-SOI PUF file for 2011 and from the Census CPS file for the
51
- corresponding year. If you have acquired from IRS the 2011 SOI PUF
52
- file and want to execute the tests that require the `puf.csv` file,
53
- contact the core development team to discuss your options.
54
-
55
- **NO PUF.CSV**: If you do not have access to the `puf.csv` file (or if
56
- you just want to do a quick test), run the second-phase of testing as
57
- follows at the command prompt in the Tax-Calculator directory:
58
-
59
- ```
60
- make pytest-cps
61
- ```
41
+ whether or not you have access to the PUF-related and TMD-related
42
+ input data files.
62
43
 
63
- This will start executing a pytest suite containing hundreds of tests,
64
- but will skip the tests that require the `puf.csv` file as input and
65
- the tests that are executed only just before a new release is being
66
- prepared.
67
-
68
- **HAVE PUF.CSV**: If you do have access to the `puf.csv` file, copy it
69
- into the Tax-Calculator directory at the top of the repository
70
- directory tree (but **never** add it to your repository) and run the
71
- second-phase of testing as follows at the command prompt in the
72
- Tax-Calculator directory:
44
+ **NO PUF AND NO TMD**: If you do not have access to the PUF or TMD
45
+ input data files, run the second-phase of testing as follows at the
46
+ command prompt in the Tax-Calculator directory:
73
47
 
74
48
  ```
75
49
  make pytest
76
50
  ```
77
51
 
78
52
  This will start executing a pytest suite containing hundreds of tests,
79
- including the tests that require the `puf.csv` file as input but
80
- excluding the tests that are executed only just before a new release
81
- is being prepared.
53
+ but will skip the tests that require the `puf.csv` file or the `tmd.csv`
54
+ file as input.
82
55
 
83
- Just before releasing a new version of Tax-Calculator or just after
84
- adding a new parameter to `policy_current_law.json`, you should also
85
- execute the pre-release tests using this command:
56
+ **HAVE PUF AND HAVE TMD**: If you do have access to the PUF-related
57
+ files and the TMD-related files, copy them into the Tax-Calculator
58
+ directory at the top of the repository directory tree (but **never**
59
+ add them to your repository) and run the second-phase of testing as
60
+ follows at the command prompt in the Tax-Calculator directory:
86
61
 
87
62
  ```
88
63
  make pytest-all
64
+ make idtest
89
65
  ```
90
66
 
67
+ The first command will start executing a pytest suite containing
68
+ hundreds of tests, including the tests that require the `puf.csv` file
69
+ as input and the tests that require the `tmd.csv` file as input. The
70
+ second command checks that the Tax-Calculator CLI generates expected
71
+ results when using the CPS, PUF, and TMD input data.
72
+
91
73
  ## Interpreting test results
92
74
 
93
75
  If you are adding an enhancement that expands the capabilities of the
@@ -108,9 +90,8 @@ demonstrate that the newly-added test, which used to fail, now passes.
108
90
 
109
91
  After an enhancement or bug fix, you may be convinced that the new and
110
92
  different second-phase test results are, in fact, correct. How do you
111
- eliminate the test failures? For all but the few tests that require
112
- the `puf.csv` file or the `cps.csv` file as input, simply edit the
113
- appropriate `taxcalc/tests/test_*.py` file so that the test passes
114
- when you rerun pytest. If there are failures for the tests that write
115
- results files, read the test error message for instructions about how
116
- to update the test results.
93
+ eliminate the test failures? Simply edit the appropriate
94
+ `taxcalc/tests/test_*.py` file so that the test passes when you rerun
95
+ pytest. If there are failures for the tests that write results files,
96
+ read the test error message for instructions about how to update the
97
+ test results.
@@ -54,7 +54,7 @@ cross-model validation work with NBER's TAXSIM-35 model is described
54
54
 
55
55
  ## Latest release
56
56
 
57
- {doc}`5.2.0 (2025-08-08) <about/releases>`
57
+ {doc}`6.0.0 (2025-09-24) <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
+ }
@@ -45,16 +45,7 @@ from bokeh.io import show, output_notebook
45
45
 
46
46
  ## Setup
47
47
 
48
- Use publicly-available CPS input file.
49
-
50
- NOTE: if you have access to the restricted-use IRS-SOI PUF-based input file
51
- and you have that file (named ‘puf.csv’) located in the directory
52
- where this script is located, then you can substitute the following
53
- statement for the prior statement:
54
-
55
- ``
56
- recs = tc.Records()
57
- ``
48
+ Use publicly-available CPS input data included in Tax-Calculator.
58
49
 
59
50
  ```{code-cell} ipython3
60
51
  :hide-output: false
@@ -41,27 +41,26 @@ validation of those data.
41
41
 
42
42
  The taxdata repository also produces a weights file and growth
43
43
  factors file for use with the 2011 IRS-SOI Public Use File (PUF). For
44
- users who have purchased their own version of the 2011 PUF, the
45
- `puf_weights.csv.gz` and `growfactors.csv` files that are included in
46
- Tax-Calculator can be used along with the `taxdata` generated `puf.csv`
47
- file when using Tax-Calculator.
44
+ users who have purchased their own version of the 2011 PUF, the `puf.csv`,
45
+ `puf_weights.csv.gz` and `puf_ratios.csv` files from the taxdata repository,
46
+ can be used by Tax-Calculator using the `Records.puf_constructor(...)`
47
+ static method.
48
48
 
49
49
  We refer users of the PUF to the IRS limitations on the use of those
50
- data and their distribution. We also refer users of the PUF weights
51
- file and grow factors to the
52
- [taxdata](https://github.com/PSLmodels/taxdata) documentation for
53
- details on how to use these files with the PUF and to see how well the
54
- resulting tax calculations hit aggregate targets published by the IRS.
55
- However, we do note that analysis with a PUF-based data file tends to
56
- be more accurate than the `cps.csv` file and that the validation of
57
- Tax-Calculator with other microsimulation models uses the `puf.csv`
58
- file.
50
+ data and their distribution. We also refer users of the PUF input
51
+ data to the [taxdata](https://github.com/PSLmodels/taxdata)
52
+ documentation for details on how to use these files with the PUF and
53
+ to see how well the resulting tax calculations hit aggregate targets
54
+ published by the IRS. However, we do note that analysis with a
55
+ PUF-based data file tends to be more accurate than the `cps.csv` file
56
+ and that the validation of Tax-Calculator with other microsimulation
57
+ models uses the `puf.csv` file.
59
58
 
60
59
  ### 2015 IRS public use data (`tmd.csv`)
61
60
 
62
61
  The [tax-microdata
63
62
  repository](https://github.com/PSLmodels/tax-microdata-benchmarking)
64
- produces an input variables file (`tmd.csv.gz`), a national weights
63
+ produces an input variables file (`tmd.csv.gz`), a **national** weights
65
64
  file (`tmd_weights.csv.gz`), and a variable growth factors file
66
65
  (`tmd_growfactors.csv`) that can be used with the Tax-Calculator
67
66
  package beginning with the 3.6.0 release. The TMD files are available
@@ -71,12 +70,46 @@ tax-microdata repository. The three TMD files can be used with
71
70
  Tax-Calculator in two ways:
72
71
  - with the **Python API** by instantiating a GrowFactors object that
73
72
  uses TMD growth factors [`gf=GrowFactors("path/to/tmd_growfactors.csv")`]
74
- and by using the `Records.tmd_constructor()` and
75
- `Policy.tmd_constructor()` static methods to instantiate a Records
76
- object and a Policy object, or
73
+ and by using the `Records.tmd_constructor(...)` static method to
74
+ instantiate a Records object, or
77
75
  - with the **CLI tool**, `tc`, when the three TMD files are all in
78
76
  the same folder and the `tmd.csv.gz` file has been unzipped.
79
77
 
78
+ The [tax-microdata
79
+ repository](https://github.com/PSLmodels/tax-microdata-benchmarking)
80
+ also produces state and Congressional district weights files that can
81
+ be used to estimate federal taxes for various sub-national areas. The
82
+ easiest way to produce sub-national federal tax estimates is to supply
83
+ the **CLI tool** with the value of an environmental variable
84
+ (`TMD_AREA`) that indicates the sub-national area. So, for example,
85
+ if you have the New Mexico state weights in the
86
+ `nm_tmd_weights.csv.gz` file, put that file in the folder that
87
+ contains the three national TMD files described above. Then, execute
88
+ this command for tabular output under 2024 current-law policy:
89
+ ```
90
+ (taxcalc-dev) myruns> TMD_AREA=nm tc tmd.csv 2024 --exact --tables
91
+ Read input data for 2021; input data were extrapolated to 2024
92
+ Write tabular output to file tmd_nm-24-#-#-#.tables
93
+ Execution time is 8.2 seconds
94
+ (taxcalc-dev) myruns> awk '$1~/Ret/||$1~/A/' tmd_nm-24-#-#-#.tables | head -2
95
+ Returns ExpInc IncTax PayTax LSTax AllTax
96
+ A 1.17 87.0 7.2 6.9 0.0 14.1
97
+ ```
98
+
99
+ Or for the first Congressional district in New Mexico, put the
100
+ `nm01_tmd_weights.csv.gz` file in the folder with the other TMD
101
+ files and execute this command:
102
+ ```
103
+ (taxcalc-dev) myruns> TMD_AREA=nm01 tc tmd.csv 2024 --exact --tables
104
+ Read input data for 2021; input data were extrapolated to 2024
105
+ Write tabular output to file tmd_nm01-24-#-#-#.tables
106
+ Execution time is 8.3 seconds
107
+ (taxcalc-dev) myruns> awk '$1~/Ret/||$1~/A/' tmd_nm01-24-#-#-#.tables | head -2
108
+ Returns ExpInc IncTax PayTax LSTax AllTax
109
+ A 0.40 31.9 2.8 2.5 0.0 5.3
110
+ ```
111
+
112
+
80
113
  ## Using other data with Tax-Calculator
81
114
 
82
115
  Using other data sources with Tax-Calculator is possible. Users can
@@ -1,32 +1,32 @@
1
1
  Structural overview
2
2
  ===================
3
3
 
4
- Tax-Calculator has been designed using [object-oriented programming (OOP)](https://www.programiz.com/python-programming/object-oriented-programming)
5
- principles.
6
- There are seven classes and a collection of global utility functions,
7
- but most Python programming involves using only a few methods in three classes.
4
+ Tax-Calculator has been designed using [object-oriented programming
5
+ (OOP)](https://www.programiz.com/python-programming/object-oriented-programming)
6
+ principles. There are seven classes and a collection of global
7
+ utility functions, but most Python programming involves using only a
8
+ few methods in three classes.
8
9
 
9
10
  ## Quick summary
10
11
 
11
- Typical Tax-Calculator usage involves creating two Calculator class objects:
12
- both containing the same sample of filing units (that is, Records class object),
13
- but each containing a different tax policy (that is, Policy class object).
14
- The idea is to compare the calculated tax liabilities of the sample units under
15
- the two different tax policies,
16
- one of which is usually current-law policy and the other is a tax reform of
17
- interest.
12
+ Typical Tax-Calculator usage involves creating two Calculator class
13
+ objects: both containing the same sample of filing units (that is,
14
+ Records class object), but each containing a different tax policy
15
+ (that is, Policy class object). The idea is to compare the calculated
16
+ tax liabilities of the sample units under the two different tax
17
+ policies, one of which is usually current-law policy and the other is
18
+ a tax reform of interest.
18
19
 
19
20
  * `rec` → Records class object.
20
- Created by `Records()` when containing IRS-SOI-PUF-derived filing-unit data
21
- or created by `Records.cps_constructor()` when containing CPS-derived
22
- filing-unit data.
21
+ Created by `Records.cps_constructor()` when containing CPS-derived
22
+ filing-unit data.
23
23
 
24
24
  * `clp` → `Policy` class object containing parameters that characterize
25
25
  current-law policy.
26
26
  Created by `Policy()`.
27
27
 
28
- * `ref` → `Policy` class object containing parameters that characterize a tax
29
- reform.
28
+ * `ref` → `Policy` class object containing parameters that
29
+ characterize a tax reform.
30
30
  Created using a Python dictionary `refdict` representing the reform by
31
31
  using the `implement_reform(refdict)` method on a `Policy` object created
32
32
  by `Policy()`.
@@ -68,10 +68,11 @@ for Calculator class and all its methods.
68
68
 
69
69
  ## Complete story
70
70
 
71
- Tax-Calculator contains eight basic classes, and a collection of global utility
72
- functions, that together provide the full range of Tax-Calculator capabilities.
73
- Here is a description of their role in Tax-Calculator and a link to each the
74
- detailed documentation and source code for each class and all its methods.
71
+ Tax-Calculator contains eight basic classes, and a collection of
72
+ global utility functions, that together provide the full range of
73
+ Tax-Calculator capabilities. Here is a description of their role in
74
+ Tax-Calculator and a link to each the detailed documentation and
75
+ source code for each class and all its methods.
75
76
 
76
77
  ### Classes
77
78
 
@@ -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"