def test_p_param_set_value():
    assets = Assets()
    p = Specification()
    dp = DepreciationParams()
    calc1 = Calculator(p, dp, assets)
    new_tau_int = np.array([0.396])
    calc1.p_param('tau_int', new_tau_int)
    assert np.allclose(calc1._Calculator__p.tau_int, new_tau_int)
def test_restore_assets():
    assets = Assets()
    p = Specification()
    dp = DepreciationParams()
    calc1 = Calculator(p, dp, assets)
    calc1.store_assets()
    calc1.restore_assets()
    assert isinstance(calc1, Calculator)
def test_Calculator_exception2():
    '''
    Raise exception for not passing depreciation parameters object
    '''
    p = Specification()
    assets = Assets()
    with pytest.raises(Exception):
        assert Calculator(p=p, assets=assets)
def test_Calculator_exception1():
    '''
    Raise exception for not passing parameters object
    '''
    assets = Assets()
    dp = DepreciationParams()
    with pytest.raises(Exception):
        assert Calculator(dp=dp, assets=assets)
def test_calc_by_asset():
    '''
    Test calc_by_asset method
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    asset_df = calc.calc_by_asset()
    assert ('major_asset_group' in asset_df.keys())
def test_calc_by_industry(include_land, include_inventories):
    '''
    Test calc_by_industry method
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    ind_df = calc.calc_by_industry(include_land=include_land,
                                   include_inventories=include_inventories)
    assert ('major_industry' in ind_df.keys())
Example #7
0
def test_calc_by_asset():
    '''
    Test calc_by_asset method.
    '''
    cyr = 2018
    assets = Assets()
    p = Specification(year=cyr)
    calc1 = Calculator(p, assets)
    assert calc1.current_year == cyr
    asset_df = calc1.calc_by_asset()
    assert isinstance(asset_df, pd.DataFrame)
def test_calc_base():
    '''
    Test calc_base method
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    calc.calc_base()
    calc_base_df = calc._Calculator__assets.df
    assert ('z_mix' in calc_base_df.keys())
    assert ('rho_mix' in calc_base_df.keys())
def test_calc_by_industry():
    '''
    Test difference_table method.
    '''
    yr = 2018
    assets = Assets()
    p = Specifications(year=yr)
    calc1 = Calculator(p, assets)
    assert calc1.current_year == yr
    asset_df = calc1.calc_by_industry()
    assert isinstance(asset_df, pd.DataFrame)
def test_bubble_widget():
    '''
    Test asset bubble plot method.
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    p2 = Specification(year=2026)
    p2.update_specification({'CIT_rate': 0.25})
    calc2 = Calculator(p2, assets)
    fig = calc.bubble_widget(calc2)
    assert fig
def test_asset_share_table(include_land, include_inventories):
    '''
    Test asset_share_table method.
    '''
    cyr = 2018
    assets = Assets()
    p = Specification(year=cyr)
    calc1 = Calculator(p, assets)
    assert calc1.current_year == cyr
    asset_df = calc1.asset_share_table(include_land=include_land,
                                       include_inventories=include_inventories)
    assert isinstance(asset_df, pd.DataFrame)
