def test_static_level(self): for axis in self.axes: result = relevel(self.cube, self.src_levels, [2, 2], axis=axis) assert_array_equal(result.data.flatten(), np.array([20, 20]))
def test_non_monotonic(self): for axis in self.axes: result = relevel(self.cube, self.src_levels, [2, 3, 2], axis=axis) assert_array_equal(result.data.flatten(), np.array([20, 30, np.nan])) expected = AuxCoord([2, 3, 2], units=1, long_name="thingness") self.assertEqual(result.coord("thingness"), expected)
def interp_to_pressure_levels( cubelist, constraint, levels, coord_src=UM_HGT, pressure_cube="air_pressure" ): """ A wrapper for relevel() function. Parameters ---------- cubelist: iris.cube.CubeList List of cubes containing a `varname` cube and a cube of air pressure. constraint: str or iris.Constraint Variable name or constraint to extract a cube from `cubelist`. levels: array-like Sequence of pressure levels (same units as `pressure_cube`). Returns ------- iris.cube.Cube Cube of `varname` interpolated to pressure levels. """ cube = cubelist.extract_strict(constraint) pres = cubelist.extract_strict(pressure_cube) cube_plev = stratify.relevel(cube, pres, levels, axis=coord_src) cube_plev.coord(pressure_cube).attributes = {} return iris.util.squeeze(cube_plev)
def test_coord_input(self): source = AuxCoord(self.src_levels.data) source.metadata = self.src_levels.metadata for axis in self.axes: result = relevel(self.cube, source, [0, 12, 13], axis=axis) self.assertEqual(result.shape, (3, 1, 1)) assert_array_equal(result.data.flatten(), [0, 120, np.nan])
def test_standard_input(self): for axis in self.axes: result = relevel(self.cube, self.src_levels, [-1, 0, 5.5], axis=axis) assert_array_equal(result.data.flatten(), np.array([np.nan, 0, 55])) expected = DimCoord([-1, 0, 5.5], units=1, long_name="thingness") self.assertEqual(expected, result.coord("thingness"))
def test_non_monotonic(self): for axis in self.axes: result = relevel(self.cube, self.src_levels, [2, 3, 2], axis=axis) assert_array_equal(result.data.flatten(), np.array([20, 30, np.nan])) expected = AuxCoord([2, 3, 2], units=1, long_name='thingness') self.assertEqual(result.coord('thingness'), expected)
def test_standard_input(self): for axis in self.axes: result = relevel(self.cube, self.src_levels, [-1, 0, 5.5], axis=axis) assert_array_equal(result.data.flatten(), np.array([np.nan, 0, 55])) expected = DimCoord([-1, 0, 5.5], units=1, long_name='thingness') self.assertEqual(expected, result.coord('thingness'))
def test_custom_interpolator(self): interpolator = partial(stratify.interpolate, interpolation='nearest') for axis in self.axes: result = relevel(self.cube, self.src_levels, [-1, 0, 6.5], axis=axis, interpolator=interpolator) assert_array_equal(result.data.flatten(), np.array([np.nan, 0, 120]))
def test_coord_input(self): source = AuxCoord(self.src_levels.data) metadata = self.src_levels.metadata._asdict() metadata["coord_system"] = None metadata["climatological"] = None source.metadata = metadata for axis in self.axes: result = relevel(self.cube, source, [0, 12, 13], axis=axis) self.assertEqual(result.shape, (3, 1, 1)) assert_array_equal(result.data.flatten(), [0, 120, np.nan])
def test_multi_dim_target_levels(self): interpolator = partial(stratify.interpolate, interpolation='linear', extrapolation='linear') for axis in self.axes: result = relevel(self.cube, self.src_levels, self.src_levels.data, axis=axis, interpolator=interpolator) assert_array_equal(result.data.flatten(), np.array([0, 120])) self.assertCML(result)
def test_broadcast_fail_tgt_levels(self): emsg = "Cannot broadcast the cube and tgt_levels" data = np.arange(60).reshape(3, 4, 5) with self.assertRaisesRegex(ValueError, emsg): relevel(self.cube, self.coord, data)
def test_broadcast_fail_src_levels(self): emsg = "Cannot broadcast the cube and src_levels" data = np.arange(60).reshape(3, 4, 5) with self.assertRaisesRegex(ValueError, emsg): relevel(self.cube, AuxCoord(data), [1, 2, 3])
def test_broadcast_fail_tgt_levels(self): emsg = 'Cannot broadcast the cube and tgt_levels' data = np.arange(60).reshape(3, 4, 5) with self.assertRaisesRegexp(ValueError, emsg): relevel(self.cube, self.coord, data)
def test_broadcast_fail_src_levels(self): emsg = 'Cannot broadcast the cube and src_levels' data = np.arange(60).reshape(3, 4, 5) with self.assertRaisesRegexp(ValueError, emsg): relevel(self.cube, AuxCoord(data), [1, 2, 3])