示例#1
0
def _as_units_container(arg, **fmt_kwargs):
    """
    Convert a unit type to a UnitsContainer after checking if it is a reference.
    """
    # NOTE: This relies on `pint.util.to_units_container` behavior of passing ``None``
    # through, permitting e.g.
    # NOTE: This parses units when defining quantify decorators, standardizing return
    # value units, and standardizing dependent input argument units.
    category = 0  # unit spec (0), dimensionality string (1), or reference string (2)
    if isinstance(arg, str):
        arg = arg.format(**fmt_kwargs)  # permit extra keyword arguments
        if '=' in arg:
            category = 2
        elif '[' in arg and ']' in arg:
            category = 1
        else:
            arg = _to_pint_string(arg)  # support conventions, possible error later
    elif arg is None or isinstance(arg, pint.Unit):
        pass
    else:  # should be impossible since _group_args checks type
        raise ValueError(f'Unrecognized pint unit argument {arg}.')
    if category == 2:
        container = to_units_container(arg.split('=', 1)[1])  # skips validation
    elif category == 1:
        container = ureg.get_dimensionality(arg)  # validates dimensions
    else:
        container = to_units_container(arg, ureg)  # validates string units
    return container, category
示例#2
0
文件: quack.py 项目: lleoiu/climopy
def _to_units_container(arg):
    """
    Convert a unit compatible type to a UnitsContainer, checking if it is string
    field prefixed with an equal (which is considered a reference). Return the
    unit container and a boolean indicating whether this is an equal string.
    """
    if isinstance(arg, str) and '=' in arg:
        return putil.to_units_container(arg.split('=', 1)[1]), True
    return putil.to_units_container(arg, ureg), False
示例#3
0
文件: __init__.py 项目: gidden/units
def format_mass(obj, info, spec=None):
    """Format the units of *obj* with *info* inserted after its mass unit.

    Parameters
    ----------
    obj : pint.Quantity or pint.Unit
    info : str
        Any information, e.g. the symbol of a GHG species.
    spec : str, optional
        Pint formatting specifier such as ':H' (HTML format), ':~' (compact
        format with symbols), etc.
    """
    spec = spec or obj.default_format

    try:
        # Use only the units of a Quantity object
        obj = obj.units
    except AttributeError:
        pass  # Already a Unit object

    # Use the symbol for a ':~' spec
    method = registry._get_symbol if '~' in spec else lambda k: k
    # Collect the pieces of the unit expression
    units = [[method(key), value] for key, value in obj._units.items()]

    # Index of the mass component
    mass_index = list(obj.dimensionality.keys()).index('[mass]')
    # Append the information to the mass component
    units[mass_index][0] += f' {info}'

    # Hand off to pint's formatting
    return format_unit(to_units_container(dict(units), registry=registry),
                       spec)
示例#4
0
    def test_quantity_conversion(self):
        from pint.registry import UnitRegistry

        ureg = UnitRegistry()
        self.assertEqual(
            to_units_container(ureg.Quantity(1, UnitsContainer(m=1))),
            UnitsContainer(m=1),
        )
示例#5
0
 def test_uc_conversion(self):
     a = UnitsContainer(m=1)
     self.assertIs(to_units_container(a), a)
示例#6
0
 def test_str_conversion(self):
     self.assertEqual(to_units_container("m"), UnitsContainer(m=1))
示例#7
0
 def test_dict_conversion(self):
     self.assertEqual(to_units_container(dict(m=1)), UnitsContainer(m=1))
示例#8
0
 def test_unit_conversion(self):
     from pint.unit import _Unit
     self.assertEqual(to_units_container(_Unit(UnitsContainer(m=1))),
                      UnitsContainer(m=1))
示例#9
0
 def test_uc_conversion(self):
     a = UnitsContainer(m=1)
     self.assertIs(to_units_container(a), a)
示例#10
0
 def test_str_conversion(self):
     self.assertEqual(to_units_container('m'), UnitsContainer(m=1))
示例#11
0
 def test_dict_conversion(self):
     assert to_units_container(dict(m=1)) == UnitsContainer(m=1)
示例#12
0
    def test_unit_conversion(self):
        from pint import Unit

        assert to_units_container(Unit(
            UnitsContainer(m=1))) == UnitsContainer(m=1)
示例#13
0
 def test_uc_conversion(self):
     a = UnitsContainer(m=1)
     assert to_units_container(a) is a
示例#14
0
 def test_str_conversion(self):
     assert to_units_container("m") == UnitsContainer(m=1)
示例#15
0
    def test_unit_conversion(self):
        from pint import Unit

        self.assertEqual(to_units_container(Unit(UnitsContainer(m=1))),
                         UnitsContainer(m=1))
示例#16
0
 def test_dict_conversion(self):
     self.assertEqual(to_units_container(dict(m=1)), UnitsContainer(m=1))
示例#17
0
 def test_quantity_conversion(self):
     from pint.unit import UnitRegistry
     ureg = UnitRegistry()
     self.assertEqual(to_units_container(ureg.Quantity(1, UnitsContainer(m=1))),
                      UnitsContainer(m=1))