コード例 #1
0
    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)
コード例 #2
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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)
コード例 #3
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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)
コード例 #4
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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)
コード例 #5
0
    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)
コード例 #6
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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)
コード例 #7
0
    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)
コード例 #8
0
    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()))
コード例 #9
0
    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)
コード例 #10
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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]))
コード例 #11
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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)
コード例 #12
0
    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]))
コード例 #13
0
    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)
コード例 #14
0
ファイル: test_base.py プロジェクト: NCPP/ocgis
    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()))