Esempio n. 1
0
    def test_npv_unaverted_pres_pass(self):
        """Test _npv_unaverted_impact"""
        cb = CostBenefit()
        cb.present_year = 2018
        cb.future_year = 2030
        risk_future = 1000
        risk_present = 500
        disc_rates = DiscRates()
        disc_rates.years = np.arange(cb.present_year, cb.future_year + 1)
        disc_rates.rates = np.ones(disc_rates.years.size) * 0.025
        time_dep = np.linspace(0, 1, disc_rates.years.size)
        res = cb._npv_unaverted_impact(risk_future, disc_rates, time_dep,
                                       risk_present)

        tot_climate_risk = risk_present + (risk_future -
                                           risk_present) * time_dep
        self.assertEqual(
            res,
            disc_rates.net_present_value(cb.present_year, cb.future_year,
                                         tot_climate_risk))
Esempio n. 2
0
    def test_calc_no_change_pass(self):
        """Test calc without future change"""
        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)

        self.assertEqual(cost_ben.imp_meas_present, dict())
        self.assertEqual(len(cost_ben.imp_meas_future), 5)
        self.assertEqual(cost_ben.present_year, 2018)
        self.assertEqual(cost_ben.future_year, 2040)

        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Mangroves'],
                               0.04230714690616641)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Beach nourishment'],
                               0.06998836431681373)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Seawall'],
                               0.2679741183248266)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Building code'],
                               0.30286828677985717)

        self.assertAlmostEqual(cost_ben.benefit['Mangroves'],
                               3.100583368954022e+10,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Beach nourishment'],
                               2.468981832719974e+10,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Seawall'],
                               3.3132973770502796e+10,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Building code'],
                               3.0376240767284798e+10,
                               places=3)

        self.assertAlmostEqual(cost_ben.tot_climate_risk,
                               1.2150496306913972e+11,
                               places=3)
Esempio n. 3
0
    def test_remove_measure(self):
        """Test remove_measure method"""
        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)

        to_remove = 'Mangroves'
        self.assertTrue(to_remove in cost_ben.benefit.keys())
        cost_ben.remove_measure(to_remove)
        self.assertTrue(to_remove not in cost_ben.color_rgb.keys())
        self.assertTrue(to_remove not in cost_ben.benefit.keys())
        self.assertTrue(to_remove not in cost_ben.cost_ben_ratio.keys())
        self.assertTrue(to_remove not in cost_ben.imp_meas_future.keys())
        self.assertTrue(to_remove not in cost_ben.imp_meas_present.keys())
        self.assertEqual(len(cost_ben.imp_meas_present), 0)
        self.assertEqual(len(cost_ben.imp_meas_future), 4)
        self.assertEqual(len(cost_ben.color_rgb), 4)
        self.assertEqual(len(cost_ben.cost_ben_ratio), 3)
        self.assertEqual(len(cost_ben.benefit), 3)
