def test_combine_current_pass(self): """ Test combine_measures with only future""" hazard = Hazard('TC') hazard.read_mat(HAZ_TEST_MAT) entity = Entity() entity.read_excel(ENT_DEMO_TODAY) entity.check() entity.exposures.ref_year = 2018 cost_ben = CostBenefit() cost_ben.calc(hazard, entity, future_year=2040, risk_func=risk_aai_agg, imp_time_depen=None, save_imp=True) new_name = 'combine' new_color = np.array([0.1, 0.1, 0.1]) new_cb = cost_ben.combine_measures(['Mangroves', 'Seawall'], new_name, new_color, entity.disc_rates, imp_time_depen=None, risk_func=risk_aai_agg) self.assertTrue(np.allclose(new_cb.color_rgb[new_name], new_color)) self.assertEqual(len(new_cb.imp_meas_present), 0) new_imp = cost_ben.imp_meas_future['no measure']['impact'].at_event - \ cost_ben.imp_meas_future['Mangroves']['impact'].at_event new_imp += cost_ben.imp_meas_future['no measure']['impact'].at_event - \ cost_ben.imp_meas_future['Seawall']['impact'].at_event new_imp = np.maximum(cost_ben.imp_meas_future['no measure']['impact'].at_event - new_imp, 0) self.assertTrue(np.allclose(new_cb.imp_meas_future[new_name]['impact'].at_event, new_imp)) self.assertAlmostEqual(new_cb.imp_meas_future[new_name]['risk'], np.sum(new_imp*cost_ben.imp_meas_future['no measure']['impact'].frequency), 5) self.assertAlmostEqual(new_cb.imp_meas_future[new_name]['cost'][0], cost_ben.imp_meas_future['Mangroves']['cost'][0]+cost_ben.imp_meas_future['Seawall']['cost'][0]) self.assertAlmostEqual(new_cb.imp_meas_future[new_name]['cost'][1], 1) self.assertTrue(np.allclose(new_cb.imp_meas_future[new_name]['efc'].impact, new_cb.imp_meas_future[new_name]['impact'].calc_freq_curve().impact)) self.assertAlmostEqual(new_cb.imp_meas_future[new_name]['risk_transf'], 0) self.assertAlmostEqual(new_cb.benefit[new_name], 51781337529.07264) self.assertAlmostEqual(new_cb.cost_ben_ratio[new_name], 0.19679962474434248)
def test_apply_transf_future_pass(self): """ Test apply_risk_transfer with present and future """ hazard = Hazard('TC') hazard.read_mat(HAZ_TEST_MAT) entity = Entity() entity.read_excel(ENT_DEMO_TODAY) entity.check() entity.exposures.ref_year = 2018 fut_ent = copy.deepcopy(entity) fut_ent.exposures.ref_year = 2040 cost_ben = CostBenefit() cost_ben.calc(hazard, entity, ent_future=fut_ent, risk_func=risk_aai_agg, imp_time_depen=None, save_imp=True) new_name = 'combine' new_color = np.array([0.1, 0.1, 0.1]) risk_transf=(1.0e7, 15.0e11, 1) new_cb = cost_ben.combine_measures(['Mangroves', 'Seawall'], new_name, new_color, entity.disc_rates, imp_time_depen=None, risk_func=risk_aai_agg) new_cb.apply_risk_transfer(new_name, risk_transf[0], risk_transf[1], entity.disc_rates, cost_fix=0, cost_factor=risk_transf[2], imp_time_depen=1, risk_func=risk_aai_agg) tr_name = 'risk transfer (' + new_name + ')' new_imp = cost_ben.imp_meas_future['no measure']['impact'].at_event - \ cost_ben.imp_meas_future['Mangroves']['impact'].at_event new_imp += cost_ben.imp_meas_future['no measure']['impact'].at_event - \ cost_ben.imp_meas_future['Seawall']['impact'].at_event new_imp = np.maximum(cost_ben.imp_meas_future['no measure']['impact'].at_event - new_imp, 0) imp_layer = np.minimum(np.maximum(new_imp - risk_transf[0], 0), risk_transf[1]) risk_transfer = np.sum(imp_layer * cost_ben.imp_meas_future['no measure']['impact'].frequency) new_imp = np.maximum(new_imp - imp_layer, 0) self.assertTrue(np.allclose(new_cb.color_rgb[new_name], new_color)) self.assertEqual(len(new_cb.imp_meas_present), 3) self.assertTrue(np.allclose(new_cb.imp_meas_future[tr_name]['impact'].at_event, new_imp)) self.assertTrue(np.allclose(new_cb.imp_meas_present[tr_name]['impact'].at_event, new_imp)) self.assertAlmostEqual(new_cb.imp_meas_future[tr_name]['risk'], np.sum(new_imp*cost_ben.imp_meas_future['no measure']['impact'].frequency), 5) self.assertAlmostEqual(new_cb.imp_meas_present[tr_name]['risk'], np.sum(new_imp*cost_ben.imp_meas_future['no measure']['impact'].frequency), 5) self.assertAlmostEqual(new_cb.cost_ben_ratio[tr_name]*new_cb.benefit[tr_name], 69715165679.7042) self.assertTrue(np.allclose(new_cb.imp_meas_future[tr_name]['efc'].impact, new_cb.imp_meas_future[tr_name]['impact'].calc_freq_curve().impact)) self.assertAlmostEqual(new_cb.imp_meas_future[tr_name]['risk_transf'], risk_transfer) self.assertAlmostEqual(new_cb.benefit[tr_name], 69715165679.7042, 4) # benefit = impact layer self.assertAlmostEqual(new_cb.cost_ben_ratio[tr_name], 1)