def test_read_json_param_with_suffixes_and_errors():
    """
    Test interaction of policy parameter suffixes and reform errors
    (fails without 0.10.2 bug fix as reported by Hank Doupe in PB PR#641)
    """
    reform = {
        u'policy': {
            u'_II_brk4_separate': {u'2017': [5000.0]},
            u'_STD_separate': {u'2017': [8000.0]},
            u'_STD_single': {u'2018': [1000.0]},
            u'_II_brk2_headhousehold': {u'2017': [1000.0]},
            u'_II_brk4_single': {u'2017': [500.0]},
            u'_STD_joint': {u'2017': [10000.0], u'2020': [150.0]},
            u'_II_brk2_separate': {u'2017': [1000.0]},
            u'_II_brk2_single': {u'2017': [1000.0]},
            u'_II_brk2_joint': {u'2017': [1000.0]},
            u'_FICA_ss_trt': {u'2017': [-1.0], u'2019': [0.1]},
            u'_II_brk4_headhousehold': {u'2017': [500.0]},
            u'_STD_headhousehold': {u'2017': [10000.0], u'2020': [150.0]},
            u'_ID_Medical_frt': {u'2019': [0.06]},
            u'_II_brk4_joint': {u'2017': [500.0]},
            u'_ID_BenefitSurtax_Switch_medical': {u'2017': [True]}
        }
    }
    json_reform = json.dumps(reform)
    params = Calculator.read_json_param_objects(json_reform, None)
    assert isinstance(params, dict)
    pol = Policy()
    pol.ignore_reform_errors()
    pol.implement_reform(params['policy'],
                         print_warnings=False, raise_errors=False)
    assert pol.parameter_errors
    assert pol.parameter_warnings
Example #2
0
def test_validate_param_values_warnings_errors():
    """
    Check detection of out_of_range policy parameters in reforms.
    """
    pol1 = Policy()
    ref1 = {2020: {'_ID_Medical_frt': [0.05]}}
    pol1.implement_reform(ref1, print_warnings=True, raise_errors=False)
    assert len(pol1.parameter_warnings) > 0
    pol2 = Policy()
    ref2 = {2021: {'_ID_Charity_crt_all': [0.61]}}
    pol2.implement_reform(ref2, print_warnings=False, raise_errors=False)
    assert len(pol2.parameter_warnings) > 0
    pol3 = Policy()
    ref3 = {2024: {'_II_brk4': [[0, 0, 0, 0, 0]]}}
    pol3.implement_reform(ref3, print_warnings=False, raise_errors=False)
    assert len(pol3.parameter_errors) > 0
    pol4 = Policy()
    ref4 = {2024: {'_II_brk4': [[0, 9e9, 0, 0, 0]]}}
    pol4.implement_reform(ref4, print_warnings=False, raise_errors=False)
    assert len(pol4.parameter_errors) > 0
    pol5 = Policy()
    pol5.ignore_reform_errors()
    ref5 = {2025: {'_ID_BenefitSurtax_Switch': [[False, True, 0, 1, 0, 1, 0]]}}
    pol5.implement_reform(ref5, print_warnings=False, raise_errors=False)
    assert len(pol5.parameter_errors) > 0
    pol6 = Policy()
    ref6 = {2013: {'_STD': [[20000, 25000, 20000, 20000, 25000]]}}
    pol6.implement_reform(ref6, print_warnings=False, raise_errors=False)
    assert pol6.parameter_errors == ''
    assert pol6.parameter_warnings == ''
Example #3
0
def test_read_json_param_with_suffixes_and_errors():
    # test interaction of policy parameter suffixes and reform errors
    # (fails without 0.10.2 bug fix as reported by Hank Doupe in PB PR#641)
    reform = {
        u'policy': {
            u'_II_brk4_separate': {u'2017': [5000.0]},
            u'_STD_separate': {u'2017': [8000.0]},
            u'_STD_single': {u'2018': [1000.0]},
            u'_II_brk2_headhousehold': {u'2017': [1000.0]},
            u'_II_brk4_single': {u'2017': [500.0]},
            u'_STD_joint': {u'2017': [10000.0], u'2020': [150.0]},
            u'_II_brk2_separate': {u'2017': [1000.0]},
            u'_II_brk2_single': {u'2017': [1000.0]},
            u'_II_brk2_joint': {u'2017': [1000.0]},
            u'_FICA_ss_trt': {u'2017': [-1.0], u'2019': [0.1]},
            u'_II_brk4_headhousehold': {u'2017': [500.0]},
            u'_STD_headhousehold': {u'2017': [10000.0], u'2020': [150.0]},
            u'_ID_Medical_frt': {u'2019': [0.06]},
            u'_II_brk4_joint': {u'2017': [500.0]},
            u'_ID_BenefitSurtax_Switch_medical': {u'2017': [True]}
        }
    }
    json_reform = json.dumps(reform)
    params = Calculator.read_json_param_objects(json_reform, None)
    assert isinstance(params, dict)
    pol = Policy()
    pol.ignore_reform_errors()
    pol.implement_reform(params['policy'],
                         print_warnings=False, raise_errors=False)
    assert len(pol.parameter_errors) > 0
    assert len(pol.parameter_warnings) > 0