Example #1
0
 def test_formula_terms_ap_missing_coords(self):
     self.requires["formula_terms"] = dict(ap="ap", b="b", ps="ps")
     with mock.patch("warnings.warn") as warn:
         _load_aux_factory(self.engine, self.cube)
     warn.assert_called_once_with("Unable to find coordinate for variable "
                                  "'ap'")
     self._check_no_delta()
Example #2
0
 def test_formula_terms_a_p0(self):
     coord_a = DimCoord(range(5), units='Pa')
     coord_p0 = DimCoord(10, units='1')
     coord_expected = DimCoord(np.arange(5) * 10, units='Pa',
                               long_name='vertical pressure', var_name='ap')
     self.provides['coordinates'].extend([(coord_a, 'a'), (coord_p0, 'p0')])
     self.requires['formula_terms'] = dict(a='a', b='b', ps='ps', p0='p0')
     _load_aux_factory(self.engine, self.cube)
     # Check cube.coord_dims method.
     self.assertEqual(self.cube.coord_dims.call_count, 1)
     args, _ = self.cube.coord_dims.call_args
     self.assertEqual(len(args), 1)
     self.assertIs(args[0], coord_a)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 1)
     args, _ = self.cube.add_aux_coord.call_args
     self.assertEqual(len(args), 2)
     self.assertEqual(args[0], coord_expected)
     self.assertIsInstance(args[1], mock.Mock)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, coord_expected)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, mock.sentinel.ps)
Example #3
0
 def test_formula_terms_a_p0__promote_a_units_unknown_to_dimensionless(
     self, ):
     coord_a = DimCoord(np.arange(5), units="unknown")
     coord_p0 = DimCoord(10, units="Pa")
     coord_expected = DimCoord(
         np.arange(5) * 10,
         units="Pa",
         long_name="vertical pressure",
         var_name="ap",
     )
     self.cube_parts["coordinates"].extend([(coord_a, "a"),
                                            (coord_p0, "p0")])
     self.requires["formula_terms"] = dict(a="a", b="b", ps="ps", p0="p0")
     _load_aux_factory(self.engine, self.cube)
     # Check cube.coord_dims method.
     self.assertEqual(self.cube.coord_dims.call_count, 1)
     args, _ = self.cube.coord_dims.call_args
     self.assertEqual(len(args), 1)
     self.assertIs(args[0], coord_a)
     self.assertEqual("1", args[0].units)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 1)
     args, _ = self.cube.add_aux_coord.call_args
     self.assertEqual(len(args), 2)
     self.assertEqual(args[0], coord_expected)
     self.assertIsInstance(args[1], mock.Mock)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, coord_expected)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, self.ps)
Example #4
0
 def test_formula_terms_ap_missing_coords(self):
     self.requires['formula_terms'] = dict(ap='ap', b='b', ps='ps')
     with mock.patch('warnings.warn') as warn:
         _load_aux_factory(self.engine, self.cube)
     warn.assert_called_once_with("Unable to find coordinate for variable "
                                  "'ap'")
     self._check_no_delta()
Example #5
0
 def test_formula_terms_a_p0(self):
     coord_a = DimCoord(np.arange(5), units='Pa')
     coord_p0 = DimCoord(10, units='1')
     coord_expected = DimCoord(np.arange(5) * 10,
                               units='Pa',
                               long_name='vertical pressure',
                               var_name='ap')
     self.provides['coordinates'].extend([(coord_a, 'a'), (coord_p0, 'p0')])
     self.requires['formula_terms'] = dict(a='a', b='b', ps='ps', p0='p0')
     _load_aux_factory(self.engine, self.cube)
     # Check cube.coord_dims method.
     self.assertEqual(self.cube.coord_dims.call_count, 1)
     args, _ = self.cube.coord_dims.call_args
     self.assertEqual(len(args), 1)
     self.assertIs(args[0], coord_a)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 1)
     args, _ = self.cube.add_aux_coord.call_args
     self.assertEqual(len(args), 2)
     self.assertEqual(args[0], coord_expected)
     self.assertIsInstance(args[1], mock.Mock)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, coord_expected)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, mock.sentinel.ps)
Example #6
0
 def test_formula_terms_ap_missing_coords(self):
     coordinates = [(mock.sentinel.b, "b"), (mock.sentinel.ps, "ps")]
     self.provides = dict(coordinates=coordinates)
     self.requires["formula_terms"] = dict(ap="ap", b="b", ps="ps")
     with mock.patch("warnings.warn") as warn:
         _load_aux_factory(self.engine, self.cube)
     warn.assert_called_once_with("Unable to find coordinate for variable " "'ap'")
