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())
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_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
    '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)

# save dataframes to disk as csv files in this directory
baseln_industry_df.to_csv('baseline_byindustry.csv', float_format='%.5f')
reform_industry_df.to_csv('reform_byindustry.csv', float_format='%.5f')
baseln_assets_df.to_csv('baseline_byasset.csv', float_format='%.5f')
reform_assets_df.to_csv('reform_byasset.csv', float_format='%.5f')
diff_industry_df.to_csv('changed_byindustry.csv', float_format='%.5f')
diff_assets_df.to_csv('changed_byasset.csv', float_format='%.5f')

# create and show in browser a range plot
def test_example_output():
    """
    Test that can produce expected output from code in ../../example.py script
    """
    # execute code as found in ../../example.py script
    cyr = 2019
    # ... specify baseline and reform Calculator objects
    assets = Assets()
    dp = DepreciationParams()
    baseline_parameters = Specification(year=cyr)
    calc1 = Calculator(baseline_parameters, dp, assets)
    reform_parameters = Specification(year=cyr)
    business_tax_adjustments = {
        '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
    }
    reform_parameters.update_specification(business_tax_adjustments)
    calc2 = Calculator(reform_parameters, dp, assets)
    # ... calculation by asset and by industry
    baseline_assets_df = calc1.calc_by_asset()
    reform_assets_df = calc2.calc_by_asset()
    baseline_industry_df = calc1.calc_by_industry()
    reform_industry_df = calc2.calc_by_industry()
    diff_assets_df = ccc.utils.diff_two_tables(reform_assets_df,
                                               baseline_assets_df)
    diff_industry_df = ccc.utils.diff_two_tables(reform_industry_df,
                                                 baseline_industry_df)
    # ... save calculated results as csv files in ccc/test directory
    baseline_industry_df.to_csv(os.path.join(TDIR, 'baseline_byindustry.csv'),
                                float_format='%.5f')
    reform_industry_df.to_csv(os.path.join(TDIR, 'reform_byindustry.csv'),
                              float_format='%.5f')
    baseline_assets_df.to_csv(os.path.join(TDIR, 'baseline_byasset.csv'),
                              float_format='%.5f')
    reform_assets_df.to_csv(os.path.join(TDIR, 'reform_byasset.csv'),
                            float_format='%.5f')
    diff_industry_df.to_csv(os.path.join(TDIR, 'changed_byindustry.csv'),
                            float_format='%.5f')
    diff_assets_df.to_csv(os.path.join(TDIR, 'changed_byasset.csv'),
                          float_format='%.5f')
    # compare actual calculated results to expected results
    failmsg = ''
    expect_output_dir = os.path.join(TDIR, '..', '..', 'example_output')
    for fname in [
            'baseline_byasset', 'baseline_byindustry', 'reform_byasset',
            'reform_byindustry', 'changed_byasset', 'changed_byindustry'
    ]:
        actual_path = os.path.join(TDIR, fname + '.csv')
        actual_df = pd.read_csv(actual_path)
        expect_path = os.path.join(expect_output_dir, fname + '_expected.csv')
        expect_df = pd.read_csv(expect_path)
        try:
            assert_frame_equal(actual_df, expect_df)
            # cleanup actual results if it has same  contents as expected file
            os.remove(actual_path)
        except AssertionError:
            failmsg += 'ACTUAL-vs-EXPECT DIFFERENCES FOR {}\n'.format(fname)
    if failmsg:
        raise AssertionError('\n' + failmsg)
Esempio n. 6
0
calc1 = Calculator(baseline_parameters, assets)
# Reform
reform_parameters = Specifications(year=2018, call_tc=True,
                                   iit_reform=iit_reform)
business_tax_adjustments = {
    '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}
reform_parameters.update_specifications(business_tax_adjustments)
calc2 = Calculator(reform_parameters, assets)

# Do calculations by asset
base_assets_df = calc1.calc_by_asset()
reform_assets_df = calc2.calc_by_asset()
# Do Calculations by Industry
base_industry_df = calc1.calc_by_industry()
reform_industry_df = calc2.calc_by_industry()

# Generate dataframes with differences
diff_assets_df = ccc.utils.diff_two_tables(
    reform_assets_df, base_assets_df)
diff_industry_df = ccc.utils.diff_two_tables(
    reform_industry_df, base_industry_df)

# Save dataframes to disk as csv files
base_industry_df.to_csv('baseline_byindustry.csv', encoding='utf-8')
reform_industry_df.to_csv('reform_byindustry.csv', encoding='utf-8')
base_assets_df.to_csv('baseline_byasset.csv', encoding='utf-8')
reform_assets_df.to_csv('reform_byasset.csv', encoding='utf-8')
diff_industry_df.to_csv('changed_byindustry.csv', encoding='utf-8')
diff_assets_df.to_csv('changed_byasset.csv', encoding='utf-8')
Esempio n. 7
0
import subprocess
from pandas.testing import assert_frame_equal
from ccc.parameters import Specifications
from ccc.calculator import Calculator
from ccc.data import Assets

CUR_PATH = os.path.abspath(os.path.dirname(__file__))

# Load input values
p = Specifications()
assets = Assets()
p = Specifications()
calc1 = Calculator(p, assets)
# Compute results
test_by_asset = calc1.calc_by_asset()
test_by_industry = calc1.calc_by_industry()
# Load expected results
result_by_asset = pd.read_json(os.path.join(
    CUR_PATH, 'run_ccc_asset_output.json'))
result_by_industry = pd.read_json(os.path.join(
    CUR_PATH, 'run_ccc_industry_output.json'))


@pytest.mark.parametrize('test_df,expected_df',
                         [(test_by_asset, result_by_asset),
                          (test_by_industry, result_by_industry)],
                         ids=['by assset', 'by industry'])
def test_run_ccc(test_df, expected_df):
    # Test the run_ccc.run_ccc() function by reading in inputs and
    # confirming that output variables have the same values.
    test_df.sort_index(inplace=True)
Esempio n. 8
0
import numbers
import subprocess
from pandas.testing import assert_frame_equal
from ccc.parameters import Specifications
from ccc.calculator import Calculator
from ccc.data import Assets

CUR_PATH = os.path.abspath(os.path.dirname(__file__))

# Load input values
p = Specifications()
assets = Assets()
calc1 = Calculator(p, assets)
# Compute results
test_by_asset = calc1.calc_by_asset()
test_by_industry = calc1.calc_by_industry()
# Load expected results
result_by_asset = pd.read_json(
    os.path.join(CUR_PATH, 'run_ccc_asset_output.json'))
result_by_industry = pd.read_json(
    os.path.join(CUR_PATH, 'run_ccc_industry_output.json'))


@pytest.mark.parametrize('test_df,expected_df',
                         [(test_by_asset, result_by_asset),
                          (test_by_industry, result_by_industry)],
                         ids=['by assset', 'by industry'])
def test_run_ccc(test_df, expected_df):
    # Test the run_ccc.run_ccc() function by reading in inputs and
    # confirming that output variables have the same values.
    test_df.sort_index(inplace=True)