Esempio n. 4
0
    def _map_costben_calc(self, param_sample, **kwargs):
        """
        Map to compute cost benefit for all parameter samples in parallel

        Parameters
        ----------
        param_sample : pd.DataFrame.iterrows()
            Generator of the parameter samples

        Returns
        -------
         : list
            icost benefit metrics list for all samples containing
            imp_meas_present, imp_meas_future, tot_climate_risk,
            benefit, cost_ben_ratio

        """

        # [1] only the rows of the dataframe passed by pd.DataFrame.iterrows()
        haz_samples = param_sample[1][self.unc_vars['haz'].labels].to_dict()
        ent_samples = param_sample[1][self.unc_vars['ent'].labels].to_dict()
        haz_fut_samples = param_sample[1][self.unc_vars['haz_fut'].labels].to_dict()
        ent_fut_samples = param_sample[1][self.unc_vars['ent_fut'].labels].to_dict()

        haz = self.unc_vars['haz'].uncvar_func(**haz_samples)
        ent = self.unc_vars['ent'].uncvar_func(**ent_samples)
        haz_fut = self.unc_vars['haz_fut'].uncvar_func(**haz_fut_samples)
        ent_fut = self.unc_vars['ent_fut'].uncvar_func(**ent_fut_samples)

        cb = CostBenefit()
        cb.calc(hazard=haz, entity=ent, haz_future=haz_fut, ent_future=ent_fut,
                save_imp=False, **kwargs)

        # Extract from climada.impact the chosen metrics
        return  [cb.imp_meas_present,
                 cb.imp_meas_future,
                 cb.tot_climate_risk,
                 cb.benefit,
                 cb.cost_ben_ratio
                 ]
    def test_calc_cb_no_change_pass(self):
        """Test _calc_cost_benefit without present value against reference value"""
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_TEST_MAT)
        entity = Entity()
        entity.read_mat(ENT_TEST_MAT)
        entity.measures._data['TC'] = entity.measures._data.pop('XX')
        for meas in entity.measures.get_measure('TC'):
            meas.haz_type = 'TC'
        entity.check()

        cost_ben = CostBenefit()
        cost_ben._calc_impact_measures(hazard,
                                       entity.exposures,
                                       entity.measures,
                                       entity.impact_funcs,
                                       when='future',
                                       risk_func=risk_aai_agg,
                                       save_imp=True)

        cost_ben.present_year = 2018
        cost_ben.future_year = 2040
        cost_ben._calc_cost_benefit(entity.disc_rates)

        self.assertEqual(cost_ben.imp_meas_present, dict())
        self.assertEqual(len(cost_ben.imp_meas_future), 5)
        self.assertEqual(cost_ben.present_year, 2018)
        self.assertEqual(cost_ben.future_year, 2040)

        self.assertEqual(cost_ben.cost_ben_ratio['Mangroves'],
                         0.04230714690616641)
        self.assertEqual(cost_ben.cost_ben_ratio['Beach nourishment'],
                         0.06998836431681373)
        self.assertEqual(cost_ben.cost_ben_ratio['Seawall'],
                         0.2679741183248266)
        self.assertEqual(cost_ben.cost_ben_ratio['Building code'],
                         0.30286828677985717)

        self.assertEqual(cost_ben.benefit['Mangroves'], 3.100583368954022e+10)
        self.assertEqual(cost_ben.benefit['Beach nourishment'],
                         2.468981832719974e+10)
        self.assertEqual(cost_ben.benefit['Seawall'], 3.3132973770502796e+10)
        self.assertEqual(cost_ben.benefit['Building code'],
                         3.0376240767284798e+10)

        self.assertEqual(cost_ben.tot_climate_risk, 1.2150496306913972e+11)
    def test_cb_one_meas_fut_pass(self):
        """ Test _cost_ben_one with same future """
        meas_name = 'Mangroves'
        meas_val = dict()
        meas_val['cost'] = (1.3117683608515418e+09, 1)
        meas_val['risk'] = 4.850407096284983e+09
        meas_val['efc'] = None
        meas_val['risk_transf'] = 0

        cb = CostBenefit()
        cb.present_year = 2018
        cb.future_year = 2040
        cb.imp_meas_future['no measure'] = dict()
        cb.imp_meas_future['no measure']['risk'] = 6.51220115756442e+09

        disc_rates = DiscRates()
        disc_rates.years = np.arange(2000, 2051)
        disc_rates.rates = np.ones(disc_rates.years.size)*0.02

        time_dep = cb._time_dependency_array()

        cb._cost_ben_one(meas_name, meas_val, disc_rates, time_dep)
        self.assertAlmostEqual(cb.benefit[meas_name], 3.100583368954022e+10)
        self.assertAlmostEqual(cb.cost_ben_ratio[meas_name], 0.04230714690616641)
    def test_time_array_pres_pass(self):
        """ Test _time_dependency_array """
        cb = CostBenefit()
        cb.present_year = 2018
        cb.future_year = 2030
        imp_time_depen = 1.0
        time_arr = cb._time_dependency_array(imp_time_depen)

        n_years = cb.future_year - cb.present_year + 1
        self.assertEqual(time_arr.size, n_years)
        self.assertTrue(np.allclose(time_arr[:-1], np.arange(0, 1, 1/(n_years-1))))
        self.assertEqual(time_arr[-1], 1)

        imp_time_depen = 0.5
        time_arr = cb._time_dependency_array(imp_time_depen)

        n_years = cb.future_year - cb.present_year + 1
        self.assertEqual(time_arr.size, n_years)
        self.assertTrue(np.allclose(time_arr, np.arange(n_years)**imp_time_depen / \
                (n_years-1)**imp_time_depen))
