def test_vector_t1(self): field = self._field() field.lbtim = 11 field.t2 = netcdftime.datetime(1970, 1, 1, 12) t1 = ([netcdftime.datetime(1970, 1, 1, 18), netcdftime.datetime(1970, 1, 2, 0), netcdftime.datetime(1970, 1, 2, 6)], [0]) collation = mock.Mock(fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={'t1': t1}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([18, 24, 30], 'time', units='hours since epoch'), (0,)) ] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ (iris.coords.DimCoord(12, 'forecast_reference_time', units='hours since epoch'), None), (iris.coords.DimCoord([6, 12, 18], 'forecast_period', units='hours'), (0,)) ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vector_t1_and_t2(self): field = self._field() field.lbtim = 11 t1 = ([netcdftime.datetime(1970, 1, 2, 6), netcdftime.datetime(1970, 1, 2, 9), netcdftime.datetime(1970, 1, 2, 12)], [1]) t2 = ([netcdftime.datetime(1970, 1, 1, 12), netcdftime.datetime(1970, 1, 2, 0)], [0]) collation = mock.Mock(fields=[field], vector_dims_shape=(2, 3), element_arrays_and_dims={'t1': t1, 't2': t2}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 3), (LATITUDE, 2), (iris.coords.DimCoord([30, 33, 36], 'time', units='hours since epoch'), (1,)), (iris.coords.DimCoord([12, 24], 'forecast_reference_time', units='hours since epoch'), (0,))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ (iris.coords.AuxCoord([[18, 21, 24], [6, 9, 12]], 'forecast_period', units='hours'), (0, 1)) ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_soil_depth(self): field = self._field() field.lbvc = 6 points = [10, 20, 30] lower = [0, 15, 25] upper = [15, 25, 35] blev = (points, (0,)) brsvd1 = (lower, (0,)) brlev = (upper, (0,)) collation = mock.Mock(fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={'blev': blev, 'brsvd1': brsvd1, 'brlev': brlev}) metadata = convert_collation(collation) self._check_phenomenon(metadata) depth = iris.coords.DimCoord(points, standard_name='depth', bounds=np.vstack((lower, upper)).T, units='m', attributes={'positive': 'down'}) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (depth, (0,))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vector_lbft(self): field = self._field() field.lbtim = 21 field.t1 = netcdftime.datetime(1970, 1, 1, 12) field.t2 = netcdftime.datetime(1970, 1, 1, 18) lbft = ([18, 15, 12], [0]) collation = mock.Mock(fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={'lbft': lbft}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([0, 3, 6], 'forecast_reference_time', units='hours since epoch'), (0,))] coords_and_dims = [ (iris.coords.DimCoord(15, 'time', units='hours since epoch', bounds=[[12, 18]]), None), (iris.coords.DimCoord([15, 12, 9], 'forecast_period', units='hours', bounds=[[12, 18], [9, 15], [6, 12]]), (0,)) ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vector_lbft(self): field = self._field() field.lbtim = 21 field.t1 = netcdftime.datetime(1970, 1, 1, 12) field.t2 = netcdftime.datetime(1970, 1, 1, 18) lbft = ([18, 15, 12], [0]) collation = mock.Mock(fields=[field], vector_dims_shape=(3, ), element_arrays_and_dims={'lbft': lbft}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([0, 3, 6], 'forecast_reference_time', units='hours since epoch'), (0, ))] coords_and_dims = [(iris.coords.DimCoord(15, 'time', units='hours since epoch', bounds=[[12, 18]]), None), (iris.coords.DimCoord([15, 12, 9], 'forecast_period', units='hours', bounds=[[12, 18], [9, 15], [6, 12]]), (0, ))] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vector_t2(self): field = self._field() field.lbtim = 11 field.t1 = netcdftime.datetime(1970, 1, 1, 18) t2 = ( [ netcdftime.datetime(1970, 1, 1, 12), netcdftime.datetime(1970, 1, 1, 15), netcdftime.datetime(1970, 1, 1, 18), ], [0], ) collation = mock.Mock(fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={"t2": t2}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [ (LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([12, 15, 18], "forecast_reference_time", units="hours since epoch"), (0,)), ] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ (iris.coords.DimCoord(18, "time", units="hours since epoch"), None), (iris.coords.DimCoord([6, 3, 0.0], "forecast_period", units="hours"), (0,)), ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vector_t2(self): field = self._field() field.lbtim = 11 field.t1 = netcdftime.datetime(1970, 1, 1, 18) t2 = ([ netcdftime.datetime(1970, 1, 1, 12), netcdftime.datetime(1970, 1, 1, 15), netcdftime.datetime(1970, 1, 1, 18) ], [0]) collation = mock.Mock(fields=[field], vector_dims_shape=(3, ), element_arrays_and_dims={'t2': t2}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([12, 15, 18], 'forecast_reference_time', units='hours since epoch'), (0, ))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [(iris.coords.DimCoord(18, 'time', units='hours since epoch'), None), (iris.coords.DimCoord([6, 3, 0.], 'forecast_period', units='hours'), (0, ))] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vector_t1_and_t2(self): field = self._field() field.lbtim = 11 t1 = ([ netcdftime.datetime(1970, 1, 2, 6), netcdftime.datetime(1970, 1, 2, 9), netcdftime.datetime(1970, 1, 2, 12) ], [1]) t2 = ([ netcdftime.datetime(1970, 1, 1, 12), netcdftime.datetime(1970, 1, 2, 0) ], [0]) collation = mock.Mock(fields=[field], vector_dims_shape=(2, 3), element_arrays_and_dims={ 't1': t1, 't2': t2 }) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [ (LONGITUDE, 3), (LATITUDE, 2), (iris.coords.DimCoord([30, 33, 36], 'time', units='hours since epoch'), (1, )), (iris.coords.DimCoord([12, 24], 'forecast_reference_time', units='hours since epoch'), (0, )) ] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [(iris.coords.AuxCoord([[18, 21, 24], [6, 9, 12]], 'forecast_period', units='hours'), (0, 1))] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vertical_hybrid_height(self): field = self._field() field.lbvc = 65 blev = ([5, 18, 38], (0,)) lblev = ([1000, 850, 700], (0,)) brsvd1 = ([10, 26, 50], (0,)) brsvd2 = ([0.9989, 0.9970, 0.9944], (0,)) brlev = ([0, 10, 26], (0,)) bhrlev = ([1, 0.9989, 0.9970], (0,)) lblev = ([1, 2, 3], (0,)) bhlev = ([0.9994, 0.9979, 0.9957], (0,)) collation = mock.Mock( fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={ "blev": blev, "lblev": lblev, "brsvd1": brsvd1, "brsvd2": brsvd2, "brlev": brlev, "bhrlev": bhrlev, "lblev": lblev, "bhlev": bhlev, }, ) metadata = convert_collation(collation) factory = iris.fileformats.rules.Factory( iris.aux_factory.HybridHeightFactory, [{"long_name": "level_height"}, {"long_name": "sigma"}, iris.fileformats.rules.Reference("orography")], ) self._check_phenomenon(metadata, factory) coords_and_dims = [ (LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([1, 2, 3], "model_level_number", attributes={"positive": "up"}), (0,)), ] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ ( iris.coords.DimCoord( [5, 18, 38], long_name="level_height", units="m", bounds=[[0, 10], [10, 26], [26, 50]], attributes={"positive": "up"}, ), (0,), ), ( iris.coords.AuxCoord( [0.9994, 0.9979, 0.9957], long_name="sigma", bounds=[[1, 0.9989], [0.9989, 0.9970], [0.9970, 0.9944]], ), (0,), ), ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vertical_hybrid_height(self): field = self._field() field.lbvc = 65 blev = ([5, 18, 38], (0, )) lblev = ([1000, 850, 700], (0, )) brsvd1 = ([10, 26, 50], (0, )) brsvd2 = ([0.9989, 0.9970, 0.9944], (0, )) brlev = ([0, 10, 26], (0, )) bhrlev = ([1, 0.9989, 0.9970], (0, )) lblev = ([1, 2, 3], (0, )) bhlev = ([0.9994, 0.9979, 0.9957], (0, )) collation = mock.Mock(fields=[field], vector_dims_shape=(3, ), element_arrays_and_dims={ 'blev': blev, 'lblev': lblev, 'brsvd1': brsvd1, 'brsvd2': brsvd2, 'brlev': brlev, 'bhrlev': bhrlev, 'lblev': lblev, 'bhlev': bhlev }) metadata = convert_collation(collation) factory = iris.fileformats.rules.Factory( iris.aux_factory.HybridHeightFactory, [{ 'long_name': 'level_height' }, { 'long_name': 'sigma' }, iris.fileformats.rules.Reference('orography')]) self._check_phenomenon(metadata, factory) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([1, 2, 3], 'model_level_number', attributes={'positive': 'up'}), (0, ))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [(iris.coords.DimCoord([5, 18, 38], long_name='level_height', units='m', bounds=[[0, 10], [10, 26], [26, 50]], attributes={'positive': 'up'}), (0, )), (iris.coords.AuxCoord([0.9994, 0.9979, 0.9957], long_name='sigma', bounds=[[1, 0.9989], [0.9989, 0.9970], [0.9970, 0.9944]]), (0, ))] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_all_scalar(self): field = self._field() field.lbtim = 11 field.t1 = netcdftime.datetime(1970, 1, 1, 18) field.t2 = netcdftime.datetime(1970, 1, 1, 12) collation = mock.Mock(fields=[field], vector_dims_shape=(), element_arrays_and_dims={}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 1), (LATITUDE, 0)] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ (iris.coords.DimCoord(18, "time", units="hours since epoch"), None), (iris.coords.DimCoord(12, "forecast_reference_time", units="hours since epoch"), None), (iris.coords.DimCoord(6, "forecast_period", units="hours"), None), ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vertical_pressure(self): field = self._field() field.lbvc = 8 blev = ([1000, 850, 700], (0,)) lblev = ([1000, 850, 700], (0,)) collation = mock.Mock( fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={"blev": blev, "lblev": lblev} ) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [ (LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([1000, 850, 700], long_name="pressure", units="hPa"), (0,)), ] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vertical_hybrid_height(self): field = self._field() field.lbvc = 65 blev = ([5, 18, 38], (0,)) lblev = ([1000, 850, 700], (0,)) brsvd1 = ([10, 26, 50], (0,)) brsvd2 = ([0.9989, 0.9970, 0.9944], (0,)) brlev = ([0, 10, 26], (0,)) bhrlev = ([1, 0.9989, 0.9970], (0,)) lblev = ([1, 2, 3], (0,)) bhlev = ([0.9994, 0.9979, 0.9957], (0,)) collation = mock.Mock(fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={'blev': blev, 'lblev': lblev, 'brsvd1': brsvd1, 'brsvd2': brsvd2, 'brlev': brlev, 'bhrlev': bhrlev, 'lblev': lblev, 'bhlev': bhlev}) metadata = convert_collation(collation) factory = iris.fileformats.rules.Factory( iris.aux_factory.HybridHeightFactory, [{'long_name': 'level_height'}, {'long_name': 'sigma'}, iris.fileformats.rules.Reference('orography')]) self._check_phenomenon(metadata, factory) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([1, 2, 3], 'model_level_number', attributes={'positive': 'up'} ), (0,))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ (iris.coords.DimCoord([5, 18, 38], long_name='level_height', units='m', bounds=[[0, 10], [10, 26], [26, 50]], attributes={'positive': 'up'}), (0,)), (iris.coords.AuxCoord([0.9994, 0.9979, 0.9957], long_name='sigma', bounds=[[1, 0.9989], [0.9989, 0.9970], [0.9970, 0.9944]]), (0,)) ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_vertical_pressure(self): field = self._field() field.lbvc = 8 blev = ([1000, 850, 700], (0, )) lblev = ([1000, 850, 700], (0, )) collation = mock.Mock(fields=[field], vector_dims_shape=(3, ), element_arrays_and_dims={ 'blev': blev, 'lblev': lblev }) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (iris.coords.DimCoord([1000, 850, 700], long_name='pressure', units='hPa'), (0, ))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_all_scalar(self): field = self._field() field.lbtim = 11 field.t1 = netcdftime.datetime(1970, 1, 1, 18) field.t2 = netcdftime.datetime(1970, 1, 1, 12) collation = mock.Mock(fields=[field], vector_dims_shape=(), element_arrays_and_dims={}) metadata = convert_collation(collation) self._check_phenomenon(metadata) coords_and_dims = [(LONGITUDE, 1), (LATITUDE, 0)] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [ (iris.coords.DimCoord(18, 'time', units='hours since epoch'), None), (iris.coords.DimCoord(12, 'forecast_reference_time', units='hours since epoch'), None), (iris.coords.DimCoord(6, 'forecast_period', units='hours'), None) ] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)
def test_soil_level(self): field = self._field() field.lbvc = 6 points = [10, 20, 30] lower = [0] * 3 upper = [0] * 3 lblev = (points, (0,)) brsvd1 = (lower, (0,)) brlev = (upper, (0,)) collation = mock.Mock(fields=[field], vector_dims_shape=(3,), element_arrays_and_dims={'lblev': lblev, 'brsvd1': brsvd1, 'brlev': brlev}) metadata = convert_collation(collation) self._check_phenomenon(metadata) level = iris.coords.DimCoord(points, long_name='soil_model_level_number', attributes={'positive': 'down'}) coords_and_dims = [(LONGITUDE, 2), (LATITUDE, 1), (level, (0,))] self.assertEqual(metadata.dim_coords_and_dims, coords_and_dims) coords_and_dims = [] self.assertEqual(metadata.aux_coords_and_dims, coords_and_dims)