Exemple #1
0
    def test_cutoff_hazard_pass(self):
        """Test _cutoff_hazard_damage"""
        meas = MeasureSet()
        meas.read_mat(ENT_TEST_MAT)
        act_1 = meas.get_measure(name='Seawall')[0]

        haz = Hazard('TC')
        haz.read_mat(HAZ_TEST_MAT)
        exp = Exposures()
        exp.read_mat(ENT_TEST_MAT)
        exp.gdf.rename(columns={'if_': 'if_TC'}, inplace=True)
        exp.check()

        imp_set = ImpactFuncSet()
        imp_set.read_mat(ENT_TEST_MAT)

        new_haz = act_1._cutoff_hazard_damage(exp, imp_set, haz)

        self.assertFalse(id(new_haz) == id(haz))

        pos_no_null = np.array([6249, 7697, 9134, 13500, 13199, 5944, 9052, 9050, 2429,
                                5139, 9053, 7102, 4096, 1070, 5948, 1076, 5947, 7432,
                                5949, 11694, 5484, 6246, 12147, 778, 3326, 7199, 12498,
                               11698, 6245, 5327, 4819, 8677, 5970, 7101, 779, 3894,
                                9051, 5976, 3329, 5978, 4282, 11697, 7193, 5351, 7310,
                                7478, 5489, 5526, 7194, 4283, 7191, 5328, 4812, 5528,
                                5527, 5488, 7475, 5529, 776, 5758, 4811, 6223, 7479,
                                7470, 5480, 5325, 7477, 7318, 7317, 11696, 7313, 13165,
                                6221])
        all_haz = np.arange(haz.intensity.shape[0])
        all_haz[pos_no_null] = -1
        pos_null = np.argwhere(all_haz > 0).reshape(-1)
        for i_ev in pos_null:
            self.assertEqual(new_haz.intensity[i_ev, :].max(), 0)
Exemple #2
0
    def test_change_exposures_if_pass(self):
        """Test _change_exposures_if"""
        meas = Measure()
        meas.imp_fun_map = '1to3'
        meas.haz_type = 'TC'

        imp_set = ImpactFuncSet()
        imp_tc = ImpactFunc()
        imp_tc.haz_type = 'TC'
        imp_tc.id = 1
        imp_tc.intensity = np.arange(10, 100, 10)
        imp_tc.mdd = np.arange(10, 100, 10)
        imp_tc.paa = np.arange(10, 100, 10)
        imp_set.append(imp_tc)

        imp_tc = ImpactFunc()
        imp_tc.haz_type = 'TC'
        imp_tc.id = 3
        imp_tc.intensity = np.arange(10, 100, 10)
        imp_tc.mdd = np.arange(10, 100, 10) * 2
        imp_tc.paa = np.arange(10, 100, 10) * 2

        exp = Exposures()
        exp.read_hdf5(EXP_DEMO_H5)
        new_exp = meas._change_exposures_if(exp)

        self.assertEqual(new_exp.ref_year, exp.ref_year)
        self.assertEqual(new_exp.value_unit, exp.value_unit)
        self.assertEqual(new_exp.tag.file_name, exp.tag.file_name)
        self.assertEqual(new_exp.tag.description, exp.tag.description)
        self.assertTrue(np.array_equal(new_exp.gdf.value.values, exp.gdf.value.values))
        self.assertTrue(np.array_equal(new_exp.gdf.latitude.values, exp.gdf.latitude.values))
        self.assertTrue(np.array_equal(new_exp.gdf.longitude.values, exp.gdf.longitude.values))
        self.assertTrue(np.array_equal(exp.gdf[INDICATOR_IF + 'TC'].values, np.ones(new_exp.gdf.shape[0])))
        self.assertTrue(np.array_equal(new_exp.gdf[INDICATOR_IF + 'TC'].values, np.ones(new_exp.gdf.shape[0]) * 3))
    def read_excel(self, file_name, description=''):
        """Read csv or xls or xlsx file following climada's template.

        Parameters:
            file_name (str, optional): file name(s) or folder name
                containing the files to read
            description (str or list(str), optional): one description of the
                data or a description of each data file

        Raises:
            ValueError
        """
        self.exposures = Exposures(pd.read_excel(file_name))
        self.exposures.tag = Tag()
        self.exposures.tag.file_name = file_name
        self.exposures.tag.description = description

        self.disc_rates = DiscRates()
        self.disc_rates.read_excel(file_name, description)

        self.impact_funcs = ImpactFuncSet()
        self.impact_funcs.read_excel(file_name, description)

        self.measures = MeasureSet()
        self.measures.read_excel(file_name, description)
