taxcalc 4.6.2__tar.gz → 4.6.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. {taxcalc-4.6.2 → taxcalc-4.6.3}/Makefile +3 -3
  2. {taxcalc-4.6.2/taxcalc.egg-info → taxcalc-4.6.3}/PKG-INFO +1 -1
  3. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/releases.md +27 -0
  4. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/RELEASING.md +1 -1
  5. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/cli.md +51 -5
  6. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/index.md +1 -1
  7. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/tcja_after_2025.md +47 -46
  8. {taxcalc-4.6.2 → taxcalc-4.6.3}/setup.py +1 -1
  9. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/__init__.py +1 -1
  10. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cli/tc.py +85 -29
  11. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/parameters.py +188 -118
  12. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/policy.py +26 -4
  13. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/policy_current_law.json +1 -1
  14. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/REFORMS.md +0 -2
  15. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/taxcalcio.py +72 -21
  16. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/conftest.py +1 -1
  17. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/reforms.json +8 -19
  18. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/reforms_expect.csv +9 -10
  19. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_parameters.py +18 -22
  20. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_policy.py +153 -28
  21. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_reforms.py +1 -1
  22. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_taxcalcio.py +16 -13
  23. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/utils.py +5 -5
  24. {taxcalc-4.6.2 → taxcalc-4.6.3/taxcalc.egg-info}/PKG-INFO +1 -1
  25. {taxcalc-4.6.2 → taxcalc-4.6.3}/.coveragerc +0 -0
  26. {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/FUNDING.yml +0 -0
  27. {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/build_and_test.yml +0 -0
  28. {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/check_jupyterbook.yml +0 -0
  29. {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/deploy_jupyterbook.yml +0 -0
  30. {taxcalc-4.6.2 → taxcalc-4.6.3}/.github/workflows/deploy_parameters_docs.yml +0 -0
  31. {taxcalc-4.6.2 → taxcalc-4.6.3}/.gitignore +0 -0
  32. {taxcalc-4.6.2 → taxcalc-4.6.3}/LICENSE +0 -0
  33. {taxcalc-4.6.2 → taxcalc-4.6.3}/MANIFEST.in +0 -0
  34. {taxcalc-4.6.2 → taxcalc-4.6.3}/PSL_catalog.json +0 -0
  35. {taxcalc-4.6.2 → taxcalc-4.6.3}/README.md +0 -0
  36. {taxcalc-4.6.2 → taxcalc-4.6.3}/codecov.yml +0 -0
  37. {taxcalc-4.6.2 → taxcalc-4.6.3}/conda.recipe/bld.bat +0 -0
  38. {taxcalc-4.6.2 → taxcalc-4.6.3}/conda.recipe/build.sh +0 -0
  39. {taxcalc-4.6.2 → taxcalc-4.6.3}/conda.recipe/meta.yaml +0 -0
  40. {taxcalc-4.6.2 → taxcalc-4.6.3}/csv_show.sh +0 -0
  41. {taxcalc-4.6.2 → taxcalc-4.6.3}/csv_vars.sh +0 -0
  42. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/PSL.svg +0 -0
  43. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_config.yml +0 -0
  44. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_static/atr.png +0 -0
  45. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_static/mtr.png +0 -0
  46. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_static/pch.png +0 -0
  47. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/_toc.yml +0 -0
  48. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/LICENSE.md +0 -0
  49. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/history.md +0 -0
  50. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/about/roadmap.md +0 -0
  51. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/calcfunctions.rst +0 -0
  52. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/calculator.rst +0 -0
  53. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/consumption.rst +0 -0
  54. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/data.rst +0 -0
  55. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/decorators.rst +0 -0
  56. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/growdiff.rst +0 -0
  57. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/growfactors.rst +0 -0
  58. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/parameters.rst +0 -0
  59. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/policy.rst +0 -0
  60. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/public_api.rst +0 -0
  61. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/records.rst +0 -0
  62. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/taxcalcio.rst +0 -0
  63. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/utils.rst +0 -0
  64. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/api/utilsprvt.rst +0 -0
  65. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/contributor_guide.md +0 -0
  66. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/param_naming.md +0 -0
  67. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/pr_workflow.md +0 -0
  68. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/contributing/testing.md +0 -0
  69. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/README.md +0 -0
  70. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/assumption_params.md +0 -0
  71. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/index.md +0 -0
  72. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/input_vars.md +0 -0
  73. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/make/make_io_vars.py +0 -0
  74. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/make/make_params.py +0 -0
  75. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/make/make_uguide.py +0 -0
  76. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/output_vars.md +0 -0
  77. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/policy_params.md +0 -0
  78. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/python_interface.md +0 -0
  79. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/assumption_params_template.md +0 -0
  80. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/input_vars_template.md +0 -0
  81. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/output_vars_template.md +0 -0
  82. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/guide/templates/policy_params_template.md +0 -0
  83. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/README.md +0 -0
  84. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/_static/reformA.json +0 -0
  85. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/_static/reformB.json +0 -0
  86. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/_static/reformC.json +0 -0
  87. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/convert_all.sh +0 -0
  88. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/index.md +0 -0
  89. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe00.md +0 -0
  90. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe01.md +0 -0
  91. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe02.md +0 -0
  92. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe03.md +0 -0
  93. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04.md +0 -0
  94. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe04_pandas.md +0 -0
  95. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe05.md +0 -0
  96. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/md_src/recipe06.md +0 -0
  97. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe00.ipynb +0 -0
  98. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe01.ipynb +0 -0
  99. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe02.ipynb +0 -0
  100. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe03.ipynb +0 -0
  101. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe04.ipynb +0 -0
  102. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe04_pandas.ipynb +0 -0
  103. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe05.ipynb +0 -0
  104. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/recipes/recipe06.ipynb +0 -0
  105. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/data.md +0 -0
  106. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/overview.md +0 -0
  107. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/usage/starting.md +0 -0
  108. {taxcalc-4.6.2 → taxcalc-4.6.3}/docs/use_cases.md +0 -0
  109. {taxcalc-4.6.2 → taxcalc-4.6.3}/environment.yml +0 -0
  110. {taxcalc-4.6.2 → taxcalc-4.6.3}/extend_tcja.py +0 -0
  111. {taxcalc-4.6.2 → taxcalc-4.6.3}/gitpr +0 -0
  112. {taxcalc-4.6.2 → taxcalc-4.6.3}/gitpr.bat +0 -0
  113. {taxcalc-4.6.2 → taxcalc-4.6.3}/gitsync +0 -0
  114. {taxcalc-4.6.2 → taxcalc-4.6.3}/gitsync.bat +0 -0
  115. {taxcalc-4.6.2 → taxcalc-4.6.3}/ppp.py +0 -0
  116. {taxcalc-4.6.2 → taxcalc-4.6.3}/pyproject.toml +0 -0
  117. {taxcalc-4.6.2 → taxcalc-4.6.3}/pytest.ini +0 -0
  118. {taxcalc-4.6.2 → taxcalc-4.6.3}/setup.cfg +0 -0
  119. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
  120. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/assumptions/README.md +0 -0
  121. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
  122. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/calcfunctions.py +0 -0
  123. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/calculator.py +0 -0
  124. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cli/__init__.py +0 -0
  125. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/conftest.py +0 -0
  126. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/consumption.json +0 -0
  127. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/consumption.py +0 -0
  128. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cps.csv.gz +0 -0
  129. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/cps_weights.csv.gz +0 -0
  130. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/data.py +0 -0
  131. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/decorators.py +0 -0
  132. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growdiff.json +0 -0
  133. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growdiff.py +0 -0
  134. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growfactors.csv +0 -0
  135. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/growfactors.py +0 -0
  136. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/puf_ratios.csv +0 -0
  137. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/puf_weights.csv.gz +0 -0
  138. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/records.py +0 -0
  139. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/records_variables.json +0 -0
  140. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.json +0 -0
  141. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/2017_law.out.csv +0 -0
  142. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.json +0 -0
  143. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ARPA.out.csv +0 -0
  144. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.json +0 -0
  145. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
  146. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/CARES.json +0 -0
  147. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/CARES.out.csv +0 -0
  148. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
  149. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
  150. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.json +0 -0
  151. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Larson2019.out.csv +0 -0
  152. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/README.md +0 -0
  153. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.json +0 -0
  154. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Renacci.out.csv +0 -0
  155. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.json +0 -0
  156. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
  157. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.json +0 -0
  158. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.md +0 -0
  159. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/TCJA.out.csv +0 -0
  160. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.json +0 -0
  161. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2016.out.csv +0 -0
  162. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.json +0 -0
  163. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/Trump2017.out.csv +0 -0
  164. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/Clinton2016.json +0 -0
  165. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/RyanBrady.json +0 -0
  166. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House.json +0 -0
  167. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
  168. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
  169. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
  170. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
  171. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
  172. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/cases.csv +0 -0
  173. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/clp.out.csv +0 -0
  174. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ext.json +0 -0
  175. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/growfactors_ext.csv +0 -0
  176. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.json +0 -0
  177. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes0.out.csv +0 -0
  178. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.json +0 -0
  179. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes1.out.csv +0 -0
  180. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.json +0 -0
  181. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes2.out.csv +0 -0
  182. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.json +0 -0
  183. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/reforms/ptaxes3.out.csv +0 -0
  184. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/benefits_expect.csv +0 -0
  185. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
  186. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
  187. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
  188. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +0 -0
  189. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -0
  190. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_agg_expect.csv +0 -0
  191. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/pufcsv_mtr_expect.txt +0 -0
  192. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_4package.py +0 -0
  193. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_benefits.py +0 -0
  194. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_calcfunctions.py +0 -0
  195. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_calculator.py +0 -0
  196. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_compare.py +0 -0
  197. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_compatible_data.py +0 -0
  198. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_consumption.py +0 -0
  199. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_cpscsv.py +0 -0
  200. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_data.py +0 -0
  201. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_decorators.py +0 -0
  202. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_growdiff.py +0 -0
  203. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_growfactors.py +0 -0
  204. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_puf_var_stats.py +0 -0
  205. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_pufcsv.py +0 -0
  206. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_records.py +0 -0
  207. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_responses.py +0 -0
  208. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/tests/test_utils.py +0 -0
  209. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/utilsprvt.py +0 -0
  210. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
  211. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
  212. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/README.md +0 -0
  213. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
  214. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/README.md +0 -0
  215. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
  216. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
  217. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
  218. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
  219. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
  220. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
  221. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
  222. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
  223. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
  224. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
  225. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
  226. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
  227. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
  228. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/input_setup.py +0 -0
  229. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
  230. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
  231. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
  232. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
  233. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
  234. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
  235. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/taxsim35/tests_35.py +0 -0
  236. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc/validation/tests_35.sh +0 -0
  237. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/SOURCES.txt +0 -0
  238. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/dependency_links.txt +0 -0
  239. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/entry_points.txt +0 -0
  240. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/requires.txt +0 -0
  241. {taxcalc-4.6.2 → taxcalc-4.6.3}/taxcalc.egg-info/top_level.txt +0 -0
  242. {taxcalc-4.6.2 → taxcalc-4.6.3}/tctest-nojit.sh +0 -0
@@ -49,19 +49,19 @@ rm -f tmp??????-??-#-tmp*
49
49
  endef
50
50
 
51
51
  .PHONY=pytest-cps
52
- pytest-cps:
52
+ pytest-cps: clean
53
53
  @$(pytest-setup)
54
54
  @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not requires_pufcsv and not pre_release"
55
55
  @$(pytest-cleanup)
56
56
 
57
57
  .PHONY=pytest
58
- pytest:
58
+ pytest: clean
59
59
  @$(pytest-setup)
60
60
  @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m "not pre_release"
61
61
  @$(pytest-cleanup)
62
62
 
63
63
  .PHONY=pytest-all
64
- pytest-all:
64
+ pytest-all: clean
65
65
  @$(pytest-setup)
66
66
  @cd taxcalc ; pytest -n4 --disable-warnings --durations=0 --durations-min=2 -m ""
67
67
  @$(pytest-cleanup)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxcalc
3
- Version: 4.6.2
3
+ Version: 4.6.3
4
4
  Summary: Tax-Calculator
5
5
  Home-page: https://github.com/PSLmodels/Tax-Calculator
6
6
  Download-URL: https://github.com/PSLmodels/Tax-Calculator
@@ -4,6 +4,33 @@ Go [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclose
4
4
  for a complete commit history.
5
5
 
6
6
 
7
+ 2025-06-13 Release 4.6.3
8
+ ------------------------
9
+ (last merged pull request is
10
+ [#2915](https://github.com/PSLmodels/Tax-Calculator/pull/2915))
11
+
12
+ **This is a minor enhancement release.**
13
+
14
+ **API Changes**
15
+
16
+ **New Features**
17
+ - Update CLI documentation
18
+ [[#2907](https://github.com/PSLmodels/Tax-Calculator/pull/2907) by Martin Holmer]
19
+ - Add deprecation warnings for planned Tax-Calculator 5.0.0 changes, add two tests, and remove one obsolete test
20
+ [[#2908](https://github.com/PSLmodels/Tax-Calculator/pull/2908),
21
+ [#2909](https://github.com/PSLmodels/Tax-Calculator/pull/2909), and
22
+ [#2910](https://github.com/PSLmodels/Tax-Calculator/pull/2910) by Martin Holmer]
23
+ - Add optional `--runid N` CLI option that simplifies output file names
24
+ [[#2912](https://github.com/PSLmodels/Tax-Calculator/pull/2912) by Martin Holmer]
25
+ - Add a default `income_group` definition to the CLI --dumpdb output
26
+ [[#2913](https://github.com/PSLmodels/Tax-Calculator/pull/2913) and
27
+ [#2914](https://github.com/PSLmodels/Tax-Calculator/pull/2914) by Martin Holmer]
28
+ - Standardize CLI output file name extensions
29
+ [[#2915](https://github.com/PSLmodels/Tax-Calculator/pull/2915) by Martin Holmer]
30
+
31
+ **Bug Fixes**
32
+
33
+
7
34
  2025-05-16 Release 4.6.2
8
35
  ------------------------
9
36
  (last merged pull request is
@@ -24,7 +24,7 @@ In the top-level Tax-Calculator directory, do the following:
24
24
 
25
25
  --> run `python extend_tcja.py > ext.json` [to update reforms/ext.json]
26
26
 
27
- --> run `make cstest` [to make confirm project coding style is being followed]
27
+ --> run `make cstest` [to confirm project coding style is being followed]
28
28
 
29
29
  --> run `make pytest-all` [or `pytest -m pre_release -n4` in taxcalc subdir]
30
30
 
@@ -412,10 +412,7 @@ exploratory data analysis.
412
412
  % tc cps.csv 2024 --reform ref3.json --dumpdb
413
413
  Read input data for 2014; input data were extrapolated to 2024
414
414
  Write dump output to sqlite3 database file cps-24-#-ref3-#.db
415
- Execution time is 35.8 seconds
416
- Read input data for 2014; input data were extrapolated to 2025
417
- Write dump output to sqlite3 database file cps-25-#-ref3-#.db
418
- Execution time is 35.1 seconds
415
+ Execution time is 35.6 seconds
419
416
 
420
417
  % sqlite3 cps-24-#-ref3-#.db
421
418
  SQLite version 3.39.5 2022-10-14 20:58:05
@@ -531,6 +528,9 @@ to generate such budget-window results is to use the CLI tool's
531
528
  extend-TCJA-beyond-2025 reform, then we can execute the following run:
532
529
 
533
530
  ```
531
+ % tc --version
532
+ Tax-Calculator 4.6.2 on Python 3.12
533
+
534
534
  % tc ../tmd.csv 2026 --numyears 10 --reform ext.json --tables
535
535
  Read input data for 2021; input data were extrapolated to 2026
536
536
  Write tabular output to file tmd-26-#-ext-#-tables.text
@@ -552,7 +552,7 @@ Advance input data and policy to 2034
552
552
  Write tabular output to file tmd-34-#-ext-#-tables.text
553
553
  Advance input data and policy to 2035
554
554
  Write tabular output to file tmd-35-#-ext-#-tables.text
555
- Execution time is 60.9 seconds
555
+ Execution time is 55.6 seconds
556
556
  ```
557
557
 
558
558
  [PR
@@ -561,6 +561,52 @@ discusses how much faster this is relative to executing ten separate
561
561
  `tc` runs, and also shows how to tabulate the ten-year aggregate
562
562
  reform result from the files generated by this run.
563
563
 
564
+ Because the reform-induced change in aggregate federal income tax
565
+ liability is located on the last row of each tables output file in the
566
+ fourth column, we can look at the ten-year results quickly:
567
+
568
+ ```
569
+ % tail -1 tmd-??-*tables.text
570
+ ==> tmd-26-#-ext-#-tables.text <==
571
+ A 192.41 20828.3 -284.0 0.0 0.0 -284.0
572
+
573
+ ==> tmd-27-#-ext-#-tables.text <==
574
+ A 193.77 21613.4 -291.7 0.0 0.0 -291.7
575
+
576
+ ==> tmd-28-#-ext-#-tables.text <==
577
+ A 194.72 22404.7 -299.5 0.0 0.0 -299.5
578
+
579
+ ==> tmd-29-#-ext-#-tables.text <==
580
+ A 195.66 23243.3 -291.8 0.0 0.0 -291.8
581
+
582
+ ==> tmd-30-#-ext-#-tables.text <==
583
+ A 196.58 24115.1 -299.8 0.0 0.0 -299.8
584
+
585
+ ==> tmd-31-#-ext-#-tables.text <==
586
+ A 197.48 25020.0 -307.8 0.0 0.0 -307.8
587
+
588
+ ==> tmd-32-#-ext-#-tables.text <==
589
+ A 198.35 25952.7 -315.7 0.0 0.0 -315.7
590
+
591
+ ==> tmd-33-#-ext-#-tables.text <==
592
+ A 199.21 26905.4 -323.6 0.0 0.0 -323.6
593
+
594
+ ==> tmd-34-#-ext-#-tables.text <==
595
+ A 200.03 27878.9 -331.6 0.0 0.0 -331.6
596
+
597
+ ==> tmd-35-#-ext-#-tables.text <==
598
+ A 200.83 28883.0 -339.6 0.0 0.0 -339.6
599
+ ```
600
+
601
+ A simple way to sum up the ten annual changes is to use the [`awk`
602
+ program](https://www.gnu.org/software/gawk/manual/gawk.html), which
603
+ could be called `gawk` or `gawk.exe` on your computer, as follows:
604
+
605
+ ```
606
+ % tail -1 tmd-??-*tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
607
+ 10 -3085.1
608
+ ```
609
+
564
610
  More examples of analyzing different versions of the TCJA after 2025
565
611
  are available in this
566
612
  [document](https://taxcalc.pslmodels.org/usage/tcja_after_2025.html).
@@ -54,7 +54,7 @@ cross-model validation work with NBER's TAXSIM-35 model is described
54
54
 
55
55
  ## Latest release
56
56
 
57
- {doc}`4.6.2 (2025-05-16) <about/releases>`
57
+ {doc}`4.6.3 (2025-06-13) <about/releases>`
58
58
 
59
59
  If you are already using Tax-Calculator, upgrade using the following command:
60
60
  ```
@@ -39,16 +39,17 @@ reform-minus-baseline differences by income decile and in aggregate.
39
39
 
40
40
  Nobody knows how the 2025 tax legislation will turn out, so the idea
41
41
  of this document is to illustrate how to use the Tax-Calculator CLI
42
- tool to analyze some of the TCJA revisions that are being reported in
42
+ tool to analyze some of the TCJA revisions that were being reported in
43
43
  the press in early May 2025. The basic legislative goal is to extend
44
44
  TCJA beyond 2025, but there is discussion of a number of **revisions**
45
45
  to the basic extension. The revisions being discussed include, but
46
46
  are not limited to, raising the SALT deduction cap, making social
47
47
  security benefits nontaxable, and liberalizing the child tax credit.
48
- (Given the nature of the rules under which the legislation is being
49
- developed, no changes in social security financing can be made, so
50
- there is discussion of a higher elderly/disability standard deduction
51
- amount to proxy the nontaxable social security benefits revision.)
48
+ (Given the nature of the reconciliation rules under which the
49
+ legislation is being developed, no changes in social security
50
+ financing can be made, so there is discussion of a higher
51
+ elderly/disability standard deduction amount to proxy the nontaxable
52
+ social security benefits revision.)
52
53
  These revisions all cause reductions in income tax revenue, so there
53
54
  is also discussion about **enhancements** to the extended-TCJA policy
54
55
  that would raise revenue to pay for revisions. The enhancement
@@ -62,10 +63,10 @@ The analysis examples below focus on the following policy scenarios:
62
63
  3. a TCJA extension with the higher elderly/disabled standard deduction revision
63
64
  4. a TCJA extension with the higher elderly/disabled standard deduction revision and the new top tax bracket enhancement
64
65
 
65
- All the examples use Tax-Calculator 4.6.1 version.
66
+ All the examples use Tax-Calculator 4.6.2 version.
66
67
  ```
67
68
  % tc --version
68
- Tax-Calculator 4.6.1 on Python 3.12
69
+ Tax-Calculator 4.6.2 on Python 3.12
69
70
  ```
70
71
 
71
72
  The examples below were done on an ancient Mac with an old Intel
@@ -85,25 +86,25 @@ this document for more information on `ext.json` contents.
85
86
  % tc ../tmd.csv 2026 --numyears 10 --reform ext.json --exact --tables
86
87
  Read input data for 2021; input data were extrapolated to 2026
87
88
  Write tabular output to file tmd-26-#-ext-#-tables.text
88
- Advance input data and policy to 2027
89
+ Advance input data and policy to 2027
89
90
  Write tabular output to file tmd-27-#-ext-#-tables.text
90
- Advance input data and policy to 2028
91
+ Advance input data and policy to 2028
91
92
  Write tabular output to file tmd-28-#-ext-#-tables.text
92
- Advance input data and policy to 2029
93
+ Advance input data and policy to 2029
93
94
  Write tabular output to file tmd-29-#-ext-#-tables.text
94
- Advance input data and policy to 2030
95
+ Advance input data and policy to 2030
95
96
  Write tabular output to file tmd-30-#-ext-#-tables.text
96
- Advance input data and policy to 2031
97
+ Advance input data and policy to 2031
97
98
  Write tabular output to file tmd-31-#-ext-#-tables.text
98
- Advance input data and policy to 2032
99
+ Advance input data and policy to 2032
99
100
  Write tabular output to file tmd-32-#-ext-#-tables.text
100
- Advance input data and policy to 2033
101
+ Advance input data and policy to 2033
101
102
  Write tabular output to file tmd-33-#-ext-#-tables.text
102
- Advance input data and policy to 2034
103
+ Advance input data and policy to 2034
103
104
  Write tabular output to file tmd-34-#-ext-#-tables.text
104
- Advance input data and policy to 2035
105
+ Advance input data and policy to 2035
105
106
  Write tabular output to file tmd-35-#-ext-#-tables.text
106
- Execution time is 58.4 seconds
107
+ Execution time is 56.8 seconds
107
108
  ```
108
109
 
109
110
  Because the aggregate change in taxes is displayed on the last line of
@@ -113,22 +114,22 @@ this:
113
114
  ```
114
115
  % tail -1 tmd-??-#-ext-#-tables.text
115
116
  ==> tmd-26-#-ext-#-tables.text <==
116
- A 192.41 20828.3 -273.1 0.0 0.0 -273.1
117
+ A 192.41 20828.3 -284.1 0.0 0.0 -284.1
117
118
 
118
119
  ==> tmd-27-#-ext-#-tables.text <==
119
- A 193.77 21613.4 -280.5 0.0 0.0 -280.5
120
+ A 193.77 21613.4 -291.8 0.0 0.0 -291.8
120
121
 
121
122
  ==> tmd-28-#-ext-#-tables.text <==
122
- A 194.72 22404.7 -288.1 0.0 0.0 -288.1
123
+ A 194.72 22404.7 -299.6 0.0 0.0 -299.6
123
124
 
124
125
  ==> tmd-29-#-ext-#-tables.text <==
125
- A 195.66 23243.3 -280.3 0.0 0.0 -280.3
126
+ A 195.66 23243.3 -291.9 0.0 0.0 -291.9
126
127
 
127
128
  ==> tmd-30-#-ext-#-tables.text <==
128
- A 196.58 24115.1 -288.1 0.0 0.0 -288.1
129
+ A 196.58 24115.1 -299.9 0.0 0.0 -299.9
129
130
 
130
131
  ==> tmd-31-#-ext-#-tables.text <==
131
- A 197.48 25020.0 -296.0 0.0 0.0 -296.0
132
+ A 197.48 25020.0 -307.9 0.0 0.0 -307.9
132
133
 
133
134
  ==> tmd-32-#-ext-#-tables.text <==
134
135
  A 198.35 25952.7 -315.9 0.0 0.0 -315.9
@@ -148,7 +149,7 @@ be tabulated this way:
148
149
 
149
150
  ```
150
151
  % tail -1 tmd-??-#-ext-#-tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
151
- 10 -3017.2
152
+ 10 -3086.3
152
153
  ```
153
154
 
154
155
 
@@ -176,10 +177,10 @@ Write tabular output to file tmd-26-ext-ext+no_ssben_tax-#-tables.text
176
177
  Execution time is 33.4 seconds
177
178
 
178
179
  % tail -1 tmd-26-ext-ext+no_ssben_tax-#-tables.text
179
- A 192.41 20828.3 -110.6 0.0 0.0 -110.6
180
+ A 192.41 20828.3 -110.7 0.0 0.0 -110.7
180
181
  ```
181
182
 
182
- So, this reform reduces federal income tax liability by $110.6 billion in
183
+ So, this reform reduces federal income tax liability by $110.7 billion in
183
184
  2026.
184
185
 
185
186
 
@@ -200,27 +201,27 @@ statuses produces a reasonable approximation of the effects of the
200
201
  % tc ../tmd.csv 2026 --baseline ext.json --reform ext.json+higher_aged_std.json --exact --tables
201
202
  Read input data for 2021; input data were extrapolated to 2026
202
203
  Write tabular output to file tmd-26-ext-ext+higher_aged_std-#-tables.text
203
- Execution time is 34.0 seconds
204
+ Execution time is 32.4 seconds
204
205
 
205
206
  % diff tmd-26-ext-ext+higher_aged_std-#-tables.text tmd-26-ext-ext+no_ssben_tax-#-tables.text | tail -18
206
207
  22,29c22,29
207
- < 3 19.24 629.1 -0.3 0.0 0.0 -0.3
208
+ < 3 19.24 629.1 -0.4 0.0 0.0 -0.4
208
209
  < 4 19.24 876.9 -1.9 0.0 0.0 -1.9
209
- < 5 19.24 1173.0 -6.8 0.0 0.0 -6.8
210
- < 6 19.25 1581.6 -13.3 0.0 0.0 -13.3
210
+ < 5 19.24 1173.0 -6.9 0.0 0.0 -6.9
211
+ < 6 19.25 1581.6 -13.4 0.0 0.0 -13.4
211
212
  < 7 19.24 2191.6 -25.6 0.0 0.0 -25.6
212
213
  < 8 19.24 3238.1 -33.2 0.0 0.0 -33.2
213
214
  < 9 19.24 10787.1 -29.5 0.0 0.0 -29.5
214
- < A 192.41 20828.3 -110.9 0.0 0.0 -110.9
215
+ < A 192.41 20828.3 -111.1 0.0 0.0 -111.1
215
216
  ---
216
217
  > 3 19.24 629.1 -0.1 0.0 0.0 -0.1
217
218
  > 4 19.24 876.9 -1.0 0.0 0.0 -1.0
218
- > 5 19.24 1173.0 -4.8 0.0 0.0 -4.8
219
- > 6 19.25 1581.6 -11.8 0.0 0.0 -11.8
219
+ > 5 19.24 1173.0 -4.9 0.0 0.0 -4.9
220
+ > 6 19.25 1581.6 -11.9 0.0 0.0 -11.9
220
221
  > 7 19.24 2191.6 -21.3 0.0 0.0 -21.3
221
222
  > 8 19.24 3238.1 -29.9 0.0 0.0 -29.9
222
223
  > 9 19.24 10787.1 -41.5 0.0 0.0 -41.5
223
- > A 192.41 20828.3 -110.6 0.0 0.0 -110.6
224
+ > A 192.41 20828.3 -110.7 0.0 0.0 -110.7
224
225
  ```
225
226
 
226
227
 
@@ -245,9 +246,9 @@ Write tabular output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_
245
246
  Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-pch.html
246
247
  Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-atr.html
247
248
  Write graphical output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-mtr.html
248
- Execution time is 40.9 seconds
249
+ Execution time is 39.8 seconds
249
250
 
250
- tail -14 tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
251
+ % tail -14 tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
251
252
  Weighted Tax Differences by Baseline Expanded-Income Decile
252
253
  Returns ExpInc IncTax PayTax LSTax AllTax
253
254
  (#m) ($b) ($b) ($b) ($b) ($b)
@@ -284,25 +285,25 @@ Here are the ten-year results for this run:
284
285
  % tc ../tmd.csv 2026 --numyears 10 --baseline ext.json+higher_aged_std.json --reform ext.json+higher_aged_std.json+new_top_bracket.json --exact --tables
285
286
  Read input data for 2021; input data were extrapolated to 2026
286
287
  Write tabular output to file tmd-26-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
287
- Advance input data and policy to 2027
288
+ Advance input data and policy to 2027
288
289
  Write tabular output to file tmd-27-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
289
- Advance input data and policy to 2028
290
+ Advance input data and policy to 2028
290
291
  Write tabular output to file tmd-28-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
291
- Advance input data and policy to 2029
292
+ Advance input data and policy to 2029
292
293
  Write tabular output to file tmd-29-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
293
- Advance input data and policy to 2030
294
+ Advance input data and policy to 2030
294
295
  Write tabular output to file tmd-30-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
295
- Advance input data and policy to 2031
296
+ Advance input data and policy to 2031
296
297
  Write tabular output to file tmd-31-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
297
- Advance input data and policy to 2032
298
+ Advance input data and policy to 2032
298
299
  Write tabular output to file tmd-32-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
299
- Advance input data and policy to 2033
300
+ Advance input data and policy to 2033
300
301
  Write tabular output to file tmd-33-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
301
- Advance input data and policy to 2034
302
+ Advance input data and policy to 2034
302
303
  Write tabular output to file tmd-34-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
303
- Advance input data and policy to 2035
304
+ Advance input data and policy to 2035
304
305
  Write tabular output to file tmd-35-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text
305
- Execution time is 58.2 seconds
306
+ Execution time is 57.1 seconds
306
307
 
307
308
  % tail -1 tmd-??-ext+higher_aged_std-ext+higher_aged_std+new_top_bracket-#-tables.text | awk '$1~/A/{n++;c+=$4}END{print n,c}'
308
309
  10 187.9
@@ -7,7 +7,7 @@ from setuptools import setup
7
7
  with open("README.md", "r", encoding="utf-8") as f:
8
8
  longdesc = f.read()
9
9
 
10
- VERSION = "4.6.2"
10
+ VERSION = "4.6.3"
11
11
 
12
12
  config = {
13
13
  "description": "Tax-Calculator",
@@ -14,6 +14,6 @@ from taxcalc.taxcalcio import *
14
14
  from taxcalc.utils import *
15
15
  from taxcalc.cli import *
16
16
 
17
- __version__ = '4.6.2'
17
+ __version__ = '4.6.3'
18
18
  __min_python3_version__ = 10
19
19
  __max_python3_version__ = 12
@@ -43,7 +43,7 @@ def cli_tc_main():
43
43
  ),
44
44
  (
45
45
  ' '
46
- '[--silent] [--test] [--version] [--usage]'
46
+ '[--runid N] [--silent] [--test] [--version] [--usage]'
47
47
  )
48
48
  )
49
49
  parser = argparse.ArgumentParser(
@@ -75,20 +75,20 @@ def cli_tc_main():
75
75
  parser.add_argument('--baseline',
76
76
  help=('BASELINE is name of optional JSON reform file. '
77
77
  'A compound reform can be specified using 2+ '
78
- 'file names separated by plus (+) character(s). '
78
+ 'file names connected by plus (+) character(s). '
79
79
  'No --baseline implies baseline policy is '
80
80
  'current-law policy.'),
81
81
  default=None)
82
82
  parser.add_argument('--reform',
83
83
  help=('REFORM is name of optional JSON reform file. '
84
84
  'A compound reform can be specified using 2+ '
85
- 'file names separated by plus (+) character(s). '
85
+ 'file names connected by plus (+) character(s). '
86
86
  'No --reform implies reform policy is '
87
87
  'current-law policy).'),
88
88
  default=None)
89
89
  parser.add_argument('--assump',
90
90
  help=('ASSUMP is name of optional JSON economic '
91
- 'assumptions file. No --assump implies use '
91
+ 'assumptions file. No --assump implies use '
92
92
  'of no customized assumptions.'),
93
93
  default=None)
94
94
  parser.add_argument('--exact',
@@ -125,12 +125,19 @@ def cli_tc_main():
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 '
128
- 'in the dump database. No --dumpvars '
129
- 'implies a minimal set of variables. Valid '
130
- 'variable names include all variables in the '
128
+ 'in the dump database. No --dumpvars implies '
129
+ 'a minimal set of variables. Valid variable '
130
+ 'names include all variables in the '
131
131
  'records_variables.json file plus mtr_itax and '
132
132
  'mtr_ptax (MTRs wrt taxpayer earnings).'),
133
133
  default=None)
134
+ parser.add_argument('--runid', metavar='N',
135
+ help=('N is a positive integer run id that is used '
136
+ 'to construct simpler output file names. '
137
+ 'No --runid implies legacy output file names '
138
+ 'are used.'),
139
+ type=int,
140
+ default=0)
134
141
  parser.add_argument('--silent',
135
142
  help=('optional flag that suppresses messages about '
136
143
  'input and output actions.'),
@@ -153,16 +160,23 @@ def cli_tc_main():
153
160
  default=False,
154
161
  action="store_true")
155
162
  args = parser.parse_args()
163
+ using_error_file = args.silent and args.runid != 0
164
+ efilename = f'run{args.runid}.errors'
156
165
  # check Python version
157
166
  pyv = sys.version_info
158
167
  pymin = tc.__min_python3_version__
159
168
  pymax = tc.__max_python3_version__
160
169
  if pyv[0] != 3 or pyv[1] < pymin or pyv[1] > pymax: # pragma: no cover
161
170
  pyreq = f'at least Python 3.{pymin} and at most Python 3.{pymax}'
162
- sys.stderr.write(
171
+ msg = (
163
172
  f'ERROR: Tax-Calculator requires {pyreq}\n'
164
173
  f' but Python {pyv[0]}.{pyv[1]} is installed\n'
165
174
  )
175
+ if using_error_file:
176
+ with open(efilename, 'w', encoding='utf-8') as efile:
177
+ efile.write(msg)
178
+ else:
179
+ sys.stderr.write(msg)
166
180
  return 1
167
181
  # show Tax-Calculator version and quit if --version option is specified
168
182
  if args.version:
@@ -186,20 +200,32 @@ def cli_tc_main():
186
200
  # check taxyear value
187
201
  if taxyear > tc.Policy.LAST_BUDGET_YEAR:
188
202
  msg = f'ERROR: TAXYEAR is greater than {tc.Policy.LAST_BUDGET_YEAR}\n'
189
- sys.stderr.write(msg)
190
- sys.stderr.write('USAGE: tc --help\n')
203
+ if using_error_file:
204
+ with open(efilename, 'w', encoding='utf-8') as efile:
205
+ efile.write(msg)
206
+ else:
207
+ sys.stderr.write(msg)
208
+ sys.stderr.write('USAGE: tc --help\n')
191
209
  return 1
192
210
  # check numyears value
193
211
  if args.numyears < 1:
194
212
  msg = 'ERROR: --numyears parameter N is less than one\n'
195
- sys.stderr.write(msg)
196
- sys.stderr.write('USAGE: tc --help\n')
213
+ if using_error_file:
214
+ with open(efilename, 'w', encoding='utf-8') as efile:
215
+ efile.write(msg)
216
+ else:
217
+ sys.stderr.write(msg)
218
+ sys.stderr.write('USAGE: tc --help\n')
197
219
  return 1
198
220
  max_numyears = tc.Policy.LAST_BUDGET_YEAR - taxyear + 1
199
221
  if args.numyears > max_numyears:
200
222
  msg = f'ERROR: --numyears parameter N is greater than {max_numyears}\n'
201
- sys.stderr.write(msg)
202
- sys.stderr.write('USAGE: tc --help\n')
223
+ if using_error_file:
224
+ with open(efilename, 'w', encoding='utf-8') as efile:
225
+ efile.write(msg)
226
+ else:
227
+ sys.stderr.write(msg)
228
+ sys.stderr.write('USAGE: tc --help\n')
203
229
  return 1
204
230
  # specify if aging input data
205
231
  aging_data = (
@@ -210,8 +236,12 @@ def cli_tc_main():
210
236
  # check args.dumpdb and args.dumpvars consistency
211
237
  if not args.dumpdb and args.dumpvars:
212
238
  msg = 'ERROR: DUMPVARS file specified without --dumpdb option\n'
213
- sys.stderr.write(msg)
214
- sys.stderr.write('USAGE: tc --help\n')
239
+ if using_error_file:
240
+ with open(efilename, 'w', encoding='utf-8') as efile:
241
+ efile.write(msg)
242
+ else:
243
+ sys.stderr.write(msg)
244
+ sys.stderr.write('USAGE: tc --help\n')
215
245
  return 1
216
246
  # specify dumpvars_str from args.dumpvars file
217
247
  dumpvars_str = ''
@@ -221,9 +251,22 @@ def cli_tc_main():
221
251
  dumpvars_str = dfile.read()
222
252
  else:
223
253
  msg = f'ERROR: DUMPVARS file {args.dumpvars} does not exist\n'
254
+ if using_error_file:
255
+ with open(efilename, 'w', encoding='utf-8') as efile:
256
+ efile.write(msg)
257
+ else:
258
+ sys.stderr.write(msg)
259
+ sys.stderr.write('USAGE: tc --help\n')
260
+ return 1
261
+ if args.runid < 0:
262
+ msg = 'ERROR: --runid parameter N is less than zero\n'
263
+ if using_error_file:
264
+ with open(efilename, 'w', encoding='utf-8') as efile:
265
+ efile.write(msg)
266
+ else:
224
267
  sys.stderr.write(msg)
225
268
  sys.stderr.write('USAGE: tc --help\n')
226
- return 1
269
+ return 1
227
270
  # do calculations for taxyear
228
271
  # ... initialize TaxCalcIO object for taxyear
229
272
  tcio = tc.TaxCalcIO(
@@ -232,14 +275,19 @@ def cli_tc_main():
232
275
  baseline=args.baseline,
233
276
  reform=args.reform,
234
277
  assump=args.assump,
278
+ runid=args.runid,
235
279
  silent=args.silent,
236
280
  )
237
281
  if tcio.errmsg:
238
- if tcio.errmsg.endswith('\n'):
239
- sys.stderr.write(tcio.errmsg)
282
+ msg = tcio.errmsg
283
+ if not msg.endswith('\n'):
284
+ msg += '\n'
285
+ if using_error_file:
286
+ with open(efilename, 'w', encoding='utf-8') as efile:
287
+ efile.write(msg)
240
288
  else:
241
- sys.stderr.write(tcio.errmsg + '\n')
242
- sys.stderr.write('USAGE: tc --help\n')
289
+ sys.stderr.write(msg)
290
+ sys.stderr.write('USAGE: tc --help\n')
243
291
  return 1
244
292
  tcio.init(
245
293
  input_data=inputfn,
@@ -251,19 +299,27 @@ def cli_tc_main():
251
299
  exact_calculations=args.exact,
252
300
  )
253
301
  if tcio.errmsg:
254
- if tcio.errmsg.endswith('\n'):
255
- sys.stderr.write(tcio.errmsg)
302
+ msg = tcio.errmsg
303
+ if not msg.endswith('\n'):
304
+ msg += '\n'
305
+ if using_error_file:
306
+ with open(efilename, 'w', encoding='utf-8') as efile:
307
+ efile.write(msg)
256
308
  else:
257
- sys.stderr.write(tcio.errmsg + '\n')
258
- sys.stderr.write('USAGE: tc --help\n')
309
+ sys.stderr.write(msg)
310
+ sys.stderr.write('USAGE: tc --help\n')
259
311
  return 1
260
312
  # ... conduct tax analysis for taxyear
261
313
  dumpvars_list = tcio.dump_variables(dumpvars_str)
262
314
  if tcio.errmsg:
263
- if tcio.errmsg.endswith('\n'):
264
- sys.stderr.write(tcio.errmsg)
315
+ msg = tcio.errmsg
316
+ if not msg.endswith('\n'):
317
+ msg += '\n'
318
+ if using_error_file:
319
+ with open(efilename, 'w', encoding='utf-8') as efile:
320
+ efile.write(msg)
265
321
  else:
266
- sys.stderr.write(tcio.errmsg + '\n')
322
+ sys.stderr.write(msg)
267
323
  sys.stderr.write('USAGE: tc --help\n')
268
324
  return 1
269
325
  tcio.analyze(
@@ -313,7 +369,7 @@ EXPECTED_TEST_OUTPUT = (
313
369
  '1|131.88\n'
314
370
  '2|28879.00\n'
315
371
  )
316
- TEST_DUMPDB_FILENAME = f'test-{str(TEST_TAXYEAR)[2:]}-#-#-#.db'
372
+ TEST_DUMPDB_FILENAME = f'test-{str(TEST_TAXYEAR)[2:]}-#-#-#.dumpdb'
317
373
  TEST_SQLITE_QUERY = """
318
374
  SELECT
319
375
  RECID AS id,