Ejemplo n.º 1
0
def test_create_parameters_from_file(paramsfile):
    p = Parameters.from_file(paramsfile.name)
    irates = Parameters._Parameters__rates
    inf_rates = [irates[2013 + i] for i in range(0, 12)]

    assert_array_equal(p._almdep,
                       expand_array(np.array([7150, 7250, 7400]), inflate=True,
                                    inflation_rates=inf_rates, num_years=12))
    assert_array_equal(p._almsep,
                       expand_array(np.array([40400, 41050]), inflate=True,
                                    inflation_rates=inf_rates, num_years=12))
    assert_array_equal(p._rt5,
                       expand_array(np.array([0.33]), inflate=False,
                                    inflation_rates=inf_rates, num_years=12))
    assert_array_equal(p._rt7,
                       expand_array(np.array([0.396]), inflate=False,
                                    inflation_rates=inf_rates, num_years=12))
def test_create_parameters_from_file(paramsfile):
    with open(paramsfile.name) as pfile:
        params = json.load(pfile)
    ppo = Parameters(parameter_dict=params)
    irates = Parameters.default_inflation_rates()
    inf_rates = [irates[ppo.start_year + i] for i in range(0, ppo.num_years)]

    assert_array_equal(ppo._almdep,
                       expand_array(np.array([7150, 7250, 7400]),
                                    inflate=True, inflation_rates=inf_rates,
                                    num_years=ppo.num_years))
    assert_array_equal(ppo._almsep,
                       expand_array(np.array([40400, 41050]),
                                    inflate=True, inflation_rates=inf_rates,
                                    num_years=ppo.num_years))
    assert_array_equal(ppo._rt5,
                       expand_array(np.array([0.33]),
                                    inflate=False, inflation_rates=inf_rates,
                                    num_years=ppo.num_years))
    assert_array_equal(ppo._rt7,
                       expand_array(np.array([0.396]),
                                    inflate=False, inflation_rates=inf_rates,
                                    num_years=ppo.num_years))
def test_multi_year_reform():
    """
    Test multi-year reform involving 1D and 2D parameters.
    """
    # specify dimensions of policy Parameters object
    syr = 2013
    nyrs = 10

    # specify assumed inflation rates
    irates = {2013: 0.02, 2014: 0.02, 2015: 0.02, 2016: 0.03, 2017: 0.03,
              2018: 0.04, 2019: 0.04, 2020: 0.04, 2021: 0.04, 2022: 0.04}
    ifactor = {}
    for i in range(0, nyrs):
        ifactor[syr + i] = 1.0 + irates[syr + i]
    iratelist = [irates[syr + i] for i in range(0, nyrs)]

    # instantiate policy Parameters object
    ppo = Parameters(start_year=syr, num_years=nyrs, inflation_rates=irates)

    # confirm that parameters have current-law values
    assert_array_equal(getattr(ppo, '_AMT_thd_MarriedS'),
                       expand_array(np.array([40400, 41050]),
                                    inflate=True, inflation_rates=iratelist,
                                    num_years=nyrs))
    assert_array_equal(getattr(ppo, '_EITC_c'),
                       expand_array(np.array([[487, 3250, 5372, 6044],
                                              [496, 3305, 5460, 6143],
                                              [503, 3359, 5548, 6242]]),
                                    inflate=True, inflation_rates=iratelist,
                                    num_years=nyrs))
    assert_array_equal(getattr(ppo, '_II_em'),
                       expand_array(np.array([3900, 3950, 4000]),
                                    inflate=True, inflation_rates=iratelist,
                                    num_years=nyrs))
    assert_array_equal(getattr(ppo, '_SS_Earnings_c'),
                       expand_array(np.array([113700, 117000, 118500]),
                                    inflate=True, inflation_rates=iratelist,
                                    num_years=nyrs))

    # specify multi-year reform using a dictionary of year_provisions dicts
    reform = {
        2015: {
            '_AMT_thd_MarriedS': [60000]
        },
        2016: {
            '_EITC_c': [[900, 5000, 8000, 9000]],
            '_II_em': [7000],
            '_SS_Earnings_c': [300000]
        },
        2017: {
            '_AMT_thd_MarriedS': [80000],
            '_SS_Earnings_c': [500000], '_SS_Earnings_c_cpi': False
        },
        2019: {
            '_EITC_c': [[1200, 7000, 10000, 12000]],
            '_II_em': [9000],
            '_SS_Earnings_c': [700000], '_SS_Earnings_c_cpi': True
        }
    }

    # implement multi-year reform
    ppo.implement_reform(reform)
    assert ppo.current_year == syr

    # move policy Parameters object forward in time so current_year is syr+2
    #   Note: this would be typical usage because the first budget year
    #         is greater than Parameters start_year.
    ppo.set_year(ppo.start_year + 2)
    assert ppo.current_year == syr + 2

    # confirm that actual parameters have expected post-reform values
    check_amt_thd_marrieds(ppo, reform, ifactor)
    check_eitc_c(ppo, reform, ifactor)
    check_ii_em(ppo, reform, ifactor)
    check_ss_earnings_c(ppo, reform, ifactor)