diff --git a/pyqtgraph/units.py b/pyqtgraph/units.py index adf5dc55..d0f8987c 100644 --- a/pyqtgraph/units.py +++ b/pyqtgraph/units.py @@ -1,41 +1,41 @@ # -*- coding: utf-8 -*- -## Very simple unit support: -## - creates variable names like 'mV' and 'kHz' -## - the value assigned to the variable corresponds to the scale prefix -## (mV = 0.001) -## - the actual units are purely cosmetic for making code clearer: -## -## x = 20*pA is identical to x = 20*1e-12 +# Very simple unit support: +# - creates variable names like 'mV' and 'kHz' +# - the value assigned to the variable corresponds to the scale prefix +# (mV = 0.001) +# - the actual units are purely cosmetic for making code clearer: +# +# x = 20*pA is identical to x = 20*1e-12 +# +# No unicode variable names (μ,Ω) allowed until python 3, but just assigning +# them to the globals dict doesn't error in python 2. +import unicodedata -## No unicode variable names (μ,Ω) allowed until python 3 - -SI_PREFIXES = 'yzafpnum kMGTPEZY' -UNITS = 'm,s,g,W,J,V,A,F,T,Hz,Ohm,S,N,C,px,b,B,Pa'.split(',') +# All unicode identifiers get normalized automatically +SI_PREFIXES = unicodedata.normalize("NFKC", u"yzafpnµm kMGTPEZY") +UNITS = unicodedata.normalize("NFKC", u"m,s,g,W,J,V,A,F,T,Hz,Ohm,Ω,S,N,C,px,b,B,Pa").split(",") allUnits = {} -def addUnit(p, n): + +def addUnit(prefix, val): g = globals() - v = 1000**n for u in UNITS: - g[p+u] = v - allUnits[p+u] = v - -for p in SI_PREFIXES: - if p == ' ': - p = '' - n = 0 - elif p == 'u': - n = -2 - else: - n = SI_PREFIXES.index(p) - 8 - - addUnit(p, n) - -cm = 0.01 - + g[prefix + u] = val + allUnits[prefix + u] = val +for pre in SI_PREFIXES: + v = SI_PREFIXES.index(pre) - 8 + if pre == " ": + pre = "" + addUnit(pre, 1000 ** v) +addUnit("c", 0.01) +addUnit("d", 0.1) +addUnit("da", 10) +addUnit("h", 100) +# py2 compatibility +addUnit("u", 1e-6) def evalUnits(unitStr): @@ -46,19 +46,19 @@ def evalUnits(unitStr): A*s / V => ([A, s], [V,]) """ pass - + + def formatUnits(units): """ Format a unit specification ([numerators,...], [denominators,...]) into a string (this is the inverse of evalUnits) """ pass - + + def simplify(units): """ Cancel units that appear in both numerator and denominator, then attempt to replace groups of units with single units where possible (ie, J/s => W) """ pass - - \ No newline at end of file