def test_centroids_att_one_pass(self): """ Test set one attribute centroids """ centr_bang = Centroids() centr_bang.set_raster_from_pnt_bounds((89, 21.5, 90, 23), 0.01) _set_centroids_att(centr_bang, dist_coast_decay=False, dem_product='SRTM3') self.assertEqual(centr_bang.dist_coast.size, 0) self.assertEqual(centr_bang.elevation.size, centr_bang.size)
def _centroids_from_nc(file_name): """ Construct Centroids from the grid described by 'latitude' and 'longitude' variables in a netCDF file. """ LOGGER.info('Constructing centroids from %s', file_name) cent = Centroids() ncdf = xr.open_dataset(file_name) if hasattr(ncdf, 'latitude'): lats = ncdf.latitude.data lons = ncdf.longitude.data elif hasattr(ncdf, 'lat'): lats = ncdf.lat.data lons = ncdf.lon.data elif hasattr(ncdf, 'lat_1'): lats = ncdf.lat_1.data lons = ncdf.lon_1.data else: raise AttributeError('netcdf file has no field named latitude or ' 'other know abrivation for coordinates.') ncdf.close() lats, lons = np.array( [np.repeat(lats, len(lons)), np.tile(lons, len(lats))]) cent = Centroids() cent.set_lat_lon(lats, lons) cent.set_area_pixel() cent.set_on_land() return cent
def test_area_approx(self): """Test set_area_approx""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init': 'epsg:4326'} with self.assertRaises(ValueError): centr.set_area_approx()
def test_write_read_raster_h5(self): """Write and read hdf5 format""" file_name = str(DATA_DIR.joinpath('test_centr.h5')) centr = Centroids() xf_lat, xo_lon, d_lat, d_lon, n_lat, n_lon = 10, 5, -0.5, 0.2, 20, 25 centr.set_raster_from_pix_bounds(xf_lat, xo_lon, d_lat, d_lon, n_lat, n_lon) centr.write_hdf5(file_name) centr_read = Centroids() centr_read.read_hdf5(file_name) self.assertTrue(centr_read.meta) self.assertFalse(centr_read.lat.size) self.assertFalse(centr_read.lon.size) self.assertEqual(centr_read.meta['width'], centr.meta['width']) self.assertEqual(centr_read.meta['height'], centr.meta['height']) self.assertAlmostEqual(centr_read.meta['transform'].a, centr.meta['transform'].a) self.assertAlmostEqual(centr_read.meta['transform'].b, centr.meta['transform'].b) self.assertAlmostEqual(centr_read.meta['transform'].c, centr.meta['transform'].c) self.assertAlmostEqual(centr_read.meta['transform'].d, centr.meta['transform'].d) self.assertAlmostEqual(centr_read.meta['transform'].e, centr.meta['transform'].e) self.assertAlmostEqual(centr_read.meta['transform'].f, centr.meta['transform'].f) self.assertTrue( u_coord.equal_crs(centr_read.meta['crs'], centr.meta['crs']))
def test_set_vector_file_wrong_fail(self): """Test set_vector_file with wrong centroids""" shp_file = shapereader.natural_earth(resolution='110m', category='cultural', name='populated_places_simple') centr = Centroids() inten = centr.set_vector_file(shp_file, ['pop_min', 'pop_max']) self.assertEqual(CRS.from_user_input(centr.geometry.crs), CRS.from_epsg(u_coord.NE_EPSG)) self.assertEqual(centr.geometry.size, centr.lat.size) self.assertEqual(CRS.from_user_input(centr.geometry.crs), CRS.from_epsg(u_coord.NE_EPSG)) self.assertAlmostEqual(centr.lon[0], 12.453386544971766) self.assertAlmostEqual(centr.lon[-1], 114.18306345846304) self.assertAlmostEqual(centr.lat[0], 41.903282179960115) self.assertAlmostEqual(centr.lat[-1], 22.30692675357551) self.assertEqual(inten.shape, (2, 243)) # population min self.assertEqual(inten[0, 0], 832) self.assertEqual(inten[0, -1], 4551579) # population max self.assertEqual(inten[1, 0], 832) self.assertEqual(inten[1, -1], 7206000) shp_file = shapereader.natural_earth(resolution='10m', category='cultural', name='populated_places_simple') with self.assertRaises(ValueError): centr.set_vector_file(shp_file, ['pop_min', 'pop_max'])
def test_mat_global_pass(self): """Test read GLB_CENTROIDS_MAT""" centroids = Centroids() centroids.read_mat(GLB_CENTROIDS_MAT) self.assertEqual(centroids.region_id[1062443], 35) self.assertEqual(centroids.region_id[170825], 28)
def __init__(self, haz_type): """Initialize values. Parameters: haz_type (str, optional): acronym of the hazard type (e.g. 'TC'). Examples: Fill hazard values by hand: >>> haz = Hazard('TC') >>> haz.intensity = sparse.csr_matrix(np.zeros((2, 2))) >>> ... Take hazard values from file: >>> haz = Hazard('TC', HAZ_DEMO_MAT) >>> haz.read_mat(HAZ_DEMO_MAT, 'demo') """ self.tag = TagHazard() self.tag.haz_type = haz_type self.units = '' self.centroids = Centroids() # following values are defined for each event self.event_id = np.array([], int) self.frequency = np.array([], float) self.event_name = list() self.date = np.array([], int) self.orig = np.array([], bool) # following values are defined for each event and centroid self.intensity = sparse.csr_matrix(np.empty( (0, 0))) # events x centroids self.fraction = sparse.csr_matrix(np.empty( (0, 0))) # events x centroids
def test_dist_coast_pass(self): """Test set_dist_coast""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init': 'epsg:4326'} centr.set_dist_coast() self.assertAlmostEqual(2594.2070842031694, centr.dist_coast[1]) self.assertAlmostEqual(166295.87602398323, centr.dist_coast[-2])
def test_region_id_pass(self): """Test set_region_id""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init': 'epsg:4326'} centr.set_region_id() self.assertEqual(np.count_nonzero(centr.region_id), 6) self.assertEqual(centr.region_id[0], 52) # 052 for barbados
def test_dist_coast_pass(self): """ Test set_dist_coast """ centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init':'epsg:4326'} centr.set_dist_coast() self.assertAlmostEqual(5.798819757520 * 1000, centr.dist_coast[1]) self.assertAlmostEqual(166.3650542203 * 1000, centr.dist_coast[-2])
def test_append_all_pass(self): """Test _append_all function.""" haz_1 = Hazard('TC') haz_1.tag.file_name = 'file1.mat' haz_1.tag.description = 'Description 1' haz_1.centroids = Centroids() haz_1.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6])) haz_1.event_id = np.array([1]) haz_1.event_name = ['ev1'] haz_1.date = np.array([1]) haz_1.orig = np.array([True]) haz_1.frequency = np.array([1.0]) haz_1.fraction = sparse.csr_matrix([[0.02, 0.03, 0.04]]) haz_1.intensity = sparse.csr_matrix([[0.2, 0.3, 0.4]]) haz_1.units = 'm/s' haz_2 = Hazard('TC') haz_2.tag.file_name = 'file2.mat' haz_2.tag.description = 'Description 2' haz_2.centroids = Centroids() haz_2.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6])) haz_2.event_id = np.array([1]) haz_2.event_name = ['ev2'] haz_2.date = np.array([2]) haz_2.orig = np.array([False]) haz_2.frequency = np.array([1.0]) haz_2.fraction = sparse.csr_matrix([[1.02, 1.03, 1.04]]) haz_2.intensity = sparse.csr_matrix([[1.2, 1.3, 1.4]]) haz_2.units = 'm/s' haz = Hazard('TC') haz._append_all([haz_1, haz_2]) hres_frac = sparse.csr_matrix([[0.02, 0.03, 0.04], \ [1.02, 1.03, 1.04]]) hres_inten = sparse.csr_matrix([[0.2, 0.3, 0.4], \ [1.2, 1.3, 1.4]]) self.assertTrue(sparse.isspmatrix_csr(haz.intensity)) self.assertTrue( np.array_equal(haz.intensity.todense(), hres_inten.todense())) self.assertTrue(sparse.isspmatrix_csr(haz.fraction)) self.assertTrue( np.array_equal(haz.fraction.todense(), hres_frac.todense())) self.assertEqual(haz.units, haz_2.units) self.assertTrue(np.array_equal(haz.frequency, np.array([1.0, 1.0]))) self.assertTrue(np.array_equal(haz.orig, np.array([True, False]))) self.assertTrue(np.array_equal(haz.date, np.array([1, 2]))) self.assertTrue(np.array_equal(haz.event_id, np.array([1, 2]))) self.assertTrue(haz.event_name, ['ev1', 'ev2']) self.assertTrue( np.array_equal(haz.centroids.coord, haz_1.centroids.coord)) self.assertTrue( np.array_equal(haz.centroids.coord, haz_2.centroids.coord)) self.assertTrue(haz.tag, 'file_1.mat + file_2.mat') self.assertTrue(haz.tag, 'Description 1 + Description 2')
def test_get_pixel_polygons_pass(self): """Test calc_pixels_polygons""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init': 'epsg:4326'} poly = centr.calc_pixels_polygons() self.assertIsInstance(poly[0], Polygon) self.assertTrue(np.allclose(poly.centroid[:].y.values, centr.lat)) self.assertTrue(np.allclose(poly.centroid[:].x.values, centr.lon))
def test_ne_crs_xy_pass(self): """ Test _ne_crs_xy """ centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() lon, lat = centr._ne_crs_xy() self.assertAlmostEqual(4.51072194, lon[0]) self.assertAlmostEqual(0.00011838, lat[0]) self.assertAlmostEqual(4.5107354, lon[-1]) self.assertAlmostEqual(0.0001297, lat[-1])
def test_mat_global_pass(self): """ Test read GLB_CENTROIDS_MAT """ centroids = Centroids() centroids.read_mat(GLB_CENTROIDS_MAT) self.assertEqual(centroids.region_id[1062443], 35) self.assertEqual(centroids.region_id[170825], 28) self.assertAlmostEqual(centroids.dist_coast[9], 21.366461094662913) self.assertAlmostEqual(centroids.dist_coast[1568370], 36.76908653021)
def test_equal_pass(self): """Test equal""" centr_ras = Centroids.from_raster_file(HAZ_DEMO_FL, window=Window(0, 0, 50, 60)) centr_bis = Centroids.from_raster_file(HAZ_DEMO_FL, window=Window(51, 61, 10, 10)) self.assertFalse(centr_ras.equal(centr_bis)) self.assertFalse(centr_bis.equal(centr_ras)) self.assertTrue(centr_ras.equal(centr_ras)) self.assertTrue(centr_bis.equal(centr_bis))
def test_ne_crs_geom_pass(self): """Test _ne_crs_geom""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() xy_vec = centr._ne_crs_geom() lon, lat = xy_vec.geometry[:].x.values, xy_vec.geometry[:].y.values self.assertAlmostEqual(4.51072194, lon[0]) self.assertAlmostEqual(0.00011838, lat[0]) self.assertAlmostEqual(4.5107354, lon[-1]) self.assertAlmostEqual(0.0001297, lat[-1])
def test_centroids_resolution_pass(self): """ Test _centroids_resolution """ bf = BushFire() res_centr = bf._centroids_resolution(DEF_CENTROIDS[0]) res = get_resolution(DEF_CENTROIDS[0].lat, DEF_CENTROIDS[0].lon) self.assertAlmostEqual((res[0] + res[1]) / 2, res_centr) centroids = Centroids() centroids.meta = {'transform': Affine(0.5, 0, -180, 0, -0.5, 90)} res_centr = bf._centroids_resolution(centroids) self.assertAlmostEqual(0.5, res_centr)
def test_mat_pass(self): """Read a centroid mat file correctly.""" centroids = Centroids() centroids.read_mat(HAZ_TEST_MAT) n_centroids = 100 self.assertEqual(centroids.coord.shape, (n_centroids, 2)) self.assertEqual(centroids.coord[0][0], 21) self.assertEqual(centroids.coord[0][1], -84) self.assertEqual(centroids.coord[n_centroids - 1][0], 30) self.assertEqual(centroids.coord[n_centroids - 1][1], -75)
def test_get_closest_point(self): """Test get_closest_point""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init': 'epsg:4326'} x, y, idx = centr.get_closest_point(-58.13, 14.38) self.assertAlmostEqual(x, -58.125) self.assertAlmostEqual(y, 14.375) self.assertEqual(idx, 295) self.assertEqual(centr.lon[idx], x) self.assertEqual(centr.lat[idx], y)
def test_centroid_pass(self): """Read a centroid excel file correctly.""" centroids = Centroids() centroids.read_excel(HAZ_TEMPLATE_XLS) n_centroids = 45 self.assertEqual(centroids.coord.shape[0], n_centroids) self.assertEqual(centroids.coord.shape[1], 2) self.assertEqual(centroids.coord[0][0], -25.95) self.assertEqual(centroids.coord[0][1], 32.57) self.assertEqual(centroids.coord[n_centroids - 1][0], -24.7) self.assertEqual(centroids.coord[n_centroids - 1][1], 33.88)
def test_union_meta(self): cent1 = Centroids.from_pnt_bounds((-1, -1, 0, 0), res=1) cent2 = Centroids.from_pnt_bounds((0, 0, 1, 1), res=1) cent3 = Centroids.from_lat_lon(np.array([1]), np.array([1])) cent = cent1.union(cent2) np.testing.assert_array_equal(cent.lat, [0, 0, -1, -1, 1, 1, 0]) np.testing.assert_array_equal(cent.lon, [-1, 0, -1, 0, 0, 1, 1]) cent = cent3.union(cent1) np.testing.assert_array_equal(cent.lat, [1, 0, 0, -1, -1]) np.testing.assert_array_equal(cent.lon, [1, -1, 0, -1, 0])
def test_area_pass(self): """ Test set_area """ centr_ras = Centroids() centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60)) centr_ras.meta['crs'] = {'proj':'cea'} centr_ras.set_area_pixel() centr_ras.check() self.assertTrue(np.allclose(centr_ras.area_pixel, np.ones(60*50)*0.009000000000000341*0.009000000000000341))
def test_write_read_points_h5(self): file_name = str(DATA_DIR.joinpath('test_centr.h5')) centr = Centroids.from_lat_lon(VEC_LAT, VEC_LON) centr.write_hdf5(file_name) centr_read = Centroids.from_hdf5(file_name) self.assertFalse(centr_read.meta) self.assertTrue(centr_read.lat.size) self.assertTrue(centr_read.lon.size) self.assertTrue(np.allclose(centr_read.lat, centr.lat)) self.assertTrue(np.allclose(centr_read.lon, centr.lon)) self.assertTrue(u_coord.equal_crs(centr_read.crs, centr.crs))
def test_read_all_pass(self): """ Test centr_ras data """ centr_ras = Centroids() inten_ras = centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60)) self.assertAlmostEqual(centr_ras.meta['crs'], DEF_CRS) self.assertAlmostEqual(centr_ras.meta['transform'].c, -69.33714959699981) self.assertAlmostEqual(centr_ras.meta['transform'].a, 0.009000000000000341) self.assertAlmostEqual(centr_ras.meta['transform'].b, 0.0) self.assertAlmostEqual(centr_ras.meta['transform'].f, 10.42822096697894) self.assertAlmostEqual(centr_ras.meta['transform'].d, 0.0) self.assertAlmostEqual(centr_ras.meta['transform'].e, -0.009000000000000341) self.assertEqual(centr_ras.meta['height'], 60) self.assertEqual(centr_ras.meta['width'], 50) self.assertEqual(inten_ras.shape, (1, 60*50))
def test_on_land(self): """ Test set_on_land """ centr_ras = Centroids() centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60)) centr_ras.set_on_land() centr_ras.check() self.assertTrue(np.array_equal(centr_ras.on_land, np.ones(60 * 50, bool)))
def test_read_with_cent(self): """ Test read_footprints while passing in a Centroids object """ var_names = copy.deepcopy(DEF_VAR_EXCEL) var_names['sheet_name'] = 'fp_centroids-test' var_names['col_name']['region_id'] = 'iso_n3' test_centroids = Centroids() test_centroids.read_excel(os.path.join(DATA_DIR, 'fp_centroids-test.xls'), var_names=var_names) storms = StormEurope() storms.read_footprints(TEST_NCS, centroids=test_centroids) self.assertEqual(storms.intensity.shape, (2, 9944)) self.assertEqual( np.count_nonzero(~np.isnan(storms.centroids.region_id)), 6401)
def test_dist_coast_pass(self): """Test set_region_id""" centr_ras = Centroids() centr_ras.set_raster_file(HAZ_DEMO_FL, window=Window(0, 0, 50, 60)) centr_ras.set_dist_coast() centr_ras.check() self.assertTrue(abs(centr_ras.dist_coast[0] - 117000) < 1000) self.assertTrue(abs(centr_ras.dist_coast[-1] - 104000) < 1000)
def test_set_raster_pnt_pass(self): """Test set_raster_from_pnt_bounds from point borders""" centr = Centroids() left, bottom, right, top = 5, 0, 10, 10 centr.set_raster_from_pnt_bounds((left, bottom, right, top), 0.2) self.assertEqual(centr.meta['crs'], DEF_CRS) self.assertEqual(centr.meta['width'], 26) self.assertEqual(centr.meta['height'], 51) self.assertAlmostEqual(centr.meta['transform'][0], 0.2) self.assertAlmostEqual(centr.meta['transform'][1], 0.0) self.assertAlmostEqual(centr.meta['transform'][2], 5 - 0.2 / 2) self.assertAlmostEqual(centr.meta['transform'][3], 0.0) self.assertAlmostEqual(centr.meta['transform'][4], -0.2) self.assertAlmostEqual(centr.meta['transform'][5], 10 + 0.2 / 2) self.assertTrue('lat' in centr.__dict__.keys()) self.assertTrue('lon' in centr.__dict__.keys())
def test_set_lat_lon_to_meta_pass(self): """Test set_lat_lon_to_meta""" centr = Centroids() centr.lat, centr.lon, centr.geometry = self.data_vector() centr.geometry.crs = {'init': 'epsg:4326'} centr.set_lat_lon_to_meta() self.assertEqual(centr.meta['crs'], {'init': 'epsg:4326'}) self.assertEqual(centr.meta['width'], 36) self.assertEqual(centr.meta['height'], 31) self.assertEqual(centr.meta['transform'][1], 0.0) self.assertEqual(centr.meta['transform'][3], 0.0) self.assertAlmostEqual(centr.meta['transform'][0], 0.08333333) self.assertAlmostEqual(centr.meta['transform'][2], -61.08333333) self.assertAlmostEqual(centr.meta['transform'][4], 0.08333333) self.assertAlmostEqual(centr.meta['transform'][5], 11.83333333)
def test_from_raster_file_wrong_fail(self): """Test from_raster_file with wrong centroids""" centr = Centroids.from_raster_file(HAZ_DEMO_FL, window=Window(10, 20, 50, 60)) self.assertAlmostEqual(centr.meta['crs'], DEF_CRS) self.assertAlmostEqual(centr.meta['transform'].c, -69.2471495969998) self.assertAlmostEqual(centr.meta['transform'].a, 0.009000000000000341) self.assertAlmostEqual(centr.meta['transform'].b, 0.0) self.assertAlmostEqual(centr.meta['transform'].f, 10.248220966978932) self.assertAlmostEqual(centr.meta['transform'].d, 0.0) self.assertAlmostEqual(centr.meta['transform'].e, -0.009000000000000341) self.assertEqual(centr.meta['height'], 60) self.assertEqual(centr.meta['width'], 50) inten_ras = centr.values_from_raster_files([HAZ_DEMO_FL], window=Window( 10, 20, 50, 60)) self.assertEqual(inten_ras.shape, (1, 60 * 50)) self.assertAlmostEqual( inten_ras.reshape((60, 50)).tocsr()[25, 12], 0.056825936) with self.assertRaises(ValueError): centr.values_from_raster_files([HAZ_DEMO_FL], window=Window(10, 20, 52, 60))