Exemple #4
0
    def test_change_imp_func_pass(self):
        """Test _change_imp_func"""
        meas = MeasureSet()
        meas.read_mat(ENT_TEST_MAT)
        act_1 = meas.get_measure(name='Mangroves')[0]

        imp_set = ImpactFuncSet()
        imp_tc = ImpactFunc()
        imp_tc.haz_type = 'XX'
        imp_tc.id = 1
        imp_tc.intensity = np.arange(10, 100, 10)
        imp_tc.intensity[0] = 0.
        imp_tc.intensity[-1] = 100.
        imp_tc.mdd = np.array([0.0, 0.0, 0.021857142857143, 0.035887500000000,
                               0.053977415307403, 0.103534246575342, 0.180414000000000,
                               0.410796000000000, 0.410796000000000])
        imp_tc.paa = np.array([0, 0.005000000000000, 0.042000000000000, 0.160000000000000,
                               0.398500000000000, 0.657000000000000, 1.000000000000000,
                               1.000000000000000, 1.000000000000000])
        imp_set.append(imp_tc)
        new_imp = act_1._change_imp_func(imp_set).get_func('XX')[0]

        self.assertTrue(np.array_equal(new_imp.intensity, np.array([4., 24., 34., 44.,
            54., 64., 74., 84., 104.])))
        self.assertTrue(np.array_equal(new_imp.mdd, np.array([0, 0, 0.021857142857143, 0.035887500000000,
            0.053977415307403, 0.103534246575342, 0.180414000000000, 0.410796000000000, 0.410796000000000])))
        self.assertTrue(np.array_equal(new_imp.paa, np.array([0, 0.005000000000000, 0.042000000000000,
            0.160000000000000, 0.398500000000000, 0.657000000000000, 1.000000000000000,
            1.000000000000000, 1.000000000000000])))
        self.assertFalse(id(new_imp) == id(imp_tc))
 def test_get_func_wrong_error(self):
     """Test get_func method with wrong inputs."""
     imp_fun = ImpactFuncSet()
     vulner_1 = ImpactFunc()
     vulner_1.haz_type = 'WS'
     vulner_1.id = 56
     imp_fun.append(vulner_1)
     self.assertEqual([], imp_fun.get_func('TC'))
Exemple #6
0
 def test_impact_funcs_pass(self):
     """Plot diferent impact functions."""
     myfuncs = ImpactFuncSet()
     myfuncs.read_excel(ENT_DEMO_TODAY)
     myax = myfuncs.plot()
     self.assertEqual(2, len(myax))
     self.assertIn('TC 1: Tropical cyclone default', \
                   myax[0].title.get_text())
     self.assertIn('TC 3: TC Building code', myax[1].title.get_text())
