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