class Test_calculate_difference(IrisTest): """Test the calculate_difference method.""" def setUp(self): """Set up cube.""" data = np.array([[1, 2, 3], [2, 4, 6], [5, 10, 15]]) self.cube = set_up_cube(data, "wind_speed", "m s-1") self.plugin = DifferenceBetweenAdjacentGridSquares() def test_x_dimension(self): """Test differences calculated along the x dimension.""" expected = np.array([[1, 1], [2, 2], [5, 5]]) result = self.plugin.calculate_difference(self.cube, "x") self.assertIsInstance(result, Cube) self.assertArrayAlmostEqual(result.data, expected) def test_y_dimension(self): """Test differences calculated along the y dimension.""" expected = np.array([[1, 2, 3], [3, 6, 9]]) result = self.plugin.calculate_difference(self.cube, "y") self.assertIsInstance(result, Cube) self.assertArrayAlmostEqual(result.data, expected) def test_missing_data(self): """Test that the result is as expected when data is missing.""" data = np.array([[1, 2, 3], [np.nan, 4, 6], [5, 10, 15]]) cube = set_up_cube(data, "wind_speed", "m s-1") expected = np.array([[np.nan, 2, 3], [np.nan, 6, 9]]) result = self.plugin.calculate_difference(cube, "y") self.assertIsInstance(result, Cube) self.assertArrayAlmostEqual(result.data, expected) def test_masked_data(self): """Test that the result is as expected when data is masked.""" data = ma.array([[1, 2, 3], [2, 4, 6], [5, 10, 15]], mask=[[0, 0, 0], [1, 0, 0], [0, 0, 0]]) cube = set_up_cube(data, "wind_speed", "m s-1") expected = ma.array([[1, 2, 3], [3, 6, 9]], mask=[[1, 0, 0], [1, 0, 0]]) result = self.plugin.calculate_difference(cube, "y") self.assertIsInstance(result, Cube) self.assertArrayEqual(result.data, expected) self.assertArrayEqual(result.data.mask, expected.mask)
class Test_gradient_from_diff(IrisTest): """Test for correct behaviour when calculating a gradient""" def setUp(self): """Set up cube.""" data = np.array([[1, 2, 3], [2, 4, 2], [5, 10, 15]]) x_coord = DimCoord(2.*np.arange(3), "projection_x_coordinate") y_coord = DimCoord(2.*np.arange(3), "projection_y_coordinate") self.cube = iris.cube.Cube(data, "wind_speed", units="m s-1", dim_coords_and_dims=[(y_coord, 0), (x_coord, 1)]) self.plugin = DifferenceBetweenAdjacentGridSquares(gradient=True) def test_basic(self): """Test contents and metadata""" expected = np.array([[0.5, 0.5, 0.5], [2.0, 0.0, -2.0], [2.5, 2.5, 2.5]]) xdiff = self.plugin.calculate_difference(self.cube, "x") result = self.plugin.gradient_from_diff(xdiff, self.cube, "x") self.assertArrayAlmostEqual(result.data, expected) self.assertEqual(result.name(), "gradient_of_wind_speed")