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