def test_macro_table(base_tpi, base_params, reform_tpi, reform_params, output_type): df = output_tables.macro_table( base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, output_type=output_type, include_SS=True, include_overall=True) assert isinstance(df, pd.DataFrame)
def main(): # Define parameters to use for multiprocessing client = Client() num_workers = min(multiprocessing.cpu_count(), 7) print('Number of workers = ', num_workers) run_start_time = time.time() # Grab a reform JSON file already in Tax-Calculator # In this example the 'reform' is a change to 2017 law (the # baseline policy is tax law in 2018) reform_url = ('https://raw.githubusercontent.com/' 'PSLmodels/Tax-Calculator/' + taxcalc.__version__ + '/taxcalc/reforms/2017_law.json') ref = Calculator.read_json_param_objects(reform_url, None) iit_reform = ref['policy'] # Directories to save data CUR_DIR = os.path.dirname(os.path.realpath(__file__)) base_dir = os.path.join(CUR_DIR, BASELINE_DIR) reform_dir = os.path.join(CUR_DIR, REFORM_DIR) # Set some OG model parameters # See default_parameters.json for more description of these parameters alpha_T = np.zeros(50) # Adjusting the path of transfer spending alpha_T[0:2] = 0.09 alpha_T[2:10] = 0.09 + 0.01 alpha_T[10:40] = 0.09 - 0.01 alpha_T[40:] = 0.09 alpha_G = np.zeros(7) # Adjusting the path of non-transfer spending alpha_G[0:3] = 0.05 - 0.01 alpha_G[3:6] = 0.05 - 0.005 alpha_G[6:] = 0.05 # Set start year for baseline and reform. START_YEAR = 2021 # Also adjust the Frisch elasticity, the start year, the # effective corporate income tax rate, and the SS debt-to-GDP ratio og_spec = { 'frisch': 0.41, 'start_year': START_YEAR, 'cit_rate': [0.21], 'debt_ratio_ss': 1.0, 'alpha_T': alpha_T.tolist(), 'alpha_G': alpha_G.tolist() } ''' ------------------------------------------------------------------------ Run baseline policy first ------------------------------------------------------------------------ ''' tax_func_path = os.path.join( CUR_DIR, '..', 'ogusa', 'data', 'tax_functions', 'TxFuncEst_baseline_CPS.pkl') # use cached baseline estimates kwargs = { 'output_base': base_dir, 'baseline_dir': base_dir, 'test': False, 'time_path': True, 'baseline': True, 'og_spec': og_spec, 'guid': '_example', 'run_micro': False, 'tax_func_path': tax_func_path, 'data': 'cps', 'client': client, 'num_workers': num_workers } start_time = time.time() runner(**kwargs) print('run time = ', time.time() - start_time) ''' ------------------------------------------------------------------------ Run reform policy ------------------------------------------------------------------------ ''' # update the effective corporate income tax rate og_spec = { 'frisch': 0.41, 'start_year': START_YEAR, 'cit_rate': [0.35], 'debt_ratio_ss': 1.0, 'alpha_T': alpha_T.tolist(), 'alpha_G': alpha_G.tolist() } kwargs = { 'output_base': reform_dir, 'baseline_dir': base_dir, 'test': False, 'time_path': True, 'baseline': False, 'og_spec': og_spec, 'guid': '_example', 'iit_reform': iit_reform, 'run_micro': True, 'data': 'cps', 'client': client, 'num_workers': num_workers } start_time = time.time() runner(**kwargs) print('run time = ', time.time() - start_time) # return ans - the percentage changes in macro aggregates and prices # due to policy changes from the baseline to the reform base_tpi = safe_read_pickle(os.path.join(base_dir, 'TPI', 'TPI_vars.pkl')) base_params = safe_read_pickle(os.path.join(base_dir, 'model_params.pkl')) reform_tpi = safe_read_pickle( os.path.join(reform_dir, 'TPI', 'TPI_vars.pkl')) reform_params = safe_read_pickle( os.path.join(reform_dir, 'model_params.pkl')) ans = ot.macro_table(base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=og_spec['start_year']) # create plots of output op.plot_all(base_dir, reform_dir, os.path.join(CUR_DIR, 'run_example_plots')) print("total time was ", (time.time() - run_start_time)) print('Percentage changes in aggregates:', ans) # save percentage change output to csv file ans.to_csv('ogusa_example_output.csv') client.close()
def test_macro_table(): df = output_tables.macro_table(base_tpi, base_params, reform_tpi, reform_params) assert isinstance(df, pd.DataFrame)
def main(): # Define parameters to use for multiprocessing client = Client() num_workers = min(multiprocessing.cpu_count(), 12) print('Number of workers = ', num_workers) run_start_time = time.time() reform_url = ('biden-iitax-reforms.json') ref = Calculator.read_json_param_objects(reform_url, None) iit_reform = ref['policy'] # Directories to save data CUR_DIR = os.path.dirname(os.path.realpath(__file__)) base_dir = os.path.join(CUR_DIR, BASELINE_DIR) reform_dir = os.path.join(CUR_DIR, REFORM_DIR) ''' ------------------------------------------------------------------------ Run baseline policy first ------------------------------------------------------------------------ ''' og_spec_base = { 'start_year': 2021, 'tG1': 20, 'tG2': 200, 'initial_debt_ratio': 0.982, 'debt_ratio_ss': 1.5, 'tax_func_type': 'DEP', 'age_specific': True } kwargs = { 'output_base': base_dir, 'baseline_dir': base_dir, 'test': False, 'time_path': True, 'baseline': True, 'og_spec': og_spec_base, 'guid': '_biden', 'run_micro': True, 'tax_func_path': None, 'data': 'cps', 'client': client, 'num_workers': num_workers } start_time = time.time() runner(**kwargs) print('run time = ', time.time() - start_time) ''' ------------------------------------------------------------------------ Run reform policy ------------------------------------------------------------------------ ''' # update the effective corporate income tax rate og_spec_reform = { 'start_year': 2021, 'tG1': 20, 'tG2': 200, 'initial_debt_ratio': 0.982, 'debt_ratio_ss': 1.5, 'tax_func_type': 'DEP', 'age_specific': True, 'cit_rate': [0.28] } kwargs = { 'output_base': reform_dir, 'baseline_dir': base_dir, 'test': False, 'time_path': True, 'baseline': False, 'og_spec': og_spec_reform, 'guid': '_biden', 'iit_reform': iit_reform, 'run_micro': True, 'tax_func_path': None, 'data': 'cps', 'client': client, 'num_workers': num_workers } start_time = time.time() runner(**kwargs) print('run time = ', time.time() - start_time) # return ans - the percentage changes in macro aggregates and prices # due to policy changes from the baseline to the reform base_tpi = safe_read_pickle(os.path.join(base_dir, 'TPI', 'TPI_vars.pkl')) base_ss = safe_read_pickle(os.path.join(base_dir, 'SS', 'SS_vars.pkl')) base_params = safe_read_pickle(os.path.join(base_dir, 'model_params.pkl')) reform_tpi = safe_read_pickle( os.path.join(reform_dir, 'TPI', 'TPI_vars.pkl')) reform_ss = safe_read_pickle(os.path.join(reform_dir, 'SS', 'SS_vars.pkl')) reform_params = safe_read_pickle( os.path.join(reform_dir, 'model_params.pkl')) # Macro Agg Tables ans0 = ot.macro_table(base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=2021) ans1 = ot.macro_table(base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=2031) # Dynamic Revenue Feedback Table ans2 = ot.dynamic_revenue_decomposition(base_params, base_tpi, base_ss, reform_params, reform_tpi, reform_ss, num_years=10, include_SS=False, include_overall=True, start_year=2021, table_format=None, path=None) # Data for Macro Aggregates Graph ans3 = ot.macro_table(base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'K', 'L', 'C'], output_type='pct_diff', num_years=60, start_year=2021) # Data for Debt to GDP Graph ans4 = ot.macro_table(base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['D', 'Y'], output_type='levels', num_years=60, start_year=2021) # Data Dump ans5 = ot.tp_output_dump_table(base_params, base_tpi, reform_params, reform_tpi, table_format=None, path=None) # create plots of output op.plot_all(base_dir, reform_dir, os.path.join(CUR_DIR, 'run_biden_plots')) print("total time was ", (time.time() - run_start_time)) print('Percentage changes in aggregates:', ans) # save output tables to csv files ans0.to_csv('ogusa_biden_output_2021-30.csv') ans1.to_csv('ogusa_biden_output_2031-40.csv') ans2.to_csv('ogusa_biden_dynamic_revenue.csv') ans3.to_csv('ogusa_biden_macro_table.csv') ans4.to_csv('ogusa_biden_debt2gdp_2021-30.csv') ans5.to_csv('ogusa_biden_output_dump.csv') client.close()
def comp_output(base_params, base_ss, reform_params, reform_ss, time_path, base_tpi=None, reform_tpi=None, var='cssmat'): ''' Function to create output for the COMP platform ''' if time_path: table_title = 'Percentage Changes in Economic Aggregates Between' table_title += ' Baseline and Reform Policy' plot1_title = 'Pct Changes in Economic Aggregates Between' plot1_title += ' Baseline and Reform Policy' plot2_title = 'Pct Changes in Interest Rates and Wages' plot2_title += ' Between Baseline and Reform Policy' plot3_title = 'Differences in Fiscal Variables Relative to GDP' plot3_title += ' Between Baseline and Reform Policy' out_table = ot.tp_output_dump_table(base_params, base_tpi, reform_params, reform_tpi, table_format='csv') html_table = ot.macro_table( base_tpi, base_params, reform_tpi, reform_params, var_list=['Y', 'C', 'I_total', 'L', 'D', 'G', 'r', 'w'], output_type='pct_diff', num_years=10, include_SS=True, include_overall=True, start_year=base_params.start_year, table_format='html') fig1 = op.plot_aggregates(base_tpi, base_params, reform_tpi, reform_params, var_list=['Y', 'C', 'K', 'L'], plot_type='pct_diff', num_years_to_plot=50, start_year=base_params.start_year, vertical_line_years=[ base_params.start_year + base_params.tG1, base_params.start_year + base_params.tG2 ], plot_title=None, path=None) in_memory_file1 = io.BytesIO() fig1.savefig(in_memory_file1, format="png", bbox_inches="tight") in_memory_file1.seek(0) fig2 = op.plot_aggregates(base_tpi, base_params, reform_tpi, reform_params, var_list=['r_gov', 'w'], plot_type='pct_diff', num_years_to_plot=50, start_year=base_params.start_year, vertical_line_years=[ base_params.start_year + base_params.tG1, base_params.start_year + base_params.tG2 ], plot_title=None, path=None) in_memory_file2 = io.BytesIO() fig2.savefig(in_memory_file2, format="png", bbox_inches="tight") in_memory_file2.seek(0) fig3 = op.plot_gdp_ratio(base_tpi, base_params, reform_tpi, reform_params, var_list=['D', 'G', 'total_tax_revenue'], plot_type='diff', num_years_to_plot=50, start_year=base_params.start_year, vertical_line_years=[ base_params.start_year + base_params.tG1, base_params.start_year + base_params.tG2 ], plot_title=None, path=None) in_memory_file3 = io.BytesIO() fig3.savefig(in_memory_file3, format="png", bbox_inches="tight") in_memory_file3.seek(0) comp_dict = { "renderable": [{ "media_type": "PNG", "title": plot1_title, "data": in_memory_file1.read() }, { "media_type": "PNG", "title": plot2_title, "data": in_memory_file2.read() }, { "media_type": "PNG", "title": plot3_title, "data": in_memory_file3.read() }, { "media_type": "table", "title": table_title, "data": html_table }], "downloadable": [{ "media_type": "CSV", "title": table_title, "data": out_table.to_csv() }] } else: table_title = 'Percentage Changes in Economic Aggregates Between' table_title += ' Baseline and Reform Policy' plot_title = 'Percentage Changes in Consumption by Lifetime Income' plot_title += ' Percentile Group' out_table = ot.macro_table_SS(base_ss, reform_ss, var_list=[ 'Yss', 'Css', 'Iss_total', 'Gss', 'total_tax_revenue', 'Lss', 'rss', 'wss' ], table_format='csv') html_table = ot.macro_table_SS(base_ss, reform_ss, var_list=[ 'Yss', 'Css', 'Iss_total', 'Gss', 'total_tax_revenue', 'Lss', 'rss', 'wss' ], table_format='html') fig = op.ability_bar_ss(base_ss, base_params, reform_ss, reform_params, var=var) in_memory_file = io.BytesIO() fig.savefig(in_memory_file, format="png", bbox_inches="tight") in_memory_file.seek(0) comp_dict = { "renderable": [{ "media_type": "PNG", "title": plot_title, "data": in_memory_file.read() }, { "media_type": "table", "title": table_title, "data": html_table }], "downloadable": [{ "media_type": "CSV", "title": table_title, "data": out_table.to_csv() }] } return comp_dict
def run_micro_macro(user_params, reform=None, baseline_dir=BASELINE_DIR, reform_dir=REFORM_DIR, guid='', data=PUF_PATH, ok_to_run_baseline=True): start_time = time.time() T_shifts = np.zeros(50) T_shifts[2:10] = 0.01 T_shifts[10:40] = -0.01 G_shifts = np.zeros(6) G_shifts[0:3] = -0.01 G_shifts[3:6] = -0.005 user_params = { 'frisch': 0.41, 'start_year': 2017, 'tau_b': 0.20, 'debt_ratio_ss': 1.0, 'delta_tau_annual': 0.05, 'T_shifts': T_shifts.tolist(), 'G_shifts': G_shifts.tolist() } ''' ------------------------------------------------------------------------ Run baseline ------------------------------------------------------------------------ ''' print('path exists', not os.path.exists(baseline_dir), ok_to_run_baseline) # if not os.path.exists(baseline_dir) and ok_to_run_baseline: if ok_to_run_baseline: output_base = baseline_dir kwargs = { 'output_base': baseline_dir, 'baseline_dir': baseline_dir, 'test': False, 'time_path': True, 'baseline': True, 'analytical_mtrs': False, 'age_specific': True, 'user_params': user_params, 'guid': '', 'run_micro': False, 'small_open': False, 'budget_balance': False, 'baseline_spending': False, 'data': data, 'client': client, 'num_workers': 4 } runner(**kwargs) ''' ------------------------------------------------------------------------ Run reform ------------------------------------------------------------------------ ''' output_base = reform_dir kwargs = { 'output_base': output_base, 'baseline_dir': baseline_dir, 'test': False, 'time_path': True, 'baseline': False, 'analytical_mtrs': False, 'age_specific': True, 'user_params': user_params, 'guid': guid, 'reform': reform, 'run_micro': False, 'small_open': False, 'budget_balance': False, 'baseline_spending': False, 'data': data, 'client': client, 'num_workers': 4 } runner(**kwargs) base_tpi = safe_read_pickle( os.path.join(baseline_dir, 'TPI', 'TPI_vars.pkl')) base_params = safe_read_pickle( os.path.join(baseline_dir, 'model_params.pkl')) reform_tpi = safe_read_pickle( os.path.join(reform_dir, 'TPI', 'TPI_vars.pkl')) reform_params = safe_read_pickle( os.path.join(reform_dir, 'model_params.pkl')) ans = ot.macro_table(base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=2017) print("total time was ", (time.time() - start_time)) print('Percentage changes in aggregates:', ans)
def run_micro_macro(iit_reform, og_spec, guid, client): guid = '' start_time = time.time() REFORM_DIR = os.path.join(CUR_PATH, "OUTPUT_REFORM_" + guid) BASELINE_DIR = os.path.join(CUR_PATH, "OUTPUT_BASELINE" + guid) tax_func_path_baseline = os.path.join( CUR_PATH, 'TxFuncEst_baseline.pkl') tax_func_path_reform = os.path.join( CUR_PATH, 'TxFuncEst_policy.pkl') # Add start year from reform to user parameters og_spec['start_year'] = 2018 with open("log_{}.log".format(guid), 'w') as f: f.write("guid: {}\n".format(guid)) f.write("iit_reform: {}\n".format(iit_reform)) f.write("og_spec: {}\n".format(og_spec)) ''' ------------------------------------------------------------------------ Run baseline ------------------------------------------------------------------------ ''' output_base = BASELINE_DIR kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR, 'test': True, 'time_path': True, 'baseline': True, 'og_spec': og_spec, 'run_micro': False, 'tax_func_path': tax_func_path_baseline, 'guid': guid, 'client': client, 'num_workers': NUM_WORKERS} runner(**kwargs) ''' ------------------------------------------------------------------------ Run reform ------------------------------------------------------------------------ ''' output_base = REFORM_DIR kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR, 'test': True, 'time_path': True, 'baseline': False, 'iit_reform': iit_reform, 'og_spec': og_spec, 'guid': guid, 'run_micro': False, 'tax_func_path': tax_func_path_reform, 'client': client, 'num_workers': NUM_WORKERS} runner(**kwargs) time.sleep(0.5) base_tpi = safe_read_pickle( os.path.join(BASELINE_DIR, 'TPI', 'TPI_vars.pkl')) base_params = safe_read_pickle( os.path.join(BASELINE_DIR, 'model_params.pkl')) reform_tpi = safe_read_pickle( os.path.join(REFORM_DIR, 'TPI', 'TPI_vars.pkl')) reform_params = safe_read_pickle( os.path.join(REFORM_DIR, 'model_params.pkl')) ans = ot.macro_table( base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=og_spec['start_year']) print("total time was ", (time.time() - start_time)) return ans
def main(): # Directories to save data CUR_DIR = os.path.dirname(os.path.realpath(__file__)) base_dir = os.path.join(CUR_DIR, BASELINE_DIR) reform_dir = os.path.join(CUR_DIR, REFORM_DIR) # return ans - the percentage changes in macro aggregates and prices # due to policy changes from the baseline to the reform base_tpi = safe_read_pickle( os.path.join(base_dir, 'TPI', 'TPI_vars.pkl')) base_ss = safe_read_pickle( os.path.join(base_dir, 'SS', 'SS_vars.pkl')) base_params = safe_read_pickle( os.path.join(base_dir, 'model_params.pkl')) reform_tpi = safe_read_pickle( os.path.join(reform_dir, 'TPI', 'TPI_vars.pkl')) reform_ss = safe_read_pickle( os.path.join(reform_dir, 'SS', 'SS_vars.pkl')) reform_params = safe_read_pickle( os.path.join(reform_dir, 'model_params.pkl')) # Macro Agg Tables ans0 = ot.macro_table( base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=2021) ans1 = ot.macro_table( base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'C', 'K', 'L', 'r', 'w'], output_type='pct_diff', num_years=10, start_year=2031) # Dynamic Revenue Feedback Table ans2 = ot.dynamic_revenue_decomposition( base_params, base_tpi, base_ss, reform_params, reform_tpi, reform_ss, num_years = 10, include_SS=False, include_overall=True, start_year=2021, table_format=None, path=None) # Data for Macro Aggregates Graph ans3 = ot.macro_table( base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['Y', 'K', 'L', 'C'], output_type='pct_diff', num_years=60, start_year=2021) # Data for Debt to GDP Graph ans4 = ot.macro_table( base_tpi, base_params, reform_tpi=reform_tpi, reform_params=reform_params, var_list=['D','Y'], output_type='levels', num_years=60, start_year=2021) # Data Dump ans5 = ot.tp_output_dump_table( base_params, base_tpi, reform_params, reform_tpi, table_format=None, path=None) # create plots of output op.plot_all(base_dir, reform_dir, os.path.join(CUR_DIR, 'run_biden_plots')) # save output tables to csv files ans0.to_csv('ogusa_biden_output_2021-30.csv') ans1.to_csv('ogusa_biden_output_2031-40.csv') ans2.to_csv('ogusa_biden_dynamic_revenue.csv') ans3.to_csv('ogusa_biden_macro_table.csv') ans4.to_csv('ogusa_biden_debt2gdp_2021-30.csv') ans5.to_csv('ogusa_biden_output_dump.csv') client.close()