Esempio n. 8
0
    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,
                               places=3)
        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)
        # benefit = impact layer
        self.assertAlmostEqual(new_cb.benefit[tr_name], 69715165679.7042, 4)
        self.assertAlmostEqual(new_cb.cost_ben_ratio[tr_name], 1)
Esempio n. 9
0
    def test_combine_fut_pass(self):
        """Test combine_measures 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
        fut_haz = copy.deepcopy(hazard)

        cost_ben = CostBenefit()
        cost_ben.calc(hazard,
                      entity,
                      fut_haz,
                      fut_ent,
                      future_year=None,
                      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))

        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_present[new_name]['impact'].at_event,
                        new_imp))
        self.assertAlmostEqual(
            new_cb.imp_meas_present[new_name]['risk'],
            np.sum(
                new_imp *
                cost_ben.imp_meas_present['no measure']['impact'].frequency),
            5)
        self.assertAlmostEqual(
            new_cb.imp_meas_present[new_name]['cost'][0],
            cost_ben.imp_meas_present['Mangroves']['cost'][0] +
            cost_ben.imp_meas_present['Seawall']['cost'][0])
        self.assertAlmostEqual(new_cb.imp_meas_present[new_name]['cost'][1], 1)
        self.assertTrue(
            np.allclose(
                new_cb.imp_meas_present[new_name]['efc'].impact,
                new_cb.imp_meas_present[new_name]
                ['impact'].calc_freq_curve().impact))
        self.assertAlmostEqual(
            new_cb.imp_meas_present[new_name]['risk_transf'], 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,
                               places=3)
        self.assertAlmostEqual(new_cb.cost_ben_ratio[new_name],
                               0.19679962474434248)
Esempio n. 10
0
    def test_calc_impact_measures_pass(self):
        """Test _calc_impact_measures against reference value"""
        self.assertTrue(HAZ_TEST_MAT.is_file(),
                        "{} is not a file".format(HAZ_TEST_MAT))
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_TEST_MAT)

        self.assertTrue(ENT_TEST_MAT.is_file(),
                        "{} is not a file".format(ENT_TEST_MAT))
        entity = Entity()
        entity.read_mat(ENT_TEST_MAT)
        entity.check()
        entity.measures._data['TC'] = entity.measures._data.pop('XX')
        for meas in entity.measures.get_measure('TC'):
            meas.haz_type = 'TC'
        entity.check()

        cost_ben = CostBenefit()
        cost_ben._calc_impact_measures(hazard,
                                       entity.exposures,
                                       entity.measures,
                                       entity.impact_funcs,
                                       when='future',
                                       risk_func=risk_aai_agg,
                                       save_imp=True)

        self.assertEqual(cost_ben.imp_meas_present, dict())
        self.assertEqual(cost_ben.cost_ben_ratio, dict())
        self.assertEqual(cost_ben.benefit, dict())
        self.assertEqual(cost_ben.tot_climate_risk, 0.0)
        self.assertEqual(cost_ben.present_year, 2016)
        self.assertEqual(cost_ben.future_year, 2030)

        self.assertEqual(cost_ben.imp_meas_future['no measure']['cost'],
                         (0, 0))
        self.assertAlmostEqual(cost_ben.imp_meas_future['no measure']['risk'],
                               6.51220115756442e+09,
                               places=3)
        new_efc = cost_ben.imp_meas_future['no measure'][
            'impact'].calc_freq_curve()
        self.assertTrue(
            np.allclose(
                new_efc.return_per,
                cost_ben.imp_meas_future['no measure']['efc'].return_per))
        self.assertTrue(
            np.allclose(new_efc.impact,
                        cost_ben.imp_meas_future['no measure']['efc'].impact))
        self.assertEqual(
            cost_ben.imp_meas_future['no measure']
            ['impact'].at_event.nonzero()[0].size, 841)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['no measure']['impact'].at_event[14082],
            8.801682862431524e+06,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['no measure']['impact'].tot_value,
            6.570532945599105e+11,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['no measure']['impact'].aai_agg,
            6.51220115756442e+09,
            places=3)

        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Mangroves']['cost'][0],
            1.3117683608515418e+09,
            places=3)
        self.assertEqual(cost_ben.imp_meas_future['Mangroves']['cost'][1], 1)
        self.assertAlmostEqual(cost_ben.imp_meas_future['Mangroves']['risk'],
                               4.850407096284983e+09,
                               places=3)
        new_efc = cost_ben.imp_meas_future['Mangroves'][
            'impact'].calc_freq_curve()
        self.assertTrue(
            np.allclose(
                new_efc.return_per,
                cost_ben.imp_meas_future['Mangroves']['efc'].return_per))
        self.assertTrue(
            np.allclose(new_efc.impact,
                        cost_ben.imp_meas_future['Mangroves']['efc'].impact))
        self.assertEqual(
            cost_ben.imp_meas_future['Mangroves']['impact'].at_event.nonzero()
            [0].size, 665)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Mangroves']['impact'].at_event[13901],
            1.29576562770977e+09,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Mangroves']['impact'].tot_value,
            6.570532945599105e+11,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Mangroves']['impact'].aai_agg,
            4.850407096284983e+09,
            places=3)

        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['cost'][0],
            1.728000000000000e+09,
            places=3)
        self.assertEqual(
            cost_ben.imp_meas_future['Beach nourishment']['cost'][1], 1)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['risk'],
            5.188921355413834e+09,
            places=3)
        new_efc = cost_ben.imp_meas_future['Beach nourishment'][
            'impact'].calc_freq_curve()
        self.assertTrue(
            np.allclose(
                new_efc.return_per,
                cost_ben.imp_meas_future['Beach nourishment']
                ['efc'].return_per))
        self.assertTrue(
            np.allclose(
                new_efc.impact,
                cost_ben.imp_meas_future['Beach nourishment']['efc'].impact))
        self.assertEqual(
            cost_ben.imp_meas_future['Beach nourishment']
            ['impact'].at_event.nonzero()[0].size, 702)
        self.assertEqual(
            cost_ben.imp_meas_future['Beach nourishment']
            ['impact'].at_event[1110], 0.0)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['impact'].eai_exp[5],
            1.1133679079730146e+08,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['impact'].tot_value,
            6.570532945599105e+11,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['impact'].aai_agg,
            5.188921355413834e+09,
            places=3)

        self.assertAlmostEqual(cost_ben.imp_meas_future['Seawall']['cost'][0],
                               8.878779433630093e+09,
                               places=3)
        self.assertEqual(cost_ben.imp_meas_future['Seawall']['cost'][1], 1)
        self.assertAlmostEqual(cost_ben.imp_meas_future['Seawall']['risk'],
                               4.736400526119911e+09,
                               places=3)
        new_efc = cost_ben.imp_meas_future['Seawall'][
            'impact'].calc_freq_curve()
        self.assertTrue(
            np.allclose(new_efc.return_per,
                        cost_ben.imp_meas_future['Seawall']['efc'].return_per))
        self.assertTrue(
            np.allclose(new_efc.impact,
                        cost_ben.imp_meas_future['Seawall']['efc'].impact))
        self.assertEqual(
            cost_ben.imp_meas_future['Seawall']['impact'].at_event.nonzero()
            [0].size, 73)
        self.assertEqual(
            cost_ben.imp_meas_future['Seawall']['impact'].at_event[1229], 0.0)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Seawall']['impact'].tot_value,
            6.570532945599105e+11,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Seawall']['impact'].aai_agg,
            4.736400526119911e+09,
            places=3)

        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['cost'][0],
            9.200000000000000e+09,
            places=3)
        self.assertEqual(cost_ben.imp_meas_future['Building code']['cost'][1],
                         1)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['risk'],
            4.884150868173321e+09,
            places=3)
        new_efc = cost_ben.imp_meas_future['Building code'][
            'impact'].calc_freq_curve()
        self.assertTrue(
            np.allclose(
                new_efc.return_per,
                cost_ben.imp_meas_future['Building code']['efc'].return_per))
        self.assertTrue(
            np.allclose(
                new_efc.impact,
                cost_ben.imp_meas_future['Building code']['efc'].impact))
        self.assertEqual(
            cost_ben.imp_meas_future['Building code']
            ['impact'].at_event.nonzero()[0].size, 841)
        self.assertEqual(
            cost_ben.imp_meas_future['Building code']['impact'].at_event[122],
            0.0)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['impact'].eai_exp[11],
            7.757060129393841e+07,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['impact'].tot_value,
            6.570532945599105e+11,
            places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['impact'].aai_agg,
            4.884150868173321e+09,
            places=3)
Esempio n. 11
0
    def test_calc_cb_change_pass(self):
        """Test _calc_cost_benefit with present value against reference value"""
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_TEST_MAT)
        entity = Entity()
        entity.read_mat(ENT_TEST_MAT)
        entity.measures._data['TC'] = entity.measures._data.pop('XX')
        for meas in entity.measures.get_measure('TC'):
            meas.haz_type = 'TC'
        entity.check()

        cost_ben = CostBenefit()
        cost_ben._calc_impact_measures(hazard,
                                       entity.exposures,
                                       entity.measures,
                                       entity.impact_funcs,
                                       when='present',
                                       risk_func=risk_aai_agg,
                                       save_imp=False)

        ent_future = Entity()
        ent_future.read_excel(ENT_DEMO_FUTURE)
        ent_future.check()

        haz_future = copy.deepcopy(hazard)
        haz_future.intensity.data += 25

        cost_ben._calc_impact_measures(haz_future,
                                       ent_future.exposures,
                                       ent_future.measures,
                                       ent_future.impact_funcs,
                                       when='future',
                                       risk_func=risk_aai_agg,
                                       save_imp=False)

        cost_ben.present_year = 2018
        cost_ben.future_year = 2040
        cost_ben._calc_cost_benefit(entity.disc_rates, imp_time_depen=1)

        self.assertEqual(cost_ben.present_year, 2018)
        self.assertEqual(cost_ben.future_year, 2040)
        self.assertAlmostEqual(cost_ben.tot_climate_risk,
                               5.768659152882021e+11,
                               places=3)

        self.assertAlmostEqual(cost_ben.imp_meas_present['no measure']['risk'],
                               6.51220115756442e+09,
                               places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_present['Mangroves']['risk'],
                               4.850407096284983e+09,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_present['Beach nourishment']['risk'],
            5.188921355413834e+09,
            places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_present['Seawall']['risk'],
                               4.736400526119911e+09,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_present['Building code']['risk'],
            4.884150868173321e+09,
            places=3)

        self.assertAlmostEqual(cost_ben.imp_meas_future['no measure']['risk'],
                               5.9506659786664024e+10,
                               places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_future['Mangroves']['risk'],
                               4.826231151473135e+10,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['risk'],
            5.0647250923231674e+10,
            places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_future['Seawall']['risk'],
                               21089567135.7345,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['risk'],
            4.462999483999791e+10,
            places=3)

        self.assertAlmostEqual(cost_ben.benefit['Mangroves'],
                               113345027690.81276,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Beach nourishment'],
                               89444869971.53653,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Seawall'],
                               347977469896.1333,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Building code'],
                               144216478822.05154,
                               places=3)

        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Mangroves'],
                               0.011573232523528404)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Beach nourishment'],
                               0.01931916274851638)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Seawall'],
                               0.025515385913577368)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Building code'],
                               0.06379298728650741)

        self.assertAlmostEqual(cost_ben.tot_climate_risk,
                               576865915288.2021,
                               places=3)
Esempio n. 12
0
    def test_cb_one_meas_pres_pass(self):
        """Test _cost_ben_one with different future"""
        meas_name = 'Mangroves'
        meas_val = dict()
        meas_val['cost'] = (1.3117683608515418e+09, 1)
        meas_val['risk'] = 4.826231151473135e+10
        meas_val['efc'] = None
        meas_val['risk_transf'] = 0

        cb = CostBenefit()
        cb.present_year = 2018
        cb.future_year = 2040
        cb.imp_meas_present['no measure'] = dict()
        cb.imp_meas_present['no measure']['risk'] = 6.51220115756442e+09
        cb.imp_meas_present['Mangroves'] = dict()
        cb.imp_meas_present['Mangroves']['risk'] = 4.850407096284983e+09
        cb.imp_meas_present['Mangroves']['risk_transf'] = 0

        cb.imp_meas_future['no measure'] = dict()
        cb.imp_meas_future['no measure']['risk'] = 5.9506659786664024e+10

        disc_rates = DiscRates()
        disc_rates.years = np.arange(2016, 2051)
        disc_rates.rates = np.ones(disc_rates.years.size) * 0.02

        time_dep = cb._time_dependency_array(1)

        cb._cost_ben_one(meas_name, meas_val, disc_rates, time_dep)
        self.assertAlmostEqual(cb.benefit[meas_name],
                               113345027690.81276,
                               places=3)
        self.assertAlmostEqual(cb.cost_ben_ratio[meas_name],
                               0.011573232523528404)
Esempio n. 13
0
    def test_calc_change_pass(self):
        """Test calc with future change"""
        # present
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_TEST_MAT)
        entity = Entity()
        entity.read_excel(ENT_DEMO_TODAY)
        entity.exposures.gdf.rename(columns={'if_': 'if_TC'}, inplace=True)
        entity.check()
        entity.exposures.ref_year = 2018

        # future
        ent_future = Entity()
        ent_future.read_excel(ENT_DEMO_FUTURE)
        ent_future.check()
        ent_future.exposures.ref_year = 2040

        haz_future = copy.deepcopy(hazard)
        haz_future.intensity.data += 25

        cost_ben = CostBenefit()
        cost_ben.calc(hazard, entity, haz_future, ent_future)

        self.assertEqual(cost_ben.present_year, 2018)
        self.assertEqual(cost_ben.future_year, 2040)
        self.assertAlmostEqual(cost_ben.tot_climate_risk,
                               5.768659152882021e+11,
                               places=3)

        self.assertAlmostEqual(cost_ben.imp_meas_present['no measure']['risk'],
                               6.51220115756442e+09,
                               places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_present['Mangroves']['risk'],
                               4.850407096284983e+09,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_present['Beach nourishment']['risk'],
            5.188921355413834e+09,
            places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_present['Seawall']['risk'],
                               4.736400526119911e+09,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_present['Building code']['risk'],
            4.884150868173321e+09,
            places=3)

        self.assertAlmostEqual(cost_ben.imp_meas_future['no measure']['risk'],
                               5.9506659786664024e+10,
                               places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_future['Mangroves']['risk'],
                               4.826231151473135e+10,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Beach nourishment']['risk'],
            5.0647250923231674e+10,
            places=3)
        self.assertAlmostEqual(cost_ben.imp_meas_future['Seawall']['risk'],
                               21089567135.7345,
                               places=3)
        self.assertAlmostEqual(
            cost_ben.imp_meas_future['Building code']['risk'],
            4.462999483999791e+10,
            places=3)

        self.assertAlmostEqual(cost_ben.benefit['Mangroves'],
                               113345027690.81276,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Beach nourishment'],
                               89444869971.53653,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Seawall'],
                               347977469896.1333,
                               places=3)
        self.assertAlmostEqual(cost_ben.benefit['Building code'],
                               144216478822.05154,
                               places=3)

        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Mangroves'],
                               0.011573232523528404)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Beach nourishment'],
                               0.01931916274851638)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Seawall'],
                               0.025515385913577368)
        self.assertAlmostEqual(cost_ben.cost_ben_ratio['Building code'],
                               0.06379298728650741)

        self.assertAlmostEqual(cost_ben.tot_climate_risk,
                               576865915288.2021,
                               places=3)
    def test_norm_value(self):
        """ Test _norm_values """
        cb = CostBenefit()
        norm_fact, norm_name = cb._norm_values(1)
        self.assertEqual(norm_fact, 1)
        self.assertEqual(norm_name, "")

        norm_fact, norm_name = cb._norm_values(10)
        self.assertEqual(norm_fact, 1)
        self.assertEqual(norm_name, "")

        norm_fact, norm_name = cb._norm_values(100)
        self.assertEqual(norm_fact, 1)
        self.assertEqual(norm_name, "")

        norm_fact, norm_name = cb._norm_values(1001)
        self.assertEqual(norm_fact, 1000)
        self.assertEqual(norm_name, "k")

        norm_fact, norm_name = cb._norm_values(10000)
        self.assertEqual(norm_fact, 1000)
        self.assertEqual(norm_name, "k")

        norm_fact, norm_name = cb._norm_values(1.01e6)
        self.assertEqual(norm_fact, 1.0e6)
        self.assertEqual(norm_name, "m")

        norm_fact, norm_name = cb._norm_values(1.0e8)
        self.assertEqual(norm_fact, 1.0e6)
        self.assertEqual(norm_name, "m")

        norm_fact, norm_name = cb._norm_values(1.01e9)
        self.assertEqual(norm_fact, 1.0e9)
        self.assertEqual(norm_name, "bn")

        norm_fact, norm_name = cb._norm_values(1.0e10)
        self.assertEqual(norm_fact, 1.0e9)
        self.assertEqual(norm_name, "bn")

        norm_fact, norm_name = cb._norm_values(1.0e12)
        self.assertEqual(norm_fact, 1.0e9)
        self.assertEqual(norm_name, "bn")
    def test_calc_cb_change_pass(self):
        """Test _calc_cost_benefit with present value against reference value"""
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_TEST_MAT)
        entity = Entity()
        entity.read_mat(ENT_TEST_MAT)
        entity.measures._data['TC'] = entity.measures._data.pop('XX')
        for meas in entity.measures.get_measure('TC'):
            meas.haz_type = 'TC'
        entity.check()

        cost_ben = CostBenefit()
        cost_ben._calc_impact_measures(hazard,
                                       entity.exposures,
                                       entity.measures,
                                       entity.impact_funcs,
                                       when='present',
                                       risk_func=risk_aai_agg,
                                       save_imp=False)

        ent_future = Entity()
        ent_future.read_excel(ENT_DEMO_FUTURE)
        ent_future.check()

        haz_future = copy.deepcopy(hazard)
        haz_future.intensity.data += 25

        cost_ben._calc_impact_measures(haz_future,
                                       ent_future.exposures,
                                       ent_future.measures,
                                       ent_future.impact_funcs,
                                       when='future',
                                       risk_func=risk_aai_agg,
                                       save_imp=False)

        cost_ben.present_year = 2018
        cost_ben.future_year = 2040
        cost_ben._calc_cost_benefit(entity.disc_rates, imp_time_depen=1)

        self.assertEqual(cost_ben.present_year, 2018)
        self.assertEqual(cost_ben.future_year, 2040)
        self.assertEqual(cost_ben.tot_climate_risk, 5.768659152882021e+11)

        self.assertEqual(cost_ben.imp_meas_present['no measure']['risk'],
                         6.51220115756442e+09)
        self.assertEqual(cost_ben.imp_meas_present['Mangroves']['risk'],
                         4.850407096284983e+09)
        self.assertEqual(
            cost_ben.imp_meas_present['Beach nourishment']['risk'],
            5.188921355413834e+09)
        self.assertEqual(cost_ben.imp_meas_present['Seawall']['risk'],
                         4.736400526119911e+09)
        self.assertEqual(cost_ben.imp_meas_present['Building code']['risk'],
                         4.884150868173321e+09)

        self.assertEqual(cost_ben.imp_meas_future['no measure']['risk'],
                         5.9506659786664024e+10)
        self.assertEqual(cost_ben.imp_meas_future['Mangroves']['risk'],
                         4.826231151473135e+10)
        self.assertEqual(cost_ben.imp_meas_future['Beach nourishment']['risk'],
                         5.0647250923231674e+10)
        self.assertEqual(cost_ben.imp_meas_future['Seawall']['risk'],
                         21089567135.7345)
        self.assertEqual(cost_ben.imp_meas_future['Building code']['risk'],
                         4.462999483999791e+10)