Exemple #7
0
 def test_template_file_pass(self):
     """Read template excel file"""
     imp_funcs = ImpactFuncSet()
     imp_funcs.read_excel(ENT_TEMPLATE_XLS)
     # Check some results
     self.assertEqual(len(imp_funcs._data), 10)
     self.assertEqual(len(imp_funcs._data['TC'][3].paa), 9)
     self.assertEqual(len(imp_funcs._data['EQ'][1].intensity), 14)
     self.assertEqual(len(imp_funcs._data['HS'][1].mdd), 16)
    def test_append_pass(self):
        """Test append adds ImpactFunc to ImpactFuncSet correctly."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun.append(vulner_1)
        self.assertEqual(1, len(imp_fun._data))
        self.assertIn('TC', imp_fun._data.keys())
        self.assertEqual(1, len(imp_fun._data['TC']))
        self.assertIn(1, imp_fun._data['TC'].keys())

        vulner_2 = ImpactFunc()
        vulner_2.id = 3
        vulner_2.haz_type = 'TC'
        imp_fun.append(vulner_2)
        self.assertEqual(1, len(imp_fun._data))
        self.assertIn('TC', imp_fun._data.keys())
        self.assertEqual(2, len(imp_fun._data['TC']))
        self.assertIn(1, imp_fun._data['TC'].keys())
        self.assertIn(3, imp_fun._data['TC'].keys())

        vulner_3 = ImpactFunc()
        vulner_3.id = 3
        vulner_3.haz_type = 'FL'
        imp_fun.append(vulner_3)
        self.assertEqual(2, len(imp_fun._data))
        self.assertIn('TC', imp_fun._data.keys())
        self.assertIn('FL', imp_fun._data.keys())
        self.assertEqual(2, len(imp_fun._data['TC']))
        self.assertEqual(1, len(imp_fun._data['FL']))
        self.assertIn(1, imp_fun._data['TC'].keys())
        self.assertIn(3, imp_fun._data['TC'].keys())
        self.assertIn(3, imp_fun._data['FL'].keys())
    def from_excel(cls, file_name, description=''):
        """Read csv or xls or xlsx file following climada's template.

        Parameters
        ----------
        file_name : str, optional
            file name(s) or folder name
            containing the files to read
        description : str or list(str), optional
            one description of the
            data or a description of each data file

        Returns
        -------
        ent : climada.entity.Entity
            The entity from excel file
        """

        exp = Exposures(pd.read_excel(file_name))
        exp.tag = Tag()
        exp.tag.file_name = str(file_name)
        exp.tag.description = description

        dr = DiscRates.from_excel(file_name, description)
        impf_set = ImpactFuncSet.from_excel(file_name, description)
        meas_set = MeasureSet.from_excel(file_name, description)

        return cls(exposures=exp,
                   disc_rates=dr,
                   impact_func_set=impf_set,
                   measure_set=meas_set)
    def test_cutoff_hazard_region_pass(self):
        """Test _cutoff_hazard_damage in specific region"""
        meas = MeasureSet.from_mat(ENT_TEST_MAT)
        act_1 = meas.get_measure(name='Seawall')[0]
        act_1.exp_region_id = [1]

        haz = Hazard.from_mat(HAZ_TEST_MAT)
        exp = Exposures.from_mat(ENT_TEST_MAT)
        exp.gdf['region_id'] = np.zeros(exp.gdf.shape[0])
        exp.gdf.region_id.values[10:] = 1
        exp.check()

        imp_set = ImpactFuncSet.from_mat(ENT_TEST_MAT)

        new_haz = act_1._cutoff_hazard_damage(exp, imp_set, haz)

        self.assertFalse(id(new_haz) == id(haz))

        pos_no_null = np.array([
            6249, 7697, 9134, 13500, 13199, 5944, 9052, 9050, 2429, 5139, 9053,
            7102, 4096, 1070, 5948, 1076, 5947, 7432, 5949, 11694, 5484, 6246,
            12147, 778, 3326, 7199, 12498, 11698, 6245, 5327, 4819, 8677, 5970,
            7101, 779, 3894, 9051, 5976, 3329, 5978, 4282, 11697, 7193, 5351,
            7310, 7478, 5489, 5526, 7194, 4283, 7191, 5328, 4812, 5528, 5527,
            5488, 7475, 5529, 776, 5758, 4811, 6223, 7479, 7470, 5480, 5325,
            7477, 7318, 7317, 11696, 7313, 13165, 6221
        ])
        all_haz = np.arange(haz.intensity.shape[0])
        all_haz[pos_no_null] = -1
        pos_null = np.argwhere(all_haz > 0).reshape(-1)
        centr_null = np.unique(exp.gdf.centr_[exp.gdf.region_id == 0])
        for i_ev in pos_null:
            self.assertEqual(new_haz.intensity[i_ev, centr_null].max(), 0)
Exemple #11
0
 def test_remove_wrong_error(self):
     """Test error is raised when invalid inputs."""
     imp_fun = ImpactFuncSet()
     vulner_1 = ImpactFunc()
     vulner_1.id = 1
     vulner_1.haz_type = 'TC'
     imp_fun.append(vulner_1)
     with self.assertLogs('climada.entity.impact_funcs.impact_func_set', level='WARNING') as cm:
         imp_fun.remove_func('FL')
     self.assertIn('No ImpactFunc with hazard FL.', cm.output[0])
     with self.assertLogs('climada.entity.impact_funcs.impact_func_set', level='WARNING') as cm:
         imp_fun.remove_func(fun_id=3)
     self.assertIn('No ImpactFunc with id 3.', cm.output[0])
 def test_attributes_all(self):
     """All attributes are defined"""
     imp_fun = ImpactFuncSet()
     vulner_1 = ImpactFunc()
     vulner_1.haz_type = 'TC'
     vulner_1.id = '2'
     self.assertTrue(hasattr(imp_fun, 'tag'))
     self.assertTrue(hasattr(imp_fun, '_data'))
     self.assertTrue(hasattr(vulner_1, 'haz_type'))
     self.assertTrue(hasattr(vulner_1, 'name'))
     self.assertTrue(hasattr(vulner_1, 'id'))
     self.assertTrue(hasattr(vulner_1, 'intensity_unit'))
     self.assertTrue(hasattr(vulner_1, 'mdd'))
     self.assertTrue(hasattr(vulner_1, 'paa'))
    def read_mat(self, file_name, description=''):
        """Read MATLAB file of climada.

        Parameters:
            file_name (str, optional): file name(s) or folder name
                containing the files to read
            description (str or list(str), optional): one description of the
                data or a description of each data file

        Raises:
            ValueError
        """
        self.exposures = Exposures()
        self.exposures.read_mat(file_name)

        self.disc_rates = DiscRates()
        self.disc_rates.read_mat(file_name, description)

        self.impact_funcs = ImpactFuncSet()
        self.impact_funcs.read_mat(file_name, description)

        self.measures = MeasureSet()
        self.measures.read_mat(file_name, description)
Exemple #14
0
    def test_not_filter_exposures_pass(self):
        """Test _filter_exposures method with []"""
        meas = Measure()
        meas.exp_region_id = []

        exp = Exposures()
        imp_set = ImpactFuncSet()
        haz = Hazard('TC')

        new_exp = Exposures()
        new_ifs = ImpactFuncSet()
        new_haz = Hazard('TC')

        res_exp, res_ifs, res_haz = meas._filter_exposures(exp, imp_set, haz,
            new_exp, new_ifs, new_haz)

        self.assertTrue(res_exp is new_exp)
        self.assertTrue(res_ifs is new_ifs)
        self.assertTrue(res_haz is new_haz)

        self.assertTrue(res_exp is not exp)
        self.assertTrue(res_ifs is not imp_set)
        self.assertTrue(res_haz is not haz)
 def test_remove_func_pass(self):
     """Test remove_func removes ImpactFunc of ImpactFuncSet correcty."""
     imp_fun = ImpactFuncSet()
     vulner_1 = ImpactFunc()
     vulner_1.id = 1
     vulner_1.haz_type = 'TC'
     imp_fun.append(vulner_1)
     imp_fun.remove_func()
     self.assertEqual(0, len(imp_fun._data))
    def __init__(self,
                 exposures=None,
                 disc_rates=None,
                 impact_func_set=None,
                 measure_set=None):
        """
        Initialize entity

        Parameters
        ----------
        exposures : climada.entity.Exposures, optional
            Exposures of the entity. The default is None (empty Exposures()).
        disc_rates : climada.entity.DiscRates, optional
            Disc rates of the entity. The default is None (empty DiscRates()).
        impact_func_set : climada.entity.ImpactFuncSet, optional
            The impact function set. The default is None (empty ImpactFuncSet()).
        measure_set : climada.entity.Measures, optional
            The measures. The default is None (empty MeasuresSet().
        """
        self.exposures = Exposures() if exposures is None else exposures
        self.disc_rates = DiscRates() if disc_rates is None else disc_rates
        self.impact_funcs = ImpactFuncSet(
        ) if impact_func_set is None else impact_func_set
        self.measures = MeasureSet() if measure_set is None else measure_set
    def test_add_wrong_error(self):
        """Test error is raised when wrong ImpactFunc provided."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        with self.assertLogs('climada.entity.impact_funcs.impact_func_set',
                             level='WARNING') as cm:
            imp_fun.append(vulner_1)
        self.assertIn("Input ImpactFunc's hazard type not set.", cm.output[0])

        vulner_1.haz_type = 'TC'
        with self.assertLogs('climada.entity.impact_funcs.impact_func_set',
                             level='WARNING') as cm:
            imp_fun.append(vulner_1)
        self.assertIn("Input ImpactFunc's id not set.", cm.output[0])

        with self.assertRaises(ValueError) as cm:
            imp_fun.append(45)
        self.assertIn("Input value is not of type ImpactFunc.", str(cm.exception))
    def test_check_wrongMDD_fail(self):
        """Wrong MDD definition"""
        imp_fun = ImpactFuncSet()
        vulner = ImpactFunc()
        vulner.id = 1
        vulner.haz_type = 'TC'
        vulner.intensity = np.array([1, 2, 3])
        vulner.mdd = np.array([1, 2])
        vulner.paa = np.array([1, 2, 3])
        imp_fun.append(vulner)

        with self.assertRaises(ValueError) as cm:
            imp_fun.check()
        self.assertIn('Invalid ImpactFunc.mdd size: 3 != 2.', str(cm.exception))
