def test_get_sdim_from_esmf_grid(self): rd = ocgis.RequestDataset(**self.get_dataset()) keywords = dict( has_corners=[True, False], has_mask=[True, False], crs=[None, CoordinateReferenceSystem(epsg=4326)] ) for k in itr_products_keywords(keywords, as_namedtuple=True): field = rd.get() sdim = field.spatial if not k.has_corners: sdim.grid.row.remove_bounds() sdim.grid.col.remove_bounds() self.assertIsNone(sdim.grid.corners) egrid = get_esmf_grid_from_sdim(sdim) if not k.has_mask: egrid.mask[0][2, 2] = 0 sdim.grid.value.mask[:, 2, 2] = True if k.has_corners: sdim.grid.corners.mask[:, 2, 2] = True nsdim = get_sdim_from_esmf_grid(egrid, crs=k.crs) self.assertEqual(nsdim.crs, k.crs) self.assertNumpyAll(sdim.grid.value, nsdim.grid.value) if k.has_corners: self.assertNumpyAll(sdim.grid.corners, nsdim.grid.corners) else: self.assertIsNone(nsdim.grid.corners)
def test_get_esmf_grid_from_sdim_with_mask(self): """Test with masked data.""" rd = self.test_data.get_rd("cancm4_tas") ops = ocgis.OcgOperations( dataset=rd, geom="state_boundaries", select_ugid=[23], snippet=True, vector_wrap=False ) ret = ops.execute() field = ret[23]["tas"] egrid = get_esmf_grid_from_sdim(field.spatial) actual = np.array([[0, 0, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]], dtype=np.int32) self.assertNumpyAll(egrid.mask[0], actual) sdim = get_sdim_from_esmf_grid(egrid) self.assertNumpyAll(sdim.get_mask(), field.spatial.get_mask()) actual = np.array( [ [ [[True, True, True, True], [True, True, True, True], [False, False, False, False]], [[False, False, False, False], [False, False, False, False], [False, False, False, False]], [[False, False, False, False], [False, False, False, False], [False, False, False, False]], [[False, False, False, False], [False, False, False, False], [False, False, False, False]], ], [ [[True, True, True, True], [True, True, True, True], [False, False, False, False]], [[False, False, False, False], [False, False, False, False], [False, False, False, False]], [[False, False, False, False], [False, False, False, False], [False, False, False, False]], [[False, False, False, False], [False, False, False, False], [False, False, False, False]], ], ] ) self.assertNumpyAll(actual, sdim.grid.corners.mask)
def test_get_sdim_from_esmf_grid(self): rd = ocgis.RequestDataset(**self.get_dataset()) keywords = dict( has_corners=[True, False], has_mask=[True, False], crs=[None, CoordinateReferenceSystem(epsg=4326)] ) for k in itr_products_keywords(keywords, as_namedtuple=True): field = rd.get() sdim = field.spatial egrid = get_esmf_grid_from_sdim(sdim) if not k.has_mask: # set the grid flag to indicate no mask is present egrid.item_done[ESMF.StaggerLoc.CENTER][0] = False # remove the mask from the grid egrid.mask[0] = [1] else: egrid.mask[0][2, 2] = 0 sdim.grid.value.mask[:, 2, 2] = True sdim.grid.corners.mask[:, 2, 2] = True if not k.has_corners: egrid.coords[ESMF.StaggerLoc.CORNER] = [np.array(0.0), np.array(0.0)] egrid.coords_done[ESMF.StaggerLoc.CORNER] = [False, False] nsdim = get_sdim_from_esmf_grid(egrid, crs=k.crs) self.assertEqual(nsdim.crs, k.crs) self.assertNumpyAll(sdim.grid.value, nsdim.grid.value) if k.has_corners: self.assertNumpyAll(sdim.grid.corners, nsdim.grid.corners) else: self.assertIsNone(nsdim.grid.corners)