def test_calc_other():
    '''
    Test calc_other method
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    df = calc.calc_by_asset()
    calc_other_df = calc.calc_other(df)
    assert ('ucc_mix' in calc_other_df.keys())
    assert ('metr_mix' in calc_other_df.keys())
    assert ('mettr_mix' in calc_other_df.keys())
    assert ('tax_wedge_mix' in calc_other_df.keys())
    assert ('eatr_mix' in calc_other_df.keys())
Example #13
0
def test_summary_table():
    '''
    Test summary_table method.
    '''
    cyr = 2018
    assets = Assets()
    p = Specification(year=cyr)
    calc1 = Calculator(p, assets)
    assert calc1.current_year == cyr
    p.update_specification({'CIT_rate': 0.38})
    calc2 = Calculator(p, assets)
    assert calc2.current_year == cyr
    summary_df = calc1.summary_table(calc2)
    assert isinstance(summary_df, pd.DataFrame)
def test_range_plot():
    '''
    Test range_plot method.
    '''
    assets = Assets()
    p = Specifications()
    calc = Calculator(p, assets)
    p2 = Specifications(year=2026)
    p2.update_specifications({'CIT_rate': 0.25})
    calc2 = Calculator(p2, assets)
    fig = calc.range_plot(calc2)
    assert fig
    fig = calc.range_plot(calc2, output_variable='rho')
    assert fig
Example #15
0
def run_model(meta_param_dict, adjustment):
    '''
    Initializes classes from CCC that compute the model under
    different policies.  Then calls function get output objects.
    '''
    # update MetaParams
    meta_params = MetaParams()
    meta_params.adjust(meta_param_dict)
    # Get data chosen by user
    if meta_params.data_source == "PUF":
        data = retrieve_puf(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
    else:
        data = "cps"
    # Get TC params adjustments
    iit_mods = cs2tc.convert_policy_adjustment(
        adjustment["Individual and Payroll Tax Parameters"])
    filtered_ccc_params = {}
    # filter out CCC params that will not change between baeline and
    # reform runs (These are the Household Savings Behavior and
    # Economic Assumptions)
    constant_param_list = [
        'omega_scg', 'omega_lcg', 'omega_xcg', 'alpha_c_e_ft', 'alpha_c_e_td',
        'alpha_c_e_nt', 'alpha_c_d_ft', 'alpha_c_d_td', 'alpha_c_d_nt',
        'alpha_nc_d_ft', 'alpha_nc_d_td', 'alpha_nc_d_nt', 'alpha_h_d_ft',
        'alpha_h_d_td', 'alpha_h_d_nt', 'Y_td', 'Y_scg', 'Y_lcg', 'gamma',
        'E_c', 'inflation_rate', 'nominal_interest_rate'
    ]
    filtered_ccc_params = OrderedDict()
    for k, v in adjustment['Business Tax Parameters'].items():
        if k in constant_param_list:
            filtered_ccc_params[k] = v
    # Baseline CCC calculator
    params = Specification(year=meta_params.year,
                           call_tc=False,
                           iit_reform={},
                           data=data)
    params.update_specification(filtered_ccc_params)
    assets = Assets()
    dp = DepreciationParams()
    calc1 = Calculator(params, dp, assets)
    # Reform CCC calculator - includes TC adjustments
    params2 = Specification(year=meta_params.year,
                            call_tc=True,
                            iit_reform=iit_mods,
                            data=data)
    params2.update_specification(adjustment["Business Tax Parameters"])
    calc2 = Calculator(params2, dp, assets)
    comp_dict = comp_output(calc1, calc2)

    return comp_dict
def test_asset_bubble():
    '''
    Test asset bubble plot method.
    '''
    assets = Assets()
    p = Specifications()
    calc = Calculator(p, assets)
    p2 = Specifications(year=2026)
    p2.update_specifications({'CIT_rate': 0.25})
    calc2 = Calculator(p2, assets)
    fig = calc.asset_bubble(calc2)
    assert fig
    fig = calc.asset_bubble(calc2, output_variable='rho_mix')
    assert fig
def test_grouped_bar():
    '''
    Test grouped_bar method.
    '''
    assets = Assets()
    p = Specifications()
    calc = Calculator(p, assets)
    p2 = Specifications(year=2026)
    p2.update_specifications({'CIT_rate': 0.25})
    calc2 = Calculator(p2, assets)
    fig = calc.grouped_bar(calc2)
    assert fig
    fig = calc.grouped_bar(calc2, output_variable='rho', group_by_asset=False)
    assert fig
Example #18
0
def test_read_data():
    '''
    Test of Assets._read_data() method
    '''
    assets = Assets()
    df = read_egg_csv('ccc_asset_data.csv')
    assets = Assets(data='ccc_asset_data.csv')
    assets._read_data('ccc_asset_data.csv')
    pd.testing.assert_frame_equal(df, assets.df)
def test_summary_table():
    '''
    Test difference_table method.
    '''
    yr = 2018
    assets = Assets()
    p = Specifications(year=yr)
    calc1 = Calculator(p, assets)
    assert calc1.current_year == yr
    reform = {'CIT_rate': 0.38}
    p.update_specifications(reform)
    calc2 = Calculator(p, assets)
    assert calc2.current_year == yr
    summary_df = calc1.summary_table(calc2)
    assert isinstance(summary_df, pd.DataFrame)
def test_calc_all():
    '''
    Test calc_all method
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    calc.calc_all()
    calc_all_df = calc._Calculator__assets.df
    assert ('z_mix' in calc_all_df.keys())
    assert ('rho_mix' in calc_all_df.keys())
    assert ('ucc_mix' in calc_all_df.keys())
    assert ('metr_mix' in calc_all_df.keys())
    assert ('mettr_mix' in calc_all_df.keys())
    assert ('tax_wedge_mix' in calc_all_df.keys())
    assert ('eatr_mix' in calc_all_df.keys())
def test_asset_bubble():
    '''
    Test asset bubble plot method.
    '''
    assets = Assets()
    p = Specification()
    dp = DepreciationParams()
    calc = Calculator(p, dp, assets)
    p2 = Specification(year=2026)
    p2.update_specification({'CIT_rate': 0.25})
    calc2 = Calculator(p2, dp, assets)
    fig = calc.asset_bubble(calc2, include_title=True)
    assert fig
    fig = calc.asset_bubble(calc2,
                            output_variable='rho_mix',
                            include_title=True)
    assert fig
def test_range_plot(corporate):
    '''
    Test range_plot method.
    '''
    assets = Assets()
    p = Specification()
    calc = Calculator(p, assets)
    p2 = Specification(year=2026)
    p2.update_specification({'CIT_rate': 0.25})
    calc2 = Calculator(p2, assets)
    fig = calc.range_plot(calc2, corporate=corporate, include_title=True)
    assert fig
    fig = calc.range_plot(calc2,
                          output_variable='rho',
                          corporate=corporate,
                          include_title=True)
    assert fig
