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)