Convert explicitly declared units; reject incompatible dimensions.
@tags circulax-simulation
Source code in circulax/netlist_io/units.py
| def convert_unit(value: float, source: str, target: str) -> float:
"""Convert explicitly declared units; reject incompatible dimensions.
@tags circulax-simulation
"""
source_dimension, source_power, source_scale = _unit(source)
target_dimension, target_power, target_scale = _unit(target)
if (source_dimension, source_power) != (target_dimension, target_power):
msg = f"incompatible units {source!r} and {target!r}"
raise ValueError(msg)
result = float(value) * source_scale / target_scale
if not math.isfinite(result):
msg = "unit conversion requires finite values"
raise ValueError(msg)
return result
|