diff --git a/Makefile b/Makefile index 80b2ddade..76ab75647 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ help: clean: @find . -name *pyc -exec rm {} \; @find . -name *cache -maxdepth 1 -exec rm -r {} \; - @conda uninstall taxcalc --yes --quiet 2>&1 > /dev/null + @pip uninstall taxcalc --yes --quiet 2>&1 > /dev/null .PHONY=package package: @@ -51,7 +51,7 @@ endef .PHONY=pytest-cps pytest-cps: @$(pytest-setup) - @cd taxcalc ; pytest -n4 -m "not requires_pufcsv and not pre_release" + @cd taxcalc ; pytest -n4 --disable-warnings -m "not requires_pufcsv and not pre_release" @$(pytest-cleanup) .PHONY=pytest diff --git a/docs/about/releases.md b/docs/about/releases.md index 7ea0c1c4c..b77ee4a71 100644 --- a/docs/about/releases.md +++ b/docs/about/releases.md @@ -3,6 +3,27 @@ Release history Go [here](https://github.com/PSLmodels/Tax-Calculator/pulls?q=is%3Apr+is%3Aclosed) for a complete commit history. +2024-02-10 Release 3.5.0 +------------------------ +(last merged pull request is +[#2715](https://github.com/PSLmodels/Tax-Calculator/pull/2715)) + +**This is an enhancement and bug-fix release.** + +**API Changes** + +**New Features** +- Add baseline table output to `cli` command [[#2714](https://github.com/PSLmodels/Tax-Calculator/pull/2714) by Martin Holmer] +- Additional TAXSIM-35 validation tools, serveral PRS by Bodi Yang and Jason DeBacker + +**Bug Fixes** +- Avoid Pandas deprecation warnings[[#2715](https://github.com/PSLmodels/Tax-Calculator/pull/2785) by Martin Holmer] +- Correctly account for the `odc` variable as refundable in 2021 [[#2703](https://github.com/PSLmodels/Tax-Calculator/pull/2704) by Bodi Yang] +- Fix incorrect value for `EITC_ps_MarriedJ` in 2020 [[#2699](https://github.com/PSLmodels/Tax-Calculator/pull/2699) by Bodi Yang] +- Fix incorrect value for ACTC amount for 2023-2025 to reflect inflation adjustment [[#2691](https://github.com/PSLmodels/Tax-Calculator/pull/2691) by Jason DeBacker] + + + 2023-06-20 Release 3.4.1 ------------------------ (last merged pull request is diff --git a/docs/index.md b/docs/index.md index d6fd31818..058f1b2d2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -51,7 +51,7 @@ The cross-model validation work with NBER's TAXSIM-27 model is described ## Latest release -{doc}`3.4.1 (2023-06-20) ` +{doc}`3.5.0 (2024-02-10) ` If you are already using Tax-Calculator, upgrade using the following command: diff --git a/setup.py b/setup.py index e86e0b007..b90594a85 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ with open('README.md') as f: longdesc = f.read() -version = '3.4.1' +version = '3.5.0' config = { 'description': 'Tax Calculator', diff --git a/taxcalc.egg-info/PKG-INFO b/taxcalc.egg-info/PKG-INFO index 906a36d35..0f8ed3e11 100644 --- a/taxcalc.egg-info/PKG-INFO +++ b/taxcalc.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: taxcalc -Version: 3.4.1 +Version: 3.5.0 Summary: taxcalc Home-page: https://github.com/PSLmodels/Tax-Calculator Download-URL: https://github.com/PSLmodels/Tax-Calculator @@ -16,6 +16,12 @@ Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Topic :: Software Development :: Libraries :: Python Modules +License-File: LICENSE.md +Requires-Dist: setuptools +Requires-Dist: numpy +Requires-Dist: pandas +Requires-Dist: bokeh +Requires-Dist: numba [![PSL cataloged](https://img.shields.io/badge/PSL-cataloged-a0a0a0.svg)](https://www.PSLmodels.org) [![Python 3.6+](https://img.shields.io/badge/python-3.6%2B-blue.svg)](https://www.python.org/downloads/release/python-360/) diff --git a/taxcalc.egg-info/SOURCES.txt b/taxcalc.egg-info/SOURCES.txt index d45a5fe97..747863a02 100644 --- a/taxcalc.egg-info/SOURCES.txt +++ b/taxcalc.egg-info/SOURCES.txt @@ -1,3 +1,4 @@ +LICENSE.md MANIFEST.in README.md setup.py diff --git a/taxcalc/__init__.py b/taxcalc/__init__.py index bf0cf2258..520ea9d96 100644 --- a/taxcalc/__init__.py +++ b/taxcalc/__init__.py @@ -14,4 +14,4 @@ from taxcalc.utils import * from taxcalc.cli import * -__version__ = '3.4.1' +__version__ = '3.5.0' diff --git a/taxcalc/calcfunctions.py b/taxcalc/calcfunctions.py index d911ca2f8..d1aa5ff0a 100644 --- a/taxcalc/calcfunctions.py +++ b/taxcalc/calcfunctions.py @@ -577,7 +577,7 @@ def CapGains(p23250, p22250, sep, ALD_StudentLoan_hc, @iterate_jit(nopython=True) -def SSBenefits(MARS, ymod, e02400, SS_thd50, SS_thd85, +def SSBenefits(MARS, ymod, e02400, SS_all_in_agi, SS_thd50, SS_thd85, SS_percentage1, SS_percentage2, c02500): """ Calculates OASDI benefits included in AGI, c02500. @@ -590,6 +590,8 @@ def SSBenefits(MARS, ymod, e02400, SS_thd50, SS_thd85, Variable that is used in OASDI benefit taxation logic e02400: float Total social security (OASDI) benefits + SS_all_in_agi: bool + Whether all social security benefits are included in AGI SS_thd50: list Threshold for social security benefit taxability (1) SS_thd85: list @@ -615,6 +617,8 @@ def SSBenefits(MARS, ymod, e02400, SS_thd50, SS_thd85, SS_percentage1 * min(e02400, SS_thd85[MARS - 1] - SS_thd50[MARS - 1]), SS_percentage2 * e02400) + if SS_all_in_agi: + c02500 = e02400 return c02500 @@ -1595,7 +1599,7 @@ def GainsTax(e00650, c01000, c23650, p23250, e01100, e58990, e00200, CG_nodiff, PT_EligibleRate_active, PT_EligibleRate_passive, PT_wages_active_income, PT_top_stacking, CG_rt1, CG_rt2, CG_rt3, CG_rt4, CG_brk1, CG_brk2, CG_brk3, - dwks10, dwks13, dwks14, dwks19, c05700, taxbc): + dwks10, dwks13, dwks14, dwks19, dwks43, c05700, taxbc): """ GainsTax function implements (2015) Schedule D Tax Worksheet logic for the special taxation of long-term capital gains and qualified dividends @@ -1725,6 +1729,8 @@ def GainsTax(e00650, c01000, c23650, p23250, e01100, e58990, e00200, Maximum of 0 and dwks1 - dwks13 dwks19: float Maximum of dwks17 and dwks16 + dwks43: float + separate tax on long-term capital gains and qualified dividends c05700: float Lump sum distributions taxbc: float @@ -1740,6 +1746,8 @@ def GainsTax(e00650, c01000, c23650, p23250, e01100, e58990, e00200, Maximum of 0 and dwks1 - dwks13 dwks19: float Maximum of dwks17 and dwks16 + dwks43: float + separate tax on long-term capital gains and qualified dividends c05700: float Lump sum distributions taxbc: float @@ -1834,12 +1842,13 @@ def GainsTax(e00650, c01000, c23650, p23250, e01100, e58990, e00200, dwks13 = 0. dwks14 = 0. dwks19 = 0. + dwks43 = 0. # final calculations done no matter what the value of hasqdivltcg c05100 = c24580 # because foreign earned income exclusion is assumed zero c05700 = 0. # no Form 4972, Lump Sum Distributions taxbc = c05700 + c05100 - return (dwks10, dwks13, dwks14, dwks19, c05700, taxbc) + return (dwks10, dwks13, dwks14, dwks19, dwks43, c05700, taxbc) @iterate_jit(nopython=True) diff --git a/taxcalc/cli/tc.py b/taxcalc/cli/tc.py index 555f497d0..3c123d4aa 100644 --- a/taxcalc/cli/tc.py +++ b/taxcalc/cli/tc.py @@ -109,7 +109,8 @@ def cli_tc_main(): default=None) parser.add_argument('--sqldb', help=('optional flag that writes SQLite database ' - 'with dump table containing same output as ' + 'with two tables (baseline and reform) each ' + 'containing same output variables as ' 'produced by --dump option.'), default=False, action="store_true") diff --git a/taxcalc/policy_current_law.json b/taxcalc/policy_current_law.json index 040a241ef..cd8d8303e 100644 --- a/taxcalc/policy_current_law.json +++ b/taxcalc/policy_current_law.json @@ -356,6 +356,32 @@ "cps": true } }, + "SS_all_in_agi": { + "title": "Include all social security benefits in AGI", + "description": "All social security benefits will be included in AGI.", + "notes": "", + "section_1": "Social Security Taxability", + "section_2": "Social Security Benefit Taxability", + "indexable": false, + "indexed": false, + "type": "bool", + "value": [ + { + "year": 2013, + "value": false + } + ], + "validators": { + "range": { + "min": false, + "max": true + } + }, + "compatible_data": { + "puf": true, + "cps": true + } + }, "SS_thd50": { "title": "Threshold for Social Security benefit taxability 1", "description": "The first threshold for Social Security benefit taxability: if taxpayers have provisional income greater than this threshold, up to rate 1 of their Social Security benefit will be subject to tax under current law.", @@ -20666,4 +20692,4 @@ "cps": true } } -} \ No newline at end of file +} diff --git a/taxcalc/records.py b/taxcalc/records.py index 4da7ef623..a5b80ef08 100644 --- a/taxcalc/records.py +++ b/taxcalc/records.py @@ -350,7 +350,7 @@ def _adjust(self, year): # pylint: disable=no-member if self.ADJ.size > 0: # Interest income - self.e00300 *= self.ADJ['INT{}'.format(year)][self.agi_bin].values + self.e00300 *= self.ADJ[f'INT{year}'].iloc[self.agi_bin].values def _read_ratios(self, ratios): """ diff --git a/taxcalc/records_variables.json b/taxcalc/records_variables.json index ff97c3558..ceed4af15 100644 --- a/taxcalc/records_variables.json +++ b/taxcalc/records_variables.json @@ -1081,6 +1081,11 @@ "desc": "search taxcalc/calcfunctions.py for how calculated and used", "form": {"2013-20??": "calculated variable"} }, + "dwks43": { + "type": "float", + "desc": "separate tax on long-term capital gains and qualified dividends", + "form": {"2013-20??": "calculated variable"} + }, "fstax": { "type": "float", "desc": "search taxcalc/calcfunctions.py for how calculated and used", diff --git a/taxcalc/taxcalcio.py b/taxcalc/taxcalcio.py index 0756cb1fa..ac85af4bb 100644 --- a/taxcalc/taxcalcio.py +++ b/taxcalc/taxcalcio.py @@ -427,8 +427,9 @@ def analyze(self, writing_output_file=False, calculated variables using their Tax-Calculator names output_sqldb: boolean - whether or not to write SQLite3 database with dump table - containing same output as written by output_dump to a csv file + whether or not to write SQLite3 database with two tables + (baseline and reform) each containing same output as written + by output_dump to a csv file Returns ------- @@ -449,10 +450,17 @@ def analyze(self, writing_output_file=False, (mtr_paytax, mtr_inctax, _) = self.calc.mtr(wrt_full_compensation=False, calc_all_already_called=True) + self.calc_base.calc_all() + calc_base_calculated = True + (mtr_paytax_base, mtr_inctax_base, + _) = self.calc_base.mtr(wrt_full_compensation=False, + calc_all_already_called=True) else: # definitely do not need marginal tax rates mtr_paytax = None mtr_inctax = None + mtr_paytax_base = None + mtr_inctax_base = None # extract output if writing_output_file if writing_output_file: self.write_output_file(output_dump, dump_varset, @@ -460,7 +468,10 @@ def analyze(self, writing_output_file=False, self.write_doc_file() # optionally write --sqldb output to SQLite3 database if output_sqldb: - self.write_sqldb_file(dump_varset, mtr_paytax, mtr_inctax) + self.write_sqldb_file( + dump_varset, mtr_paytax, mtr_inctax, + mtr_paytax_base, mtr_inctax_base + ) # optionally write --tables output to text file if output_tables: if not calc_base_calculated: @@ -480,7 +491,9 @@ def write_output_file(self, output_dump, dump_varset, Write output to CSV-formatted file. """ if output_dump: - outdf = self.dump_output(dump_varset, mtr_inctax, mtr_paytax) + outdf = self.dump_output( + self.calc, dump_varset, mtr_inctax, mtr_paytax + ) column_order = sorted(outdf.columns) else: outdf = self.minimal_output() @@ -504,15 +517,25 @@ def write_doc_file(self): with open(doc_fname, 'w') as dfile: dfile.write(doc) - def write_sqldb_file(self, dump_varset, mtr_paytax, mtr_inctax): + def write_sqldb_file(self, dump_varset, mtr_paytax, mtr_inctax, + mtr_paytax_base, mtr_inctax_base): """ Write dump output to SQLite3 database table dump. """ - outdf = self.dump_output(dump_varset, mtr_inctax, mtr_paytax) - assert len(outdf.index) == self.calc.array_len db_fname = self._output_filename.replace('.csv', '.db') dbcon = sqlite3.connect(db_fname) - outdf.to_sql('dump', dbcon, if_exists='replace', index=False) + # write baseline table + outdf = self.dump_output( + self.calc_base, dump_varset, mtr_inctax_base, mtr_paytax_base + ) + assert len(outdf.index) == self.calc.array_len + outdf.to_sql('baseline', dbcon, if_exists='replace', index=False) + # write reform table + outdf = self.dump_output( + self.calc, dump_varset, mtr_inctax, mtr_paytax + ) + assert len(outdf.index) == self.calc.array_len + outdf.to_sql('reform', dbcon, if_exists='replace', index=False) dbcon.close() del outdf gc.collect() @@ -565,7 +588,7 @@ def write_decile_table(dfx, tfile, tkind='Totals'): decile_details=False, pop_quantiles=False, weight_by_income_measure=False) - gdfx = dfx.groupby('table_row', as_index=False) + gdfx = dfx.groupby('table_row', as_index=False, observed=True) rtns_series = gdfx.apply(unweighted_sum, 's006').values[:, 1] xinc_series = gdfx.apply(weighted_sum, 'expanded_income').values[:, 1] itax_series = gdfx.apply(weighted_sum, 'iitax').values[:, 1] @@ -687,7 +710,7 @@ def minimal_output(self): odf = pd.DataFrame(data=odict, columns=varlist) return odf - def dump_output(self, dump_varset, mtr_inctax, mtr_paytax): + def dump_output(self, calcx, dump_varset, mtr_inctax, mtr_paytax): """ Extract dump output and return it as Pandas DataFrame. """ @@ -699,7 +722,7 @@ def dump_output(self, dump_varset, mtr_inctax, mtr_paytax): # create and return dump output DataFrame odf = pd.DataFrame() for varname in varset: - vardata = self.calc.array(varname) + vardata = calcx.array(varname) if varname in recs_vinfo.INTEGER_VARS: odf[varname] = vardata else: diff --git a/taxcalc/tests/conftest.py b/taxcalc/tests/conftest.py index 511253029..4d0419843 100644 --- a/taxcalc/tests/conftest.py +++ b/taxcalc/tests/conftest.py @@ -4,7 +4,6 @@ import numpy import pandas import pytest - from pytest_harvest import get_session_results_df @@ -143,27 +142,33 @@ def pytest_sessionfinish(session): new_stats_df = get_session_results_df(session) # move test_id from index into unique column new_stats_df.reset_index(inplace=True) - old_stats_df = pandas.read_csv(os.path.join(tests_path, 'test_stats_benchmark.csv')) + old_stats_df = pandas.read_csv(os.path.join( + tests_path, 'test_stats_benchmark.csv') + ) merge_df = new_stats_df.merge(old_stats_df, on=['test_id'], how='left') # time diff for new tests is set to 0 - merge_df['time_diff'] = merge_df['duration_ms_x'] - merge_df['duration_ms_y'] + merge_df['time_diff'] = ( + merge_df['duration_ms_x'] - merge_df['duration_ms_y'] + ) merge_df['time_diff'] = merge_df['time_diff'].fillna(0) tol = 1.0 # choose tolerance in seconds tol *= 1000 + print('\n') for ind, row in merge_df.iterrows(): if row['time_diff'] > tol: diff = round(abs(row['time_diff']), 3) - print(f"{row['test_id']} is slower than the current benchmark by {diff} ms") + print((f"{row['test_id']} is slower than the " + f"current benchmark by {diff} ms")) print('\n') - for ind, row in merge_df.iterrows(): if row['time_diff'] < (-1 * tol): diff = round(abs(row['time_diff']), 3) - print(f"{row['test_id']} is faster than the current benchmark by {diff} ms") + print((f"{row['test_id']} is faster than the " + f"current benchmark by {diff} ms")) # Save new test stats to disk including time diff new_stats_df['time_diff'] = merge_df['time_diff'].values diff --git a/taxcalc/tests/test_stats_benchmark.csv b/taxcalc/tests/test_stats_benchmark.csv new file mode 100644 index 000000000..f90f0042b --- /dev/null +++ b/taxcalc/tests/test_stats_benchmark.csv @@ -0,0 +1,335 @@ +,test_id,pytest_obj,status,duration_ms,test_tuple,expected_value,revision,expect,fname,jfname,pfname,good_revision,params,is_paramtools,set_year,csv,fyear,input_data,baseline,reform,assump,outdir,year,base,ref,asm,dumpvar_str,str_valid,num_vars,time_diff +0,taxcalc/tests/test_4package.py::test_for_consistency,,passed,3.8895980000006602,,,,,,,,,,,,,,,,,,,,,,,,,,-0.020227999982580513 +1,taxcalc/tests/test_benefits.py::test_benefits,,passed,3956.398976999992,,,,,,,,,,,,,,,,,,,,,,,,,,-66.61906400000771 +2,taxcalc/tests/test_calcfunctions.py::test_calc_and_used_vars,,passed,35.43788800001835,,,,,,,,,,,,,,,,,,,,,,,,,,-2.54297399996517 +3,taxcalc/tests/test_calcfunctions.py::test_function_args_usage,,passed,1.92459600000916,,,,,,,,,,,,,,,,,,,,,,,,,,-0.0026310000009743817 +4,taxcalc/tests/test_calcfunctions.py::test_DependentCare,,passed,0.23930599999744118,,,,,,,,,,,,,,,,,,,,,,,,,,-0.014379000020880939 +5,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Married, young]",,passed,0.18724900002098366,"(0, 1000, [6000, 12000, 6000, 12000, 12000], 45, 44, [1500, 1200, 1500, 1500, 1500], 1000, 2, 0, 0, 0, 2, 0, False, 0)",12000,,,,,,,,,,,,,,,,,,,,,,,,0.002753999979177052 +6,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Married, allow charity]",,passed,0.17498599999044018,"(0, 1000, [6000, 12000, 6000, 12000, 12000], 66, 44, [1500, 1200, 1500, 1500, 1500], 1000, 2, 0, 1, 1, 2, 200, True, 300)",15800,,,,,,,,,,,,,,,,,,,,,,,,-0.0003819999960796294 +7,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Married, allow charity, over limit]",,passed,0.17825199998355856,"(0, 1000, [6000, 12000, 6000, 12000, 12000], 44, 66, [1500, 1200, 1500, 1500, 1500], 1000, 2, 0, 0, 0, 2, 400, True, 300)",13500,,,,,,,,,,,,,,,,,,,,,,,,-0.02454700003795543 +8,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Married, two old]",,passed,0.17366299999821422,"(0, 1200, [6000, 12000, 6000, 12000, 12000], 66, 67, [1500, 1200, 1500, 1500, 1500], 1000, 2, 0, 0, 0, 2, 0, True, 0)",14400,,,,,,,,,,,,,,,,,,,,,,,,0.00669000002062603 +9,taxcalc/tests/test_calcfunctions.py::test_StdDed[Single 1],,passed,0.1744950000102108,"(0, 1000, [6000, 12000, 6000, 12000, 12000], 44, 0, [1500, 1200, 1500, 1500, 1500], 1000, 1, 0, 0, 0, 2, 0, True, 0)",6000,,,,,,,,,,,,,,,,,,,,,,,,0.006421000023237894 +10,taxcalc/tests/test_calcfunctions.py::test_StdDed[Single 2],,passed,0.1748549999831539,"(0, 1000, [6000, 12000, 6000, 12000, 12000], 44, 0, [1500, 1200, 1500, 1500, 1500], 1000, 1, 0, 0, 0, 2, 0, True, 0)",6000,,,,,,,,,,,,,,,,,,,,,,,,0.003854999960140104 +11,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Married, Single]",,passed,0.18527499997844643,"(0, 1000, [6000, 12000, 6000, 12000, 12000], 44, 0, [1500, 1200, 1500, 1500, 1500], 1000, 3, 1, 0, 0, 2, 0, True, 0)",0,,,,,,,,,,,,,,,,,,,,,,,,0.018552999961229943 +12,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Marrid, Single, dep, under earn]",,passed,0.19310999999788692,"(1, 200, [6000, 12000, 6000, 12000, 12000], 44, 0, [1500, 1200, 1500, 1500, 1500], 1000, 3, 0, 0, 0, 2, 0, True, 0)",1000,,,,,,,,,,,,,,,,,,,,,,,,0.02305200001728741 +13,"taxcalc/tests/test_calcfunctions.py::test_StdDed[Married, Single, dep, over earn]",,passed,0.17417500001215558,"(1, 1000, [6000, 12000, 6000, 12000, 12000], 44, 0, [1500, 1200, 1500, 1500, 1500], 1000, 3, 0, 0, 0, 2, 0, True, 0)",1350,,,,,,,,,,,,,,,,,,,,,,,,-0.00010099998348772621 +14,taxcalc/tests/test_calcfunctions.py::test_EI_PayrollTax[case 1],,passed,0.24382399999467452,"(120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, 400, 0, 0, 0, 0, 0, 0, None, None, None, None, None, None, None, None, None, None, None)","(0, 4065, 4065, 0, 0, 3252, 25000, 10000, 15000, 10100, 17000)",,,,,,,,,,,,,,,,,,,,,,,,-0.0058740000099532785 +15,taxcalc/tests/test_calcfunctions.py::test_EI_PayrollTax[case 2],,passed,0.2492639999900348,"(120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, 400, 2000, 0, 10000, 0, 0, 3000, None, None, None, None, None, None, None, None, None, None, None)","(15000, 6146.25, 4065, 2081.25, 1040.625, 4917, 38959.375, 21167.5, 17791.875, 21380, 19820)",,,,,,,,,,,,,,,,,,,,,,,,0.029622999988987486 +16,taxcalc/tests/test_calcfunctions.py::test_EI_PayrollTax[case 3],,passed,0.2209220000111145,"(120000, 150000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, 400, 2000, 0, 10000, 0, 0, 3000, None, None, None, None, None, None, None, None, None, None, None)","(15000, 22202.25, 21453, 749.25, 374.625, 16773, 179625.375, 161833.5, 17791.875, 161380, 19820)",,,,,,,,,,,,,,,,,,,,,,,,-0.013666999990391504 +17,taxcalc/tests/test_calcfunctions.py::test_EI_PayrollTax[case 4],,passed,0.21960999998782427,"(120000, 500000, 15000, 100, 2000, 0.12, 0.03, 0, 400000, 400, 2000, 0, 10000, 0, 0, 3000, None, None, None, None, None, None, None, None, None, None, None)","(15000, 46067.85, 31953, 749.25, 374.625, 30138.6, 529625.375, 511833.5, 17791.875, 511380, 19820)",,,,,,,,,,,,,,,,,,,,,,,,0.0031449999937649686 +18,taxcalc/tests/test_calcfunctions.py::test_EI_PayrollTax[case 5],,passed,0.2199399999938123,"(120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, 400, 300, 0, 0, 0, 0, 0, None, None, None, None, None, None, None, None, None, None, None)","(300, 4065, 4065, 0, 0, 3285.3, 25300, 10279.1875, 15000, 10382, 17000)",,,,,,,,,,,,,,,,,,,,,,,,0.006000000013273221 +19,taxcalc/tests/test_calcfunctions.py::test_EI_PayrollTax[case 6],,passed,0.24201100001164377,"(120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, 400, 0, 0, 0, 0, -40000, 0, None, None, None, None, None, None, None, None, None, None, None)","(-40000, 4065, 4065, 0, 0, 3252, 0, 0, 15000, 10100, 17000)",,,,,,,,,,,,,,,,,,,,,,,,0.02760999996098698 +20,taxcalc/tests/test_calcfunctions.py::test_AfterTaxIncome,,passed,0.18071700000632518,,,,,,,,,,,,,,,,,,,,,,,,,,0.0022229999956380753 +21,taxcalc/tests/test_calcfunctions.py::test_ExpandIncome,,passed,0.1776309999854675,,,,,,,,,,,,,,,,,,,,,,,,,,0.012813000012101894 +22,taxcalc/tests/test_calcfunctions.py::test_LumpSumTax[test_tuple0-expected_value0],,passed,0.1780919999987418,"(1, 1, 2, 0, 0, 1000)","(0, 1000)",,,,,,,,,,,,,,,,,,,,,,,,0.003275000040048326 +23,taxcalc/tests/test_calcfunctions.py::test_LumpSumTax[test_tuple1-expected_value1],,passed,0.16859500001942251,"(0, 1, 2, 0, 0, 1000)","(0, 1000)",,,,,,,,,,,,,,,,,,,,,,,,0.0037970000619225175 +24,taxcalc/tests/test_calcfunctions.py::test_LumpSumTax[test_tuple2-expected_value2],,passed,0.1696060000142552,"(1, 1, 2, 100, 0, 1000)","(0, 1000)",,,,,,,,,,,,,,,,,,,,,,,,0.004747000019733688 +25,taxcalc/tests/test_calcfunctions.py::test_LumpSumTax[test_tuple3-expected_value3],,passed,0.17015699998523814,"(0, 2, 1, 100, 200, 1000)","(200, 1200)",,,,,,,,,,,,,,,,,,,,,,,,0.0010899999836056495 +26,taxcalc/tests/test_calcfunctions.py::test_LumpSumTax[test_tuple4-expected_value4],,passed,0.17028799999252442,"(0, 1, 3, 100, 300, 1000)","(300, 1300)",,,,,,,,,,,,,,,,,,,,,,,,0.0034760000175993178 +27,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple0-expected_value0],,passed,0.17505600001754829,"(1100000, 1, 1000, 100, 100, 0.1, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(10915, 11115, 12915, 11215)",,,,,,,,,,,,,,,,,,,,,,,,0.0027730000340397964 +28,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple1-expected_value1],,passed,0.17192000001386987,"(2100000, 1, 1000, 100, 100, 0.1, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(209150, 209350, 211150, 209450)",,,,,,,,,,,,,,,,,,,,,,,,0.004937000028348876 +29,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple2-expected_value2],,passed,0.17195100002709296,"(1100000, 1, 1000, 100, 100, 0, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(0, 200, 2000, 300)",,,,,,,,,,,,,,,,,,,,,,,,0.002835000032064272 +30,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple3-expected_value3],,passed,0.17227099999672646,"(1100000, 2, 1000, 100, 100, 0.1, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(10915, 11115, 12915, 11215)",,,,,,,,,,,,,,,,,,,,,,,,0.0036159999581286684 +31,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple4-expected_value4],,passed,0.1726010000027145,"(2100000, 2, 1000, 100, 100, 0.1, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(209150, 209350, 211150, 209450)",,,,,,,,,,,,,,,,,,,,,,,,0.006248999994795695 +32,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple5-expected_value5],,passed,0.17118799999593648,"(1100000, 2, 1000, 100, 100, 0, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(0, 200, 2000, 300)",,,,,,,,,,,,,,,,,,,,,,,,0.008001999987072878 +33,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple6-expected_value6],,passed,0.1706379999859564,"(510000, 3, 1000, 100, 100, 0.1, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(1003, 1203, 3003, 1303)",,,,,,,,,,,,,,,,,,,,,,,,0.004337000007126418 +34,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple7-expected_value7],,passed,0.1700359999858847,"(1100000, 3, 1000, 100, 100, 0.1, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(109150, 109350, 111150, 109450)",,,,,,,,,,,,,,,,,,,,,,,,0.0042460000031497025 +35,taxcalc/tests/test_calcfunctions.py::test_FairShareTax[test_tuple8-expected_value8],,passed,0.16863499999431042,"(510000, 3, 1000, 100, 100, 0, [1000000, 1000000, 500000, 1000000, 1000000], [2000000, 2000000, 1000000, 2000000, 2000000], 100, 200, 2000, 300)","(0, 200, 2000, 300)",,,,,,,,,,,,,,,,,,,,,,,,0.005609999988109932 +36,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple0-expected_value0],,passed,0.18919300001130068,"(1, 50000, 1, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 1400)",,,,,,,,,,,,,,,,,,,,,,,,0.02116900000714858 +37,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple1-expected_value1],,passed,0.1702780000130133,"(1, 76000, 1, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 1120)",,,,,,,,,,,,,,,,,,,,,,,,0.004078000046092711 +38,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple2-expected_value2],,passed,0.18817100001911058,"(1, 90000, 1, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,0.00897600003213489 +39,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple3-expected_value3],,passed,0.17077800001175092,"(2, 50000, 3, 1, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 4200)",,,,,,,,,,,,,,,,,,,,,,,,0.002523999995673931 +40,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple4-expected_value4],,passed,0.1694749999785472,"(2, 155000, 4, 2, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 2800)",,,,,,,,,,,,,,,,,,,,,,,,0.0022819999969670157 +41,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple5-expected_value5],,passed,0.17029700001103265,"(2, 170000, 4, 2, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,0.0043869999899471546 +42,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple6-expected_value6],,passed,0.1676419999796508,"(4, 50000, 2, 1, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 2800)",,,,,,,,,,,,,,,,,,,,,,,,-0.03552800004058551 +43,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple7-expected_value7],,passed,0.1689849999877424,"(4, 117000, 1, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 560)",,,,,,,,,,,,,,,,,,,,,,,,0.0006999999584423044 +44,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple8-expected_value8],,passed,0.17104899998798828,"(4, 130000, 1, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 1400, [75000, 150000, 75000, 112500, 150000], [80000, 160000, 80000, 120000, 160000], 0, 0, [0, 0, 0, 0, 0], 0, 0, 0)","(0, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,0.004837999966866874 +45,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple9-expected_value9],,passed,0.18783999999527623,"(1, 50000, 1, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 1200)",,,,,,,,,,,,,,,,,,,,,,,,0.02328200000079053 +46,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple10-expected_value10],,passed,0.16793300000017553,"(1, 97000, 2, 1, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 600)",,,,,,,,,,,,,,,,,,,,,,,,0.0019929999552915356 +47,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple11-expected_value11],,passed,0.16861399998902016,"(1, 150000, 2, 1, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,-0.0004229999888138436 +48,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple12-expected_value12],,passed,0.16825299999823073,"(2, 50000, 4, 2, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 3400)",,,,,,,,,,,,,,,,,,,,,,,,0.0019009999903119301 +49,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple13-expected_value13],,passed,0.19114600002012594,"(2, 160000, 5, 3, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 3400)",,,,,,,,,,,,,,,,,,,,,,,,0.024454000026707945 +50,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple14-expected_value14],,passed,0.16755199999352044,"(2, 300000, 2, 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,0.0019419999830461443 +51,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple15-expected_value15],,passed,0.16702100000998144,"(4, 50000, 3, 2, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 2200)",,,,,,,,,,,,,,,,,,,,,,,,-0.005651000009265772 +52,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple16-expected_value16],,passed,0.1662399999986519,"(4, 130000, 2, 1, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 825)",,,,,,,,,,,,,,,,,,,,,,,,0.0027250000016466047 +53,taxcalc/tests/test_calcfunctions.py::test_PersonalTaxCredit[test_tuple17-expected_value17],,passed,0.16919600000164792,"(4, 170000, 3, 2, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], 0, 0, [75000, 150000, 75000, 112500, 75000], [0, 0, 0, 0, 0], 0.05, 500, [1200, 2400, 1200, 1200, 1200], 0, 0, 0)","(0, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,0.004418000003170219 +54,taxcalc/tests/test_calcfunctions.py::test_EITCamount[test_tuple0-6660],,passed,262.56430200001546,"(0.0, 0.45, 19330, 6660, 19330, 19330, 0.2106)",6660,,,,,,,,,,,,,,,,,,,,,,,,-22.934080999988282 +55,taxcalc/tests/test_calcfunctions.py::test_EITC[test_tuple0-6660],,passed,0.21348799998577306,"(4, 0, 3, 19330, 0, 0, 0, 0, 0, 0, 0, 0, 19330, 19330, 0, [8790, 19330, 19330, 19330], 25, 64, [5890, 5890, 5890, 5890], [0.0765, 0.34, 0.4, 0.45], [538, 3584, 5920, 6660], [0.0765, 0.1598, 0.2106, 0.2106], 0.0, 3650, 9e+99, False, False, 0)",6660,,,,,,,,,,,,,,,,,,,,,,,,0.0077329999612630596 +56,taxcalc/tests/test_calcfunctions.py::test_TaxInc[test_tuple0-expected_value0],,passed,0.18819999999664105,"(527860.66, 0.0, 37000.0, 0.0, 2, 352000.0, 0.0, 0.0, 0.0, 5000.0, 7000.0, 0, 0.0, 0.0, 0.2, [160700.0, 321400.0, 160725.0, 160700.0, 321400.0], [50000.0, 100000.0, 50000.0, 50000.0, 100000.0], 0.5, 0.25, 0.025, 0.0, [9e+99, 9e+99, 9e+99, 9e+99, 9e+99], 0.0, 0.0, True)","(490860.66, 0)",,,,,,,,,,,,,,,,,,,,,,,,0.0003080000112732628 +57,taxcalc/tests/test_calcfunctions.py::test_TaxInc[test_tuple1-expected_value1],,passed,0.1738640000041869,"(337675.1, 0.0, 49000.0, 0.0, 2, 23000.0, 0.0, 0.0, 0.0, 8000.0, 4000.0, 1, 0.0, 0.0, 0.2, [160700.0, 321400.0, 160725.0, 160700.0, 321400.0], [50000.0, 100000.0, 50000.0, 50000.0, 100000.0], 0.5, 0.25, 0.025, 0.0, [9e+99, 9e+99, 9e+99, 9e+99, 9e+99], 0.0, 0.0, True)","(284075.1, 4600)",,,,,,,,,,,,,,,,,,,,,,,,-0.00013199999671081875 +58,taxcalc/tests/test_calcfunctions.py::test_TaxInc[test_tuple2-expected_value2],,passed,0.17354300001670708,"(603700.0, 24400.0, 0.0, 0.0, 2, 0.0, 11000.0, 0.0, 0.0, 3000.0, -3000.0, 1, 0.0, 0.0, 0.2, [160700.0, 321400.0, 160725.0, 160700.0, 321400.0], [50000.0, 100000.0, 50000.0, 50000.0, 100000.0], 0.5, 0.25, 0.025, 0.0, [9e+99, 9e+99, 9e+99, 9e+99, 9e+99], 0.0, 0.0, True)","(579300.0, 0)",,,,,,,,,,,,,,,,,,,,,,,,-0.0005029999670114194 +59,taxcalc/tests/test_calcfunctions.py::test_TaxInc[test_tuple3-expected_value3],,passed,0.17670900001576229,"(90700.0, 0.0, 32000.0, 0.0, 4, 0.0, 6000.0, 0.0, 0.0, 9000.0, -3000.0, 1, 0.0, 0.0, 0.2, [160700.0, 321400.0, 160725.0, 160700.0, 321400.0], [50000.0, 100000.0, 50000.0, 50000.0, 100000.0], 0.5, 0.25, 0.025, 0.0, [9e+99, 9e+99, 9e+99, 9e+99, 9e+99], 0.0, 0.0, True)","(57500.0, 1200)",,,,,,,,,,,,,,,,,,,,,,,,0.0054290000548462836 +60,taxcalc/tests/test_calcfunctions.py::test_ChildDepTaxCredit_2021[test_tuple0-expected_value0],,passed,0.17845300001795295,"(45, 0, 0, 0, 4, 1000, 3, 1, 0, 0, 0.0, 0, 0.0, 0, 0, 0, 0.0, 0, 2000, [200000.0, 400000.0, 200000.0, 200000.0, 400000.0], 0.05, False, 500, 0.0, 0, True, True, 0, 0, 0)","(0, 1000, 0)",,,,,,,,,,,,,,,,,,,,,,,,-0.00019099999803984247 +61,taxcalc/tests/test_calcfunctions.py::test_ChildDepTaxCredit_2022[test_tuple0-expected_value0],,passed,0.17542700001627054,"(45, 0, 0, 0, 4, 1000, 3, 1, 0, 0, 0.0, 0, 0.0, 0, 0, 0, 0.0, 0, 2000, [200000.0, 400000.0, 200000.0, 200000.0, 400000.0], 0.05, False, 500, 0.0, 0, False, False, 0, 0, 0)","(0, 0, 1000)",,,,,,,,,,,,,,,,,,,,,,,,-0.0007829999901786677 +62,taxcalc/tests/test_calcfunctions.py::test_CTCnew_2021[test_tuple0-0],,passed,0.17754000000991255,"(1000, 0, 600, [75000, 150000, 75000, 125000, 150000], 0.05, True, True, False, 0.0, False, 0, 0, 0, 45, 0, 0, 1000, 4, 0, 0, 0)",0,,,,,,,,,,,,,,,,,,,,,,,,-0.010472000013805854 +63,taxcalc/tests/test_calcfunctions.py::test_CTCnew_2022[test_tuple0-0],,passed,0.20092500000146174,"(0, 0, 0, [0, 0, 0, 0, 0], 0, False, False, False, 0.0, False, 0, 0, 0, 45, 0, 0, 1000, 4, 0, 0, 0)",0,,,,,,,,,,,,,,,,,,,,,,,,0.029563999987658546 +64,taxcalc/tests/test_calcfunctions.py::test_AGI[test_tuple0-expected_value0],,passed,0.2279150000106256,"(29530, 0, 0, 0, 4, 1, 0, False, 0, 0, 0.0, [9e+99, 9e+99, 9e+99, 9e+99, 9e+99], 0.02, False, 10200, [150000, 150000, 150000, 150000, 150000], 10200, 0, 0, 0)","(19330, 0, 0)",,,,,,,,,,,,,,,,,,,,,,,,-0.004288999974733004 +65,taxcalc/tests/test_calculator.py::test_make_calculator,,passed,2492.553235999992,,,,,,,,,,,,,,,,,,,,,,,,,,-41.603912000027776 +66,taxcalc/tests/test_calculator.py::test_make_calculator_deepcopy,,passed,2181.829270999998,,,,,,,,,,,,,,,,,,,,,,,,,,-120.12127599999212 +67,taxcalc/tests/test_calculator.py::test_make_calculator_with_policy_reform,,passed,2577.2370839999894,,,,,,,,,,,,,,,,,,,,,,,,,,-102.90793800004394 +68,taxcalc/tests/test_calculator.py::test_make_calculator_with_multiyear_reform,,passed,2643.5312339999937,,,,,,,,,,,,,,,,,,,,,,,,,,-80.45107400002416 +69,taxcalc/tests/test_calculator.py::test_calculator_advance_to_year,,passed,2062.2542520000025,,,,,,,,,,,,,,,,,,,,,,,,,,-60.73932300000661 +70,taxcalc/tests/test_calculator.py::test_make_calculator_raises_on_no_policy,,passed,374.30042100001515,,,,,,,,,,,,,,,,,,,,,,,,,,-3.173707999991393 +71,taxcalc/tests/test_calculator.py::test_calculator_mtr,,passed,17532.409887,,,,,,,,,,,,,,,,,,,,,,,,,,-678.6792019999812 +72,taxcalc/tests/test_calculator.py::test_calculator_mtr_when_PT_rates_differ,,passed,2995.6235410000145,,,,,,,,,,,,,,,,,,,,,,,,,,-198.94300699994028 +73,taxcalc/tests/test_calculator.py::test_make_calculator_increment_years_first,,passed,2549.8112949999836,,,,,,,,,,,,,,,,,,,,,,,,,,-116.72353900002054 +74,taxcalc/tests/test_calculator.py::test_ID_HC_vs_BS,,passed,5056.525534000002,,,,,,,,,,,,,,,,,,,,,,,,,,-217.16638300000523 +75,taxcalc/tests/test_calculator.py::test_ID_StateLocal_HC_vs_CRT,,passed,4764.520990999983,,,,,,,,,,,,,,,,,,,,,,,,,,-284.6114110000144 +76,taxcalc/tests/test_calculator.py::test_ID_RealEstate_HC_vs_CRT,,passed,4732.563230000011,,,,,,,,,,,,,,,,,,,,,,,,,,-255.94687599996723 +77,taxcalc/tests/test_calculator.py::test_calculator_using_nonstd_input,,passed,1825.1422040000023,,,,,,,,,,,,,,,,,,,,,,,,,,-142.20217999999818 +78,taxcalc/tests/test_calculator.py::test_bad_json_names,,passed,224.4034660000125,,,,,,,,,,,,,,,,,,,,,,,,,,-18.46581399996694 +79,taxcalc/tests/test_calculator.py::test_json_assump_url,,passed,453.3816529999797,,,,,,,,,,,,,,,,,,,,,,,,,,-243.65394399998763 +80,taxcalc/tests/test_calculator.py::test_read_bad_json_assump_file,,passed,0.3067309999948975,,,,,,,,,,,,,,,,,,,,,,,,,,-0.0375429999905918 +81,taxcalc/tests/test_calculator.py::test_json_doesnt_exist,,passed,0.22543000000041502,,,,,,,,,,,,,,,,,,,,,,,,,,-0.060214000029645776 +82,taxcalc/tests/test_calculator.py::test_calc_all,,passed,1694.322196999991,,,,,,,,,,,,,,,,,,,,,,,,,,-128.15321899998366 +83,taxcalc/tests/test_calculator.py::test_noreform_documentation,,passed,4137.761361000003,,,,,,,,,,,,,,,,,,,,,,,,,,-179.86098199998014 +84,taxcalc/tests/test_calculator.py::test_reform_documentation,,passed,6008.642420000001,,,,,,,,,,,,,,,,,,,,,,,,,,-372.5210339999876 +85,taxcalc/tests/test_calculator.py::test_distribution_tables,,passed,3594.769758000012,,,,,,,,,,,,,,,,,,,,,,,,,,-176.90898799995193 +86,taxcalc/tests/test_calculator.py::test_difference_table,,passed,3015.3203799999915,,,,,,,,,,,,,,,,,,,,,,,,,,-219.64568399999962 +87,taxcalc/tests/test_calculator.py::test_diagnostic_table,,passed,2487.129820000007,,,,,,,,,,,,,,,,,,,,,,,,,,-176.83141300000216 +88,taxcalc/tests/test_calculator.py::test_mtr_graph,,passed,2233.808863999997,,,,,,,,,,,,,,,,,,,,,,,,,,-118.55238100000042 +89,taxcalc/tests/test_calculator.py::test_atr_graph,,passed,2192.8809389999915,,,,,,,,,,,,,,,,,,,,,,,,,,-204.8352989999953 +90,taxcalc/tests/test_calculator.py::test_privacy_of_embedded_objects,,passed,2073.585909000002,,,,,,,,,,,,,,,,,,,,,,,,,,-149.720108000025 +91,taxcalc/tests/test_calculator.py::test_n65,,passed,1944.9278820000018,,,,,,,,,,,,,,,,,,,,,,,,,,-94.44000499996719 +92,taxcalc/tests/test_calculator.py::test_ce_aftertax_income,,passed,3064.5361959999773,,,,,,,,,,,,,,,,,,,,,,,,,,-236.06805100004658 +93,taxcalc/tests/test_calculator.py::test_qbid_calculation,,passed,1582.9639549999968,,,,,,,,,,,,,,,,,,,,,,,,,,-111.59361200000717 +94,taxcalc/tests/test_calculator.py::test_qbid_limit_switch,,passed,3787.696936000003,,,,,,,,,,,,,,,,,,,,,,,,,,-268.6377569999936 +95,taxcalc/tests/test_calculator.py::test_calc_all_benefits_amounts,,passed,5063.950241999975,,,,,,,,,,,,,,,,,,,,,,,,,,-424.30534300001455 +96,taxcalc/tests/test_calculator.py::test_cg_top_rate,,passed,4540.817188999995,,,,,,,,,,,,,,,,,,,,,,,,,,-268.3841850000017 +97,taxcalc/tests/test_compatible_data.py::test_compatible_data_presence,,passed,0.35920999999916603,,,,,,,,,,,,,,,,,,,,,,,,,,-0.016763000019182073 +98,taxcalc/tests/test_consumption.py::test_year_consistency,,passed,0.1189019999969787,,,,,,,,,,,,,,,,,,,,,,,,,,-0.03318199998147969 +99,taxcalc/tests/test_consumption.py::test_validity_of_consumption_vars_set,,passed,0.6776940000179366,,,,,,,,,,,,,,,,,,,,,,,,,,-0.04092999998306368 +100,taxcalc/tests/test_consumption.py::test_update_consumption,,passed,65.31985199998758,,,,,,,,,,,,,,,,,,,,,,,,,,-3.82926200003908 +101,taxcalc/tests/test_consumption.py::test_incorrect_update_consumption,,passed,370.24493800001324,,,,,,,,,,,,,,,,,,,,,,,,,,-67.60209099999764 +102,taxcalc/tests/test_consumption.py::test_future_update_consumption,,passed,88.50353699997981,,,,,,,,,,,,,,,,,,,,,,,,,,-4.425347000022825 +103,taxcalc/tests/test_consumption.py::test_consumption_default_data,,passed,28.312896999977966,,,,,,,,,,,,,,,,,,,,,,,,,,-1.4886370000226634 +104,taxcalc/tests/test_consumption.py::test_consumption_response,,passed,4048.5469080000203,,,,,,,,,,,,,,,,,,,,,,,,,,-243.06154399997104 +105,taxcalc/tests/test_cpscsv.py::test_agg,,passed,10127.841348000004,,,,,,,,,,,,,,,,,,,,,,,,,,-686.9887029999973 +106,taxcalc/tests/test_cpscsv.py::test_cps_availability,,passed,605.9982110000135,,,,,,,,,,,,,,,,,,,,,,,,,,-37.5421339999491 +107,taxcalc/tests/test_data.py::test_recs_class,,passed,400.1061550000031,,,,,,,,,,,,,,,,,,,,,,,,,,5.955309000000852 +108,taxcalc/tests/test_decorators.py::test_create_apply_function_string,,passed,0.14973000003237757,,,,,,,,,,,,,,,,,,,,,,,,,,-0.023693999992246917 +109,taxcalc/tests/test_decorators.py::test_create_apply_function_string_with_params,,passed,0.11827000002995192,,,,,,,,,,,,,,,,,,,,,,,,,,-0.007634999974470674 +110,taxcalc/tests/test_decorators.py::test_create_toplevel_function_string_mult_outputs,,passed,0.13702500001500084,,,,,,,,,,,,,,,,,,,,,,,,,,0.016409000011208347 +111,taxcalc/tests/test_decorators.py::test_create_toplevel_function_string,,passed,0.11708799996767993,,,,,,,,,,,,,,,,,,,,,,,,,,0.0021729999843956294 +112,taxcalc/tests/test_decorators.py::test_make_apply_function,,passed,0.5895690000556897,,,,,,,,,,,,,,,,,,,,,,,,,,-0.026122999940980662 +113,taxcalc/tests/test_decorators.py::test_magic_apply_jit,,passed,368.88213499997846,,,,,,,,,,,,,,,,,,,,,,,,,,-103.50805300004146 +114,taxcalc/tests/test_decorators.py::test_magic_apply_jit_swap,,passed,0.7404400000154965,,,,,,,,,,,,,,,,,,,,,,,,,,-0.02415099999097947 +115,taxcalc/tests/test_decorators.py::test_magic_iterate_jit,,passed,135.5009700000096,,,,,,,,,,,,,,,,,,,,,,,,,,-7.317403999991257 +116,taxcalc/tests/test_decorators.py::test_faux_function_iterate_jit,,passed,103.85015899998962,,,,,,,,,,,,,,,,,,,,,,,,,,-7.001732999981428 +117,taxcalc/tests/test_decorators.py::test_ret_everything_iterate_jit,,passed,168.14810600004648,,,,,,,,,,,,,,,,,,,,,,,,,,-13.391703999957372 +118,taxcalc/tests/test_decorators.py::test_function_takes_kwarg,,passed,133.01384499999358,,,,,,,,,,,,,,,,,,,,,,,,,,-10.025912000003274 +119,taxcalc/tests/test_decorators.py::test_function_no_parameters_listed,,passed,134.93983400002207,,,,,,,,,,,,,,,,,,,,,,,,,,-10.059418999958325 +120,taxcalc/tests/test_decorators.py::test_function_parameters_optional,,passed,138.5325679999596,,,,,,,,,,,,,,,,,,,,,,,,,,-19.48556600007123 +121,taxcalc/tests/test_decorators.py::test_iterate_jit_raises_on_no_return,,passed,5.409990999964975,,,,,,,,,,,,,,,,,,,,,,,,,,-0.6767740000555023 +122,taxcalc/tests/test_decorators.py::test_iterate_jit_raises_on_unknown_return_argument,,passed,4.171544000030281,,,,,,,,,,,,,,,,,,,,,,,,,,-0.5405799999493865 +123,taxcalc/tests/test_decorators.py::test_force_no_jit,,passed,4.871847999993406,,,,,,,,,,,,,,,,,,,,,,,,,,-0.8219019999842203 +124,taxcalc/tests/test_growdiff.py::test_year_consistency,,passed,0.1555499999881249,,,,,,,,,,,,,,,,,,,,,,,,,,-0.0408280000101513 +125,taxcalc/tests/test_growdiff.py::test_update_and_apply_growdiff,,passed,401.80980399998134,,,,,,,,,,,,,,,,,,,,,,,,,,-12.199699999996483 +126,taxcalc/tests/test_growdiff.py::test_has_any_response,,passed,102.17784299999266,,,,,,,,,,,,,,,,,,,,,,,,,,-3.060058000016852 +127,taxcalc/tests/test_growdiff.py::test_description_punctuation,,passed,0.3406349999863778,,,,,,,,,,,,,,,,,,,,,,,,,,-0.004359999991265795 +128,taxcalc/tests/test_growdiff.py::test_boolean_value_infomation,,passed,0.3132839999580028,,,,,,,,,,,,,,,,,,,,,,,,,,0.045993999947313624 +129,taxcalc/tests/test_growfactors.py::test_improper_usage,,passed,3.198650000001635,,,,,,,,,,,,,,,,,,,,,,,,,,-0.1479800000083742 +130,taxcalc/tests/test_growfactors.py::test_update_after_use,,passed,1.9413170000461832,,,,,,,,,,,,,,,,,,,,,,,,,,0.02275900004633513 +131,taxcalc/tests/test_growfactors.py::test_proper_usage,,passed,1.8924860000311128,,,,,,,,,,,,,,,,,,,,,,,,,,0.028870000051028688 +132,taxcalc/tests/test_growfactors.py::test_growfactors_csv_values,,passed,2.2143470000060006,,,,,,,,,,,,,,,,,,,,,,,,,,0.04902699998865501 +133,taxcalc/tests/test_parameters.py::test_params_class[revision0-],,passed,9.10158100003855,,,{},,,,,,,,,,,,,,,,,,,,,,,-0.3688029999580067 +134,taxcalc/tests/test_parameters.py::test_params_class[revision1-error],,passed,10.56982599999401,,,{'real_param': {2004: 1.9}},error,,,,,,,,,,,,,,,,,,,,,,-0.9769109999524517 +135,taxcalc/tests/test_parameters.py::test_params_class[revision2-raise],,passed,11.863978000008046,,,{'int_param': {2004: [3.6]}},raise,,,,,,,,,,,,,,,,,,,,,,-1.273454999989097 +136,taxcalc/tests/test_parameters.py::test_params_class[revision3-raise],,passed,10.315912999999455,,,{'int_param': {2004: [3]}},raise,,,,,,,,,,,,,,,,,,,,,,-0.7509870000035335 +137,taxcalc/tests/test_parameters.py::test_params_class[revision4-noerror],,passed,14.605988000027992,,,"{'label_param': {2004: [1, 2]}}",noerror,,,,,,,,,,,,,,,,,,,,,,-1.2911159999475785 +138,taxcalc/tests/test_parameters.py::test_params_class[revision5-raise],,passed,7.948300999998992,,,"{'label_param': {2004: [[1, 2]]}}",raise,,,,,,,,,,,,,,,,,,,,,,-0.259672000026967 +139,taxcalc/tests/test_parameters.py::test_params_class[revision6-raise],,passed,8.978571000000102,,,"{'label_param': {2004: [1, 2, 3]}}",raise,,,,,,,,,,,,,,,,,,,,,,-1.066546999993534 +140,taxcalc/tests/test_parameters.py::test_params_class[revision7-raise],,passed,10.222618999989663,,,{'bool_param': {2004: [4.9]}},raise,,,,,,,,,,,,,,,,,,,,,,-1.1003099999697952 +141,taxcalc/tests/test_parameters.py::test_params_class[revision8-raise],,passed,10.398016000010557,,,{'str_param': {2004: [9]}},raise,,,,,,,,,,,,,,,,,,,,,,-1.1541609999881075 +142,taxcalc/tests/test_parameters.py::test_params_class[revision9-noerror],,passed,12.471769999990556,,,{'str_param': {2004: 'nonlinear'}},noerror,,,,,,,,,,,,,,,,,,,,,,-1.3834250000286374 +143,taxcalc/tests/test_parameters.py::test_params_class[revision10-error],,passed,10.182213999996748,,,{'str_param': {2004: 'unknownvalue'}},error,,,,,,,,,,,,,,,,,,,,,,-0.9394680000127664 +144,taxcalc/tests/test_parameters.py::test_params_class[revision11-raise],,passed,10.312727999973959,,,{'str_param': {2004: ['nonlinear']}},raise,,,,,,,,,,,,,,,,,,,,,,-1.2282989999903293 +145,taxcalc/tests/test_parameters.py::test_params_class[revision12-raise],,passed,10.403777000021819,,,{'real_param': {2004: 'linear'}},raise,,,,,,,,,,,,,,,,,,,,,,-0.9681739999791716 +146,taxcalc/tests/test_parameters.py::test_params_class[revision13-raise],,passed,15.057930000011766,,,"{'real_param': {2004: [0.2, 0.3]}}",raise,,,,,,,,,,,,,,,,,,,,,,1.5743499999985033 +147,taxcalc/tests/test_parameters.py::test_params_class[revision14-raise],,passed,12.819408000041221,,,{'real_param-indexed': {2004: True}},raise,,,,,,,,,,,,,,,,,,,,,,0.05958100001635103 +148,taxcalc/tests/test_parameters.py::test_params_class[revision15-raise],,passed,7.820854000044619,,,{'unknown_param-indexed': {2004: False}},raise,,,,,,,,,,,,,,,,,,,,,,-0.7602259999544003 +149,taxcalc/tests/test_parameters.py::test_json_file_contents[consumption.json],,passed,176.30088799995747,,,,,consumption.json,,,,,,,,,,,,,,,,,,,,,-4.186072000038621 +150,taxcalc/tests/test_parameters.py::test_json_file_contents[policy_current_law.json],,passed,100802.30943800001,,,,,policy_current_law.json,,,,,,,,,,,,,,,,,,,,,-10060.494974999994 +151,taxcalc/tests/test_parameters.py::test_json_file_contents[growdiff.json],,passed,691.5213749999793,,,,,growdiff.json,,,,,,,,,,,,,,,,,,,,,-2.23103500002253 +152,taxcalc/tests/test_parameters.py::test_parameters_mentioned[consumption.json-consumption.py],,passed,0.2593140000044514,,,,,,consumption.json,consumption.py,,,,,,,,,,,,,,,,,,,-0.02368499997373874 +153,taxcalc/tests/test_parameters.py::test_parameters_mentioned[policy_current_law.json-calcfunctions.py],,passed,8.926502999997865,,,,,,policy_current_law.json,calcfunctions.py,,,,,,,,,,,,,,,,,,,-0.45709500000157277 +154,taxcalc/tests/test_parameters.py::test_parameters_mentioned[growdiff.json-growdiff.py],,passed,0.26556500000651795,,,,,,growdiff.json,growdiff.py,,,,,,,,,,,,,,,,,,,-0.01850599994668295 +155,taxcalc/tests/test_parameters.py::test_expand_xd_errors,,passed,4.96918999999707,,,,,,,,,,,,,,,,,,,,,,,,,,-0.36632699999472607 +156,taxcalc/tests/test_parameters.py::test_expand_empty,,passed,5.200520000016695,,,,,,,,,,,,,,,,,,,,,,,,,,-0.06813200002397934 +157,taxcalc/tests/test_parameters.py::test_expand_1d_scalar,,passed,15.293057999997473,,,,,,,,,,,,,,,,,,,,,,,,,,-0.7647010000368937 +158,taxcalc/tests/test_parameters.py::test_expand_2d_short_array,,passed,5.958294000038222,,,,,,,,,,,,,,,,,,,,,,,,,,-0.1703460000044288 +159,taxcalc/tests/test_parameters.py::test_expand_2d_variable_rates,,passed,7.199526000022161,,,,,,,,,,,,,,,,,,,,,,,,,,-0.4262639999979001 +160,taxcalc/tests/test_parameters.py::test_expand_2d_already_filled,,passed,9.10945499998661,,,,,,,,,,,,,,,,,,,,,,,,,,-3.8664800000560717 +161,taxcalc/tests/test_parameters.py::test_expand_2d_partial_expand,,passed,9.446142999991025,,,,,,,,,,,,,,,,,,,,,,,,,,-2.0317910000358115 +162,"taxcalc/tests/test_parameters.py::test_read_json_revision[\n{\n ""consumption"": {""BEN_mcaid_value"": {""2013"": 0.9}}\n}\n]",,passed,0.30594000003247857,,,,,,,," +{ + ""consumption"": {""BEN_mcaid_value"": {""2013"": 0.9}} +} +",,,,,,,,,,,,,,,,,,-0.013126999988344323 +163,"taxcalc/tests/test_parameters.py::test_read_json_revision[\n{\n ""consumption"": {""BEN_mcaid_value"": [{""year"": ""2013"", ""value"": 0.9}]}\n}\n]",,passed,0.28723499997340696,,,,,,,," +{ + ""consumption"": {""BEN_mcaid_value"": [{""year"": ""2013"", ""value"": 0.9}]} +} +",,,,,,,,,,,,,,,,,,0.03796899994767955 +164,"taxcalc/tests/test_parameters.py::test_read_json_revision_foramts[\n{\n ""consumption"": {""BEN_mcaid_value"": {""2013"": 0.9}}\n}\n-False]",,passed,0.16914600001882718,,,,,,,,," +{ + ""consumption"": {""BEN_mcaid_value"": {""2013"": 0.9}} +} +",False,,,,,,,,,,,,,,,,-0.0024339999527000222 +165,"taxcalc/tests/test_parameters.py::test_read_json_revision_foramts[\n{\n ""consumption"": {""BEN_mcaid_value"": [{""year"": ""2013"", ""value"": 0.9}]}\n}\n-True]",,passed,0.17097799997145557,,,,,,,,," +{ + ""consumption"": {""BEN_mcaid_value"": [{""year"": ""2013"", ""value"": 0.9}]} +} +",True,,,,,,,,,,,,,,,,0.002322000000276686 +166,"taxcalc/tests/test_parameters.py::test_read_json_revision_foramts[\n{\n ""consumption"": {""BEN_mcaid_value"": 0.9}\n}\n-True]",,passed,0.16970600000831837,,,,,,,,," +{ + ""consumption"": {""BEN_mcaid_value"": 0.9} +} +",True,,,,,,,,,,,,,,,,0.0023730000293653575 +167,taxcalc/tests/test_policy.py::test_incorrect_class_instantiation,,passed,0.20391999998992105,,,,,,,,,,,,,,,,,,,,,,,,,,0.037789999964843446 +168,taxcalc/tests/test_policy.py::test_correct_class_instantiation,,passed,1985.4236540000443,,,,,,,,,,,,,,,,,,,,,,,,,,-111.12997999998743 +169,taxcalc/tests/test_policy.py::test_json_reform_url,,passed,257.46178099996087,,,,,,,,,,,,,,,,,,,,,,,,,,60.7076729999676 +170,taxcalc/tests/test_policy.py::test_read_json_reform_file_and_implement_reform[False],,passed,1986.5844579999816,,,,,,,,,,,False,,,,,,,,,,,,,,,-83.4517129999881 +171,taxcalc/tests/test_policy.py::test_read_json_reform_file_and_implement_reform[True],,passed,2169.2777509999814,,,,,,,,,,,True,,,,,,,,,,,,,,,-167.0933790000504 +172,taxcalc/tests/test_policy.py::test_constant_inflation_rate_with_reform,,passed,1800.3791969999838,,,,,,,,,,,,,,,,,,,,,,,,,,-78.59093599995504 +173,taxcalc/tests/test_policy.py::test_variable_inflation_rate_with_reform,,passed,1976.6447450000442,,,,,,,,,,,,,,,,,,,,,,,,,,-109.77373699995496 +174,taxcalc/tests/test_policy.py::test_multi_year_reform,,passed,1972.031933999972,,,,,,,,,,,,,,,,,,,,,,,,,,-97.16002400006118 +175,taxcalc/tests/test_policy.py::test_policy_metadata,,passed,1418.096036999998,,,,,,,,,,,,,,,,,,,,,,,,,,-139.93275699994 +176,taxcalc/tests/test_policy.py::test_implement_reform_raises_on_no_year,,passed,1270.9536520000029,,,,,,,,,,,,,,,,,,,,,,,,,,-53.97952400005602 +177,taxcalc/tests/test_policy.py::test_implement_reform_raises_on_early_year,,passed,1267.1486019999634,,,,,,,,,,,,,,,,,,,,,,,,,,-65.18481100005147 +178,taxcalc/tests/test_policy.py::test_reform_with_default_indexed,,passed,1998.7189069999545,,,,,,,,,,,,,,,,,,,,,,,,,,-123.4451290001175 +179,taxcalc/tests/test_policy.py::test_reform_makes_no_changes_before_year,,passed,1876.1668340000028,,,,,,,,,,,,,,,,,,,,,,,,,,-185.287667999944 +180,taxcalc/tests/test_policy.py::test_read_json_reform_and_implement_reform[False],,passed,2131.3903359999813,,,,,,,,,,,False,,,,,,,,,,,,,,,-160.07280100006938 +181,taxcalc/tests/test_policy.py::test_read_json_reform_and_implement_reform[True],,passed,2051.99785100001,,,,,,,,,,,True,,,,,,,,,,,,,,,-129.7168869999723 +182,taxcalc/tests/test_policy.py::test_pop_the_cap_reform,,passed,1938.1558900000186,,,,,,,,,,,,,,,,,,,,,,,,,,-133.30451799998855 +183,taxcalc/tests/test_policy.py::test_order_of_indexing_and_level_reforms,,passed,3785.7164559999887,,,,,,,,,,,,,,,,,,,,,,,,,,-216.7161540000393 +184,taxcalc/tests/test_policy.py::test_misspecified_reform_dictionary,,passed,0.12964100000090184,,,,,,,,,,,,,,,,,,,,,,,,,,0.007231999973100839 +185,taxcalc/tests/test_policy.py::test_section_titles,,passed,5.870228999981464,,,,,,,,,,,,,,,,,,,,,,,,,,0.5619729999466472 +186,taxcalc/tests/test_policy.py::test_description_punctuation,,passed,3.4187699999961296,,,,,,,,,,,,,,,,,,,,,,,,,,0.24908299991466265 +187,taxcalc/tests/test_policy.py::test_get_index_rate,,passed,1313.7704549999967,,,,,,,,,,,,,,,,,,,,,,,,,,-97.31613800005334 +188,taxcalc/tests/test_policy.py::test_reform_with_bad_ctc_levels,,passed,1779.5087940000371,,,,,,,,,,,,,,,,,,,,,,,,,,-112.59311700001717 +189,taxcalc/tests/test_policy.py::test_reform_with_removed_parameter,,passed,3967.772996000008,,,,,,,,,,,,,,,,,,,,,,,,,,-199.0979500000094 +190,taxcalc/tests/test_policy.py::test_reform_with_out_of_range_error,,passed,1943.397080000011,,,,,,,,,,,,,,,,,,,,,,,,,,-65.09088499996096 +191,taxcalc/tests/test_policy.py::test_reform_with_warning,,passed,2125.35139299996,,,,,,,,,,,,,,,,,,,,,,,,,,-88.87171300000318 +192,taxcalc/tests/test_policy.py::test_reform_with_scalar_vector_errors,,passed,6810.140987000012,,,,,,,,,,,,,,,,,,,,,,,,,,-316.6772070000543 +193,taxcalc/tests/test_policy.py::test_index_offset_reform,,passed,8363.365170000008,,,,,,,,,,,,,,,,,,,,,,,,,,-365.1116830000665 +194,taxcalc/tests/test_policy.py::test_cpi_offset_affect_on_prior_years,,passed,6234.259313999984,,,,,,,,,,,,,,,,,,,,,,,,,,-245.33655200008343 +195,taxcalc/tests/test_policy.py::test_cpi_offset_on_reverting_params,,passed,9234.14784099998,,,,,,,,,,,,,,,,,,,,,,,,,,-391.34551999996074 +196,taxcalc/tests/test_policy.py::test_raise_errors_regression,,passed,1997.7054649999673,,,,,,,,,,,,,,,,,,,,,,,,,,-152.0805960000189 +197,taxcalc/tests/test_policy.py::TestAdjust::test_simple_adj,>,passed,5316.6819519999535,,,,,,,,,,,,,,,,,,,,,,,,,,-241.69825700005276 +198,taxcalc/tests/test_policy.py::TestAdjust::test_adj_without_index_1,>,passed,5623.765079000009,,,,,,,,,,,,,,,,,,,,,,,,,,-353.75545599993075 +199,taxcalc/tests/test_policy.py::TestAdjust::test_adj_without_index_2,>,passed,5690.466133999962,,,,,,,,,,,,,,,,,,,,,,,,,,-231.78856999993513 +200,taxcalc/tests/test_policy.py::TestAdjust::test_activate_index,>,passed,5491.1791600000015,,,,,,,,,,,,,,,,,,,,,,,,,,-266.8712230000665 +201,taxcalc/tests/test_policy.py::TestAdjust::test_apply_cpi_offset,>,passed,9716.037347999987,,,,,,,,,,,,,,,,,,,,,,,,,,-409.1367790000495 +202,taxcalc/tests/test_policy.py::TestAdjust::test_multiple_cpi_swaps,>,passed,4409.643762000031,,,,,,,,,,,,,,,,,,,,,,,,,,-376.3325599999798 +203,taxcalc/tests/test_policy.py::TestAdjust::test_multiple_cpi_swaps2,>,passed,5162.484554999992,,,,,,,,,,,,,,,,,,,,,,,,,,-346.4569440000105 +204,taxcalc/tests/test_policy.py::TestAdjust::test_adj_CPI_offset_and_index_status,>,passed,9581.570397000007,,,,,,,,,,,,,,,,,,,,,,,,,,-355.1739889999808 +205,taxcalc/tests/test_policy.py::TestAdjust::test_adj_related_parameters_and_index_status,>,passed,3616.659193999965,,,,,,,,,,,,,,,,,,,,,,,,,,-200.85628199996108 +206,taxcalc/tests/test_policy.py::TestAdjust::test_indexed_status_parsing,>,passed,4333.2340560000375,,,,,,,,,,,,,,,,,,,,,,,,,,-123.0650819999255 +207,taxcalc/tests/test_policy.py::TestAdjust::test_cpi_offset_does_not_affect_wage_indexed_params,>,passed,7822.036029000003,,,,,,,,,,,,,,,,,,,,,,,,,,-273.878534999938 +208,taxcalc/tests/test_records.py::test_incorrect_Records_instantiation,,passed,9.520398999995905,,,,,,,,,,,,,,,,,,,,,,,,,,-0.44555400000945156 +209,taxcalc/tests/test_records.py::test_correct_Records_instantiation,,passed,378.69691200000943,,,,,,,,,,,,,,,,,,,,,,,,,,-9.533461000046373 +210,taxcalc/tests/test_records.py::test_read_cps_data,,passed,624.2035699999633,,,,,,,,,,,,,,,,,,,,,,,,,,-7.6600600000347185 +211,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e00200,e00200p,e00200s\n1, 2, 200000, 200000, 0.03\n]",,passed,400.506082999982,,,,,,,,,,,,"RECID,MARS,e00200,e00200p,e00200s +1, 2, 200000, 200000, 0.03 +",,,,,,,,,,,,,,6.4254710000568025 +212,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e00900,e00900p,e00900s\n1, 2, 200000, 200000, 0.03\n]",,passed,408.45472199998767,,,,,,,,,,,,"RECID,MARS,e00900,e00900p,e00900s +1, 2, 200000, 200000, 0.03 +",,,,,,,,,,,,,,7.411442000034185 +213,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e02100,e02100p,e02100s\n1, 2, 200000, 200000, 0.03\n]",,passed,397.4682690000009,,,,,,,,,,,,"RECID,MARS,e02100,e02100p,e02100s +1, 2, 200000, 200000, 0.03 +",,,,,,,,,,,,,,-25.630486999943912 +214,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e00200,e00200p,e00200s\n1, 4, 200000, 100000, 100000\n]",,passed,399.4197859999531,,,,,,,,,,,,"RECID,MARS,e00200,e00200p,e00200s +1, 4, 200000, 100000, 100000 +",,,,,,,,,,,,,,-8.23952300004288 +215,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e00900,e00900p,e00900s\n1, 4, 200000, 100000, 100000\n]",,passed,401.49860400003945,,,,,,,,,,,,"RECID,MARS,e00900,e00900p,e00900s +1, 4, 200000, 100000, 100000 +",,,,,,,,,,,,,,-5.712446999950771 +216,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e02100,e02100p,e02100s\n1, 4, 200000, 100000, 100000\n]",,passed,398.1468350000341,,,,,,,,,,,,"RECID,MARS,e02100,e02100p,e02100s +1, 4, 200000, 100000, 100000 +",,,,,,,,,,,,,,6.949193000082232 +217,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,k1bx14s\n1, 4, 0.03\n]",,passed,397.7194479999753,,,,,,,,,,,,"RECID,MARS,k1bx14s +1, 4, 0.03 +",,,,,,,,,,,,,,-2.5229540000282213 +218,"taxcalc/tests/test_records.py::test_read_data[RxCID,MARS\n1, 2\n]",,passed,1.5473139999926389,,,,,,,,,,,,"RxCID,MARS +1, 2 +",,,,,,,,,,,,,,-0.1651470000183508 +219,"taxcalc/tests/test_records.py::test_read_data[RECID,e00300\n1, 456789\n]",,passed,1.4160200000219447,,,,,,,,,,,,"RECID,e00300 +1, 456789 +",,,,,,,,,,,,,,-0.11914999998907638 +220,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS\n1, 6\n]",,passed,396.1932859999706,,,,,,,,,,,,"RECID,MARS +1, 6 +",,,,,,,,,,,,,,-0.08265100007065485 +221,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,EIC\n1, 5, 4\n]",,passed,398.3779350000418,,,,,,,,,,,,"RECID,MARS,EIC +1, 5, 4 +",,,,,,,,,,,,,,6.16822099999581 +222,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e00600,e00650\n1, 1, 8, 9\n]",,passed,425.188855999977,,,,,,,,,,,,"RECID,MARS,e00600,e00650 +1, 1, 8, 9 +",,,,,,,,,,,,,,7.693065000012211 +223,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,e01500,e01700\n1, 1, 6, 7\n]",,passed,403.13671400002704,,,,,,,,,,,,"RECID,MARS,e01500,e01700 +1, 1, 6, 7 +",,,,,,,,,,,,,,-12.53545699995584 +224,"taxcalc/tests/test_records.py::test_read_data[RECID,MARS,PT_SSTB_income\n1, 1, 2\n]",,passed,399.81321999999864,,,,,,,,,,,,"RECID,MARS,PT_SSTB_income +1, 1, 2 +",,,,,,,,,,,,,,6.5243390000091495 +225,taxcalc/tests/test_records.py::test_for_duplicate_names,,passed,0.9431180000092354,,,,,,,,,,,,,,,,,,,,,,,,,,-0.0723509999716041 +226,taxcalc/tests/test_records.py::test_records_variables_content,,passed,0.5981850000011946,,,,,,,,,,,,,,,,,,,,,,,,,,-0.10900799992441534 +227,taxcalc/tests/test_records.py::test_csv_input_vars_md_contents,,passed,0.64954999999145,,,,,,,,,,,,,,,,,,,,,,,,,,-0.1146189999303715 +228,taxcalc/tests/test_reforms.py::test_2017_law_reform,,passed,4792.921478999971,,,,,,,,,,,,,,,,,,,,,,,,,,-208.58191300004637 +229,taxcalc/tests/test_reforms.py::test_round_trip_reforms[2019],,passed,12773.124076999977,,,,,,,,,,,,,2019.0,,,,,,,,,,,,,-508.50379300010354 +230,taxcalc/tests/test_reforms.py::test_round_trip_reforms[2020],,passed,12781.66651899994,,,,,,,,,,,,,2020.0,,,,,,,,,,,,,-452.3335300000308 +231,taxcalc/tests/test_reforms.py::test_round_trip_reforms[2021],,passed,12872.035484000095,,,,,,,,,,,,,2021.0,,,,,,,,,,,,,-551.7201209999021 +232,taxcalc/tests/test_reforms.py::test_round_trip_reforms[2022],,passed,12788.35608899999,,,,,,,,,,,,,2022.0,,,,,,,,,,,,,-469.7833679999803 +233,taxcalc/tests/test_reforms.py::test_round_trip_reforms[2023],,passed,12866.653436999968,,,,,,,,,,,,,2023.0,,,,,,,,,,,,,-452.43900399998347 +234,taxcalc/tests/test_reforms.py::test_reform_json_and_output,,passed,76779.506148,,,,,,,,,,,,,,,,,,,,,,,,,,-1969.273472999921 +235,taxcalc/tests/test_responses.py::test_response_json,,passed,0.21831699996255338,,,,,,,,,,,,,,,,,,,,,,,,,,0.03520500001741317 +236,taxcalc/tests/test_taxcalcio.py::test_ctor_errors[no-dot-csv-filename-no-dot-json-filename-no-dot-json-filename-no-dot-json-filename-no-output-directory],,passed,0.17389399999956368,,,,,,,,,,,,,,no-dot-csv-filename,no-dot-json-filename,no-dot-json-filename,no-dot-json-filename,no-output-directory,,,,,,,,0.003154999944854381 +237,taxcalc/tests/test_taxcalcio.py::test_ctor_errors[input_data1-baseline1-reform1-assump1-outdir1],,passed,0.11830100004317501,,,,,,,,,,,,,,[],[],[],[],[],,,,,,,,0.001142000087384104 +238,taxcalc/tests/test_taxcalcio.py::test_ctor_errors[no-exist.csv-no-exist.json-no-exist.json-no-exist.json-.],,passed,0.19632600003660627,,,,,,,,,,,,,,no-exist.csv,no-exist.json,no-exist.json,no-exist.json,.,,,,,,,,-0.0013940000371803207 +239,taxcalc/tests/test_taxcalcio.py::test_init_errors[2000-reformfile0-reformfile0-None],,passed,4947.637701000076,,,,,,,,,,,,,,,,,,,2000.0,reformfile0,reformfile0,,,,,-61.31344799996441 +240,taxcalc/tests/test_taxcalcio.py::test_init_errors[2099-reformfile0-reformfile0-None],,passed,5013.305930000001,,,,,,,,,,,,,,,,,,,2099.0,reformfile0,reformfile0,,,,,10.151115999974536 +241,taxcalc/tests/test_taxcalcio.py::test_init_errors[2020-reformfile0-reformfile0-errorassumpfile],,passed,4759.0037500000335,,,,,,,,,,,,,,,,,,,2020.0,reformfile0,reformfile0,errorassumpfile,,,,-53.94471599993267 +242,taxcalc/tests/test_taxcalcio.py::test_init_errors[2020-errorreformfile-errorreformfile-None],,passed,3904.7199020000107,,,,,,,,,,,,,,,,,,,2020.0,errorreformfile,errorreformfile,,,,,-15.8063970000062 +243,taxcalc/tests/test_taxcalcio.py::test_creation_with_aging,,passed,12125.24538799994,,,,,,,,,,,,,,,,,,,,,,,,,,-171.54193099998156 +244,taxcalc/tests/test_taxcalcio.py::test_ctor_init_with_cps_files,,passed,15440.845731999958,,,,,,,,,,,,,,,,,,,,,,,,,,-307.01933700004156 +245,"taxcalc/tests/test_taxcalcio.py::test_custom_dump_variables[\n MARS;iitax\tpayrolltax|combined,\n c00100\n surtax\n -True-8]",,passed,5061.496691000002,,,,,,,,,,,,,,,,,,,,,,," + MARS;iitax payrolltax|combined, + c00100 + surtax + ",True,8.0,-78.77819999998792 +246,"taxcalc/tests/test_taxcalcio.py::test_custom_dump_variables[\n MARS;iitax\tpayrolltax|kombined,c00100\n surtax\n RECID\n FLPDYR\n -False-8]",,passed,5046.111523999912,,,,,,,,,,,,,,,,,,,,,,," + MARS;iitax payrolltax|kombined,c00100 + surtax + RECID + FLPDYR + ",False,8.0,-90.34412700009398 +247,taxcalc/tests/test_taxcalcio.py::test_output_options,,passed,22207.045193999988,,,,,,,,,,,,,,,,,,,,,,,,,,-294.9073199999948 +248,taxcalc/tests/test_taxcalcio.py::test_write_doc_file,,passed,12797.188939999956,,,,,,,,,,,,,,,,,,,,,,,,,,-130.30820100004712 +249,taxcalc/tests/test_taxcalcio.py::test_sqldb_option,,passed,6406.26063000002,,,,,,,,,,,,,,,,,,,,,,,,,,-44.48240499994063 +250,taxcalc/tests/test_taxcalcio.py::test_no_tables_or_graphs,,passed,5856.007874999932,,,,,,,,,,,,,,,,,,,,,,,,,,-53.25716700008434 +251,taxcalc/tests/test_taxcalcio.py::test_tables,,passed,6518.662847999963,,,,,,,,,,,,,,,,,,,,,,,,,,-105.9290890000284 +252,taxcalc/tests/test_taxcalcio.py::test_graphs,,passed,6458.8875750000625,,,,,,,,,,,,,,,,,,,,,,,,,,-110.28238599988072 +253,taxcalc/tests/test_taxcalcio.py::test_analyze_warnings_print,,passed,5630.593135000026,,,,,,,,,,,,,,,,,,,,,,,,,,-84.94766899991646 +254,taxcalc/tests/test_taxcalcio.py::test_error_message_parsed_correctly,,passed,4186.2453919999325,,,,,,,,,,,,,,,,,,,,,,,,,,-57.64662700005374 +255,taxcalc/tests/test_utils.py::test_validity_of_name_lists,,passed,0.734217999934117,,,,,,,,,,,,,,,,,,,,,,,,,,0.0029909999739174964 +256,taxcalc/tests/test_utils.py::test_create_tables,,passed,3501.6256180000482,,,,,,,,,,,,,,,,,,,,,,,,,,-48.76502799993432 +257,taxcalc/tests/test_utils.py::test_diff_count_precision,,passed,401.53176800004076,,,,,,,,,,,,,,,,,,,,,,,,,,2.4243029999979626 +258,taxcalc/tests/test_utils.py::test_weighted_mean,,passed,2.285438000058093,,,,,,,,,,,,,,,,,,,,,,,,,,-0.16011199988952285 +259,taxcalc/tests/test_utils.py::test_wage_weighted,,passed,0.6753690000778079,,,,,,,,,,,,,,,,,,,,,,,,,,-0.03521899998304434 +260,taxcalc/tests/test_utils.py::test_agi_weighted,,passed,0.620565999952305,,,,,,,,,,,,,,,,,,,,,,,,,,-0.05600899999080866 +261,taxcalc/tests/test_utils.py::test_expanded_income_weighted,,passed,0.6167490000734688,,,,,,,,,,,,,,,,,,,,,,,,,,-0.04430599983606953 +262,taxcalc/tests/test_utils.py::test_weighted_sum,,passed,1.5304220000871283,,,,,,,,,,,,,,,,,,,,,,,,,,-0.10535499995967257 +263,taxcalc/tests/test_utils.py::test_add_income_trow_var,,passed,2.3303919999762,,,,,,,,,,,,,,,,,,,,,,,,,,-0.07047500002954621 +264,taxcalc/tests/test_utils.py::test_add_quantile_trow_var,,passed,3.0504039999641464,,,,,,,,,,,,,,,,,,,,,,,,,,-0.028530000122373167 +265,taxcalc/tests/test_utils.py::test_dist_table_sum_row,,passed,2666.1640500000203,,,,,,,,,,,,,,,,,,,,,,,,,,-17.89126899996063 +266,taxcalc/tests/test_utils.py::test_diff_table_sum_row,,passed,3345.9694050000053,,,,,,,,,,,,,,,,,,,,,,,,,,-48.29803699999502 +267,taxcalc/tests/test_utils.py::test_mtr_graph_data,,passed,2028.69897700009,,,,,,,,,,,,,,,,,,,,,,,,,,-16.03007299991077 +268,taxcalc/tests/test_utils.py::test_atr_graph_data,,passed,2282.1828059999234,,,,,,,,,,,,,,,,,,,,,,,,,,-97.41538000014316 +269,taxcalc/tests/test_utils.py::test_xtr_graph_plot,,passed,2040.905318,,,,,,,,,,,,,,,,,,,,,,,,,,-10.1903229999607 +270,taxcalc/tests/test_utils.py::test_write_graph_file,,passed,2168.4990700000526,,,,,,,,,,,,,,,,,,,,,,,,,,-26.874963999944157 +271,taxcalc/tests/test_utils.py::test_ce_aftertax_income,,passed,3861.132429999998,,,,,,,,,,,,,,,,,,,,,,,,,,-17.722481999954198 +272,taxcalc/tests/test_utils.py::test_read_egg_csv,,passed,1.0666379999975106,,,,,,,,,,,,,,,,,,,,,,,,,,0.0023989999817786156 +273,taxcalc/tests/test_utils.py::test_read_egg_json,,passed,0.25790999995933817,,,,,,,,,,,,,,,,,,,,,,,,,,0.021567999965554974 +274,taxcalc/tests/test_utils.py::test_create_delete_temp_file,,passed,0.2769760000091992,,,,,,,,,,,,,,,,,,,,,,,,,,0.008623999974588514 +275,taxcalc/tests/test_utils.py::test_bootstrap_se_ci,,passed,0.3898969999909241,,,,,,,,,,,,,,,,,,,,,,,,,,0.00764300000355439 +276,taxcalc/tests/test_utils.py::test_table_columns_labels,,passed,0.1115879999815661,,,,,,,,,,,,,,,,,,,,,,,,,,0.0021040000319771934 diff --git a/taxcalc/utils.py b/taxcalc/utils.py index 4da525171..031e5631f 100644 --- a/taxcalc/utils.py +++ b/taxcalc/utils.py @@ -261,6 +261,7 @@ def add_income_table_row_variable(dframe, income_measure, bin_edges): assert isinstance(bin_edges, list) dframe['table_row'] = pd.cut(dframe[income_measure], bin_edges, right=False) + return dframe @@ -539,8 +540,7 @@ def count_gt_zero(dframe, col_name, tolerance=0.001): df2, baseline_expanded_income, SOI_AGI_BINS) del df2 # create grouped Pandas DataFrame - gdf = dframe.groupby('table_row', as_index=False) - del dframe['table_row'] + gdf = dframe.groupby('table_row', as_index=False, observed=False) # create additive difference table statistics from gdf diff_table = additive_stats_dataframe(gdf) # calculate additive statistics on sums row