taxcalc 5.3.0__tar.gz → 6.1.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 (240) hide show
  1. {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/build_and_test.yml +1 -1
  2. {taxcalc-5.3.0 → taxcalc-6.1.0}/.gitignore +5 -3
  3. {taxcalc-5.3.0 → taxcalc-6.1.0}/MANIFEST.in +0 -2
  4. {taxcalc-5.3.0 → taxcalc-6.1.0}/Makefile +12 -13
  5. {taxcalc-5.3.0/taxcalc.egg-info → taxcalc-6.1.0}/PKG-INFO +1 -1
  6. {taxcalc-5.3.0 → taxcalc-6.1.0}/conda.recipe/meta.yaml +2 -0
  7. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/releases.md +61 -5
  8. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/RELEASING.md +3 -1
  9. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/contributor_guide.md +5 -5
  10. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/testing.md +24 -43
  11. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/index.md +1 -1
  12. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe00.md +1 -10
  13. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/data.md +14 -16
  14. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/overview.md +21 -20
  15. {taxcalc-5.3.0 → taxcalc-6.1.0}/environment.yml +4 -0
  16. {taxcalc-5.3.0 → taxcalc-6.1.0}/pytest.ini +2 -6
  17. {taxcalc-5.3.0 → taxcalc-6.1.0}/setup.py +1 -1
  18. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/__init__.py +1 -1
  19. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/calcfunctions.py +11 -11
  20. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/calculator.py +1 -1
  21. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cli/tc.py +1 -8
  22. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/data.py +1 -2
  23. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/policy.py +7 -22
  24. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/policy_current_law.json +6 -6
  25. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/records.py +78 -82
  26. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/records_variables.json +106 -106
  27. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/2017_law.json +1 -1
  28. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ARPA.json +1 -1
  29. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Renacci.json +1 -1
  30. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/TCJA.json +1 -1
  31. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2016.json +1 -1
  32. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2017.json +1 -1
  33. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/taxcalcio.py +60 -51
  34. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/conftest.py +19 -14
  35. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/reforms.json +1 -1
  36. taxcalc-6.1.0/taxcalc/tests/reforms_expect.csv +61 -0
  37. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_4package.py +3 -15
  38. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_calcfunctions.py +2 -2
  39. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_calculator.py +197 -160
  40. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_cpscsv.py +0 -22
  41. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_data.py +11 -3
  42. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_parameters.py +42 -0
  43. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_records.py +139 -8
  44. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_reforms.py +5 -7
  45. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_taxcalcio.py +3 -58
  46. {taxcalc-5.3.0 → taxcalc-6.1.0/taxcalc.egg-info}/PKG-INFO +1 -1
  47. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/SOURCES.txt +0 -6
  48. taxcalc-5.3.0/taxcalc/puf_ratios.csv +0 -26
  49. taxcalc-5.3.0/taxcalc/puf_weights.csv.gz +0 -0
  50. taxcalc-5.3.0/taxcalc/tests/reforms_expect.csv +0 -61
  51. taxcalc-5.3.0/taxcalc/tests/test_compare.py +0 -330
  52. taxcalc-5.3.0/taxcalc/tests/test_compatible_data.py +0 -334
  53. taxcalc-5.3.0/taxcalc/tests/test_puf_var_stats.py +0 -194
  54. taxcalc-5.3.0/taxcalc/tests/test_pufcsv.py +0 -328
  55. {taxcalc-5.3.0 → taxcalc-6.1.0}/.coveragerc +0 -0
  56. {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/FUNDING.yml +0 -0
  57. {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/check_jupyterbook.yml +0 -0
  58. {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/deploy_jupyterbook.yml +0 -0
  59. {taxcalc-5.3.0 → taxcalc-6.1.0}/.github/workflows/deploy_parameters_docs.yml +0 -0
  60. {taxcalc-5.3.0 → taxcalc-6.1.0}/LICENSE +0 -0
  61. {taxcalc-5.3.0 → taxcalc-6.1.0}/PSL_catalog.json +0 -0
  62. {taxcalc-5.3.0 → taxcalc-6.1.0}/README.md +0 -0
  63. {taxcalc-5.3.0 → taxcalc-6.1.0}/codecov.yml +0 -0
  64. {taxcalc-5.3.0 → taxcalc-6.1.0}/conda.recipe/bld.bat +0 -0
  65. {taxcalc-5.3.0 → taxcalc-6.1.0}/conda.recipe/build.sh +0 -0
  66. {taxcalc-5.3.0 → taxcalc-6.1.0}/csv_show.sh +0 -0
  67. {taxcalc-5.3.0 → taxcalc-6.1.0}/csv_vars.sh +0 -0
  68. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/PSL.svg +0 -0
  69. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_config.yml +0 -0
  70. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_static/atr.png +0 -0
  71. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_static/mtr.png +0 -0
  72. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_static/pch.png +0 -0
  73. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/_toc.yml +0 -0
  74. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/LICENSE.md +0 -0
  75. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/history.md +0 -0
  76. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/about/roadmap.md +0 -0
  77. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/calcfunctions.rst +0 -0
  78. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/calculator.rst +0 -0
  79. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/consumption.rst +0 -0
  80. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/data.rst +0 -0
  81. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/decorators.rst +0 -0
  82. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/growdiff.rst +0 -0
  83. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/growfactors.rst +0 -0
  84. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/parameters.rst +0 -0
  85. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/policy.rst +0 -0
  86. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/public_api.rst +0 -0
  87. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/records.rst +0 -0
  88. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/taxcalcio.rst +0 -0
  89. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/utils.rst +0 -0
  90. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/api/utilsprvt.rst +0 -0
  91. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/param_naming.md +0 -0
  92. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/contributing/pr_workflow.md +0 -0
  93. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/README.md +0 -0
  94. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/assumption_params.md +0 -0
  95. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/cli.md +0 -0
  96. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/index.md +0 -0
  97. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/input_vars.md +0 -0
  98. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/make/make_io_vars.py +0 -0
  99. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/make/make_params.py +0 -0
  100. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/make/make_uguide.py +0 -0
  101. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/output_vars.md +0 -0
  102. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/policy_params.md +0 -0
  103. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/python_interface.md +0 -0
  104. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/assumption_params_template.md +0 -0
  105. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/input_vars_template.md +0 -0
  106. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/output_vars_template.md +0 -0
  107. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/guide/templates/policy_params_template.md +0 -0
  108. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/README.md +0 -0
  109. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/_static/reformA.json +0 -0
  110. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/_static/reformB.json +0 -0
  111. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/_static/reformC.json +0 -0
  112. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/convert_all.sh +0 -0
  113. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/index.md +0 -0
  114. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe01.md +0 -0
  115. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe02.md +0 -0
  116. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe03.md +0 -0
  117. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe04.md +0 -0
  118. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe04_pandas.md +0 -0
  119. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe05.md +0 -0
  120. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/md_src/recipe06.md +0 -0
  121. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe00.ipynb +0 -0
  122. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe01.ipynb +0 -0
  123. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe02.ipynb +0 -0
  124. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe03.ipynb +0 -0
  125. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe04.ipynb +0 -0
  126. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe04_pandas.ipynb +0 -0
  127. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe05.ipynb +0 -0
  128. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/recipes/recipe06.ipynb +0 -0
  129. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/starting.md +0 -0
  130. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/usage/tcja_after_2025.md +0 -0
  131. {taxcalc-5.3.0 → taxcalc-6.1.0}/docs/use_cases.md +0 -0
  132. {taxcalc-5.3.0 → taxcalc-6.1.0}/gitpr +0 -0
  133. {taxcalc-5.3.0 → taxcalc-6.1.0}/gitpr.bat +0 -0
  134. {taxcalc-5.3.0 → taxcalc-6.1.0}/gitsync +0 -0
  135. {taxcalc-5.3.0 → taxcalc-6.1.0}/gitsync.bat +0 -0
  136. {taxcalc-5.3.0 → taxcalc-6.1.0}/pyproject.toml +0 -0
  137. {taxcalc-5.3.0 → taxcalc-6.1.0}/setup.cfg +0 -0
  138. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/assumptions/ASSUMPTIONS.md +0 -0
  139. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/assumptions/README.md +0 -0
  140. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/assumptions/economic_assumptions_template.json +0 -0
  141. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cli/__init__.py +0 -0
  142. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/conftest.py +0 -0
  143. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/consumption.json +0 -0
  144. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/consumption.py +0 -0
  145. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cps.csv.gz +0 -0
  146. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/cps_weights.csv.gz +0 -0
  147. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/decorators.py +0 -0
  148. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growdiff.json +0 -0
  149. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growdiff.py +0 -0
  150. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growfactors.csv +0 -0
  151. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/growfactors.py +0 -0
  152. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/parameters.py +0 -0
  153. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/2017_law.out.csv +0 -0
  154. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ARPA.out.csv +0 -0
  155. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/BrownKhanna.json +0 -0
  156. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/BrownKhanna.out.csv +0 -0
  157. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/CARES.json +0 -0
  158. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/CARES.out.csv +0 -0
  159. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.json +0 -0
  160. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ConsolidatedAppropriationsAct2021.out.csv +0 -0
  161. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Larson2019.json +0 -0
  162. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Larson2019.out.csv +0 -0
  163. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/README.md +0 -0
  164. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/REFORMS.md +0 -0
  165. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Renacci.out.csv +0 -0
  166. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/SandersDeFazio.json +0 -0
  167. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/SandersDeFazio.out.csv +0 -0
  168. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/TCJA.md +0 -0
  169. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/TCJA.out.csv +0 -0
  170. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2016.out.csv +0 -0
  171. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/Trump2017.out.csv +0 -0
  172. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/Clinton2016.json +0 -0
  173. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/RyanBrady.json +0 -0
  174. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_House.json +0 -0
  175. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_House_Amended.json +0 -0
  176. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Reconciliation.json +0 -0
  177. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Senate.json +0 -0
  178. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Senate_111417.json +0 -0
  179. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/archive/TCJA_Senate_120117.json +0 -0
  180. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/cases.csv +0 -0
  181. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ext.json +0 -0
  182. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/growfactors_ext.csv +0 -0
  183. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes0.json +0 -0
  184. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes0.out.csv +0 -0
  185. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes1.json +0 -0
  186. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes1.out.csv +0 -0
  187. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes2.json +0 -0
  188. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes2.out.csv +0 -0
  189. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes3.json +0 -0
  190. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/reforms/ptaxes3.out.csv +0 -0
  191. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/benefits_expect.csv +0 -0
  192. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/cmpi_cps_expect.txt +0 -0
  193. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/cmpi_puf_expect.txt +0 -0
  194. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/cpscsv_agg_expect.csv +0 -0
  195. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/puf_var_correl_coeffs_2016.csv +0 -0
  196. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/puf_var_wght_means_by_year.csv +0 -0
  197. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/pufcsv_agg_expect.csv +0 -0
  198. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/pufcsv_mtr_expect.txt +0 -0
  199. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_benefits.py +0 -0
  200. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_consumption.py +0 -0
  201. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_decorators.py +0 -0
  202. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_growdiff.py +0 -0
  203. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_growfactors.py +0 -0
  204. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_policy.py +0 -0
  205. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_responses.py +0 -0
  206. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/tests/test_utils.py +0 -0
  207. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/utils.py +0 -0
  208. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/utilsprvt.py +0 -0
  209. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/CSV_INPUT_VARS.md +0 -0
  210. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/CSV_OUTPUT_VARS.md +0 -0
  211. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/README.md +0 -0
  212. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/Differences_Explained.md +0 -0
  213. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/README.md +0 -0
  214. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a17-taxdiffs-expect.csv +0 -0
  215. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a18-taxdiffs-expect.csv +0 -0
  216. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a19-taxdiffs-expect.csv +0 -0
  217. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a20-taxdiffs-expect.csv +0 -0
  218. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/a21-taxdiffs-expect.csv +0 -0
  219. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b17-taxdiffs-expect.csv +0 -0
  220. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b18-taxdiffs-expect.csv +0 -0
  221. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b19-taxdiffs-expect.csv +0 -0
  222. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b20-taxdiffs-expect.csv +0 -0
  223. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv +0 -0
  224. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv +0 -0
  225. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv +0 -0
  226. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv +0 -0
  227. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/input_setup.py +0 -0
  228. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/main_comparison.py +0 -0
  229. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/prepare_taxcalc_input.py +0 -0
  230. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/process_taxcalc_output.py +0 -0
  231. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/taxsim_emulation.json +0 -0
  232. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/taxsim_input.py +0 -0
  233. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/tc_sims.py +0 -0
  234. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/taxsim35/tests_35.py +0 -0
  235. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc/validation/tests_35.sh +0 -0
  236. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/dependency_links.txt +0 -0
  237. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/entry_points.txt +0 -0
  238. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/requires.txt +0 -0
  239. {taxcalc-5.3.0 → taxcalc-6.1.0}/taxcalc.egg-info/top_level.txt +0 -0
  240. {taxcalc-5.3.0 → taxcalc-6.1.0}/tctest-nojit.sh +0 -0
@@ -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 ""
@@ -97,11 +91,16 @@ cstest:
97
91
  @-pycodestyle --ignore=E501,E121 $(TESTS_JSON_FILES)
98
92
  @-pylint $(PYLINT_OPTIONS) --ignore-paths=$(EXCLUDED_PATHS) .
99
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
+
100
99
  define coverage-cleanup
101
100
  rm -f .coverage htmlcov/*
102
101
  endef
103
102
 
104
- COVMARK = "not requires_pufcsv and not pre_release"
103
+ COVMARK = "not requires_puf and not requires_tmd"
105
104
 
106
105
  OS := $(shell uname -s)
107
106
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxcalc
3
- Version: 5.3.0
3
+ Version: 6.1.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
@@ -17,6 +17,7 @@ requirements:
17
17
  - curl
18
18
  - openpyxl
19
19
  - behresp
20
+ - "mcp[cli]"
20
21
 
21
22
  run:
22
23
  - "python>=3.11, <3.14"
@@ -28,6 +29,7 @@ requirements:
28
29
  - curl
29
30
  - openpyxl
30
31
  - behresp
32
+ - "mcp[cli]"
31
33
 
32
34
  test:
33
35
  commands:
@@ -1,8 +1,57 @@
1
1
  Release history
2
2
  ===============
3
- Go [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclosed)
3
+ Go
4
+ [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclosed)
4
5
  for a complete commit history.
5
6
 
7
+
8
+ 2025-10-11 Release 6.1.0
9
+ ------------------------
10
+ (last merged pull request is
11
+ [#2965](https://github.com/PSLmodels/Tax-Calculator/pull/2965))
12
+
13
+ **This is an enhancement release.**
14
+
15
+ **API Changes**
16
+
17
+ **New Features**
18
+
19
+ - Rename two policy parameters to clarify they are addons not levels
20
+ [[#2965](https://github.com/PSLmodels/Tax-Calculator/pull/2965) by
21
+ Martin Holmer]
22
+
23
+ - Update dependencies in `environment.yml` and `conda.recipe/meta.yaml` files
24
+ [[#2964](https://github.com/PSLmodels/Tax-Calculator/pull/2964) by
25
+ Martin Holmer]
26
+
27
+ **Bug Fixes**
28
+
29
+
30
+ 2025-09-24 Release 6.0.0
31
+ ------------------------
32
+ (last merged pull request is
33
+ [#2961](https://github.com/PSLmodels/Tax-Calculator/pull/2961))
34
+
35
+ **This is a major release with changes that make Tax-Calculator
36
+ incompatible with earlier releases.**
37
+
38
+ **API Changes**
39
+
40
+ - Remove the [taxdata](https://github.com/PSLmodels/taxdata)-produced
41
+ `puf_weights.csv.gz` and `puf_ratios.csv` files from the
42
+ Tax-Calculator repository. Adds a new `Records.puf_constructor`
43
+ static method for use with PUF data. Users will now need to supply
44
+ those PUF weights and PUF ratios files (from the `taxdata`
45
+ repository) just as they have always needed to supply the `puf.csv`
46
+ file from the `taxdata` repository.
47
+ [[#2961](https://github.com/PSLmodels/Tax-Calculator/pull/2961) by
48
+ Martin Holmer]
49
+
50
+ **New Features**
51
+
52
+ **Bug Fixes**
53
+
54
+
6
55
  2025-09-19 Release 5.3.0
7
56
  ------------------------
8
57
  (last merged pull request is
@@ -13,13 +62,17 @@ for a complete commit history.
13
62
  **API Changes**
14
63
 
15
64
  **New Features**
65
+
16
66
  - Update new PUF weights and ratios files.
17
67
  [[#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]
68
+ Bodi Yang], from the update in [[TaxData PR
69
+ #452](https://github.com/PSLmodels/ taxdata/pull/452) by Bodi Yang]
20
70
 
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
71
+ Note: PUF users are required to produce new `puf.csv` file from
72
+ TaxData repository and replace the old file in the Tax-Calculator
73
+ directory. Correct usage: Tax-Calculator >= 5.3.0 versions are
74
+ compatible with the newly produced `puf.csv` file; Tax-Calculator <=
75
+ 5.2.0 versions are compatible with the previous `puf.csv` file
23
76
 
24
77
  - Make `FST_AGI_thd` parameters to be non inflation-indexed
25
78
  [[#2951](https://github.com/PSLmodels/Tax-Calculator/pull/2951) by
@@ -41,6 +94,7 @@ for a complete commit history.
41
94
  [[#2957](https://github.com/PSLmodels/Tax-Calculator/pull/2957) by
42
95
  Martin Holmer]
43
96
 
97
+ **Bug Fixes**
44
98
 
45
99
 
46
100
  2025-08-08 Release 5.2.0
@@ -61,6 +115,8 @@ for a complete commit history.
61
115
  [[#2944](https://github.com/PSLmodels/Tax-Calculator/pull/2944) by
62
116
  Martin Holmer]
63
117
 
118
+ **Bug Fixes**
119
+
64
120
 
65
121
  2025-07-22 Release 5.1.0
66
122
  ------------------------
@@ -22,7 +22,9 @@ In the top-level Tax-Calculator directory, do the following:
22
22
 
23
23
  --> run `make cstest` [to confirm project coding style is being followed]
24
24
 
25
- --> 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]
26
28
 
27
29
  --> run `make tctest-jit` [to make sure JIT decorators are not hiding bugs]
28
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.3.0 (2025-09-19) <about/releases>`
57
+ {doc}`6.1.0 (2025-10-11) <about/releases>`
58
58
 
59
59
  If you are already using Tax-Calculator, upgrade using the following command:
60
60
  ```
@@ -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,21 +41,20 @@ 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
 
@@ -71,9 +70,8 @@ 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
 
@@ -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
 
@@ -11,6 +11,9 @@ dependencies:
11
11
  - setuptools
12
12
  - pytest
13
13
  - pytest-xdist
14
+ - pytest-asyncio
15
+ - requests
16
+ - aiohttp
14
17
  - pycodestyle
15
18
  - pylint
16
19
  - coverage
@@ -20,3 +23,4 @@ dependencies:
20
23
  - pip:
21
24
  - jupyter-book
22
25
  - "paramtools>=0.20.0"
26
+ - "mcp[cli]"
@@ -2,15 +2,11 @@
2
2
  testpaths =
3
3
  taxcalc
4
4
  markers =
5
- requires_pufcsv
6
- pre_release
5
+ requires_puf
6
+ requires_tmd
7
7
  local
8
8
  benefits
9
- compatible_data
10
- cps
11
- cpscsv_agg
12
9
  itmded_vars
13
- pufcsv_agg
14
10
  qbid
15
11
  reforms
16
12
  rtr
@@ -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.3.0"
10
+ VERSION = "6.1.0"
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__ = '5.3.0'
17
+ __version__ = '6.1.0'
18
18
  __min_python3_version__ = 11
19
19
  __max_python3_version__ = 13
@@ -1871,7 +1871,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
1871
1871
  dwks14, c05700, e62900, e00700, dwks10, age_head, age_spouse,
1872
1872
  earned, cmbtp, qbided,
1873
1873
  AMT_child_em_c_age, AMT_brk1,
1874
- AMT_em, AMT_prt, AMT_rt1, AMT_rt2,
1874
+ AMT_em, AMT_prt, AMT_rt1, AMT_rt2_addon,
1875
1875
  AMT_child_em, AMT_em_ps, AMT_em_pe,
1876
1876
  AMT_CG_brk1, AMT_CG_brk2, AMT_CG_brk3, AMT_CG_rt1, AMT_CG_rt2,
1877
1877
  AMT_CG_rt3, AMT_CG_rt4, c05800, c09600, c62100):
@@ -1946,8 +1946,8 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
1946
1946
  AMT exemption phaseout rate
1947
1947
  AMT_rt1: float
1948
1948
  AMT rate 1
1949
- AMT_rt2: float
1950
- Additional AMT rate for AMT taxable income about AMT bracket 1
1949
+ AMT_rt2_addon: float
1950
+ Additional AMT rate for AMT taxable income above AMT bracket 1
1951
1951
  AMT_child_em: float
1952
1952
  Child AMT exemption additional income base
1953
1953
  AMT_em_ps: list
@@ -1977,14 +1977,14 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
1977
1977
  c09600: float
1978
1978
  Alternative Minimum Tax (AMT) liability
1979
1979
  c62100: float
1980
- Alternative Minimum Tax (AMT)
1980
+ Alternative Minimum Tax (AMT) taxable income
1981
1981
 
1982
1982
  Returns
1983
1983
  -------
1984
1984
  c62100: float
1985
- Alternative Minimum Tax (AMT)
1985
+ Alternative Minimum Tax (AMT) taxable income
1986
1986
  c09600: float
1987
- Alternative Minimum Tax (AMT) liability
1987
+ Alternative Minimum Tax (AMT) tax liability
1988
1988
  c05800: float
1989
1989
  Total (regular + AMT) income tax liability before credits
1990
1990
  """
@@ -2012,7 +2012,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
2012
2012
  line29 = min(line29, earned + AMT_child_em)
2013
2013
  line30 = max(0., c62100 - line29)
2014
2014
  line3163 = (AMT_rt1 * line30 +
2015
- AMT_rt2 * max(0., (line30 - (AMT_brk1 / sep))))
2015
+ AMT_rt2_addon * max(0., (line30 - (AMT_brk1 / sep))))
2016
2016
  if dwks10 > 0. or dwks13 > 0. or dwks14 > 0. or dwks19 > 0. or e24515 > 0.:
2017
2017
  # complete Form 6251, Part III (line36 is equal to line30)
2018
2018
  line37 = dwks13
@@ -2021,7 +2021,7 @@ def AMT(e07300, dwks13, standard, f6251, c00100, c18300, taxbc,
2021
2021
  line40 = min(line30, line39)
2022
2022
  line41 = max(0., line30 - line40)
2023
2023
  line42 = (AMT_rt1 * line41 +
2024
- AMT_rt2 * max(0., (line41 - (AMT_brk1 / sep))))
2024
+ AMT_rt2_addon * max(0., (line41 - (AMT_brk1 / sep))))
2025
2025
  line44 = dwks14
2026
2026
  line45 = max(0., AMT_CG_brk1[MARS - 1] - line44)
2027
2027
  line46 = min(line30, line37)
@@ -2268,7 +2268,7 @@ def EITCamount(basic_frac, phasein_rate, earnings, max_amount,
2268
2268
  @iterate_jit(nopython=True)
2269
2269
  def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
2270
2270
  e02000, e26270, age_head, age_spouse, earned, earned_p, earned_s,
2271
- EITC_ps, EITC_MinEligAge, EITC_MaxEligAge, EITC_ps_MarriedJ,
2271
+ EITC_ps, EITC_MinEligAge, EITC_MaxEligAge, EITC_ps_addon_MarriedJ,
2272
2272
  EITC_rt, EITC_c, EITC_prt, EITC_basic_frac,
2273
2273
  EITC_InvestIncome_c, EITC_excess_InvestIncome_rt,
2274
2274
  EITC_indiv, EITC_sep_filers_elig, c59660):
@@ -2315,7 +2315,7 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
2315
2315
  Minimum age for childless EITC eligibility
2316
2316
  EITC_MaxEligAge: int
2317
2317
  Maximum age for childless EITC eligibility
2318
- EITC_ps_MarriedJ: list
2318
+ EITC_ps_addon_MarriedJ: list
2319
2319
  Extra earned income credit phaseout start AGI for
2320
2320
  married filling jointly
2321
2321
  EITC_rt: list
@@ -2360,7 +2360,7 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
2360
2360
  c59660 = eitc
2361
2361
 
2362
2362
  if MARS == 2:
2363
- po_start = EITC_ps[EIC] + EITC_ps_MarriedJ[EIC]
2363
+ po_start = EITC_ps[EIC] + EITC_ps_addon_MarriedJ[EIC]
2364
2364
  if not EITC_indiv:
2365
2365
  # filing unit EITC rather than individual EITC
2366
2366
  eitc = EITCamount(EITC_basic_frac,
@@ -81,7 +81,7 @@ class Calculator():
81
81
  The most efficient way to specify current-law and reform Calculator
82
82
  objects is as follows:
83
83
  pol = Policy()
84
- rec = Records()
84
+ rec = Records.cps_constructor()
85
85
  calc1 = Calculator(policy=pol, records=rec) # current-law
86
86
  pol.implement_reform(...)
87
87
  calc2 = Calculator(policy=pol, records=rec) # reform