def _change_all_exposures(self, exposures): """Change exposures to provided exposures_set. Parameters: exposures (Exposures): exposures instance Returns: Exposures """ if isinstance(self.exposures_set, str) and self.exposures_set == NULL_STR: return exposures if isinstance(self.exposures_set, str): LOGGER.debug('Setting new exposures %s', self.exposures_set) new_exp = Exposures() new_exp.read_hdf5(self.exposures_set) new_exp.check() elif isinstance(self.exposures_set, Exposures): LOGGER.debug('Setting new exposures. ') new_exp = copy.deepcopy(self.exposures_set) new_exp.check() else: LOGGER.error('Wrong input exposures.') raise ValueError if not np.array_equal(np.unique(exposures.latitude.values), np.unique(new_exp.latitude.values)) or \ not np.array_equal(np.unique(exposures.longitude.values), np.unique(new_exp.longitude.values)): LOGGER.warning('Exposures locations have changed.') return new_exp
def test_calc_sector_total_impact(self): """Test running total impact calculations.""" sup = SupplyChain() sup.read_wiod16(year='test', range_rows=(5, 117), range_cols=(4, 116), col_iso3=2, col_sectors=1) # Tropical cyclone over Florida and Caribbean hazard = Hazard('TC') hazard.read_mat(HAZ_TEST_MAT) # Read demo entity values # Set the entity default file to the demo one exp = Exposures() exp.read_hdf5(EXP_DEMO_H5) exp.check() exp.gdf.region_id = 840 #assign right id for USA exp.assign_centroids(hazard) impf_tc = IFTropCyclone() impf_tc.set_emanuel_usa() impf_set = ImpactFuncSet() impf_set.append(impf_tc) impf_set.check() sup.calc_sector_direct_impact(hazard, exp, impf_set) sup.calc_indirect_impact(io_approach='ghosh') sup.calc_total_impact() self.assertAlmostEqual((sup.years.shape[0], sup.mriot_data.shape[0]), sup.total_impact.shape) self.assertAlmostEqual((sup.mriot_data.shape[0], ), sup.total_aai_agg.shape)
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 test_change_all_exposures_pass(self): """Test _change_all_exposures method""" meas = Measure() meas.exposures_set = EXP_DEMO_H5 ref_exp = Exposures() ref_exp.read_hdf5(EXP_DEMO_H5) exposures = Exposures() exposures.gdf['latitude'] = np.ones(10) exposures.gdf['longitude'] = np.ones(10) new_exp = meas._change_all_exposures(exposures) self.assertEqual(new_exp.ref_year, ref_exp.ref_year) self.assertEqual(new_exp.value_unit, ref_exp.value_unit) self.assertEqual(new_exp.tag.file_name, ref_exp.tag.file_name) self.assertEqual(new_exp.tag.description, ref_exp.tag.description) self.assertTrue( np.array_equal(new_exp.gdf.value.values, ref_exp.gdf.value.values)) self.assertTrue( np.array_equal(new_exp.gdf.latitude.values, ref_exp.gdf.latitude.values)) self.assertTrue( np.array_equal(new_exp.gdf.longitude.values, ref_exp.gdf.longitude.values))
def test_io_hdf5_pass(self): """write and read hdf5""" exp_df = Exposures(pd.read_excel(ENT_TEMPLATE_XLS)) exp_df.set_geometry_points() exp_df.check() # set metadata exp_df.ref_year = 2020 exp_df.tag = Tag(ENT_TEMPLATE_XLS, 'ENT_TEMPLATE_XLS') exp_df.value_unit = 'XSD' file_name = DATA_DIR.joinpath('test_hdf5_exp.h5') exp_df.write_hdf5(file_name) exp_read = Exposures() exp_read.read_hdf5(file_name) self.assertEqual(exp_df.ref_year, exp_read.ref_year) self.assertEqual(exp_df.value_unit, exp_read.value_unit) self.assertEqual(exp_df.crs, exp_read.crs) self.assertEqual(exp_df.tag.file_name, exp_read.tag.file_name) self.assertEqual(exp_df.tag.description, exp_read.tag.description) self.assertTrue( np.array_equal(exp_df.gdf.latitude.values, exp_read.gdf.latitude.values)) self.assertTrue( np.array_equal(exp_df.gdf.longitude.values, exp_read.gdf.longitude.values)) self.assertTrue( np.array_equal(exp_df.gdf.value.values, exp_read.gdf.value.values)) self.assertTrue( np.array_equal(exp_df.gdf.deductible.values, exp_read.gdf.deductible.values)) self.assertTrue( np.array_equal(exp_df.gdf.cover.values, exp_read.gdf.cover.values)) self.assertTrue( np.array_equal(exp_df.gdf.region_id.values, exp_read.gdf.region_id.values)) self.assertTrue( np.array_equal(exp_df.gdf.category_id.values, exp_read.gdf.category_id.values)) self.assertTrue( np.array_equal(exp_df.gdf.if_TC.values, exp_read.gdf.if_TC.values)) self.assertTrue( np.array_equal(exp_df.gdf.centr_TC.values, exp_read.gdf.centr_TC.values)) self.assertTrue( np.array_equal(exp_df.gdf.if_FL.values, exp_read.gdf.if_FL.values)) self.assertTrue( np.array_equal(exp_df.gdf.centr_FL.values, exp_read.gdf.centr_FL.values)) for point_df, point_read in zip(exp_df.gdf.geometry.values, exp_read.gdf.geometry.values): self.assertEqual(point_df.x, point_read.x) self.assertEqual(point_df.y, point_read.y)
def _change_all_exposures(self, exposures): """ Change exposures to provided exposures_set. Parameters ---------- exposures : climada.entity.Exposures exposures instance Returns ------- new_exp : climada.entity.Exposures() Exposures """ if isinstance(self.exposures_set, str) and self.exposures_set == NULL_STR: return exposures if isinstance(self.exposures_set, (str, Path)): LOGGER.debug('Setting new exposures %s', self.exposures_set) new_exp = Exposures() new_exp.read_hdf5(self.exposures_set) new_exp.check() elif isinstance(self.exposures_set, Exposures): LOGGER.debug('Setting new exposures. ') new_exp = self.exposures_set.copy(deep=True) new_exp.check() else: raise ValueError( f'{self.exposures_set} is neither a string nor an Exposures object' ) if not np.array_equal(np.unique(exposures.gdf.latitude.values), np.unique(new_exp.gdf.latitude.values)) or \ not np.array_equal(np.unique(exposures.gdf.longitude.values), np.unique(new_exp.gdf.longitude.values)): LOGGER.warning('Exposures locations have changed.') return new_exp
def _change_all_exposures(self, exposures): """Change exposures to provided exposures_set. Parameters: exposures (Exposures): exposures instance Returns: Exposures """ if self.exposures_set == NULL_STR: return exposures LOGGER.debug('Setting new exposures %s', self.exposures_set) new_exp = Exposures() new_exp.read_hdf5(self.exposures_set) new_exp.check() if exposures.shape[0] != new_exp.shape[0] or \ not np.array_equal(exposures.latitude.values, new_exp.latitude.values) or \ not np.array_equal(exposures.longitude.values, new_exp.longitude.values): LOGGER.warning('Exposures locations have changed.') return new_exp
def calc_sector_direct_impact(self): """Test running direct impact calculations.""" sup = SupplyChain() sup.read_wiod16(year='test', range_rows=(5, 117), range_cols=(4, 116), col_iso3=2, col_sectors=1) # Tropical cyclone over Florida and Caribbean hazard = Hazard('TC') hazard.read_mat(HAZ_TEST_MAT) # Read demo entity values # Set the entity default file to the demo one exp = Exposures() exp.read_hdf5(EXP_DEMO_H5) exp.check() exp.gdf.region_id = 840 #assign right id for USA exp.assign_centroids(hazard) impf_tc = IFTropCyclone() impf_tc.set_emanuel_usa() impf_set = ImpactFuncSet() impf_set.append(impf_tc) impf_set.check() subsecs = list(range(10)) + list(range(15, 25)) sup.calc_sector_direct_impact(hazard, exp, impf_set, selected_subsec=subsecs) self.assertAlmostEqual((sup.years.shape[0], sup.mriot_data.shape[0]), sup.direct_impact.shape) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual((sup.mriot_data.shape[0], ), sup.direct_aai_agg.shape) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual(sup.reg_dir_imp[0], 'USA') self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, subsecs].sum(), places=3) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[subsecs].sum(), places=3) sup.calc_sector_direct_impact(hazard, exp, impf_set, selected_subsec='manufacturing') self.assertAlmostEqual((sup.years.shape[0], sup.mriot_data.shape[0]), sup.direct_impact.shape) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual((sup.mriot_data.shape[0], ), sup.direct_aai_agg.shape) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual(sup.reg_dir_imp[0], 'USA') self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, range(4, 23)].sum(), places=3) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[range(4, 23)].sum(), places=3) sup.calc_sector_direct_impact(hazard, exp, impf_set, selected_subsec='agriculture') self.assertAlmostEqual((sup.years.shape[0], sup.mriot_data.shape[0]), sup.direct_impact.shape) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual((sup.mriot_data.shape[0], ), sup.direct_aai_agg.shape) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, range(0, 1)].sum(), places=3) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[range(0, 1)].sum(), places=3) sup.calc_sector_direct_impact(hazard, exp, impf_set, selected_subsec='mining') self.assertAlmostEqual((sup.years.shape[0], sup.mriot_data.shape[0]), sup.direct_impact.shape) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual((sup.mriot_data.shape[0], ), sup.direct_aai_agg.shape) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, range(3, 4)].sum(), places=3) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[range(3, 4)].sum(), places=3) sup.calc_sector_direct_impact(hazard, exp, impf_set, selected_subsec='service') self.assertAlmostEqual((sup.years.shape[0], sup.mriot_data.shape[0]), sup.direct_impact.shape) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual((sup.mriot_data.shape[0], ), sup.direct_aai_agg.shape) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[sup.reg_pos['USA']].sum(), places=3) self.assertAlmostEqual(sup.direct_impact.sum(), sup.direct_impact[:, range(26, 56)].sum(), places=3) self.assertAlmostEqual(sup.direct_aai_agg.sum(), sup.direct_aai_agg[range(26, 56)].sum(), places=3)