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_demo_file(self): """Read demo excel file""" description = 'One single file.' meas = MeasureSet.from_excel(ENT_DEMO_TODAY, description) # Check results n_meas = 4 self.assertEqual(meas.size(), n_meas) act_man = meas.get_measure(name='Mangroves')[0] self.assertEqual(act_man.name, 'Mangroves') self.assertEqual(type(act_man.color_rgb), np.ndarray) self.assertEqual(len(act_man.color_rgb), 3) self.assertEqual(act_man.color_rgb[0], 0.1529) self.assertEqual(act_man.color_rgb[1], 0.251) self.assertEqual(act_man.color_rgb[2], 0.5451) self.assertEqual(act_man.cost, 1311768360.8515418) self.assertEqual(act_man.hazard_freq_cutoff, 0) self.assertEqual(act_man.hazard_inten_imp, (1, -4)) self.assertEqual(act_man.mdd_impact, (1, 0)) self.assertEqual(act_man.paa_impact, (1, 0)) self.assertEqual(act_man.risk_transf_attach, 0) self.assertEqual(act_man.risk_transf_cover, 0) act_buil = meas.get_measure(name='Building code')[0] self.assertEqual(act_buil.name, 'Building code') self.assertEqual(type(act_buil.color_rgb), np.ndarray) self.assertEqual(len(act_buil.color_rgb), 3) self.assertEqual(act_buil.color_rgb[0], 0.6980) self.assertEqual(act_buil.color_rgb[1], 0.8745) self.assertEqual(act_buil.color_rgb[2], 0.9333) self.assertEqual(act_buil.cost, 9200000000.0000000) self.assertEqual(act_buil.hazard_freq_cutoff, 0) self.assertEqual(act_buil.hazard_inten_imp, (1, 0)) self.assertEqual(act_buil.mdd_impact, (0.75, 0)) self.assertEqual(act_buil.paa_impact, (1, 0)) self.assertEqual(act_buil.risk_transf_attach, 0) self.assertEqual(act_buil.risk_transf_cover, 0) self.assertEqual(meas.tag.file_name, str(ENT_DEMO_TODAY)) self.assertEqual(meas.tag.description, description)
def test_write_read_file(self): """Write and read excel file""" act_1 = Measure() act_1.name = 'Mangrove' act_1.haz_type = 'TC' act_1.color_rgb = np.array([1, 1, 1]) act_1.cost = 10 act_1.mdd_impact = (1, 2) act_1.paa_impact = (1, 2) act_1.hazard_inten_imp = (1, 2) act_1.risk_transf_cover = 500 act_11 = Measure() act_11.name = 'Something' act_11.haz_type = 'TC' act_11.color_rgb = np.array([1, 1, 1]) act_11.mdd_impact = (1, 2) act_11.paa_impact = (1, 3) act_11.hazard_inten_imp = (1, 2) act_11.exp_region_id = [2] act_2 = Measure() act_2.name = 'Anything' act_2.haz_type = 'FL' act_2.color_rgb = np.array([1, 1, 1]) act_2.mdd_impact = (1, 2) act_2.paa_impact = (1, 2) act_2.hazard_inten_imp = (1, 2) act_2.hazard_freq_cutoff = 30 act_2.imp_fun_map = 'map' meas_set = MeasureSet() meas_set.append(act_1) meas_set.append(act_11) meas_set.append(act_2) file_name = DATA_DIR.joinpath('test_meas.xlsx') meas_set.write_excel(file_name) meas_read = MeasureSet.from_excel(file_name, 'test') self.assertEqual(meas_read.tag.file_name, str(file_name)) self.assertEqual(meas_read.tag.description, 'test') meas_list = meas_read.get_measure('TC') meas_list.extend(meas_read.get_measure('FL')) for meas in meas_list: if meas.name == 'Mangrove': meas_ref = act_1 elif meas.name == 'Something': meas_ref = act_11 elif meas.name == 'Anything': meas_ref = act_2 self.assertEqual(meas_ref.name, meas.name) self.assertEqual(meas_ref.haz_type, meas.haz_type) self.assertEqual(meas_ref.cost, meas.cost) self.assertEqual(meas_ref.hazard_set, meas.hazard_set) self.assertEqual(meas_ref.hazard_freq_cutoff, meas.hazard_freq_cutoff) self.assertEqual(meas_ref.exposures_set, meas.exposures_set) self.assertEqual(meas_ref.exp_region_id, meas.exp_region_id) self.assertTrue(np.array_equal(meas_ref.color_rgb, meas.color_rgb)) self.assertEqual(meas_ref.mdd_impact, meas.mdd_impact) self.assertEqual(meas_ref.paa_impact, meas.paa_impact) self.assertEqual(meas_ref.hazard_inten_imp, meas.hazard_inten_imp) self.assertEqual(meas_ref.imp_fun_map, meas.imp_fun_map) self.assertEqual(meas_ref.risk_transf_attach, meas.risk_transf_attach) self.assertEqual(meas_ref.risk_transf_cover, meas.risk_transf_cover)
def test_template_file_pass(self): """Read template excel file""" meas = MeasureSet.from_excel(ENT_TEMPLATE_XLS) self.assertEqual(meas.size(), 7) name = 'elevate existing buildings' act_buil = meas.get_measure(name=name)[0] self.assertEqual(act_buil.name, name) self.assertEqual(act_buil.haz_type, 'TS') self.assertTrue( np.array_equal(act_buil.color_rgb, np.array([0.84, 0.89, 0.70]))) self.assertEqual(act_buil.cost, 3911963265.476649) self.assertEqual(act_buil.hazard_set, 'nil') self.assertEqual(act_buil.hazard_freq_cutoff, 0) self.assertEqual(act_buil.hazard_inten_imp, (1, -2)) self.assertEqual(act_buil.exposures_set, 'nil') self.assertEqual(act_buil.exp_region_id, 0) self.assertEqual(act_buil.paa_impact, (0.9, 0)) self.assertEqual(act_buil.mdd_impact, (0.9, -0.1)) self.assertEqual(act_buil.imp_fun_map, 'nil') self.assertEqual(act_buil.risk_transf_attach, 0) self.assertEqual(act_buil.risk_transf_cover, 0) self.assertEqual(act_buil.risk_transf_cost_factor, 1) name = 'vegetation management' act_buil = meas.get_measure(name=name)[0] self.assertEqual(act_buil.name, name) self.assertEqual(act_buil.haz_type, 'TC') self.assertTrue( np.array_equal(act_buil.color_rgb, np.array([0.76, 0.84, 0.60]))) self.assertEqual(act_buil.cost, 63968125.00687534) self.assertEqual(act_buil.hazard_set, 'nil') self.assertEqual(act_buil.hazard_freq_cutoff, 0) self.assertEqual(act_buil.hazard_inten_imp, (1, -1)) self.assertEqual(act_buil.exposures_set, 'nil') self.assertEqual(act_buil.exp_region_id, 0) self.assertEqual(act_buil.paa_impact, (0.8, 0)) self.assertEqual(act_buil.mdd_impact, (1, 0)) self.assertEqual(act_buil.imp_fun_map, 'nil') self.assertEqual(act_buil.risk_transf_attach, 0) self.assertEqual(act_buil.risk_transf_cover, 0) self.assertEqual(act_buil.risk_transf_cost_factor, 1) self.assertEqual( meas.get_measure(name='enforce building code')[0].imp_fun_map, '1to3') name = 'risk transfer' act_buil = meas.get_measure(name=name)[0] self.assertEqual(act_buil.name, name) self.assertEqual(act_buil.haz_type, 'TC') self.assertTrue( np.array_equal(act_buil.color_rgb, np.array([0.90, 0.72, 0.72]))) self.assertEqual(act_buil.cost, 21000000) self.assertEqual(act_buil.hazard_set, 'nil') self.assertEqual(act_buil.hazard_freq_cutoff, 0) self.assertEqual(act_buil.hazard_inten_imp, (1, 0)) self.assertEqual(act_buil.exposures_set, 'nil') self.assertEqual(act_buil.exp_region_id, 0) self.assertEqual(act_buil.paa_impact, (1, 0)) self.assertEqual(act_buil.mdd_impact, (1, 0)) self.assertEqual(act_buil.imp_fun_map, 'nil') self.assertEqual(act_buil.risk_transf_attach, 500000000) self.assertEqual(act_buil.risk_transf_cover, 1000000000) self.assertEqual(act_buil.risk_transf_cost_factor, 2) self.assertEqual(meas.tag.file_name, str(ENT_TEMPLATE_XLS)) self.assertEqual(meas.tag.description, '')