Exemple #19
0
    def test_check_wrongMDD_fail(self):
        """Wrong MDD definition"""
        imp_fun = ImpactFuncSet()
        vulner = ImpactFunc()
        vulner.id = 1
        vulner.haz_type = 'TC'
        vulner.intensity = np.array([1, 2, 3])
        vulner.mdd = np.array([1, 2])
        vulner.paa = np.array([1, 2, 3])
        imp_fun.append(vulner)

        with self.assertLogs('climada.util.checker', level='ERROR') as cm:
            with self.assertRaises(ValueError):
                imp_fun.check()
        self.assertIn('Invalid ImpactFunc.mdd size: 3 != 2.', cm.output[0])
    def from_mat(cls, file_name, description=''):
        """Read MATLAB file of climada.

        Parameters
        ----------
        file_name : str, optional
            file name(s) or folder name
            containing the files to read
        description : str or list(str), optional
            one description of the
            data or a description of each data file

        Returns
        -------
        ent : climada.entity.Entity
            The entity from matlab file
        """
        return cls(exposures=Exposures.from_mat(file_name),
                   disc_rates=DiscRates.from_mat(file_name, description),
                   impact_func_set=ImpactFuncSet.from_mat(
                       file_name, description),
                   measure_set=MeasureSet.from_mat(file_name, description))
    def test_get_hazards_pass(self):
        """Test get_hazard_types function."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun.append(vulner_1)
        self.assertEqual(1, len(imp_fun.get_hazard_types()))
        self.assertEqual(['TC'], imp_fun.get_hazard_types())

        vulner_2 = ImpactFunc()
        vulner_2.id = 1
        vulner_2.haz_type = 'TC'
        imp_fun.append(vulner_2)
        self.assertEqual(1, len(imp_fun.get_hazard_types()))
        self.assertEqual(['TC'], imp_fun.get_hazard_types())

        vulner_3 = ImpactFunc()
        vulner_3.id = 1
        vulner_3.haz_type = 'FL'
        imp_fun.append(vulner_3)
        self.assertEqual(2, len(imp_fun.get_hazard_types()))
        self.assertIn('TC', imp_fun.get_hazard_types())
        self.assertIn('FL', imp_fun.get_hazard_types())
    def test_write_read_pass(self):
        """Write + read excel file"""

        imp_funcs = ImpactFuncSet()
        imp_funcs.tag.file_name = 'No file name'
        imp_funcs.tag.description = 'test writer'

        imp1 = ImpactFunc()
        imp1.id = 1
        imp1.name = 'code 1'
        imp1.intensity_unit = 'm/s'
        imp1.haz_type = 'TC'
        imp1.intensity = np.arange(100)
        imp1.mdd = np.arange(100) * 0.5
        imp1.paa = np.ones(100)
        imp_funcs.append(imp1)

        imp2 = ImpactFunc()
        imp2.id = 2
        imp2.name = 'code 2'
        imp2.intensity_unit = 'm/s'
        imp2.haz_type = 'TC'
        imp2.intensity = np.arange(102)
        imp2.mdd = np.arange(102) * 0.25
        imp2.paa = np.ones(102)
        imp_funcs.append(imp2)

        imp3 = ImpactFunc()
        imp3.id = 1
        imp3.name = 'code 1'
        imp3.intensity_unit = 'm'
        imp3.haz_type = 'FL'
        imp3.intensity = np.arange(86)
        imp3.mdd = np.arange(86) * 0.15
        imp3.paa = np.ones(86)
        imp_funcs.append(imp3)

        imp4 = ImpactFunc()
        imp4.id = 15
        imp4.name = 'code 15'
        imp4.intensity_unit = 'K'
        imp4.haz_type = 'DR'
        imp4.intensity = np.arange(5)
        imp4.mdd = np.arange(5)
        imp4.paa = np.ones(5)
        imp_funcs.append(imp4)

        file_name = CONFIG.impact_funcs.test_data.dir().joinpath(
            'test_write.xlsx')
        imp_funcs.write_excel(file_name)

        imp_res = ImpactFuncSet.from_excel(file_name)

        self.assertEqual(imp_res.tag.file_name, str(file_name))
        self.assertEqual(imp_res.tag.description, '')

        # first function
        for fun_haz, fun_dict in imp_res.get_func().items():
            for fun_id, fun in fun_dict.items():
                if fun_haz == 'TC' and fun_id == 1:
                    ref_fun = imp1
                elif fun_haz == 'TC' and fun_id == 2:
                    ref_fun = imp2
                elif fun_haz == 'FL' and fun_id == 1:
                    ref_fun = imp3
                elif fun_haz == 'DR' and fun_id == 15:
                    ref_fun = imp4
                else:
                    self.assertEqual(1, 0)

                self.assertEqual(ref_fun.haz_type, fun.haz_type)
                self.assertEqual(ref_fun.id, fun.id)
                self.assertEqual(ref_fun.name, fun.name)
                self.assertEqual(ref_fun.intensity_unit, fun.intensity_unit)
                self.assertTrue(np.allclose(ref_fun.intensity, fun.intensity))
                self.assertTrue(np.allclose(ref_fun.mdd, fun.mdd))
                self.assertTrue(np.allclose(ref_fun.paa, fun.paa))
    def test_demo_file_pass(self):
        """Read demo excel file"""
        # Read demo excel file

        description = 'One single file.'
        imp_funcs = ImpactFuncSet.from_excel(ENT_DEMO_TODAY, description)

        # Check results
        n_funcs = 2
        hazard = 'TC'
        first_id = 1
        second_id = 3

        self.assertEqual(len(imp_funcs._data), 1)
        self.assertEqual(len(imp_funcs._data[hazard]), n_funcs)

        # first function
        self.assertEqual(imp_funcs._data[hazard][first_id].id, 1)
        self.assertEqual(imp_funcs._data[hazard][first_id].name,
                         'Tropical cyclone default')
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity_unit,
                         'm/s')

        self.assertEqual(imp_funcs._data[hazard][first_id].intensity.shape,
                         (9, ))
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[0], 0)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[1], 20)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[2], 30)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[3], 40)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[4], 50)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[5], 60)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[6], 70)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[7], 80)
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity[8], 100)

        self.assertEqual(imp_funcs._data[hazard][first_id].mdd.shape, (9, ))
        self.assertEqual(imp_funcs._data[hazard][first_id].mdd[0], 0)
        self.assertEqual(imp_funcs._data[hazard][first_id].mdd[8], 0.41079600)

        self.assertEqual(imp_funcs._data[hazard][first_id].paa.shape, (9, ))
        self.assertEqual(imp_funcs._data[hazard][first_id].paa[0], 0)
        self.assertEqual(imp_funcs._data[hazard][first_id].paa[8], 1)

        # second function
        self.assertEqual(imp_funcs._data[hazard][second_id].id, 3)
        self.assertEqual(imp_funcs._data[hazard][second_id].name,
                         'TC Building code')
        self.assertEqual(imp_funcs._data[hazard][first_id].intensity_unit,
                         'm/s')

        self.assertEqual(imp_funcs._data[hazard][second_id].intensity.shape,
                         (9, ))
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[0], 0)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[1], 20)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[2], 30)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[3], 40)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[4], 50)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[5], 60)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[6], 70)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[7], 80)
        self.assertEqual(imp_funcs._data[hazard][second_id].intensity[8], 100)

        self.assertEqual(imp_funcs._data[hazard][second_id].mdd.shape, (9, ))
        self.assertEqual(imp_funcs._data[hazard][second_id].mdd[0], 0)
        self.assertEqual(imp_funcs._data[hazard][second_id].mdd[8], 0.4)

        self.assertEqual(imp_funcs._data[hazard][second_id].paa.shape, (9, ))
        self.assertEqual(imp_funcs._data[hazard][second_id].paa[0], 0)
        self.assertEqual(imp_funcs._data[hazard][second_id].paa[8], 1)

        # general information
        self.assertEqual(imp_funcs.tag.file_name, str(ENT_DEMO_TODAY))
        self.assertEqual(imp_funcs.tag.description, description)
    def test_extend_different_extend(self):
        """Extend ImpactFuncSet with same and new values. The vulnerabilities
        with repeated id are overwritten."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun.append(vulner_1)

        vulner_2 = ImpactFunc()
        vulner_2.id = 3
        vulner_2.haz_type = 'TC'
        imp_fun.append(vulner_2)

        vulner_3 = ImpactFunc()
        vulner_3.id = 3
        vulner_3.haz_type = 'FL'
        imp_fun.append(vulner_3)

        imp_fun_add = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun_add.append(vulner_1)

        vulner_2 = ImpactFunc()
        vulner_2.id = 1
        vulner_2.haz_type = 'WS'
        imp_fun_add.append(vulner_2)

        vulner_3 = ImpactFunc()
        vulner_3.id = 3
        vulner_3.haz_type = 'FL'
        imp_fun_add.append(vulner_3)

        imp_fun.extend(imp_fun_add)
        imp_fun.check()

        self.assertEqual(imp_fun.size(), 4)
        self.assertEqual(imp_fun.size('TC'), 2)
        self.assertEqual(imp_fun.size('FL'), 1)
        self.assertEqual(imp_fun.size('WS'), 1)
    def test_extend_equal_same(self):
        """Extend the same ImpactFuncSet. The inital ImpactFuncSet is obtained."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun.append(vulner_1)

        imp_fun_add = ImpactFuncSet()
        imp_fun_add.append(vulner_1)

        imp_fun.extend(imp_fun_add)
        imp_fun.check()

        self.assertEqual(imp_fun.size(), 1)
        self.assertEqual(imp_fun.size('TC'), 1)
    def test_extend_to_empty_same(self):
        """Extend ImpactFuncSet to empty one."""
        imp_fun = ImpactFuncSet()
        imp_fun_add = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun_add.append(vulner_1)

        vulner_2 = ImpactFunc()
        vulner_2.id = 3
        vulner_2.haz_type = 'TC'
        imp_fun_add.append(vulner_2)

        vulner_3 = ImpactFunc()
        vulner_3.id = 3
        vulner_3.haz_type = 'FL'
        imp_fun_add.append(vulner_3)

        imp_fun_add.tag.file_name = 'file1.txt'

        imp_fun.extend(imp_fun_add)
        imp_fun.check()

        self.assertEqual(imp_fun.size(), 3)
        self.assertEqual(imp_fun.size('TC'), 2)
        self.assertEqual(imp_fun.size('FL'), 1)
        self.assertEqual(imp_fun.tag.file_name, imp_fun_add.tag.file_name)
        self.assertEqual(imp_fun.tag.description, imp_fun_add.tag.description)
    def test_remove_add_pass(self):
        """Test ImpactFunc can be added after removing."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.id = 1
        vulner_1.haz_type = 'TC'
        imp_fun.append(vulner_1)
        imp_fun.remove_func()
        self.assertEqual(0, len(imp_fun.get_hazard_types()))
        self.assertEqual(0, len(imp_fun.get_ids()))

        imp_fun.append(vulner_1)
        self.assertEqual(1, len(imp_fun.get_hazard_types()))
        self.assertEqual('TC', imp_fun.get_hazard_types()[0])
        self.assertEqual(1, len(imp_fun.get_ids()))
        self.assertEqual([1], imp_fun.get_ids('TC'))
    def test_get_func_pass(self):
        """Test normal functionality of get_func method."""
        imp_fun = ImpactFuncSet()
        vulner_1 = ImpactFunc()
        vulner_1.haz_type = 'WS'
        vulner_1.id = 56
        imp_fun.append(vulner_1)
        self.assertEqual(1, len(imp_fun.get_func('WS')))
        self.assertEqual(1, len(imp_fun.get_func(fun_id=56)))
        self.assertIs(vulner_1, imp_fun.get_func('WS', 56))

        vulner_2 = ImpactFunc()
        vulner_2.haz_type = 'WS'
        vulner_2.id = 6
        imp_fun.append(vulner_2)
        self.assertEqual(2, len(imp_fun.get_func('WS')))
        self.assertEqual(1, len(imp_fun.get_func(fun_id=6)))
        self.assertIs(vulner_2, imp_fun.get_func('WS', 6))

        vulner_3 = ImpactFunc()
        vulner_3.haz_type = 'TC'
        vulner_3.id = 6
        imp_fun.append(vulner_3)
        self.assertEqual(2, len(imp_fun.get_func(fun_id=6)))
        self.assertEqual(1, len(imp_fun.get_func(fun_id=56)))
        self.assertEqual(2, len(imp_fun.get_func('WS')))
        self.assertEqual(1, len(imp_fun.get_func('TC')))
        self.assertIs(vulner_3, imp_fun.get_func('TC', 6))

        self.assertEqual(2, len(imp_fun.get_func().keys()))
        self.assertEqual(1, len(imp_fun.get_func()['TC'].keys()))
        self.assertEqual(2, len(imp_fun.get_func()['WS'].keys()))
 def test_size_wrong_zero(self):
     """Test size method with wrong inputs."""
     imp_fun = ImpactFuncSet()
     self.assertEqual(0, imp_fun.size('TC'))
     self.assertEqual(0, imp_fun.size('TC', 3))
     self.assertEqual(0, imp_fun.size(fun_id=3))
    def test_size_pass(self):
        """Test size function."""
        imp_fun = ImpactFuncSet()
        self.assertEqual(0, imp_fun.size())

        vulner_1 = ImpactFunc()
        vulner_1.haz_type = 'WS'
        vulner_1.id = 56
        imp_fun.append(vulner_1)
        self.assertEqual(1, imp_fun.size())
        self.assertEqual(1, imp_fun.size('WS', 56))
        self.assertEqual(1, imp_fun.size('WS'))
        self.assertEqual(1, imp_fun.size(fun_id=56))
        imp_fun.append(vulner_1)
        self.assertEqual(1, imp_fun.size())
        self.assertEqual(1, imp_fun.size('WS', 56))
        self.assertEqual(1, imp_fun.size('WS'))
        self.assertEqual(1, imp_fun.size(fun_id=56))

        vulner_2 = ImpactFunc()
        vulner_2.haz_type = 'WS'
        vulner_2.id = 5
        imp_fun.append(vulner_2)
        self.assertEqual(2, imp_fun.size())
        self.assertEqual(1, imp_fun.size('WS', 56))
        self.assertEqual(2, imp_fun.size('WS'))
        self.assertEqual(1, imp_fun.size(fun_id=56))
        self.assertEqual(1, imp_fun.size(fun_id=5))

        vulner_3 = ImpactFunc()
        vulner_3.haz_type = 'TC'
        vulner_3.id = 5
        imp_fun.append(vulner_3)
        self.assertEqual(3, imp_fun.size())
        self.assertEqual(1, imp_fun.size('TC', 5))
        self.assertEqual(2, imp_fun.size('WS'))
        self.assertEqual(1, imp_fun.size('TC'))
        self.assertEqual(1, imp_fun.size(fun_id=56))
        self.assertEqual(2, imp_fun.size(fun_id=5))