def run_model(meta_params_dict, adjustment): meta_params = MetaParameters() meta_params.adjust(meta_params_dict) policy_mods = convert_adj(adjustment["Policy"], meta_params.year.tolist()) adjustment["Tax Information"]["year"] = meta_params.year params = CruncherParams() params.adjust(adjustment["Tax Information"], raise_errors=False) newvals = params.specification() crunch = Cruncher(inputs=newvals, custom_reform=policy_mods) #make dataset for bokeh plots ivar = crunch.ivar df = pd.concat([ivar] * 5000, ignore_index=True) increments = pd.DataFrame(list(range(0, 500000, 100))) zeros = pd.DataFrame([0] * 5000) #ivar position of e00200p df[9] = increments #set spouse earning to zero df[10] = zeros b = Batch(df) df_base = b.create_table() df_reform = b.create_table(policy_mods) #compute average tax rates df_base['IATR'] = df_base['Individual Income Tax'] / df_base['AGI'] df_base['PATR'] = df_base['Payroll Tax'] / df_base['AGI'] df_reform['IATR'] = df_reform['Individual Income Tax'] / df_reform['AGI'] df_reform['PATR'] = df_reform['Payroll Tax'] / df_reform['AGI'] return comp_output(crunch, df_base, df_reform)
def get_inputs(meta_params_dict): """ Return default parameters from Tax-Cruncher """ metaparams = MetaParameters() metaparams.adjust(meta_params_dict) params = CruncherParams() policy_params = TCParams() keep = [ "mstat", "page", "sage", "depx", "dep13", "dep17", "dep18", "pwages", "swages", "dividends", "intrec", "stcg", "ltcg", "otherprop", "nonprop", "pensions", "gssi", "ui", "proptax", "otheritem", "childcare", "mortgage", "mtr_options" ] full_dict = params.specification(meta_data=True, include_empty=True, serializable=True) params_dict = {var: full_dict[var] for var in keep} cruncher_params = params_dict pol_params = policy_params.specification(meta_data=True, include_empty=True, serializable=True, year=metaparams.year) meta = metaparams.specification(meta_data=True, include_empty=True, serializable=True) return meta, {"Tax Information": cruncher_params, "Policy": pol_params}
def get_inputs(meta_params_dict): """ Return default parameters from Tax-Cruncher """ metaparams = MetaParameters() metaparams.adjust(meta_params_dict) params = CruncherParams() policy_params = TCParams() policy_params.set_state(year=metaparams.year.tolist()) filtered_pol_params = OrderedDict() for k, v in policy_params.dump().items(): if k == "schema" or v.get("section_1", False): filtered_pol_params[k] = v keep = [ "mstat", "page", "sage", "depx", "dep13", "dep17", "dep18", "pwages", "swages", "dividends", "intrec", "stcg", "ltcg", "otherprop", "nonprop", "pensions", "gssi", "ui", "proptax", "otheritem", "childcare", "mortgage", "mtr_options", "schema" ] cruncher_dict = params.dump() default_params = { "Tax Information": {k: v for k, v in cruncher_dict.items() if k in keep}, "Policy": filtered_pol_params } meta = metaparams.dump() return {"meta_parameters": meta, "model_parameters": default_params}
def run_model(meta_params_dict, adjustment): params = CruncherParams() params.adjust(adjustment["Tax Information"], raise_errors=False) newvals = params.specification() crunch = Cruncher(inputs=newvals, custom_reform=convert_adj(adjustment["Policy"], 2019)) return comp_output(crunch)
def validate_inputs(meta_params_dict, adjustment, errors_warnings): params = CruncherParams() params.adjust(adjustment["Tax Information"], raise_errors=False) errors_warnings["Tax Information"]["errors"].update(params.errors) policy_adj = inputs.convert_policy_adjustment(adjustment["Policy"]) policy_params = Policy() policy_params.adjust(policy_adj, raise_errors=False, ignore_warnings=True) errors_warnings["Policy"]["errors"].update(policy_params.errors) return {"errors_warnings": errors_warnings}
def validate_inputs(meta_params_dict, adjustment, errors_warnings): params = CruncherParams() params.adjust(adjustment["Tax Information"], raise_errors=False) errors_warnings["Tax Information"]["errors"].update(params.errors) pol_params = {} # drop checkbox parameters. for param, data in list(adjustment["Policy"].items()): if not param.endswith("checkbox"): pol_params[param] = data policy_params = TCParams() policy_params.adjust(pol_params, raise_errors=False) errors_warnings["Policy"]["errors"].update(policy_params.errors) return errors_warnings
def test_compare_defaults(): ''' Test that defaults.json and defaults_batch.json have the same parameters in the same order. ''' cp = CruncherParams() ignore = ['mtr_options', 'reform_options'] cp_list = [] for k, v in cp.dump().items(): cp_list.append(k) for item in ignore: cp_list.remove(item) bp = BatchParams() bp_list = [] for k, v in bp.dump().items(): bp_list.append(k) assert cp_list == bp_list
def get_inputs(meta_params_dict): """ Return default parameters from Tax-Cruncher """ metaparams = MetaParameters() metaparams.adjust(meta_params_dict) params = CruncherParams() policy_params = Policy() policy_params.set_state(year=metaparams.year.tolist()) policy_params.array_first = False # Hack to work smoothly with convert_policy_defaults since # it expects a data_source attribute. metaparams.data_source = "CPS" filtered_pol_params = inputs.convert_policy_defaults( metaparams, policy_params) keep = [ "mstat", "page", "sage", "dep13", "dep17", "dep18", "otherdep", "pwages", "swages", "dividends", "intrec", "stcg", "ltcg", "otherprop", "nonprop", "pensions", "gssi", "ui", "proptax", "otheritem", "childcare", "mortgage", "businc", "sstb", "w2paid", "qualprop", "mtr_options", "schema" ] cruncher_dict = params.dump() default_params = { "Tax Information": {k: v for k, v in cruncher_dict.items() if k in keep}, "Policy": filtered_pol_params } meta = metaparams.dump() return {"meta_parameters": meta, "model_parameters": default_params}
def run_model(meta_params_dict, adjustment): meta_params = MetaParameters() meta_params.adjust(meta_params_dict) policy_mods = convert_adj(adjustment["Policy"], meta_params.year.tolist()) adjustment["Tax Information"]["year"] = meta_params.year params = CruncherParams() params.adjust(adjustment["Tax Information"], raise_errors=False) newvals = params.specification() crunch = Cruncher(inputs=newvals, custom_reform=policy_mods) # make dataset for bokeh plots ivar = crunch.ivar _, mtr_opt, _ = crunch.taxsim_inputs() df = pd.concat([ivar] * 5000, ignore_index=True) increments = pd.DataFrame(list(range(0, 500000, 100))) # use Calculation Option to determine what var to increment if mtr_opt == 'Taxpayer Earnings': span = int(ivar[9]) df[9] = increments elif mtr_opt == 'Spouse Earnings': span = int(ivar[10]) df[10] = increments elif mtr_opt == 'Short Term Gains': span = int(ivar[13]) df[13] = increments elif mtr_opt == 'Long Term Gains': span = int(ivar[14]) df[14] = increments elif mtr_opt == 'Qualified Dividends': span = int(ivar[14]) df[11] = increments elif mtr_opt == 'Interest Received': span = int(ivar[12]) df[12] = increments elif mtr_opt == 'Pensions': span = int(ivar[17]) df[17] = increments elif mtr_opt == 'Gross Social Security Benefits': span = int(ivar[18]) df[18] = increments elif mtr_opt == 'Real Estate Taxes Paid': span = int(ivar[20]) df[20] = increments elif mtr_opt == 'Mortgage': span = int(ivar[23]) df[23] = increments b = Batch(df) df_base = b.create_table() df_reform = b.create_table(policy_mods) # compute average tax rates df_base['IATR'] = df_base['Individual Income Tax'] / df_base['AGI'] df_base['PATR'] = df_base['Payroll Tax'] / df_base['AGI'] df_reform['IATR'] = df_reform['Individual Income Tax'] / df_reform['AGI'] df_reform['PATR'] = df_reform['Payroll Tax'] / df_reform['AGI'] df_base['Axis'] = increments df_reform['Axis'] = increments return comp_output(crunch, df_base, df_reform, span, mtr_opt)