Fix some of the #283 issues
This commit is contained in:
parent
eddd4c76d3
commit
bb28afef5c
@ -150,7 +150,6 @@ To avoid the conversion of an argument or return value, use None
|
|||||||
Checking units
|
Checking units
|
||||||
==============
|
==============
|
||||||
|
|
||||||
<to be written>
|
|
||||||
When you want pint quantities to be used as inputs to your functions, pint provides a wrapper to ensure units are of
|
When you want pint quantities to be used as inputs to your functions, pint provides a wrapper to ensure units are of
|
||||||
correct type - or more precisely, they match the expected dimensionality of the physical quantity.
|
correct type - or more precisely, they match the expected dimensionality of the physical quantity.
|
||||||
|
|
||||||
@ -164,7 +163,7 @@ In the decorator format:
|
|||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
|
|
||||||
>>>@ureg.wraps('[length]')
|
>>>@ureg.check('[length]')
|
||||||
... def pendulum_period(length):
|
... def pendulum_period(length):
|
||||||
... return 2*math.pi*math.sqrt(length/G)
|
... return 2*math.pi*math.sqrt(length/G)
|
||||||
|
|
||||||
|
@ -75,6 +75,11 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
from .nullhandler import NullHandler
|
from .nullhandler import NullHandler
|
||||||
|
|
||||||
|
try:
|
||||||
|
from itertools import zip_longest
|
||||||
|
except ImportError:
|
||||||
|
from itertools import izip_longest as zip_longest
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from numpy import ndarray
|
from numpy import ndarray
|
||||||
|
@ -344,12 +344,12 @@ class TestRegistry(QuantityTestCase):
|
|||||||
f0 = ureg.check('[length]')(func)
|
f0 = ureg.check('[length]')(func)
|
||||||
self.assertRaises(AttributeError, f0, 3.)
|
self.assertRaises(AttributeError, f0, 3.)
|
||||||
self.assertEqual(f0(3. * ureg.centimeter), 0.03 * ureg.meter)
|
self.assertEqual(f0(3. * ureg.centimeter), 0.03 * ureg.meter)
|
||||||
self.assertRaises(TypeError, f0, 3. * ureg.kilogram)
|
self.assertRaises(DimensionalityError, f0, 3. * ureg.kilogram)
|
||||||
|
|
||||||
f0b = ureg.check(ureg.meter)(func)
|
f0b = ureg.check(ureg.meter)(func)
|
||||||
self.assertRaises(AttributeError, f0b, 3.)
|
self.assertRaises(AttributeError, f0b, 3.)
|
||||||
self.assertEqual(f0b(3. * ureg.centimeter), 0.03 * ureg.meter)
|
self.assertEqual(f0b(3. * ureg.centimeter), 0.03 * ureg.meter)
|
||||||
self.assertRaises(TypeError, f0b, 3. * ureg.kilogram)
|
self.assertRaises(DimensionalityError, f0b, 3. * ureg.kilogram)
|
||||||
|
|
||||||
def gfunc(x, y):
|
def gfunc(x, y):
|
||||||
return x / y
|
return x / y
|
||||||
@ -360,19 +360,19 @@ class TestRegistry(QuantityTestCase):
|
|||||||
|
|
||||||
g1 = ureg.check('[speed]', '[time]')(gfunc)
|
g1 = ureg.check('[speed]', '[time]')(gfunc)
|
||||||
self.assertRaises(AttributeError, g1, 3.0, 1)
|
self.assertRaises(AttributeError, g1, 3.0, 1)
|
||||||
self.assertRaises(TypeError, g1, 1 * ureg.parsec, 1 * ureg.angstrom)
|
self.assertRaises(DimensionalityError, g1, 1 * ureg.parsec, 1 * ureg.angstrom)
|
||||||
self.assertRaises(TypeError, g1, 1 * ureg.km / ureg.hour, 1 * ureg.hour, 3.0)
|
self.assertRaises(TypeError, g1, 1 * ureg.km / ureg.hour, 1 * ureg.hour, 3.0)
|
||||||
self.assertEquals(g1(3.6 * ureg.km / ureg.hour, 1 * ureg.second), 1 * ureg.meter / ureg.second ** 2)
|
self.assertEqual(g1(3.6 * ureg.km / ureg.hour, 1 * ureg.second), 1 * ureg.meter / ureg.second ** 2)
|
||||||
|
|
||||||
g2 = ureg.check('[speed]')(gfunc)
|
g2 = ureg.check('[speed]')(gfunc)
|
||||||
self.assertRaises(AttributeError, g2, 3.0, 1)
|
self.assertRaises(AttributeError, g2, 3.0, 1)
|
||||||
self.assertRaises(TypeError, g2, 2 * ureg.parsec)
|
self.assertRaises(DimensionalityError, g2, 2 * ureg.parsec)
|
||||||
self.assertRaises(TypeError, g2, 2 * ureg.parsec, 1.0)
|
self.assertRaises(DimensionalityError, g2, 2 * ureg.parsec, 1.0)
|
||||||
self.assertEquals(g2(2.0 * ureg.km / ureg.hour, 2), 1 * ureg.km / ureg.hour)
|
self.assertEqual(g2(2.0 * ureg.km / ureg.hour, 2), 1 * ureg.km / ureg.hour)
|
||||||
|
|
||||||
g3 = ureg.check('[speed]', '[time]', '[mass]')(gfunc)
|
g3 = ureg.check('[speed]', '[time]', '[mass]')(gfunc)
|
||||||
self.assertRaises(TypeError, g3, 1 * ureg.parsec, 1 * ureg.angstrom)
|
self.assertRaises(DimensionalityError, g3, 1 * ureg.parsec, 1 * ureg.angstrom)
|
||||||
self.assertRaises(TypeError, g3, 1 * ureg.parsec, 1 * ureg.angstrom, 1 * ureg.kilogram)
|
self.assertRaises(DimensionalityError, g3, 1 * ureg.parsec, 1 * ureg.angstrom, 1 * ureg.kilogram)
|
||||||
|
|
||||||
def test_to_ref_vs_to(self):
|
def test_to_ref_vs_to(self):
|
||||||
self.ureg.autoconvert_offset_to_baseunit = True
|
self.ureg.autoconvert_offset_to_baseunit = True
|
||||||
|
@ -29,7 +29,7 @@ from .util import (logger, pi_theorem, solve_dependencies, ParserHelper,
|
|||||||
string_preprocessor, find_connected_nodes,
|
string_preprocessor, find_connected_nodes,
|
||||||
find_shortest_path, UnitsContainer, _is_dim,
|
find_shortest_path, UnitsContainer, _is_dim,
|
||||||
SharedRegistryObject, to_units_container)
|
SharedRegistryObject, to_units_container)
|
||||||
from .compat import tokenizer, string_types, NUMERIC_TYPES, long_type
|
from .compat import tokenizer, string_types, NUMERIC_TYPES, long_type, zip_longest
|
||||||
from .definitions import (Definition, UnitDefinition, PrefixDefinition,
|
from .definitions import (Definition, UnitDefinition, PrefixDefinition,
|
||||||
DimensionDefinition)
|
DimensionDefinition)
|
||||||
from .converters import ScaleConverter
|
from .converters import ScaleConverter
|
||||||
@ -1166,11 +1166,10 @@ class UnitRegistry(object):
|
|||||||
|
|
||||||
@functools.wraps(func, assigned=assigned, updated=updated)
|
@functools.wraps(func, assigned=assigned, updated=updated)
|
||||||
def wrapper(*values, **kwargs):
|
def wrapper(*values, **kwargs):
|
||||||
for dim, value in itertools.izip_longest(dimensions, values):
|
for dim, value in zip_longest(dimensions, values):
|
||||||
if dim and value.dimensionality != dim:
|
if dim and value.dimensionality != dim:
|
||||||
raise TypeError(
|
raise DimensionalityError(value, 'a quantity of',
|
||||||
'Expected units of %s, got %s' %
|
value.dimensionality, dim)
|
||||||
(dim, value.dimensionality))
|
|
||||||
return func(*values, **kwargs)
|
return func(*values, **kwargs)
|
||||||
return wrapper
|
return wrapper
|
||||||
return decorator
|
return decorator
|
||||||
|
Loading…
Reference in New Issue
Block a user