def test_get_are_units_equivalent(self): units = [Units('celsius'), Units('kelvin'), Units('fahrenheit')] self.assertTrue(get_are_units_equivalent(units)) units = [Units('celsius'), Units('kelvin'), Units('coulomb')] self.assertFalse(get_are_units_equivalent(units)) units = [Units('celsius')] with self.assertRaises(ValueError): get_are_units_equivalent(units)
def test_init(self): self.assertEqual(AbstractVariable.__bases__, (Attributes,)) av = AbstractVariable(value=self.value) self.assertNumpyAll(av.value, self.value) self.assertIsNone(av.alias) self.assertIsNone(av.conform_units_to) fav = AbstractVariable(name='foo') self.assertEqual(fav.alias, 'foo') # Test data types also pulled from value if present. dtype = float fav = AbstractVariable(value=self.value, dtype=dtype) self.assertEqual(fav.dtype, self.value.dtype) self.assertIsNone(fav._dtype) # Use string-based units. var = Variable(name='tas', units='celsius', value=self.value) self.assertEqual(var.units, 'celsius') self.assertEqual(var.cfunits, get_units_object('celsius')) self.assertNotEqual(var.cfunits, get_units_object('kelvin')) self.assertTrue(get_are_units_equivalent((var.cfunits, get_units_object('kelvin')))) # Use constructor with units objects v. string. var = Variable(name='tas', units=get_units_object('celsius'), value=self.value) self.assertEqual(var.units, 'celsius') self.assertEqual(var.cfunits, get_units_object('celsius')) # Test without units. var = Variable(name='tas', units=None, value=self.value) self.assertEqual(var.units, None) self.assertEqual(var.cfunits, get_units_object(None))
def validate_unit_equivalence(src_units, dst_units): from ocgis.api.parms.definition import ConformUnitsTo for s, d in itertools.izip(src_units, dst_units): s, d = map(get_units_object, (s, d)) if not get_are_units_equivalent((s, d)): msg = 'The units specified in "{2}" ("{0}") are not equivalent to the source units "{1}".' raise RequestValidationError(ConformUnitsTo.name, msg.format(s, d, ConformUnitsTo.name))
def validate_unit_equivalence(src_units, dst_units): from ocgis.ops.parms.definition import ConformUnitsTo for s, d in zip(src_units, dst_units): s, d = list(map(get_units_object, (s, d))) if not get_are_units_equivalent((s, d)): msg = 'The units specified in "{2}" ("{0}") are not equivalent to the source units "{1}".' raise RequestValidationError(ConformUnitsTo.name, msg.format(s, d, ConformUnitsTo.name))
def test_get_are_units_equivalent(self): units = [ get_units_object('celsius'), get_units_object('kelvin'), get_units_object('fahrenheit') ] self.assertTrue(get_are_units_equivalent(units)) units = [ get_units_object('celsius'), get_units_object('kelvin'), get_units_object('coulomb') ] self.assertFalse(get_are_units_equivalent(units)) units = [get_units_object('celsius')] with self.assertRaises(ValueError): get_are_units_equivalent(units)
def test_calculate(self): klasses = list(itersubclasses(AbstractIcclimPercentileArrayIndice)) # There are six classes to test. self.assertEqual(len(klasses), 6) for mod in (1, 2): field = self.get_field(ntime=365) # Values less than 1 mm/day will be masked inside icclim. # var = field.variables.first() var = field.get_by_tag(TagName.DATA_VARIABLES)[0] var.get_value()[:] = var.get_value() * mod tgd = field.temporal.get_grouping(['month']) for klass in klasses: c = klass(field=field, tgd=tgd) res = c.execute() self.assertIsInstance(res, VariableCollection) dv = res.first() # Output units are always mm/day. if isinstance(c, IcclimR75pTOT): self.assertTrue(get_are_units_equivalent((dv.cfunits, get_units_object('mm/day'))))