def test_cubelist_input(self): """Test when supplying a cubelist as input containing cubes representing UK deterministic and UK ensemble model configuration and unifying the forecast_reference_time, so that both model configurations have a common forecast_reference_time.""" cube_uk_ens = set_up_variable_cube( np.full((3, 4, 4), 273.15, dtype=np.float32), time=self.cycletime, frt=datetime(2017, 1, 10, 4)) # set up forecast periods of 5, 7 and 9 hours time_points = [1484031600, 1484038800, 1484046000] cube_uk_ens = add_coordinate( cube_uk_ens, time_points, "time", dtype=np.int64, coord_units="seconds since 1970-01-01 00:00:00") expected_uk_det = self.cube_uk_det.copy() frt_units = expected_uk_det.coord('forecast_reference_time').units frt_points = [ np.round(frt_units.date2num(self.cycletime)).astype(np.int64)] expected_uk_det.coord("forecast_reference_time").points = frt_points expected_uk_det.coord("forecast_period").points = ( np.array([3, 5, 7]) * 3600) expected_uk_ens = cube_uk_ens.copy() expected_uk_ens.coord("forecast_reference_time").points = frt_points expected_uk_ens.coord("forecast_period").points = ( np.array([1, 3, 5]) * 3600) expected = iris.cube.CubeList([expected_uk_det, expected_uk_ens]) cubes = iris.cube.CubeList([self.cube_uk_det, cube_uk_ens]) result = unify_cycletime(cubes, self.cycletime) self.assertIsInstance(result, iris.cube.CubeList) self.assertEqual(result, expected)
def test_single_item_cubelist_input(self): """Test when supplying a cube representing a UK deterministic model configuration only. This effectively updates the forecast_reference_time on the cube to the specified cycletime.""" expected_uk_det = self.cube_uk_det.copy() frt_units = expected_uk_det.coord('forecast_reference_time').units frt_points = [ np.round(frt_units.date2num(self.cycletime)).astype(np.int64)] expected_uk_det.coord("forecast_reference_time").points = frt_points expected_uk_det.coord("forecast_period").points = ( np.array([3, 5, 7]) * 3600) result = unify_cycletime([self.cube_uk_det], self.cycletime) self.assertIsInstance(result, iris.cube.CubeList) self.assertEqual(result[0], expected_uk_det)
def test_input_no_forecast_period_coordinate(self): """Test when supplying a cube representing a UK deterministic model configuration only. This forces a forecast_period coordinate to be created from a forecast_reference_time coordinate and a time coordinate.""" expected_uk_det = self.cube_uk_det.copy() frt_units = expected_uk_det.coord('forecast_reference_time').units frt_points = [ np.round(frt_units.date2num(self.cycletime)).astype(np.int64)] expected_uk_det.coord("forecast_reference_time").points = frt_points expected_uk_det.coord("forecast_period").points = ( np.array([3, 5, 7]) * 3600) cube_uk_det = self.cube_uk_det.copy() cube_uk_det.remove_coord("forecast_period") result = unify_cycletime([cube_uk_det], self.cycletime) self.assertIsInstance(result, iris.cube.CubeList) self.assertEqual(result[0], expected_uk_det)