def test_with_separate_mask_cube_and_nan(self): """Test for an input cube and an additional mask cube.""" mask_cube = self.cube.copy() self.cube.data[1, 3] = 0.5 self.cube.data[3, 3] = 0.5 self.cube.data[1, 2] = np.nan self.cube.data[3, 1] = np.nan mask_cube.data = np.ones((5, 5)) mask_cube.data[self.cube.data == 0.5] = 0 mask_cube.data = mask_cube.data.astype(int) expected_mask = np.ones((5, 5)) expected_mask[1, 3] = 0.0 expected_mask[3, 3] = 0.0 expected_mask[1, 2] = 0.0 expected_mask[3, 1] = 0.0 expected_data = self.cube.data * expected_mask expected_data[1, 2] = 0.0 expected_data[3, 1] = 0.0 expected_nans = np.ones((5, 5)).astype(bool)*False expected_nans[1, 2] = True expected_nans[3, 1] = True result_cube, result_mask, result_nan_array = ( SquareNeighbourhood.set_up_cubes_to_be_neighbourhooded( self.cube.copy(), mask_cube=mask_cube)) self.assertIsInstance(result_cube, Cube) self.assertIsInstance(result_mask, Cube) self.assertArrayAlmostEqual(result_cube.data, expected_data) self.assertArrayAlmostEqual(result_mask.data, expected_mask) self.assertArrayEqual(result_nan_array, expected_nans)
def test_without_masked_data(self): """Test setting up cubes to be neighbourhooded when the input cube does not contain masked arrays.""" expected_mask = np.ones((5, 5)) expected_nans = expected_mask.astype(bool)*False cube, mask, nan_array = ( SquareNeighbourhood.set_up_cubes_to_be_neighbourhooded(self.cube)) self.assertIsInstance(cube, Cube) self.assertIsInstance(mask, Cube) self.assertEqual(cube, self.cube) self.assertArrayEqual(nan_array, expected_nans) self.assertArrayEqual(mask.data, expected_mask)
def test_with_masked_data(self): """Test setting up cubes to be neighbourhooded when the input cube contains masked arrays.""" cube = self.cube data = cube.data cube.data[1, 3] = 0.5 cube.data[3, 3] = 0.5 cube.data = np.ma.masked_equal(data, 0.5) mask = np.logical_not(cube.data.mask.astype(int)) expected_nans = np.ones((5, 5)).astype(bool)*False data = cube.data.data * mask result_cube, result_mask, result_nan_array = ( SquareNeighbourhood.set_up_cubes_to_be_neighbourhooded( cube.copy())) self.assertArrayAlmostEqual(result_cube.data, data) self.assertArrayAlmostEqual(result_mask.data, mask) self.assertArrayEqual(result_nan_array, expected_nans)