def check(self, dtype): data = np.random.random(1920 * 2560).astype(dtype) cube = iris.cube.Cube(data, standard_name='geopotential_height', units='km') grib_message = gribapi.grib_new_from_samples("GRIB2") data_section(cube, grib_message) gribapi.grib_release(grib_message)
def test_simple(self): # Check the simple case of non-masked data with no scaling. cube = iris.cube.Cube(np.arange(5)) grib_message = mock.sentinel.GRIB_MESSAGE with mock.patch(GRIB_API) as grib_api: data_section(cube, grib_message) # Check the use of a mask has been turned off. self.assertBitmapOff(grib_api) # Check the correct data values have been set. self.assertValues(grib_api, np.arange(5))
def test_masked_with_finite_fill_value(self): cube = iris.cube.Cube(np.ma.MaskedArray([1.0, 2.0, 3.0, 1.0, 2.0, 3.0], mask=[0, 0, 0, 1, 1, 1], fill_value=2000)) grib_message = mock.sentinel.GRIB_MESSAGE with mock.patch(GRIB_API) as grib_api: data_section(cube, grib_message) # Check the use of a mask has been turned on. FILL = 2000 self.assertBitmapOn(grib_api, FILL) # Check the correct data values have been set. self.assertValues(grib_api, [1, 2, 3, FILL, FILL, FILL])
def test_masked_with_nan_fill_value(self): cube = iris.cube.Cube(np.ma.MaskedArray([1.0, 2.0, 3.0, 1.0, 2.0, 3.0], mask=[0, 0, 0, 1, 1, 1], fill_value=np.nan)) grib_message = mock.sentinel.GRIB_MESSAGE with mock.patch(GRIB_API) as grib_api: data_section(cube, grib_message) # Check the use of a mask has been turned on and a suitable fill # value has been chosen. FILL = self.assertBitmapRange(grib_api, 1, 3) # Check the correct data values have been set. self.assertValues(grib_api, [1, 2, 3, FILL, FILL, FILL])
def test_scaled(self): # If the Cube's units don't match the units required by GRIB # ensure the data values are scaled correctly. cube = iris.cube.Cube(np.arange(5), standard_name='geopotential_height', units='km') grib_message = mock.sentinel.GRIB_MESSAGE with mock.patch(GRIB_API) as grib_api: data_section(cube, grib_message) # Check the use of a mask has been turned off. self.assertBitmapOff(grib_api) # Check the correct data values have been set. self.assertValues(grib_api, np.arange(5) * 1000)
def test_scaled_with_finite_fill_value(self): # When re-scaling masked data with a finite fill value, ensure # the fill value and any filled values are also re-scaled. cube = iris.cube.Cube(np.ma.MaskedArray([1.0, 2.0, 3.0, 1.0, 2.0, 3.0], mask=[0, 0, 0, 1, 1, 1], fill_value=2000), standard_name='geopotential_height', units='km') grib_message = mock.sentinel.GRIB_MESSAGE with mock.patch(GRIB_API) as grib_api: data_section(cube, grib_message) # Check the use of a mask has been turned on. FILL = 2000 * 1000 self.assertBitmapOn(grib_api, FILL) # Check the correct data values have been set. self.assertValues(grib_api, [1000, 2000, 3000, FILL, FILL, FILL])
def test_scaled_with_nan_fill_value(self): # When re-scaling masked data with a NaN fill value, ensure # a fill value is chosen which allows for the scaling, and any # filled values match the chosen fill value. cube = iris.cube.Cube(np.ma.MaskedArray([-1.0, 2.0, -1.0, 2.0], mask=[0, 0, 1, 1], fill_value=np.nan), standard_name='geopotential_height', units='km') grib_message = mock.sentinel.GRIB_MESSAGE with mock.patch(GRIB_API) as grib_api: data_section(cube, grib_message) # Check the use of a mask has been turned on and a suitable fill # value has been chosen. FILL = self.assertBitmapRange(grib_api, -1000, 2000) # Check the correct data values have been set. self.assertValues(grib_api, [-1000, 2000, FILL, FILL])