コード例 #1
0
    def test_demo_file_pass(self):
        """Read demo excel file"""
        # Read demo mat file
        imp_funcs = ImpactFuncSet()
        description = 'One single file.'
        imp_funcs.read_mat(ENT_TEST_MAT, 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_TEST_MAT))
        self.assertEqual(imp_funcs.tag.description, description)
コード例 #2
0
    def test_filter_exposures_pass(self):
        """Test _filter_exposures method with -1"""
        meas = Measure()
        meas.exp_region_id = 3
        meas.haz_type = 'TC'

        exp = Exposures()
        exp.read_mat(ENT_TEST_MAT)
        exp.rename(columns={
            'if_': 'if_TC',
            'centr_': 'centr_TC'
        },
                   inplace=True)
        exp['region_id'] = np.ones(exp.shape[0])
        exp.region_id.values[:exp.shape[0] // 2] = 3

        imp_set = ImpactFuncSet()
        imp_set.read_mat(ENT_TEST_MAT)

        haz = Hazard('TC')
        haz.read_mat(HAZ_TEST_MAT)

        new_exp = copy.deepcopy(exp)
        new_exp['value'] *= 3
        new_exp['if_TC'].values[:20] = 2
        new_exp['if_TC'].values[20:40] = 3
        new_exp['if_TC'].values[40:] = 1

        new_ifs = copy.deepcopy(imp_set)
        new_ifs.get_func('TC')[1].intensity += 1
        ref_ifs = copy.deepcopy(new_ifs)

        new_haz = copy.deepcopy(haz)
        new_haz.intensity *= 4

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

        # unchanged exposures
        self.assertEqual(res_exp.ref_year, exp.ref_year)
        self.assertEqual(res_exp.value_unit, exp.value_unit)
        self.assertEqual(res_exp.tag.file_name, exp.tag.file_name)
        self.assertEqual(res_exp.tag.description, exp.tag.description)
        self.assertTrue(
            np.array_equal(res_exp.value.values[exp.shape[0] // 2:],
                           new_exp.value.values[:exp.shape[0] // 2]))
        self.assertTrue(
            np.array_equal(res_exp.region_id.values[exp.shape[0] // 2:],
                           np.ones(exp.shape[0] // 2) * 3))
        self.assertTrue(
            np.array_equal(res_exp.if_TC.values[exp.shape[0] // 2:],
                           new_exp.if_TC.values[:exp.shape[0] // 2]))
        self.assertTrue(
            np.array_equal(res_exp.latitude.values[exp.shape[0] // 2:],
                           new_exp.latitude.values[:exp.shape[0] // 2]))
        self.assertTrue(
            np.array_equal(res_exp.longitude.values[exp.shape[0] // 2:],
                           new_exp.longitude.values[:exp.shape[0] // 2]))

        # changed exposures
        self.assertTrue(
            np.array_equal(res_exp.value.values[:exp.shape[0] // 2],
                           exp.value.values[exp.shape[0] // 2:]))
        self.assertTrue(
            np.array_equal(res_exp.region_id.values[:exp.shape[0] // 2],
                           np.ones(exp.shape[0] // 2)))
        self.assertTrue(
            np.array_equal(res_exp.if_TC.values[:exp.shape[0] // 2],
                           exp.if_TC.values[exp.shape[0] // 2:]))
        self.assertTrue(
            np.array_equal(res_exp.latitude.values[:exp.shape[0] // 2],
                           exp.latitude.values[exp.shape[0] // 2:]))
        self.assertTrue(
            np.array_equal(res_exp.longitude.values[:exp.shape[0] // 2],
                           exp.longitude.values[exp.shape[0] // 2:]))

        # unchanged impact functions
        self.assertEqual(list(res_ifs.get_func().keys()), [meas.haz_type])
        self.assertEqual(res_ifs.get_func()[meas.haz_type][1].id,
                         imp_set.get_func()[meas.haz_type][1].id)
        self.assertTrue(
            np.array_equal(res_ifs.get_func()[meas.haz_type][1].intensity,
                           imp_set.get_func()[meas.haz_type][1].intensity))
        self.assertEqual(res_ifs.get_func()[meas.haz_type][3].id,
                         imp_set.get_func()[meas.haz_type][3].id)
        self.assertTrue(
            np.array_equal(res_ifs.get_func()[meas.haz_type][3].intensity,
                           imp_set.get_func()[meas.haz_type][3].intensity))

        # changed impact functions
        self.assertTrue(
            np.array_equal(
                res_ifs.get_func()[meas.haz_type][1 + IF_ID_FACT].intensity,
                ref_ifs.get_func()[meas.haz_type][1].intensity))
        self.assertTrue(
            np.array_equal(
                res_ifs.get_func()[meas.haz_type][1 + IF_ID_FACT].paa,
                ref_ifs.get_func()[meas.haz_type][1].paa))
        self.assertTrue(
            np.array_equal(
                res_ifs.get_func()[meas.haz_type][1 + IF_ID_FACT].mdd,
                ref_ifs.get_func()[meas.haz_type][1].mdd))
        self.assertTrue(
            np.array_equal(
                res_ifs.get_func()[meas.haz_type][3 + IF_ID_FACT].intensity,
                ref_ifs.get_func()[meas.haz_type][3].intensity))
        self.assertTrue(
            np.array_equal(
                res_ifs.get_func()[meas.haz_type][3 + IF_ID_FACT].paa,
                ref_ifs.get_func()[meas.haz_type][3].paa))
        self.assertTrue(
            np.array_equal(
                res_ifs.get_func()[meas.haz_type][3 + IF_ID_FACT].mdd,
                ref_ifs.get_func()[meas.haz_type][3].mdd))

        # unchanged hazard
        self.assertTrue(
            np.array_equal(res_haz.intensity[:, :36].todense(),
                           haz.intensity[:, :36].todense()))
        self.assertTrue(
            np.array_equal(res_haz.intensity[:, 37:46].todense(),
                           haz.intensity[:, 37:46].todense()))
        self.assertTrue(
            np.array_equal(res_haz.intensity[:, 47:].todense(),
                           haz.intensity[:, 47:].todense()))

        # changed hazard
        self.assertTrue(
            np.array_equal(res_haz.intensity[[36, 46]].todense(),
                           new_haz.intensity[[36, 46]].todense()))