Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
def test_macro_table():
    df = output_tables.macro_table(base_tpi, base_params, reform_tpi,
                                   reform_params)
    assert isinstance(df, pd.DataFrame)
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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()