def test_regrid_field_differing_crs(self): """Test exception raised when source and destination CRS values are not equal.""" source = self.get_ofield() destination = deepcopy(source) source.set_crs(CoordinateReferenceSystem(epsg=2136)) with self.assertRaises(RegriddingError): from ocgis.regrid.base import regrid_field regrid_field(source, destination)
def test_regrid_field_differing_crs(self): """Test exception raised when source and destination CRS values are not equal.""" source = self.get_ofield() destination = deepcopy(source) source.set_crs(CoordinateReferenceSystem(epsg=2136)) with self.assertRaises(RegriddingError): from ocgis.regrid.base import regrid_field regrid_field(source, destination)
def test_system_regrid_field_nonoverlapping_extents(self): """Test regridding with fields that do not spatially overlap.""" rd = self.test_data.get_rd('cancm4_tas') # nebraska and california coll = OcgOperations(dataset=rd, geom='state_boundaries', select_ugid=[16, 25], snippet=True, vector_wrap=False).execute() source = coll.get_element(container_ugid=25) destination = coll.get_element(container_ugid=16) with self.assertRaises(RegriddingError): from ocgis.regrid.base import regrid_field regrid_field(source, destination)
def test_iter_regridded_field_with_corners(self): """Test with_corners as True and False when regridding Fields.""" source = self.get_ofield() source.set_crs(Spherical()) destination = deepcopy(source) self.assertEqual(source.grid.abstraction, 'polygon') from ESMF import RegridMethod for regrid_method in ['auto', RegridMethod.BILINEAR]: from ocgis.regrid.base import regrid_field regrid_field(source, destination, regrid_method=regrid_method)
def test_iter_regridded_field_with_corners(self): """Test with_corners as True and False when regridding Fields.""" source = self.get_ofield() source.set_crs(Spherical()) destination = deepcopy(source) self.assertEqual(source.grid.abstraction, 'polygon') from ESMF import RegridMethod for regrid_method in ['auto', RegridMethod.BILINEAR]: from ocgis.regrid.base import regrid_field regrid_field(source, destination, regrid_method=regrid_method)
def test_regrid_field_different_grid_shapes(self): """Test regridding a downscaled dataset to GCM output. The input and output grids have different shapes.""" downscaled = self.test_data.get_rd('maurer_2010_tas') downscaled.time_region = {'month': [2], 'year': [1990]} downscaled = downscaled.get() poly = make_poly([37, 43], [-104, -94]) downscaled = downscaled.grid.get_intersects(poly).parent downscaled.unwrap() downscaled.set_crs(Spherical()) gcm = self.test_data.get_rd('cancm4_tas') gcm = gcm.get() poly = make_poly([37, 43], [-104 + 360, -94 + 360]) gcm = gcm.grid.get_intersects(poly).parent gcm.set_crs(Spherical()) self.assertIsNone(downscaled.grid.get_mask()) self.assertIsNone(gcm.grid.get_mask()) from ocgis.regrid.base import regrid_field regridded = regrid_field(downscaled, gcm) dv = regridded.data_variables[0] self.assertEqual(dv.shape, (28, 3, 5)) self.assertEqual(dv.name, 'tas') vmask = dv.get_mask() self.assertEqual(vmask.sum(), 252)
def test_system_regrid_field_nonoverlapping_extents(self): """Test regridding with fields that do not spatially overlap.""" rd = self.test_data.get_rd('cancm4_tas') # nebraska and california coll = OcgOperations(dataset=rd, geom='state_boundaries', select_ugid=[16, 25], snippet=True, vector_wrap=False).execute() source = coll.get_element(container_ugid=25) destination = coll.get_element(container_ugid=16) with self.assertRaises(RegriddingError): from ocgis.regrid.base import regrid_field regrid_field(source, destination)
def test_regrid_field(self): """Test with equivalent input and output expectations. The shapes of the grids are equal.""" source = self.get_ofield() source.set_crs(Spherical()) destination = deepcopy(source) desired = deepcopy(source) keywords = dict(split=[False, True]) for k in itr_products_keywords(keywords, as_namedtuple=True): from ocgis.regrid.base import regrid_field regridded = regrid_field(source, destination, split=k.split) self.assertIsInstance(regridded, Field) self.assertNumpyAll(regridded.grid.get_value_stacked(), desired.grid.get_value_stacked()) self.assertEqual(regridded.crs, source.crs) for variable in regridded.data_variables: self.assertGreater(variable.get_value().mean(), 2.0) self.assertNumpyAll( variable.get_value(), source[variable.name].get_value().squeeze()) self.assertFalse( np.may_share_memory(variable.get_value(), source[variable.name].get_value()))
def test_regrid_field_different_grid_shapes(self): """Test regridding a downscaled dataset to GCM output. The input and output grids have different shapes.""" downscaled = self.test_data.get_rd('maurer_2010_tas') downscaled.time_region = {'month': [2], 'year': [1990]} downscaled = downscaled.get() poly = make_poly([37, 43], [-104, -94]) downscaled = downscaled.grid.get_intersects(poly).parent downscaled.unwrap() downscaled.set_crs(Spherical()) gcm = self.test_data.get_rd('cancm4_tas') gcm = gcm.get() poly = make_poly([37, 43], [-104 + 360, -94 + 360]) gcm = gcm.grid.get_intersects(poly).parent gcm.set_crs(Spherical()) self.assertIsNone(downscaled.grid.get_mask()) self.assertIsNone(gcm.grid.get_mask()) from ocgis.regrid.base import regrid_field regridded = regrid_field(downscaled, gcm) dv = regridded.data_variables[0] self.assertEqual(dv.shape, (28, 3, 5)) self.assertEqual(dv.name, 'tas') vmask = dv.get_mask() self.assertEqual(vmask.sum(), 252)
def test_regrid_field_value_mask(self): """Test with a value mask on the destination.""" from ocgis.regrid.base import regrid_field source = self.get_ofield() source.set_crs(Spherical()) destination = deepcopy(source) value_mask = np.zeros(destination.grid.shape, dtype=bool) value_mask[1, 1] = True regridded = regrid_field(source, destination, value_mask=value_mask) self.assertTrue(np.all(regridded.data_variables[0].get_mask()[:, :, 1, 1]))
def test_regrid_field_partial_extents(self): """Test regridding with fields that partially overlap.""" rd = self.test_data.get_rd('cancm4_tas') # california and nevada coll = OcgOperations(dataset=rd, geom='state_boundaries', select_ugid=[23, 25], snippet=True, vector_wrap=False).execute() source = coll.get_element(container_ugid=23) destination = coll.get_element(container_ugid=25) from ocgis.regrid.base import regrid_field res = regrid_field(source, destination) self.assertEqual(res['tas'].get_mask().sum(), 11)
def test_regrid_field_value_mask(self): """Test with a value mask on the destination.""" from ocgis.regrid.base import regrid_field source = self.get_ofield() source.set_crs(Spherical()) destination = deepcopy(source) value_mask = np.zeros(destination.grid.shape, dtype=bool) value_mask[1, 1] = True regridded = regrid_field(source, destination, value_mask=value_mask) self.assertTrue(np.all(regridded.data_variables[0].get_mask()[:, 1, 1]))
def test_regrid_field_partial_extents(self): """Test regridding with fields that partially overlap.""" rd = self.test_data.get_rd('cancm4_tas') # california and nevada coll = OcgOperations(dataset=rd, geom='state_boundaries', select_ugid=[23, 25], snippet=True, vector_wrap=False).execute() source = coll.get_element(container_ugid=23) destination = coll.get_element(container_ugid=25) from ocgis.regrid.base import regrid_field res = regrid_field(source, destination) self.assertEqual(res['tas'].get_mask().sum(), 11)
def test_regrid_field(self): """Test with equivalent input and output expectations. The shapes of the grids are equal.""" source = self.get_ofield() source.set_crs(Spherical()) destination = deepcopy(source) desired = deepcopy(source) keywords = dict(split=[False, True], fill_value=[None, 1e20]) for k in itr_products_keywords(keywords, as_namedtuple=True): from ocgis.regrid.base import regrid_field regridded = regrid_field(source, destination, split=k.split) self.assertIsInstance(regridded, Field) self.assertNumpyAll(regridded.grid.get_value_stacked(), desired.grid.get_value_stacked()) self.assertEqual(regridded.crs, source.crs) for variable in regridded.data_variables: self.assertGreater(variable.get_value().mean(), 2.0) self.assertNumpyAll(variable.get_value(), source[variable.name].get_value()) self.assertFalse(np.may_share_memory(variable.get_value(), source[variable.name].get_value()))