def test_fail_src_tgt_cs_mismatch(self): cs = GeogCS(1000.0) self.src_cube.coord('latitude').coord_system = cs self.src_cube.coord('longitude').coord_system = cs msg_re = 'Source and target.*same coordinate system' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_src_tgt_cs_mismatch(self): cs = GeogCS(1000.0) self.src_cube.coord("latitude").coord_system = cs self.src_cube.coord("longitude").coord_system = cs msg_re = "Source and target.*same coordinate system" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_non_latlon_units_mismatch(self): # Convert all to non-latlon system (does work: see in "Test__call__"). for cube in (self.src_cube, self.grid_cube): for axis_name in ("x", "y"): coord = cube.coord(axis=axis_name) coord_name = "projection_{}_coordinate".format(axis_name) coord.rename(coord_name) coord.units = "m" # Change one of the output units. self.grid_cube.coord(axis="x").units = "1" msg_re = "Source and target.*must have the same units" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_non_latlon_units_mismatch(self): # Convert all to non-latlon system (does work: see in "Test__call__"). for cube in (self.src_cube, self.grid_cube): for axis_name in ('x', 'y'): coord = cube.coord(axis=axis_name) coord_name = 'projection_{}_coordinate'.format(axis_name) coord.rename(coord_name) coord.units = 'm' # Change one of the output units. self.grid_cube.coord(axis='x').units = '1' msg_re = 'Source and target.*must have the same units' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def _check_expected( self, src_cube=None, grid_cube=None, expected_data=None, expected_coord_names=None, ): # Test regridder creation + operation against expected results. if src_cube is None: src_cube = self.src_cube if grid_cube is None: grid_cube = self.grid_cube gridder = unn_gridder(src_cube, grid_cube) result = gridder(src_cube) if expected_coord_names is not None: # Check result coordinate identities. self.assertEqual( [coord.name() for coord in result.coords()], expected_coord_names, ) if expected_data is None: # By default, check against the 'standard' data result. expected_data = self.expected_data self.assertArrayEqual(result.data, expected_data) return result
def test_compatible_source(self): # Check operation on data with different dimensions to the original # source cube for the regridder creation. gridder = unn_gridder(self.src_cube, self.grid_cube) result = gridder(self.src_z_cube) self.assertEqual([coord.name() for coord in result.coords()], ['z', 'latitude', 'longitude']) self.assertArrayEqual(result.data, self.expected_data_zxy)
def test_fail_incompatible_source(self): # Check that a slightly modified source cube is *not* acceptable. modified_src_cube = self.src_cube.copy() points = modified_src_cube.coord(axis="x").points points[0] += 0.01 modified_src_cube.coord(axis="x").points = points gridder = unn_gridder(self.src_cube, self.grid_cube) msg = "not defined on the same source grid" with self.assertRaisesRegex(ValueError, msg): gridder(modified_src_cube)
def test_fail_incompatible_source(self): # Check that a slightly modified source cube is *not* acceptable. modified_src_cube = self.src_cube.copy() points = modified_src_cube.coord(axis='x').points points[0] += 0.01 modified_src_cube.coord(axis='x').points = points gridder = unn_gridder(self.src_cube, self.grid_cube) msg = 'not defined on the same source grid' with self.assertRaisesRegexp(ValueError, msg): gridder(modified_src_cube)
def _check_expected(self, src_cube=None, grid_cube=None, expected_data=None, expected_coord_names=None): # Test regridder creation + operation against expected results. if src_cube is None: src_cube = self.src_cube if grid_cube is None: grid_cube = self.grid_cube gridder = unn_gridder(src_cube, grid_cube) result = gridder(src_cube) if expected_coord_names is not None: # Check result coordinate identities. self.assertEqual([coord.name() for coord in result.coords()], expected_coord_names) if expected_data is None: # By default, check against the 'standard' data result. expected_data = self.expected_data self.assertArrayEqual(result.data, expected_data) return result
def test_fail_no_tgt_y(self): self.grid_cube.remove_coord("latitude") msg_re = "must contain a single 1D y coordinate" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_mixed_latlons(self): self.src_cube.coord('longitude').rename('projection_x_coordinate') msg_re = 'any.*latitudes/longitudes.*all must be' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_bad_latlon_units(self): self.grid_cube.coord("longitude").units = "m" msg_re = 'does not convert to "degrees"' with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_mixed_latlons(self): self.src_cube.coord("longitude").rename("projection_x_coordinate") msg_re = "any.*latitudes/longitudes.*all must be" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_bad_src_dims(self): self.src_cube = self.grid_cube msg_re = "Source.*same cube dimensions" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_no_src_y(self): self.src_cube.remove_coord("latitude") msg_re = "Source cube must have X- and Y-axis coordinates" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_tgt_cs_mismatch(self): cs = GeogCS(1000.0) self.grid_cube.coord('latitude').coord_system = cs msg_re = 'x.*and y.*must have the same coordinate system' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_src_cs_mismatch(self): cs = GeogCS(1000.0) self.src_cube.coord('latitude').coord_system = cs msg_re = 'must all have the same coordinate system' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_bad_src_dims(self): self.src_cube = self.grid_cube msg_re = 'Source.*same cube dimensions' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_bad_latlon_units(self): self.grid_cube.coord('longitude').units = 'm' msg_re = 'does not convert to "degrees"' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_tgt_cs_mismatch(self): cs = GeogCS(1000.0) self.grid_cube.coord("latitude").coord_system = cs msg_re = "x.*and y.*must have the same coordinate system" with self.assertRaisesRegex(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_no_src_x(self): self.src_cube.remove_coord('longitude') msg_re = 'Source cube must have X- and Y-axis coordinates' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_no_tgt_y(self): self.grid_cube.remove_coord('latitude') msg_re = 'must contain a single 1D y coordinate' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_no_tgt_x(self): self.grid_cube.remove_coord('longitude') msg_re = 'must contain a single 1D x coordinate' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)
def test_fail_no_src_y(self): self.src_cube.remove_coord('latitude') msg_re = 'Source cube must have X- and Y-axis coordinates' with self.assertRaisesRegexp(ValueError, msg_re): unn_gridder(self.src_cube, self.grid_cube)