Example #7
0
 def test_formula_terms_a_p0(self):
     coord_a = DimCoord(np.arange(5), units="Pa")
     coord_p0 = DimCoord(10, units="1")
     coord_expected = DimCoord(np.arange(5) * 10, units="Pa", long_name="vertical pressure", var_name="ap")
     self.provides["coordinates"].extend([(coord_a, "a"), (coord_p0, "p0")])
     self.requires["formula_terms"] = dict(a="a", b="b", ps="ps", p0="p0")
     _load_aux_factory(self.engine, self.cube)
     # Check cube.coord_dims method.
     self.assertEqual(self.cube.coord_dims.call_count, 1)
     args, _ = self.cube.coord_dims.call_args
     self.assertEqual(len(args), 1)
     self.assertIs(args[0], coord_a)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 1)
     args, _ = self.cube.add_aux_coord.call_args
     self.assertEqual(len(args), 2)
     self.assertEqual(args[0], coord_expected)
     self.assertIsInstance(args[1], mock.Mock)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, coord_expected)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, mock.sentinel.ps)
Example #8
0
 def test_formula_terms_ap_missing_coords(self):
     self.requires['formula_terms'] = dict(ap='ap', b='b', ps='ps')
     with mock.patch('warnings.warn') as warn:
         _load_aux_factory(self.engine, self.cube)
     warn.assert_called_once_with("Unable to find coordinate for variable "
                                  "'ap'")
     self._check_no_delta()
Example #9
0
 def test_formula_terms_ap_missing_coords(self):
     coordinates = [(mock.sentinel.b, 'b'), (mock.sentinel.ps, 'ps')]
     self.provides = dict(coordinates=coordinates)
     self.requires['formula_terms'] = dict(ap='ap', b='b', ps='ps')
     with mock.patch('warnings.warn') as warn:
         _load_aux_factory(self.engine, self.cube)
     warn.assert_called_once_with("Unable to find coordinate for variable "
                                  "'ap'")
Example #10
0
 def test_formula_terms_ap_missing_coords(self):
     coordinates = [(mock.sentinel.b, 'b'), (mock.sentinel.ps, 'ps')]
     self.provides = dict(coordinates=coordinates)
     self.requires['formula_terms'] = dict(ap='ap', b='b', ps='ps')
     with mock.patch('warnings.warn') as warn:
         _load_aux_factory(self.engine, self.cube)
     warn.assert_called_once_with("Unable to find coordinate for variable "
                                  "'ap'")
Example #11
0
 def test_formula_terms_p0_bounded(self):
     coord_a = DimCoord(np.arange(5))
     coord_p0 = DimCoord(1, bounds=[0, 2], var_name="p0")
     self.provides["coordinates"].extend([(coord_a, "a"), (coord_p0, "p0")])
     self.requires["formula_terms"] = dict(a="a", b="b", ps="ps", p0="p0")
     with warnings.catch_warnings(record=True) as warn:
         warnings.simplefilter("always")
         _load_aux_factory(self.engine, self.cube)
         self.assertEqual(len(warn), 1)
         msg = "Ignoring atmosphere hybrid sigma pressure scalar " "coordinate {!r} bounds.".format(coord_p0.name())
         self.assertEqual(msg, warn[0].message.message)
Example #12
0
 def test_formula_terms_p0_bounded(self):
     coord_a = DimCoord(range(5))
     coord_p0 = DimCoord(1, bounds=[0, 2], var_name='p0')
     self.provides['coordinates'].extend([(coord_a, 'a'), (coord_p0, 'p0')])
     self.requires['formula_terms'] = dict(a='a', b='b', ps='ps', p0='p0')
     with warnings.catch_warnings(record=True) as warn:
         warnings.simplefilter('always')
         _load_aux_factory(self.engine, self.cube)
         self.assertEqual(len(warn), 1)
         msg = 'Ignoring atmosphere hybrid sigma pressure scalar ' \
             'coordinate {!r} bounds.'.format(coord_p0.name())
         self.assertEqual(msg, warn[0].message.message)
Example #13
0
 def test_formula_terms_p0_bounded(self):
     coord_a = DimCoord(np.arange(5))
     coord_p0 = DimCoord(1, bounds=[0, 2], var_name="p0")
     self.provides["coordinates"].extend([(coord_a, "a"), (coord_p0, "p0")])
     self.requires["formula_terms"] = dict(a="a", b="b", ps="ps", p0="p0")
     with warnings.catch_warnings(record=True) as warn:
         warnings.simplefilter("always")
         _load_aux_factory(self.engine, self.cube)
         self.assertEqual(len(warn), 1)
         msg = ("Ignoring atmosphere hybrid sigma pressure scalar "
                "coordinate {!r} bounds.".format(coord_p0.name()))
         self.assertEqual(msg, str(warn[0].message))
Example #14
0
 def test_formula_terms_p0_bounded(self):
     coord_a = DimCoord(np.arange(5))
     coord_p0 = DimCoord(1, bounds=[0, 2], var_name='p0')
     self.provides['coordinates'].extend([(coord_a, 'a'), (coord_p0, 'p0')])
     self.requires['formula_terms'] = dict(a='a', b='b', ps='ps', p0='p0')
     with warnings.catch_warnings(record=True) as warn:
         warnings.simplefilter('always')
         _load_aux_factory(self.engine, self.cube)
         self.assertEqual(len(warn), 1)
         msg = 'Ignoring atmosphere hybrid sigma pressure scalar ' \
             'coordinate {!r} bounds.'.format(coord_p0.name())
         self.assertEqual(msg, str(warn[0].message))
