Source code for pydm.utilities.units

from scipy import constants

UNITS = {
    "length": {
        "m": 1,
        "cm": constants.centi,
        "mm": constants.milli,
        "um": constants.micro,
        "nm": constants.nano,
        "pm": constants.pico,
        "in": constants.inch,
        "ft": constants.foot,
        "yds": constants.yard,
    },
    "time": {
        "s": 1,
        "ms": constants.milli,
        "us": constants.micro,
        "ns": constants.nano,
        "ps": constants.pico,
        "min": constants.minute,
        "hr": constants.hour,
        "weeks": constants.week,
        "days": constants.day,
    },
    "frequency": {
        "Hz": 1,
        "kHz": constants.kilo,
        "MHz": constants.mega,
        "GHz": constants.giga,
        "THz": constants.tera,
        "mHz": constants.milli,
    },
    "angle": {
        "rad": 1,
        "mrad": constants.milli,
        "urad": constants.micro,
        "nrad": constants.nano,
        "degree": constants.degree,
        "turn": 2 * constants.pi,
    },
    "voltage": {
        "V": 1,
        "MV": constants.mega,
        "kV": constants.kilo,
        "mV": constants.milli,
        "uV": constants.micro,
    },
    "current": {
        "A": 1,
        "MA": constants.mega,
        "kA": constants.kilo,
        "mA": constants.milli,
        "uA": constants.micro,
        "nA": constants.nano,
    },
}


[docs]def find_unittype(unit): """ Find the type of a unit string. Parameters ---------- unit : str The unit string Returns ------- tp : str The unit type name or None if not found. """ for tp in UNITS.keys(): if unit in UNITS[tp].keys(): return tp return None
[docs]def find_unit(unit): """ Find the conversion of a unit string. Parameters ---------- unit : str The unit string Returns ------- float or None The unit value relative to the standard or None if not found. """ tp = find_unittype(unit) if tp: return UNITS[tp][unit] else: return None
[docs]def convert(unit, desired): """ Find the conversion rate of two different unit strings. Parameters ---------- unit : str The current unit string desired : str The desired unit string Returns ------- float or None The relation between unit and desired or None if not found. """ current = find_unit(unit) final = find_unit(desired) if find_unittype(unit) != find_unittype(desired): return None if current and final: return current / final
[docs]def find_unit_options(unit): """ Find the options for a given unit. Parameters ---------- unit : str The unit string Returns ------- list or None The list of similar units in crescent order or None if not found. """ tp = find_unittype(unit) if tp: units = [choice for choice, _ in sorted(UNITS[tp].items(), key=lambda x: 1 / x[1])] return units else: return None