Пример #1
0
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)
Пример #2
0
def __format__(self, spec):
    # modify Pint unit __format__

    spec = formatting.extract_custom_flags(spec or self.default_format)
    if "~" in spec:
        if not self._units:
            return ""

        # Spectrochempy
        if self.dimensionless and "absorbance" not in self._units:
            if self._units == "ppm":
                units = UnitsContainer({"ppm": 1})
            elif self._units in ["percent", "transmittance"]:
                units = UnitsContainer({"%": 1})
            elif self._units == "weight_percent":
                units = UnitsContainer({"wt.%": 1})
            elif self._units == "radian":
                units = UnitsContainer({"rad": 1})
            elif self._units == "degree":
                units = UnitsContainer({"deg": 1})
            # elif self._units == 'absorbance':
            #    units = UnitsContainer({'a.u.': 1})
            elif abs(self.scaling - 1.0) < 1.0e-10:
                units = UnitsContainer({"": 1})
            else:
                units = UnitsContainer(
                    {"scaled-dimensionless (%.2g)" % self.scaling: 1})
        else:
            units = UnitsContainer(
                dict((self._REGISTRY._get_symbol(key), value)
                     for key, value in self._units.items()))
        spec = spec.replace("~", "")
    else:
        units = self._units

    return formatting.format_unit(units, spec, registry=self._REGISTRY)
 def test_format_unit(self):
     self.assertEqual(fmt.format_unit("", "C"), "dimensionless")
     self.assertRaises(ValueError, fmt.format_unit, "m", "W")
Пример #4
0
 def test_format_unit(self):
     self.assertEqual(fmt.format_unit('', 'C'), 'dimensionless')
     self.assertRaises(ValueError, fmt.format_unit, 'm', 'W')
Пример #5
0
 def test_format_unit(self):
     assert fmt.format_unit("", "C") == "dimensionless"
     with pytest.raises(ValueError):
         fmt.format_unit("m", "W")
Пример #6
0
 def test_format_unit(self):
     self.assertEqual(fmt.format_unit('', 'C'), 'dimensionless')
     self.assertRaises(ValueError, fmt.format_unit, 'm', 'W')