taxcalc 5.2.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 (247) hide show
  1. {taxcalc-5.2.0 → taxcalc-5.3.0}/.github/workflows/build_and_test.yml +2 -2
  2. {taxcalc-5.2.0 → taxcalc-5.3.0}/Makefile +2 -1
  3. {taxcalc-5.2.0/taxcalc.egg-info → taxcalc-5.3.0}/PKG-INFO +3 -6
  4. {taxcalc-5.2.0 → taxcalc-5.3.0}/README.md +1 -4
  5. {taxcalc-5.2.0 → taxcalc-5.3.0}/conda.recipe/meta.yaml +2 -2
  6. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/about/releases.md +39 -0
  7. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/contributing/RELEASING.md +0 -4
  8. {taxcalc-5.2.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.2.0 → taxcalc-5.3.0}/docs/usage/data.md +36 -1
  11. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/usage/tcja_after_2025.md +11 -2
  12. {taxcalc-5.2.0 → taxcalc-5.3.0}/environment.yml +1 -1
  13. {taxcalc-5.2.0 → taxcalc-5.3.0}/pytest.ini +1 -1
  14. {taxcalc-5.2.0 → taxcalc-5.3.0}/setup.py +2 -2
  15. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/__init__.py +3 -3
  16. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/calcfunctions.py +2 -2
  17. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/calculator.py +3 -3
  18. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/cli/tc.py +15 -11
  19. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/data.py +1 -1
  20. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/decorators.py +9 -8
  21. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/growfactors.py +2 -1
  22. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/policy.py +6 -5
  23. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/policy_current_law.json +31 -631
  24. taxcalc-5.3.0/taxcalc/puf_ratios.csv +26 -0
  25. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/puf_weights.csv.gz +0 -0
  26. taxcalc-5.3.0/taxcalc/reforms/ARPA.out.csv +10 -0
  27. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/taxcalcio.py +41 -26
  28. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/conftest.py +1 -1
  29. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +24 -24
  30. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/puf_var_wght_means_by_year.csv +11 -11
  31. taxcalc-5.3.0/taxcalc/tests/pufcsv_agg_expect.csv +26 -0
  32. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/pufcsv_mtr_expect.txt +21 -21
  33. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/reforms.json +3 -1
  34. taxcalc-5.3.0/taxcalc/tests/reforms_expect.csv +61 -0
  35. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_4package.py +8 -9
  36. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_calculator.py +151 -151
  37. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_compare.py +2 -2
  38. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_consumption.py +2 -2
  39. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_cpscsv.py +2 -2
  40. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_decorators.py +57 -52
  41. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_growdiff.py +2 -2
  42. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_parameters.py +59 -53
  43. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_policy.py +154 -154
  44. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_puf_var_stats.py +1 -1
  45. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_pufcsv.py +3 -3
  46. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_records.py +5 -1
  47. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_reforms.py +101 -99
  48. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_taxcalcio.py +10 -4
  49. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/utils.py +3 -3
  50. {taxcalc-5.2.0 → taxcalc-5.3.0/taxcalc.egg-info}/PKG-INFO +3 -6
  51. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc.egg-info/SOURCES.txt +0 -3
  52. taxcalc-5.2.0/docs/recipes/_static/reformA.json +0 -15
  53. taxcalc-5.2.0/extend_tcja.py +0 -163
  54. taxcalc-5.2.0/ppp.py +0 -132
  55. taxcalc-5.2.0/taxcalc/puf_ratios.csv +0 -26
  56. taxcalc-5.2.0/taxcalc/reforms/ARPA.out.csv +0 -10
  57. taxcalc-5.2.0/taxcalc/reforms/clp.out.csv +0 -10
  58. taxcalc-5.2.0/taxcalc/tests/pufcsv_agg_expect.csv +0 -26
  59. taxcalc-5.2.0/taxcalc/tests/reforms_expect.csv +0 -61
  60. {taxcalc-5.2.0 → taxcalc-5.3.0}/.coveragerc +0 -0
  61. {taxcalc-5.2.0 → taxcalc-5.3.0}/.github/FUNDING.yml +0 -0
  62. {taxcalc-5.2.0 → taxcalc-5.3.0}/.github/workflows/check_jupyterbook.yml +0 -0
  63. {taxcalc-5.2.0 → taxcalc-5.3.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
  64. {taxcalc-5.2.0 → taxcalc-5.3.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
  65. {taxcalc-5.2.0 → taxcalc-5.3.0}/.gitignore +0 -0
  66. {taxcalc-5.2.0 → taxcalc-5.3.0}/LICENSE +0 -0
  67. {taxcalc-5.2.0 → taxcalc-5.3.0}/MANIFEST.in +0 -0
  68. {taxcalc-5.2.0 → taxcalc-5.3.0}/PSL_catalog.json +0 -0
  69. {taxcalc-5.2.0 → taxcalc-5.3.0}/codecov.yml +0 -0
  70. {taxcalc-5.2.0 → taxcalc-5.3.0}/conda.recipe/bld.bat +0 -0
  71. {taxcalc-5.2.0 → taxcalc-5.3.0}/conda.recipe/build.sh +0 -0
  72. {taxcalc-5.2.0 → taxcalc-5.3.0}/csv_show.sh +0 -0
  73. {taxcalc-5.2.0 → taxcalc-5.3.0}/csv_vars.sh +0 -0
  74. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/PSL.svg +0 -0
  75. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/_config.yml +0 -0
  76. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/_static/atr.png +0 -0
  77. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/_static/mtr.png +0 -0
  78. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/_static/pch.png +0 -0
  79. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/_toc.yml +0 -0
  80. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/about/LICENSE.md +0 -0
  81. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/about/history.md +0 -0
  82. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/about/roadmap.md +0 -0
  83. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/calcfunctions.rst +0 -0
  84. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/calculator.rst +0 -0
  85. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/consumption.rst +0 -0
  86. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/data.rst +0 -0
  87. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/decorators.rst +0 -0
  88. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/growdiff.rst +0 -0
  89. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/growfactors.rst +0 -0
  90. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/parameters.rst +0 -0
  91. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/policy.rst +0 -0
  92. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/public_api.rst +0 -0
  93. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/records.rst +0 -0
  94. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/taxcalcio.rst +0 -0
  95. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/utils.rst +0 -0
  96. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/api/utilsprvt.rst +0 -0
  97. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/contributing/contributor_guide.md +0 -0
  98. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/contributing/param_naming.md +0 -0
  99. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/contributing/pr_workflow.md +0 -0
  100. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/contributing/testing.md +0 -0
  101. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/README.md +0 -0
  102. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/assumption_params.md +0 -0
  103. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/cli.md +0 -0
  104. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/index.md +0 -0
  105. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/input_vars.md +0 -0
  106. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/make/make_io_vars.py +0 -0
  107. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/make/make_params.py +0 -0
  108. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/make/make_uguide.py +0 -0
  109. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/output_vars.md +0 -0
  110. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/policy_params.md +0 -0
  111. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/python_interface.md +0 -0
  112. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/templates/assumption_params_template.md +0 -0
  113. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/templates/input_vars_template.md +0 -0
  114. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/templates/output_vars_template.md +0 -0
  115. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/guide/templates/policy_params_template.md +0 -0
  116. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/README.md +0 -0
  117. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/_static/reformB.json +0 -0
  118. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/_static/reformC.json +0 -0
  119. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/convert_all.sh +0 -0
  120. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/index.md +0 -0
  121. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe00.md +0 -0
  122. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe01.md +0 -0
  123. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe02.md +0 -0
  124. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe03.md +0 -0
  125. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe04.md +0 -0
  126. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
  127. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe05.md +0 -0
  128. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/md_src/recipe06.md +0 -0
  129. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe00.ipynb +0 -0
  130. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe01.ipynb +0 -0
  131. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe02.ipynb +0 -0
  132. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe03.ipynb +0 -0
  133. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe04.ipynb +0 -0
  134. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
  135. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe05.ipynb +0 -0
  136. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/recipes/recipe06.ipynb +0 -0
  137. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/usage/overview.md +0 -0
  138. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/usage/starting.md +0 -0
  139. {taxcalc-5.2.0 → taxcalc-5.3.0}/docs/use_cases.md +0 -0
  140. {taxcalc-5.2.0 → taxcalc-5.3.0}/gitpr +0 -0
  141. {taxcalc-5.2.0 → taxcalc-5.3.0}/gitpr.bat +0 -0
  142. {taxcalc-5.2.0 → taxcalc-5.3.0}/gitsync +0 -0
  143. {taxcalc-5.2.0 → taxcalc-5.3.0}/gitsync.bat +0 -0
  144. {taxcalc-5.2.0 → taxcalc-5.3.0}/pyproject.toml +0 -0
  145. {taxcalc-5.2.0 → taxcalc-5.3.0}/setup.cfg +0 -0
  146. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
  147. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/assumptions/README.md +0 -0
  148. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
  149. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/cli/__init__.py +0 -0
  150. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/conftest.py +0 -0
  151. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/consumption.json +0 -0
  152. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/consumption.py +0 -0
  153. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/cps.csv.gz +0 -0
  154. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/cps_weights.csv.gz +0 -0
  155. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/growdiff.json +0 -0
  156. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/growdiff.py +0 -0
  157. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/growfactors.csv +0 -0
  158. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/parameters.py +0 -0
  159. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/records.py +0 -0
  160. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/records_variables.json +0 -0
  161. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/2017_law.json +0 -0
  162. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/2017_law.out.csv +0 -0
  163. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ARPA.json +0 -0
  164. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/BrownKhanna.json +0 -0
  165. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
  166. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/CARES.json +0 -0
  167. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/CARES.out.csv +0 -0
  168. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
  169. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
  170. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Larson2019.json +0 -0
  171. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
  172. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/README.md +0 -0
  173. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/REFORMS.md +0 -0
  174. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Renacci.json +0 -0
  175. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Renacci.out.csv +0 -0
  176. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
  177. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
  178. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.json +0 -0
  179. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.md +0 -0
  180. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/TCJA.out.csv +0 -0
  181. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2016.json +0 -0
  182. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
  183. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2017.json +0 -0
  184. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
  185. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
  186. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
  187. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
  188. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
  189. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
  190. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
  191. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
  192. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
  193. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/cases.csv +0 -0
  194. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ext.json +0 -0
  195. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
  196. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes0.json +0 -0
  197. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
  198. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes1.json +0 -0
  199. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
  200. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes2.json +0 -0
  201. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
  202. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes3.json +0 -0
  203. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
  204. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/benefits_expect.csv +0 -0
  205. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
  206. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
  207. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
  208. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_benefits.py +0 -0
  209. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_calcfunctions.py +0 -0
  210. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_compatible_data.py +0 -0
  211. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_data.py +0 -0
  212. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_growfactors.py +0 -0
  213. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_responses.py +0 -0
  214. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/tests/test_utils.py +0 -0
  215. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/utilsprvt.py +0 -0
  216. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
  217. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
  218. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/README.md +0 -0
  219. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
  220. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/README.md +0 -0
  221. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
  222. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
  223. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
  224. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
  225. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
  226. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
  227. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
  228. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
  229. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
  230. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
  231. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
  232. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
  233. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
  234. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
  235. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
  236. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
  237. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
  238. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
  239. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
  240. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
  241. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
  242. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc/validation/tests_35.sh +0 -0
  243. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc.egg-info/dependency_links.txt +0 -0
  244. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc.egg-info/entry_points.txt +0 -0
  245. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc.egg-info/requires.txt +0 -0
  246. {taxcalc-5.2.0 → taxcalc-5.3.0}/taxcalc.egg-info/top_level.txt +0 -0
  247. {taxcalc-5.2.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.2.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,6 +3,45 @@ 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
+
6
45
 
7
46
  2025-08-08 Release 5.2.0
8
47
  ------------------------
@@ -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.2.0 (2025-08-08) <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.2.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.2.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
@@ -1165,7 +1165,7 @@ def ItemDed(e17500, e18400, e18500, e19200,
1165
1165
  # (no attempt to adjust c04470 components for limitation)
1166
1166
  reduction = 0.
1167
1167
  if ID_reduction_rate > 0.:
1168
- assert c21040 <= 0.0, "Pease and OBBBA cannot both be in effect"
1168
+ assert c21040 <= 0.0, 'Pease and OBBBA cannot both be in effect'
1169
1169
  tincome = max(0., c00100 - c04600)
1170
1170
  texcess = max(0., tincome - II_brk6[MARS - 1])
1171
1171
  reduction = ID_reduction_rate * texcess
@@ -2202,7 +2202,7 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800, exact, c00100,
2202
2202
  )
2203
2203
  # ... second phase-down from CDCC_po1_rate_min to CDCC_po2_rate_min
2204
2204
  ps2 = CDCC_ps2[MARS - 1]
2205
- 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'
2206
2206
  if c00100 > ps2:
2207
2207
  steps_fractional = (c00100 - ps2) / CDCC_po2_step_size[MARS - 1]
2208
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']
@@ -22,8 +22,9 @@ class Policy(Parameters):
22
22
 
23
23
  Parameters
24
24
  ----------
25
- gfactors: GrowFactors class instance
26
- containing price inflation rates and wage growth rates
25
+ gfactors: GrowFactors class instance or None
26
+ containing price inflation rates and wage growth rates used
27
+ to index policy paramaters
27
28
 
28
29
  last_budget_year: integer
29
30
  user-defined last parameter extrapolation year
@@ -200,15 +201,15 @@ class Policy(Parameters):
200
201
  )
201
202
  with open(path, 'r', encoding='utf-8') as f:
202
203
  defaults = json.loads(f.read()) # pylint: disable=protected-access
203
- return [k for k in defaults if k != "schema"]
204
+ return [k for k in defaults if k != 'schema']
204
205
 
205
206
  def set_rates(self):
206
207
  """
207
208
  Initialize policy parameter indexing rates.
208
209
  """
209
210
  cpi_vals = [
210
- vo["value"] for
211
- vo in self._data["parameter_indexing_CPI_offset"]["value"]
211
+ vo['value'] for
212
+ vo in self._data['parameter_indexing_CPI_offset']['value']
212
213
  ]
213
214
  # parameter_indexing_CPI_offset parameter is no longer used, so check:
214
215
  assert any(cpi_vals) is False, \