def test_industry_summary_table(include_land, include_inventories):
    '''
    Test industry_summary_table method.
    '''
    cyr = 2018
    assets = Assets()
    p = Specification(year=cyr)
    calc1 = Calculator(p, assets)
    assert calc1.current_year == cyr
    p.update_specification({'CIT_rate': 0.38})
    calc2 = Calculator(p, assets)
    assert calc2.current_year == cyr
    ind_df = calc1.industry_summary_table(
        calc2,
        include_land=include_land,
        include_inventories=include_inventories)
    assert isinstance(ind_df, pd.DataFrame)
def test_grouped_bar(corporate):
    '''
    Test grouped_bar method.
    '''
    assets = Assets()
    p = Specification()
    dp = DepreciationParams()
    calc = Calculator(p, dp, assets)
    p2 = Specification(year=2026)
    p2.update_specification({'CIT_rate': 0.25})
    calc2 = Calculator(p2, dp, assets)
    fig = calc.grouped_bar(calc2, corporate=corporate)
    assert fig
    fig = calc.grouped_bar(calc2,
                           output_variable='rho',
                           corporate=corporate,
                           group_by_asset=False)
    assert fig
Example #25
0
def run_model(meta_param_dict, adjustment):
    '''
    Initiliazes classes from CCC that compute the model under
    different policies.  Then calls function get output objects.
    '''
    meta_params = MetaParams()
    meta_params.adjust(meta_param_dict)
    if meta_params.data_source == "PUF":
        data = retrieve_puf(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
    else:
        data = "cps"
    params = Specification(year=meta_params.year, call_tc=True, data=data)
    params.adjust(adjustment["ccc"])
    assets = Assets()
    calc1 = Calculator(params, assets)
    params2 = Specification(year=meta_params.year)
    calc2 = Calculator(params2, assets)
    comp_dict = comp_output(calc1, calc2)

    return comp_dict
def test_calc_by_methods():
    """
    Test the Calculator calc_by_asset and calc_by_industry methods by
    comparing actual and expect dataframes
    """
    # execute Calculator calc_by methods to get actual results
    p = Specification()
    dp = DepreciationParams()
    assets = Assets()
    calc = Calculator(p, dp, assets)
    actual_by_asset = calc.calc_by_asset()
    actual_by_industry = calc.calc_by_industry()
    # load expected results from the calc_by_ methods
    expect_by_asset = pd.read_json(
        os.path.join(TDIR, 'run_ccc_asset_output.json'))
    expect_by_industry = pd.read_json(
        os.path.join(TDIR, 'run_ccc_industry_output.json'))
    # compare the actual and expect DataFrames
    for actual_df, expect_df in zip([actual_by_asset, actual_by_industry],
                                    [expect_by_asset, expect_by_industry]):
        actual_df.sort_index(inplace=True)
        actual_df.reset_index(inplace=True)
        expect_df.sort_index(inplace=True)
        expect_df.reset_index(inplace=True)
        assert tuple(actual_df.columns) == tuple(expect_df.columns)
        for col in expect_df.columns:
            try:
                example = getattr(actual_df, col).iloc[0]
                can_diff = isinstance(example, numbers.Number)
                if can_diff:
                    assert np.allclose(actual_df[col].values,
                                       expect_df[col].values,
                                       atol=1e-5)
                else:
                    pass
            except AttributeError:
                pass
              'reforms/2017_law.json')
iit_reform = taxcalc.Policy.read_json_reform(reform_url)
# ... specify reform that implements pre-TCJA business tax policy
cyr = 2019
business_tax_reform = {
    'CIT_rate': 0.35,
    'BonusDeprec_3yr': 0.50,
    'BonusDeprec_5yr': 0.50,
    'BonusDeprec_7yr': 0.50,
    'BonusDeprec_10yr': 0.50,
    'BonusDeprec_15yr': 0.50,
    'BonusDeprec_20yr': 0.50
}

# specify baseline and reform Calculator objects for 2019 calculations
assets = Assets()
baseline_parameters = Specification(year=cyr)
calc1 = Calculator(baseline_parameters, assets)
reform_parameters = Specification(year=cyr)
reform_parameters.update_specification(business_tax_reform)
calc2 = Calculator(reform_parameters, assets)

# do calculations by asset and by industry
baseln_assets_df = calc1.calc_by_asset()
reform_assets_df = calc2.calc_by_asset()
baseln_industry_df = calc1.calc_by_industry()
reform_industry_df = calc2.calc_by_industry()

# generate dataframes with reform-minus-baseline differences
diff_assets_df = diff_two_tables(reform_assets_df, baseln_assets_df)
diff_industry_df = diff_two_tables(reform_industry_df, baseln_industry_df)
Example #28
0
def test_read_data_exception():
    '''
    Test of Assets._read_data() method
    '''
    with pytest.raises(Exception):
        assert Assets(data=3)
def test_p_param_return_value():
    assets = Assets()
    p = Specification()
    calc1 = Calculator(p, assets)
    obj = calc1.p_param('tau_int')
    assert np.allclose(obj, np.array([0.31484782613369866]))
def test_data_year():
    assets = Assets()
    p = Specification()
    calc1 = Calculator(p, assets)
    assert calc1.data_year == 2013