src.units module¶
Functions wrapping unit conversion methods from the third-party cfunits library.
- class src.units.Units(units=None, calendar=None, formatted=False, names=False, definition=False, _ut_unit=None)[source]¶
Bases:
Units
Wrap Units class of cfunits to isolate this third-party dependency to the code in this module.
- reftime_base_eq(other)[source]¶
Comparison function that recognizes reference time units (e.g., ‘days since 1970-01-01’) as being equal to unqualified time units of the same base unit (‘days’). The cfunits equivalent() method returns False on these cases.
- __init__(units=None, calendar=None, formatted=False, names=False, definition=False, _ut_unit=None)¶
Initialization is as in cfunits.Units.
- src.units.to_cfunits(*args)[source]¶
Coerce string-valued units and (quantity, unit) tuples to
Units
objects.If more than one such argument is given in args, return a list containing the results of coercing each argument.
- src.units.to_equivalent_units(*args)[source]¶
Same as
to_cfunits()
, but raises TypeError if units of all quantities in args are not equivalent after coercion.
- src.units.relative_tol(x, y)[source]¶
HACK to return
max(|x-y|/x, |x-y|/y)
for unit-ful quantities x, y with equivalent units. Vulnerable to underflow in principle.x and y are coerced to
Units
objects viato_cfunits()
.
- src.units.units_equivalent(*args)[source]¶
Returns True if and only if all unit-ful quantities in args are physically equivalent: they represent the same physical quantity, up to a multiplicative conversion factor.
args are coerced to
Units
objects viato_cfunits()
.
- src.units.units_reftime_base_eq(*args)[source]¶
Returns True if and only if all unit-ful quantities in args are physically equivalent: they represent the same physical quantity, up to a multiplicative conversion factor.
args are coerced to
Units
objects viato_cfunits()
.
- src.units.units_equal(*args, rtol=None)[source]¶
Returns True if and only if all unit-ful quantities in args are strictly equal (
units_equivalent()
is True andconversion_factor()
= 1).- . note::
rtol, atol tolerances on floating-point equality are not currently implemented in cfunits, so we use
relative_tol()
.
args are coerced to
Units
objects viato_cfunits()
.
- src.units.conversion_factor(source_unit, dest_unit)[source]¶
Return floating point factor which implements a given unit conversion. Defined so that (conversion factor) * (quantity in source_units) = (quantity in dest_units).
source_unit, dest_unit are coerced to
Units
objects viato_cfunits()
.
- src.units.convert_scalar_coord(coord, dest_units: str, log=<Logger>)[source]¶
Given scalar coordinate coord, return the appropriate scalar value in new units dest_units.
- src.units.convert_dataarray(ds, da_name: str, src_unit=None, dest_unit=None, log=<Logger>)[source]¶
Wrapper for cfunits conform() that does unit conversion in-place on a member of an xarray Dataset, updating its units attribute.
- Parameters:
ds (
Dataset
) – xarray Dataset containing the DataArray to convert.da_name (
str
) – variable name or standard_name of the associated DataArray to do the unit conversion on.src_unit – Current units of da_name. Coerced to a
Units
object viato_cfunits()
. Optional; if not given this is populated from theunits
attribute of da_name, if it exists.dest_unit – Desired units for da_name. Coerced to a
Units
object viato_cfunits()
.
- Raises:
ValueError – if da_name not in ds.
TypeError – if src_unit or dest_unit not correctly defined, or if da_name lacks units metadata.
- Returns:
Dataset ds, with da_name modified in-place.