Exemple #1
0
 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]))
Exemple #2
0
 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)
Exemple #4
0
    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])
Exemple #5
0
 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"))
Exemple #6
0
 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)
Exemple #7
0
 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'))
Exemple #8
0
    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]))
Exemple #9
0
    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])
Exemple #10
0
    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])
Exemple #11
0
    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]))
Exemple #12
0
    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)
Exemple #13
0
 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)
Exemple #14
0
 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])
Exemple #15
0
 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)
Exemple #16
0
 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])