Esempio n. 1
0
    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)
Esempio n. 2
0
    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))
Esempio n. 3
0
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))
Esempio n. 4
0
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))
Esempio n. 5
0
    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)
Esempio n. 6
0
    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'))))