Example #15
0
 def test_formula_terms_ap(self):
     self.provides['coordinates'].append((mock.sentinel.ap, 'ap'))
     self.requires['formula_terms'] = dict(ap='ap', b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 0)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, mock.sentinel.ap)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, mock.sentinel.ps)
Example #16
0
 def test_formula_terms_ap(self):
     self.cube_parts["coordinates"].append((self.ap, "ap"))
     self.requires["formula_terms"] = dict(ap="ap", b="b", ps="ps")
     _load_aux_factory(self.engine, self.cube)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 0)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, self.ap)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, self.ps)
Example #17
0
 def test_formula_terms_ap(self):
     self.provides["coordinates"].append((mock.sentinel.ap, "ap"))
     self.requires["formula_terms"] = dict(ap="ap", b="b", ps="ps")
     _load_aux_factory(self.engine, self.cube)
     # Check cube.add_aux_coord method.
     self.assertEqual(self.cube.add_aux_coord.call_count, 0)
     # Check cube.add_aux_factory method.
     self.assertEqual(self.cube.add_aux_factory.call_count, 1)
     args, _ = self.cube.add_aux_factory.call_args
     self.assertEqual(len(args), 1)
     factory = args[0]
     self.assertEqual(factory.delta, mock.sentinel.ap)
     self.assertEqual(factory.sigma, mock.sentinel.b)
     self.assertEqual(factory.surface_air_pressure, mock.sentinel.ps)
Example #18
0
 def test_formula_terms_no_p0_term(self):
     coord_a = DimCoord(np.arange(5), units="Pa")
     self.cube_parts["coordinates"].append((coord_a, "a"))
     self.requires["formula_terms"] = dict(a="a", b="b", ps="ps")
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #19
0
 def test_formula_terms_p0_non_scalar(self):
     coord_p0 = DimCoord(np.arange(5))
     self.provides["coordinates"].append((coord_p0, "p0"))
     self.requires["formula_terms"] = dict(p0="p0")
     with self.assertRaises(ValueError):
         _load_aux_factory(self.engine, self.cube)
Example #20
0
 def test_formula_terms_no_delta_terms(self):
     self.requires['formula_terms'] = dict(b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #21
0
 def test_formula_terms_no_p0_term(self):
     coord_a = DimCoord(np.arange(5), units='Pa')
     self.provides['coordinates'].append((coord_a, 'a'))
     self.requires['formula_terms'] = dict(a='a', b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #22
0
 def test_formula_terms_p0_non_scalar(self):
     coord_p0 = DimCoord(np.arange(5))
     self.provides['coordinates'].append((coord_p0, 'p0'))
     self.requires['formula_terms'] = dict(p0='p0')
     with self.assertRaises(ValueError):
         _load_aux_factory(self.engine, self.cube)
Example #23
0
 def test_formula_terms_no_delta_terms(self):
     self.requires["formula_terms"] = dict(b="b", ps="ps")
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #24
0
 def test_formula_terms_no_a_term(self):
     coord_p0 = DimCoord(10, units="1")
     self.cube_parts["coordinates"].append((coord_p0, "p0"))
     self.requires["formula_terms"] = dict(a="p0", b="b", ps="ps")
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #25
0
 def test_formula_terms_no_a_term(self):
     coord_p0 = DimCoord(10, units='1')
     self.provides['coordinates'].append((coord_p0, 'p0'))
     self.requires['formula_terms'] = dict(a='p0', b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #26
0
 def test_formula_terms_no_a_term(self):
     coord_p0 = DimCoord(10, units='1')
     self.provides['coordinates'].append((coord_p0, 'p0'))
     self.requires['formula_terms'] = dict(a='p0', b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #27
0
 def test_formula_terms_no_p0_term(self):
     coord_a = DimCoord(np.arange(5), units='Pa')
     self.provides['coordinates'].append((coord_a, 'a'))
     self.requires['formula_terms'] = dict(a='a', b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #28
0
 def test_formula_terms_no_delta_terms(self):
     self.requires['formula_terms'] = dict(b='b', ps='ps')
     _load_aux_factory(self.engine, self.cube)
     self._check_no_delta()
Example #29
0
 def test_formula_terms_p0_non_scalar(self):
     coord_p0 = DimCoord(range(5))
     self.provides['coordinates'].append((coord_p0, 'p0'))
     self.requires['formula_terms'] = dict(p0='p0')
     with self.assertRaises(ValueError):
         _load_aux_factory(self.engine, self.cube)
Example #30
0
 def test_formula_terms_p0_non_scalar(self):
     coord_p0 = DimCoord(np.arange(5))
     self.cube_parts["coordinates"].append((coord_p0, "p0"))
     self.requires["formula_terms"] = dict(p0="p0")
     with self.assertRaises(ValueError):
         _load_aux_factory(self.engine, self.cube)