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)
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")
def test_format_unit(self): self.assertEqual(fmt.format_unit('', 'C'), 'dimensionless') self.assertRaises(ValueError, fmt.format_unit, 'm', 'W')
def test_format_unit(self): assert fmt.format_unit("", "C") == "dimensionless" with pytest.raises(ValueError): fmt.format_unit("m", "W")