def setUp(self): self.quantities = {'p': 8.9e4, 'Tv': 4.5+273.15, 'theta': 14.+273.15, 'rv': 1e-3, 'Tlcl': -22.5+273.15, 'thetae': 17.+273.15, 'Tw': -2.5+273.15, 'Td': -18.5+273.15, 'plcl': 62500., } self.quantities['T'] = calculate('T', **self.quantities) self.quantities['rho'] = calculate('rho', **self.quantities) self.add_assumptions = ('bolton', 'unfrozen bulb')
def setUp(self): self.quantities = {'p': 8.9e4, 'Tv': 9.+273.15, 'theta': 18.4+273.15, 'rv': 6e-3, 'Tlcl': 3.8+273.15, 'thetae': 36.5+273.15, 'Tw': 6.5+273.15, 'Td': 4.8+273.15, 'plcl': 83500., } self.quantities['T'] = calculate('T', **self.quantities) self.quantities['rho'] = calculate('rho', **self.quantities) self.add_assumptions = ('bolton', 'unfrozen bulb')
def setUp(self): self.quantities = {'p': 9e4, 'theta': 14.+273.15, 'rv': 1e-3, 'Tlcl': -22.+273.15, 'thetae': 17.+273.15, 'Tw': -4.+273.15, 'Td': -18.+273.15, 'plcl': 65000., } self.quantities['T'] = calculate('T', **self.quantities) self.quantities['Tv'] = calculate('Tv', **self.quantities) self.quantities['rho'] = calculate('rho', **self.quantities) self.add_assumptions = ('bolton', 'unfrozen bulb')
def setUp(self): self.quantities = {'p': 8.9e4, 'theta': 18.4+273.15, 'rv': 6e-3, 'Tlcl': 3.8+273.15, 'thetae': 36.5+273.15, 'Tw': 6.5+273.15, 'Td': 4.8+273.15, 'plcl': 83500., } self.quantities['T'] = calculate('T', **self.quantities) self.quantities['Tv'] = calculate('Tv', **self.quantities) self.quantities['rho'] = calculate('rho', **self.quantities) self.add_assumptions = ('bolton', 'unfrozen bulb')
def setUp(self): self.quantities = {'p': 8.9e2, 'theta': 14.+273.15, 'rv': 1., 'Tlcl': -22.5+273.15, 'thetae': 17.+273.15, 'Tw': -2.5, 'Td': -18.5+273.15, 'plcl': 62500., } self.units = {'p_unit': 'hPa', 'Tv_units': 'degC', 'Tw_unit': 'degC', 'rv_unit': 'g/kg'} kwargs = {} kwargs.update(self.quantities) kwargs.update(self.units) self.quantities['T'] = calculate('T', **kwargs) self.quantities['Tv'] = calculate('Tv', **kwargs) self.quantities['rho'] = calculate('rho', **kwargs) self.add_assumptions = ('bolton', 'unfrozen bulb')
def test_double_reverse_calculation(self): rho, Tv = calculate('rho', 'Tv', add_assumptions=('Tv equals T',), **self.vars2) assert (rho == 1/Rd).all() self.assertTrue(isinstance(rho, np.ndarray), 'returned rho should be ndarray') self.assertTrue(isinstance(Tv, np.ndarray), 'returned Tv should be ndarray')
def test_double_reverse_calculation(self): rho, Tv = calculate('rho', 'Tv', add_assumptions=('Tv equals T', ), **self.vars2) assert (rho == 1 / Rd).all() assert isinstance(rho, np.ndarray) assert isinstance(Tv, np.ndarray)
def test_double_calculation(self): Tv, rho = calculate('Tv', 'rho', add_assumptions=('Tv equals T',), **self.vars2) assert Tv.shape == self.shape assert rho.shape == self.shape assert (rho == 1/Rd).all() assert isinstance(rho, np.ndarray) assert isinstance(Tv, np.ndarray)
def test_double_calculation(self): Tv, rho = calculate('Tv', 'rho', add_assumptions=('Tv equals T', ), **self.vars2) assert Tv.shape == self.shape assert rho.shape == self.shape assert (rho == 1 / Rd).all() assert isinstance(rho, np.ndarray) assert isinstance(Tv, np.ndarray)
def test_returns_same_value(self): for quantity in self.units_dict.keys(): for unit in self.units_dict[quantity]: kwargs = {} kwargs[quantity + '_unit'] = unit kwargs[quantity] = 1.5 result = calculate(quantity, **kwargs) print(result, quantity, unit) self.assertAlmostEqual( result, 1.5, msg='calculate should return the same value ' 'when given a value as input')
def _generator(self, quantity, tolerance): skew_T_value = self.quantities.pop(quantity) calculated_value, funcs = calculate( quantity, add_assumptions=self.add_assumptions, debug=True, **self.quantities) diff = abs(skew_T_value - calculated_value) if diff > tolerance: err_msg = ('Value {0:.4f} is too far away from ' '{1:.4f} for {2}.'.format( calculated_value, skew_T_value, quantity)) err_msg += '\nfunctions used:\n' err_msg += '\n'.join([f.__name__ for f in funcs]) raise AssertionError(err_msg)
def _generator(self, quantity, tolerance): skew_T_value = self.quantities.pop(quantity) calculated_value, funcs = calculate( quantity, add_assumptions=self.add_assumptions, debug=True, **self.quantities) diff = abs(skew_T_value - calculated_value) if diff > tolerance: err_msg = ('Value {:.2f} is too far away from ' '{:.2f} for {}.'.format( calculated_value, skew_T_value, quantity)) err_msg += '\nfunctions used:\n' err_msg += '\n'.join([f.__name__ for f in funcs]) raise AssertionError(err_msg)
def test_calculate_Tw(self): quantity = 'Tw' skew_T_value = self.quantities.pop(quantity) calculated_value, funcs = calculate( quantity, add_assumptions=('bolton', 'unfrozen bulb'), debug=True, **self.quantities) diff = abs(skew_T_value - calculated_value) if diff > 1.: err_msg = ('Value {:.2f} is too far away from ' '{:.2f} for {}.'.format( calculated_value, skew_T_value, quantity)) err_msg += '\nfunctions used:\n' err_msg += '\n'.join([f.__name__ for f in funcs]) raise AssertionError(err_msg)
def test_calculate_Tw(self): quantity = 'Tw' skew_T_value = self.quantities.pop(quantity) calculated_value, funcs = calculate(quantity, add_assumptions=('bolton', 'unfrozen bulb'), debug=True, **self.quantities) diff = abs(skew_T_value - calculated_value) if diff > 1.: err_msg = ('Value {:.2f} is too far away from ' '{:.2f} for {}.'.format(calculated_value, skew_T_value, quantity)) err_msg += '\nfunctions used:\n' err_msg += '\n'.join([f.__name__ for f in funcs]) raise AssertionError(err_msg)
def test_calculate_thetae(self): quantity = 'thetae' skew_T_value = self.quantities.pop(quantity) self.quantities.pop('Tlcl') # let us calculate this ourselves kwargs = {} kwargs.update(self.quantities) kwargs.update(self.units) calculated_value, funcs = calculate( quantity, add_assumptions=('bolton', 'unfrozen bulb'), debug=True, **kwargs) diff = abs(skew_T_value - calculated_value) if diff > 1.: err_msg = ('Value {0:.2f} is too far away from ' '{1:.2f} for {2}.'.format( calculated_value, skew_T_value, quantity)) err_msg += '\nfunctions used:\n' err_msg += '\n'.join([f.__name__ for f in funcs]) raise AssertionError(err_msg)
def test_qv_from_rv(self): assert np.isclose(calculate('qv', rv=0.005), 0.0049751243781094535)
def test_T_from_Tv(self): assert calculate('T', Tv=1., add_assumptions=('Tv equals T',)) == 1. assert calculate('T', Tv=5., add_assumptions=('Tv equals T',)) == 5.
def test_rv_from_qv(self): assert np.isclose(calculate('rv', qv=0.005), 0.005025125628140704)
def test_qv_from_rv(self): self.assertAlmostEqual(calculate('qv', rv=0.005), 0.004975124378109453)
def test_double_reverse_calculation(self): rho, Tv = calculate('rho', 'Tv', add_assumptions=('Tv equals T',), **self.vars2) assert (rho == 1/Rd).all() assert isinstance(rho, np.ndarray) assert isinstance(Tv, np.ndarray)
def test_returns_float(self): rho = calculate('rho', Tv=1., p=1.) self.assertTrue(isinstance(rho, float), 'returned rho should be float')
def test_depth_2_calculation(self): rho = calculate('rho', add_assumptions=('Tv equals T', ), **self.vars2) assert rho.shape == self.shape assert (rho == 1 / Rd).all() assert isinstance(rho, np.ndarray)
def test_input_unit(self): rho = calculate('rho', Tv=1., p=0.01, p_unit='hPa') self.assertEqual(rho, 1. / Rd)
def test_simple_calculation(self): rho = calculate('rho', **self.vars1) assert (rho.shape == self.shape) assert (rho == 1/Rd).all() assert isinstance(rho, np.ndarray)
def test_simple_calculation(self): rho = calculate('rho', **self.vars1) assert (rho.shape == self.shape) assert (rho == 1 / Rd).all() self.assertTrue(isinstance(rho, np.ndarray), 'returned rho should be ndarray')
def test_T_from_Tv(self): assert calculate('T', Tv=1., add_assumptions=('Tv equals T', )) == 1. assert calculate('T', Tv=5., add_assumptions=('Tv equals T', )) == 5.
def test_output_unit(self): p = calculate('p', Tv=1., rho=1. / Rd, p_unit='millibar') self.assertEqual(p, 0.01)
def test_simple_calculation(self): rho = calculate('rho', **self.vars1) assert (rho.shape == self.shape) assert (rho == 1 / Rd).all() assert isinstance(rho, np.ndarray)
def test_rv_from_qv(self): self.assertAlmostEqual(calculate('rv', qv=0.005), 0.005025125628140704)
def test_returns_float(self): rho = calculate('rho', Tv=1., p=1.) assert isinstance(rho, float)
def test_depth_2_calculation(self): rho = calculate('rho', add_assumptions=('Tv equals T', ), **self.vars2) assert rho.shape == self.shape assert (rho == 1 / Rd).all() self.assertTrue(isinstance(rho, np.ndarray), 'returned rho should be ndarray')
def test_depth_2_calculation(self): rho = calculate('rho', add_assumptions=('Tv equals T',), **self.vars2) assert rho.shape == self.shape assert (rho == 1/Rd).all() assert isinstance(rho, np.ndarray)