Source code for axiom.converters
"""Conversion routines to convert between units automatically. EXPERIMENTAL."""
from axiom.decorators import metadata
[docs]@metadata(units='m')
def mm2m(da):
"""Convert mm to m.
Args:
da (xarray.DataArray): Data in mm.
Returns:
xarray.DataArray: Data in m.
"""
return da / 1000.0
conversion_mappings = {
'mm:m': mm2m
}
[docs]def ensure_units(da, expected_units):
"""Ensure that a given DataArray has the correct units, converting if needed.
Args:
da (xarray.DataArray): Data.
expected_units (ste): Units value.
Returns:
xarray.DataArray: Data with units converted.
Raises:
KeyError : When no unit attribute is present.
KeyError : When no converter is registered between the old and new units.
Exception: When the converter fails to convert the units.
"""
# Get the current units information
current_units = da.attrs['units']
# No conversion required
if current_units == expected_units:
return da
# Lookup the conversion routine
converter = conversion_mappings[f'{current_units}:{expected_units}']
# Call it
return converter(da)