def _check_soil_level(self, lbcode, expect_match=True):
     lbvc = 6
     lblev = 12.3
     brsvd1, brlev = 0, 0
     stash = STASH(1, 1, 1)
     blev, bhlev, bhrlev, brsvd2 = None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [(DimCoord([lblev],
                                    long_name='soil_model_level_number',
                                    attributes={'positive': 'down'}), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def test_valid(self, expect_match=True):
     lbvc = 65
     lblev = 37.0
     bhlev = 0.35  # sigma
     bhrlev, brsvd2 = 0.31, 0.39  # sigma bounds
     blev = 9596.3  # level_height
     brlev, brsvd1 = 9500.0, 9800.0  # level_height bounds
     lbcode = _lbcode(0)  # unused
     stash = STASH(1, 1, 1)  # unused
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_coords_and_dims = [
             (DimCoord([37.0],
                       standard_name='model_level_number',
                       attributes={'positive': 'up'}), None),
             (DimCoord([9596.3],
                       long_name='level_height', units='m',
                       bounds=[brlev, brsvd1],
                       attributes={'positive': 'up'}), None),
             (AuxCoord([0.35],
                       long_name='sigma', bounds=[bhrlev, brsvd2]), None)]
         expect_factories = [(HybridHeightFactory,
                              [{'long_name': 'level_height'},
                               {'long_name': 'sigma'},
                               Reference('orography')])]
     else:
         expect_coords_and_dims = []
         expect_factories = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims,
                                        expect_coords_and_dims)
     self.assertEqual(factories, expect_factories)
 def _check_potm(self, lbcode, expect_match=True):
     lbvc = 19
     blev = 130.6
     stash = STASH(1, 1, 1)
     lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [
             (DimCoord([blev],
                       standard_name='air_potential_temperature',
                       units='K',
                       attributes={'positive': 'up'}), None)
         ]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def _check_height(self,
                   blev,
                   stash,
                   expect_normal=True,
                   expect_fixed_height=None):
     lbvc = 1
     lbcode = _lbcode(0)  # effectively unused in this case
     lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_normal:
         expect_result = [(DimCoord(blev,
                                    standard_name='height',
                                    units='m',
                                    attributes={'positive': 'up'}), None)]
     elif expect_fixed_height:
         expect_result = [(DimCoord([expect_fixed_height],
                                    standard_name='height',
                                    units='m',
                                    attributes={'positive': 'up'}), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def _check_pressure(self, lbcode, expect_match=True):
     lbvc = 8
     blev = 250.3
     stash = STASH(1, 1, 1)
     lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [(DimCoord([blev],
                                    long_name='pressure',
                                    units='hPa'), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def _check_soil_depth(self, lbcode, expect_match=True):
     lbvc = 6
     blev = 0.05
     brsvd1, brlev = 0, 0.1
     stash = STASH(1, 1, 1)
     lblev, bhlev, bhrlev, brsvd2 = None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [(DimCoord([blev],
                                    standard_name='depth',
                                    units='m',
                                    bounds=[[brsvd1, brlev]],
                                    attributes={'positive': 'down'}), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def test_valid(self, expect_match=True):
     lbvc = 9
     lblev = 37.0
     bhlev = 850.1  # pressure
     bhrlev, brsvd2 = 810.0, 875.0  # pressure bounds
     blev = 0.15  # sigma
     brlev, brsvd1 = 0.11, 0.19  # sigma bounds
     lbcode = _lbcode(0)  # unused
     stash = STASH(1, 1, 1)  # unused
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_coords_and_dims = [
             (DimCoord([37.0],
                       standard_name='model_level_number',
                       attributes={'positive': 'up'}), None),
             (DimCoord([850.1],
                       long_name='level_pressure',
                       units='Pa',
                       bounds=[810.0, 875.0]), None),
             (AuxCoord([0.15],
                       long_name='sigma',
                       bounds=[brlev, brsvd1]), None)]
         expect_factories = [(HybridPressureFactory,
                              [{'long_name': 'level_pressure'},
                               {'long_name': 'sigma'},
                               Reference('surface_air_pressure')])]
     else:
         expect_coords_and_dims = []
         expect_factories = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims,
                                        expect_coords_and_dims)
     self.assertEqual(factories, expect_factories)
 def _check_depth(self, lbcode, lblev, brlev=0.0, brsvd1=0.0,
                  expect_bounds=True, expect_match=True):
     lbvc = 2
     lblev = 23.0
     blev = 123.4
     stash = STASH(1, 1, 1)
     bhlev, bhrlev, brsvd2 = None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [
             (DimCoord([lblev],
                       standard_name='model_level_number',
                       attributes={'positive': 'down'}), None)]
         if expect_bounds:
             expect_result.append(
                 (DimCoord(blev, standard_name='depth',
                           units='m',
                           bounds=[brsvd1, brlev],
                           attributes={'positive': 'down'}), None))
         else:
             expect_result.append(
                 (DimCoord(blev, standard_name='depth', units='m',
                           attributes={'positive': 'down'}), None))
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def test_unknown_lbvc(self):
     lbvc = 999
     blev, lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None, None
     lbcode = _lbcode(0)  # unused
     stash = STASH(1, 1, 1)  # unused
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     self.assertEqual(coords_and_dims, [])
     self.assertEqual(factories, [])
 def test_valid(self, expect_match=True):
     lbvc = 65
     lblev = 37.0
     bhlev = 0.35  # sigma
     bhrlev, brsvd2 = 0.31, 0.39  # sigma bounds
     blev = 9596.3  # level_height
     brlev, brsvd1 = 9500.0, 9800.0  # level_height bounds
     lbcode = _lbcode(0)  # unused
     stash = STASH(1, 1, 1)  # unused
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_coords_and_dims = [
             (DimCoord([37.0],
                       standard_name='model_level_number',
                       attributes={'positive': 'up'}), None),
             (DimCoord([9596.3],
                       long_name='level_height',
                       units='m',
                       bounds=[brlev, brsvd1],
                       attributes={'positive': 'up'}), None),
             (AuxCoord([0.35], long_name='sigma', bounds=[bhrlev,
                                                          brsvd2]), None)
         ]
         expect_factories = [(HybridHeightFactory, [{
             'long_name':
             'level_height'
         }, {
             'long_name': 'sigma'
         },
                                                    Reference('orography')])
                             ]
     else:
         expect_coords_and_dims = []
         expect_factories = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims,
                                        expect_coords_and_dims)
     self.assertEqual(factories, expect_factories)
 def _check_pressure(self, lbcode, expect_match=True):
     lbvc = 8
     blev = 250.3
     stash = STASH(1, 1, 1)
     lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [
             (DimCoord([blev], long_name='pressure', units='hPa'), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def test_valid(self, expect_match=True):
     lbvc = 9
     lblev = 37.0
     bhlev = 850.1  # pressure
     bhrlev, brsvd2 = 810.0, 875.0  # pressure bounds
     blev = 0.15  # sigma
     brlev, brsvd1 = 0.11, 0.19  # sigma bounds
     lbcode = _lbcode(0)  # unused
     stash = STASH(1, 1, 1)  # unused
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_coords_and_dims = [
             (DimCoord([37.0],
                       standard_name='model_level_number',
                       attributes={'positive': 'up'}), None),
             (DimCoord([850.1],
                       long_name='level_pressure',
                       units='Pa',
                       bounds=[810.0, 875.0]), None),
             (AuxCoord([0.15], long_name='sigma', bounds=[brlev,
                                                          brsvd1]), None)
         ]
         expect_factories = [(HybridPressureFactory,
                              [{
                                  'long_name': 'level_pressure'
                              }, {
                                  'long_name': 'sigma'
                              },
                               Reference('surface_air_pressure')])]
     else:
         expect_coords_and_dims = []
         expect_factories = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims,
                                        expect_coords_and_dims)
     self.assertEqual(factories, expect_factories)
 def _check_potm(self, lbcode, expect_match=True):
     lbvc = 19
     blev = 130.6
     stash = STASH(1, 1, 1)
     lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [
             (DimCoord([blev], standard_name='air_potential_temperature',
                       units='K', attributes={'positive': 'up'}), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def _check_soil_level(self, lbcode, expect_match=True):
     lbvc = 6
     lblev = 12.3
     brsvd1, brlev = 0, 0
     stash = STASH(1, 1, 1)
     blev, bhlev, bhrlev, brsvd2 = None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [
             (DimCoord([lblev], long_name='soil_model_level_number',
                       attributes={'positive': 'down'}), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def _check_depth(self,
                  lbcode,
                  lblev,
                  brlev=0.0,
                  brsvd1=0.0,
                  expect_bounds=True,
                  expect_match=True):
     lbvc = 2
     lblev = 23.0
     blev = 123.4
     stash = STASH(1, 1, 1)
     bhlev, bhrlev, brsvd2 = None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [(DimCoord([lblev],
                                    standard_name='model_level_number',
                                    attributes={'positive': 'down'}), None)]
         if expect_bounds:
             expect_result.append((DimCoord(blev,
                                            standard_name='depth',
                                            units='m',
                                            bounds=[brsvd1, brlev],
                                            attributes={'positive':
                                                        'down'}), None))
         else:
             expect_result.append((DimCoord(blev,
                                            standard_name='depth',
                                            units='m',
                                            attributes={'positive':
                                                        'down'}), None))
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def test_unknown_lbvc(self):
     lbvc = 999
     blev, lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None, None
     lbcode = _lbcode(0)  # unused
     stash = STASH(1, 1, 1)  # unused
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode,
         lbvc=lbvc,
         blev=blev,
         lblev=lblev,
         stash=stash,
         bhlev=bhlev,
         bhrlev=bhrlev,
         brsvd1=brsvd1,
         brsvd2=brsvd2,
         brlev=brlev)
     self.assertEqual(coords_and_dims, [])
     self.assertEqual(factories, [])
 def _check_soil_depth(self, lbcode, expect_match=True):
     lbvc = 6
     blev = 0.05
     brsvd1, brlev = 0, 0.1
     stash = STASH(1, 1, 1)
     lblev, bhlev, bhrlev, brsvd2 = None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_match:
         expect_result = [
             (DimCoord([blev], standard_name='depth', units='m',
                       bounds=[[brsvd1, brlev]],
                       attributes={'positive': 'down'}), None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])
 def _check_height(self, blev, stash,
                   expect_normal=True, expect_fixed_height=None):
     lbvc = 1
     lbcode = _lbcode(0)  # effectively unused in this case
     lblev, bhlev, bhrlev, brsvd1, brsvd2, brlev = \
         None, None, None, None, None, None
     coords_and_dims, factories = _convert_scalar_vertical_coords(
         lbcode=lbcode, lbvc=lbvc, blev=blev, lblev=lblev, stash=stash,
         bhlev=bhlev, bhrlev=bhrlev, brsvd1=brsvd1, brsvd2=brsvd2,
         brlev=brlev)
     if expect_normal:
         expect_result = [
             (DimCoord(blev, standard_name='height', units='m',
                       attributes={'positive': 'up'}),
              None)]
     elif expect_fixed_height:
         expect_result = [
             (DimCoord([expect_fixed_height], standard_name='height',
                       units='m', attributes={'positive': 'up'}),
              None)]
     else:
         expect_result = []
     self.assertCoordsAndDimsListsMatch(coords_and_dims, expect_result)
     self.assertEqual(factories, [])