Units¶
Units are handled via the unyt
package in Python >=3 and via pint
in Python 2. In both cases, units are specified via strings
associated with the units (usually the abbreviation; e.g.
'cm'
for centimeters or 'umol'
for micromoles). In addition, units can be
expressed as composites via symbolic arithmetic (e.g. 'km/s'
for kilometers
per second or 'km**2'
for square kilometer)
Schema Datatypes¶
The primary case where users will encounter units is within types associated with model inputs and outputs in model specification YAML files. If a YAML specifies a connection between a model output and input that do not have the same units, yggdrasil will automatically perform the conversion from the units of the sending model to the units of the receiving model. If the units are not compatible, an error will be raised.
Units can be added to numeric scalars and arrays.
Python Objects¶
In Python, units can be added to numeric types (or retrieved) using the yggdrasil units submodule which wraps the particular behavior of the underlying packages. Using unyt:
>>> from yggdrasil import units
>>> x = units.add_units(1.0, 'cm')
>>> x
unyt_quantity(1., 'cm')
>>> units.get_units(x)
'cm'
>>> units.get_data(x)
1.0
or using pint:
>>> from yggdrasil import units
>>> x = units.add_units(1.0, 'cm')
>>> x
1.0 <Unit('centimeter')>
>>> units.get_units(x)
'centimeter'
>>> units.get_data(x)
1.0