numru-units-1.9/0000755000175000017500000000000012470635565014206 5ustar horinouthorinoutnumru-units-1.9/ChangeLog0000644000175000017500000001453112470635450015755 0ustar horinouthorinoutTue Feb 17 2015 T Horinouchi * version 1.9 released ((cvs) tag: numru-units-1_9) Fri Jan 23 2015 T Horinouchi * dcunits.txt * added a description as comments at the beginning of the file * added units: cd, candela * changed the mode of the following units * S to N: kg, %, permil, d * S to P: percent * added a meteorological unit gpm (mode: N, definition: m). * LICENSE.txt: updated (years) * src/version.rb: added * src/Makefile: updated to use version.rb Tue Jan 20 2015 T Horinouchi * src/lex.rb: Regexp changed: UTC --> (UTC|Z) Mon Jan 12 2015 T Horinouchi * version 1.8 released ((cvs) tag: numru-units-1_8) Mon Jan 12 2015 T Horinouchi <-- S Nishizawa [dennou-ruby:003805] and T Koshiro [dennou-ruby:003806] (files to patch was corrected, though) * src/rules.rb: Update to support ruby 2.1 or later (l.10: origin_exp { yyaccept; } --> origin_exp { val[0] }) and a cleaner treatment of the NumRu:: wrapper (l.1: class Units --> class NumRu::Units). * src/test.rb: updated (handling of "" and numeric expressions: float --> rational) * src/Makefile: updated in response to the change in rule.rb * install.rb: updated (ruby 1.6 support abondoned) * src/units.racc, src/units.rb, lib/numru/units.rb: regenreated Fri Mar 14 2014 T Koshiro < M Nakano [dennou-ruby:003646] * install.rb: for Ruby 2.x Thu Aug 4 2011 T Horinouchi * version 1.7 released ((cvs) tag: numru-units-1_7) * LICENSE.txt: added (BSD 2-clause) * doc/units.rd, doc/units.html: updated (added entry to dcunits.txt) Wed Aug 3 2011 T Horinouchi * mulnode.rb: to_s changed to explicitly handle a Float whose value is an integer. * Makefile: adopet to the change in the "tail" command (tail +2 --> tail -n +2). Mon Mar 15 2010 T Horinouchi * version 1.6 released ((cvs) tag: numru-units-1_6) Fri May 23 2008 T Horinouchi * dcunits.txt: added the following units: percent [S], % [S], permil [S], centigrade [P], millibar [P] * rules.rb: changed not to accept empty unit_spec * lex.rb: * method do_parse2: to treat empty string units '' as '1' (to return NumberNode.new(1) instead of ErrorNode.new('')) Fri Feb 8 2008 T Koshiro * lex.rb: next_token: at least one space or tab character is required before/after 'per', 'after', 'from', 'since', 'ref' Wed Aug 24 2005 T Horinouchi * version 1.5 released ((cvs) tag: numru-units-1_5) Wed Jun 8 2005 T Horinouchi * lex.rb: * debug in RE_SECOND * debug in time zone parser (many bugs) * improvement in time parser RE_TIME to support hhmm type in addition to [h]h:[m]m * timenode.rb: * TimeNode#utcsod : debug in time zone treatment (IT WAS A FATAL BUG!!) * TimeNode#to_s : debug in the expression of seconds (not to take the floor of seconds). Wed May 25 2005 T Horinouchi * version 1.4 released ((cvs) tag: numru-units-1_4) * lex.rb: debug in RE_HOUR. It did not handle hours after 20 properly. Mon Nov 29 2004 T Horinouchi * timenode.rb: class XDate: added to_date (for intenal usage), and modified +(ohter) and -(ohter) methods to use it as long as possible. This is to widen the coverage of time -- up to now, only very recent years (such as AD19xx-20xx) are accpeted, since the Time intrincic class is always used. Tue Nov 9 2004 T Horinouchi * lex.rb: Units#convert2: changed warning messaging to show backtrace Sun Aug 10 2004 T Horinouchi * lex.rb: lex.rb Units#convert, Units#==: debug not to change (reduce5) self and input units. Sun Aug 8 2004 T Horinouchi * version 1.3 released * mulnode.rb: improved Multi#sort: to eliminate Number[1] if length >= 2. Then, Units.new('1m').reduce5.to_s gives 'm'; it used to give '1 m'. * numbernode.rb: defined == (to compare by values -- implicitly used in the new Multi#sort) * dcunits.txt: added some units from udunits: Pascal, deg[KF], deg_[CFK], degree[CFK], [Cc]elcius, angular_(degree|minute|secont), [Ff]ahrenheit, farad, gravity, conventional_mercury, mercury, Hg, hg, Julian_year, common_year, tesla * lex.rb: debug === (aliased to ==. The change on May 4 was enbug). debug =~: to handle other classes (return false) Tue May 4 2004 T Horinouchi * pownode.rb: PowNode#to_s: if the expopnent is 1, omit it. * lex.rb: debug === (to allow a difference of a factor and/or offset) Sun May 2 2004 T Horinouchi * dcunits.txt: added degree_east/degrees_east etc. Sun Mar 21 2004 T Horinouchi * version 1.2 released ((cvs) tag: numru-units-1_2) Fri Mar 19 2004 T Horinouchi * mulnode.rb: MutiNode#value: to return 1 if @children.size == 0 * dcunits.txt: added degC * lex.rb: convert2: warn if $VERBOSE --> warn regardress $VERBOSE Mon Mar 1 2004 T Horinouchi * version 1.1 released ((cvs) tag: numru-units-1_1) Mon Mar 1 2004 E Toyoda * test.rb: revised due to the change of reduce4; updated * timenode.rb debugged (Unexpected generation of Float by Date#- is avoided using Date-like wrapper to Time.) * node.rb: unalias (such as "kilometer" -> "10^3 m") will not occur at reduce4. (plurals still recognized in reduce4) * namenode.rb,numbernode.rb: unused methods "nameable?" removed * makeutab.rb: Bugfix: units like "second" or "metre" were not unaliased to its primary name (such as "s" or "m") due to improper parsing of dcunits.txt. Sun Feb 29 2004 E Toyoda (Commited by T Horinouchi) * makeutab.rb: debug plural treatment (/y$/ -> /[^aeou]y$/) Fri Feb 27 2004 T Horinouchi * src/lex.rb: added Units#convert2 (similar to Units#convert but more suitable for UNumeric constraction). debug in =~ * test.rb: added a test of =~ Thu Feb 26 2004 T Horinouchi * src/lex.rb: added Units#factor_and_offset * doc/units.rd: updated Wed Feb 25 2004 T Horinouchi * src/Makefile: add -l option to racc -- not to convert line #s for better readability of exception messages * Makefile: (very minor) cp --> cp -p Tue Feb 24 2004 T Horinouchi * version 1.0 released * packaging for distribution * put Units into the NumRu module ( --> class NumRu::Units ) * cvs version control started (CVSROOT= dennou-k.gfd-dennou.org:/GFD_Dennou_Club/ftp/arch/ruby/cvsroot project name: numru-units) Fri Feb 6 2004 TOYODA Eizi (log written by T Horinouchi 2004/03/24) * revised Fri Nov 7 2003 TOYODA Eizi (log written by T Horinouchi 2004/03/24) * revized Fri Oct 24 2003(or before) TOYODA Eizi(log written by T Horinouchi 2004/03/24) * created numru-units-1.9/lib/0000755000175000017500000000000012470635565014754 5ustar horinouthorinoutnumru-units-1.9/lib/numru/0000755000175000017500000000000012470635565016122 5ustar horinouthorinoutnumru-units-1.9/lib/numru/units.rb0000644000175000017500000034662412467011741017616 0ustar horinouthorinout# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.8 # from Racc grammer file "". # require 'racc/parser.rb' require 'date' module NumRu class Units < Racc::Parser module_eval(<<'...end units.racc/module_eval...', 'units.racc', 65) VERSION = "1.9" =begin = class Node Node is a parent class for classes of parse tree node. This is not expected to be instanciated directly. =end class Node def initialize(*args) raise "#{self.class} is virtual." end def to_s(*args) raise "#{self.class}#to_s is virtual." end =begin --- pow other simply constructs a PowNode object. No reduction is performed. =end def pow(other) PowNode.new(self, other) end =begin --- mul other simply constructs a MulNode object. No reduction is performed. =end def mul(other) other = NumberNode.new(other) if Numeric === other MulNode.new(self, other) end =begin --- divide other simply constructs a MulNode object. No reduction is performed. =end def divide(other) MulNode.new(self, PowNode.new(other, NumberNode.new(-1))) end =begin --- shift other simply constructs a ShiftNode object. No reduction is performed. =end def shift(other) ShiftNode.new(self, other) end =begin --- pow_eval other similar to (()), but reduces PowNode[PowNode[...]] into single PowNode[...], so overriden at PowNode class. =end def pow_eval(other) pow(other) end =begin --- inspect =end def inspect2; "#{self.class}[#{to_s}]"; end def inspect; inspect2.gsub(/Units::/, '').gsub(/NumRu::/, '').gsub(/Node\[/, '['); end =begin --- trim in most subclasses, "trim" is redirected into "trim2". =end def trim trim2 end =begin --- flatten in most subclasses, "flatten" is redirected into "flatten2". =end def flatten flatten2 end =begin --- sort =end def sort raise "#{self.class}#sort is virtual: call after flatten" end =begin --- reduce1 --- reduce2 --- reduce3 --- reduce4 --- reduce5 =end def reduce1 self end def reduce2 trim end def reduce3 trim.flatten end def reduce4 # unalias(Hash.new).trim.flatten.sort foldnumber(nil).trim.flatten.sort end def reduce5 expand(Hash.new).trim.flatten.sort end =begin --- ref to be overriden at ShiftNode --- deref to be overriden at ShiftNode =end def ref NumberNode::ZERO end def deref self end end class ErrorNode < Node def initialize(string) @a = string end def to_s; @a; end end class ContainerNode < Node def trim2 x = [] for child in self x.push child.trim2 end self.class.new(*x) end def inspect2 a = [] for child in self a.push child.inspect2 end "#{self.class}[#{a.join(', ')}]" end end module BinaryNode def each yield @lhs yield @rhs end def expand(stopper) self.class.new(@lhs.expand(stopper), @rhs.expand(stopper)) end def unalias(stopper) self.class.new(@lhs.unalias(stopper), @rhs.unalias(stopper)) end def foldnumber(stopper) self.class.new(@lhs.foldnumber(stopper), @rhs.foldnumber(stopper)) end end class TerminalNode < Node def trim2; self; end def flatten2; self; end def expand(stopper); self; end alias :unalias :expand alias :foldnumber :expand def sort; self; end end class NameNode < TerminalNode def initialize(string) @a = string end def to_s; @a; end alias :name :to_s def power; NumberNode::UNITY; end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name PowNode.new(self, self.power.add_eval(another.power)) end def expand(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self if basic? return CACHE[@a] if CACHE.include?(@a) CACHE[@a] = expand2(stopper) end def expand2(stopper) newstopper = stopper.dup newstopper[@a] = true if UDEFS.include?(@a) then Units.new(UDEFS[@a]).ptree.expand(newstopper) else p, n = UALIASES[@a] u = Units.new(UDEFS[n] || n).ptree.expand(newstopper) MulNode.new(u, PowNode.new(NumberNode.new(10), NumberNode.new(p))) end end def unalias(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self unless UALIASES.include?(@a) p, n = UALIASES[@a] u = NameNode.new(n) q = PowNode.new(NumberNode.new(10), NumberNode.new(p)) MulNode.new(u, q) end def foldnumber(stopper) return self unless UPLURALS.include?(@a) n = UPLURALS[@a] NameNode.new(n) end def basic? not (UDEFS.include?(@a) or UALIASES.include?(@a)) end CACHE = {} def factor 1 end end class NameNode UDEFS = { "%" => "1e-2", "Au" => "astronomical_unit", "Bq" => "s-1", "C" => "A.s", "Celsius" => "K @ 273.15", "F" => "C/V", "Fahrenheit" => "degree_F", "G" => "gauss", "Gal" => "cm s-2", "Gy" => "J.kg-1", "H" => "Wb.A-1", "Hg" => "mercury", "Hz" => "1/s", "J" => "N.m", "Julian_year" => "365.25 day", "L" => "litre", "N" => "kg.m.s-2", "P" => "poise", "Pa" => "N.m-2", "Pascal" => "Pa", "S" => "A/V", "St" => "stokes", "Sv" => "J.kg-1", "T" => "Wb.m-2", "V" => "J/C", "W" => "J/s", "Wb" => "V.s", "a" => "are", "ac" => "acre", "acre" => "10 chain2", "ampere" => "A", "angstrom" => "1.0e-10 m", "angular_degree" => "degree", "angular_minute" => "minute_angle", "angular_second" => "second_angle", "are" => "100 m2", "astronomical_unit" => "1.49597870e11 m", "astronomical_units" => "1.49597870e11 m", "atm" => "atmosphere", "atmosphere" => "101325 Pa", "bar" => "1e6 dyn.cm-2", "cal" => "calorie", "calorie" => "4.18605 J", "celsius" => "K @ 273.15", "centigrade" => "K @ 273.15", "century" => "100 year", "chain" => "22 yard", "common_year" => "365 day", "conventional_mercury" => "gravity 13595.10 kg/m3", "coulomb" => "C", "d" => "24 hour", "day" => "24 hour", "degC" => "K @ 273.15", "degF" => "degree_F", "degK" => "K", "deg_C" => "K @ 273.15", "deg_F" => "degree_F", "deg_K" => "K", "degree" => "pi.rad/180", "degreeC" => "K @ 273.15", "degreeF" => "degree_F", "degreeK" => "K", "degree_C" => "K @ 273.15", "degree_E" => "degree", "degree_F" => "degree_R @ 459.67", "degree_N" => "degree", "degree_R" => "K / 1.8", "degree_S" => "degree", "degree_W" => "degree", "degree_c" => "K @ 273.15", "degree_east" => "degree_E", "degree_f" => "degree_R @ 459.67", "degree_north" => "degree_N", "degree_south" => "degree_S", "degree_west" => "degree_W", "degrees_east" => "degree_E", "degrees_north" => "degree_N", "degrees_south" => "degree_S", "degrees_west" => "degree_W", "dyn" => "g.cm.s-2", "dyne" => "g.cm.s-2", "erg" => "dyn cm", "fahrenheit" => "degree_F", "farad" => "coulomb/volt", "feet" => "foot", "fermi" => "1.0e-15 m", "foot" => "12 inch", "force" => "9.80665 m.s-2", "ft" => "foot", "g" => "kg/1000", "gal" => "cm s-2", "gauss" => "T / 10000", "gram" => "kg/1000", "gravity" => "9.806650 meter/second2", "h" => "60 min", "hectare" => "100 are", "hertz" => "Hz", "hg" => "mercury", "horse_power" => "75 m kilogram-force / s", "hour" => "60 min", "hr" => "60 min", "in" => "inch", "inch" => "2.54 cm", "joule" => "J", "kelvin" => "K", "kgf" => "kilogram-force", "kilogram" => "kg", "knot" => "nautical_mile / hour", "kph" => "km / hour", "lb" => "pound", "light_speed" => "299792458 m/s", "light_year" => "9.46e15 m", "light_years" => "9.46e15 m", "litre" => "1.0e-3 m3", "lm" => "cd.sr", "lx" => "lm.m-2", "ly" => "light_year", "mb" => "bar / 1000", "mercury" => "conventional_mercury", "meter" => "metre", "metre" => "m", "mgal" => "cm s-2 / 1000", "micron" => "1.0e-6 m", "mile" => "1760 yard", "millibar" => "bar / 1000", "min" => "60 s", "minute" => "60 s", "minute_angle" => "pi.rad/180/60", "mole" => "mol", "mon" => "month", "month" => "6 pentad", "mph" => "mile / hour", "nautical_mile" => "1852 m", "nautical_miles" => "1852 m", "newton" => "N", "ohm" => "V/A", "ounce" => "pound / 16", "oz" => "ounce", "parsec" => "3.0857e16 m", "pascal" => "Pa", "pc" => "parsec", "percent" => "1e-2", "permil" => "1e-3", "pi" => "3.141592653589793238462", "poise" => "dyn s / cm2", "pound" => "453.6 g", "psi" => "pound-force / inch2", "radian" => "rad", "second" => "s", "second_angle" => "pi.rad/180/60/60", "steradian" => "sr", "stokes" => "cm2 / s", "t" => "ton", "tesla" => "Wb.m-2", "ton" => "1000 kg", "tonne" => "ton", "torr" => "133.322 Pa", "volt" => "V", "watt" => "W", "weber" => "Wb", "yard" => "6 feet", "yd" => "yard", "year" => "12 month", "yr" => "year", } UALIASES = { "Celsiuses" => [0, "Celsius"], "E%" => [18, "%"], "EA" => [18, "A"], "EAu" => [18, "Au"], "EBq" => [18, "Bq"], "EC" => [18, "C"], "EF" => [18, "F"], "EG" => [18, "G"], "EGal" => [18, "Gal"], "EGy" => [18, "Gy"], "EH" => [18, "H"], "EHg" => [18, "Hg"], "EHz" => [18, "Hz"], "EJ" => [18, "J"], "EK" => [18, "K"], "EL" => [18, "L"], "EN" => [18, "N"], "EP" => [18, "P"], "EPa" => [18, "Pa"], "ES" => [18, "S"], "ESt" => [18, "St"], "ESv" => [18, "Sv"], "ET" => [18, "T"], "EV" => [18, "V"], "EW" => [18, "W"], "EWb" => [18, "Wb"], "Ea" => [18, "a"], "Eac" => [18, "ac"], "Eatm" => [18, "atm"], "Ebar" => [18, "bar"], "Ecal" => [18, "cal"], "Econventional_mercury" => [18, "conventional_mercury"], "Ed" => [18, "d"], "EdegC" => [18, "degC"], "EdegF" => [18, "degF"], "Edeg_C" => [18, "deg_C"], "Edeg_F" => [18, "deg_F"], "EdegreeC" => [18, "degreeC"], "EdegreeF" => [18, "degreeF"], "Edegree_C" => [18, "degree_C"], "Edegree_E" => [18, "degree_E"], "Edegree_F" => [18, "degree_F"], "Edegree_N" => [18, "degree_N"], "Edegree_R" => [18, "degree_R"], "Edegree_S" => [18, "degree_S"], "Edegree_W" => [18, "degree_W"], "Edegree_c" => [18, "degree_c"], "Edegree_east" => [18, "degree_east"], "Edegree_f" => [18, "degree_f"], "Edegree_north" => [18, "degree_north"], "Edegree_south" => [18, "degree_south"], "Edegree_west" => [18, "degree_west"], "Edegrees_east" => [18, "degrees_east"], "Edegrees_north" => [18, "degrees_north"], "Edegrees_south" => [18, "degrees_south"], "Edegrees_west" => [18, "degrees_west"], "Edyn" => [18, "dyn"], "Eerg" => [18, "erg"], "Eforce" => [18, "force"], "Eg" => [18, "g"], "Egravity" => [18, "gravity"], "Eh" => [18, "h"], "Ehg" => [18, "hg"], "Ehr" => [18, "hr"], "Ein" => [18, "in"], "Ekg" => [18, "kg"], "Ekgf" => [18, "kgf"], "Ekph" => [18, "kph"], "Elb" => [18, "lb"], "Elm" => [18, "lm"], "Elx" => [18, "lx"], "Ely" => [18, "ly"], "Em" => [18, "m"], "Emb" => [18, "mb"], "Emercury" => [18, "mercury"], "Emgal" => [18, "mgal"], "Emin" => [18, "min"], "Emol" => [18, "mol"], "Emon" => [18, "mon"], "Emph" => [18, "mph"], "Eohm" => [18, "ohm"], "Eoz" => [18, "oz"], "Epc" => [18, "pc"], "Epercent" => [18, "percent"], "Epermil" => [18, "permil"], "Epsi" => [18, "psi"], "Erad" => [18, "rad"], "Es" => [18, "s"], "Esr" => [18, "sr"], "Et" => [18, "t"], "Eyr" => [18, "yr"], "Fahrenheits" => [0, "Fahrenheit"], "G%" => [9, "%"], "GA" => [9, "A"], "GAu" => [9, "Au"], "GBq" => [9, "Bq"], "GC" => [9, "C"], "GF" => [9, "F"], "GG" => [9, "G"], "GGal" => [9, "Gal"], "GGy" => [9, "Gy"], "GH" => [9, "H"], "GHg" => [9, "Hg"], "GHz" => [9, "Hz"], "GJ" => [9, "J"], "GK" => [9, "K"], "GL" => [9, "L"], "GN" => [9, "N"], "GP" => [9, "P"], "GPa" => [9, "Pa"], "GS" => [9, "S"], "GSt" => [9, "St"], "GSv" => [9, "Sv"], "GT" => [9, "T"], "GV" => [9, "V"], "GW" => [9, "W"], "GWb" => [9, "Wb"], "Ga" => [9, "a"], "Gac" => [9, "ac"], "Gatm" => [9, "atm"], "Gbar" => [9, "bar"], "Gcal" => [9, "cal"], "Gconventional_mercury" => [9, "conventional_mercury"], "Gd" => [9, "d"], "GdegC" => [9, "degC"], "GdegF" => [9, "degF"], "Gdeg_C" => [9, "deg_C"], "Gdeg_F" => [9, "deg_F"], "GdegreeC" => [9, "degreeC"], "GdegreeF" => [9, "degreeF"], "Gdegree_C" => [9, "degree_C"], "Gdegree_E" => [9, "degree_E"], "Gdegree_F" => [9, "degree_F"], "Gdegree_N" => [9, "degree_N"], "Gdegree_R" => [9, "degree_R"], "Gdegree_S" => [9, "degree_S"], "Gdegree_W" => [9, "degree_W"], "Gdegree_c" => [9, "degree_c"], "Gdegree_east" => [9, "degree_east"], "Gdegree_f" => [9, "degree_f"], "Gdegree_north" => [9, "degree_north"], "Gdegree_south" => [9, "degree_south"], "Gdegree_west" => [9, "degree_west"], "Gdegrees_east" => [9, "degrees_east"], "Gdegrees_north" => [9, "degrees_north"], "Gdegrees_south" => [9, "degrees_south"], "Gdegrees_west" => [9, "degrees_west"], "Gdyn" => [9, "dyn"], "Gerg" => [9, "erg"], "Gforce" => [9, "force"], "Gg" => [9, "g"], "Ggravity" => [9, "gravity"], "Gh" => [9, "h"], "Ghg" => [9, "hg"], "Ghr" => [9, "hr"], "Gin" => [9, "in"], "Gkg" => [9, "kg"], "Gkgf" => [9, "kgf"], "Gkph" => [9, "kph"], "Glb" => [9, "lb"], "Glm" => [9, "lm"], "Glx" => [9, "lx"], "Gly" => [9, "ly"], "Gm" => [9, "m"], "Gmb" => [9, "mb"], "Gmercury" => [9, "mercury"], "Gmgal" => [9, "mgal"], "Gmin" => [9, "min"], "Gmol" => [9, "mol"], "Gmon" => [9, "mon"], "Gmph" => [9, "mph"], "Gohm" => [9, "ohm"], "Goz" => [9, "oz"], "Gpc" => [9, "pc"], "Gpercent" => [9, "percent"], "Gpermil" => [9, "permil"], "Gpsi" => [9, "psi"], "Grad" => [9, "rad"], "Gs" => [9, "s"], "Gsr" => [9, "sr"], "Gt" => [9, "t"], "Gyr" => [9, "yr"], "Julians_year" => [0, "Julian_year"], "M%" => [6, "%"], "MA" => [6, "A"], "MAu" => [6, "Au"], "MBq" => [6, "Bq"], "MC" => [6, "C"], "MF" => [6, "F"], "MG" => [6, "G"], "MGal" => [6, "Gal"], "MGy" => [6, "Gy"], "MH" => [6, "H"], "MHg" => [6, "Hg"], "MHz" => [6, "Hz"], "MJ" => [6, "J"], "MK" => [6, "K"], "ML" => [6, "L"], "MN" => [6, "N"], "MP" => [6, "P"], "MPa" => [6, "Pa"], "MS" => [6, "S"], "MSt" => [6, "St"], "MSv" => [6, "Sv"], "MT" => [6, "T"], "MV" => [6, "V"], "MW" => [6, "W"], "MWb" => [6, "Wb"], "Ma" => [6, "a"], "Mac" => [6, "ac"], "Matm" => [6, "atm"], "Mbar" => [6, "bar"], "Mcal" => [6, "cal"], "Mconventional_mercury" => [6, "conventional_mercury"], "Md" => [6, "d"], "MdegC" => [6, "degC"], "MdegF" => [6, "degF"], "Mdeg_C" => [6, "deg_C"], "Mdeg_F" => [6, "deg_F"], "MdegreeC" => [6, "degreeC"], "MdegreeF" => [6, "degreeF"], "Mdegree_C" => [6, "degree_C"], "Mdegree_E" => [6, "degree_E"], "Mdegree_F" => [6, "degree_F"], "Mdegree_N" => [6, "degree_N"], "Mdegree_R" => [6, "degree_R"], "Mdegree_S" => [6, "degree_S"], "Mdegree_W" => [6, "degree_W"], "Mdegree_c" => [6, "degree_c"], "Mdegree_east" => [6, "degree_east"], "Mdegree_f" => [6, "degree_f"], "Mdegree_north" => [6, "degree_north"], "Mdegree_south" => [6, "degree_south"], "Mdegree_west" => [6, "degree_west"], "Mdegrees_east" => [6, "degrees_east"], "Mdegrees_north" => [6, "degrees_north"], "Mdegrees_south" => [6, "degrees_south"], "Mdegrees_west" => [6, "degrees_west"], "Mdyn" => [6, "dyn"], "Merg" => [6, "erg"], "Mforce" => [6, "force"], "Mg" => [6, "g"], "Mgravity" => [6, "gravity"], "Mh" => [6, "h"], "Mhg" => [6, "hg"], "Mhr" => [6, "hr"], "Min" => [6, "in"], "Mkg" => [6, "kg"], "Mkgf" => [6, "kgf"], "Mkph" => [6, "kph"], "Mlb" => [6, "lb"], "Mlm" => [6, "lm"], "Mlx" => [6, "lx"], "Mly" => [6, "ly"], "Mm" => [6, "m"], "Mmb" => [6, "mb"], "Mmercury" => [6, "mercury"], "Mmgal" => [6, "mgal"], "Mmin" => [6, "min"], "Mmol" => [6, "mol"], "Mmon" => [6, "mon"], "Mmph" => [6, "mph"], "Mohm" => [6, "ohm"], "Moz" => [6, "oz"], "Mpc" => [6, "pc"], "Mpercent" => [6, "percent"], "Mpermil" => [6, "permil"], "Mpsi" => [6, "psi"], "Mrad" => [6, "rad"], "Ms" => [6, "s"], "Msr" => [6, "sr"], "Mt" => [6, "t"], "Myr" => [6, "yr"], "P%" => [15, "%"], "PA" => [15, "A"], "PAu" => [15, "Au"], "PBq" => [15, "Bq"], "PC" => [15, "C"], "PF" => [15, "F"], "PG" => [15, "G"], "PGal" => [15, "Gal"], "PGy" => [15, "Gy"], "PH" => [15, "H"], "PHg" => [15, "Hg"], "PHz" => [15, "Hz"], "PJ" => [15, "J"], "PK" => [15, "K"], "PL" => [15, "L"], "PN" => [15, "N"], "PP" => [15, "P"], "PPa" => [15, "Pa"], "PS" => [15, "S"], "PSt" => [15, "St"], "PSv" => [15, "Sv"], "PT" => [15, "T"], "PV" => [15, "V"], "PW" => [15, "W"], "PWb" => [15, "Wb"], "Pa" => [15, "a"], "Pac" => [15, "ac"], "Pascals" => [0, "Pascal"], "Patm" => [15, "atm"], "Pbar" => [15, "bar"], "Pcal" => [15, "cal"], "Pconventional_mercury" => [15, "conventional_mercury"], "Pd" => [15, "d"], "PdegC" => [15, "degC"], "PdegF" => [15, "degF"], "Pdeg_C" => [15, "deg_C"], "Pdeg_F" => [15, "deg_F"], "PdegreeC" => [15, "degreeC"], "PdegreeF" => [15, "degreeF"], "Pdegree_C" => [15, "degree_C"], "Pdegree_E" => [15, "degree_E"], "Pdegree_F" => [15, "degree_F"], "Pdegree_N" => [15, "degree_N"], "Pdegree_R" => [15, "degree_R"], "Pdegree_S" => [15, "degree_S"], "Pdegree_W" => [15, "degree_W"], "Pdegree_c" => [15, "degree_c"], "Pdegree_east" => [15, "degree_east"], "Pdegree_f" => [15, "degree_f"], "Pdegree_north" => [15, "degree_north"], "Pdegree_south" => [15, "degree_south"], "Pdegree_west" => [15, "degree_west"], "Pdegrees_east" => [15, "degrees_east"], "Pdegrees_north" => [15, "degrees_north"], "Pdegrees_south" => [15, "degrees_south"], "Pdegrees_west" => [15, "degrees_west"], "Pdyn" => [15, "dyn"], "Perg" => [15, "erg"], "Pforce" => [15, "force"], "Pg" => [15, "g"], "Pgravity" => [15, "gravity"], "Ph" => [15, "h"], "Phg" => [15, "hg"], "Phr" => [15, "hr"], "Pin" => [15, "in"], "Pkg" => [15, "kg"], "Pkgf" => [15, "kgf"], "Pkph" => [15, "kph"], "Plb" => [15, "lb"], "Plm" => [15, "lm"], "Plx" => [15, "lx"], "Ply" => [15, "ly"], "Pm" => [15, "m"], "Pmb" => [15, "mb"], "Pmercury" => [15, "mercury"], "Pmgal" => [15, "mgal"], "Pmin" => [15, "min"], "Pmol" => [15, "mol"], "Pmon" => [15, "mon"], "Pmph" => [15, "mph"], "Pohm" => [15, "ohm"], "Poz" => [15, "oz"], "Ppc" => [15, "pc"], "Ppercent" => [15, "percent"], "Ppermil" => [15, "permil"], "Ppsi" => [15, "psi"], "Prad" => [15, "rad"], "Ps" => [15, "s"], "Psr" => [15, "sr"], "Pt" => [15, "t"], "Pyr" => [15, "yr"], "T%" => [12, "%"], "TA" => [12, "A"], "TAu" => [12, "Au"], "TBq" => [12, "Bq"], "TC" => [12, "C"], "TF" => [12, "F"], "TG" => [12, "G"], "TGal" => [12, "Gal"], "TGy" => [12, "Gy"], "TH" => [12, "H"], "THg" => [12, "Hg"], "THz" => [12, "Hz"], "TJ" => [12, "J"], "TK" => [12, "K"], "TL" => [12, "L"], "TN" => [12, "N"], "TP" => [12, "P"], "TPa" => [12, "Pa"], "TS" => [12, "S"], "TSt" => [12, "St"], "TSv" => [12, "Sv"], "TT" => [12, "T"], "TV" => [12, "V"], "TW" => [12, "W"], "TWb" => [12, "Wb"], "Ta" => [12, "a"], "Tac" => [12, "ac"], "Tatm" => [12, "atm"], "Tbar" => [12, "bar"], "Tcal" => [12, "cal"], "Tconventional_mercury" => [12, "conventional_mercury"], "Td" => [12, "d"], "TdegC" => [12, "degC"], "TdegF" => [12, "degF"], "Tdeg_C" => [12, "deg_C"], "Tdeg_F" => [12, "deg_F"], "TdegreeC" => [12, "degreeC"], "TdegreeF" => [12, "degreeF"], "Tdegree_C" => [12, "degree_C"], "Tdegree_E" => [12, "degree_E"], "Tdegree_F" => [12, "degree_F"], "Tdegree_N" => [12, "degree_N"], "Tdegree_R" => [12, "degree_R"], "Tdegree_S" => [12, "degree_S"], "Tdegree_W" => [12, "degree_W"], "Tdegree_c" => [12, "degree_c"], "Tdegree_east" => [12, "degree_east"], "Tdegree_f" => [12, "degree_f"], "Tdegree_north" => [12, "degree_north"], "Tdegree_south" => [12, "degree_south"], "Tdegree_west" => [12, "degree_west"], "Tdegrees_east" => [12, "degrees_east"], "Tdegrees_north" => [12, "degrees_north"], "Tdegrees_south" => [12, "degrees_south"], "Tdegrees_west" => [12, "degrees_west"], "Tdyn" => [12, "dyn"], "Terg" => [12, "erg"], "Tforce" => [12, "force"], "Tg" => [12, "g"], "Tgravity" => [12, "gravity"], "Th" => [12, "h"], "Thg" => [12, "hg"], "Thr" => [12, "hr"], "Tin" => [12, "in"], "Tkg" => [12, "kg"], "Tkgf" => [12, "kgf"], "Tkph" => [12, "kph"], "Tlb" => [12, "lb"], "Tlm" => [12, "lm"], "Tlx" => [12, "lx"], "Tly" => [12, "ly"], "Tm" => [12, "m"], "Tmb" => [12, "mb"], "Tmercury" => [12, "mercury"], "Tmgal" => [12, "mgal"], "Tmin" => [12, "min"], "Tmol" => [12, "mol"], "Tmon" => [12, "mon"], "Tmph" => [12, "mph"], "Tohm" => [12, "ohm"], "Toz" => [12, "oz"], "Tpc" => [12, "pc"], "Tpercent" => [12, "percent"], "Tpermil" => [12, "permil"], "Tpsi" => [12, "psi"], "Trad" => [12, "rad"], "Ts" => [12, "s"], "Tsr" => [12, "sr"], "Tt" => [12, "t"], "Tyr" => [12, "yr"], "a%" => [-18, "%"], "aA" => [-18, "A"], "aAu" => [-18, "Au"], "aBq" => [-18, "Bq"], "aC" => [-18, "C"], "aF" => [-18, "F"], "aG" => [-18, "G"], "aGal" => [-18, "Gal"], "aGy" => [-18, "Gy"], "aH" => [-18, "H"], "aHg" => [-18, "Hg"], "aHz" => [-18, "Hz"], "aJ" => [-18, "J"], "aK" => [-18, "K"], "aL" => [-18, "L"], "aN" => [-18, "N"], "aP" => [-18, "P"], "aPa" => [-18, "Pa"], "aS" => [-18, "S"], "aSt" => [-18, "St"], "aSv" => [-18, "Sv"], "aT" => [-18, "T"], "aV" => [-18, "V"], "aW" => [-18, "W"], "aWb" => [-18, "Wb"], "aa" => [-18, "a"], "aac" => [-18, "ac"], "aatm" => [-18, "atm"], "abar" => [-18, "bar"], "acal" => [-18, "cal"], "aconventional_mercury" => [-18, "conventional_mercury"], "acres" => [0, "acre"], "ad" => [-18, "d"], "adegC" => [-18, "degC"], "adegF" => [-18, "degF"], "adeg_C" => [-18, "deg_C"], "adeg_F" => [-18, "deg_F"], "adegreeC" => [-18, "degreeC"], "adegreeF" => [-18, "degreeF"], "adegree_C" => [-18, "degree_C"], "adegree_E" => [-18, "degree_E"], "adegree_F" => [-18, "degree_F"], "adegree_N" => [-18, "degree_N"], "adegree_R" => [-18, "degree_R"], "adegree_S" => [-18, "degree_S"], "adegree_W" => [-18, "degree_W"], "adegree_c" => [-18, "degree_c"], "adegree_east" => [-18, "degree_east"], "adegree_f" => [-18, "degree_f"], "adegree_north" => [-18, "degree_north"], "adegree_south" => [-18, "degree_south"], "adegree_west" => [-18, "degree_west"], "adegrees_east" => [-18, "degrees_east"], "adegrees_north" => [-18, "degrees_north"], "adegrees_south" => [-18, "degrees_south"], "adegrees_west" => [-18, "degrees_west"], "adyn" => [-18, "dyn"], "aerg" => [-18, "erg"], "aforce" => [-18, "force"], "ag" => [-18, "g"], "agravity" => [-18, "gravity"], "ah" => [-18, "h"], "ahg" => [-18, "hg"], "ahr" => [-18, "hr"], "ain" => [-18, "in"], "akg" => [-18, "kg"], "akgf" => [-18, "kgf"], "akph" => [-18, "kph"], "alb" => [-18, "lb"], "alm" => [-18, "lm"], "alx" => [-18, "lx"], "aly" => [-18, "ly"], "am" => [-18, "m"], "amb" => [-18, "mb"], "amercury" => [-18, "mercury"], "amgal" => [-18, "mgal"], "amin" => [-18, "min"], "amol" => [-18, "mol"], "amon" => [-18, "mon"], "amperes" => [0, "ampere"], "amph" => [-18, "mph"], "angstroms" => [0, "angstrom"], "angulars_degree" => [0, "angular_degree"], "angulars_minute" => [0, "angular_minute"], "angulars_second" => [0, "angular_second"], "aohm" => [-18, "ohm"], "aoz" => [-18, "oz"], "apc" => [-18, "pc"], "apercent" => [-18, "percent"], "apermil" => [-18, "permil"], "apsi" => [-18, "psi"], "arad" => [-18, "rad"], "ares" => [0, "are"], "as" => [-18, "s"], "asr" => [-18, "sr"], "at" => [-18, "t"], "atmospheres" => [0, "atmosphere"], "attoCelsius" => [-18, "Celsius"], "attoFahrenheit" => [-18, "Fahrenheit"], "attoJulian_year" => [-18, "Julian_year"], "attoPascal" => [-18, "Pascal"], "attoacre" => [-18, "acre"], "attoampere" => [-18, "ampere"], "attoangstrom" => [-18, "angstrom"], "attoangular_degree" => [-18, "angular_degree"], "attoangular_minute" => [-18, "angular_minute"], "attoangular_second" => [-18, "angular_second"], "attoare" => [-18, "are"], "attoatmosphere" => [-18, "atmosphere"], "attocalorie" => [-18, "calorie"], "attocelsius" => [-18, "celsius"], "attocentigrade" => [-18, "centigrade"], "attocentury" => [-18, "century"], "attochain" => [-18, "chain"], "attocommon_year" => [-18, "common_year"], "attocoulomb" => [-18, "coulomb"], "attoday" => [-18, "day"], "attodegK" => [-18, "degK"], "attodeg_K" => [-18, "deg_K"], "attodegree" => [-18, "degree"], "attodegreeK" => [-18, "degreeK"], "attodyne" => [-18, "dyne"], "attoerg" => [-18, "erg"], "attofahrenheit" => [-18, "fahrenheit"], "attofarad" => [-18, "farad"], "attofermi" => [-18, "fermi"], "attogal" => [-18, "gal"], "attogauss" => [-18, "gauss"], "attogram" => [-18, "gram"], "attohectare" => [-18, "hectare"], "attohertz" => [-18, "hertz"], "attohour" => [-18, "hour"], "attoinch" => [-18, "inch"], "attojoule" => [-18, "joule"], "attokelvin" => [-18, "kelvin"], "attokilogram" => [-18, "kilogram"], "attoknot" => [-18, "knot"], "attolitre" => [-18, "litre"], "attometer" => [-18, "meter"], "attometre" => [-18, "metre"], "attomicron" => [-18, "micron"], "attomile" => [-18, "mile"], "attomillibar" => [-18, "millibar"], "attominute" => [-18, "minute"], "attominute_angle" => [-18, "minute_angle"], "attomole" => [-18, "mole"], "attomonth" => [-18, "month"], "attonewton" => [-18, "newton"], "attoounce" => [-18, "ounce"], "attoparsec" => [-18, "parsec"], "attopascal" => [-18, "pascal"], "attopentad" => [-18, "pentad"], "attopoise" => [-18, "poise"], "attopound" => [-18, "pound"], "attoradian" => [-18, "radian"], "attosecond" => [-18, "second"], "attosecond_angle" => [-18, "second_angle"], "attosteradian" => [-18, "steradian"], "attostokes" => [-18, "stokes"], "attotesla" => [-18, "tesla"], "attoton" => [-18, "ton"], "attotonne" => [-18, "tonne"], "attotorr" => [-18, "torr"], "attovolt" => [-18, "volt"], "attowatt" => [-18, "watt"], "attoweber" => [-18, "weber"], "attoyard" => [-18, "yard"], "attoyd" => [-18, "yd"], "attoyear" => [-18, "year"], "ayr" => [-18, "yr"], "c%" => [-2, "%"], "cA" => [-2, "A"], "cAu" => [-2, "Au"], "cBq" => [-2, "Bq"], "cC" => [-2, "C"], "cF" => [-2, "F"], "cG" => [-2, "G"], "cGal" => [-2, "Gal"], "cGy" => [-2, "Gy"], "cH" => [-2, "H"], "cHg" => [-2, "Hg"], "cHz" => [-2, "Hz"], "cJ" => [-2, "J"], "cK" => [-2, "K"], "cL" => [-2, "L"], "cN" => [-2, "N"], "cP" => [-2, "P"], "cPa" => [-2, "Pa"], "cS" => [-2, "S"], "cSt" => [-2, "St"], "cSv" => [-2, "Sv"], "cT" => [-2, "T"], "cV" => [-2, "V"], "cW" => [-2, "W"], "cWb" => [-2, "Wb"], "ca" => [-2, "a"], "cac" => [-2, "ac"], "calories" => [0, "calorie"], "catm" => [-2, "atm"], "cbar" => [-2, "bar"], "ccal" => [-2, "cal"], "cconventional_mercury" => [-2, "conventional_mercury"], "cd" => [-2, "d"], "cdegC" => [-2, "degC"], "cdegF" => [-2, "degF"], "cdeg_C" => [-2, "deg_C"], "cdeg_F" => [-2, "deg_F"], "cdegreeC" => [-2, "degreeC"], "cdegreeF" => [-2, "degreeF"], "cdegree_C" => [-2, "degree_C"], "cdegree_E" => [-2, "degree_E"], "cdegree_F" => [-2, "degree_F"], "cdegree_N" => [-2, "degree_N"], "cdegree_R" => [-2, "degree_R"], "cdegree_S" => [-2, "degree_S"], "cdegree_W" => [-2, "degree_W"], "cdegree_c" => [-2, "degree_c"], "cdegree_east" => [-2, "degree_east"], "cdegree_f" => [-2, "degree_f"], "cdegree_north" => [-2, "degree_north"], "cdegree_south" => [-2, "degree_south"], "cdegree_west" => [-2, "degree_west"], "cdegrees_east" => [-2, "degrees_east"], "cdegrees_north" => [-2, "degrees_north"], "cdegrees_south" => [-2, "degrees_south"], "cdegrees_west" => [-2, "degrees_west"], "cdyn" => [-2, "dyn"], "celsiuses" => [0, "celsius"], "centiCelsius" => [-2, "Celsius"], "centiFahrenheit" => [-2, "Fahrenheit"], "centiJulian_year" => [-2, "Julian_year"], "centiPascal" => [-2, "Pascal"], "centiacre" => [-2, "acre"], "centiampere" => [-2, "ampere"], "centiangstrom" => [-2, "angstrom"], "centiangular_degree" => [-2, "angular_degree"], "centiangular_minute" => [-2, "angular_minute"], "centiangular_second" => [-2, "angular_second"], "centiare" => [-2, "are"], "centiatmosphere" => [-2, "atmosphere"], "centicalorie" => [-2, "calorie"], "centicelsius" => [-2, "celsius"], "centicentigrade" => [-2, "centigrade"], "centicentury" => [-2, "century"], "centichain" => [-2, "chain"], "centicommon_year" => [-2, "common_year"], "centicoulomb" => [-2, "coulomb"], "centiday" => [-2, "day"], "centidegK" => [-2, "degK"], "centideg_K" => [-2, "deg_K"], "centidegree" => [-2, "degree"], "centidegreeK" => [-2, "degreeK"], "centidyne" => [-2, "dyne"], "centierg" => [-2, "erg"], "centifahrenheit" => [-2, "fahrenheit"], "centifarad" => [-2, "farad"], "centifermi" => [-2, "fermi"], "centigal" => [-2, "gal"], "centigauss" => [-2, "gauss"], "centigrades" => [0, "centigrade"], "centigram" => [-2, "gram"], "centihectare" => [-2, "hectare"], "centihertz" => [-2, "hertz"], "centihour" => [-2, "hour"], "centiinch" => [-2, "inch"], "centijoule" => [-2, "joule"], "centikelvin" => [-2, "kelvin"], "centikilogram" => [-2, "kilogram"], "centiknot" => [-2, "knot"], "centilitre" => [-2, "litre"], "centimeter" => [-2, "meter"], "centimetre" => [-2, "metre"], "centimicron" => [-2, "micron"], "centimile" => [-2, "mile"], "centimillibar" => [-2, "millibar"], "centiminute" => [-2, "minute"], "centiminute_angle" => [-2, "minute_angle"], "centimole" => [-2, "mole"], "centimonth" => [-2, "month"], "centinewton" => [-2, "newton"], "centiounce" => [-2, "ounce"], "centiparsec" => [-2, "parsec"], "centipascal" => [-2, "pascal"], "centipentad" => [-2, "pentad"], "centipoise" => [-2, "poise"], "centipound" => [-2, "pound"], "centiradian" => [-2, "radian"], "centisecond" => [-2, "second"], "centisecond_angle" => [-2, "second_angle"], "centisteradian" => [-2, "steradian"], "centistokes" => [-2, "stokes"], "centitesla" => [-2, "tesla"], "centiton" => [-2, "ton"], "centitonne" => [-2, "tonne"], "centitorr" => [-2, "torr"], "centivolt" => [-2, "volt"], "centiwatt" => [-2, "watt"], "centiweber" => [-2, "weber"], "centiyard" => [-2, "yard"], "centiyd" => [-2, "yd"], "centiyear" => [-2, "year"], "centuries" => [0, "century"], "cerg" => [-2, "erg"], "cforce" => [-2, "force"], "cg" => [-2, "g"], "cgravity" => [-2, "gravity"], "ch" => [-2, "h"], "chains" => [0, "chain"], "chg" => [-2, "hg"], "chr" => [-2, "hr"], "cin" => [-2, "in"], "ckg" => [-2, "kg"], "ckgf" => [-2, "kgf"], "ckph" => [-2, "kph"], "clb" => [-2, "lb"], "clm" => [-2, "lm"], "clx" => [-2, "lx"], "cly" => [-2, "ly"], "cm" => [-2, "m"], "cmb" => [-2, "mb"], "cmercury" => [-2, "mercury"], "cmgal" => [-2, "mgal"], "cmin" => [-2, "min"], "cmol" => [-2, "mol"], "cmon" => [-2, "mon"], "cmph" => [-2, "mph"], "cohm" => [-2, "ohm"], "commons_year" => [0, "common_year"], "coulombs" => [0, "coulomb"], "coz" => [-2, "oz"], "cpc" => [-2, "pc"], "cpercent" => [-2, "percent"], "cpermil" => [-2, "permil"], "cpsi" => [-2, "psi"], "crad" => [-2, "rad"], "cs" => [-2, "s"], "csr" => [-2, "sr"], "ct" => [-2, "t"], "cyr" => [-2, "yr"], "d%" => [-1, "%"], "dA" => [-1, "A"], "dAu" => [-1, "Au"], "dBq" => [-1, "Bq"], "dC" => [-1, "C"], "dF" => [-1, "F"], "dG" => [-1, "G"], "dGal" => [-1, "Gal"], "dGy" => [-1, "Gy"], "dH" => [-1, "H"], "dHg" => [-1, "Hg"], "dHz" => [-1, "Hz"], "dJ" => [-1, "J"], "dK" => [-1, "K"], "dL" => [-1, "L"], "dN" => [-1, "N"], "dP" => [-1, "P"], "dPa" => [-1, "Pa"], "dS" => [-1, "S"], "dSt" => [-1, "St"], "dSv" => [-1, "Sv"], "dT" => [-1, "T"], "dV" => [-1, "V"], "dW" => [-1, "W"], "dWb" => [-1, "Wb"], "da" => [-1, "a"], "da%" => [1, "%"], "daA" => [1, "A"], "daAu" => [1, "Au"], "daBq" => [1, "Bq"], "daC" => [1, "C"], "daF" => [1, "F"], "daG" => [1, "G"], "daGal" => [1, "Gal"], "daGy" => [1, "Gy"], "daH" => [1, "H"], "daHg" => [1, "Hg"], "daHz" => [1, "Hz"], "daJ" => [1, "J"], "daK" => [1, "K"], "daL" => [1, "L"], "daN" => [1, "N"], "daP" => [1, "P"], "daPa" => [1, "Pa"], "daS" => [1, "S"], "daSt" => [1, "St"], "daSv" => [1, "Sv"], "daT" => [1, "T"], "daV" => [1, "V"], "daW" => [1, "W"], "daWb" => [1, "Wb"], "daa" => [1, "a"], "daac" => [1, "ac"], "daatm" => [1, "atm"], "dabar" => [1, "bar"], "dac" => [-1, "ac"], "dacal" => [1, "cal"], "daconventional_mercury" => [1, "conventional_mercury"], "dad" => [1, "d"], "dadegC" => [1, "degC"], "dadegF" => [1, "degF"], "dadeg_C" => [1, "deg_C"], "dadeg_F" => [1, "deg_F"], "dadegreeC" => [1, "degreeC"], "dadegreeF" => [1, "degreeF"], "dadegree_C" => [1, "degree_C"], "dadegree_E" => [1, "degree_E"], "dadegree_F" => [1, "degree_F"], "dadegree_N" => [1, "degree_N"], "dadegree_R" => [1, "degree_R"], "dadegree_S" => [1, "degree_S"], "dadegree_W" => [1, "degree_W"], "dadegree_c" => [1, "degree_c"], "dadegree_east" => [1, "degree_east"], "dadegree_f" => [1, "degree_f"], "dadegree_north" => [1, "degree_north"], "dadegree_south" => [1, "degree_south"], "dadegree_west" => [1, "degree_west"], "dadegrees_east" => [1, "degrees_east"], "dadegrees_north" => [1, "degrees_north"], "dadegrees_south" => [1, "degrees_south"], "dadegrees_west" => [1, "degrees_west"], "dadyn" => [1, "dyn"], "daerg" => [1, "erg"], "daforce" => [1, "force"], "dag" => [1, "g"], "dagravity" => [1, "gravity"], "dah" => [1, "h"], "dahg" => [1, "hg"], "dahr" => [1, "hr"], "dain" => [1, "in"], "dakg" => [1, "kg"], "dakgf" => [1, "kgf"], "dakph" => [1, "kph"], "dalb" => [1, "lb"], "dalm" => [1, "lm"], "dalx" => [1, "lx"], "daly" => [1, "ly"], "dam" => [1, "m"], "damb" => [1, "mb"], "damercury" => [1, "mercury"], "damgal" => [1, "mgal"], "damin" => [1, "min"], "damol" => [1, "mol"], "damon" => [1, "mon"], "damph" => [1, "mph"], "daohm" => [1, "ohm"], "daoz" => [1, "oz"], "dapc" => [1, "pc"], "dapercent" => [1, "percent"], "dapermil" => [1, "permil"], "dapsi" => [1, "psi"], "darad" => [1, "rad"], "das" => [1, "s"], "dasr" => [1, "sr"], "dat" => [1, "t"], "datm" => [-1, "atm"], "dayr" => [1, "yr"], "days" => [0, "day"], "dbar" => [-1, "bar"], "dcal" => [-1, "cal"], "dconventional_mercury" => [-1, "conventional_mercury"], "dd" => [-1, "d"], "ddegC" => [-1, "degC"], "ddegF" => [-1, "degF"], "ddeg_C" => [-1, "deg_C"], "ddeg_F" => [-1, "deg_F"], "ddegreeC" => [-1, "degreeC"], "ddegreeF" => [-1, "degreeF"], "ddegree_C" => [-1, "degree_C"], "ddegree_E" => [-1, "degree_E"], "ddegree_F" => [-1, "degree_F"], "ddegree_N" => [-1, "degree_N"], "ddegree_R" => [-1, "degree_R"], "ddegree_S" => [-1, "degree_S"], "ddegree_W" => [-1, "degree_W"], "ddegree_c" => [-1, "degree_c"], "ddegree_east" => [-1, "degree_east"], "ddegree_f" => [-1, "degree_f"], "ddegree_north" => [-1, "degree_north"], "ddegree_south" => [-1, "degree_south"], "ddegree_west" => [-1, "degree_west"], "ddegrees_east" => [-1, "degrees_east"], "ddegrees_north" => [-1, "degrees_north"], "ddegrees_south" => [-1, "degrees_south"], "ddegrees_west" => [-1, "degrees_west"], "ddyn" => [-1, "dyn"], "decaCelsius" => [1, "Celsius"], "decaFahrenheit" => [1, "Fahrenheit"], "decaJulian_year" => [1, "Julian_year"], "decaPascal" => [1, "Pascal"], "decaacre" => [1, "acre"], "decaampere" => [1, "ampere"], "decaangstrom" => [1, "angstrom"], "decaangular_degree" => [1, "angular_degree"], "decaangular_minute" => [1, "angular_minute"], "decaangular_second" => [1, "angular_second"], "decaare" => [1, "are"], "decaatmosphere" => [1, "atmosphere"], "decacalorie" => [1, "calorie"], "decacelsius" => [1, "celsius"], "decacentigrade" => [1, "centigrade"], "decacentury" => [1, "century"], "decachain" => [1, "chain"], "decacommon_year" => [1, "common_year"], "decacoulomb" => [1, "coulomb"], "decaday" => [1, "day"], "decadegK" => [1, "degK"], "decadeg_K" => [1, "deg_K"], "decadegree" => [1, "degree"], "decadegreeK" => [1, "degreeK"], "decadyne" => [1, "dyne"], "decaerg" => [1, "erg"], "decafahrenheit" => [1, "fahrenheit"], "decafarad" => [1, "farad"], "decafermi" => [1, "fermi"], "decagal" => [1, "gal"], "decagauss" => [1, "gauss"], "decagram" => [1, "gram"], "decahectare" => [1, "hectare"], "decahertz" => [1, "hertz"], "decahour" => [1, "hour"], "decainch" => [1, "inch"], "decajoule" => [1, "joule"], "decakelvin" => [1, "kelvin"], "decakilogram" => [1, "kilogram"], "decaknot" => [1, "knot"], "decalitre" => [1, "litre"], "decameter" => [1, "meter"], "decametre" => [1, "metre"], "decamicron" => [1, "micron"], "decamile" => [1, "mile"], "decamillibar" => [1, "millibar"], "decaminute" => [1, "minute"], "decaminute_angle" => [1, "minute_angle"], "decamole" => [1, "mole"], "decamonth" => [1, "month"], "decanewton" => [1, "newton"], "decaounce" => [1, "ounce"], "decaparsec" => [1, "parsec"], "decapascal" => [1, "pascal"], "decapentad" => [1, "pentad"], "decapoise" => [1, "poise"], "decapound" => [1, "pound"], "decaradian" => [1, "radian"], "decasecond" => [1, "second"], "decasecond_angle" => [1, "second_angle"], "decasteradian" => [1, "steradian"], "decastokes" => [1, "stokes"], "decatesla" => [1, "tesla"], "decaton" => [1, "ton"], "decatonne" => [1, "tonne"], "decatorr" => [1, "torr"], "decavolt" => [1, "volt"], "decawatt" => [1, "watt"], "decaweber" => [1, "weber"], "decayard" => [1, "yard"], "decayd" => [1, "yd"], "decayear" => [1, "year"], "deciCelsius" => [-1, "Celsius"], "deciFahrenheit" => [-1, "Fahrenheit"], "deciJulian_year" => [-1, "Julian_year"], "deciPascal" => [-1, "Pascal"], "deciacre" => [-1, "acre"], "deciampere" => [-1, "ampere"], "deciangstrom" => [-1, "angstrom"], "deciangular_degree" => [-1, "angular_degree"], "deciangular_minute" => [-1, "angular_minute"], "deciangular_second" => [-1, "angular_second"], "deciare" => [-1, "are"], "deciatmosphere" => [-1, "atmosphere"], "decicalorie" => [-1, "calorie"], "decicelsius" => [-1, "celsius"], "decicentigrade" => [-1, "centigrade"], "decicentury" => [-1, "century"], "decichain" => [-1, "chain"], "decicommon_year" => [-1, "common_year"], "decicoulomb" => [-1, "coulomb"], "deciday" => [-1, "day"], "decidegK" => [-1, "degK"], "decideg_K" => [-1, "deg_K"], "decidegree" => [-1, "degree"], "decidegreeK" => [-1, "degreeK"], "decidyne" => [-1, "dyne"], "decierg" => [-1, "erg"], "decifahrenheit" => [-1, "fahrenheit"], "decifarad" => [-1, "farad"], "decifermi" => [-1, "fermi"], "decigal" => [-1, "gal"], "decigauss" => [-1, "gauss"], "decigram" => [-1, "gram"], "decihectare" => [-1, "hectare"], "decihertz" => [-1, "hertz"], "decihour" => [-1, "hour"], "deciinch" => [-1, "inch"], "decijoule" => [-1, "joule"], "decikelvin" => [-1, "kelvin"], "decikilogram" => [-1, "kilogram"], "deciknot" => [-1, "knot"], "decilitre" => [-1, "litre"], "decimeter" => [-1, "meter"], "decimetre" => [-1, "metre"], "decimicron" => [-1, "micron"], "decimile" => [-1, "mile"], "decimillibar" => [-1, "millibar"], "deciminute" => [-1, "minute"], "deciminute_angle" => [-1, "minute_angle"], "decimole" => [-1, "mole"], "decimonth" => [-1, "month"], "decinewton" => [-1, "newton"], "deciounce" => [-1, "ounce"], "deciparsec" => [-1, "parsec"], "decipascal" => [-1, "pascal"], "decipentad" => [-1, "pentad"], "decipoise" => [-1, "poise"], "decipound" => [-1, "pound"], "deciradian" => [-1, "radian"], "decisecond" => [-1, "second"], "decisecond_angle" => [-1, "second_angle"], "decisteradian" => [-1, "steradian"], "decistokes" => [-1, "stokes"], "decitesla" => [-1, "tesla"], "deciton" => [-1, "ton"], "decitonne" => [-1, "tonne"], "decitorr" => [-1, "torr"], "decivolt" => [-1, "volt"], "deciwatt" => [-1, "watt"], "deciweber" => [-1, "weber"], "deciyard" => [-1, "yard"], "deciyd" => [-1, "yd"], "deciyear" => [-1, "year"], "degKs" => [0, "degK"], "degreeKs" => [0, "degreeK"], "degrees" => [0, "degree"], "degs_K" => [0, "deg_K"], "derg" => [-1, "erg"], "dforce" => [-1, "force"], "dg" => [-1, "g"], "dgravity" => [-1, "gravity"], "dh" => [-1, "h"], "dhg" => [-1, "hg"], "dhr" => [-1, "hr"], "din" => [-1, "in"], "dkg" => [-1, "kg"], "dkgf" => [-1, "kgf"], "dkph" => [-1, "kph"], "dlb" => [-1, "lb"], "dlm" => [-1, "lm"], "dlx" => [-1, "lx"], "dly" => [-1, "ly"], "dm" => [-1, "m"], "dmb" => [-1, "mb"], "dmercury" => [-1, "mercury"], "dmgal" => [-1, "mgal"], "dmin" => [-1, "min"], "dmol" => [-1, "mol"], "dmon" => [-1, "mon"], "dmph" => [-1, "mph"], "dohm" => [-1, "ohm"], "doz" => [-1, "oz"], "dpc" => [-1, "pc"], "dpercent" => [-1, "percent"], "dpermil" => [-1, "permil"], "dpsi" => [-1, "psi"], "drad" => [-1, "rad"], "ds" => [-1, "s"], "dsr" => [-1, "sr"], "dt" => [-1, "t"], "dynes" => [0, "dyne"], "dyr" => [-1, "yr"], "ergs" => [0, "erg"], "exaCelsius" => [18, "Celsius"], "exaFahrenheit" => [18, "Fahrenheit"], "exaJulian_year" => [18, "Julian_year"], "exaPascal" => [18, "Pascal"], "exaacre" => [18, "acre"], "exaampere" => [18, "ampere"], "exaangstrom" => [18, "angstrom"], "exaangular_degree" => [18, "angular_degree"], "exaangular_minute" => [18, "angular_minute"], "exaangular_second" => [18, "angular_second"], "exaare" => [18, "are"], "exaatmosphere" => [18, "atmosphere"], "exacalorie" => [18, "calorie"], "exacelsius" => [18, "celsius"], "exacentigrade" => [18, "centigrade"], "exacentury" => [18, "century"], "exachain" => [18, "chain"], "exacommon_year" => [18, "common_year"], "exacoulomb" => [18, "coulomb"], "exaday" => [18, "day"], "exadegK" => [18, "degK"], "exadeg_K" => [18, "deg_K"], "exadegree" => [18, "degree"], "exadegreeK" => [18, "degreeK"], "exadyne" => [18, "dyne"], "exaerg" => [18, "erg"], "exafahrenheit" => [18, "fahrenheit"], "exafarad" => [18, "farad"], "exafermi" => [18, "fermi"], "exagal" => [18, "gal"], "exagauss" => [18, "gauss"], "exagram" => [18, "gram"], "exahectare" => [18, "hectare"], "exahertz" => [18, "hertz"], "exahour" => [18, "hour"], "exainch" => [18, "inch"], "exajoule" => [18, "joule"], "exakelvin" => [18, "kelvin"], "exakilogram" => [18, "kilogram"], "exaknot" => [18, "knot"], "exalitre" => [18, "litre"], "exameter" => [18, "meter"], "exametre" => [18, "metre"], "examicron" => [18, "micron"], "examile" => [18, "mile"], "examillibar" => [18, "millibar"], "examinute" => [18, "minute"], "examinute_angle" => [18, "minute_angle"], "examole" => [18, "mole"], "examonth" => [18, "month"], "exanewton" => [18, "newton"], "exaounce" => [18, "ounce"], "exaparsec" => [18, "parsec"], "exapascal" => [18, "pascal"], "exapentad" => [18, "pentad"], "exapoise" => [18, "poise"], "exapound" => [18, "pound"], "exaradian" => [18, "radian"], "exasecond" => [18, "second"], "exasecond_angle" => [18, "second_angle"], "exasteradian" => [18, "steradian"], "exastokes" => [18, "stokes"], "exatesla" => [18, "tesla"], "exaton" => [18, "ton"], "exatonne" => [18, "tonne"], "exatorr" => [18, "torr"], "exavolt" => [18, "volt"], "exawatt" => [18, "watt"], "exaweber" => [18, "weber"], "exayard" => [18, "yard"], "exayd" => [18, "yd"], "exayear" => [18, "year"], "f%" => [-15, "%"], "fA" => [-15, "A"], "fAu" => [-15, "Au"], "fBq" => [-15, "Bq"], "fC" => [-15, "C"], "fF" => [-15, "F"], "fG" => [-15, "G"], "fGal" => [-15, "Gal"], "fGy" => [-15, "Gy"], "fH" => [-15, "H"], "fHg" => [-15, "Hg"], "fHz" => [-15, "Hz"], "fJ" => [-15, "J"], "fK" => [-15, "K"], "fL" => [-15, "L"], "fN" => [-15, "N"], "fP" => [-15, "P"], "fPa" => [-15, "Pa"], "fS" => [-15, "S"], "fSt" => [-15, "St"], "fSv" => [-15, "Sv"], "fT" => [-15, "T"], "fV" => [-15, "V"], "fW" => [-15, "W"], "fWb" => [-15, "Wb"], "fa" => [-15, "a"], "fac" => [-15, "ac"], "fahrenheits" => [0, "fahrenheit"], "farads" => [0, "farad"], "fatm" => [-15, "atm"], "fbar" => [-15, "bar"], "fcal" => [-15, "cal"], "fconventional_mercury" => [-15, "conventional_mercury"], "fd" => [-15, "d"], "fdegC" => [-15, "degC"], "fdegF" => [-15, "degF"], "fdeg_C" => [-15, "deg_C"], "fdeg_F" => [-15, "deg_F"], "fdegreeC" => [-15, "degreeC"], "fdegreeF" => [-15, "degreeF"], "fdegree_C" => [-15, "degree_C"], "fdegree_E" => [-15, "degree_E"], "fdegree_F" => [-15, "degree_F"], "fdegree_N" => [-15, "degree_N"], "fdegree_R" => [-15, "degree_R"], "fdegree_S" => [-15, "degree_S"], "fdegree_W" => [-15, "degree_W"], "fdegree_c" => [-15, "degree_c"], "fdegree_east" => [-15, "degree_east"], "fdegree_f" => [-15, "degree_f"], "fdegree_north" => [-15, "degree_north"], "fdegree_south" => [-15, "degree_south"], "fdegree_west" => [-15, "degree_west"], "fdegrees_east" => [-15, "degrees_east"], "fdegrees_north" => [-15, "degrees_north"], "fdegrees_south" => [-15, "degrees_south"], "fdegrees_west" => [-15, "degrees_west"], "fdyn" => [-15, "dyn"], "femtoCelsius" => [-15, "Celsius"], "femtoFahrenheit" => [-15, "Fahrenheit"], "femtoJulian_year" => [-15, "Julian_year"], "femtoPascal" => [-15, "Pascal"], "femtoacre" => [-15, "acre"], "femtoampere" => [-15, "ampere"], "femtoangstrom" => [-15, "angstrom"], "femtoangular_degree" => [-15, "angular_degree"], "femtoangular_minute" => [-15, "angular_minute"], "femtoangular_second" => [-15, "angular_second"], "femtoare" => [-15, "are"], "femtoatmosphere" => [-15, "atmosphere"], "femtocalorie" => [-15, "calorie"], "femtocelsius" => [-15, "celsius"], "femtocentigrade" => [-15, "centigrade"], "femtocentury" => [-15, "century"], "femtochain" => [-15, "chain"], "femtocommon_year" => [-15, "common_year"], "femtocoulomb" => [-15, "coulomb"], "femtoday" => [-15, "day"], "femtodegK" => [-15, "degK"], "femtodeg_K" => [-15, "deg_K"], "femtodegree" => [-15, "degree"], "femtodegreeK" => [-15, "degreeK"], "femtodyne" => [-15, "dyne"], "femtoerg" => [-15, "erg"], "femtofahrenheit" => [-15, "fahrenheit"], "femtofarad" => [-15, "farad"], "femtofermi" => [-15, "fermi"], "femtogal" => [-15, "gal"], "femtogauss" => [-15, "gauss"], "femtogram" => [-15, "gram"], "femtohectare" => [-15, "hectare"], "femtohertz" => [-15, "hertz"], "femtohour" => [-15, "hour"], "femtoinch" => [-15, "inch"], "femtojoule" => [-15, "joule"], "femtokelvin" => [-15, "kelvin"], "femtokilogram" => [-15, "kilogram"], "femtoknot" => [-15, "knot"], "femtolitre" => [-15, "litre"], "femtometer" => [-15, "meter"], "femtometre" => [-15, "metre"], "femtomicron" => [-15, "micron"], "femtomile" => [-15, "mile"], "femtomillibar" => [-15, "millibar"], "femtominute" => [-15, "minute"], "femtominute_angle" => [-15, "minute_angle"], "femtomole" => [-15, "mole"], "femtomonth" => [-15, "month"], "femtonewton" => [-15, "newton"], "femtoounce" => [-15, "ounce"], "femtoparsec" => [-15, "parsec"], "femtopascal" => [-15, "pascal"], "femtopentad" => [-15, "pentad"], "femtopoise" => [-15, "poise"], "femtopound" => [-15, "pound"], "femtoradian" => [-15, "radian"], "femtosecond" => [-15, "second"], "femtosecond_angle" => [-15, "second_angle"], "femtosteradian" => [-15, "steradian"], "femtostokes" => [-15, "stokes"], "femtotesla" => [-15, "tesla"], "femtoton" => [-15, "ton"], "femtotonne" => [-15, "tonne"], "femtotorr" => [-15, "torr"], "femtovolt" => [-15, "volt"], "femtowatt" => [-15, "watt"], "femtoweber" => [-15, "weber"], "femtoyard" => [-15, "yard"], "femtoyd" => [-15, "yd"], "femtoyear" => [-15, "year"], "ferg" => [-15, "erg"], "fermis" => [0, "fermi"], "fforce" => [-15, "force"], "fg" => [-15, "g"], "fgravity" => [-15, "gravity"], "fh" => [-15, "h"], "fhg" => [-15, "hg"], "fhr" => [-15, "hr"], "fin" => [-15, "in"], "fkg" => [-15, "kg"], "fkgf" => [-15, "kgf"], "fkph" => [-15, "kph"], "flb" => [-15, "lb"], "flm" => [-15, "lm"], "flx" => [-15, "lx"], "fly" => [-15, "ly"], "fm" => [-15, "m"], "fmb" => [-15, "mb"], "fmercury" => [-15, "mercury"], "fmgal" => [-15, "mgal"], "fmin" => [-15, "min"], "fmol" => [-15, "mol"], "fmon" => [-15, "mon"], "fmph" => [-15, "mph"], "fohm" => [-15, "ohm"], "foz" => [-15, "oz"], "fpc" => [-15, "pc"], "fpercent" => [-15, "percent"], "fpermil" => [-15, "permil"], "fpsi" => [-15, "psi"], "frad" => [-15, "rad"], "fs" => [-15, "s"], "fsr" => [-15, "sr"], "ft" => [-15, "t"], "fyr" => [-15, "yr"], "gals" => [0, "gal"], "gausses" => [0, "gauss"], "gigaCelsius" => [9, "Celsius"], "gigaFahrenheit" => [9, "Fahrenheit"], "gigaJulian_year" => [9, "Julian_year"], "gigaPascal" => [9, "Pascal"], "gigaacre" => [9, "acre"], "gigaampere" => [9, "ampere"], "gigaangstrom" => [9, "angstrom"], "gigaangular_degree" => [9, "angular_degree"], "gigaangular_minute" => [9, "angular_minute"], "gigaangular_second" => [9, "angular_second"], "gigaare" => [9, "are"], "gigaatmosphere" => [9, "atmosphere"], "gigacalorie" => [9, "calorie"], "gigacelsius" => [9, "celsius"], "gigacentigrade" => [9, "centigrade"], "gigacentury" => [9, "century"], "gigachain" => [9, "chain"], "gigacommon_year" => [9, "common_year"], "gigacoulomb" => [9, "coulomb"], "gigaday" => [9, "day"], "gigadegK" => [9, "degK"], "gigadeg_K" => [9, "deg_K"], "gigadegree" => [9, "degree"], "gigadegreeK" => [9, "degreeK"], "gigadyne" => [9, "dyne"], "gigaerg" => [9, "erg"], "gigafahrenheit" => [9, "fahrenheit"], "gigafarad" => [9, "farad"], "gigafermi" => [9, "fermi"], "gigagal" => [9, "gal"], "gigagauss" => [9, "gauss"], "gigagram" => [9, "gram"], "gigahectare" => [9, "hectare"], "gigahertz" => [9, "hertz"], "gigahour" => [9, "hour"], "gigainch" => [9, "inch"], "gigajoule" => [9, "joule"], "gigakelvin" => [9, "kelvin"], "gigakilogram" => [9, "kilogram"], "gigaknot" => [9, "knot"], "gigalitre" => [9, "litre"], "gigameter" => [9, "meter"], "gigametre" => [9, "metre"], "gigamicron" => [9, "micron"], "gigamile" => [9, "mile"], "gigamillibar" => [9, "millibar"], "gigaminute" => [9, "minute"], "gigaminute_angle" => [9, "minute_angle"], "gigamole" => [9, "mole"], "gigamonth" => [9, "month"], "giganewton" => [9, "newton"], "gigaounce" => [9, "ounce"], "gigaparsec" => [9, "parsec"], "gigapascal" => [9, "pascal"], "gigapentad" => [9, "pentad"], "gigapoise" => [9, "poise"], "gigapound" => [9, "pound"], "gigaradian" => [9, "radian"], "gigasecond" => [9, "second"], "gigasecond_angle" => [9, "second_angle"], "gigasteradian" => [9, "steradian"], "gigastokes" => [9, "stokes"], "gigatesla" => [9, "tesla"], "gigaton" => [9, "ton"], "gigatonne" => [9, "tonne"], "gigatorr" => [9, "torr"], "gigavolt" => [9, "volt"], "gigawatt" => [9, "watt"], "gigaweber" => [9, "weber"], "gigayard" => [9, "yard"], "gigayd" => [9, "yd"], "gigayear" => [9, "year"], "grams" => [0, "gram"], "h%" => [2, "%"], "hA" => [2, "A"], "hAu" => [2, "Au"], "hBq" => [2, "Bq"], "hC" => [2, "C"], "hF" => [2, "F"], "hG" => [2, "G"], "hGal" => [2, "Gal"], "hGy" => [2, "Gy"], "hH" => [2, "H"], "hHg" => [2, "Hg"], "hHz" => [2, "Hz"], "hJ" => [2, "J"], "hK" => [2, "K"], "hL" => [2, "L"], "hN" => [2, "N"], "hP" => [2, "P"], "hPa" => [2, "Pa"], "hS" => [2, "S"], "hSt" => [2, "St"], "hSv" => [2, "Sv"], "hT" => [2, "T"], "hV" => [2, "V"], "hW" => [2, "W"], "hWb" => [2, "Wb"], "ha" => [2, "a"], "hac" => [2, "ac"], "hatm" => [2, "atm"], "hbar" => [2, "bar"], "hcal" => [2, "cal"], "hconventional_mercury" => [2, "conventional_mercury"], "hd" => [2, "d"], "hdegC" => [2, "degC"], "hdegF" => [2, "degF"], "hdeg_C" => [2, "deg_C"], "hdeg_F" => [2, "deg_F"], "hdegreeC" => [2, "degreeC"], "hdegreeF" => [2, "degreeF"], "hdegree_C" => [2, "degree_C"], "hdegree_E" => [2, "degree_E"], "hdegree_F" => [2, "degree_F"], "hdegree_N" => [2, "degree_N"], "hdegree_R" => [2, "degree_R"], "hdegree_S" => [2, "degree_S"], "hdegree_W" => [2, "degree_W"], "hdegree_c" => [2, "degree_c"], "hdegree_east" => [2, "degree_east"], "hdegree_f" => [2, "degree_f"], "hdegree_north" => [2, "degree_north"], "hdegree_south" => [2, "degree_south"], "hdegree_west" => [2, "degree_west"], "hdegrees_east" => [2, "degrees_east"], "hdegrees_north" => [2, "degrees_north"], "hdegrees_south" => [2, "degrees_south"], "hdegrees_west" => [2, "degrees_west"], "hdyn" => [2, "dyn"], "hectares" => [0, "hectare"], "hectoCelsius" => [2, "Celsius"], "hectoFahrenheit" => [2, "Fahrenheit"], "hectoJulian_year" => [2, "Julian_year"], "hectoPascal" => [2, "Pascal"], "hectoacre" => [2, "acre"], "hectoampere" => [2, "ampere"], "hectoangstrom" => [2, "angstrom"], "hectoangular_degree" => [2, "angular_degree"], "hectoangular_minute" => [2, "angular_minute"], "hectoangular_second" => [2, "angular_second"], "hectoare" => [2, "are"], "hectoatmosphere" => [2, "atmosphere"], "hectocalorie" => [2, "calorie"], "hectocelsius" => [2, "celsius"], "hectocentigrade" => [2, "centigrade"], "hectocentury" => [2, "century"], "hectochain" => [2, "chain"], "hectocommon_year" => [2, "common_year"], "hectocoulomb" => [2, "coulomb"], "hectoday" => [2, "day"], "hectodegK" => [2, "degK"], "hectodeg_K" => [2, "deg_K"], "hectodegree" => [2, "degree"], "hectodegreeK" => [2, "degreeK"], "hectodyne" => [2, "dyne"], "hectoerg" => [2, "erg"], "hectofahrenheit" => [2, "fahrenheit"], "hectofarad" => [2, "farad"], "hectofermi" => [2, "fermi"], "hectogal" => [2, "gal"], "hectogauss" => [2, "gauss"], "hectogram" => [2, "gram"], "hectohectare" => [2, "hectare"], "hectohertz" => [2, "hertz"], "hectohour" => [2, "hour"], "hectoinch" => [2, "inch"], "hectojoule" => [2, "joule"], "hectokelvin" => [2, "kelvin"], "hectokilogram" => [2, "kilogram"], "hectoknot" => [2, "knot"], "hectolitre" => [2, "litre"], "hectometer" => [2, "meter"], "hectometre" => [2, "metre"], "hectomicron" => [2, "micron"], "hectomile" => [2, "mile"], "hectomillibar" => [2, "millibar"], "hectominute" => [2, "minute"], "hectominute_angle" => [2, "minute_angle"], "hectomole" => [2, "mole"], "hectomonth" => [2, "month"], "hectonewton" => [2, "newton"], "hectoounce" => [2, "ounce"], "hectoparsec" => [2, "parsec"], "hectopascal" => [2, "pascal"], "hectopentad" => [2, "pentad"], "hectopoise" => [2, "poise"], "hectopound" => [2, "pound"], "hectoradian" => [2, "radian"], "hectosecond" => [2, "second"], "hectosecond_angle" => [2, "second_angle"], "hectosteradian" => [2, "steradian"], "hectostokes" => [2, "stokes"], "hectotesla" => [2, "tesla"], "hectoton" => [2, "ton"], "hectotonne" => [2, "tonne"], "hectotorr" => [2, "torr"], "hectovolt" => [2, "volt"], "hectowatt" => [2, "watt"], "hectoweber" => [2, "weber"], "hectoyard" => [2, "yard"], "hectoyd" => [2, "yd"], "hectoyear" => [2, "year"], "herg" => [2, "erg"], "hertzes" => [0, "hertz"], "hforce" => [2, "force"], "hg" => [2, "g"], "hgravity" => [2, "gravity"], "hh" => [2, "h"], "hhg" => [2, "hg"], "hhr" => [2, "hr"], "hin" => [2, "in"], "hkg" => [2, "kg"], "hkgf" => [2, "kgf"], "hkph" => [2, "kph"], "hlb" => [2, "lb"], "hlm" => [2, "lm"], "hlx" => [2, "lx"], "hly" => [2, "ly"], "hm" => [2, "m"], "hmb" => [2, "mb"], "hmercury" => [2, "mercury"], "hmgal" => [2, "mgal"], "hmin" => [2, "min"], "hmol" => [2, "mol"], "hmon" => [2, "mon"], "hmph" => [2, "mph"], "hohm" => [2, "ohm"], "hours" => [0, "hour"], "hoz" => [2, "oz"], "hpc" => [2, "pc"], "hpercent" => [2, "percent"], "hpermil" => [2, "permil"], "hpsi" => [2, "psi"], "hrad" => [2, "rad"], "hs" => [2, "s"], "hsr" => [2, "sr"], "ht" => [2, "t"], "hyr" => [2, "yr"], "inchs" => [0, "inch"], "joules" => [0, "joule"], "k%" => [3, "%"], "kA" => [3, "A"], "kAu" => [3, "Au"], "kBq" => [3, "Bq"], "kC" => [3, "C"], "kF" => [3, "F"], "kG" => [3, "G"], "kGal" => [3, "Gal"], "kGy" => [3, "Gy"], "kH" => [3, "H"], "kHg" => [3, "Hg"], "kHz" => [3, "Hz"], "kJ" => [3, "J"], "kK" => [3, "K"], "kL" => [3, "L"], "kN" => [3, "N"], "kP" => [3, "P"], "kPa" => [3, "Pa"], "kS" => [3, "S"], "kSt" => [3, "St"], "kSv" => [3, "Sv"], "kT" => [3, "T"], "kV" => [3, "V"], "kW" => [3, "W"], "kWb" => [3, "Wb"], "ka" => [3, "a"], "kac" => [3, "ac"], "katm" => [3, "atm"], "kbar" => [3, "bar"], "kcal" => [3, "cal"], "kconventional_mercury" => [3, "conventional_mercury"], "kd" => [3, "d"], "kdegC" => [3, "degC"], "kdegF" => [3, "degF"], "kdeg_C" => [3, "deg_C"], "kdeg_F" => [3, "deg_F"], "kdegreeC" => [3, "degreeC"], "kdegreeF" => [3, "degreeF"], "kdegree_C" => [3, "degree_C"], "kdegree_E" => [3, "degree_E"], "kdegree_F" => [3, "degree_F"], "kdegree_N" => [3, "degree_N"], "kdegree_R" => [3, "degree_R"], "kdegree_S" => [3, "degree_S"], "kdegree_W" => [3, "degree_W"], "kdegree_c" => [3, "degree_c"], "kdegree_east" => [3, "degree_east"], "kdegree_f" => [3, "degree_f"], "kdegree_north" => [3, "degree_north"], "kdegree_south" => [3, "degree_south"], "kdegree_west" => [3, "degree_west"], "kdegrees_east" => [3, "degrees_east"], "kdegrees_north" => [3, "degrees_north"], "kdegrees_south" => [3, "degrees_south"], "kdegrees_west" => [3, "degrees_west"], "kdyn" => [3, "dyn"], "kelvins" => [0, "kelvin"], "kerg" => [3, "erg"], "kforce" => [3, "force"], "kgravity" => [3, "gravity"], "kh" => [3, "h"], "khg" => [3, "hg"], "khr" => [3, "hr"], "kiloCelsius" => [3, "Celsius"], "kiloFahrenheit" => [3, "Fahrenheit"], "kiloJulian_year" => [3, "Julian_year"], "kiloPascal" => [3, "Pascal"], "kiloacre" => [3, "acre"], "kiloampere" => [3, "ampere"], "kiloangstrom" => [3, "angstrom"], "kiloangular_degree" => [3, "angular_degree"], "kiloangular_minute" => [3, "angular_minute"], "kiloangular_second" => [3, "angular_second"], "kiloare" => [3, "are"], "kiloatmosphere" => [3, "atmosphere"], "kilocalorie" => [3, "calorie"], "kilocelsius" => [3, "celsius"], "kilocentigrade" => [3, "centigrade"], "kilocentury" => [3, "century"], "kilochain" => [3, "chain"], "kilocommon_year" => [3, "common_year"], "kilocoulomb" => [3, "coulomb"], "kiloday" => [3, "day"], "kilodegK" => [3, "degK"], "kilodeg_K" => [3, "deg_K"], "kilodegree" => [3, "degree"], "kilodegreeK" => [3, "degreeK"], "kilodyne" => [3, "dyne"], "kiloerg" => [3, "erg"], "kilofahrenheit" => [3, "fahrenheit"], "kilofarad" => [3, "farad"], "kilofermi" => [3, "fermi"], "kilogal" => [3, "gal"], "kilogauss" => [3, "gauss"], "kilogram" => [3, "gram"], "kilograms" => [0, "kilogram"], "kilohectare" => [3, "hectare"], "kilohertz" => [3, "hertz"], "kilohour" => [3, "hour"], "kiloinch" => [3, "inch"], "kilojoule" => [3, "joule"], "kilokelvin" => [3, "kelvin"], "kilokilogram" => [3, "kilogram"], "kiloknot" => [3, "knot"], "kilolitre" => [3, "litre"], "kilometer" => [3, "meter"], "kilometre" => [3, "metre"], "kilomicron" => [3, "micron"], "kilomile" => [3, "mile"], "kilomillibar" => [3, "millibar"], "kilominute" => [3, "minute"], "kilominute_angle" => [3, "minute_angle"], "kilomole" => [3, "mole"], "kilomonth" => [3, "month"], "kilonewton" => [3, "newton"], "kiloounce" => [3, "ounce"], "kiloparsec" => [3, "parsec"], "kilopascal" => [3, "pascal"], "kilopentad" => [3, "pentad"], "kilopoise" => [3, "poise"], "kilopound" => [3, "pound"], "kiloradian" => [3, "radian"], "kilosecond" => [3, "second"], "kilosecond_angle" => [3, "second_angle"], "kilosteradian" => [3, "steradian"], "kilostokes" => [3, "stokes"], "kilotesla" => [3, "tesla"], "kiloton" => [3, "ton"], "kilotonne" => [3, "tonne"], "kilotorr" => [3, "torr"], "kilovolt" => [3, "volt"], "kilowatt" => [3, "watt"], "kiloweber" => [3, "weber"], "kiloyard" => [3, "yard"], "kiloyd" => [3, "yd"], "kiloyear" => [3, "year"], "kin" => [3, "in"], "kkg" => [3, "kg"], "kkgf" => [3, "kgf"], "kkph" => [3, "kph"], "klb" => [3, "lb"], "klm" => [3, "lm"], "klx" => [3, "lx"], "kly" => [3, "ly"], "km" => [3, "m"], "kmb" => [3, "mb"], "kmercury" => [3, "mercury"], "kmgal" => [3, "mgal"], "kmin" => [3, "min"], "kmol" => [3, "mol"], "kmon" => [3, "mon"], "kmph" => [3, "mph"], "knots" => [0, "knot"], "kohm" => [3, "ohm"], "koz" => [3, "oz"], "kpc" => [3, "pc"], "kpercent" => [3, "percent"], "kpermil" => [3, "permil"], "kpsi" => [3, "psi"], "krad" => [3, "rad"], "ks" => [3, "s"], "ksr" => [3, "sr"], "kt" => [3, "t"], "kyr" => [3, "yr"], "litres" => [0, "litre"], "m%" => [-3, "%"], "mA" => [-3, "A"], "mAu" => [-3, "Au"], "mBq" => [-3, "Bq"], "mC" => [-3, "C"], "mF" => [-3, "F"], "mG" => [-3, "G"], "mGal" => [-3, "Gal"], "mGy" => [-3, "Gy"], "mH" => [-3, "H"], "mHg" => [-3, "Hg"], "mHz" => [-3, "Hz"], "mJ" => [-3, "J"], "mK" => [-3, "K"], "mL" => [-3, "L"], "mN" => [-3, "N"], "mP" => [-3, "P"], "mPa" => [-3, "Pa"], "mS" => [-3, "S"], "mSt" => [-3, "St"], "mSv" => [-3, "Sv"], "mT" => [-3, "T"], "mV" => [-3, "V"], "mW" => [-3, "W"], "mWb" => [-3, "Wb"], "ma" => [-3, "a"], "mac" => [-3, "ac"], "matm" => [-3, "atm"], "mbar" => [-3, "bar"], "mcal" => [-3, "cal"], "mconventional_mercury" => [-3, "conventional_mercury"], "md" => [-3, "d"], "mdegC" => [-3, "degC"], "mdegF" => [-3, "degF"], "mdeg_C" => [-3, "deg_C"], "mdeg_F" => [-3, "deg_F"], "mdegreeC" => [-3, "degreeC"], "mdegreeF" => [-3, "degreeF"], "mdegree_C" => [-3, "degree_C"], "mdegree_E" => [-3, "degree_E"], "mdegree_F" => [-3, "degree_F"], "mdegree_N" => [-3, "degree_N"], "mdegree_R" => [-3, "degree_R"], "mdegree_S" => [-3, "degree_S"], "mdegree_W" => [-3, "degree_W"], "mdegree_c" => [-3, "degree_c"], "mdegree_east" => [-3, "degree_east"], "mdegree_f" => [-3, "degree_f"], "mdegree_north" => [-3, "degree_north"], "mdegree_south" => [-3, "degree_south"], "mdegree_west" => [-3, "degree_west"], "mdegrees_east" => [-3, "degrees_east"], "mdegrees_north" => [-3, "degrees_north"], "mdegrees_south" => [-3, "degrees_south"], "mdegrees_west" => [-3, "degrees_west"], "mdyn" => [-3, "dyn"], "megaCelsius" => [6, "Celsius"], "megaFahrenheit" => [6, "Fahrenheit"], "megaJulian_year" => [6, "Julian_year"], "megaPascal" => [6, "Pascal"], "megaacre" => [6, "acre"], "megaampere" => [6, "ampere"], "megaangstrom" => [6, "angstrom"], "megaangular_degree" => [6, "angular_degree"], "megaangular_minute" => [6, "angular_minute"], "megaangular_second" => [6, "angular_second"], "megaare" => [6, "are"], "megaatmosphere" => [6, "atmosphere"], "megacalorie" => [6, "calorie"], "megacelsius" => [6, "celsius"], "megacentigrade" => [6, "centigrade"], "megacentury" => [6, "century"], "megachain" => [6, "chain"], "megacommon_year" => [6, "common_year"], "megacoulomb" => [6, "coulomb"], "megaday" => [6, "day"], "megadegK" => [6, "degK"], "megadeg_K" => [6, "deg_K"], "megadegree" => [6, "degree"], "megadegreeK" => [6, "degreeK"], "megadyne" => [6, "dyne"], "megaerg" => [6, "erg"], "megafahrenheit" => [6, "fahrenheit"], "megafarad" => [6, "farad"], "megafermi" => [6, "fermi"], "megagal" => [6, "gal"], "megagauss" => [6, "gauss"], "megagram" => [6, "gram"], "megahectare" => [6, "hectare"], "megahertz" => [6, "hertz"], "megahour" => [6, "hour"], "megainch" => [6, "inch"], "megajoule" => [6, "joule"], "megakelvin" => [6, "kelvin"], "megakilogram" => [6, "kilogram"], "megaknot" => [6, "knot"], "megalitre" => [6, "litre"], "megameter" => [6, "meter"], "megametre" => [6, "metre"], "megamicron" => [6, "micron"], "megamile" => [6, "mile"], "megamillibar" => [6, "millibar"], "megaminute" => [6, "minute"], "megaminute_angle" => [6, "minute_angle"], "megamole" => [6, "mole"], "megamonth" => [6, "month"], "meganewton" => [6, "newton"], "megaounce" => [6, "ounce"], "megaparsec" => [6, "parsec"], "megapascal" => [6, "pascal"], "megapentad" => [6, "pentad"], "megapoise" => [6, "poise"], "megapound" => [6, "pound"], "megaradian" => [6, "radian"], "megasecond" => [6, "second"], "megasecond_angle" => [6, "second_angle"], "megasteradian" => [6, "steradian"], "megastokes" => [6, "stokes"], "megatesla" => [6, "tesla"], "megaton" => [6, "ton"], "megatonne" => [6, "tonne"], "megatorr" => [6, "torr"], "megavolt" => [6, "volt"], "megawatt" => [6, "watt"], "megaweber" => [6, "weber"], "megayard" => [6, "yard"], "megayd" => [6, "yd"], "megayear" => [6, "year"], "merg" => [-3, "erg"], "meters" => [0, "meter"], "metres" => [0, "metre"], "mforce" => [-3, "force"], "mg" => [-3, "g"], "mgravity" => [-3, "gravity"], "mh" => [-3, "h"], "mhg" => [-3, "hg"], "mhr" => [-3, "hr"], "microCelsius" => [-6, "Celsius"], "microFahrenheit" => [-6, "Fahrenheit"], "microJulian_year" => [-6, "Julian_year"], "microPascal" => [-6, "Pascal"], "microacre" => [-6, "acre"], "microampere" => [-6, "ampere"], "microangstrom" => [-6, "angstrom"], "microangular_degree" => [-6, "angular_degree"], "microangular_minute" => [-6, "angular_minute"], "microangular_second" => [-6, "angular_second"], "microare" => [-6, "are"], "microatmosphere" => [-6, "atmosphere"], "microcalorie" => [-6, "calorie"], "microcelsius" => [-6, "celsius"], "microcentigrade" => [-6, "centigrade"], "microcentury" => [-6, "century"], "microchain" => [-6, "chain"], "microcommon_year" => [-6, "common_year"], "microcoulomb" => [-6, "coulomb"], "microday" => [-6, "day"], "microdegK" => [-6, "degK"], "microdeg_K" => [-6, "deg_K"], "microdegree" => [-6, "degree"], "microdegreeK" => [-6, "degreeK"], "microdyne" => [-6, "dyne"], "microerg" => [-6, "erg"], "microfahrenheit" => [-6, "fahrenheit"], "microfarad" => [-6, "farad"], "microfermi" => [-6, "fermi"], "microgal" => [-6, "gal"], "microgauss" => [-6, "gauss"], "microgram" => [-6, "gram"], "microhectare" => [-6, "hectare"], "microhertz" => [-6, "hertz"], "microhour" => [-6, "hour"], "microinch" => [-6, "inch"], "microjoule" => [-6, "joule"], "microkelvin" => [-6, "kelvin"], "microkilogram" => [-6, "kilogram"], "microknot" => [-6, "knot"], "microlitre" => [-6, "litre"], "micrometer" => [-6, "meter"], "micrometre" => [-6, "metre"], "micromicron" => [-6, "micron"], "micromile" => [-6, "mile"], "micromillibar" => [-6, "millibar"], "microminute" => [-6, "minute"], "microminute_angle" => [-6, "minute_angle"], "micromole" => [-6, "mole"], "micromonth" => [-6, "month"], "micronewton" => [-6, "newton"], "microns" => [0, "micron"], "microounce" => [-6, "ounce"], "microparsec" => [-6, "parsec"], "micropascal" => [-6, "pascal"], "micropentad" => [-6, "pentad"], "micropoise" => [-6, "poise"], "micropound" => [-6, "pound"], "microradian" => [-6, "radian"], "microsecond" => [-6, "second"], "microsecond_angle" => [-6, "second_angle"], "microsteradian" => [-6, "steradian"], "microstokes" => [-6, "stokes"], "microtesla" => [-6, "tesla"], "microton" => [-6, "ton"], "microtonne" => [-6, "tonne"], "microtorr" => [-6, "torr"], "microvolt" => [-6, "volt"], "microwatt" => [-6, "watt"], "microweber" => [-6, "weber"], "microyard" => [-6, "yard"], "microyd" => [-6, "yd"], "microyear" => [-6, "year"], "miles" => [0, "mile"], "milliCelsius" => [-3, "Celsius"], "milliFahrenheit" => [-3, "Fahrenheit"], "milliJulian_year" => [-3, "Julian_year"], "milliPascal" => [-3, "Pascal"], "milliacre" => [-3, "acre"], "milliampere" => [-3, "ampere"], "milliangstrom" => [-3, "angstrom"], "milliangular_degree" => [-3, "angular_degree"], "milliangular_minute" => [-3, "angular_minute"], "milliangular_second" => [-3, "angular_second"], "milliare" => [-3, "are"], "milliatmosphere" => [-3, "atmosphere"], "millibars" => [0, "millibar"], "millicalorie" => [-3, "calorie"], "millicelsius" => [-3, "celsius"], "millicentigrade" => [-3, "centigrade"], "millicentury" => [-3, "century"], "millichain" => [-3, "chain"], "millicommon_year" => [-3, "common_year"], "millicoulomb" => [-3, "coulomb"], "milliday" => [-3, "day"], "millidegK" => [-3, "degK"], "millideg_K" => [-3, "deg_K"], "millidegree" => [-3, "degree"], "millidegreeK" => [-3, "degreeK"], "millidyne" => [-3, "dyne"], "millierg" => [-3, "erg"], "millifahrenheit" => [-3, "fahrenheit"], "millifarad" => [-3, "farad"], "millifermi" => [-3, "fermi"], "milligal" => [-3, "gal"], "milligauss" => [-3, "gauss"], "milligram" => [-3, "gram"], "millihectare" => [-3, "hectare"], "millihertz" => [-3, "hertz"], "millihour" => [-3, "hour"], "milliinch" => [-3, "inch"], "millijoule" => [-3, "joule"], "millikelvin" => [-3, "kelvin"], "millikilogram" => [-3, "kilogram"], "milliknot" => [-3, "knot"], "millilitre" => [-3, "litre"], "millimeter" => [-3, "meter"], "millimetre" => [-3, "metre"], "millimicron" => [-3, "micron"], "millimile" => [-3, "mile"], "millimillibar" => [-3, "millibar"], "milliminute" => [-3, "minute"], "milliminute_angle" => [-3, "minute_angle"], "millimole" => [-3, "mole"], "millimonth" => [-3, "month"], "millinewton" => [-3, "newton"], "milliounce" => [-3, "ounce"], "milliparsec" => [-3, "parsec"], "millipascal" => [-3, "pascal"], "millipentad" => [-3, "pentad"], "millipoise" => [-3, "poise"], "millipound" => [-3, "pound"], "milliradian" => [-3, "radian"], "millisecond" => [-3, "second"], "millisecond_angle" => [-3, "second_angle"], "millisteradian" => [-3, "steradian"], "millistokes" => [-3, "stokes"], "millitesla" => [-3, "tesla"], "milliton" => [-3, "ton"], "millitonne" => [-3, "tonne"], "millitorr" => [-3, "torr"], "millivolt" => [-3, "volt"], "milliwatt" => [-3, "watt"], "milliweber" => [-3, "weber"], "milliyard" => [-3, "yard"], "milliyd" => [-3, "yd"], "milliyear" => [-3, "year"], "min" => [-3, "in"], "minutes" => [0, "minute"], "minutes_angle" => [0, "minute_angle"], "mkg" => [-3, "kg"], "mkgf" => [-3, "kgf"], "mkph" => [-3, "kph"], "mlb" => [-3, "lb"], "mlm" => [-3, "lm"], "mlx" => [-3, "lx"], "mly" => [-3, "ly"], "mm" => [-3, "m"], "mmb" => [-3, "mb"], "mmercury" => [-3, "mercury"], "mmgal" => [-3, "mgal"], "mmin" => [-3, "min"], "mmol" => [-3, "mol"], "mmon" => [-3, "mon"], "mmph" => [-3, "mph"], "mohm" => [-3, "ohm"], "moles" => [0, "mole"], "months" => [0, "month"], "moz" => [-3, "oz"], "mpc" => [-3, "pc"], "mpercent" => [-3, "percent"], "mpermil" => [-3, "permil"], "mpsi" => [-3, "psi"], "mrad" => [-3, "rad"], "ms" => [-3, "s"], "msr" => [-3, "sr"], "mt" => [-3, "t"], "myr" => [-3, "yr"], "n%" => [-9, "%"], "nA" => [-9, "A"], "nAu" => [-9, "Au"], "nBq" => [-9, "Bq"], "nC" => [-9, "C"], "nF" => [-9, "F"], "nG" => [-9, "G"], "nGal" => [-9, "Gal"], "nGy" => [-9, "Gy"], "nH" => [-9, "H"], "nHg" => [-9, "Hg"], "nHz" => [-9, "Hz"], "nJ" => [-9, "J"], "nK" => [-9, "K"], "nL" => [-9, "L"], "nN" => [-9, "N"], "nP" => [-9, "P"], "nPa" => [-9, "Pa"], "nS" => [-9, "S"], "nSt" => [-9, "St"], "nSv" => [-9, "Sv"], "nT" => [-9, "T"], "nV" => [-9, "V"], "nW" => [-9, "W"], "nWb" => [-9, "Wb"], "na" => [-9, "a"], "nac" => [-9, "ac"], "nanoCelsius" => [-9, "Celsius"], "nanoFahrenheit" => [-9, "Fahrenheit"], "nanoJulian_year" => [-9, "Julian_year"], "nanoPascal" => [-9, "Pascal"], "nanoacre" => [-9, "acre"], "nanoampere" => [-9, "ampere"], "nanoangstrom" => [-9, "angstrom"], "nanoangular_degree" => [-9, "angular_degree"], "nanoangular_minute" => [-9, "angular_minute"], "nanoangular_second" => [-9, "angular_second"], "nanoare" => [-9, "are"], "nanoatmosphere" => [-9, "atmosphere"], "nanocalorie" => [-9, "calorie"], "nanocelsius" => [-9, "celsius"], "nanocentigrade" => [-9, "centigrade"], "nanocentury" => [-9, "century"], "nanochain" => [-9, "chain"], "nanocommon_year" => [-9, "common_year"], "nanocoulomb" => [-9, "coulomb"], "nanoday" => [-9, "day"], "nanodegK" => [-9, "degK"], "nanodeg_K" => [-9, "deg_K"], "nanodegree" => [-9, "degree"], "nanodegreeK" => [-9, "degreeK"], "nanodyne" => [-9, "dyne"], "nanoerg" => [-9, "erg"], "nanofahrenheit" => [-9, "fahrenheit"], "nanofarad" => [-9, "farad"], "nanofermi" => [-9, "fermi"], "nanogal" => [-9, "gal"], "nanogauss" => [-9, "gauss"], "nanogram" => [-9, "gram"], "nanohectare" => [-9, "hectare"], "nanohertz" => [-9, "hertz"], "nanohour" => [-9, "hour"], "nanoinch" => [-9, "inch"], "nanojoule" => [-9, "joule"], "nanokelvin" => [-9, "kelvin"], "nanokilogram" => [-9, "kilogram"], "nanoknot" => [-9, "knot"], "nanolitre" => [-9, "litre"], "nanometer" => [-9, "meter"], "nanometre" => [-9, "metre"], "nanomicron" => [-9, "micron"], "nanomile" => [-9, "mile"], "nanomillibar" => [-9, "millibar"], "nanominute" => [-9, "minute"], "nanominute_angle" => [-9, "minute_angle"], "nanomole" => [-9, "mole"], "nanomonth" => [-9, "month"], "nanonewton" => [-9, "newton"], "nanoounce" => [-9, "ounce"], "nanoparsec" => [-9, "parsec"], "nanopascal" => [-9, "pascal"], "nanopentad" => [-9, "pentad"], "nanopoise" => [-9, "poise"], "nanopound" => [-9, "pound"], "nanoradian" => [-9, "radian"], "nanosecond" => [-9, "second"], "nanosecond_angle" => [-9, "second_angle"], "nanosteradian" => [-9, "steradian"], "nanostokes" => [-9, "stokes"], "nanotesla" => [-9, "tesla"], "nanoton" => [-9, "ton"], "nanotonne" => [-9, "tonne"], "nanotorr" => [-9, "torr"], "nanovolt" => [-9, "volt"], "nanowatt" => [-9, "watt"], "nanoweber" => [-9, "weber"], "nanoyard" => [-9, "yard"], "nanoyd" => [-9, "yd"], "nanoyear" => [-9, "year"], "natm" => [-9, "atm"], "nbar" => [-9, "bar"], "ncal" => [-9, "cal"], "nconventional_mercury" => [-9, "conventional_mercury"], "nd" => [-9, "d"], "ndegC" => [-9, "degC"], "ndegF" => [-9, "degF"], "ndeg_C" => [-9, "deg_C"], "ndeg_F" => [-9, "deg_F"], "ndegreeC" => [-9, "degreeC"], "ndegreeF" => [-9, "degreeF"], "ndegree_C" => [-9, "degree_C"], "ndegree_E" => [-9, "degree_E"], "ndegree_F" => [-9, "degree_F"], "ndegree_N" => [-9, "degree_N"], "ndegree_R" => [-9, "degree_R"], "ndegree_S" => [-9, "degree_S"], "ndegree_W" => [-9, "degree_W"], "ndegree_c" => [-9, "degree_c"], "ndegree_east" => [-9, "degree_east"], "ndegree_f" => [-9, "degree_f"], "ndegree_north" => [-9, "degree_north"], "ndegree_south" => [-9, "degree_south"], "ndegree_west" => [-9, "degree_west"], "ndegrees_east" => [-9, "degrees_east"], "ndegrees_north" => [-9, "degrees_north"], "ndegrees_south" => [-9, "degrees_south"], "ndegrees_west" => [-9, "degrees_west"], "ndyn" => [-9, "dyn"], "nerg" => [-9, "erg"], "newtons" => [0, "newton"], "nforce" => [-9, "force"], "ng" => [-9, "g"], "ngravity" => [-9, "gravity"], "nh" => [-9, "h"], "nhg" => [-9, "hg"], "nhr" => [-9, "hr"], "nin" => [-9, "in"], "nkg" => [-9, "kg"], "nkgf" => [-9, "kgf"], "nkph" => [-9, "kph"], "nlb" => [-9, "lb"], "nlm" => [-9, "lm"], "nlx" => [-9, "lx"], "nly" => [-9, "ly"], "nm" => [-9, "m"], "nmb" => [-9, "mb"], "nmercury" => [-9, "mercury"], "nmgal" => [-9, "mgal"], "nmin" => [-9, "min"], "nmol" => [-9, "mol"], "nmon" => [-9, "mon"], "nmph" => [-9, "mph"], "nohm" => [-9, "ohm"], "noz" => [-9, "oz"], "npc" => [-9, "pc"], "npercent" => [-9, "percent"], "npermil" => [-9, "permil"], "npsi" => [-9, "psi"], "nrad" => [-9, "rad"], "ns" => [-9, "s"], "nsr" => [-9, "sr"], "nt" => [-9, "t"], "nyr" => [-9, "yr"], "ounces" => [0, "ounce"], "p%" => [-12, "%"], "pA" => [-12, "A"], "pAu" => [-12, "Au"], "pBq" => [-12, "Bq"], "pC" => [-12, "C"], "pF" => [-12, "F"], "pG" => [-12, "G"], "pGal" => [-12, "Gal"], "pGy" => [-12, "Gy"], "pH" => [-12, "H"], "pHg" => [-12, "Hg"], "pHz" => [-12, "Hz"], "pJ" => [-12, "J"], "pK" => [-12, "K"], "pL" => [-12, "L"], "pN" => [-12, "N"], "pP" => [-12, "P"], "pPa" => [-12, "Pa"], "pS" => [-12, "S"], "pSt" => [-12, "St"], "pSv" => [-12, "Sv"], "pT" => [-12, "T"], "pV" => [-12, "V"], "pW" => [-12, "W"], "pWb" => [-12, "Wb"], "pa" => [-12, "a"], "pac" => [-12, "ac"], "parsecs" => [0, "parsec"], "pascals" => [0, "pascal"], "patm" => [-12, "atm"], "pbar" => [-12, "bar"], "pcal" => [-12, "cal"], "pconventional_mercury" => [-12, "conventional_mercury"], "pd" => [-12, "d"], "pdegC" => [-12, "degC"], "pdegF" => [-12, "degF"], "pdeg_C" => [-12, "deg_C"], "pdeg_F" => [-12, "deg_F"], "pdegreeC" => [-12, "degreeC"], "pdegreeF" => [-12, "degreeF"], "pdegree_C" => [-12, "degree_C"], "pdegree_E" => [-12, "degree_E"], "pdegree_F" => [-12, "degree_F"], "pdegree_N" => [-12, "degree_N"], "pdegree_R" => [-12, "degree_R"], "pdegree_S" => [-12, "degree_S"], "pdegree_W" => [-12, "degree_W"], "pdegree_c" => [-12, "degree_c"], "pdegree_east" => [-12, "degree_east"], "pdegree_f" => [-12, "degree_f"], "pdegree_north" => [-12, "degree_north"], "pdegree_south" => [-12, "degree_south"], "pdegree_west" => [-12, "degree_west"], "pdegrees_east" => [-12, "degrees_east"], "pdegrees_north" => [-12, "degrees_north"], "pdegrees_south" => [-12, "degrees_south"], "pdegrees_west" => [-12, "degrees_west"], "pdyn" => [-12, "dyn"], "pentads" => [0, "pentad"], "perg" => [-12, "erg"], "petaCelsius" => [15, "Celsius"], "petaFahrenheit" => [15, "Fahrenheit"], "petaJulian_year" => [15, "Julian_year"], "petaPascal" => [15, "Pascal"], "petaacre" => [15, "acre"], "petaampere" => [15, "ampere"], "petaangstrom" => [15, "angstrom"], "petaangular_degree" => [15, "angular_degree"], "petaangular_minute" => [15, "angular_minute"], "petaangular_second" => [15, "angular_second"], "petaare" => [15, "are"], "petaatmosphere" => [15, "atmosphere"], "petacalorie" => [15, "calorie"], "petacelsius" => [15, "celsius"], "petacentigrade" => [15, "centigrade"], "petacentury" => [15, "century"], "petachain" => [15, "chain"], "petacommon_year" => [15, "common_year"], "petacoulomb" => [15, "coulomb"], "petaday" => [15, "day"], "petadegK" => [15, "degK"], "petadeg_K" => [15, "deg_K"], "petadegree" => [15, "degree"], "petadegreeK" => [15, "degreeK"], "petadyne" => [15, "dyne"], "petaerg" => [15, "erg"], "petafahrenheit" => [15, "fahrenheit"], "petafarad" => [15, "farad"], "petafermi" => [15, "fermi"], "petagal" => [15, "gal"], "petagauss" => [15, "gauss"], "petagram" => [15, "gram"], "petahectare" => [15, "hectare"], "petahertz" => [15, "hertz"], "petahour" => [15, "hour"], "petainch" => [15, "inch"], "petajoule" => [15, "joule"], "petakelvin" => [15, "kelvin"], "petakilogram" => [15, "kilogram"], "petaknot" => [15, "knot"], "petalitre" => [15, "litre"], "petameter" => [15, "meter"], "petametre" => [15, "metre"], "petamicron" => [15, "micron"], "petamile" => [15, "mile"], "petamillibar" => [15, "millibar"], "petaminute" => [15, "minute"], "petaminute_angle" => [15, "minute_angle"], "petamole" => [15, "mole"], "petamonth" => [15, "month"], "petanewton" => [15, "newton"], "petaounce" => [15, "ounce"], "petaparsec" => [15, "parsec"], "petapascal" => [15, "pascal"], "petapentad" => [15, "pentad"], "petapoise" => [15, "poise"], "petapound" => [15, "pound"], "petaradian" => [15, "radian"], "petasecond" => [15, "second"], "petasecond_angle" => [15, "second_angle"], "petasteradian" => [15, "steradian"], "petastokes" => [15, "stokes"], "petatesla" => [15, "tesla"], "petaton" => [15, "ton"], "petatonne" => [15, "tonne"], "petatorr" => [15, "torr"], "petavolt" => [15, "volt"], "petawatt" => [15, "watt"], "petaweber" => [15, "weber"], "petayard" => [15, "yard"], "petayd" => [15, "yd"], "petayear" => [15, "year"], "pforce" => [-12, "force"], "pg" => [-12, "g"], "pgravity" => [-12, "gravity"], "ph" => [-12, "h"], "phg" => [-12, "hg"], "phr" => [-12, "hr"], "picoCelsius" => [-12, "Celsius"], "picoFahrenheit" => [-12, "Fahrenheit"], "picoJulian_year" => [-12, "Julian_year"], "picoPascal" => [-12, "Pascal"], "picoacre" => [-12, "acre"], "picoampere" => [-12, "ampere"], "picoangstrom" => [-12, "angstrom"], "picoangular_degree" => [-12, "angular_degree"], "picoangular_minute" => [-12, "angular_minute"], "picoangular_second" => [-12, "angular_second"], "picoare" => [-12, "are"], "picoatmosphere" => [-12, "atmosphere"], "picocalorie" => [-12, "calorie"], "picocelsius" => [-12, "celsius"], "picocentigrade" => [-12, "centigrade"], "picocentury" => [-12, "century"], "picochain" => [-12, "chain"], "picocommon_year" => [-12, "common_year"], "picocoulomb" => [-12, "coulomb"], "picoday" => [-12, "day"], "picodegK" => [-12, "degK"], "picodeg_K" => [-12, "deg_K"], "picodegree" => [-12, "degree"], "picodegreeK" => [-12, "degreeK"], "picodyne" => [-12, "dyne"], "picoerg" => [-12, "erg"], "picofahrenheit" => [-12, "fahrenheit"], "picofarad" => [-12, "farad"], "picofermi" => [-12, "fermi"], "picogal" => [-12, "gal"], "picogauss" => [-12, "gauss"], "picogram" => [-12, "gram"], "picohectare" => [-12, "hectare"], "picohertz" => [-12, "hertz"], "picohour" => [-12, "hour"], "picoinch" => [-12, "inch"], "picojoule" => [-12, "joule"], "picokelvin" => [-12, "kelvin"], "picokilogram" => [-12, "kilogram"], "picoknot" => [-12, "knot"], "picolitre" => [-12, "litre"], "picometer" => [-12, "meter"], "picometre" => [-12, "metre"], "picomicron" => [-12, "micron"], "picomile" => [-12, "mile"], "picomillibar" => [-12, "millibar"], "picominute" => [-12, "minute"], "picominute_angle" => [-12, "minute_angle"], "picomole" => [-12, "mole"], "picomonth" => [-12, "month"], "piconewton" => [-12, "newton"], "picoounce" => [-12, "ounce"], "picoparsec" => [-12, "parsec"], "picopascal" => [-12, "pascal"], "picopentad" => [-12, "pentad"], "picopoise" => [-12, "poise"], "picopound" => [-12, "pound"], "picoradian" => [-12, "radian"], "picosecond" => [-12, "second"], "picosecond_angle" => [-12, "second_angle"], "picosteradian" => [-12, "steradian"], "picostokes" => [-12, "stokes"], "picotesla" => [-12, "tesla"], "picoton" => [-12, "ton"], "picotonne" => [-12, "tonne"], "picotorr" => [-12, "torr"], "picovolt" => [-12, "volt"], "picowatt" => [-12, "watt"], "picoweber" => [-12, "weber"], "picoyard" => [-12, "yard"], "picoyd" => [-12, "yd"], "picoyear" => [-12, "year"], "pin" => [-12, "in"], "pkg" => [-12, "kg"], "pkgf" => [-12, "kgf"], "pkph" => [-12, "kph"], "plb" => [-12, "lb"], "plm" => [-12, "lm"], "plx" => [-12, "lx"], "ply" => [-12, "ly"], "pm" => [-12, "m"], "pmb" => [-12, "mb"], "pmercury" => [-12, "mercury"], "pmgal" => [-12, "mgal"], "pmin" => [-12, "min"], "pmol" => [-12, "mol"], "pmon" => [-12, "mon"], "pmph" => [-12, "mph"], "pohm" => [-12, "ohm"], "poises" => [0, "poise"], "pounds" => [0, "pound"], "poz" => [-12, "oz"], "ppc" => [-12, "pc"], "ppercent" => [-12, "percent"], "ppermil" => [-12, "permil"], "ppsi" => [-12, "psi"], "prad" => [-12, "rad"], "ps" => [-12, "s"], "psr" => [-12, "sr"], "pt" => [-12, "t"], "pyr" => [-12, "yr"], "radians" => [0, "radian"], "seconds" => [0, "second"], "seconds_angle" => [0, "second_angle"], "steradians" => [0, "steradian"], "stokeses" => [0, "stokes"], "telaCelsius" => [12, "Celsius"], "telaFahrenheit" => [12, "Fahrenheit"], "telaJulian_year" => [12, "Julian_year"], "telaPascal" => [12, "Pascal"], "telaacre" => [12, "acre"], "telaampere" => [12, "ampere"], "telaangstrom" => [12, "angstrom"], "telaangular_degree" => [12, "angular_degree"], "telaangular_minute" => [12, "angular_minute"], "telaangular_second" => [12, "angular_second"], "telaare" => [12, "are"], "telaatmosphere" => [12, "atmosphere"], "telacalorie" => [12, "calorie"], "telacelsius" => [12, "celsius"], "telacentigrade" => [12, "centigrade"], "telacentury" => [12, "century"], "telachain" => [12, "chain"], "telacommon_year" => [12, "common_year"], "telacoulomb" => [12, "coulomb"], "teladay" => [12, "day"], "teladegK" => [12, "degK"], "teladeg_K" => [12, "deg_K"], "teladegree" => [12, "degree"], "teladegreeK" => [12, "degreeK"], "teladyne" => [12, "dyne"], "telaerg" => [12, "erg"], "telafahrenheit" => [12, "fahrenheit"], "telafarad" => [12, "farad"], "telafermi" => [12, "fermi"], "telagal" => [12, "gal"], "telagauss" => [12, "gauss"], "telagram" => [12, "gram"], "telahectare" => [12, "hectare"], "telahertz" => [12, "hertz"], "telahour" => [12, "hour"], "telainch" => [12, "inch"], "telajoule" => [12, "joule"], "telakelvin" => [12, "kelvin"], "telakilogram" => [12, "kilogram"], "telaknot" => [12, "knot"], "telalitre" => [12, "litre"], "telameter" => [12, "meter"], "telametre" => [12, "metre"], "telamicron" => [12, "micron"], "telamile" => [12, "mile"], "telamillibar" => [12, "millibar"], "telaminute" => [12, "minute"], "telaminute_angle" => [12, "minute_angle"], "telamole" => [12, "mole"], "telamonth" => [12, "month"], "telanewton" => [12, "newton"], "telaounce" => [12, "ounce"], "telaparsec" => [12, "parsec"], "telapascal" => [12, "pascal"], "telapentad" => [12, "pentad"], "telapoise" => [12, "poise"], "telapound" => [12, "pound"], "telaradian" => [12, "radian"], "telasecond" => [12, "second"], "telasecond_angle" => [12, "second_angle"], "telasteradian" => [12, "steradian"], "telastokes" => [12, "stokes"], "telatesla" => [12, "tesla"], "telaton" => [12, "ton"], "telatonne" => [12, "tonne"], "telatorr" => [12, "torr"], "telavolt" => [12, "volt"], "telawatt" => [12, "watt"], "telaweber" => [12, "weber"], "telayard" => [12, "yard"], "telayd" => [12, "yd"], "telayear" => [12, "year"], "teslas" => [0, "tesla"], "tonnes" => [0, "tonne"], "tons" => [0, "ton"], "torrs" => [0, "torr"], "u%" => [-6, "%"], "uA" => [-6, "A"], "uAu" => [-6, "Au"], "uBq" => [-6, "Bq"], "uC" => [-6, "C"], "uF" => [-6, "F"], "uG" => [-6, "G"], "uGal" => [-6, "Gal"], "uGy" => [-6, "Gy"], "uH" => [-6, "H"], "uHg" => [-6, "Hg"], "uHz" => [-6, "Hz"], "uJ" => [-6, "J"], "uK" => [-6, "K"], "uL" => [-6, "L"], "uN" => [-6, "N"], "uP" => [-6, "P"], "uPa" => [-6, "Pa"], "uS" => [-6, "S"], "uSt" => [-6, "St"], "uSv" => [-6, "Sv"], "uT" => [-6, "T"], "uV" => [-6, "V"], "uW" => [-6, "W"], "uWb" => [-6, "Wb"], "ua" => [-6, "a"], "uac" => [-6, "ac"], "uatm" => [-6, "atm"], "ubar" => [-6, "bar"], "ucal" => [-6, "cal"], "uconventional_mercury" => [-6, "conventional_mercury"], "ud" => [-6, "d"], "udegC" => [-6, "degC"], "udegF" => [-6, "degF"], "udeg_C" => [-6, "deg_C"], "udeg_F" => [-6, "deg_F"], "udegreeC" => [-6, "degreeC"], "udegreeF" => [-6, "degreeF"], "udegree_C" => [-6, "degree_C"], "udegree_E" => [-6, "degree_E"], "udegree_F" => [-6, "degree_F"], "udegree_N" => [-6, "degree_N"], "udegree_R" => [-6, "degree_R"], "udegree_S" => [-6, "degree_S"], "udegree_W" => [-6, "degree_W"], "udegree_c" => [-6, "degree_c"], "udegree_east" => [-6, "degree_east"], "udegree_f" => [-6, "degree_f"], "udegree_north" => [-6, "degree_north"], "udegree_south" => [-6, "degree_south"], "udegree_west" => [-6, "degree_west"], "udegrees_east" => [-6, "degrees_east"], "udegrees_north" => [-6, "degrees_north"], "udegrees_south" => [-6, "degrees_south"], "udegrees_west" => [-6, "degrees_west"], "udyn" => [-6, "dyn"], "uerg" => [-6, "erg"], "uforce" => [-6, "force"], "ug" => [-6, "g"], "ugravity" => [-6, "gravity"], "uh" => [-6, "h"], "uhg" => [-6, "hg"], "uhr" => [-6, "hr"], "uin" => [-6, "in"], "ukg" => [-6, "kg"], "ukgf" => [-6, "kgf"], "ukph" => [-6, "kph"], "ulb" => [-6, "lb"], "ulm" => [-6, "lm"], "ulx" => [-6, "lx"], "uly" => [-6, "ly"], "um" => [-6, "m"], "umb" => [-6, "mb"], "umercury" => [-6, "mercury"], "umgal" => [-6, "mgal"], "umin" => [-6, "min"], "umol" => [-6, "mol"], "umon" => [-6, "mon"], "umph" => [-6, "mph"], "uohm" => [-6, "ohm"], "uoz" => [-6, "oz"], "upc" => [-6, "pc"], "upercent" => [-6, "percent"], "upermil" => [-6, "permil"], "upsi" => [-6, "psi"], "urad" => [-6, "rad"], "us" => [-6, "s"], "usr" => [-6, "sr"], "ut" => [-6, "t"], "uyr" => [-6, "yr"], "volts" => [0, "volt"], "watts" => [0, "watt"], "webers" => [0, "weber"], "yards" => [0, "yard"], "yds" => [0, "yd"], "years" => [0, "year"], } UPLURALS = { "Celsiuses" => "Celsius", "Fahrenheits" => "Fahrenheit", "Julians_year" => "Julian_year", "Pascals" => "Pascal", "acres" => "acre", "amperes" => "ampere", "angstroms" => "angstrom", "angulars_degree" => "angular_degree", "angulars_minute" => "angular_minute", "angulars_second" => "angular_second", "ares" => "are", "atmospheres" => "atmosphere", "calories" => "calorie", "celsiuses" => "celsius", "centigrades" => "centigrade", "centuries" => "century", "chains" => "chain", "commons_year" => "common_year", "coulombs" => "coulomb", "days" => "day", "degKs" => "degK", "degreeKs" => "degreeK", "degrees" => "degree", "degs_K" => "deg_K", "dynes" => "dyne", "ergs" => "erg", "fahrenheits" => "fahrenheit", "farads" => "farad", "fermis" => "fermi", "gals" => "gal", "gausses" => "gauss", "grams" => "gram", "hectares" => "hectare", "hertzes" => "hertz", "hours" => "hour", "inchs" => "inch", "joules" => "joule", "kelvins" => "kelvin", "kilograms" => "kilogram", "knots" => "knot", "litres" => "litre", "meters" => "meter", "metres" => "metre", "microns" => "micron", "miles" => "mile", "millibars" => "millibar", "minutes" => "minute", "minutes_angle" => "minute_angle", "moles" => "mole", "months" => "month", "newtons" => "newton", "ounces" => "ounce", "parsecs" => "parsec", "pascals" => "pascal", "pentads" => "pentad", "poises" => "poise", "pounds" => "pound", "radians" => "radian", "seconds" => "second", "seconds_angle" => "second_angle", "steradians" => "steradian", "stokeses" => "stokes", "teslas" => "tesla", "tonnes" => "tonne", "tons" => "ton", "torrs" => "torr", "volts" => "volt", "watts" => "watt", "webers" => "weber", "yards" => "yard", "yds" => "yd", "years" => "year", } end class NumberNode < TerminalNode def initialize(arg) raise TypeError unless Numeric === arg @a = arg end UNITY = NumberNode.new(1) ZERO = NumberNode.new(0) def to_s if @a == @a.to_i sprintf("%d",@a) else String(@a) end end attr_reader :a alias :value :a alias :factor :a def == (other) case other when NumberNode @a == other.a else false end end def add_eval(another) raise TypeError unless NumberNode === another NumberNode.new(@a + another.value) end def mul_eval(another) case another when NumberNode then NumberNode.new(@a * another.a) when PowNode raise TypeError unless NumberNode === another.lhs raise TypeError unless NumberNode === another.rhs NumberNode.new(@a * Units::pow_f(another.lhs.value, another.rhs.value)) else raise TypeError end end def name; "1"; end def power; UNITY; end end class XDate def initialize(year, month, day) @year, @month, @day = year.to_i, month.to_i, day.to_i end attr_reader :year, :month, :day def to_s format('%04d-%02d-%02d', @year, @month, @day) end alias :inspect :to_s def to_time Time.gm(@year, @month, @day) end def to_date Date.new(@year, @month, @day) end def -(other) case other when XDate (to_date - other.to_date) when Time to_time - other when Date (to_date - other.to_date) else to_date - other end end def +(other) t = to_date + other self.class.new(t.year, t.month, t.mday) end end class TimeNode < TerminalNode def initialize(date, time, zone) @date, @time, @zone = date, time, zone if :now === @date then now = Time.now.utc @date = XDate.new(now.year, now.month, now.day) @time = ((now.hour * 60 + now.min) * 60 + Float(now.sec)) else qdays = (@time / 86400).floor if not qdays.zero? @date += qdays @time -= (qdays * 86400) end end raise TypeError unless XDate === @date @time = 0.0 unless @time raise TypeError unless Float === @time @zone = 0 unless @zone raise TypeError unless Integer === @zone end attr_reader :date, :time, :zone def to_s hr = @time.floor / 3600 mi = (@time.floor / 60) % 60 sc = @time % 60 tzm = @zone.abs tzh = tzm / 60 tzm %= 60 tzh = -tzh if @zone < 0 format("%sT%02d:%02d:%05.2f %+03d:%02d", \ @date.to_s, hr, mi, sc, tzh, tzm) end def self::pentad(d) (d > 25) ? 5 : ((d - 1) / 5) end def add_time(increment) inc = increment.reduce5 case inc.name when 's' t2 = @time + inc.factor d2 = @date + (t2 / 86400) t2 = t2 % 86400 self.class.new(d2, t2, @zone) when 'pentad' ifac = Integer(inc.factor) ipen = ifac % 6 imon = ifac / 6 spen = self.class.pentad(@date.day) smon = @date.month + imon + spen / 6 spen = spen % 6 sday = spen * 5 + (@date.day - 1) % 5 + 1 syear = @date.year + (smon - 1) / 12 smon = (smon - 1) % 12 + 1 sdate = XDate.new(syear, smon, sday) self.class.new(sdate, @time, @zone) else raise "bad time unit '#{inc.name}'" end end def utcsod @time - @zone * 60 end def div_time(units) base = units.ref inc = units.deref.reduce5 begin incname = inc.name rescue Exception incname = "(undefined)" end case incname when 's' dif = (@date - base.date) * 86400 + (utcsod - base.utcsod) dif / inc.factor when 'pentad' dif = (@date.year - base.date.year) * 72 dif += (@date.month - base.date.month) * 6 dif += self.class.pentad(@date.day) dif -= self.class.pentad(base.date.day) dif = Float(dif) if dif % inc.factor != 0 dif / inc.factor else raise "bad time unit '#{incname}'" end end end class PowNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs raise TypeError unless NumberNode === @rhs end def to_s lhs = @lhs.to_s case lhs when /\d$/, /[\d\.]/ lhs = "(#{lhs})" end rhs = @rhs.to_s if rhs == '1' lhs else rhs = "^(#{rhs})" if (/\./ =~ rhs) lhs + rhs end end attr_reader :lhs, :rhs alias :power :rhs def pow_eval(other) case other when NumberNode PowNode.new(@lhs, @rhs.mul_eval(other)) else super(other) end end def flatten2 x = @lhs.flatten2 case x when NumberNode a = @lhs.pow_eval(@rhs) when TerminalNode a = self when PowNode a = PowNode.new(x.lhs, x.rhs.mul_eval(@rhs)) when MulNode, MultiNode a = MultiNode.new() for gc in x a.append(gc.pow_eval(@rhs)) end else raise "internal error" end return a end def name case @lhs when NumberNode, NameNode @lhs.name else raise "internal error" end end def value case @lhs when NumberNode Units::pow_f(@lhs.value, @rhs.value) else raise(format('%s#value: internal error', self.class.to_s)) end end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value) * another.value) else self.class.new(@lhs, @rhs.add_eval(another.power)) end end def sort case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value)) else self end end def factor Units::pow_f(@lhs.factor, @rhs.value) end end module Kakezan def flatten2 r = MultiNode.new() each do |child| case child when MultiNode r.append child when MulNode r.append child.flatten2 when ContainerNode r.append child.flatten2 else r.append child end end r end def name n = nil for c in @children next if NumberNode === c na = c.name if n.nil? n = na else raise "multiple names found" if na != n end end n = "1" if n.nil? n end def factor f = 1 for c in @children f *= c.factor end f end end class MulNode < ContainerNode include BinaryNode include Kakezan def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end def to_s lhs = @lhs.to_s rhs = @rhs.to_s if (/\d$/ =~ lhs && /^\w/ =~ rhs) then "#{lhs} #{rhs}" else "#{lhs}.#{rhs}" end end end class MultiNode < ContainerNode include Kakezan def initialize(*children) @children = children for c in @children raise "# MultiNode.new(#{children.inspect})" unless Node === c end end def to_s s = @children.join(';') s.gsub(/\d;\w/) { |dsw| dsw.sub(/;/, ' ') }.gsub(/;/, '.') end def each @children.each {|child| yield child } end attr_reader :children def append(other) case other when MultiNode @children += other.children else @children.push other end end def sort table = {} for child in self name = child.name if (table.include?(name)) then table[name] = table[name].mul_eval(child) else table[name] = child end end list = [] for name in table.keys.sort candi = table[name] if PowNode === candi and NumberNode === candi.lhs then v = candi.value list.push NumberNode.new(v) unless v == 1 next end next if candi.power.value == 0 list.push candi end if list.length > 1 list.delete(NumberNode::UNITY) end self.class.new(*list) end def collect_hash(stopper, op) list = [] for child in self list.push(child.send(op, stopper)) end self.class.new(*list).flatten2 end def expand(stopper) collect_hash(stopper, :expand) end def unalias(stopper) collect_hash(stopper, :unalias) end def foldnumber(stopper) collect_hash(stopper, :foldnumber) end def value raise "this is dimensional units" if (@children.size > 1) @children.first ? @children.first.value : NumberNode::UNITY.value end end class ShiftNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end attr_reader :lhs, :rhs alias :ref :rhs def to_s "(#{@lhs.to_s} @ #{@rhs.to_s})" end def trim2; @lhs; end def trim self.class.new(@lhs.trim, @rhs.trim2) end def flatten2; @lhs; end def flatten lf = @lhs.flatten case lf when ShiftNode rf = lf.rhs.add_eval(@rhs) self.class.new(lf.lhs, rf) else self.class.new(lf, @rhs.flatten) end end def sort self.class.new(@lhs.sort, @rhs.sort) end def ref case @lhs when ShiftNode @lhs.ref.add_eval(@rhs) else @rhs end end def deref case @lhs when ShiftNode @lhs.deref else @lhs end end def name @lhs.name end def factor @lhs.factor end end def initialize string case string when String @string, @ptree = string, nil when Node @string, @ptree = nil, string else @string, @ptree = String(string), nil end @copy = @lexstat = nil end # # === LEXICAL ANALYZER === # def rewind @copy = @string.dup.strip @lexstat = nil end RE_SPACE = '([ \t])' RE_INTEGER = '([-+]?\d+)' RE_EXP = '([eE][-+]?[0-9]+)' RE_REAL = "([-+]?[0-9]*(\\.[0-9]*#{RE_EXP}?|#{RE_EXP}))" RE_YEAR = "([-+]?[0-9]{1,4})" RE_MONTH = "(0?[1-9]|1[0-2])" RE_DAY = "([12][0-9]|30|31|0?[1-9])" RE_HOUR = "(2[0-3]|[0-1]?[0-9])" RE_MINUTE = "([0-5]?[0-9])" RE_SECOND = "((#{RE_MINUTE}|60)(\\.[0-9]*)?)" RE_NAME = "(%|[a-zA-Z][a-zA-Z_]*([0-9]+[a-zA-Z_]+)*)" RE_DATE = "#{RE_YEAR}-#{RE_MONTH}-#{RE_DAY}" RE_TIME = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9])(:#{RE_SECOND})?)?" RE_HandM = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9]))?" def next_token # decomment @copy.sub!(/^#.*/, ''); if @copy.sub!(%r{^\s*(\))}, '') then @lexstat = nil return [$1, $1] end if @copy.sub!(%r{^\s*(\()\s*}, '') then return [$1, $1] end if @copy.sub!(%r{^[ \t]*(@)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(after|from|since|ref)[ \t]+}i, '') then @lexstat = :SHIFT_SEEN return [:SHIFT, $1] end if @copy.sub!(%r{^[ \t]*(/)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(per)[ \t]+}i, '') then @lexstat = nil return [:DIVIDE, $1] end if @copy.sub!(%r{^(\^|\*\*)}, '') then @lexstat = nil return [:EXPONENT, $1] end if @copy.sub!(%r{^(\.|\*|[ \t]+)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_DATE}T?[ \t]*}, '') then y, m, d = $1, $2, $3 @lexstat = :DATE_SEEN return [:DATE, XDate.new(y.to_i, m.to_i, d.to_i)] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^now[ \t]*}, '') then @lexstat = nil return [:DATE, :now] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_TIME}[ \t]*}, '') then h, m, s = $1, $3, $5 m = m.sub(/:/,'') if m s = 0 if s.nil? @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60 + Float(s))] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-2][0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^(UTC|Z)[ \t]*}, '') then @lexstat = nil return [:ZONE, 0] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^([-+]?)#{RE_HandM}[ \t]*}, '') then sgn, h, m = $1, $2, $4 m = m.sub(/:/,'') if m @lexstat = nil h = h.to_i h = -h if sgn == "-" m = m.to_i m = -m if sgn == "-" return [:ZONE, ((h * 60) + m)] end if @copy.sub!(%r{^#{RE_NAME}}, '') then @lexstat = nil return [:NAME, $1] end if @copy.sub!(%r{^#{RE_REAL}}, '') then @lexstat = nil return [:REAL, $1.to_f] end if @copy.sub!(%r{^#{RE_INTEGER}}, '') then @lexstat = nil return [:INT, $1.to_i] end if @copy.sub!(%r{^(-)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if @copy.sub!(%r{^(.)}, '') then return [$1, $1] end return [false, false] end # # === USER LEVEL METHODS === # def tokens rewind x = [] while (t = next_token).first x.push t end x end def do_parse2 rewind return NumberNode.new(1) if @string.nil? or @string.empty? pa = do_parse pa ? pa : ErrorNode.new(@string) end def ptree @ptree = do_parse2 if not @ptree @ptree end def dup @string ? self.class.new(@string) : self.class.new(@ptree) end def parse dup.parse! end def parse! @ptree = do_parse2 if not @ptree self end def self::parse(string) new(string).parse! end =begin --- reduce0 just do nothing. =end def reduce0 self end =begin --- reduce1 removes unnecessary parentheses. =end def reduce1 @string = ptree.to_s self end =begin --- reduce2 removes shift operator within multiplication/division/exponent =end def reduce2 @ptree = ptree.reduce2 @string = nil self end =begin --- reduce3 flattens expression and collects all factors =end def reduce3 @ptree = ptree.reduce3 @string = nil self end =begin --- reduce4 collects terms with the same name =end def reduce4 @ptree = ptree.reduce4 @string = nil self end =begin --- reduce5 expands all terms recursively =end def reduce5 @ptree = ptree.reduce5 @string = nil self end attr_reader :string def to_s @string = @ptree.to_s if @string.nil? @string end def inspect if @ptree.nil? then "Units{#{@string}}" else "Units[#{@ptree.inspect}]".gsub(/Units::/, '').gsub(/Node\[/, '[') end end def self::[](string) new(string) end def self::parse(string) new(string).parse! end def eval(x = 0) r5 = ptree.reduce5 case r = r5.ref when TimeNode r.add(x, r5.name) else fac = NumberNode.new(x + r.value) self.class.new(MulNode.new(fac, r5.deref)) end end def convert(numeric, to_units) to_units = Units.new( to_units ) if to_units.is_a?(String) r5 = dup.ptree.reduce5 case r = r5.ref when TimeNode r.add_time(r5.deref.mul(numeric)).div_time(to_units.ptree) else shift1 = r.value numeric = shift1 + numeric if shift1 != 0 fact = r5.divide(tp = to_units.dup.ptree).reduce5.value numeric *= fact if fact != 1 shift2 = tp.reduce5.ref.value numeric = numeric - shift2 if shift2 != 0 numeric end end def factor_and_offset(to_units) # To convert a numeric from self to to_units: # scale_factor * numeric + add_offset to_units = Units.new( to_units ) if to_units.is_a?(String) add_offset = convert(0, to_units) scale_factor = convert(1, to_units) - add_offset [ scale_factor, add_offset ] end def convert2(val, to_units) # Like Units#convert, but applicable to any Numeric-like objects. # Returns the original value if the units are incompatible. to_units = Units.new( to_units ) if to_units.is_a?(String) if ( self == to_units ) val elsif ( self =~ to_units ) if Numeric===val convert( val, to_units ) else factor, offset = factor_and_offset( to_units ) val*factor + offset end else unless $VERBOSE.nil? $stderr.print( "*WARNING*: " + "incompatible units: #{self.to_s} and #{to_units.to_s}\n") caller(0).each{|c| $stderr.print "\t* ",c,"\n"} end val end end @@reduce = :reduce4 def self::reduce_level @@reduce.to_s[-1] end def self::reduce_level=(n) @@reduce = case n when 1 then :reduce1 when 2 then :reduce2 when 3 then :reduce3 when 4 then :reduce4 else :reduce5 end end def binop(op, other) case other when Numeric other = NumberNode.new(other) when Units other = other.ptree end q = self.ptree.send(op, other).send(@@reduce) Units.new(q) end def *(other) binop(:mul, other) end def **(other) binop(:pow, other) end def /(other) binop(:divide, other) end def ^(other) binop(:shift, other) end def ==(other) case other when self.class dup.reduce5.to_s == other.dup.reduce5.to_s else false end end #def === (other) # reduce5.ptree.deref.to_s == other.reduce5.ptree.deref.to_s #end alias === == #def === (other) # # returns true if other is within a factor and/or offset of difference. # case other # when self.class # (self/other).reduce5.ptree.children.each do |child| # return false if !( NumberNode === child ) # end # true # else # false # end #end def =~(other) case other when self.class (self/other).reduce5.ptree.children.each{ |node| return false unless NumberNode === node } true else false end end def self::pow_f(a, b) if Integer === b and b < 0 then a ** b.to_f else a ** b end end ...end units.racc/module_eval... ##### State transition tables begin ### racc_action_table = [ 3, 9, 35, 9, 32, 9, 19, 11, 10, 7, 10, 9, 10, 8, 25, 31, 36, 23, 10, 7, 9, 37, 9, 8, 9, 38, nil, 10, 7, 10, 7, 10, 8, 25, 8, 9, 23, nil, 12, 9, 14, 15, 10, 9, 7, 17, 10, 31, 8, 17, 10, 9, nil, 9, nil, nil, nil, 17, 10, 17, 10 ] racc_action_check = [ 0, 0, 25, 31, 18, 23, 11, 1, 0, 0, 31, 14, 23, 0, 23, 31, 33, 23, 14, 14, 8, 34, 15, 14, 12, 35, nil, 8, 8, 15, 15, 12, 8, 12, 15, 17, 12, nil, 4, 5, 4, 4, 17, 28, 4, 5, 5, 17, 4, 28, 28, 13, nil, 26, nil, nil, nil, 13, 13, 26, 26 ] racc_action_pointer = [ -1, 7, nil, nil, 34, 37, nil, nil, 18, nil, nil, 6, 22, 49, 9, 20, nil, 33, -11, nil, nil, nil, nil, 3, nil, -10, 51, nil, 41, nil, nil, 1, nil, 1, 6, 12, nil, nil, nil ] racc_action_default = [ -1, -27, -2, -3, -4, -7, -8, -14, -27, -20, -21, -27, -27, -9, -27, -27, -15, -27, -27, 39, -5, -6, -18, -27, -22, -24, -10, -12, -11, -13, -16, -27, -17, -27, -27, -25, -19, -23, -26 ] racc_goto_table = [ 6, 20, 21, 2, 1, nil, 30, nil, 6, 13, nil, 18, 22, 34, 27, 29, nil, 22, nil, 26, 28, nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, 22 ] racc_goto_check = [ 7, 4, 5, 2, 1, nil, 4, nil, 7, 6, nil, 2, 7, 5, 7, 7, nil, 7, nil, 6, 6, nil, nil, 7, nil, nil, nil, nil, nil, nil, nil, 7 ] racc_goto_pointer = [ nil, 4, 3, nil, -11, -10, 5, 0, nil ] racc_goto_default = [ nil, nil, nil, 4, 33, nil, 5, 16, 24 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 17, :_reduce_none, 1, 17, :_reduce_2, 1, 17, :_reduce_3, 1, 18, :_reduce_none, 3, 18, :_reduce_5, 3, 18, :_reduce_6, 1, 19, :_reduce_none, 1, 19, :_reduce_none, 2, 19, :_reduce_9, 3, 19, :_reduce_10, 3, 19, :_reduce_11, 3, 19, :_reduce_12, 3, 19, :_reduce_13, 1, 22, :_reduce_14, 2, 22, :_reduce_15, 3, 22, :_reduce_16, 3, 22, :_reduce_17, 1, 20, :_reduce_none, 3, 20, :_reduce_19, 1, 23, :_reduce_20, 1, 23, :_reduce_21, 1, 21, :_reduce_none, 3, 21, :_reduce_23, 1, 24, :_reduce_24, 2, 24, :_reduce_25, 3, 24, :_reduce_26 ] racc_reduce_n = 27 racc_shift_n = 39 racc_token_table = { false => 0, :error => 1, :INT => 2, :ERR => 3, :SHIFT => 4, :SPACE => 5, :MULTIPLY => 6, :DIVIDE => 7, :EXPONENT => 8, :REAL => 9, :NAME => 10, :DATE => 11, :TIME => 12, :ZONE => 13, "(" => 14, ")" => 15 } racc_nt_base = 16 racc_use_result_var = false Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "INT", "ERR", "SHIFT", "SPACE", "MULTIPLY", "DIVIDE", "EXPONENT", "REAL", "NAME", "DATE", "TIME", "ZONE", "\"(\"", "\")\"", "$start", "unit_spec", "origin_exp", "unit_exp", "value_exp", "timestamp", "power_exp", "number_exp", "time_exp" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted module_eval(<<'.,.,', 'units.racc', 9) def _reduce_2(val, _values) val[0] end .,., module_eval(<<'.,.,', 'units.racc', 10) def _reduce_3(val, _values) yyerrok end .,., # reduce 4 omitted module_eval(<<'.,.,', 'units.racc', 15) def _reduce_5(val, _values) val[0].shift(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 16) def _reduce_6(val, _values) val[0].shift(val[2]) end .,., # reduce 7 omitted # reduce 8 omitted module_eval(<<'.,.,', 'units.racc', 22) def _reduce_9(val, _values) val[0].mul(val[1]) end .,., module_eval(<<'.,.,', 'units.racc', 23) def _reduce_10(val, _values) val[0].mul(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 24) def _reduce_11(val, _values) val[0].divide(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 25) def _reduce_12(val, _values) val[0].mul(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 26) def _reduce_13(val, _values) val[0].divide(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 30) def _reduce_14(val, _values) NameNode.new(val[0]) end .,., module_eval(<<'.,.,', 'units.racc', 31) def _reduce_15(val, _values) val[0].pow(val[1]) end .,., module_eval(<<'.,.,', 'units.racc', 32) def _reduce_16(val, _values) val[0].pow(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 33) def _reduce_17(val, _values) val[1] end .,., # reduce 18 omitted module_eval(<<'.,.,', 'units.racc', 38) def _reduce_19(val, _values) val[1] end .,., module_eval(<<'.,.,', 'units.racc', 42) def _reduce_20(val, _values) NumberNode.new(val[0]) end .,., module_eval(<<'.,.,', 'units.racc', 43) def _reduce_21(val, _values) NumberNode.new(val[0]) end .,., # reduce 22 omitted module_eval(<<'.,.,', 'units.racc', 48) def _reduce_23(val, _values) val[1] end .,., module_eval(<<'.,.,', 'units.racc', 52) def _reduce_24(val, _values) TimeNode.new(val[0], 0.0, 0) end .,., module_eval(<<'.,.,', 'units.racc', 53) def _reduce_25(val, _values) TimeNode.new(val[0], val[1], 0) end .,., module_eval(<<'.,.,', 'units.racc', 54) def _reduce_26(val, _values) TimeNode.new(val[0], val[1], val[2]) end .,., def _reduce_none(val, _values) val[0] end end # class Units end # module NumRu #################### if $0 == __FILE__ include NumRu def assert(test, seikai) raise "#{test.inspect} != #{seikai.inspect}" if test != seikai puts "ok #{seikai.inspect}" end puts "=== reduce1 ===" assert Units.new('').reduce1.to_s, "1" assert Units.new('m').reduce1.to_s, "m" assert Units.new('3').reduce1.to_s, "3" assert Units.new('3.14').reduce1.to_s, "3.14" assert Units.new('m2').reduce1.to_s, "m2" assert Units.new('m.s').reduce1.to_s, "m.s" assert Units.new('m/s').reduce1.to_s, "m.s-1" assert Units.new('kg.m/s2').reduce1.to_s, "kg.m.(s2)-1" assert Units.new('s @ 2003-11-29').reduce1.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('s @ 2003-11-29T11:24').reduce1.to_s, "(s @ 2003-11-29T11:24:00.00 +00:00)" assert Units.new('s @ 2003-11-29T11:24:11 -09:00').reduce1.to_s, "(s @ 2003-11-29T11:24:11.00 -09:00)" assert Units.new('100').reduce1.to_s, "100" assert Units.new('(10)^2').reduce1.to_s, "(10)2" assert Units.new('(10)^2/100').reduce1.to_s, "(10)2.(100)-1" puts "=== reduce2 ===" assert Units.new('s @ 2003-11-29').reduce2.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('m/(s @ 2003-11-29)').reduce2.to_s, "m.s-1" assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce2.to_s, "m.(K.s)-1" assert Units.new('(10)^2/100').reduce2.to_s, "(10)2.(100)-1" puts "=== reduce3 ===" assert Units::MultiNode.new(Units::NameNode.new('a'), \ Units::NumberNode.new(1), \ Units::NameNode.new('b')).to_s, 'a.1 b' assert Units.new('kg').reduce3.inspect, "Units[Name[kg]]" assert Units.new('kg.m').reduce3.inspect, "Units[Multi[Name[kg], Name[m]]]" assert Units.new('kg.m.s').reduce3.inspect, "Units[Multi[Name[kg], Name[m], Name[s]]]" assert Units.new('(m.s)^2').reduce3.inspect, "Units[Multi[Pow[Name[m], Number[2]], Pow[Name[s], Number[2]]]]" assert Units.new('K @ 273.15').reduce3.inspect, "Units[Shift[Name[K], Number[273.15]]]" assert Units.new('((a.b)^2)^2').reduce3.inspect, "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]]]]" assert Units.new('((a.b)^2 c4 d)^2').reduce3.inspect, "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]], Pow[Name[c], Number[8]], Pow[Name[d], Number[2]]]]" assert Units.new('((a.b)^2 c4 d)^2').reduce3.to_s, "a4 b4 c8 d2" assert Units.new('((a.b)^2 a4 b)^2').reduce3.to_s, "a4 b4 a8 b2" assert Units.new('s @ 2003-11-29').reduce3.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('m/(s @ 2003-11-29)').reduce3.to_s, "m.s-1" assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce3.to_s, "m.K-1 s-1" assert Units.new('(10)^2/100').reduce3.to_s, "(10)2.(100)-1" puts "=== reduce4 ===" assert Units.new('((a.b)^2 a4 b @ now)^2 @ 273.15').reduce4.to_s, "(a12 b6 @ 273.15)" assert Units.new('km2').reduce4.to_s, "km2" assert Units.new('hours.hour').reduce4.to_s, "hour2" assert Units.new('(10)^2').reduce4.to_s, "100" assert Units.new('100/10').reduce4.to_s, "10" assert Units.new('(10)^2/100').reduce4.to_s, "1" puts "=== reduce5 ===" assert Units.new('km2').reduce5.to_s, "1000000 m2" assert Units.new('(10)^2/100').reduce5.to_s, "1" assert Units.new('hPa').reduce5.to_s, "100 kg.m-1 s-2" assert Units.new('mb').reduce5.to_s, "100 kg.m-1 s-2" assert Units.new('hPa/mb').reduce5.to_s, "1" assert Units.new('(K @ 273.15)@ 10').reduce5.to_s, "(K @ 283.15)" puts "=== APPLICATIONS ===" assert Units.new('km @ 2').convert(3, Units.new('m @ 100')), 4900 assert Units.new('degree_F').convert(32, Units.new('K')).to_s, ((32+459.67)*(1.8**-1)).to_s u1 = Units.new('m/s') u2 = Units.new('mm/s') assert((u1/u2).to_s, "m.mm-1") assert((u1*u2).to_s, "m.mm.s-2") u1 = Units.new('years since 1999-01-01 00:00').reduce4 u2 = Units.new('hours since 2001-01-01 00:00').reduce4 assert u1.convert(3, u2), 24 * 365 u3 = Units.new('months since 2001-01-01 00:00').reduce4 assert u1.convert(3, u3), 12.0 Units.reduce_level = 3 assert((Units.new('hours') ** 2).to_s, "hours2") Units.reduce_level = 4 assert((Units.new('hours') ** 2).to_s, "hour2") Units.reduce_level = 5 assert((Units.new('hours') ** 2).to_s, "12960000 s2") assert(Units.new('day') =~ Units.new('s since 2002-01-01'), true) assert(Units.new('m') =~ Units.new('1'), false) un1 = Units['day since 2000-01-01'] un2 = Units['s since 2000-01-01'] assert(un1.convert(0, un2), 0.0) assert(un1.convert(1, un2), 86400.0) end numru-units-1.9/Makefile0000644000175000017500000000030210016775402015626 0ustar horinouthorinoutall: @(cd src && make && cp -p units.rb ../lib/numru/) @(cd doc && make) install: ruby install.rb test: @(cd src && make test) distclean: clean clean: @rm -f `find . -name "*~" -print` numru-units-1.9/LICENSE.txt0000644000175000017500000000321412460324151016012 0ustar horinouthorinoutNumRu::Units is copyrighted free software by GFD Dennou Club (http://www.gfd-dennou.org/). Copyright 2004-2015 (C) GFD Dennou Club (http://www.gfd-dennou.org/) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY GFD DENNOU CLUB AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GFD DENNOU CLUB OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Takeshi Horinouchi and GFD Dennou Club. numru-units-1.9/doc/0000755000175000017500000000000012470635565014753 5ustar horinouthorinoutnumru-units-1.9/doc/units.html0000644000175000017500000002204311616420132016763 0ustar horinouthorinout units.rd

class NumRu::Units

Overview

A class of units of physical quantities.

This class covers most functionality of UNIDATA's UDUNITS Library, however, with a more sophisticated handling of string expressions.

UDUNITS always decomposes units into the four base units and discards the original string expressions. Therefore, 'hPa' always becomes '100 kg.m-1.sec-1', and 'day' always becomes '86400 sec'. On the other hand, this library tries to keep the original expressions as much as possible by default, while allowing partial to complete decompositions if needed.

Installation

Move to the top directly of this library (where you find the file install.rb). Then, type in the following:

% ruby install.rb

Usage Examples

Here is an example using the "irb" interactive shell ("%" is the command prompt, and ">>" is the irb prompt -- Type in those after it to test. "=>" shows the result.):

% irb --simple-prompt
>> require "numru/units"
=> true
>> un1 = NumRu::Units.new('kg.m2/s')
=> Units{kg.m2/s}
>> un2 = NumRu::Units.new('g.m')
=> Units{g.m}
>> un3 = un1 / un2
=> Units[Multi[Pow[Name[g], Number[-1]], Name[kg], Pow[Name[m], Number[1]], Pow[Name[s], Number[-1]]]]
>> un1.to_s
=> "kg.m2/s"
>> un2.to_s
=> "g.m"
>> un3.to_s
=> "g-1 kg.m1 s-1"
>> un3.reduce5
=> Units[Multi[Number[1000], Pow[Name[m], Number[1]], Pow[Name[s], Number[-1]]]]
>> un3.to_s
=> "1000 m1 s-1"

Note the difference between the results of un3.to_s before and after un3.reduce5, where the former retains the literal expression of each atomic unit, while the latter does the maximum reduction. You can change the default behavior by using the class method reduce_level=:

>> NumRu::Units.reduce_level = 5
=> :reduce5
>> un3.to_s
=> "1000 m1 s-1"

Note that you can eliminate the prefix NumRu:: by "including" it:

>> require "numru/units"
=> true
>> include NumRu
=> Object
>> un1 = Units.new('kg.m2/s')
=> Units{kg.m2/s}
>> Units.reduce_level = 5
=> :reduce5

Class Methods

In what follows, the prefix NumRu:: is omitted for conciseness. See Usage Examples on this issue.

Units.new(string)

Constructor.

ARGUMENTS

  • string (String): string expression of the units. [factor] units; [factor] time units [since ...] (see EXAMPLES below)

RETURN VALUE

  • a Units

EXAMPLE

units = Units.new('kg.m2/s')
units = Units.new('100 m')
units = Units.new('g/kg')
units = Units.new('hour since 2003-10-01 00:00:0 +0:00')
units = Units.new('hour since 2003-10-01')   # same as above
units = Units.new('minutes since 2003-10-01 03:15:22.5 -6:00')

Units[string]

Same as Units.new

Units.reduce_level=(n)

Set the reduction level before to_s is applied.

ARGUMENTS

  • n (Integer): the reduction level. The default value is 4. Use 5 if you want a full reduction. Levels lower than 4 will not be needed.

Instance Methods

to_s

Returns a string expression of the units.

*(other)

Multiplies self with another units. Applies reduce4 to format the string expression of the result.

ARGUMENTS

  • other [Units]: the other units

RETURN VALUE

  • a Units

/(other)

Divides self with another units. Applies reduce4 to format the string expression of the result.

ARGUMENTS

  • other [Units]: the other units

RETURN VALUE

  • a Units

**(pow)

Power. Applies reduce4 to format the string expression of the result.

ARGUMENTS

  • pow [Numeric -- Integer, Rational, or Float]

RETURN VALUE

  • a Units

==(other)

Whether the two units are the same. ('m/s' and 'm.s-1' are the same, for instance.)

===(other)

Same as ==.

=~(other)

Whether the two units are compatible (i.e., with the same dimensionality). ('m/s' and '10 m.s-1' are compatible, for instance.)

reduce4

Moderately reduces the string expression of the units (destructive method). This method preserves string expression of atomic units. See also reduce5.

RETURN VALUE

  • self

EXAMPLE

Untis.new('hour/hour').reduce4.to_s
  # => "1"
Units.new('mm/m').reduce4.to_s
  # => "mm.m-1"

reduce5

Aggressively reduces the string expression of the units (destructive method). See also reduce4.

RETURN VALUE

  • self

EXAMPLE

Units.new('hour/hour').reduce4.to_s
  # => "1"
Units.new('mm/m').reduce5.to_s
  # => "0.001"

convert(numeric, to_units)

Converts a numeric of the current units (=self) to to_units.

ARGUMENTS

  • numeric [Numeric]: the numeric to convert
  • to_units [Units]: the units converted into

RETURN VALUE

  • a Numeric

EXCEPTIONS

  • self and to_units are incompatible.

convert2(val, to_units)

Like convert, but (1) accpets any Numeric-like objects, and (2) does not raise an exception even if the two units are incompatible -- in this case, simply returns val (warned).

ARGUMENTS

  • val [a Numeric-like class, for which * and + are defined]: the value to convert
  • to_units [Units]: the units converted into

RETURN VALUE

  • an object with the same class as val.

factor_and_offset(to_units)

Returns the factor and offset to convert from self to to_units. The conversion is done as scale_factor * operand + add_offset.

ARGUMENTS

  • to_units [Units]: the units to be converted into

RETURN VALUE

  • [ scale_factor, add_offset ] (a 2-element Array, where both are Numeric)

EXAMPLE

scale_factor, add_offset = from_units.factor_and_offset(to_units)
to = scale_factor * from + add_offset
numru-units-1.9/doc/Makefile0000644000175000017500000000020610016557722016401 0ustar horinouthorinoutall: units.html units.html: units.rd rd2 units.rd | sed -e 's/
/

/' -e 's/<\/dt>/<\/h4><\/dt>/' \ > units.html numru-units-1.9/doc/units.rd0000644000175000017500000001407511616420132016432 0ustar horinouthorinout=begin =class NumRu::Units * (()) * (()) * (()) * (()) * (()) * (()) (Plural form allowed if the second field is "P") ==Overview A class of units of physical quantities. This class covers most functionality of UNIDATA's (()), however, with a more sophisticated handling of string expressions. UDUNITS always decomposes units into the four base units and discards the original string expressions. Therefore, 'hPa' always becomes '100 kg.m-1.sec-1', and 'day' always becomes '86400 sec'. On the other hand, this library tries to keep the original expressions as much as possible by default, while allowing partial to complete decompositions if needed. ==Installation Move to the top directly of this library (where you find the file install.rb). Then, type in the following: % ruby install.rb ==Usage Examples Here is an example using the "irb" interactive shell ("(('%'))" is the command prompt, and "(('>>'))" is the irb prompt -- Type in those after it to test. "(('=>'))" shows the result.): % irb --simple-prompt >> require "numru/units" => true >> un1 = NumRu::Units.new('kg.m2/s') => Units{kg.m2/s} >> un2 = NumRu::Units.new('g.m') => Units{g.m} >> un3 = un1 / un2 => Units[Multi[Pow[Name[g], Number[-1]], Name[kg], Pow[Name[m], Number[1]], Pow[Name[s], Number[-1]]]] >> un1.to_s => "kg.m2/s" >> un2.to_s => "g.m" >> un3.to_s => "g-1 kg.m1 s-1" >> un3.reduce5 => Units[Multi[Number[1000], Pow[Name[m], Number[1]], Pow[Name[s], Number[-1]]]] >> un3.to_s => "1000 m1 s-1" Note the difference between the results of (('un3.to_s')) before and after (('un3.reduce5')), where the former retains the literal expression of each atomic unit, while the latter does the maximum reduction. You can change the default behavior by using the class method (('reduce_level=')): >> NumRu::Units.reduce_level = 5 => :reduce5 >> un3.to_s => "1000 m1 s-1" Note that you can eliminate the prefix (('NumRu::')) by "including" it: >> require "numru/units" => true >> include NumRu => Object >> un1 = Units.new('kg.m2/s') => Units{kg.m2/s} >> Units.reduce_level = 5 => :reduce5 ==Class Methods In what follows, the prefix (('NumRu::')) is omitted for conciseness. See (()) on this issue. ---Units.new(string) Constructor. ARGUMENTS * string (String): string expression of the units. [factor] units; [factor] time units [since ...] (see EXAMPLES below) RETURN VALUE * a Units EXAMPLE units = Units.new('kg.m2/s') units = Units.new('100 m') units = Units.new('g/kg') units = Units.new('hour since 2003-10-01 00:00:0 +0:00') units = Units.new('hour since 2003-10-01') # same as above units = Units.new('minutes since 2003-10-01 03:15:22.5 -6:00') ---Units[string] Same as (()) ---Units.reduce_level=(n) Set the reduction level before (()) is applied. ARGUMENTS * n (Integer): the reduction level. The default value is 4. Use 5 if you want a full reduction. Levels lower than 4 will not be needed. ==Instance Methods ---to_s Returns a string expression of the units. ---*(other) Multiplies self with another units. Applies (()) to format the string expression of the result. ARGUMENTS * other [Units]: the other units RETURN VALUE * a Units ---/(other) Divides self with another units. Applies (()) to format the string expression of the result. ARGUMENTS * other [Units]: the other units RETURN VALUE * a Units ---**(pow) Power. Applies (()) to format the string expression of the result. ARGUMENTS * pow [Numeric -- Integer, Rational, or Float] RETURN VALUE * a Units ---==(other) Whether the two units are the same. ('m/s' and 'm.s-1' are the same, for instance.) ---===(other) Same as ((<==>)). ---=~(other) Whether the two units are compatible (i.e., with the same dimensionality). ('m/s' and '10 m.s-1' are compatible, for instance.) ---reduce4 Moderately reduces the string expression of the units (destructive method). This method preserves string expression of atomic units. See also (()). RETURN VALUE * self EXAMPLE Untis.new('hour/hour').reduce4.to_s # => "1" Units.new('mm/m').reduce4.to_s # => "mm.m-1" ---reduce5 Aggressively reduces the string expression of the units (destructive method). See also (()). RETURN VALUE * self EXAMPLE Units.new('hour/hour').reduce4.to_s # => "1" Units.new('mm/m').reduce5.to_s # => "0.001" ---convert(numeric, to_units) Converts a numeric of the current units (=self) to ((|to_units|)). ARGUMENTS * numeric [Numeric]: the numeric to convert * to_units [Units]: the units converted into RETURN VALUE * a Numeric EXCEPTIONS * ((|self|)) and ((|to_units|)) are incompatible. ---convert2(val, to_units) Like (()), but (1) accpets any Numeric-like objects, and (2) does not raise an exception even if the two units are incompatible -- in this case, simply returns ((|val|)) (warned). ARGUMENTS * val [a Numeric-like class, for which (('*')) and (('+')) are defined]: the value to convert * to_units [Units]: the units converted into RETURN VALUE * an object with the same class as ((|val|)). ---factor_and_offset(to_units) Returns the factor and offset to convert from ((|self|)) to ((|to_units|)). The conversion is done as (('scale_factor * operand + add_offset')). ARGUMENTS * to_units [Units]: the units to be converted into RETURN VALUE * [ scale_factor, add_offset ] (a 2-element Array, where both are Numeric) EXAMPLE scale_factor, add_offset = from_units.factor_and_offset(to_units) to = scale_factor * from + add_offset =end numru-units-1.9/src/0000755000175000017500000000000012470635565014775 5ustar horinouthorinoutnumru-units-1.9/src/rules.rb0000644000175000017500000000240112454711766016451 0ustar horinouthorinoutclass NumRu::Units token INT ERR SHIFT SPACE MULTIPLY DIVIDE EXPONENT REAL NAME DATE TIME ZONE options no_result_var rule unit_spec: /* { yyaccept; } */ /* <-- to acccept empty unit_spec */ | origin_exp { val[0] } | error { yyerrok } ; origin_exp: unit_exp | unit_exp SHIFT value_exp { val[0].shift(val[2]) } | unit_exp SHIFT timestamp { val[0].shift(val[2]) } ; unit_exp: power_exp | number_exp | unit_exp power_exp { val[0].mul(val[1]) } | unit_exp MULTIPLY power_exp { val[0].mul(val[2]) } | unit_exp DIVIDE power_exp { val[0].divide(val[2]) } | unit_exp MULTIPLY number_exp { val[0].mul(val[2]) } | unit_exp DIVIDE number_exp { val[0].divide(val[2]) } ; power_exp: NAME { NameNode.new(val[0]) } | power_exp number_exp { val[0].pow(val[1]) } | power_exp EXPONENT value_exp { val[0].pow(val[2]) } | '(' origin_exp ')' { val[1] } ; value_exp: number_exp | '(' value_exp ')' { val[1] } ; number_exp: INT { NumberNode.new(val[0]) } | REAL { NumberNode.new(val[0]) } ; timestamp: time_exp | '(' timestamp ')' { val[1] } ; time_exp: DATE { TimeNode.new(val[0], 0.0, 0) } | DATE TIME { TimeNode.new(val[0], val[1], 0) } | DATE TIME ZONE { TimeNode.new(val[0], val[1], val[2]) } ; end ---- header require 'date' ---- inner numru-units-1.9/src/node.rb0000644000175000017500000000610410020516646016233 0ustar horinouthorinout=begin = class Node Node is a parent class for classes of parse tree node. This is not expected to be instanciated directly. =end class Node def initialize(*args) raise "#{self.class} is virtual." end def to_s(*args) raise "#{self.class}#to_s is virtual." end =begin --- pow other simply constructs a PowNode object. No reduction is performed. =end def pow(other) PowNode.new(self, other) end =begin --- mul other simply constructs a MulNode object. No reduction is performed. =end def mul(other) other = NumberNode.new(other) if Numeric === other MulNode.new(self, other) end =begin --- divide other simply constructs a MulNode object. No reduction is performed. =end def divide(other) MulNode.new(self, PowNode.new(other, NumberNode.new(-1))) end =begin --- shift other simply constructs a ShiftNode object. No reduction is performed. =end def shift(other) ShiftNode.new(self, other) end =begin --- pow_eval other similar to (()), but reduces PowNode[PowNode[...]] into single PowNode[...], so overriden at PowNode class. =end def pow_eval(other) pow(other) end =begin --- inspect =end def inspect2; "#{self.class}[#{to_s}]"; end def inspect; inspect2.gsub(/Units::/, '').gsub(/NumRu::/, '').gsub(/Node\[/, '['); end =begin --- trim in most subclasses, "trim" is redirected into "trim2". =end def trim trim2 end =begin --- flatten in most subclasses, "flatten" is redirected into "flatten2". =end def flatten flatten2 end =begin --- sort =end def sort raise "#{self.class}#sort is virtual: call after flatten" end =begin --- reduce1 --- reduce2 --- reduce3 --- reduce4 --- reduce5 =end def reduce1 self end def reduce2 trim end def reduce3 trim.flatten end def reduce4 # unalias(Hash.new).trim.flatten.sort foldnumber(nil).trim.flatten.sort end def reduce5 expand(Hash.new).trim.flatten.sort end =begin --- ref to be overriden at ShiftNode --- deref to be overriden at ShiftNode =end def ref NumberNode::ZERO end def deref self end end class ErrorNode < Node def initialize(string) @a = string end def to_s; @a; end end class ContainerNode < Node def trim2 x = [] for child in self x.push child.trim2 end self.class.new(*x) end def inspect2 a = [] for child in self a.push child.inspect2 end "#{self.class}[#{a.join(', ')}]" end end module BinaryNode def each yield @lhs yield @rhs end def expand(stopper) self.class.new(@lhs.expand(stopper), @rhs.expand(stopper)) end def unalias(stopper) self.class.new(@lhs.unalias(stopper), @rhs.unalias(stopper)) end def foldnumber(stopper) self.class.new(@lhs.foldnumber(stopper), @rhs.foldnumber(stopper)) end end class TerminalNode < Node def trim2; self; end def flatten2; self; end def expand(stopper); self; end alias :unalias :expand alias :foldnumber :expand def sort; self; end end numru-units-1.9/src/units.rb0000644000175000017500000034606212467011742016466 0ustar horinouthorinout# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.8 # from Racc grammer file "". # require 'racc/parser.rb' require 'date' module NumRu class Units < Racc::Parser module_eval(<<'...end units.racc/module_eval...', 'units.racc', 65) VERSION = "1.9" =begin = class Node Node is a parent class for classes of parse tree node. This is not expected to be instanciated directly. =end class Node def initialize(*args) raise "#{self.class} is virtual." end def to_s(*args) raise "#{self.class}#to_s is virtual." end =begin --- pow other simply constructs a PowNode object. No reduction is performed. =end def pow(other) PowNode.new(self, other) end =begin --- mul other simply constructs a MulNode object. No reduction is performed. =end def mul(other) other = NumberNode.new(other) if Numeric === other MulNode.new(self, other) end =begin --- divide other simply constructs a MulNode object. No reduction is performed. =end def divide(other) MulNode.new(self, PowNode.new(other, NumberNode.new(-1))) end =begin --- shift other simply constructs a ShiftNode object. No reduction is performed. =end def shift(other) ShiftNode.new(self, other) end =begin --- pow_eval other similar to (()), but reduces PowNode[PowNode[...]] into single PowNode[...], so overriden at PowNode class. =end def pow_eval(other) pow(other) end =begin --- inspect =end def inspect2; "#{self.class}[#{to_s}]"; end def inspect; inspect2.gsub(/Units::/, '').gsub(/NumRu::/, '').gsub(/Node\[/, '['); end =begin --- trim in most subclasses, "trim" is redirected into "trim2". =end def trim trim2 end =begin --- flatten in most subclasses, "flatten" is redirected into "flatten2". =end def flatten flatten2 end =begin --- sort =end def sort raise "#{self.class}#sort is virtual: call after flatten" end =begin --- reduce1 --- reduce2 --- reduce3 --- reduce4 --- reduce5 =end def reduce1 self end def reduce2 trim end def reduce3 trim.flatten end def reduce4 # unalias(Hash.new).trim.flatten.sort foldnumber(nil).trim.flatten.sort end def reduce5 expand(Hash.new).trim.flatten.sort end =begin --- ref to be overriden at ShiftNode --- deref to be overriden at ShiftNode =end def ref NumberNode::ZERO end def deref self end end class ErrorNode < Node def initialize(string) @a = string end def to_s; @a; end end class ContainerNode < Node def trim2 x = [] for child in self x.push child.trim2 end self.class.new(*x) end def inspect2 a = [] for child in self a.push child.inspect2 end "#{self.class}[#{a.join(', ')}]" end end module BinaryNode def each yield @lhs yield @rhs end def expand(stopper) self.class.new(@lhs.expand(stopper), @rhs.expand(stopper)) end def unalias(stopper) self.class.new(@lhs.unalias(stopper), @rhs.unalias(stopper)) end def foldnumber(stopper) self.class.new(@lhs.foldnumber(stopper), @rhs.foldnumber(stopper)) end end class TerminalNode < Node def trim2; self; end def flatten2; self; end def expand(stopper); self; end alias :unalias :expand alias :foldnumber :expand def sort; self; end end class NameNode < TerminalNode def initialize(string) @a = string end def to_s; @a; end alias :name :to_s def power; NumberNode::UNITY; end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name PowNode.new(self, self.power.add_eval(another.power)) end def expand(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self if basic? return CACHE[@a] if CACHE.include?(@a) CACHE[@a] = expand2(stopper) end def expand2(stopper) newstopper = stopper.dup newstopper[@a] = true if UDEFS.include?(@a) then Units.new(UDEFS[@a]).ptree.expand(newstopper) else p, n = UALIASES[@a] u = Units.new(UDEFS[n] || n).ptree.expand(newstopper) MulNode.new(u, PowNode.new(NumberNode.new(10), NumberNode.new(p))) end end def unalias(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self unless UALIASES.include?(@a) p, n = UALIASES[@a] u = NameNode.new(n) q = PowNode.new(NumberNode.new(10), NumberNode.new(p)) MulNode.new(u, q) end def foldnumber(stopper) return self unless UPLURALS.include?(@a) n = UPLURALS[@a] NameNode.new(n) end def basic? not (UDEFS.include?(@a) or UALIASES.include?(@a)) end CACHE = {} def factor 1 end end class NameNode UDEFS = { "%" => "1e-2", "Au" => "astronomical_unit", "Bq" => "s-1", "C" => "A.s", "Celsius" => "K @ 273.15", "F" => "C/V", "Fahrenheit" => "degree_F", "G" => "gauss", "Gal" => "cm s-2", "Gy" => "J.kg-1", "H" => "Wb.A-1", "Hg" => "mercury", "Hz" => "1/s", "J" => "N.m", "Julian_year" => "365.25 day", "L" => "litre", "N" => "kg.m.s-2", "P" => "poise", "Pa" => "N.m-2", "Pascal" => "Pa", "S" => "A/V", "St" => "stokes", "Sv" => "J.kg-1", "T" => "Wb.m-2", "V" => "J/C", "W" => "J/s", "Wb" => "V.s", "a" => "are", "ac" => "acre", "acre" => "10 chain2", "ampere" => "A", "angstrom" => "1.0e-10 m", "angular_degree" => "degree", "angular_minute" => "minute_angle", "angular_second" => "second_angle", "are" => "100 m2", "astronomical_unit" => "1.49597870e11 m", "astronomical_units" => "1.49597870e11 m", "atm" => "atmosphere", "atmosphere" => "101325 Pa", "bar" => "1e6 dyn.cm-2", "cal" => "calorie", "calorie" => "4.18605 J", "candela" => "cd", "celsius" => "K @ 273.15", "centigrade" => "K @ 273.15", "century" => "100 year", "chain" => "22 yard", "common_year" => "365 day", "conventional_mercury" => "gravity 13595.10 kg/m3", "coulomb" => "C", "d" => "24 hour", "day" => "24 hour", "degC" => "K @ 273.15", "degF" => "degree_F", "degK" => "K", "deg_C" => "K @ 273.15", "deg_F" => "degree_F", "deg_K" => "K", "degree" => "pi.rad/180", "degreeC" => "K @ 273.15", "degreeF" => "degree_F", "degreeK" => "K", "degree_C" => "K @ 273.15", "degree_E" => "degree", "degree_F" => "degree_R @ 459.67", "degree_N" => "degree", "degree_R" => "K / 1.8", "degree_S" => "degree", "degree_W" => "degree", "degree_c" => "K @ 273.15", "degree_east" => "degree_E", "degree_f" => "degree_R @ 459.67", "degree_north" => "degree_N", "degree_south" => "degree_S", "degree_west" => "degree_W", "degrees_east" => "degree_E", "degrees_north" => "degree_N", "degrees_south" => "degree_S", "degrees_west" => "degree_W", "dyn" => "g.cm.s-2", "dyne" => "g.cm.s-2", "erg" => "dyn cm", "fahrenheit" => "degree_F", "farad" => "coulomb/volt", "feet" => "foot", "fermi" => "1.0e-15 m", "foot" => "12 inch", "force" => "9.80665 m.s-2", "ft" => "foot", "g" => "kg/1000", "gal" => "cm s-2", "gauss" => "T / 10000", "gpm" => "m", "gram" => "kg/1000", "gravity" => "9.806650 meter/second2", "h" => "60 min", "hectare" => "100 are", "hertz" => "Hz", "hg" => "mercury", "horse_power" => "75 m kilogram-force / s", "hour" => "60 min", "hr" => "60 min", "in" => "inch", "inch" => "2.54 cm", "joule" => "J", "kelvin" => "K", "kgf" => "kilogram-force", "kilogram" => "kg", "knot" => "nautical_mile / hour", "kph" => "km / hour", "lb" => "pound", "light_speed" => "299792458 m/s", "light_year" => "9.46e15 m", "light_years" => "9.46e15 m", "litre" => "1.0e-3 m3", "lm" => "cd.sr", "lx" => "lm.m-2", "ly" => "light_year", "mb" => "bar / 1000", "mercury" => "conventional_mercury", "meter" => "metre", "metre" => "m", "mgal" => "cm s-2 / 1000", "micron" => "1.0e-6 m", "mile" => "1760 yard", "millibar" => "bar / 1000", "min" => "60 s", "minute" => "60 s", "minute_angle" => "pi.rad/180/60", "mole" => "mol", "mon" => "month", "month" => "6 pentad", "mph" => "mile / hour", "nautical_mile" => "1852 m", "nautical_miles" => "1852 m", "newton" => "N", "ohm" => "V/A", "ounce" => "pound / 16", "oz" => "ounce", "parsec" => "3.0857e16 m", "pascal" => "Pa", "pc" => "parsec", "percent" => "1e-2", "permil" => "1e-3", "pi" => "3.141592653589793238462", "poise" => "dyn s / cm2", "pound" => "453.6 g", "psi" => "pound-force / inch2", "radian" => "rad", "second" => "s", "second_angle" => "pi.rad/180/60/60", "steradian" => "sr", "stokes" => "cm2 / s", "t" => "ton", "tesla" => "Wb.m-2", "ton" => "1000 kg", "tonne" => "ton", "torr" => "133.322 Pa", "volt" => "V", "watt" => "W", "weber" => "Wb", "yard" => "6 feet", "yd" => "yard", "year" => "12 month", "yr" => "year", } UALIASES = { "Celsiuses" => [0, "Celsius"], "EA" => [18, "A"], "EAu" => [18, "Au"], "EBq" => [18, "Bq"], "EC" => [18, "C"], "EF" => [18, "F"], "EG" => [18, "G"], "EGal" => [18, "Gal"], "EGy" => [18, "Gy"], "EH" => [18, "H"], "EHg" => [18, "Hg"], "EHz" => [18, "Hz"], "EJ" => [18, "J"], "EK" => [18, "K"], "EL" => [18, "L"], "EN" => [18, "N"], "EP" => [18, "P"], "EPa" => [18, "Pa"], "ES" => [18, "S"], "ESt" => [18, "St"], "ESv" => [18, "Sv"], "ET" => [18, "T"], "EV" => [18, "V"], "EW" => [18, "W"], "EWb" => [18, "Wb"], "Ea" => [18, "a"], "Eac" => [18, "ac"], "Eatm" => [18, "atm"], "Ebar" => [18, "bar"], "Ecal" => [18, "cal"], "Ecd" => [18, "cd"], "Econventional_mercury" => [18, "conventional_mercury"], "EdegC" => [18, "degC"], "EdegF" => [18, "degF"], "Edeg_C" => [18, "deg_C"], "Edeg_F" => [18, "deg_F"], "EdegreeC" => [18, "degreeC"], "EdegreeF" => [18, "degreeF"], "Edegree_C" => [18, "degree_C"], "Edegree_E" => [18, "degree_E"], "Edegree_F" => [18, "degree_F"], "Edegree_N" => [18, "degree_N"], "Edegree_R" => [18, "degree_R"], "Edegree_S" => [18, "degree_S"], "Edegree_W" => [18, "degree_W"], "Edegree_c" => [18, "degree_c"], "Edegree_east" => [18, "degree_east"], "Edegree_f" => [18, "degree_f"], "Edegree_north" => [18, "degree_north"], "Edegree_south" => [18, "degree_south"], "Edegree_west" => [18, "degree_west"], "Edegrees_east" => [18, "degrees_east"], "Edegrees_north" => [18, "degrees_north"], "Edegrees_south" => [18, "degrees_south"], "Edegrees_west" => [18, "degrees_west"], "Edyn" => [18, "dyn"], "Eerg" => [18, "erg"], "Eforce" => [18, "force"], "Eg" => [18, "g"], "Egravity" => [18, "gravity"], "Eh" => [18, "h"], "Ehg" => [18, "hg"], "Ehr" => [18, "hr"], "Ein" => [18, "in"], "Ekgf" => [18, "kgf"], "Ekph" => [18, "kph"], "Elb" => [18, "lb"], "Elm" => [18, "lm"], "Elx" => [18, "lx"], "Ely" => [18, "ly"], "Em" => [18, "m"], "Emb" => [18, "mb"], "Emercury" => [18, "mercury"], "Emgal" => [18, "mgal"], "Emin" => [18, "min"], "Emol" => [18, "mol"], "Emon" => [18, "mon"], "Emph" => [18, "mph"], "Eohm" => [18, "ohm"], "Eoz" => [18, "oz"], "Epc" => [18, "pc"], "Epsi" => [18, "psi"], "Erad" => [18, "rad"], "Es" => [18, "s"], "Esr" => [18, "sr"], "Et" => [18, "t"], "Eyr" => [18, "yr"], "Fahrenheits" => [0, "Fahrenheit"], "GA" => [9, "A"], "GAu" => [9, "Au"], "GBq" => [9, "Bq"], "GC" => [9, "C"], "GF" => [9, "F"], "GG" => [9, "G"], "GGal" => [9, "Gal"], "GGy" => [9, "Gy"], "GH" => [9, "H"], "GHg" => [9, "Hg"], "GHz" => [9, "Hz"], "GJ" => [9, "J"], "GK" => [9, "K"], "GL" => [9, "L"], "GN" => [9, "N"], "GP" => [9, "P"], "GPa" => [9, "Pa"], "GS" => [9, "S"], "GSt" => [9, "St"], "GSv" => [9, "Sv"], "GT" => [9, "T"], "GV" => [9, "V"], "GW" => [9, "W"], "GWb" => [9, "Wb"], "Ga" => [9, "a"], "Gac" => [9, "ac"], "Gatm" => [9, "atm"], "Gbar" => [9, "bar"], "Gcal" => [9, "cal"], "Gcd" => [9, "cd"], "Gconventional_mercury" => [9, "conventional_mercury"], "GdegC" => [9, "degC"], "GdegF" => [9, "degF"], "Gdeg_C" => [9, "deg_C"], "Gdeg_F" => [9, "deg_F"], "GdegreeC" => [9, "degreeC"], "GdegreeF" => [9, "degreeF"], "Gdegree_C" => [9, "degree_C"], "Gdegree_E" => [9, "degree_E"], "Gdegree_F" => [9, "degree_F"], "Gdegree_N" => [9, "degree_N"], "Gdegree_R" => [9, "degree_R"], "Gdegree_S" => [9, "degree_S"], "Gdegree_W" => [9, "degree_W"], "Gdegree_c" => [9, "degree_c"], "Gdegree_east" => [9, "degree_east"], "Gdegree_f" => [9, "degree_f"], "Gdegree_north" => [9, "degree_north"], "Gdegree_south" => [9, "degree_south"], "Gdegree_west" => [9, "degree_west"], "Gdegrees_east" => [9, "degrees_east"], "Gdegrees_north" => [9, "degrees_north"], "Gdegrees_south" => [9, "degrees_south"], "Gdegrees_west" => [9, "degrees_west"], "Gdyn" => [9, "dyn"], "Gerg" => [9, "erg"], "Gforce" => [9, "force"], "Gg" => [9, "g"], "Ggravity" => [9, "gravity"], "Gh" => [9, "h"], "Ghg" => [9, "hg"], "Ghr" => [9, "hr"], "Gin" => [9, "in"], "Gkgf" => [9, "kgf"], "Gkph" => [9, "kph"], "Glb" => [9, "lb"], "Glm" => [9, "lm"], "Glx" => [9, "lx"], "Gly" => [9, "ly"], "Gm" => [9, "m"], "Gmb" => [9, "mb"], "Gmercury" => [9, "mercury"], "Gmgal" => [9, "mgal"], "Gmin" => [9, "min"], "Gmol" => [9, "mol"], "Gmon" => [9, "mon"], "Gmph" => [9, "mph"], "Gohm" => [9, "ohm"], "Goz" => [9, "oz"], "Gpc" => [9, "pc"], "Gpsi" => [9, "psi"], "Grad" => [9, "rad"], "Gs" => [9, "s"], "Gsr" => [9, "sr"], "Gt" => [9, "t"], "Gyr" => [9, "yr"], "Julians_year" => [0, "Julian_year"], "MA" => [6, "A"], "MAu" => [6, "Au"], "MBq" => [6, "Bq"], "MC" => [6, "C"], "MF" => [6, "F"], "MG" => [6, "G"], "MGal" => [6, "Gal"], "MGy" => [6, "Gy"], "MH" => [6, "H"], "MHg" => [6, "Hg"], "MHz" => [6, "Hz"], "MJ" => [6, "J"], "MK" => [6, "K"], "ML" => [6, "L"], "MN" => [6, "N"], "MP" => [6, "P"], "MPa" => [6, "Pa"], "MS" => [6, "S"], "MSt" => [6, "St"], "MSv" => [6, "Sv"], "MT" => [6, "T"], "MV" => [6, "V"], "MW" => [6, "W"], "MWb" => [6, "Wb"], "Ma" => [6, "a"], "Mac" => [6, "ac"], "Matm" => [6, "atm"], "Mbar" => [6, "bar"], "Mcal" => [6, "cal"], "Mcd" => [6, "cd"], "Mconventional_mercury" => [6, "conventional_mercury"], "MdegC" => [6, "degC"], "MdegF" => [6, "degF"], "Mdeg_C" => [6, "deg_C"], "Mdeg_F" => [6, "deg_F"], "MdegreeC" => [6, "degreeC"], "MdegreeF" => [6, "degreeF"], "Mdegree_C" => [6, "degree_C"], "Mdegree_E" => [6, "degree_E"], "Mdegree_F" => [6, "degree_F"], "Mdegree_N" => [6, "degree_N"], "Mdegree_R" => [6, "degree_R"], "Mdegree_S" => [6, "degree_S"], "Mdegree_W" => [6, "degree_W"], "Mdegree_c" => [6, "degree_c"], "Mdegree_east" => [6, "degree_east"], "Mdegree_f" => [6, "degree_f"], "Mdegree_north" => [6, "degree_north"], "Mdegree_south" => [6, "degree_south"], "Mdegree_west" => [6, "degree_west"], "Mdegrees_east" => [6, "degrees_east"], "Mdegrees_north" => [6, "degrees_north"], "Mdegrees_south" => [6, "degrees_south"], "Mdegrees_west" => [6, "degrees_west"], "Mdyn" => [6, "dyn"], "Merg" => [6, "erg"], "Mforce" => [6, "force"], "Mg" => [6, "g"], "Mgravity" => [6, "gravity"], "Mh" => [6, "h"], "Mhg" => [6, "hg"], "Mhr" => [6, "hr"], "Min" => [6, "in"], "Mkgf" => [6, "kgf"], "Mkph" => [6, "kph"], "Mlb" => [6, "lb"], "Mlm" => [6, "lm"], "Mlx" => [6, "lx"], "Mly" => [6, "ly"], "Mm" => [6, "m"], "Mmb" => [6, "mb"], "Mmercury" => [6, "mercury"], "Mmgal" => [6, "mgal"], "Mmin" => [6, "min"], "Mmol" => [6, "mol"], "Mmon" => [6, "mon"], "Mmph" => [6, "mph"], "Mohm" => [6, "ohm"], "Moz" => [6, "oz"], "Mpc" => [6, "pc"], "Mpsi" => [6, "psi"], "Mrad" => [6, "rad"], "Ms" => [6, "s"], "Msr" => [6, "sr"], "Mt" => [6, "t"], "Myr" => [6, "yr"], "PA" => [15, "A"], "PAu" => [15, "Au"], "PBq" => [15, "Bq"], "PC" => [15, "C"], "PF" => [15, "F"], "PG" => [15, "G"], "PGal" => [15, "Gal"], "PGy" => [15, "Gy"], "PH" => [15, "H"], "PHg" => [15, "Hg"], "PHz" => [15, "Hz"], "PJ" => [15, "J"], "PK" => [15, "K"], "PL" => [15, "L"], "PN" => [15, "N"], "PP" => [15, "P"], "PPa" => [15, "Pa"], "PS" => [15, "S"], "PSt" => [15, "St"], "PSv" => [15, "Sv"], "PT" => [15, "T"], "PV" => [15, "V"], "PW" => [15, "W"], "PWb" => [15, "Wb"], "Pa" => [15, "a"], "Pac" => [15, "ac"], "Pascals" => [0, "Pascal"], "Patm" => [15, "atm"], "Pbar" => [15, "bar"], "Pcal" => [15, "cal"], "Pcd" => [15, "cd"], "Pconventional_mercury" => [15, "conventional_mercury"], "PdegC" => [15, "degC"], "PdegF" => [15, "degF"], "Pdeg_C" => [15, "deg_C"], "Pdeg_F" => [15, "deg_F"], "PdegreeC" => [15, "degreeC"], "PdegreeF" => [15, "degreeF"], "Pdegree_C" => [15, "degree_C"], "Pdegree_E" => [15, "degree_E"], "Pdegree_F" => [15, "degree_F"], "Pdegree_N" => [15, "degree_N"], "Pdegree_R" => [15, "degree_R"], "Pdegree_S" => [15, "degree_S"], "Pdegree_W" => [15, "degree_W"], "Pdegree_c" => [15, "degree_c"], "Pdegree_east" => [15, "degree_east"], "Pdegree_f" => [15, "degree_f"], "Pdegree_north" => [15, "degree_north"], "Pdegree_south" => [15, "degree_south"], "Pdegree_west" => [15, "degree_west"], "Pdegrees_east" => [15, "degrees_east"], "Pdegrees_north" => [15, "degrees_north"], "Pdegrees_south" => [15, "degrees_south"], "Pdegrees_west" => [15, "degrees_west"], "Pdyn" => [15, "dyn"], "Perg" => [15, "erg"], "Pforce" => [15, "force"], "Pg" => [15, "g"], "Pgravity" => [15, "gravity"], "Ph" => [15, "h"], "Phg" => [15, "hg"], "Phr" => [15, "hr"], "Pin" => [15, "in"], "Pkgf" => [15, "kgf"], "Pkph" => [15, "kph"], "Plb" => [15, "lb"], "Plm" => [15, "lm"], "Plx" => [15, "lx"], "Ply" => [15, "ly"], "Pm" => [15, "m"], "Pmb" => [15, "mb"], "Pmercury" => [15, "mercury"], "Pmgal" => [15, "mgal"], "Pmin" => [15, "min"], "Pmol" => [15, "mol"], "Pmon" => [15, "mon"], "Pmph" => [15, "mph"], "Pohm" => [15, "ohm"], "Poz" => [15, "oz"], "Ppc" => [15, "pc"], "Ppsi" => [15, "psi"], "Prad" => [15, "rad"], "Ps" => [15, "s"], "Psr" => [15, "sr"], "Pt" => [15, "t"], "Pyr" => [15, "yr"], "TA" => [12, "A"], "TAu" => [12, "Au"], "TBq" => [12, "Bq"], "TC" => [12, "C"], "TF" => [12, "F"], "TG" => [12, "G"], "TGal" => [12, "Gal"], "TGy" => [12, "Gy"], "TH" => [12, "H"], "THg" => [12, "Hg"], "THz" => [12, "Hz"], "TJ" => [12, "J"], "TK" => [12, "K"], "TL" => [12, "L"], "TN" => [12, "N"], "TP" => [12, "P"], "TPa" => [12, "Pa"], "TS" => [12, "S"], "TSt" => [12, "St"], "TSv" => [12, "Sv"], "TT" => [12, "T"], "TV" => [12, "V"], "TW" => [12, "W"], "TWb" => [12, "Wb"], "Ta" => [12, "a"], "Tac" => [12, "ac"], "Tatm" => [12, "atm"], "Tbar" => [12, "bar"], "Tcal" => [12, "cal"], "Tcd" => [12, "cd"], "Tconventional_mercury" => [12, "conventional_mercury"], "TdegC" => [12, "degC"], "TdegF" => [12, "degF"], "Tdeg_C" => [12, "deg_C"], "Tdeg_F" => [12, "deg_F"], "TdegreeC" => [12, "degreeC"], "TdegreeF" => [12, "degreeF"], "Tdegree_C" => [12, "degree_C"], "Tdegree_E" => [12, "degree_E"], "Tdegree_F" => [12, "degree_F"], "Tdegree_N" => [12, "degree_N"], "Tdegree_R" => [12, "degree_R"], "Tdegree_S" => [12, "degree_S"], "Tdegree_W" => [12, "degree_W"], "Tdegree_c" => [12, "degree_c"], "Tdegree_east" => [12, "degree_east"], "Tdegree_f" => [12, "degree_f"], "Tdegree_north" => [12, "degree_north"], "Tdegree_south" => [12, "degree_south"], "Tdegree_west" => [12, "degree_west"], "Tdegrees_east" => [12, "degrees_east"], "Tdegrees_north" => [12, "degrees_north"], "Tdegrees_south" => [12, "degrees_south"], "Tdegrees_west" => [12, "degrees_west"], "Tdyn" => [12, "dyn"], "Terg" => [12, "erg"], "Tforce" => [12, "force"], "Tg" => [12, "g"], "Tgravity" => [12, "gravity"], "Th" => [12, "h"], "Thg" => [12, "hg"], "Thr" => [12, "hr"], "Tin" => [12, "in"], "Tkgf" => [12, "kgf"], "Tkph" => [12, "kph"], "Tlb" => [12, "lb"], "Tlm" => [12, "lm"], "Tlx" => [12, "lx"], "Tly" => [12, "ly"], "Tm" => [12, "m"], "Tmb" => [12, "mb"], "Tmercury" => [12, "mercury"], "Tmgal" => [12, "mgal"], "Tmin" => [12, "min"], "Tmol" => [12, "mol"], "Tmon" => [12, "mon"], "Tmph" => [12, "mph"], "Tohm" => [12, "ohm"], "Toz" => [12, "oz"], "Tpc" => [12, "pc"], "Tpsi" => [12, "psi"], "Trad" => [12, "rad"], "Ts" => [12, "s"], "Tsr" => [12, "sr"], "Tt" => [12, "t"], "Tyr" => [12, "yr"], "aA" => [-18, "A"], "aAu" => [-18, "Au"], "aBq" => [-18, "Bq"], "aC" => [-18, "C"], "aF" => [-18, "F"], "aG" => [-18, "G"], "aGal" => [-18, "Gal"], "aGy" => [-18, "Gy"], "aH" => [-18, "H"], "aHg" => [-18, "Hg"], "aHz" => [-18, "Hz"], "aJ" => [-18, "J"], "aK" => [-18, "K"], "aL" => [-18, "L"], "aN" => [-18, "N"], "aP" => [-18, "P"], "aPa" => [-18, "Pa"], "aS" => [-18, "S"], "aSt" => [-18, "St"], "aSv" => [-18, "Sv"], "aT" => [-18, "T"], "aV" => [-18, "V"], "aW" => [-18, "W"], "aWb" => [-18, "Wb"], "aa" => [-18, "a"], "aac" => [-18, "ac"], "aatm" => [-18, "atm"], "abar" => [-18, "bar"], "acal" => [-18, "cal"], "acd" => [-18, "cd"], "aconventional_mercury" => [-18, "conventional_mercury"], "acres" => [0, "acre"], "adegC" => [-18, "degC"], "adegF" => [-18, "degF"], "adeg_C" => [-18, "deg_C"], "adeg_F" => [-18, "deg_F"], "adegreeC" => [-18, "degreeC"], "adegreeF" => [-18, "degreeF"], "adegree_C" => [-18, "degree_C"], "adegree_E" => [-18, "degree_E"], "adegree_F" => [-18, "degree_F"], "adegree_N" => [-18, "degree_N"], "adegree_R" => [-18, "degree_R"], "adegree_S" => [-18, "degree_S"], "adegree_W" => [-18, "degree_W"], "adegree_c" => [-18, "degree_c"], "adegree_east" => [-18, "degree_east"], "adegree_f" => [-18, "degree_f"], "adegree_north" => [-18, "degree_north"], "adegree_south" => [-18, "degree_south"], "adegree_west" => [-18, "degree_west"], "adegrees_east" => [-18, "degrees_east"], "adegrees_north" => [-18, "degrees_north"], "adegrees_south" => [-18, "degrees_south"], "adegrees_west" => [-18, "degrees_west"], "adyn" => [-18, "dyn"], "aerg" => [-18, "erg"], "aforce" => [-18, "force"], "ag" => [-18, "g"], "agravity" => [-18, "gravity"], "ah" => [-18, "h"], "ahg" => [-18, "hg"], "ahr" => [-18, "hr"], "ain" => [-18, "in"], "akgf" => [-18, "kgf"], "akph" => [-18, "kph"], "alb" => [-18, "lb"], "alm" => [-18, "lm"], "alx" => [-18, "lx"], "aly" => [-18, "ly"], "am" => [-18, "m"], "amb" => [-18, "mb"], "amercury" => [-18, "mercury"], "amgal" => [-18, "mgal"], "amin" => [-18, "min"], "amol" => [-18, "mol"], "amon" => [-18, "mon"], "amperes" => [0, "ampere"], "amph" => [-18, "mph"], "angstroms" => [0, "angstrom"], "angulars_degree" => [0, "angular_degree"], "angulars_minute" => [0, "angular_minute"], "angulars_second" => [0, "angular_second"], "aohm" => [-18, "ohm"], "aoz" => [-18, "oz"], "apc" => [-18, "pc"], "apsi" => [-18, "psi"], "arad" => [-18, "rad"], "ares" => [0, "are"], "as" => [-18, "s"], "asr" => [-18, "sr"], "at" => [-18, "t"], "atmospheres" => [0, "atmosphere"], "attoCelsius" => [-18, "Celsius"], "attoFahrenheit" => [-18, "Fahrenheit"], "attoJulian_year" => [-18, "Julian_year"], "attoPascal" => [-18, "Pascal"], "attoacre" => [-18, "acre"], "attoampere" => [-18, "ampere"], "attoangstrom" => [-18, "angstrom"], "attoangular_degree" => [-18, "angular_degree"], "attoangular_minute" => [-18, "angular_minute"], "attoangular_second" => [-18, "angular_second"], "attoare" => [-18, "are"], "attoatmosphere" => [-18, "atmosphere"], "attocalorie" => [-18, "calorie"], "attocandela" => [-18, "candela"], "attocelsius" => [-18, "celsius"], "attocentigrade" => [-18, "centigrade"], "attocentury" => [-18, "century"], "attochain" => [-18, "chain"], "attocommon_year" => [-18, "common_year"], "attocoulomb" => [-18, "coulomb"], "attoday" => [-18, "day"], "attodegK" => [-18, "degK"], "attodeg_K" => [-18, "deg_K"], "attodegree" => [-18, "degree"], "attodegreeK" => [-18, "degreeK"], "attodyne" => [-18, "dyne"], "attoerg" => [-18, "erg"], "attofahrenheit" => [-18, "fahrenheit"], "attofarad" => [-18, "farad"], "attofermi" => [-18, "fermi"], "attogal" => [-18, "gal"], "attogauss" => [-18, "gauss"], "attogram" => [-18, "gram"], "attohectare" => [-18, "hectare"], "attohertz" => [-18, "hertz"], "attohour" => [-18, "hour"], "attoinch" => [-18, "inch"], "attojoule" => [-18, "joule"], "attokelvin" => [-18, "kelvin"], "attokilogram" => [-18, "kilogram"], "attoknot" => [-18, "knot"], "attolitre" => [-18, "litre"], "attometer" => [-18, "meter"], "attometre" => [-18, "metre"], "attomicron" => [-18, "micron"], "attomile" => [-18, "mile"], "attomillibar" => [-18, "millibar"], "attominute" => [-18, "minute"], "attominute_angle" => [-18, "minute_angle"], "attomole" => [-18, "mole"], "attomonth" => [-18, "month"], "attonewton" => [-18, "newton"], "attoounce" => [-18, "ounce"], "attoparsec" => [-18, "parsec"], "attopascal" => [-18, "pascal"], "attopentad" => [-18, "pentad"], "attopercent" => [-18, "percent"], "attopoise" => [-18, "poise"], "attopound" => [-18, "pound"], "attoradian" => [-18, "radian"], "attosecond" => [-18, "second"], "attosecond_angle" => [-18, "second_angle"], "attosteradian" => [-18, "steradian"], "attostokes" => [-18, "stokes"], "attotesla" => [-18, "tesla"], "attoton" => [-18, "ton"], "attotonne" => [-18, "tonne"], "attotorr" => [-18, "torr"], "attovolt" => [-18, "volt"], "attowatt" => [-18, "watt"], "attoweber" => [-18, "weber"], "attoyard" => [-18, "yard"], "attoyd" => [-18, "yd"], "attoyear" => [-18, "year"], "ayr" => [-18, "yr"], "cA" => [-2, "A"], "cAu" => [-2, "Au"], "cBq" => [-2, "Bq"], "cC" => [-2, "C"], "cF" => [-2, "F"], "cG" => [-2, "G"], "cGal" => [-2, "Gal"], "cGy" => [-2, "Gy"], "cH" => [-2, "H"], "cHg" => [-2, "Hg"], "cHz" => [-2, "Hz"], "cJ" => [-2, "J"], "cK" => [-2, "K"], "cL" => [-2, "L"], "cN" => [-2, "N"], "cP" => [-2, "P"], "cPa" => [-2, "Pa"], "cS" => [-2, "S"], "cSt" => [-2, "St"], "cSv" => [-2, "Sv"], "cT" => [-2, "T"], "cV" => [-2, "V"], "cW" => [-2, "W"], "cWb" => [-2, "Wb"], "ca" => [-2, "a"], "cac" => [-2, "ac"], "calories" => [0, "calorie"], "candelas" => [0, "candela"], "catm" => [-2, "atm"], "cbar" => [-2, "bar"], "ccal" => [-2, "cal"], "ccd" => [-2, "cd"], "cconventional_mercury" => [-2, "conventional_mercury"], "cdegC" => [-2, "degC"], "cdegF" => [-2, "degF"], "cdeg_C" => [-2, "deg_C"], "cdeg_F" => [-2, "deg_F"], "cdegreeC" => [-2, "degreeC"], "cdegreeF" => [-2, "degreeF"], "cdegree_C" => [-2, "degree_C"], "cdegree_E" => [-2, "degree_E"], "cdegree_F" => [-2, "degree_F"], "cdegree_N" => [-2, "degree_N"], "cdegree_R" => [-2, "degree_R"], "cdegree_S" => [-2, "degree_S"], "cdegree_W" => [-2, "degree_W"], "cdegree_c" => [-2, "degree_c"], "cdegree_east" => [-2, "degree_east"], "cdegree_f" => [-2, "degree_f"], "cdegree_north" => [-2, "degree_north"], "cdegree_south" => [-2, "degree_south"], "cdegree_west" => [-2, "degree_west"], "cdegrees_east" => [-2, "degrees_east"], "cdegrees_north" => [-2, "degrees_north"], "cdegrees_south" => [-2, "degrees_south"], "cdegrees_west" => [-2, "degrees_west"], "cdyn" => [-2, "dyn"], "celsiuses" => [0, "celsius"], "centiCelsius" => [-2, "Celsius"], "centiFahrenheit" => [-2, "Fahrenheit"], "centiJulian_year" => [-2, "Julian_year"], "centiPascal" => [-2, "Pascal"], "centiacre" => [-2, "acre"], "centiampere" => [-2, "ampere"], "centiangstrom" => [-2, "angstrom"], "centiangular_degree" => [-2, "angular_degree"], "centiangular_minute" => [-2, "angular_minute"], "centiangular_second" => [-2, "angular_second"], "centiare" => [-2, "are"], "centiatmosphere" => [-2, "atmosphere"], "centicalorie" => [-2, "calorie"], "centicandela" => [-2, "candela"], "centicelsius" => [-2, "celsius"], "centicentigrade" => [-2, "centigrade"], "centicentury" => [-2, "century"], "centichain" => [-2, "chain"], "centicommon_year" => [-2, "common_year"], "centicoulomb" => [-2, "coulomb"], "centiday" => [-2, "day"], "centidegK" => [-2, "degK"], "centideg_K" => [-2, "deg_K"], "centidegree" => [-2, "degree"], "centidegreeK" => [-2, "degreeK"], "centidyne" => [-2, "dyne"], "centierg" => [-2, "erg"], "centifahrenheit" => [-2, "fahrenheit"], "centifarad" => [-2, "farad"], "centifermi" => [-2, "fermi"], "centigal" => [-2, "gal"], "centigauss" => [-2, "gauss"], "centigrades" => [0, "centigrade"], "centigram" => [-2, "gram"], "centihectare" => [-2, "hectare"], "centihertz" => [-2, "hertz"], "centihour" => [-2, "hour"], "centiinch" => [-2, "inch"], "centijoule" => [-2, "joule"], "centikelvin" => [-2, "kelvin"], "centikilogram" => [-2, "kilogram"], "centiknot" => [-2, "knot"], "centilitre" => [-2, "litre"], "centimeter" => [-2, "meter"], "centimetre" => [-2, "metre"], "centimicron" => [-2, "micron"], "centimile" => [-2, "mile"], "centimillibar" => [-2, "millibar"], "centiminute" => [-2, "minute"], "centiminute_angle" => [-2, "minute_angle"], "centimole" => [-2, "mole"], "centimonth" => [-2, "month"], "centinewton" => [-2, "newton"], "centiounce" => [-2, "ounce"], "centiparsec" => [-2, "parsec"], "centipascal" => [-2, "pascal"], "centipentad" => [-2, "pentad"], "centipercent" => [-2, "percent"], "centipoise" => [-2, "poise"], "centipound" => [-2, "pound"], "centiradian" => [-2, "radian"], "centisecond" => [-2, "second"], "centisecond_angle" => [-2, "second_angle"], "centisteradian" => [-2, "steradian"], "centistokes" => [-2, "stokes"], "centitesla" => [-2, "tesla"], "centiton" => [-2, "ton"], "centitonne" => [-2, "tonne"], "centitorr" => [-2, "torr"], "centivolt" => [-2, "volt"], "centiwatt" => [-2, "watt"], "centiweber" => [-2, "weber"], "centiyard" => [-2, "yard"], "centiyd" => [-2, "yd"], "centiyear" => [-2, "year"], "centuries" => [0, "century"], "cerg" => [-2, "erg"], "cforce" => [-2, "force"], "cg" => [-2, "g"], "cgravity" => [-2, "gravity"], "ch" => [-2, "h"], "chains" => [0, "chain"], "chg" => [-2, "hg"], "chr" => [-2, "hr"], "cin" => [-2, "in"], "ckgf" => [-2, "kgf"], "ckph" => [-2, "kph"], "clb" => [-2, "lb"], "clm" => [-2, "lm"], "clx" => [-2, "lx"], "cly" => [-2, "ly"], "cm" => [-2, "m"], "cmb" => [-2, "mb"], "cmercury" => [-2, "mercury"], "cmgal" => [-2, "mgal"], "cmin" => [-2, "min"], "cmol" => [-2, "mol"], "cmon" => [-2, "mon"], "cmph" => [-2, "mph"], "cohm" => [-2, "ohm"], "commons_year" => [0, "common_year"], "coulombs" => [0, "coulomb"], "coz" => [-2, "oz"], "cpc" => [-2, "pc"], "cpsi" => [-2, "psi"], "crad" => [-2, "rad"], "cs" => [-2, "s"], "csr" => [-2, "sr"], "ct" => [-2, "t"], "cyr" => [-2, "yr"], "dA" => [-1, "A"], "dAu" => [-1, "Au"], "dBq" => [-1, "Bq"], "dC" => [-1, "C"], "dF" => [-1, "F"], "dG" => [-1, "G"], "dGal" => [-1, "Gal"], "dGy" => [-1, "Gy"], "dH" => [-1, "H"], "dHg" => [-1, "Hg"], "dHz" => [-1, "Hz"], "dJ" => [-1, "J"], "dK" => [-1, "K"], "dL" => [-1, "L"], "dN" => [-1, "N"], "dP" => [-1, "P"], "dPa" => [-1, "Pa"], "dS" => [-1, "S"], "dSt" => [-1, "St"], "dSv" => [-1, "Sv"], "dT" => [-1, "T"], "dV" => [-1, "V"], "dW" => [-1, "W"], "dWb" => [-1, "Wb"], "da" => [-1, "a"], "daA" => [1, "A"], "daAu" => [1, "Au"], "daBq" => [1, "Bq"], "daC" => [1, "C"], "daF" => [1, "F"], "daG" => [1, "G"], "daGal" => [1, "Gal"], "daGy" => [1, "Gy"], "daH" => [1, "H"], "daHg" => [1, "Hg"], "daHz" => [1, "Hz"], "daJ" => [1, "J"], "daK" => [1, "K"], "daL" => [1, "L"], "daN" => [1, "N"], "daP" => [1, "P"], "daPa" => [1, "Pa"], "daS" => [1, "S"], "daSt" => [1, "St"], "daSv" => [1, "Sv"], "daT" => [1, "T"], "daV" => [1, "V"], "daW" => [1, "W"], "daWb" => [1, "Wb"], "daa" => [1, "a"], "daac" => [1, "ac"], "daatm" => [1, "atm"], "dabar" => [1, "bar"], "dac" => [-1, "ac"], "dacal" => [1, "cal"], "dacd" => [1, "cd"], "daconventional_mercury" => [1, "conventional_mercury"], "dadegC" => [1, "degC"], "dadegF" => [1, "degF"], "dadeg_C" => [1, "deg_C"], "dadeg_F" => [1, "deg_F"], "dadegreeC" => [1, "degreeC"], "dadegreeF" => [1, "degreeF"], "dadegree_C" => [1, "degree_C"], "dadegree_E" => [1, "degree_E"], "dadegree_F" => [1, "degree_F"], "dadegree_N" => [1, "degree_N"], "dadegree_R" => [1, "degree_R"], "dadegree_S" => [1, "degree_S"], "dadegree_W" => [1, "degree_W"], "dadegree_c" => [1, "degree_c"], "dadegree_east" => [1, "degree_east"], "dadegree_f" => [1, "degree_f"], "dadegree_north" => [1, "degree_north"], "dadegree_south" => [1, "degree_south"], "dadegree_west" => [1, "degree_west"], "dadegrees_east" => [1, "degrees_east"], "dadegrees_north" => [1, "degrees_north"], "dadegrees_south" => [1, "degrees_south"], "dadegrees_west" => [1, "degrees_west"], "dadyn" => [1, "dyn"], "daerg" => [1, "erg"], "daforce" => [1, "force"], "dag" => [1, "g"], "dagravity" => [1, "gravity"], "dah" => [1, "h"], "dahg" => [1, "hg"], "dahr" => [1, "hr"], "dain" => [1, "in"], "dakgf" => [1, "kgf"], "dakph" => [1, "kph"], "dalb" => [1, "lb"], "dalm" => [1, "lm"], "dalx" => [1, "lx"], "daly" => [1, "ly"], "dam" => [1, "m"], "damb" => [1, "mb"], "damercury" => [1, "mercury"], "damgal" => [1, "mgal"], "damin" => [1, "min"], "damol" => [1, "mol"], "damon" => [1, "mon"], "damph" => [1, "mph"], "daohm" => [1, "ohm"], "daoz" => [1, "oz"], "dapc" => [1, "pc"], "dapsi" => [1, "psi"], "darad" => [1, "rad"], "das" => [1, "s"], "dasr" => [1, "sr"], "dat" => [1, "t"], "datm" => [-1, "atm"], "dayr" => [1, "yr"], "days" => [0, "day"], "dbar" => [-1, "bar"], "dcal" => [-1, "cal"], "dcd" => [-1, "cd"], "dconventional_mercury" => [-1, "conventional_mercury"], "ddegC" => [-1, "degC"], "ddegF" => [-1, "degF"], "ddeg_C" => [-1, "deg_C"], "ddeg_F" => [-1, "deg_F"], "ddegreeC" => [-1, "degreeC"], "ddegreeF" => [-1, "degreeF"], "ddegree_C" => [-1, "degree_C"], "ddegree_E" => [-1, "degree_E"], "ddegree_F" => [-1, "degree_F"], "ddegree_N" => [-1, "degree_N"], "ddegree_R" => [-1, "degree_R"], "ddegree_S" => [-1, "degree_S"], "ddegree_W" => [-1, "degree_W"], "ddegree_c" => [-1, "degree_c"], "ddegree_east" => [-1, "degree_east"], "ddegree_f" => [-1, "degree_f"], "ddegree_north" => [-1, "degree_north"], "ddegree_south" => [-1, "degree_south"], "ddegree_west" => [-1, "degree_west"], "ddegrees_east" => [-1, "degrees_east"], "ddegrees_north" => [-1, "degrees_north"], "ddegrees_south" => [-1, "degrees_south"], "ddegrees_west" => [-1, "degrees_west"], "ddyn" => [-1, "dyn"], "decaCelsius" => [1, "Celsius"], "decaFahrenheit" => [1, "Fahrenheit"], "decaJulian_year" => [1, "Julian_year"], "decaPascal" => [1, "Pascal"], "decaacre" => [1, "acre"], "decaampere" => [1, "ampere"], "decaangstrom" => [1, "angstrom"], "decaangular_degree" => [1, "angular_degree"], "decaangular_minute" => [1, "angular_minute"], "decaangular_second" => [1, "angular_second"], "decaare" => [1, "are"], "decaatmosphere" => [1, "atmosphere"], "decacalorie" => [1, "calorie"], "decacandela" => [1, "candela"], "decacelsius" => [1, "celsius"], "decacentigrade" => [1, "centigrade"], "decacentury" => [1, "century"], "decachain" => [1, "chain"], "decacommon_year" => [1, "common_year"], "decacoulomb" => [1, "coulomb"], "decaday" => [1, "day"], "decadegK" => [1, "degK"], "decadeg_K" => [1, "deg_K"], "decadegree" => [1, "degree"], "decadegreeK" => [1, "degreeK"], "decadyne" => [1, "dyne"], "decaerg" => [1, "erg"], "decafahrenheit" => [1, "fahrenheit"], "decafarad" => [1, "farad"], "decafermi" => [1, "fermi"], "decagal" => [1, "gal"], "decagauss" => [1, "gauss"], "decagram" => [1, "gram"], "decahectare" => [1, "hectare"], "decahertz" => [1, "hertz"], "decahour" => [1, "hour"], "decainch" => [1, "inch"], "decajoule" => [1, "joule"], "decakelvin" => [1, "kelvin"], "decakilogram" => [1, "kilogram"], "decaknot" => [1, "knot"], "decalitre" => [1, "litre"], "decameter" => [1, "meter"], "decametre" => [1, "metre"], "decamicron" => [1, "micron"], "decamile" => [1, "mile"], "decamillibar" => [1, "millibar"], "decaminute" => [1, "minute"], "decaminute_angle" => [1, "minute_angle"], "decamole" => [1, "mole"], "decamonth" => [1, "month"], "decanewton" => [1, "newton"], "decaounce" => [1, "ounce"], "decaparsec" => [1, "parsec"], "decapascal" => [1, "pascal"], "decapentad" => [1, "pentad"], "decapercent" => [1, "percent"], "decapoise" => [1, "poise"], "decapound" => [1, "pound"], "decaradian" => [1, "radian"], "decasecond" => [1, "second"], "decasecond_angle" => [1, "second_angle"], "decasteradian" => [1, "steradian"], "decastokes" => [1, "stokes"], "decatesla" => [1, "tesla"], "decaton" => [1, "ton"], "decatonne" => [1, "tonne"], "decatorr" => [1, "torr"], "decavolt" => [1, "volt"], "decawatt" => [1, "watt"], "decaweber" => [1, "weber"], "decayard" => [1, "yard"], "decayd" => [1, "yd"], "decayear" => [1, "year"], "deciCelsius" => [-1, "Celsius"], "deciFahrenheit" => [-1, "Fahrenheit"], "deciJulian_year" => [-1, "Julian_year"], "deciPascal" => [-1, "Pascal"], "deciacre" => [-1, "acre"], "deciampere" => [-1, "ampere"], "deciangstrom" => [-1, "angstrom"], "deciangular_degree" => [-1, "angular_degree"], "deciangular_minute" => [-1, "angular_minute"], "deciangular_second" => [-1, "angular_second"], "deciare" => [-1, "are"], "deciatmosphere" => [-1, "atmosphere"], "decicalorie" => [-1, "calorie"], "decicandela" => [-1, "candela"], "decicelsius" => [-1, "celsius"], "decicentigrade" => [-1, "centigrade"], "decicentury" => [-1, "century"], "decichain" => [-1, "chain"], "decicommon_year" => [-1, "common_year"], "decicoulomb" => [-1, "coulomb"], "deciday" => [-1, "day"], "decidegK" => [-1, "degK"], "decideg_K" => [-1, "deg_K"], "decidegree" => [-1, "degree"], "decidegreeK" => [-1, "degreeK"], "decidyne" => [-1, "dyne"], "decierg" => [-1, "erg"], "decifahrenheit" => [-1, "fahrenheit"], "decifarad" => [-1, "farad"], "decifermi" => [-1, "fermi"], "decigal" => [-1, "gal"], "decigauss" => [-1, "gauss"], "decigram" => [-1, "gram"], "decihectare" => [-1, "hectare"], "decihertz" => [-1, "hertz"], "decihour" => [-1, "hour"], "deciinch" => [-1, "inch"], "decijoule" => [-1, "joule"], "decikelvin" => [-1, "kelvin"], "decikilogram" => [-1, "kilogram"], "deciknot" => [-1, "knot"], "decilitre" => [-1, "litre"], "decimeter" => [-1, "meter"], "decimetre" => [-1, "metre"], "decimicron" => [-1, "micron"], "decimile" => [-1, "mile"], "decimillibar" => [-1, "millibar"], "deciminute" => [-1, "minute"], "deciminute_angle" => [-1, "minute_angle"], "decimole" => [-1, "mole"], "decimonth" => [-1, "month"], "decinewton" => [-1, "newton"], "deciounce" => [-1, "ounce"], "deciparsec" => [-1, "parsec"], "decipascal" => [-1, "pascal"], "decipentad" => [-1, "pentad"], "decipercent" => [-1, "percent"], "decipoise" => [-1, "poise"], "decipound" => [-1, "pound"], "deciradian" => [-1, "radian"], "decisecond" => [-1, "second"], "decisecond_angle" => [-1, "second_angle"], "decisteradian" => [-1, "steradian"], "decistokes" => [-1, "stokes"], "decitesla" => [-1, "tesla"], "deciton" => [-1, "ton"], "decitonne" => [-1, "tonne"], "decitorr" => [-1, "torr"], "decivolt" => [-1, "volt"], "deciwatt" => [-1, "watt"], "deciweber" => [-1, "weber"], "deciyard" => [-1, "yard"], "deciyd" => [-1, "yd"], "deciyear" => [-1, "year"], "degKs" => [0, "degK"], "degreeKs" => [0, "degreeK"], "degrees" => [0, "degree"], "degs_K" => [0, "deg_K"], "derg" => [-1, "erg"], "dforce" => [-1, "force"], "dg" => [-1, "g"], "dgravity" => [-1, "gravity"], "dh" => [-1, "h"], "dhg" => [-1, "hg"], "dhr" => [-1, "hr"], "din" => [-1, "in"], "dkgf" => [-1, "kgf"], "dkph" => [-1, "kph"], "dlb" => [-1, "lb"], "dlm" => [-1, "lm"], "dlx" => [-1, "lx"], "dly" => [-1, "ly"], "dm" => [-1, "m"], "dmb" => [-1, "mb"], "dmercury" => [-1, "mercury"], "dmgal" => [-1, "mgal"], "dmin" => [-1, "min"], "dmol" => [-1, "mol"], "dmon" => [-1, "mon"], "dmph" => [-1, "mph"], "dohm" => [-1, "ohm"], "doz" => [-1, "oz"], "dpc" => [-1, "pc"], "dpsi" => [-1, "psi"], "drad" => [-1, "rad"], "ds" => [-1, "s"], "dsr" => [-1, "sr"], "dt" => [-1, "t"], "dynes" => [0, "dyne"], "dyr" => [-1, "yr"], "ergs" => [0, "erg"], "exaCelsius" => [18, "Celsius"], "exaFahrenheit" => [18, "Fahrenheit"], "exaJulian_year" => [18, "Julian_year"], "exaPascal" => [18, "Pascal"], "exaacre" => [18, "acre"], "exaampere" => [18, "ampere"], "exaangstrom" => [18, "angstrom"], "exaangular_degree" => [18, "angular_degree"], "exaangular_minute" => [18, "angular_minute"], "exaangular_second" => [18, "angular_second"], "exaare" => [18, "are"], "exaatmosphere" => [18, "atmosphere"], "exacalorie" => [18, "calorie"], "exacandela" => [18, "candela"], "exacelsius" => [18, "celsius"], "exacentigrade" => [18, "centigrade"], "exacentury" => [18, "century"], "exachain" => [18, "chain"], "exacommon_year" => [18, "common_year"], "exacoulomb" => [18, "coulomb"], "exaday" => [18, "day"], "exadegK" => [18, "degK"], "exadeg_K" => [18, "deg_K"], "exadegree" => [18, "degree"], "exadegreeK" => [18, "degreeK"], "exadyne" => [18, "dyne"], "exaerg" => [18, "erg"], "exafahrenheit" => [18, "fahrenheit"], "exafarad" => [18, "farad"], "exafermi" => [18, "fermi"], "exagal" => [18, "gal"], "exagauss" => [18, "gauss"], "exagram" => [18, "gram"], "exahectare" => [18, "hectare"], "exahertz" => [18, "hertz"], "exahour" => [18, "hour"], "exainch" => [18, "inch"], "exajoule" => [18, "joule"], "exakelvin" => [18, "kelvin"], "exakilogram" => [18, "kilogram"], "exaknot" => [18, "knot"], "exalitre" => [18, "litre"], "exameter" => [18, "meter"], "exametre" => [18, "metre"], "examicron" => [18, "micron"], "examile" => [18, "mile"], "examillibar" => [18, "millibar"], "examinute" => [18, "minute"], "examinute_angle" => [18, "minute_angle"], "examole" => [18, "mole"], "examonth" => [18, "month"], "exanewton" => [18, "newton"], "exaounce" => [18, "ounce"], "exaparsec" => [18, "parsec"], "exapascal" => [18, "pascal"], "exapentad" => [18, "pentad"], "exapercent" => [18, "percent"], "exapoise" => [18, "poise"], "exapound" => [18, "pound"], "exaradian" => [18, "radian"], "exasecond" => [18, "second"], "exasecond_angle" => [18, "second_angle"], "exasteradian" => [18, "steradian"], "exastokes" => [18, "stokes"], "exatesla" => [18, "tesla"], "exaton" => [18, "ton"], "exatonne" => [18, "tonne"], "exatorr" => [18, "torr"], "exavolt" => [18, "volt"], "exawatt" => [18, "watt"], "exaweber" => [18, "weber"], "exayard" => [18, "yard"], "exayd" => [18, "yd"], "exayear" => [18, "year"], "fA" => [-15, "A"], "fAu" => [-15, "Au"], "fBq" => [-15, "Bq"], "fC" => [-15, "C"], "fF" => [-15, "F"], "fG" => [-15, "G"], "fGal" => [-15, "Gal"], "fGy" => [-15, "Gy"], "fH" => [-15, "H"], "fHg" => [-15, "Hg"], "fHz" => [-15, "Hz"], "fJ" => [-15, "J"], "fK" => [-15, "K"], "fL" => [-15, "L"], "fN" => [-15, "N"], "fP" => [-15, "P"], "fPa" => [-15, "Pa"], "fS" => [-15, "S"], "fSt" => [-15, "St"], "fSv" => [-15, "Sv"], "fT" => [-15, "T"], "fV" => [-15, "V"], "fW" => [-15, "W"], "fWb" => [-15, "Wb"], "fa" => [-15, "a"], "fac" => [-15, "ac"], "fahrenheits" => [0, "fahrenheit"], "farads" => [0, "farad"], "fatm" => [-15, "atm"], "fbar" => [-15, "bar"], "fcal" => [-15, "cal"], "fcd" => [-15, "cd"], "fconventional_mercury" => [-15, "conventional_mercury"], "fdegC" => [-15, "degC"], "fdegF" => [-15, "degF"], "fdeg_C" => [-15, "deg_C"], "fdeg_F" => [-15, "deg_F"], "fdegreeC" => [-15, "degreeC"], "fdegreeF" => [-15, "degreeF"], "fdegree_C" => [-15, "degree_C"], "fdegree_E" => [-15, "degree_E"], "fdegree_F" => [-15, "degree_F"], "fdegree_N" => [-15, "degree_N"], "fdegree_R" => [-15, "degree_R"], "fdegree_S" => [-15, "degree_S"], "fdegree_W" => [-15, "degree_W"], "fdegree_c" => [-15, "degree_c"], "fdegree_east" => [-15, "degree_east"], "fdegree_f" => [-15, "degree_f"], "fdegree_north" => [-15, "degree_north"], "fdegree_south" => [-15, "degree_south"], "fdegree_west" => [-15, "degree_west"], "fdegrees_east" => [-15, "degrees_east"], "fdegrees_north" => [-15, "degrees_north"], "fdegrees_south" => [-15, "degrees_south"], "fdegrees_west" => [-15, "degrees_west"], "fdyn" => [-15, "dyn"], "femtoCelsius" => [-15, "Celsius"], "femtoFahrenheit" => [-15, "Fahrenheit"], "femtoJulian_year" => [-15, "Julian_year"], "femtoPascal" => [-15, "Pascal"], "femtoacre" => [-15, "acre"], "femtoampere" => [-15, "ampere"], "femtoangstrom" => [-15, "angstrom"], "femtoangular_degree" => [-15, "angular_degree"], "femtoangular_minute" => [-15, "angular_minute"], "femtoangular_second" => [-15, "angular_second"], "femtoare" => [-15, "are"], "femtoatmosphere" => [-15, "atmosphere"], "femtocalorie" => [-15, "calorie"], "femtocandela" => [-15, "candela"], "femtocelsius" => [-15, "celsius"], "femtocentigrade" => [-15, "centigrade"], "femtocentury" => [-15, "century"], "femtochain" => [-15, "chain"], "femtocommon_year" => [-15, "common_year"], "femtocoulomb" => [-15, "coulomb"], "femtoday" => [-15, "day"], "femtodegK" => [-15, "degK"], "femtodeg_K" => [-15, "deg_K"], "femtodegree" => [-15, "degree"], "femtodegreeK" => [-15, "degreeK"], "femtodyne" => [-15, "dyne"], "femtoerg" => [-15, "erg"], "femtofahrenheit" => [-15, "fahrenheit"], "femtofarad" => [-15, "farad"], "femtofermi" => [-15, "fermi"], "femtogal" => [-15, "gal"], "femtogauss" => [-15, "gauss"], "femtogram" => [-15, "gram"], "femtohectare" => [-15, "hectare"], "femtohertz" => [-15, "hertz"], "femtohour" => [-15, "hour"], "femtoinch" => [-15, "inch"], "femtojoule" => [-15, "joule"], "femtokelvin" => [-15, "kelvin"], "femtokilogram" => [-15, "kilogram"], "femtoknot" => [-15, "knot"], "femtolitre" => [-15, "litre"], "femtometer" => [-15, "meter"], "femtometre" => [-15, "metre"], "femtomicron" => [-15, "micron"], "femtomile" => [-15, "mile"], "femtomillibar" => [-15, "millibar"], "femtominute" => [-15, "minute"], "femtominute_angle" => [-15, "minute_angle"], "femtomole" => [-15, "mole"], "femtomonth" => [-15, "month"], "femtonewton" => [-15, "newton"], "femtoounce" => [-15, "ounce"], "femtoparsec" => [-15, "parsec"], "femtopascal" => [-15, "pascal"], "femtopentad" => [-15, "pentad"], "femtopercent" => [-15, "percent"], "femtopoise" => [-15, "poise"], "femtopound" => [-15, "pound"], "femtoradian" => [-15, "radian"], "femtosecond" => [-15, "second"], "femtosecond_angle" => [-15, "second_angle"], "femtosteradian" => [-15, "steradian"], "femtostokes" => [-15, "stokes"], "femtotesla" => [-15, "tesla"], "femtoton" => [-15, "ton"], "femtotonne" => [-15, "tonne"], "femtotorr" => [-15, "torr"], "femtovolt" => [-15, "volt"], "femtowatt" => [-15, "watt"], "femtoweber" => [-15, "weber"], "femtoyard" => [-15, "yard"], "femtoyd" => [-15, "yd"], "femtoyear" => [-15, "year"], "ferg" => [-15, "erg"], "fermis" => [0, "fermi"], "fforce" => [-15, "force"], "fg" => [-15, "g"], "fgravity" => [-15, "gravity"], "fh" => [-15, "h"], "fhg" => [-15, "hg"], "fhr" => [-15, "hr"], "fin" => [-15, "in"], "fkgf" => [-15, "kgf"], "fkph" => [-15, "kph"], "flb" => [-15, "lb"], "flm" => [-15, "lm"], "flx" => [-15, "lx"], "fly" => [-15, "ly"], "fm" => [-15, "m"], "fmb" => [-15, "mb"], "fmercury" => [-15, "mercury"], "fmgal" => [-15, "mgal"], "fmin" => [-15, "min"], "fmol" => [-15, "mol"], "fmon" => [-15, "mon"], "fmph" => [-15, "mph"], "fohm" => [-15, "ohm"], "foz" => [-15, "oz"], "fpc" => [-15, "pc"], "fpsi" => [-15, "psi"], "frad" => [-15, "rad"], "fs" => [-15, "s"], "fsr" => [-15, "sr"], "ft" => [-15, "t"], "fyr" => [-15, "yr"], "gals" => [0, "gal"], "gausses" => [0, "gauss"], "gigaCelsius" => [9, "Celsius"], "gigaFahrenheit" => [9, "Fahrenheit"], "gigaJulian_year" => [9, "Julian_year"], "gigaPascal" => [9, "Pascal"], "gigaacre" => [9, "acre"], "gigaampere" => [9, "ampere"], "gigaangstrom" => [9, "angstrom"], "gigaangular_degree" => [9, "angular_degree"], "gigaangular_minute" => [9, "angular_minute"], "gigaangular_second" => [9, "angular_second"], "gigaare" => [9, "are"], "gigaatmosphere" => [9, "atmosphere"], "gigacalorie" => [9, "calorie"], "gigacandela" => [9, "candela"], "gigacelsius" => [9, "celsius"], "gigacentigrade" => [9, "centigrade"], "gigacentury" => [9, "century"], "gigachain" => [9, "chain"], "gigacommon_year" => [9, "common_year"], "gigacoulomb" => [9, "coulomb"], "gigaday" => [9, "day"], "gigadegK" => [9, "degK"], "gigadeg_K" => [9, "deg_K"], "gigadegree" => [9, "degree"], "gigadegreeK" => [9, "degreeK"], "gigadyne" => [9, "dyne"], "gigaerg" => [9, "erg"], "gigafahrenheit" => [9, "fahrenheit"], "gigafarad" => [9, "farad"], "gigafermi" => [9, "fermi"], "gigagal" => [9, "gal"], "gigagauss" => [9, "gauss"], "gigagram" => [9, "gram"], "gigahectare" => [9, "hectare"], "gigahertz" => [9, "hertz"], "gigahour" => [9, "hour"], "gigainch" => [9, "inch"], "gigajoule" => [9, "joule"], "gigakelvin" => [9, "kelvin"], "gigakilogram" => [9, "kilogram"], "gigaknot" => [9, "knot"], "gigalitre" => [9, "litre"], "gigameter" => [9, "meter"], "gigametre" => [9, "metre"], "gigamicron" => [9, "micron"], "gigamile" => [9, "mile"], "gigamillibar" => [9, "millibar"], "gigaminute" => [9, "minute"], "gigaminute_angle" => [9, "minute_angle"], "gigamole" => [9, "mole"], "gigamonth" => [9, "month"], "giganewton" => [9, "newton"], "gigaounce" => [9, "ounce"], "gigaparsec" => [9, "parsec"], "gigapascal" => [9, "pascal"], "gigapentad" => [9, "pentad"], "gigapercent" => [9, "percent"], "gigapoise" => [9, "poise"], "gigapound" => [9, "pound"], "gigaradian" => [9, "radian"], "gigasecond" => [9, "second"], "gigasecond_angle" => [9, "second_angle"], "gigasteradian" => [9, "steradian"], "gigastokes" => [9, "stokes"], "gigatesla" => [9, "tesla"], "gigaton" => [9, "ton"], "gigatonne" => [9, "tonne"], "gigatorr" => [9, "torr"], "gigavolt" => [9, "volt"], "gigawatt" => [9, "watt"], "gigaweber" => [9, "weber"], "gigayard" => [9, "yard"], "gigayd" => [9, "yd"], "gigayear" => [9, "year"], "grams" => [0, "gram"], "hA" => [2, "A"], "hAu" => [2, "Au"], "hBq" => [2, "Bq"], "hC" => [2, "C"], "hF" => [2, "F"], "hG" => [2, "G"], "hGal" => [2, "Gal"], "hGy" => [2, "Gy"], "hH" => [2, "H"], "hHg" => [2, "Hg"], "hHz" => [2, "Hz"], "hJ" => [2, "J"], "hK" => [2, "K"], "hL" => [2, "L"], "hN" => [2, "N"], "hP" => [2, "P"], "hPa" => [2, "Pa"], "hS" => [2, "S"], "hSt" => [2, "St"], "hSv" => [2, "Sv"], "hT" => [2, "T"], "hV" => [2, "V"], "hW" => [2, "W"], "hWb" => [2, "Wb"], "ha" => [2, "a"], "hac" => [2, "ac"], "hatm" => [2, "atm"], "hbar" => [2, "bar"], "hcal" => [2, "cal"], "hcd" => [2, "cd"], "hconventional_mercury" => [2, "conventional_mercury"], "hdegC" => [2, "degC"], "hdegF" => [2, "degF"], "hdeg_C" => [2, "deg_C"], "hdeg_F" => [2, "deg_F"], "hdegreeC" => [2, "degreeC"], "hdegreeF" => [2, "degreeF"], "hdegree_C" => [2, "degree_C"], "hdegree_E" => [2, "degree_E"], "hdegree_F" => [2, "degree_F"], "hdegree_N" => [2, "degree_N"], "hdegree_R" => [2, "degree_R"], "hdegree_S" => [2, "degree_S"], "hdegree_W" => [2, "degree_W"], "hdegree_c" => [2, "degree_c"], "hdegree_east" => [2, "degree_east"], "hdegree_f" => [2, "degree_f"], "hdegree_north" => [2, "degree_north"], "hdegree_south" => [2, "degree_south"], "hdegree_west" => [2, "degree_west"], "hdegrees_east" => [2, "degrees_east"], "hdegrees_north" => [2, "degrees_north"], "hdegrees_south" => [2, "degrees_south"], "hdegrees_west" => [2, "degrees_west"], "hdyn" => [2, "dyn"], "hectares" => [0, "hectare"], "hectoCelsius" => [2, "Celsius"], "hectoFahrenheit" => [2, "Fahrenheit"], "hectoJulian_year" => [2, "Julian_year"], "hectoPascal" => [2, "Pascal"], "hectoacre" => [2, "acre"], "hectoampere" => [2, "ampere"], "hectoangstrom" => [2, "angstrom"], "hectoangular_degree" => [2, "angular_degree"], "hectoangular_minute" => [2, "angular_minute"], "hectoangular_second" => [2, "angular_second"], "hectoare" => [2, "are"], "hectoatmosphere" => [2, "atmosphere"], "hectocalorie" => [2, "calorie"], "hectocandela" => [2, "candela"], "hectocelsius" => [2, "celsius"], "hectocentigrade" => [2, "centigrade"], "hectocentury" => [2, "century"], "hectochain" => [2, "chain"], "hectocommon_year" => [2, "common_year"], "hectocoulomb" => [2, "coulomb"], "hectoday" => [2, "day"], "hectodegK" => [2, "degK"], "hectodeg_K" => [2, "deg_K"], "hectodegree" => [2, "degree"], "hectodegreeK" => [2, "degreeK"], "hectodyne" => [2, "dyne"], "hectoerg" => [2, "erg"], "hectofahrenheit" => [2, "fahrenheit"], "hectofarad" => [2, "farad"], "hectofermi" => [2, "fermi"], "hectogal" => [2, "gal"], "hectogauss" => [2, "gauss"], "hectogram" => [2, "gram"], "hectohectare" => [2, "hectare"], "hectohertz" => [2, "hertz"], "hectohour" => [2, "hour"], "hectoinch" => [2, "inch"], "hectojoule" => [2, "joule"], "hectokelvin" => [2, "kelvin"], "hectokilogram" => [2, "kilogram"], "hectoknot" => [2, "knot"], "hectolitre" => [2, "litre"], "hectometer" => [2, "meter"], "hectometre" => [2, "metre"], "hectomicron" => [2, "micron"], "hectomile" => [2, "mile"], "hectomillibar" => [2, "millibar"], "hectominute" => [2, "minute"], "hectominute_angle" => [2, "minute_angle"], "hectomole" => [2, "mole"], "hectomonth" => [2, "month"], "hectonewton" => [2, "newton"], "hectoounce" => [2, "ounce"], "hectoparsec" => [2, "parsec"], "hectopascal" => [2, "pascal"], "hectopentad" => [2, "pentad"], "hectopercent" => [2, "percent"], "hectopoise" => [2, "poise"], "hectopound" => [2, "pound"], "hectoradian" => [2, "radian"], "hectosecond" => [2, "second"], "hectosecond_angle" => [2, "second_angle"], "hectosteradian" => [2, "steradian"], "hectostokes" => [2, "stokes"], "hectotesla" => [2, "tesla"], "hectoton" => [2, "ton"], "hectotonne" => [2, "tonne"], "hectotorr" => [2, "torr"], "hectovolt" => [2, "volt"], "hectowatt" => [2, "watt"], "hectoweber" => [2, "weber"], "hectoyard" => [2, "yard"], "hectoyd" => [2, "yd"], "hectoyear" => [2, "year"], "herg" => [2, "erg"], "hertzes" => [0, "hertz"], "hforce" => [2, "force"], "hg" => [2, "g"], "hgravity" => [2, "gravity"], "hh" => [2, "h"], "hhg" => [2, "hg"], "hhr" => [2, "hr"], "hin" => [2, "in"], "hkgf" => [2, "kgf"], "hkph" => [2, "kph"], "hlb" => [2, "lb"], "hlm" => [2, "lm"], "hlx" => [2, "lx"], "hly" => [2, "ly"], "hm" => [2, "m"], "hmb" => [2, "mb"], "hmercury" => [2, "mercury"], "hmgal" => [2, "mgal"], "hmin" => [2, "min"], "hmol" => [2, "mol"], "hmon" => [2, "mon"], "hmph" => [2, "mph"], "hohm" => [2, "ohm"], "hours" => [0, "hour"], "hoz" => [2, "oz"], "hpc" => [2, "pc"], "hpsi" => [2, "psi"], "hrad" => [2, "rad"], "hs" => [2, "s"], "hsr" => [2, "sr"], "ht" => [2, "t"], "hyr" => [2, "yr"], "inchs" => [0, "inch"], "joules" => [0, "joule"], "kA" => [3, "A"], "kAu" => [3, "Au"], "kBq" => [3, "Bq"], "kC" => [3, "C"], "kF" => [3, "F"], "kG" => [3, "G"], "kGal" => [3, "Gal"], "kGy" => [3, "Gy"], "kH" => [3, "H"], "kHg" => [3, "Hg"], "kHz" => [3, "Hz"], "kJ" => [3, "J"], "kK" => [3, "K"], "kL" => [3, "L"], "kN" => [3, "N"], "kP" => [3, "P"], "kPa" => [3, "Pa"], "kS" => [3, "S"], "kSt" => [3, "St"], "kSv" => [3, "Sv"], "kT" => [3, "T"], "kV" => [3, "V"], "kW" => [3, "W"], "kWb" => [3, "Wb"], "ka" => [3, "a"], "kac" => [3, "ac"], "katm" => [3, "atm"], "kbar" => [3, "bar"], "kcal" => [3, "cal"], "kcd" => [3, "cd"], "kconventional_mercury" => [3, "conventional_mercury"], "kdegC" => [3, "degC"], "kdegF" => [3, "degF"], "kdeg_C" => [3, "deg_C"], "kdeg_F" => [3, "deg_F"], "kdegreeC" => [3, "degreeC"], "kdegreeF" => [3, "degreeF"], "kdegree_C" => [3, "degree_C"], "kdegree_E" => [3, "degree_E"], "kdegree_F" => [3, "degree_F"], "kdegree_N" => [3, "degree_N"], "kdegree_R" => [3, "degree_R"], "kdegree_S" => [3, "degree_S"], "kdegree_W" => [3, "degree_W"], "kdegree_c" => [3, "degree_c"], "kdegree_east" => [3, "degree_east"], "kdegree_f" => [3, "degree_f"], "kdegree_north" => [3, "degree_north"], "kdegree_south" => [3, "degree_south"], "kdegree_west" => [3, "degree_west"], "kdegrees_east" => [3, "degrees_east"], "kdegrees_north" => [3, "degrees_north"], "kdegrees_south" => [3, "degrees_south"], "kdegrees_west" => [3, "degrees_west"], "kdyn" => [3, "dyn"], "kelvins" => [0, "kelvin"], "kerg" => [3, "erg"], "kforce" => [3, "force"], "kgravity" => [3, "gravity"], "kh" => [3, "h"], "khg" => [3, "hg"], "khr" => [3, "hr"], "kiloCelsius" => [3, "Celsius"], "kiloFahrenheit" => [3, "Fahrenheit"], "kiloJulian_year" => [3, "Julian_year"], "kiloPascal" => [3, "Pascal"], "kiloacre" => [3, "acre"], "kiloampere" => [3, "ampere"], "kiloangstrom" => [3, "angstrom"], "kiloangular_degree" => [3, "angular_degree"], "kiloangular_minute" => [3, "angular_minute"], "kiloangular_second" => [3, "angular_second"], "kiloare" => [3, "are"], "kiloatmosphere" => [3, "atmosphere"], "kilocalorie" => [3, "calorie"], "kilocandela" => [3, "candela"], "kilocelsius" => [3, "celsius"], "kilocentigrade" => [3, "centigrade"], "kilocentury" => [3, "century"], "kilochain" => [3, "chain"], "kilocommon_year" => [3, "common_year"], "kilocoulomb" => [3, "coulomb"], "kiloday" => [3, "day"], "kilodegK" => [3, "degK"], "kilodeg_K" => [3, "deg_K"], "kilodegree" => [3, "degree"], "kilodegreeK" => [3, "degreeK"], "kilodyne" => [3, "dyne"], "kiloerg" => [3, "erg"], "kilofahrenheit" => [3, "fahrenheit"], "kilofarad" => [3, "farad"], "kilofermi" => [3, "fermi"], "kilogal" => [3, "gal"], "kilogauss" => [3, "gauss"], "kilogram" => [3, "gram"], "kilograms" => [0, "kilogram"], "kilohectare" => [3, "hectare"], "kilohertz" => [3, "hertz"], "kilohour" => [3, "hour"], "kiloinch" => [3, "inch"], "kilojoule" => [3, "joule"], "kilokelvin" => [3, "kelvin"], "kilokilogram" => [3, "kilogram"], "kiloknot" => [3, "knot"], "kilolitre" => [3, "litre"], "kilometer" => [3, "meter"], "kilometre" => [3, "metre"], "kilomicron" => [3, "micron"], "kilomile" => [3, "mile"], "kilomillibar" => [3, "millibar"], "kilominute" => [3, "minute"], "kilominute_angle" => [3, "minute_angle"], "kilomole" => [3, "mole"], "kilomonth" => [3, "month"], "kilonewton" => [3, "newton"], "kiloounce" => [3, "ounce"], "kiloparsec" => [3, "parsec"], "kilopascal" => [3, "pascal"], "kilopentad" => [3, "pentad"], "kilopercent" => [3, "percent"], "kilopoise" => [3, "poise"], "kilopound" => [3, "pound"], "kiloradian" => [3, "radian"], "kilosecond" => [3, "second"], "kilosecond_angle" => [3, "second_angle"], "kilosteradian" => [3, "steradian"], "kilostokes" => [3, "stokes"], "kilotesla" => [3, "tesla"], "kiloton" => [3, "ton"], "kilotonne" => [3, "tonne"], "kilotorr" => [3, "torr"], "kilovolt" => [3, "volt"], "kilowatt" => [3, "watt"], "kiloweber" => [3, "weber"], "kiloyard" => [3, "yard"], "kiloyd" => [3, "yd"], "kiloyear" => [3, "year"], "kin" => [3, "in"], "kkgf" => [3, "kgf"], "kkph" => [3, "kph"], "klb" => [3, "lb"], "klm" => [3, "lm"], "klx" => [3, "lx"], "kly" => [3, "ly"], "km" => [3, "m"], "kmb" => [3, "mb"], "kmercury" => [3, "mercury"], "kmgal" => [3, "mgal"], "kmin" => [3, "min"], "kmol" => [3, "mol"], "kmon" => [3, "mon"], "kmph" => [3, "mph"], "knots" => [0, "knot"], "kohm" => [3, "ohm"], "koz" => [3, "oz"], "kpc" => [3, "pc"], "kpsi" => [3, "psi"], "krad" => [3, "rad"], "ks" => [3, "s"], "ksr" => [3, "sr"], "kt" => [3, "t"], "kyr" => [3, "yr"], "litres" => [0, "litre"], "mA" => [-3, "A"], "mAu" => [-3, "Au"], "mBq" => [-3, "Bq"], "mC" => [-3, "C"], "mF" => [-3, "F"], "mG" => [-3, "G"], "mGal" => [-3, "Gal"], "mGy" => [-3, "Gy"], "mH" => [-3, "H"], "mHg" => [-3, "Hg"], "mHz" => [-3, "Hz"], "mJ" => [-3, "J"], "mK" => [-3, "K"], "mL" => [-3, "L"], "mN" => [-3, "N"], "mP" => [-3, "P"], "mPa" => [-3, "Pa"], "mS" => [-3, "S"], "mSt" => [-3, "St"], "mSv" => [-3, "Sv"], "mT" => [-3, "T"], "mV" => [-3, "V"], "mW" => [-3, "W"], "mWb" => [-3, "Wb"], "ma" => [-3, "a"], "mac" => [-3, "ac"], "matm" => [-3, "atm"], "mbar" => [-3, "bar"], "mcal" => [-3, "cal"], "mcd" => [-3, "cd"], "mconventional_mercury" => [-3, "conventional_mercury"], "mdegC" => [-3, "degC"], "mdegF" => [-3, "degF"], "mdeg_C" => [-3, "deg_C"], "mdeg_F" => [-3, "deg_F"], "mdegreeC" => [-3, "degreeC"], "mdegreeF" => [-3, "degreeF"], "mdegree_C" => [-3, "degree_C"], "mdegree_E" => [-3, "degree_E"], "mdegree_F" => [-3, "degree_F"], "mdegree_N" => [-3, "degree_N"], "mdegree_R" => [-3, "degree_R"], "mdegree_S" => [-3, "degree_S"], "mdegree_W" => [-3, "degree_W"], "mdegree_c" => [-3, "degree_c"], "mdegree_east" => [-3, "degree_east"], "mdegree_f" => [-3, "degree_f"], "mdegree_north" => [-3, "degree_north"], "mdegree_south" => [-3, "degree_south"], "mdegree_west" => [-3, "degree_west"], "mdegrees_east" => [-3, "degrees_east"], "mdegrees_north" => [-3, "degrees_north"], "mdegrees_south" => [-3, "degrees_south"], "mdegrees_west" => [-3, "degrees_west"], "mdyn" => [-3, "dyn"], "megaCelsius" => [6, "Celsius"], "megaFahrenheit" => [6, "Fahrenheit"], "megaJulian_year" => [6, "Julian_year"], "megaPascal" => [6, "Pascal"], "megaacre" => [6, "acre"], "megaampere" => [6, "ampere"], "megaangstrom" => [6, "angstrom"], "megaangular_degree" => [6, "angular_degree"], "megaangular_minute" => [6, "angular_minute"], "megaangular_second" => [6, "angular_second"], "megaare" => [6, "are"], "megaatmosphere" => [6, "atmosphere"], "megacalorie" => [6, "calorie"], "megacandela" => [6, "candela"], "megacelsius" => [6, "celsius"], "megacentigrade" => [6, "centigrade"], "megacentury" => [6, "century"], "megachain" => [6, "chain"], "megacommon_year" => [6, "common_year"], "megacoulomb" => [6, "coulomb"], "megaday" => [6, "day"], "megadegK" => [6, "degK"], "megadeg_K" => [6, "deg_K"], "megadegree" => [6, "degree"], "megadegreeK" => [6, "degreeK"], "megadyne" => [6, "dyne"], "megaerg" => [6, "erg"], "megafahrenheit" => [6, "fahrenheit"], "megafarad" => [6, "farad"], "megafermi" => [6, "fermi"], "megagal" => [6, "gal"], "megagauss" => [6, "gauss"], "megagram" => [6, "gram"], "megahectare" => [6, "hectare"], "megahertz" => [6, "hertz"], "megahour" => [6, "hour"], "megainch" => [6, "inch"], "megajoule" => [6, "joule"], "megakelvin" => [6, "kelvin"], "megakilogram" => [6, "kilogram"], "megaknot" => [6, "knot"], "megalitre" => [6, "litre"], "megameter" => [6, "meter"], "megametre" => [6, "metre"], "megamicron" => [6, "micron"], "megamile" => [6, "mile"], "megamillibar" => [6, "millibar"], "megaminute" => [6, "minute"], "megaminute_angle" => [6, "minute_angle"], "megamole" => [6, "mole"], "megamonth" => [6, "month"], "meganewton" => [6, "newton"], "megaounce" => [6, "ounce"], "megaparsec" => [6, "parsec"], "megapascal" => [6, "pascal"], "megapentad" => [6, "pentad"], "megapercent" => [6, "percent"], "megapoise" => [6, "poise"], "megapound" => [6, "pound"], "megaradian" => [6, "radian"], "megasecond" => [6, "second"], "megasecond_angle" => [6, "second_angle"], "megasteradian" => [6, "steradian"], "megastokes" => [6, "stokes"], "megatesla" => [6, "tesla"], "megaton" => [6, "ton"], "megatonne" => [6, "tonne"], "megatorr" => [6, "torr"], "megavolt" => [6, "volt"], "megawatt" => [6, "watt"], "megaweber" => [6, "weber"], "megayard" => [6, "yard"], "megayd" => [6, "yd"], "megayear" => [6, "year"], "merg" => [-3, "erg"], "meters" => [0, "meter"], "metres" => [0, "metre"], "mforce" => [-3, "force"], "mg" => [-3, "g"], "mgravity" => [-3, "gravity"], "mh" => [-3, "h"], "mhg" => [-3, "hg"], "mhr" => [-3, "hr"], "microCelsius" => [-6, "Celsius"], "microFahrenheit" => [-6, "Fahrenheit"], "microJulian_year" => [-6, "Julian_year"], "microPascal" => [-6, "Pascal"], "microacre" => [-6, "acre"], "microampere" => [-6, "ampere"], "microangstrom" => [-6, "angstrom"], "microangular_degree" => [-6, "angular_degree"], "microangular_minute" => [-6, "angular_minute"], "microangular_second" => [-6, "angular_second"], "microare" => [-6, "are"], "microatmosphere" => [-6, "atmosphere"], "microcalorie" => [-6, "calorie"], "microcandela" => [-6, "candela"], "microcelsius" => [-6, "celsius"], "microcentigrade" => [-6, "centigrade"], "microcentury" => [-6, "century"], "microchain" => [-6, "chain"], "microcommon_year" => [-6, "common_year"], "microcoulomb" => [-6, "coulomb"], "microday" => [-6, "day"], "microdegK" => [-6, "degK"], "microdeg_K" => [-6, "deg_K"], "microdegree" => [-6, "degree"], "microdegreeK" => [-6, "degreeK"], "microdyne" => [-6, "dyne"], "microerg" => [-6, "erg"], "microfahrenheit" => [-6, "fahrenheit"], "microfarad" => [-6, "farad"], "microfermi" => [-6, "fermi"], "microgal" => [-6, "gal"], "microgauss" => [-6, "gauss"], "microgram" => [-6, "gram"], "microhectare" => [-6, "hectare"], "microhertz" => [-6, "hertz"], "microhour" => [-6, "hour"], "microinch" => [-6, "inch"], "microjoule" => [-6, "joule"], "microkelvin" => [-6, "kelvin"], "microkilogram" => [-6, "kilogram"], "microknot" => [-6, "knot"], "microlitre" => [-6, "litre"], "micrometer" => [-6, "meter"], "micrometre" => [-6, "metre"], "micromicron" => [-6, "micron"], "micromile" => [-6, "mile"], "micromillibar" => [-6, "millibar"], "microminute" => [-6, "minute"], "microminute_angle" => [-6, "minute_angle"], "micromole" => [-6, "mole"], "micromonth" => [-6, "month"], "micronewton" => [-6, "newton"], "microns" => [0, "micron"], "microounce" => [-6, "ounce"], "microparsec" => [-6, "parsec"], "micropascal" => [-6, "pascal"], "micropentad" => [-6, "pentad"], "micropercent" => [-6, "percent"], "micropoise" => [-6, "poise"], "micropound" => [-6, "pound"], "microradian" => [-6, "radian"], "microsecond" => [-6, "second"], "microsecond_angle" => [-6, "second_angle"], "microsteradian" => [-6, "steradian"], "microstokes" => [-6, "stokes"], "microtesla" => [-6, "tesla"], "microton" => [-6, "ton"], "microtonne" => [-6, "tonne"], "microtorr" => [-6, "torr"], "microvolt" => [-6, "volt"], "microwatt" => [-6, "watt"], "microweber" => [-6, "weber"], "microyard" => [-6, "yard"], "microyd" => [-6, "yd"], "microyear" => [-6, "year"], "miles" => [0, "mile"], "milliCelsius" => [-3, "Celsius"], "milliFahrenheit" => [-3, "Fahrenheit"], "milliJulian_year" => [-3, "Julian_year"], "milliPascal" => [-3, "Pascal"], "milliacre" => [-3, "acre"], "milliampere" => [-3, "ampere"], "milliangstrom" => [-3, "angstrom"], "milliangular_degree" => [-3, "angular_degree"], "milliangular_minute" => [-3, "angular_minute"], "milliangular_second" => [-3, "angular_second"], "milliare" => [-3, "are"], "milliatmosphere" => [-3, "atmosphere"], "millibars" => [0, "millibar"], "millicalorie" => [-3, "calorie"], "millicandela" => [-3, "candela"], "millicelsius" => [-3, "celsius"], "millicentigrade" => [-3, "centigrade"], "millicentury" => [-3, "century"], "millichain" => [-3, "chain"], "millicommon_year" => [-3, "common_year"], "millicoulomb" => [-3, "coulomb"], "milliday" => [-3, "day"], "millidegK" => [-3, "degK"], "millideg_K" => [-3, "deg_K"], "millidegree" => [-3, "degree"], "millidegreeK" => [-3, "degreeK"], "millidyne" => [-3, "dyne"], "millierg" => [-3, "erg"], "millifahrenheit" => [-3, "fahrenheit"], "millifarad" => [-3, "farad"], "millifermi" => [-3, "fermi"], "milligal" => [-3, "gal"], "milligauss" => [-3, "gauss"], "milligram" => [-3, "gram"], "millihectare" => [-3, "hectare"], "millihertz" => [-3, "hertz"], "millihour" => [-3, "hour"], "milliinch" => [-3, "inch"], "millijoule" => [-3, "joule"], "millikelvin" => [-3, "kelvin"], "millikilogram" => [-3, "kilogram"], "milliknot" => [-3, "knot"], "millilitre" => [-3, "litre"], "millimeter" => [-3, "meter"], "millimetre" => [-3, "metre"], "millimicron" => [-3, "micron"], "millimile" => [-3, "mile"], "millimillibar" => [-3, "millibar"], "milliminute" => [-3, "minute"], "milliminute_angle" => [-3, "minute_angle"], "millimole" => [-3, "mole"], "millimonth" => [-3, "month"], "millinewton" => [-3, "newton"], "milliounce" => [-3, "ounce"], "milliparsec" => [-3, "parsec"], "millipascal" => [-3, "pascal"], "millipentad" => [-3, "pentad"], "millipercent" => [-3, "percent"], "millipoise" => [-3, "poise"], "millipound" => [-3, "pound"], "milliradian" => [-3, "radian"], "millisecond" => [-3, "second"], "millisecond_angle" => [-3, "second_angle"], "millisteradian" => [-3, "steradian"], "millistokes" => [-3, "stokes"], "millitesla" => [-3, "tesla"], "milliton" => [-3, "ton"], "millitonne" => [-3, "tonne"], "millitorr" => [-3, "torr"], "millivolt" => [-3, "volt"], "milliwatt" => [-3, "watt"], "milliweber" => [-3, "weber"], "milliyard" => [-3, "yard"], "milliyd" => [-3, "yd"], "milliyear" => [-3, "year"], "min" => [-3, "in"], "minutes" => [0, "minute"], "minutes_angle" => [0, "minute_angle"], "mkgf" => [-3, "kgf"], "mkph" => [-3, "kph"], "mlb" => [-3, "lb"], "mlm" => [-3, "lm"], "mlx" => [-3, "lx"], "mly" => [-3, "ly"], "mm" => [-3, "m"], "mmb" => [-3, "mb"], "mmercury" => [-3, "mercury"], "mmgal" => [-3, "mgal"], "mmin" => [-3, "min"], "mmol" => [-3, "mol"], "mmon" => [-3, "mon"], "mmph" => [-3, "mph"], "mohm" => [-3, "ohm"], "moles" => [0, "mole"], "months" => [0, "month"], "moz" => [-3, "oz"], "mpc" => [-3, "pc"], "mpsi" => [-3, "psi"], "mrad" => [-3, "rad"], "ms" => [-3, "s"], "msr" => [-3, "sr"], "mt" => [-3, "t"], "myr" => [-3, "yr"], "nA" => [-9, "A"], "nAu" => [-9, "Au"], "nBq" => [-9, "Bq"], "nC" => [-9, "C"], "nF" => [-9, "F"], "nG" => [-9, "G"], "nGal" => [-9, "Gal"], "nGy" => [-9, "Gy"], "nH" => [-9, "H"], "nHg" => [-9, "Hg"], "nHz" => [-9, "Hz"], "nJ" => [-9, "J"], "nK" => [-9, "K"], "nL" => [-9, "L"], "nN" => [-9, "N"], "nP" => [-9, "P"], "nPa" => [-9, "Pa"], "nS" => [-9, "S"], "nSt" => [-9, "St"], "nSv" => [-9, "Sv"], "nT" => [-9, "T"], "nV" => [-9, "V"], "nW" => [-9, "W"], "nWb" => [-9, "Wb"], "na" => [-9, "a"], "nac" => [-9, "ac"], "nanoCelsius" => [-9, "Celsius"], "nanoFahrenheit" => [-9, "Fahrenheit"], "nanoJulian_year" => [-9, "Julian_year"], "nanoPascal" => [-9, "Pascal"], "nanoacre" => [-9, "acre"], "nanoampere" => [-9, "ampere"], "nanoangstrom" => [-9, "angstrom"], "nanoangular_degree" => [-9, "angular_degree"], "nanoangular_minute" => [-9, "angular_minute"], "nanoangular_second" => [-9, "angular_second"], "nanoare" => [-9, "are"], "nanoatmosphere" => [-9, "atmosphere"], "nanocalorie" => [-9, "calorie"], "nanocandela" => [-9, "candela"], "nanocelsius" => [-9, "celsius"], "nanocentigrade" => [-9, "centigrade"], "nanocentury" => [-9, "century"], "nanochain" => [-9, "chain"], "nanocommon_year" => [-9, "common_year"], "nanocoulomb" => [-9, "coulomb"], "nanoday" => [-9, "day"], "nanodegK" => [-9, "degK"], "nanodeg_K" => [-9, "deg_K"], "nanodegree" => [-9, "degree"], "nanodegreeK" => [-9, "degreeK"], "nanodyne" => [-9, "dyne"], "nanoerg" => [-9, "erg"], "nanofahrenheit" => [-9, "fahrenheit"], "nanofarad" => [-9, "farad"], "nanofermi" => [-9, "fermi"], "nanogal" => [-9, "gal"], "nanogauss" => [-9, "gauss"], "nanogram" => [-9, "gram"], "nanohectare" => [-9, "hectare"], "nanohertz" => [-9, "hertz"], "nanohour" => [-9, "hour"], "nanoinch" => [-9, "inch"], "nanojoule" => [-9, "joule"], "nanokelvin" => [-9, "kelvin"], "nanokilogram" => [-9, "kilogram"], "nanoknot" => [-9, "knot"], "nanolitre" => [-9, "litre"], "nanometer" => [-9, "meter"], "nanometre" => [-9, "metre"], "nanomicron" => [-9, "micron"], "nanomile" => [-9, "mile"], "nanomillibar" => [-9, "millibar"], "nanominute" => [-9, "minute"], "nanominute_angle" => [-9, "minute_angle"], "nanomole" => [-9, "mole"], "nanomonth" => [-9, "month"], "nanonewton" => [-9, "newton"], "nanoounce" => [-9, "ounce"], "nanoparsec" => [-9, "parsec"], "nanopascal" => [-9, "pascal"], "nanopentad" => [-9, "pentad"], "nanopercent" => [-9, "percent"], "nanopoise" => [-9, "poise"], "nanopound" => [-9, "pound"], "nanoradian" => [-9, "radian"], "nanosecond" => [-9, "second"], "nanosecond_angle" => [-9, "second_angle"], "nanosteradian" => [-9, "steradian"], "nanostokes" => [-9, "stokes"], "nanotesla" => [-9, "tesla"], "nanoton" => [-9, "ton"], "nanotonne" => [-9, "tonne"], "nanotorr" => [-9, "torr"], "nanovolt" => [-9, "volt"], "nanowatt" => [-9, "watt"], "nanoweber" => [-9, "weber"], "nanoyard" => [-9, "yard"], "nanoyd" => [-9, "yd"], "nanoyear" => [-9, "year"], "natm" => [-9, "atm"], "nbar" => [-9, "bar"], "ncal" => [-9, "cal"], "ncd" => [-9, "cd"], "nconventional_mercury" => [-9, "conventional_mercury"], "ndegC" => [-9, "degC"], "ndegF" => [-9, "degF"], "ndeg_C" => [-9, "deg_C"], "ndeg_F" => [-9, "deg_F"], "ndegreeC" => [-9, "degreeC"], "ndegreeF" => [-9, "degreeF"], "ndegree_C" => [-9, "degree_C"], "ndegree_E" => [-9, "degree_E"], "ndegree_F" => [-9, "degree_F"], "ndegree_N" => [-9, "degree_N"], "ndegree_R" => [-9, "degree_R"], "ndegree_S" => [-9, "degree_S"], "ndegree_W" => [-9, "degree_W"], "ndegree_c" => [-9, "degree_c"], "ndegree_east" => [-9, "degree_east"], "ndegree_f" => [-9, "degree_f"], "ndegree_north" => [-9, "degree_north"], "ndegree_south" => [-9, "degree_south"], "ndegree_west" => [-9, "degree_west"], "ndegrees_east" => [-9, "degrees_east"], "ndegrees_north" => [-9, "degrees_north"], "ndegrees_south" => [-9, "degrees_south"], "ndegrees_west" => [-9, "degrees_west"], "ndyn" => [-9, "dyn"], "nerg" => [-9, "erg"], "newtons" => [0, "newton"], "nforce" => [-9, "force"], "ng" => [-9, "g"], "ngravity" => [-9, "gravity"], "nh" => [-9, "h"], "nhg" => [-9, "hg"], "nhr" => [-9, "hr"], "nin" => [-9, "in"], "nkgf" => [-9, "kgf"], "nkph" => [-9, "kph"], "nlb" => [-9, "lb"], "nlm" => [-9, "lm"], "nlx" => [-9, "lx"], "nly" => [-9, "ly"], "nm" => [-9, "m"], "nmb" => [-9, "mb"], "nmercury" => [-9, "mercury"], "nmgal" => [-9, "mgal"], "nmin" => [-9, "min"], "nmol" => [-9, "mol"], "nmon" => [-9, "mon"], "nmph" => [-9, "mph"], "nohm" => [-9, "ohm"], "noz" => [-9, "oz"], "npc" => [-9, "pc"], "npsi" => [-9, "psi"], "nrad" => [-9, "rad"], "ns" => [-9, "s"], "nsr" => [-9, "sr"], "nt" => [-9, "t"], "nyr" => [-9, "yr"], "ounces" => [0, "ounce"], "pA" => [-12, "A"], "pAu" => [-12, "Au"], "pBq" => [-12, "Bq"], "pC" => [-12, "C"], "pF" => [-12, "F"], "pG" => [-12, "G"], "pGal" => [-12, "Gal"], "pGy" => [-12, "Gy"], "pH" => [-12, "H"], "pHg" => [-12, "Hg"], "pHz" => [-12, "Hz"], "pJ" => [-12, "J"], "pK" => [-12, "K"], "pL" => [-12, "L"], "pN" => [-12, "N"], "pP" => [-12, "P"], "pPa" => [-12, "Pa"], "pS" => [-12, "S"], "pSt" => [-12, "St"], "pSv" => [-12, "Sv"], "pT" => [-12, "T"], "pV" => [-12, "V"], "pW" => [-12, "W"], "pWb" => [-12, "Wb"], "pa" => [-12, "a"], "pac" => [-12, "ac"], "parsecs" => [0, "parsec"], "pascals" => [0, "pascal"], "patm" => [-12, "atm"], "pbar" => [-12, "bar"], "pcal" => [-12, "cal"], "pcd" => [-12, "cd"], "pconventional_mercury" => [-12, "conventional_mercury"], "pdegC" => [-12, "degC"], "pdegF" => [-12, "degF"], "pdeg_C" => [-12, "deg_C"], "pdeg_F" => [-12, "deg_F"], "pdegreeC" => [-12, "degreeC"], "pdegreeF" => [-12, "degreeF"], "pdegree_C" => [-12, "degree_C"], "pdegree_E" => [-12, "degree_E"], "pdegree_F" => [-12, "degree_F"], "pdegree_N" => [-12, "degree_N"], "pdegree_R" => [-12, "degree_R"], "pdegree_S" => [-12, "degree_S"], "pdegree_W" => [-12, "degree_W"], "pdegree_c" => [-12, "degree_c"], "pdegree_east" => [-12, "degree_east"], "pdegree_f" => [-12, "degree_f"], "pdegree_north" => [-12, "degree_north"], "pdegree_south" => [-12, "degree_south"], "pdegree_west" => [-12, "degree_west"], "pdegrees_east" => [-12, "degrees_east"], "pdegrees_north" => [-12, "degrees_north"], "pdegrees_south" => [-12, "degrees_south"], "pdegrees_west" => [-12, "degrees_west"], "pdyn" => [-12, "dyn"], "pentads" => [0, "pentad"], "percents" => [0, "percent"], "perg" => [-12, "erg"], "petaCelsius" => [15, "Celsius"], "petaFahrenheit" => [15, "Fahrenheit"], "petaJulian_year" => [15, "Julian_year"], "petaPascal" => [15, "Pascal"], "petaacre" => [15, "acre"], "petaampere" => [15, "ampere"], "petaangstrom" => [15, "angstrom"], "petaangular_degree" => [15, "angular_degree"], "petaangular_minute" => [15, "angular_minute"], "petaangular_second" => [15, "angular_second"], "petaare" => [15, "are"], "petaatmosphere" => [15, "atmosphere"], "petacalorie" => [15, "calorie"], "petacandela" => [15, "candela"], "petacelsius" => [15, "celsius"], "petacentigrade" => [15, "centigrade"], "petacentury" => [15, "century"], "petachain" => [15, "chain"], "petacommon_year" => [15, "common_year"], "petacoulomb" => [15, "coulomb"], "petaday" => [15, "day"], "petadegK" => [15, "degK"], "petadeg_K" => [15, "deg_K"], "petadegree" => [15, "degree"], "petadegreeK" => [15, "degreeK"], "petadyne" => [15, "dyne"], "petaerg" => [15, "erg"], "petafahrenheit" => [15, "fahrenheit"], "petafarad" => [15, "farad"], "petafermi" => [15, "fermi"], "petagal" => [15, "gal"], "petagauss" => [15, "gauss"], "petagram" => [15, "gram"], "petahectare" => [15, "hectare"], "petahertz" => [15, "hertz"], "petahour" => [15, "hour"], "petainch" => [15, "inch"], "petajoule" => [15, "joule"], "petakelvin" => [15, "kelvin"], "petakilogram" => [15, "kilogram"], "petaknot" => [15, "knot"], "petalitre" => [15, "litre"], "petameter" => [15, "meter"], "petametre" => [15, "metre"], "petamicron" => [15, "micron"], "petamile" => [15, "mile"], "petamillibar" => [15, "millibar"], "petaminute" => [15, "minute"], "petaminute_angle" => [15, "minute_angle"], "petamole" => [15, "mole"], "petamonth" => [15, "month"], "petanewton" => [15, "newton"], "petaounce" => [15, "ounce"], "petaparsec" => [15, "parsec"], "petapascal" => [15, "pascal"], "petapentad" => [15, "pentad"], "petapercent" => [15, "percent"], "petapoise" => [15, "poise"], "petapound" => [15, "pound"], "petaradian" => [15, "radian"], "petasecond" => [15, "second"], "petasecond_angle" => [15, "second_angle"], "petasteradian" => [15, "steradian"], "petastokes" => [15, "stokes"], "petatesla" => [15, "tesla"], "petaton" => [15, "ton"], "petatonne" => [15, "tonne"], "petatorr" => [15, "torr"], "petavolt" => [15, "volt"], "petawatt" => [15, "watt"], "petaweber" => [15, "weber"], "petayard" => [15, "yard"], "petayd" => [15, "yd"], "petayear" => [15, "year"], "pforce" => [-12, "force"], "pg" => [-12, "g"], "pgravity" => [-12, "gravity"], "ph" => [-12, "h"], "phg" => [-12, "hg"], "phr" => [-12, "hr"], "picoCelsius" => [-12, "Celsius"], "picoFahrenheit" => [-12, "Fahrenheit"], "picoJulian_year" => [-12, "Julian_year"], "picoPascal" => [-12, "Pascal"], "picoacre" => [-12, "acre"], "picoampere" => [-12, "ampere"], "picoangstrom" => [-12, "angstrom"], "picoangular_degree" => [-12, "angular_degree"], "picoangular_minute" => [-12, "angular_minute"], "picoangular_second" => [-12, "angular_second"], "picoare" => [-12, "are"], "picoatmosphere" => [-12, "atmosphere"], "picocalorie" => [-12, "calorie"], "picocandela" => [-12, "candela"], "picocelsius" => [-12, "celsius"], "picocentigrade" => [-12, "centigrade"], "picocentury" => [-12, "century"], "picochain" => [-12, "chain"], "picocommon_year" => [-12, "common_year"], "picocoulomb" => [-12, "coulomb"], "picoday" => [-12, "day"], "picodegK" => [-12, "degK"], "picodeg_K" => [-12, "deg_K"], "picodegree" => [-12, "degree"], "picodegreeK" => [-12, "degreeK"], "picodyne" => [-12, "dyne"], "picoerg" => [-12, "erg"], "picofahrenheit" => [-12, "fahrenheit"], "picofarad" => [-12, "farad"], "picofermi" => [-12, "fermi"], "picogal" => [-12, "gal"], "picogauss" => [-12, "gauss"], "picogram" => [-12, "gram"], "picohectare" => [-12, "hectare"], "picohertz" => [-12, "hertz"], "picohour" => [-12, "hour"], "picoinch" => [-12, "inch"], "picojoule" => [-12, "joule"], "picokelvin" => [-12, "kelvin"], "picokilogram" => [-12, "kilogram"], "picoknot" => [-12, "knot"], "picolitre" => [-12, "litre"], "picometer" => [-12, "meter"], "picometre" => [-12, "metre"], "picomicron" => [-12, "micron"], "picomile" => [-12, "mile"], "picomillibar" => [-12, "millibar"], "picominute" => [-12, "minute"], "picominute_angle" => [-12, "minute_angle"], "picomole" => [-12, "mole"], "picomonth" => [-12, "month"], "piconewton" => [-12, "newton"], "picoounce" => [-12, "ounce"], "picoparsec" => [-12, "parsec"], "picopascal" => [-12, "pascal"], "picopentad" => [-12, "pentad"], "picopercent" => [-12, "percent"], "picopoise" => [-12, "poise"], "picopound" => [-12, "pound"], "picoradian" => [-12, "radian"], "picosecond" => [-12, "second"], "picosecond_angle" => [-12, "second_angle"], "picosteradian" => [-12, "steradian"], "picostokes" => [-12, "stokes"], "picotesla" => [-12, "tesla"], "picoton" => [-12, "ton"], "picotonne" => [-12, "tonne"], "picotorr" => [-12, "torr"], "picovolt" => [-12, "volt"], "picowatt" => [-12, "watt"], "picoweber" => [-12, "weber"], "picoyard" => [-12, "yard"], "picoyd" => [-12, "yd"], "picoyear" => [-12, "year"], "pin" => [-12, "in"], "pkgf" => [-12, "kgf"], "pkph" => [-12, "kph"], "plb" => [-12, "lb"], "plm" => [-12, "lm"], "plx" => [-12, "lx"], "ply" => [-12, "ly"], "pm" => [-12, "m"], "pmb" => [-12, "mb"], "pmercury" => [-12, "mercury"], "pmgal" => [-12, "mgal"], "pmin" => [-12, "min"], "pmol" => [-12, "mol"], "pmon" => [-12, "mon"], "pmph" => [-12, "mph"], "pohm" => [-12, "ohm"], "poises" => [0, "poise"], "pounds" => [0, "pound"], "poz" => [-12, "oz"], "ppc" => [-12, "pc"], "ppsi" => [-12, "psi"], "prad" => [-12, "rad"], "ps" => [-12, "s"], "psr" => [-12, "sr"], "pt" => [-12, "t"], "pyr" => [-12, "yr"], "radians" => [0, "radian"], "seconds" => [0, "second"], "seconds_angle" => [0, "second_angle"], "steradians" => [0, "steradian"], "stokeses" => [0, "stokes"], "telaCelsius" => [12, "Celsius"], "telaFahrenheit" => [12, "Fahrenheit"], "telaJulian_year" => [12, "Julian_year"], "telaPascal" => [12, "Pascal"], "telaacre" => [12, "acre"], "telaampere" => [12, "ampere"], "telaangstrom" => [12, "angstrom"], "telaangular_degree" => [12, "angular_degree"], "telaangular_minute" => [12, "angular_minute"], "telaangular_second" => [12, "angular_second"], "telaare" => [12, "are"], "telaatmosphere" => [12, "atmosphere"], "telacalorie" => [12, "calorie"], "telacandela" => [12, "candela"], "telacelsius" => [12, "celsius"], "telacentigrade" => [12, "centigrade"], "telacentury" => [12, "century"], "telachain" => [12, "chain"], "telacommon_year" => [12, "common_year"], "telacoulomb" => [12, "coulomb"], "teladay" => [12, "day"], "teladegK" => [12, "degK"], "teladeg_K" => [12, "deg_K"], "teladegree" => [12, "degree"], "teladegreeK" => [12, "degreeK"], "teladyne" => [12, "dyne"], "telaerg" => [12, "erg"], "telafahrenheit" => [12, "fahrenheit"], "telafarad" => [12, "farad"], "telafermi" => [12, "fermi"], "telagal" => [12, "gal"], "telagauss" => [12, "gauss"], "telagram" => [12, "gram"], "telahectare" => [12, "hectare"], "telahertz" => [12, "hertz"], "telahour" => [12, "hour"], "telainch" => [12, "inch"], "telajoule" => [12, "joule"], "telakelvin" => [12, "kelvin"], "telakilogram" => [12, "kilogram"], "telaknot" => [12, "knot"], "telalitre" => [12, "litre"], "telameter" => [12, "meter"], "telametre" => [12, "metre"], "telamicron" => [12, "micron"], "telamile" => [12, "mile"], "telamillibar" => [12, "millibar"], "telaminute" => [12, "minute"], "telaminute_angle" => [12, "minute_angle"], "telamole" => [12, "mole"], "telamonth" => [12, "month"], "telanewton" => [12, "newton"], "telaounce" => [12, "ounce"], "telaparsec" => [12, "parsec"], "telapascal" => [12, "pascal"], "telapentad" => [12, "pentad"], "telapercent" => [12, "percent"], "telapoise" => [12, "poise"], "telapound" => [12, "pound"], "telaradian" => [12, "radian"], "telasecond" => [12, "second"], "telasecond_angle" => [12, "second_angle"], "telasteradian" => [12, "steradian"], "telastokes" => [12, "stokes"], "telatesla" => [12, "tesla"], "telaton" => [12, "ton"], "telatonne" => [12, "tonne"], "telatorr" => [12, "torr"], "telavolt" => [12, "volt"], "telawatt" => [12, "watt"], "telaweber" => [12, "weber"], "telayard" => [12, "yard"], "telayd" => [12, "yd"], "telayear" => [12, "year"], "teslas" => [0, "tesla"], "tonnes" => [0, "tonne"], "tons" => [0, "ton"], "torrs" => [0, "torr"], "uA" => [-6, "A"], "uAu" => [-6, "Au"], "uBq" => [-6, "Bq"], "uC" => [-6, "C"], "uF" => [-6, "F"], "uG" => [-6, "G"], "uGal" => [-6, "Gal"], "uGy" => [-6, "Gy"], "uH" => [-6, "H"], "uHg" => [-6, "Hg"], "uHz" => [-6, "Hz"], "uJ" => [-6, "J"], "uK" => [-6, "K"], "uL" => [-6, "L"], "uN" => [-6, "N"], "uP" => [-6, "P"], "uPa" => [-6, "Pa"], "uS" => [-6, "S"], "uSt" => [-6, "St"], "uSv" => [-6, "Sv"], "uT" => [-6, "T"], "uV" => [-6, "V"], "uW" => [-6, "W"], "uWb" => [-6, "Wb"], "ua" => [-6, "a"], "uac" => [-6, "ac"], "uatm" => [-6, "atm"], "ubar" => [-6, "bar"], "ucal" => [-6, "cal"], "ucd" => [-6, "cd"], "uconventional_mercury" => [-6, "conventional_mercury"], "udegC" => [-6, "degC"], "udegF" => [-6, "degF"], "udeg_C" => [-6, "deg_C"], "udeg_F" => [-6, "deg_F"], "udegreeC" => [-6, "degreeC"], "udegreeF" => [-6, "degreeF"], "udegree_C" => [-6, "degree_C"], "udegree_E" => [-6, "degree_E"], "udegree_F" => [-6, "degree_F"], "udegree_N" => [-6, "degree_N"], "udegree_R" => [-6, "degree_R"], "udegree_S" => [-6, "degree_S"], "udegree_W" => [-6, "degree_W"], "udegree_c" => [-6, "degree_c"], "udegree_east" => [-6, "degree_east"], "udegree_f" => [-6, "degree_f"], "udegree_north" => [-6, "degree_north"], "udegree_south" => [-6, "degree_south"], "udegree_west" => [-6, "degree_west"], "udegrees_east" => [-6, "degrees_east"], "udegrees_north" => [-6, "degrees_north"], "udegrees_south" => [-6, "degrees_south"], "udegrees_west" => [-6, "degrees_west"], "udyn" => [-6, "dyn"], "uerg" => [-6, "erg"], "uforce" => [-6, "force"], "ug" => [-6, "g"], "ugravity" => [-6, "gravity"], "uh" => [-6, "h"], "uhg" => [-6, "hg"], "uhr" => [-6, "hr"], "uin" => [-6, "in"], "ukgf" => [-6, "kgf"], "ukph" => [-6, "kph"], "ulb" => [-6, "lb"], "ulm" => [-6, "lm"], "ulx" => [-6, "lx"], "uly" => [-6, "ly"], "um" => [-6, "m"], "umb" => [-6, "mb"], "umercury" => [-6, "mercury"], "umgal" => [-6, "mgal"], "umin" => [-6, "min"], "umol" => [-6, "mol"], "umon" => [-6, "mon"], "umph" => [-6, "mph"], "uohm" => [-6, "ohm"], "uoz" => [-6, "oz"], "upc" => [-6, "pc"], "upsi" => [-6, "psi"], "urad" => [-6, "rad"], "us" => [-6, "s"], "usr" => [-6, "sr"], "ut" => [-6, "t"], "uyr" => [-6, "yr"], "volts" => [0, "volt"], "watts" => [0, "watt"], "webers" => [0, "weber"], "yards" => [0, "yard"], "yds" => [0, "yd"], "years" => [0, "year"], } UPLURALS = { "Celsiuses" => "Celsius", "Fahrenheits" => "Fahrenheit", "Julians_year" => "Julian_year", "Pascals" => "Pascal", "acres" => "acre", "amperes" => "ampere", "angstroms" => "angstrom", "angulars_degree" => "angular_degree", "angulars_minute" => "angular_minute", "angulars_second" => "angular_second", "ares" => "are", "atmospheres" => "atmosphere", "calories" => "calorie", "candelas" => "candela", "celsiuses" => "celsius", "centigrades" => "centigrade", "centuries" => "century", "chains" => "chain", "commons_year" => "common_year", "coulombs" => "coulomb", "days" => "day", "degKs" => "degK", "degreeKs" => "degreeK", "degrees" => "degree", "degs_K" => "deg_K", "dynes" => "dyne", "ergs" => "erg", "fahrenheits" => "fahrenheit", "farads" => "farad", "fermis" => "fermi", "gals" => "gal", "gausses" => "gauss", "grams" => "gram", "hectares" => "hectare", "hertzes" => "hertz", "hours" => "hour", "inchs" => "inch", "joules" => "joule", "kelvins" => "kelvin", "kilograms" => "kilogram", "knots" => "knot", "litres" => "litre", "meters" => "meter", "metres" => "metre", "microns" => "micron", "miles" => "mile", "millibars" => "millibar", "minutes" => "minute", "minutes_angle" => "minute_angle", "moles" => "mole", "months" => "month", "newtons" => "newton", "ounces" => "ounce", "parsecs" => "parsec", "pascals" => "pascal", "pentads" => "pentad", "percents" => "percent", "poises" => "poise", "pounds" => "pound", "radians" => "radian", "seconds" => "second", "seconds_angle" => "second_angle", "steradians" => "steradian", "stokeses" => "stokes", "teslas" => "tesla", "tonnes" => "tonne", "tons" => "ton", "torrs" => "torr", "volts" => "volt", "watts" => "watt", "webers" => "weber", "yards" => "yard", "yds" => "yd", "years" => "year", } end class NumberNode < TerminalNode def initialize(arg) raise TypeError unless Numeric === arg @a = arg end UNITY = NumberNode.new(1) ZERO = NumberNode.new(0) def to_s if @a == @a.to_i sprintf("%d",@a) else String(@a) end end attr_reader :a alias :value :a alias :factor :a def == (other) case other when NumberNode @a == other.a else false end end def add_eval(another) raise TypeError unless NumberNode === another NumberNode.new(@a + another.value) end def mul_eval(another) case another when NumberNode then NumberNode.new(@a * another.a) when PowNode raise TypeError unless NumberNode === another.lhs raise TypeError unless NumberNode === another.rhs NumberNode.new(@a * Units::pow_f(another.lhs.value, another.rhs.value)) else raise TypeError end end def name; "1"; end def power; UNITY; end end class XDate def initialize(year, month, day) @year, @month, @day = year.to_i, month.to_i, day.to_i end attr_reader :year, :month, :day def to_s format('%04d-%02d-%02d', @year, @month, @day) end alias :inspect :to_s def to_time Time.gm(@year, @month, @day) end def to_date Date.new(@year, @month, @day) end def -(other) case other when XDate (to_date - other.to_date) when Time to_time - other when Date (to_date - other.to_date) else to_date - other end end def +(other) t = to_date + other self.class.new(t.year, t.month, t.mday) end end class TimeNode < TerminalNode def initialize(date, time, zone) @date, @time, @zone = date, time, zone if :now === @date then now = Time.now.utc @date = XDate.new(now.year, now.month, now.day) @time = ((now.hour * 60 + now.min) * 60 + Float(now.sec)) else qdays = (@time / 86400).floor if not qdays.zero? @date += qdays @time -= (qdays * 86400) end end raise TypeError unless XDate === @date @time = 0.0 unless @time raise TypeError unless Float === @time @zone = 0 unless @zone raise TypeError unless Integer === @zone end attr_reader :date, :time, :zone def to_s hr = @time.floor / 3600 mi = (@time.floor / 60) % 60 sc = @time % 60 tzm = @zone.abs tzh = tzm / 60 tzm %= 60 tzh = -tzh if @zone < 0 format("%sT%02d:%02d:%05.2f %+03d:%02d", \ @date.to_s, hr, mi, sc, tzh, tzm) end def self::pentad(d) (d > 25) ? 5 : ((d - 1) / 5) end def add_time(increment) inc = increment.reduce5 case inc.name when 's' t2 = @time + inc.factor d2 = @date + (t2 / 86400) t2 = t2 % 86400 self.class.new(d2, t2, @zone) when 'pentad' ifac = Integer(inc.factor) ipen = ifac % 6 imon = ifac / 6 spen = self.class.pentad(@date.day) smon = @date.month + imon + spen / 6 spen = spen % 6 sday = spen * 5 + (@date.day - 1) % 5 + 1 syear = @date.year + (smon - 1) / 12 smon = (smon - 1) % 12 + 1 sdate = XDate.new(syear, smon, sday) self.class.new(sdate, @time, @zone) else raise "bad time unit '#{inc.name}'" end end def utcsod @time - @zone * 60 end def div_time(units) base = units.ref inc = units.deref.reduce5 begin incname = inc.name rescue Exception incname = "(undefined)" end case incname when 's' dif = (@date - base.date) * 86400 + (utcsod - base.utcsod) dif / inc.factor when 'pentad' dif = (@date.year - base.date.year) * 72 dif += (@date.month - base.date.month) * 6 dif += self.class.pentad(@date.day) dif -= self.class.pentad(base.date.day) dif = Float(dif) if dif % inc.factor != 0 dif / inc.factor else raise "bad time unit '#{incname}'" end end end class PowNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs raise TypeError unless NumberNode === @rhs end def to_s lhs = @lhs.to_s case lhs when /\d$/, /[\d\.]/ lhs = "(#{lhs})" end rhs = @rhs.to_s if rhs == '1' lhs else rhs = "^(#{rhs})" if (/\./ =~ rhs) lhs + rhs end end attr_reader :lhs, :rhs alias :power :rhs def pow_eval(other) case other when NumberNode PowNode.new(@lhs, @rhs.mul_eval(other)) else super(other) end end def flatten2 x = @lhs.flatten2 case x when NumberNode a = @lhs.pow_eval(@rhs) when TerminalNode a = self when PowNode a = PowNode.new(x.lhs, x.rhs.mul_eval(@rhs)) when MulNode, MultiNode a = MultiNode.new() for gc in x a.append(gc.pow_eval(@rhs)) end else raise "internal error" end return a end def name case @lhs when NumberNode, NameNode @lhs.name else raise "internal error" end end def value case @lhs when NumberNode Units::pow_f(@lhs.value, @rhs.value) else raise(format('%s#value: internal error', self.class.to_s)) end end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value) * another.value) else self.class.new(@lhs, @rhs.add_eval(another.power)) end end def sort case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value)) else self end end def factor Units::pow_f(@lhs.factor, @rhs.value) end end module Kakezan def flatten2 r = MultiNode.new() each do |child| case child when MultiNode r.append child when MulNode r.append child.flatten2 when ContainerNode r.append child.flatten2 else r.append child end end r end def name n = nil for c in @children next if NumberNode === c na = c.name if n.nil? n = na else raise "multiple names found" if na != n end end n = "1" if n.nil? n end def factor f = 1 for c in @children f *= c.factor end f end end class MulNode < ContainerNode include BinaryNode include Kakezan def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end def to_s lhs = @lhs.to_s rhs = @rhs.to_s if (/\d$/ =~ lhs && /^\w/ =~ rhs) then "#{lhs} #{rhs}" else "#{lhs}.#{rhs}" end end end class MultiNode < ContainerNode include Kakezan def initialize(*children) @children = children for c in @children raise "# MultiNode.new(#{children.inspect})" unless Node === c end end def to_s s = @children.join(';') s.gsub(/\d;\w/) { |dsw| dsw.sub(/;/, ' ') }.gsub(/;/, '.') end def each @children.each {|child| yield child } end attr_reader :children def append(other) case other when MultiNode @children += other.children else @children.push other end end def sort table = {} for child in self name = child.name if (table.include?(name)) then table[name] = table[name].mul_eval(child) else table[name] = child end end list = [] for name in table.keys.sort candi = table[name] if PowNode === candi and NumberNode === candi.lhs then v = candi.value list.push NumberNode.new(v) unless v == 1 next end next if candi.power.value == 0 list.push candi end if list.length > 1 list.delete(NumberNode::UNITY) end self.class.new(*list) end def collect_hash(stopper, op) list = [] for child in self list.push(child.send(op, stopper)) end self.class.new(*list).flatten2 end def expand(stopper) collect_hash(stopper, :expand) end def unalias(stopper) collect_hash(stopper, :unalias) end def foldnumber(stopper) collect_hash(stopper, :foldnumber) end def value raise "this is dimensional units" if (@children.size > 1) @children.first ? @children.first.value : NumberNode::UNITY.value end end class ShiftNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end attr_reader :lhs, :rhs alias :ref :rhs def to_s "(#{@lhs.to_s} @ #{@rhs.to_s})" end def trim2; @lhs; end def trim self.class.new(@lhs.trim, @rhs.trim2) end def flatten2; @lhs; end def flatten lf = @lhs.flatten case lf when ShiftNode rf = lf.rhs.add_eval(@rhs) self.class.new(lf.lhs, rf) else self.class.new(lf, @rhs.flatten) end end def sort self.class.new(@lhs.sort, @rhs.sort) end def ref case @lhs when ShiftNode @lhs.ref.add_eval(@rhs) else @rhs end end def deref case @lhs when ShiftNode @lhs.deref else @lhs end end def name @lhs.name end def factor @lhs.factor end end def initialize string case string when String @string, @ptree = string, nil when Node @string, @ptree = nil, string else @string, @ptree = String(string), nil end @copy = @lexstat = nil end # # === LEXICAL ANALYZER === # def rewind @copy = @string.dup.strip @lexstat = nil end RE_SPACE = '([ \t])' RE_INTEGER = '([-+]?\d+)' RE_EXP = '([eE][-+]?[0-9]+)' RE_REAL = "([-+]?[0-9]*(\\.[0-9]*#{RE_EXP}?|#{RE_EXP}))" RE_YEAR = "([-+]?[0-9]{1,4})" RE_MONTH = "(0?[1-9]|1[0-2])" RE_DAY = "([12][0-9]|30|31|0?[1-9])" RE_HOUR = "(2[0-3]|[0-1]?[0-9])" RE_MINUTE = "([0-5]?[0-9])" RE_SECOND = "((#{RE_MINUTE}|60)(\\.[0-9]*)?)" RE_NAME = "(%|[a-zA-Z][a-zA-Z_]*([0-9]+[a-zA-Z_]+)*)" RE_DATE = "#{RE_YEAR}-#{RE_MONTH}-#{RE_DAY}" RE_TIME = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9])(:#{RE_SECOND})?)?" RE_HandM = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9]))?" def next_token # decomment @copy.sub!(/^#.*/, ''); if @copy.sub!(%r{^\s*(\))}, '') then @lexstat = nil return [$1, $1] end if @copy.sub!(%r{^\s*(\()\s*}, '') then return [$1, $1] end if @copy.sub!(%r{^[ \t]*(@)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(after|from|since|ref)[ \t]+}i, '') then @lexstat = :SHIFT_SEEN return [:SHIFT, $1] end if @copy.sub!(%r{^[ \t]*(/)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(per)[ \t]+}i, '') then @lexstat = nil return [:DIVIDE, $1] end if @copy.sub!(%r{^(\^|\*\*)}, '') then @lexstat = nil return [:EXPONENT, $1] end if @copy.sub!(%r{^(\.|\*|[ \t]+)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_DATE}T?[ \t]*}, '') then y, m, d = $1, $2, $3 @lexstat = :DATE_SEEN return [:DATE, XDate.new(y.to_i, m.to_i, d.to_i)] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^now[ \t]*}, '') then @lexstat = nil return [:DATE, :now] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_TIME}[ \t]*}, '') then h, m, s = $1, $3, $5 m = m.sub(/:/,'') if m s = 0 if s.nil? @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60 + Float(s))] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-2][0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^(UTC|Z)[ \t]*}, '') then @lexstat = nil return [:ZONE, 0] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^([-+]?)#{RE_HandM}[ \t]*}, '') then sgn, h, m = $1, $2, $4 m = m.sub(/:/,'') if m @lexstat = nil h = h.to_i h = -h if sgn == "-" m = m.to_i m = -m if sgn == "-" return [:ZONE, ((h * 60) + m)] end if @copy.sub!(%r{^#{RE_NAME}}, '') then @lexstat = nil return [:NAME, $1] end if @copy.sub!(%r{^#{RE_REAL}}, '') then @lexstat = nil return [:REAL, $1.to_f] end if @copy.sub!(%r{^#{RE_INTEGER}}, '') then @lexstat = nil return [:INT, $1.to_i] end if @copy.sub!(%r{^(-)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if @copy.sub!(%r{^(.)}, '') then return [$1, $1] end return [false, false] end # # === USER LEVEL METHODS === # def tokens rewind x = [] while (t = next_token).first x.push t end x end def do_parse2 rewind return NumberNode.new(1) if @string.nil? or @string.empty? pa = do_parse pa ? pa : ErrorNode.new(@string) end def ptree @ptree = do_parse2 if not @ptree @ptree end def dup @string ? self.class.new(@string) : self.class.new(@ptree) end def parse dup.parse! end def parse! @ptree = do_parse2 if not @ptree self end def self::parse(string) new(string).parse! end =begin --- reduce0 just do nothing. =end def reduce0 self end =begin --- reduce1 removes unnecessary parentheses. =end def reduce1 @string = ptree.to_s self end =begin --- reduce2 removes shift operator within multiplication/division/exponent =end def reduce2 @ptree = ptree.reduce2 @string = nil self end =begin --- reduce3 flattens expression and collects all factors =end def reduce3 @ptree = ptree.reduce3 @string = nil self end =begin --- reduce4 collects terms with the same name =end def reduce4 @ptree = ptree.reduce4 @string = nil self end =begin --- reduce5 expands all terms recursively =end def reduce5 @ptree = ptree.reduce5 @string = nil self end attr_reader :string def to_s @string = @ptree.to_s if @string.nil? @string end def inspect if @ptree.nil? then "Units{#{@string}}" else "Units[#{@ptree.inspect}]".gsub(/Units::/, '').gsub(/Node\[/, '[') end end def self::[](string) new(string) end def self::parse(string) new(string).parse! end def eval(x = 0) r5 = ptree.reduce5 case r = r5.ref when TimeNode r.add(x, r5.name) else fac = NumberNode.new(x + r.value) self.class.new(MulNode.new(fac, r5.deref)) end end def convert(numeric, to_units) to_units = Units.new( to_units ) if to_units.is_a?(String) r5 = dup.ptree.reduce5 case r = r5.ref when TimeNode r.add_time(r5.deref.mul(numeric)).div_time(to_units.ptree) else shift1 = r.value numeric = shift1 + numeric if shift1 != 0 fact = r5.divide(tp = to_units.dup.ptree).reduce5.value numeric *= fact if fact != 1 shift2 = tp.reduce5.ref.value numeric = numeric - shift2 if shift2 != 0 numeric end end def factor_and_offset(to_units) # To convert a numeric from self to to_units: # scale_factor * numeric + add_offset to_units = Units.new( to_units ) if to_units.is_a?(String) add_offset = convert(0, to_units) scale_factor = convert(1, to_units) - add_offset [ scale_factor, add_offset ] end def convert2(val, to_units) # Like Units#convert, but applicable to any Numeric-like objects. # Returns the original value if the units are incompatible. to_units = Units.new( to_units ) if to_units.is_a?(String) if ( self == to_units ) val elsif ( self =~ to_units ) if Numeric===val convert( val, to_units ) else factor, offset = factor_and_offset( to_units ) val*factor + offset end else unless $VERBOSE.nil? $stderr.print( "*WARNING*: " + "incompatible units: #{self.to_s} and #{to_units.to_s}\n") caller(0).each{|c| $stderr.print "\t* ",c,"\n"} end val end end @@reduce = :reduce4 def self::reduce_level @@reduce.to_s[-1] end def self::reduce_level=(n) @@reduce = case n when 1 then :reduce1 when 2 then :reduce2 when 3 then :reduce3 when 4 then :reduce4 else :reduce5 end end def binop(op, other) case other when Numeric other = NumberNode.new(other) when Units other = other.ptree end q = self.ptree.send(op, other).send(@@reduce) Units.new(q) end def *(other) binop(:mul, other) end def **(other) binop(:pow, other) end def /(other) binop(:divide, other) end def ^(other) binop(:shift, other) end def ==(other) case other when self.class dup.reduce5.to_s == other.dup.reduce5.to_s else false end end #def === (other) # reduce5.ptree.deref.to_s == other.reduce5.ptree.deref.to_s #end alias === == #def === (other) # # returns true if other is within a factor and/or offset of difference. # case other # when self.class # (self/other).reduce5.ptree.children.each do |child| # return false if !( NumberNode === child ) # end # true # else # false # end #end def =~(other) case other when self.class (self/other).reduce5.ptree.children.each{ |node| return false unless NumberNode === node } true else false end end def self::pow_f(a, b) if Integer === b and b < 0 then a ** b.to_f else a ** b end end ...end units.racc/module_eval... ##### State transition tables begin ### racc_action_table = [ 3, 9, 35, 9, 32, 9, 19, 11, 10, 7, 10, 9, 10, 8, 25, 31, 36, 23, 10, 7, 9, 37, 9, 8, 9, 38, nil, 10, 7, 10, 7, 10, 8, 25, 8, 9, 23, nil, 12, 9, 14, 15, 10, 9, 7, 17, 10, 31, 8, 17, 10, 9, nil, 9, nil, nil, nil, 17, 10, 17, 10 ] racc_action_check = [ 0, 0, 25, 31, 18, 23, 11, 1, 0, 0, 31, 14, 23, 0, 23, 31, 33, 23, 14, 14, 8, 34, 15, 14, 12, 35, nil, 8, 8, 15, 15, 12, 8, 12, 15, 17, 12, nil, 4, 5, 4, 4, 17, 28, 4, 5, 5, 17, 4, 28, 28, 13, nil, 26, nil, nil, nil, 13, 13, 26, 26 ] racc_action_pointer = [ -1, 7, nil, nil, 34, 37, nil, nil, 18, nil, nil, 6, 22, 49, 9, 20, nil, 33, -11, nil, nil, nil, nil, 3, nil, -10, 51, nil, 41, nil, nil, 1, nil, 1, 6, 12, nil, nil, nil ] racc_action_default = [ -1, -27, -2, -3, -4, -7, -8, -14, -27, -20, -21, -27, -27, -9, -27, -27, -15, -27, -27, 39, -5, -6, -18, -27, -22, -24, -10, -12, -11, -13, -16, -27, -17, -27, -27, -25, -19, -23, -26 ] racc_goto_table = [ 6, 20, 21, 2, 1, nil, 30, nil, 6, 13, nil, 18, 22, 34, 27, 29, nil, 22, nil, 26, 28, nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, 22 ] racc_goto_check = [ 7, 4, 5, 2, 1, nil, 4, nil, 7, 6, nil, 2, 7, 5, 7, 7, nil, 7, nil, 6, 6, nil, nil, 7, nil, nil, nil, nil, nil, nil, nil, 7 ] racc_goto_pointer = [ nil, 4, 3, nil, -11, -10, 5, 0, nil ] racc_goto_default = [ nil, nil, nil, 4, 33, nil, 5, 16, 24 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 17, :_reduce_none, 1, 17, :_reduce_2, 1, 17, :_reduce_3, 1, 18, :_reduce_none, 3, 18, :_reduce_5, 3, 18, :_reduce_6, 1, 19, :_reduce_none, 1, 19, :_reduce_none, 2, 19, :_reduce_9, 3, 19, :_reduce_10, 3, 19, :_reduce_11, 3, 19, :_reduce_12, 3, 19, :_reduce_13, 1, 22, :_reduce_14, 2, 22, :_reduce_15, 3, 22, :_reduce_16, 3, 22, :_reduce_17, 1, 20, :_reduce_none, 3, 20, :_reduce_19, 1, 23, :_reduce_20, 1, 23, :_reduce_21, 1, 21, :_reduce_none, 3, 21, :_reduce_23, 1, 24, :_reduce_24, 2, 24, :_reduce_25, 3, 24, :_reduce_26 ] racc_reduce_n = 27 racc_shift_n = 39 racc_token_table = { false => 0, :error => 1, :INT => 2, :ERR => 3, :SHIFT => 4, :SPACE => 5, :MULTIPLY => 6, :DIVIDE => 7, :EXPONENT => 8, :REAL => 9, :NAME => 10, :DATE => 11, :TIME => 12, :ZONE => 13, "(" => 14, ")" => 15 } racc_nt_base = 16 racc_use_result_var = false Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "INT", "ERR", "SHIFT", "SPACE", "MULTIPLY", "DIVIDE", "EXPONENT", "REAL", "NAME", "DATE", "TIME", "ZONE", "\"(\"", "\")\"", "$start", "unit_spec", "origin_exp", "unit_exp", "value_exp", "timestamp", "power_exp", "number_exp", "time_exp" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted module_eval(<<'.,.,', 'units.racc', 9) def _reduce_2(val, _values) val[0] end .,., module_eval(<<'.,.,', 'units.racc', 10) def _reduce_3(val, _values) yyerrok end .,., # reduce 4 omitted module_eval(<<'.,.,', 'units.racc', 15) def _reduce_5(val, _values) val[0].shift(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 16) def _reduce_6(val, _values) val[0].shift(val[2]) end .,., # reduce 7 omitted # reduce 8 omitted module_eval(<<'.,.,', 'units.racc', 22) def _reduce_9(val, _values) val[0].mul(val[1]) end .,., module_eval(<<'.,.,', 'units.racc', 23) def _reduce_10(val, _values) val[0].mul(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 24) def _reduce_11(val, _values) val[0].divide(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 25) def _reduce_12(val, _values) val[0].mul(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 26) def _reduce_13(val, _values) val[0].divide(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 30) def _reduce_14(val, _values) NameNode.new(val[0]) end .,., module_eval(<<'.,.,', 'units.racc', 31) def _reduce_15(val, _values) val[0].pow(val[1]) end .,., module_eval(<<'.,.,', 'units.racc', 32) def _reduce_16(val, _values) val[0].pow(val[2]) end .,., module_eval(<<'.,.,', 'units.racc', 33) def _reduce_17(val, _values) val[1] end .,., # reduce 18 omitted module_eval(<<'.,.,', 'units.racc', 38) def _reduce_19(val, _values) val[1] end .,., module_eval(<<'.,.,', 'units.racc', 42) def _reduce_20(val, _values) NumberNode.new(val[0]) end .,., module_eval(<<'.,.,', 'units.racc', 43) def _reduce_21(val, _values) NumberNode.new(val[0]) end .,., # reduce 22 omitted module_eval(<<'.,.,', 'units.racc', 48) def _reduce_23(val, _values) val[1] end .,., module_eval(<<'.,.,', 'units.racc', 52) def _reduce_24(val, _values) TimeNode.new(val[0], 0.0, 0) end .,., module_eval(<<'.,.,', 'units.racc', 53) def _reduce_25(val, _values) TimeNode.new(val[0], val[1], 0) end .,., module_eval(<<'.,.,', 'units.racc', 54) def _reduce_26(val, _values) TimeNode.new(val[0], val[1], val[2]) end .,., def _reduce_none(val, _values) val[0] end end # class Units end # module NumRu #################### if $0 == __FILE__ include NumRu def assert(test, seikai) raise "#{test.inspect} != #{seikai.inspect}" if test != seikai puts "ok #{seikai.inspect}" end puts "=== reduce1 ===" assert Units.new('').reduce1.to_s, "1" assert Units.new('m').reduce1.to_s, "m" assert Units.new('3').reduce1.to_s, "3" assert Units.new('3.14').reduce1.to_s, "3.14" assert Units.new('m2').reduce1.to_s, "m2" assert Units.new('m.s').reduce1.to_s, "m.s" assert Units.new('m/s').reduce1.to_s, "m.s-1" assert Units.new('kg.m/s2').reduce1.to_s, "kg.m.(s2)-1" assert Units.new('s @ 2003-11-29').reduce1.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('s @ 2003-11-29T11:24').reduce1.to_s, "(s @ 2003-11-29T11:24:00.00 +00:00)" assert Units.new('s @ 2003-11-29T11:24:11 -09:00').reduce1.to_s, "(s @ 2003-11-29T11:24:11.00 -09:00)" assert Units.new('100').reduce1.to_s, "100" assert Units.new('(10)^2').reduce1.to_s, "(10)2" assert Units.new('(10)^2/100').reduce1.to_s, "(10)2.(100)-1" puts "=== reduce2 ===" assert Units.new('s @ 2003-11-29').reduce2.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('m/(s @ 2003-11-29)').reduce2.to_s, "m.s-1" assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce2.to_s, "m.(K.s)-1" assert Units.new('(10)^2/100').reduce2.to_s, "(10)2.(100)-1" puts "=== reduce3 ===" assert Units::MultiNode.new(Units::NameNode.new('a'), \ Units::NumberNode.new(1), \ Units::NameNode.new('b')).to_s, 'a.1 b' assert Units.new('kg').reduce3.inspect, "Units[Name[kg]]" assert Units.new('kg.m').reduce3.inspect, "Units[Multi[Name[kg], Name[m]]]" assert Units.new('kg.m.s').reduce3.inspect, "Units[Multi[Name[kg], Name[m], Name[s]]]" assert Units.new('(m.s)^2').reduce3.inspect, "Units[Multi[Pow[Name[m], Number[2]], Pow[Name[s], Number[2]]]]" assert Units.new('K @ 273.15').reduce3.inspect, "Units[Shift[Name[K], Number[273.15]]]" assert Units.new('((a.b)^2)^2').reduce3.inspect, "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]]]]" assert Units.new('((a.b)^2 c4 d)^2').reduce3.inspect, "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]], Pow[Name[c], Number[8]], Pow[Name[d], Number[2]]]]" assert Units.new('((a.b)^2 c4 d)^2').reduce3.to_s, "a4 b4 c8 d2" assert Units.new('((a.b)^2 a4 b)^2').reduce3.to_s, "a4 b4 a8 b2" assert Units.new('s @ 2003-11-29').reduce3.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('m/(s @ 2003-11-29)').reduce3.to_s, "m.s-1" assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce3.to_s, "m.K-1 s-1" assert Units.new('(10)^2/100').reduce3.to_s, "(10)2.(100)-1" puts "=== reduce4 ===" assert Units.new('((a.b)^2 a4 b @ now)^2 @ 273.15').reduce4.to_s, "(a12 b6 @ 273.15)" assert Units.new('km2').reduce4.to_s, "km2" assert Units.new('hours.hour').reduce4.to_s, "hour2" assert Units.new('(10)^2').reduce4.to_s, "100" assert Units.new('100/10').reduce4.to_s, "10" assert Units.new('(10)^2/100').reduce4.to_s, "1" puts "=== reduce5 ===" assert Units.new('km2').reduce5.to_s, "1000000 m2" assert Units.new('(10)^2/100').reduce5.to_s, "1" assert Units.new('hPa').reduce5.to_s, "100 kg.m-1 s-2" assert Units.new('mb').reduce5.to_s, "100 kg.m-1 s-2" assert Units.new('hPa/mb').reduce5.to_s, "1" assert Units.new('(K @ 273.15)@ 10').reduce5.to_s, "(K @ 283.15)" puts "=== APPLICATIONS ===" assert Units.new('km @ 2').convert(3, Units.new('m @ 100')), 4900 assert Units.new('degree_F').convert(32, Units.new('K')).to_s, ((32+459.67)*(1.8**-1)).to_s u1 = Units.new('m/s') u2 = Units.new('mm/s') assert((u1/u2).to_s, "m.mm-1") assert((u1*u2).to_s, "m.mm.s-2") u1 = Units.new('years since 1999-01-01 00:00').reduce4 u2 = Units.new('hours since 2001-01-01 00:00').reduce4 assert u1.convert(3, u2), 24 * 365 u3 = Units.new('months since 2001-01-01 00:00').reduce4 assert u1.convert(3, u3), 12.0 Units.reduce_level = 3 assert((Units.new('hours') ** 2).to_s, "hours2") Units.reduce_level = 4 assert((Units.new('hours') ** 2).to_s, "hour2") Units.reduce_level = 5 assert((Units.new('hours') ** 2).to_s, "12960000 s2") assert(Units.new('day') =~ Units.new('s since 2002-01-01'), true) assert(Units.new('m') =~ Units.new('1'), false) un1 = Units['day since 2000-01-01'] un2 = Units['s since 2000-01-01'] assert(un1.convert(0, un2), 0.0) assert(un1.convert(1, un2), 86400.0) end numru-units-1.9/src/test.rb0000644000175000017500000001036512454711767016307 0ustar horinouthorinoutrequire './units' # Use require "numru/units" after installation. include NumRu def assert(test, seikai) raise "#{test.inspect} != #{seikai.inspect}" if test != seikai puts "ok #{seikai.inspect}" end puts "=== reduce1 ===" assert Units.new('').reduce1.to_s, "1" assert Units.new('m').reduce1.to_s, "m" assert Units.new('3').reduce1.to_s, "3" assert Units.new('3.14').reduce1.to_s, "3.14" assert Units.new('m2').reduce1.to_s, "m2" assert Units.new('m.s').reduce1.to_s, "m.s" assert Units.new('m/s').reduce1.to_s, "m.s-1" assert Units.new('kg.m/s2').reduce1.to_s, "kg.m.(s2)-1" assert Units.new('s @ 2003-11-29').reduce1.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('s @ 2003-11-29T11:24').reduce1.to_s, "(s @ 2003-11-29T11:24:00.00 +00:00)" assert Units.new('s @ 2003-11-29T11:24:11 -09:00').reduce1.to_s, "(s @ 2003-11-29T11:24:11.00 -09:00)" assert Units.new('100').reduce1.to_s, "100" assert Units.new('(10)^2').reduce1.to_s, "(10)2" assert Units.new('(10)^2/100').reduce1.to_s, "(10)2.(100)-1" puts "=== reduce2 ===" assert Units.new('s @ 2003-11-29').reduce2.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('m/(s @ 2003-11-29)').reduce2.to_s, "m.s-1" assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce2.to_s, "m.(K.s)-1" assert Units.new('(10)^2/100').reduce2.to_s, "(10)2.(100)-1" puts "=== reduce3 ===" assert Units::MultiNode.new(Units::NameNode.new('a'), \ Units::NumberNode.new(1), \ Units::NameNode.new('b')).to_s, 'a.1 b' assert Units.new('kg').reduce3.inspect, "Units[Name[kg]]" assert Units.new('kg.m').reduce3.inspect, "Units[Multi[Name[kg], Name[m]]]" assert Units.new('kg.m.s').reduce3.inspect, "Units[Multi[Name[kg], Name[m], Name[s]]]" assert Units.new('(m.s)^2').reduce3.inspect, "Units[Multi[Pow[Name[m], Number[2]], Pow[Name[s], Number[2]]]]" assert Units.new('K @ 273.15').reduce3.inspect, "Units[Shift[Name[K], Number[273.15]]]" assert Units.new('((a.b)^2)^2').reduce3.inspect, "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]]]]" assert Units.new('((a.b)^2 c4 d)^2').reduce3.inspect, "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]], Pow[Name[c], Number[8]], Pow[Name[d], Number[2]]]]" assert Units.new('((a.b)^2 c4 d)^2').reduce3.to_s, "a4 b4 c8 d2" assert Units.new('((a.b)^2 a4 b)^2').reduce3.to_s, "a4 b4 a8 b2" assert Units.new('s @ 2003-11-29').reduce3.to_s, "(s @ 2003-11-29T00:00:00.00 +00:00)" assert Units.new('m/(s @ 2003-11-29)').reduce3.to_s, "m.s-1" assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce3.to_s, "m.K-1 s-1" assert Units.new('(10)^2/100').reduce3.to_s, "(10)2.(100)-1" puts "=== reduce4 ===" assert Units.new('((a.b)^2 a4 b @ now)^2 @ 273.15').reduce4.to_s, "(a12 b6 @ 273.15)" assert Units.new('km2').reduce4.to_s, "km2" assert Units.new('hours.hour').reduce4.to_s, "hour2" assert Units.new('(10)^2').reduce4.to_s, "100" assert Units.new('100/10').reduce4.to_s, "10" assert Units.new('(10)^2/100').reduce4.to_s, "1" puts "=== reduce5 ===" assert Units.new('km2').reduce5.to_s, "1000000 m2" assert Units.new('(10)^2/100').reduce5.to_s, "1" assert Units.new('hPa').reduce5.to_s, "100 kg.m-1 s-2" assert Units.new('mb').reduce5.to_s, "100 kg.m-1 s-2" assert Units.new('hPa/mb').reduce5.to_s, "1" assert Units.new('(K @ 273.15)@ 10').reduce5.to_s, "(K @ 283.15)" puts "=== APPLICATIONS ===" assert Units.new('km @ 2').convert(3, Units.new('m @ 100')), 4900 assert Units.new('degree_F').convert(32, Units.new('K')).to_s, ((32+459.67)*(1.8**-1)).to_s u1 = Units.new('m/s') u2 = Units.new('mm/s') assert((u1/u2).to_s, "m.mm-1") assert((u1*u2).to_s, "m.mm.s-2") u1 = Units.new('years since 1999-01-01 00:00').reduce4 u2 = Units.new('hours since 2001-01-01 00:00').reduce4 assert u1.convert(3, u2), 24 * 365 u3 = Units.new('months since 2001-01-01 00:00').reduce4 assert u1.convert(3, u3), 12.0 Units.reduce_level = 3 assert((Units.new('hours') ** 2).to_s, "hours2") Units.reduce_level = 4 assert((Units.new('hours') ** 2).to_s, "hour2") Units.reduce_level = 5 assert((Units.new('hours') ** 2).to_s, "12960000 s2") assert(Units.new('day') =~ Units.new('s since 2002-01-01'), true) assert(Units.new('m') =~ Units.new('1'), false) un1 = Units['day since 2000-01-01'] un2 = Units['s since 2000-01-01'] assert(un1.convert(0, un2), 0.0) assert(un1.convert(1, un2), 86400.0) numru-units-1.9/src/lex.rb0000644000175000017500000001776512457446365016135 0ustar horinouthorinoutdef initialize string case string when String @string, @ptree = string, nil when Node @string, @ptree = nil, string else @string, @ptree = String(string), nil end @copy = @lexstat = nil end # # === LEXICAL ANALYZER === # def rewind @copy = @string.dup.strip @lexstat = nil end RE_SPACE = '([ \t])' RE_INTEGER = '([-+]?\d+)' RE_EXP = '([eE][-+]?[0-9]+)' RE_REAL = "([-+]?[0-9]*(\\.[0-9]*#{RE_EXP}?|#{RE_EXP}))" RE_YEAR = "([-+]?[0-9]{1,4})" RE_MONTH = "(0?[1-9]|1[0-2])" RE_DAY = "([12][0-9]|30|31|0?[1-9])" RE_HOUR = "(2[0-3]|[0-1]?[0-9])" RE_MINUTE = "([0-5]?[0-9])" RE_SECOND = "((#{RE_MINUTE}|60)(\\.[0-9]*)?)" RE_NAME = "(%|[a-zA-Z][a-zA-Z_]*([0-9]+[a-zA-Z_]+)*)" RE_DATE = "#{RE_YEAR}-#{RE_MONTH}-#{RE_DAY}" RE_TIME = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9])(:#{RE_SECOND})?)?" RE_HandM = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9]))?" def next_token # decomment @copy.sub!(/^#.*/, ''); if @copy.sub!(%r{^\s*(\))}, '') then @lexstat = nil return [$1, $1] end if @copy.sub!(%r{^\s*(\()\s*}, '') then return [$1, $1] end if @copy.sub!(%r{^[ \t]*(@)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(after|from|since|ref)[ \t]+}i, '') then @lexstat = :SHIFT_SEEN return [:SHIFT, $1] end if @copy.sub!(%r{^[ \t]*(/)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(per)[ \t]+}i, '') then @lexstat = nil return [:DIVIDE, $1] end if @copy.sub!(%r{^(\^|\*\*)}, '') then @lexstat = nil return [:EXPONENT, $1] end if @copy.sub!(%r{^(\.|\*|[ \t]+)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_DATE}T?[ \t]*}, '') then y, m, d = $1, $2, $3 @lexstat = :DATE_SEEN return [:DATE, XDate.new(y.to_i, m.to_i, d.to_i)] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^now[ \t]*}, '') then @lexstat = nil return [:DATE, :now] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_TIME}[ \t]*}, '') then h, m, s = $1, $3, $5 m = m.sub(/:/,'') if m s = 0 if s.nil? @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60 + Float(s))] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-2][0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^(UTC|Z)[ \t]*}, '') then @lexstat = nil return [:ZONE, 0] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^([-+]?)#{RE_HandM}[ \t]*}, '') then sgn, h, m = $1, $2, $4 m = m.sub(/:/,'') if m @lexstat = nil h = h.to_i h = -h if sgn == "-" m = m.to_i m = -m if sgn == "-" return [:ZONE, ((h * 60) + m)] end if @copy.sub!(%r{^#{RE_NAME}}, '') then @lexstat = nil return [:NAME, $1] end if @copy.sub!(%r{^#{RE_REAL}}, '') then @lexstat = nil return [:REAL, $1.to_f] end if @copy.sub!(%r{^#{RE_INTEGER}}, '') then @lexstat = nil return [:INT, $1.to_i] end if @copy.sub!(%r{^(-)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if @copy.sub!(%r{^(.)}, '') then return [$1, $1] end return [false, false] end # # === USER LEVEL METHODS === # def tokens rewind x = [] while (t = next_token).first x.push t end x end def do_parse2 rewind return NumberNode.new(1) if @string.nil? or @string.empty? pa = do_parse pa ? pa : ErrorNode.new(@string) end def ptree @ptree = do_parse2 if not @ptree @ptree end def dup @string ? self.class.new(@string) : self.class.new(@ptree) end def parse dup.parse! end def parse! @ptree = do_parse2 if not @ptree self end def self::parse(string) new(string).parse! end =begin --- reduce0 just do nothing. =end def reduce0 self end =begin --- reduce1 removes unnecessary parentheses. =end def reduce1 @string = ptree.to_s self end =begin --- reduce2 removes shift operator within multiplication/division/exponent =end def reduce2 @ptree = ptree.reduce2 @string = nil self end =begin --- reduce3 flattens expression and collects all factors =end def reduce3 @ptree = ptree.reduce3 @string = nil self end =begin --- reduce4 collects terms with the same name =end def reduce4 @ptree = ptree.reduce4 @string = nil self end =begin --- reduce5 expands all terms recursively =end def reduce5 @ptree = ptree.reduce5 @string = nil self end attr_reader :string def to_s @string = @ptree.to_s if @string.nil? @string end def inspect if @ptree.nil? then "Units{#{@string}}" else "Units[#{@ptree.inspect}]".gsub(/Units::/, '').gsub(/Node\[/, '[') end end def self::[](string) new(string) end def self::parse(string) new(string).parse! end def eval(x = 0) r5 = ptree.reduce5 case r = r5.ref when TimeNode r.add(x, r5.name) else fac = NumberNode.new(x + r.value) self.class.new(MulNode.new(fac, r5.deref)) end end def convert(numeric, to_units) to_units = Units.new( to_units ) if to_units.is_a?(String) r5 = dup.ptree.reduce5 case r = r5.ref when TimeNode r.add_time(r5.deref.mul(numeric)).div_time(to_units.ptree) else shift1 = r.value numeric = shift1 + numeric if shift1 != 0 fact = r5.divide(tp = to_units.dup.ptree).reduce5.value numeric *= fact if fact != 1 shift2 = tp.reduce5.ref.value numeric = numeric - shift2 if shift2 != 0 numeric end end def factor_and_offset(to_units) # To convert a numeric from self to to_units: # scale_factor * numeric + add_offset to_units = Units.new( to_units ) if to_units.is_a?(String) add_offset = convert(0, to_units) scale_factor = convert(1, to_units) - add_offset [ scale_factor, add_offset ] end def convert2(val, to_units) # Like Units#convert, but applicable to any Numeric-like objects. # Returns the original value if the units are incompatible. to_units = Units.new( to_units ) if to_units.is_a?(String) if ( self == to_units ) val elsif ( self =~ to_units ) if Numeric===val convert( val, to_units ) else factor, offset = factor_and_offset( to_units ) val*factor + offset end else unless $VERBOSE.nil? $stderr.print( "*WARNING*: " + "incompatible units: #{self.to_s} and #{to_units.to_s}\n") caller(0).each{|c| $stderr.print "\t* ",c,"\n"} end val end end @@reduce = :reduce4 def self::reduce_level @@reduce.to_s[-1] end def self::reduce_level=(n) @@reduce = case n when 1 then :reduce1 when 2 then :reduce2 when 3 then :reduce3 when 4 then :reduce4 else :reduce5 end end def binop(op, other) case other when Numeric other = NumberNode.new(other) when Units other = other.ptree end q = self.ptree.send(op, other).send(@@reduce) Units.new(q) end def *(other) binop(:mul, other) end def **(other) binop(:pow, other) end def /(other) binop(:divide, other) end def ^(other) binop(:shift, other) end def ==(other) case other when self.class dup.reduce5.to_s == other.dup.reduce5.to_s else false end end #def === (other) # reduce5.ptree.deref.to_s == other.reduce5.ptree.deref.to_s #end alias === == #def === (other) # # returns true if other is within a factor and/or offset of difference. # case other # when self.class # (self/other).reduce5.ptree.children.each do |child| # return false if !( NumberNode === child ) # end # true # else # false # end #end def =~(other) case other when self.class (self/other).reduce5.ptree.children.each{ |node| return false unless NumberNode === node } true else false end end def self::pow_f(a, b) if Integer === b and b < 0 then a ** b.to_f else a ** b end end numru-units-1.9/src/Makefile0000644000175000017500000000144212460324243016421 0ustar horinouthorinoutall: units.rb units.rb: units.racc racc units.racc -o units.rb (( echo ; echo '####################' ; echo 'if $$0 == __FILE__' ; tail -n +2 test.rb | ruby -p -e 'print " "' ; echo 'end' ) >> units.rb) test: units.rb ruby test.rb backup: units.shar scp units.shar toyoda@www.gfd-dennou.org:tmp/ scp units.shar toyoda@pandora0.sytes.net:tmp/ RSRCS = rules.rb version.rb node.rb namenode.rb utab.rb numbernode.rb \ timenode.rb pownode.rb mulnode.rb shiftnode.rb lex.rb utab.rb: makeutab.rb dcunits.txt ruby makeutab.rb dcunits.txt > $@.tmp mv $@.tmp $@ units.racc: $(RSRCS) cat $(RSRCS) > $@.tmp mv $@.tmp $@ edit: $${EDITOR:-vi} $(RSRCS) SRCS = Makefile units.rb dcunits.txt makeutab.rb $(RSRCS) test.rb units.rd shar: units.shar units.shar: $(SRCS) shar $(SRCS) > units.shar numru-units-1.9/src/version.rb0000644000175000017500000000002112460324243016763 0ustar horinouthorinoutVERSION = "1.9" numru-units-1.9/src/units.rd0000644000175000017500000000745511015525225016462 0ustar horinouthorinout=begin =class Units A class of units of physical quantities. This class covers most functionality of UNIDATA's UDUNITS Library (http://www.unidata.ucar.edu/packages/udunits/), however, with a more sophisticated handling of string expressions. UDUNITS always decomposes units into the four base units and discards the original string expressions. Therefore, 'hPa' always becomes '100 kg.m-1.sec-1', and 'day' always becomes '86400 sec'. On the otehr hand, this library tries to keep the original expressions as much as possible by default, while allowing partial to complete decompositions if needed. ==class methods ---Units.new(string) Constructor. ARGUMENTS * string (String): string expression of the units. [factor] units; [factor] time units [since ...] (see EXAMPLES below) RETURN VALUE * a Units EXAMPLE units = Units.new('kg.m2/s') units = Units.new('100 m') units = Units.new('g/kg') units = Units.new('hour since 2003-10-01 00:00:0 +0:00') units = Units.new('hour since 2003-10-01') # same as above units = Units.new('minutes since 2003-10-01 03:15:22.5 -6:00') ---reduce_level by default returns 4. ---reduce_level = i Integer value within 1..5 is acceptable for ((|i|)). After this call, ((*reduce*))((|i|)) is used in ((<*>)), ((<"/">)), ((<**>)) instance methods. ==instance methods ---to_s Returns a string expression of the units. ---*(other) Multiplies self with another units. Applies (()) to format the string expression of the result. ARGUMENTS * other [Units]: the other units RETURN VALUE * a Units ---/(other) Divides self with another units. Applies (()) to format the string expression of the result. ARGUMENTS * other [Units]: the other units RETURN VALUE * a Units ---**(pow) Power. Applies (()) to format the string expression of the result. ARGUMENTS * pow [Integer] RETURN VALUE * a Units ---==(other) Judges whether the two units are the same. Comparison is done after (()) operation is applied to both self and other. ('m/s' and 'm.s-1' will be the same, for instance.) ---===(other) Similar to ((<==>)), but reference date or shift value is ignored. ---=~(other) Similar to ((<===>)), but numerical factor is also ignored. When (units1 =~ units2) is true, you may add or subtract two quantities in units1 and units2. ---reduce4 Moderately parses the string expression of the units (destructive method). This method preserves string expression of atomic units, but plural form and SI prefixes are normalized. See also (()). RETURN VALUE * self EXAMPLE Untis.new('hour/hour').reduce4.to_s # => "" Units.new('mm/m').reduce4.to_s # => "m-1 mm" ---reduce5 Parses and aggressively reduces the string expression of the units (destructive method). See also (()). RETURN VALUE * self EXAMPLE Units.new('hour/hour').reduce5.to_s # => "1.0" Units.new('mm/m').reduce5.to_s # => "0.001" ---convert(numeric, to_units) converts Numeric value ((|numeric|)) into new units ((|to_units|)). EXAMPLE Units.new('degree_F').convert(32, Units.new('K')).to_s # => "273.15" ---convert2(numeric_etc, to_units) Similat to (()), but the first argument is more flexible to accept not only numerics but also NArray etc etc. EXAMPLE require "narray" na = NArray[-40.0, 0.0] Units.new('degree_F').convert(na, Units.new('degC')) # => NArray.float(2): [ -40.0, -17.7778 ] =end numru-units-1.9/src/namenode.rb0000644000175000017500000000246010020516646017075 0ustar horinouthorinoutclass NameNode < TerminalNode def initialize(string) @a = string end def to_s; @a; end alias :name :to_s def power; NumberNode::UNITY; end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name PowNode.new(self, self.power.add_eval(another.power)) end def expand(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self if basic? return CACHE[@a] if CACHE.include?(@a) CACHE[@a] = expand2(stopper) end def expand2(stopper) newstopper = stopper.dup newstopper[@a] = true if UDEFS.include?(@a) then Units.new(UDEFS[@a]).ptree.expand(newstopper) else p, n = UALIASES[@a] u = Units.new(UDEFS[n] || n).ptree.expand(newstopper) MulNode.new(u, PowNode.new(NumberNode.new(10), NumberNode.new(p))) end end def unalias(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self unless UALIASES.include?(@a) p, n = UALIASES[@a] u = NameNode.new(n) q = PowNode.new(NumberNode.new(10), NumberNode.new(p)) MulNode.new(u, q) end def foldnumber(stopper) return self unless UPLURALS.include?(@a) n = UPLURALS[@a] NameNode.new(n) end def basic? not (UDEFS.include?(@a) or UALIASES.include?(@a)) end CACHE = {} def factor 1 end end numru-units-1.9/src/dcunits.txt0000644000175000017500000000757212460365377017222 0ustar horinouthorinout# Unit description table # # Each line consitsts of # # name mode definition # # Here, mode is S, P, or N: # # S: the unit is in the sigular form only (does not take the plural form), # and it can be prefixed. (such as A --> mA etc.) # P: the unit can take the plural form (such as second --> seconds). # Prefixes are not allowed. # N: same as S, but the unit cannot be prefixed (thus it is used only # in the original form). # s S second P s m S metre P m meter P metre kg N kilogram P kg A S ampere P A K S kelvin P K degK P K deg_K P K degreeK P K mol S mole P mol rad S radian P rad sr S steradian P sr cd S candela P cd # # --- standard named units --- # Hz S 1/s hertz P Hz N S kg.m.s-2 newton P N Pa S N.m-2 pascal P Pa Pascal P Pa J S N.m joule P J W S J/s watt P W C S A.s coulomb P C V S J/C volt P V F S C/V ohm S V/A S S A/V Wb S V.s weber P Wb farad P coulomb/volt T S Wb.m-2 tesla P Wb.m-2 H S Wb.A-1 degC S K @ 273.15 deg_C S K @ 273.15 degree_C S K @ 273.15 degree_c S K @ 273.15 degreeC S K @ 273.15 Celsius P K @ 273.15 celsius P K @ 273.15 centigrade P K @ 273.15 degree_R S K / 1.8 degree_f S degree_R @ 459.67 degree_F S degree_R @ 459.67 Fahrenheit P degree_F fahrenheit P degree_F degF S degree_F deg_F S degree_F degreeF S degree_F lm S cd.sr lx S lm.m-2 Bq S s-1 Gy S J.kg-1 Sv S J.kg-1 # # === non-SI units === # # --- basic numbers --- # pi N 3.141592653589793238462 # # --- nondimensional units --- # percent P 1e-2 % N 1e-2 permil N 1e-3 # # --- length --- # fermi P 1.0e-15 m angstrom P 1.0e-10 m micron P 1.0e-6 m astronomical_unit N 1.49597870e11 m astronomical_units N 1.49597870e11 m Au S astronomical_unit parsec P 3.0857e16 m pc S parsec light_year N 9.46e15 m light_years N 9.46e15 m ly S light_year nautical_mile N 1852 m nautical_miles N 1852 m # inch P 2.54 cm in S inch foot N 12 inch feet N foot ft N foot yard P 6 feet yd P yard chain P 22 yard mile P 1760 yard # # --- time --- # minute P 60 s min S 60 s hour P 60 min hr S 60 min h S 60 min day P 24 hour d N 24 hour Julian_year P 365.25 day common_year P 365 day # # --- date --- # # date is NOT time intentionally # pentad P month P 6 pentad mon S month year P 12 month yr S year century P 100 year # # --- area --- # are P 100 m2 a S are hectare P 100 are litre P 1.0e-3 m3 L S litre acre P 10 chain2 ac S acre # # --- angle --- # degree P pi.rad/180 angular_degree P degree minute_angle P pi.rad/180/60 angular_minute P minute_angle second_angle P pi.rad/180/60/60 angular_second P second_angle degree_N S degree degree_E S degree degree_W S degree degree_S S degree degree_north S degree_N degree_east S degree_E degree_west S degree_W degree_south S degree_S degrees_north S degree_N degrees_east S degree_E degrees_west S degree_W degrees_south S degree_S # # --- mass --- # ton P 1000 kg tonne P ton t S ton gram P kg/1000 g S kg/1000 pound P 453.6 g lb S pound ounce P pound / 16 oz S ounce # # --- CGS --- # dyne P g.cm.s-2 dyn S g.cm.s-2 bar S 1e6 dyn.cm-2 mb S bar / 1000 millibar P bar / 1000 gal P cm s-2 Gal S cm s-2 mgal S cm s-2 / 1000 erg S dyn cm erg P dyn cm poise P dyn s / cm2 P S poise stokes P cm2 / s St S stokes gauss P T / 10000 G S gauss # # --- conventional --- # calorie P 4.18605 J cal S calorie kgf S kilogram-force force S 9.80665 m.s-2 knot P nautical_mile / hour horse_power N 75 m kilogram-force / s atmosphere P 101325 Pa atm S atmosphere light_speed N 299792458 m/s mph S mile / hour kph S km / hour torr P 133.322 Pa psi S pound-force / inch2 gravity S 9.806650 meter/second2 conventional_mercury S gravity 13595.10 kg/m3 mercury S conventional_mercury Hg S mercury hg S mercury # # --- meteorological --- # gpm N m numru-units-1.9/src/timenode.rb0000644000175000017500000000546210251514435017120 0ustar horinouthorinoutclass XDate def initialize(year, month, day) @year, @month, @day = year.to_i, month.to_i, day.to_i end attr_reader :year, :month, :day def to_s format('%04d-%02d-%02d', @year, @month, @day) end alias :inspect :to_s def to_time Time.gm(@year, @month, @day) end def to_date Date.new(@year, @month, @day) end def -(other) case other when XDate (to_date - other.to_date) when Time to_time - other when Date (to_date - other.to_date) else to_date - other end end def +(other) t = to_date + other self.class.new(t.year, t.month, t.mday) end end class TimeNode < TerminalNode def initialize(date, time, zone) @date, @time, @zone = date, time, zone if :now === @date then now = Time.now.utc @date = XDate.new(now.year, now.month, now.day) @time = ((now.hour * 60 + now.min) * 60 + Float(now.sec)) else qdays = (@time / 86400).floor if not qdays.zero? @date += qdays @time -= (qdays * 86400) end end raise TypeError unless XDate === @date @time = 0.0 unless @time raise TypeError unless Float === @time @zone = 0 unless @zone raise TypeError unless Integer === @zone end attr_reader :date, :time, :zone def to_s hr = @time.floor / 3600 mi = (@time.floor / 60) % 60 sc = @time % 60 tzm = @zone.abs tzh = tzm / 60 tzm %= 60 tzh = -tzh if @zone < 0 format("%sT%02d:%02d:%05.2f %+03d:%02d", \ @date.to_s, hr, mi, sc, tzh, tzm) end def self::pentad(d) (d > 25) ? 5 : ((d - 1) / 5) end def add_time(increment) inc = increment.reduce5 case inc.name when 's' t2 = @time + inc.factor d2 = @date + (t2 / 86400) t2 = t2 % 86400 self.class.new(d2, t2, @zone) when 'pentad' ifac = Integer(inc.factor) ipen = ifac % 6 imon = ifac / 6 spen = self.class.pentad(@date.day) smon = @date.month + imon + spen / 6 spen = spen % 6 sday = spen * 5 + (@date.day - 1) % 5 + 1 syear = @date.year + (smon - 1) / 12 smon = (smon - 1) % 12 + 1 sdate = XDate.new(syear, smon, sday) self.class.new(sdate, @time, @zone) else raise "bad time unit '#{inc.name}'" end end def utcsod @time - @zone * 60 end def div_time(units) base = units.ref inc = units.deref.reduce5 begin incname = inc.name rescue Exception incname = "(undefined)" end case incname when 's' dif = (@date - base.date) * 86400 + (utcsod - base.utcsod) dif / inc.factor when 'pentad' dif = (@date.year - base.date.year) * 72 dif += (@date.month - base.date.month) * 6 dif += self.class.pentad(@date.day) dif -= self.class.pentad(base.date.day) dif = Float(dif) if dif % inc.factor != 0 dif / inc.factor else raise "bad time unit '#{incname}'" end end end numru-units-1.9/src/units.racc0000644000175000017500000032264712467011742016776 0ustar horinouthorinoutclass NumRu::Units token INT ERR SHIFT SPACE MULTIPLY DIVIDE EXPONENT REAL NAME DATE TIME ZONE options no_result_var rule unit_spec: /* { yyaccept; } */ /* <-- to acccept empty unit_spec */ | origin_exp { val[0] } | error { yyerrok } ; origin_exp: unit_exp | unit_exp SHIFT value_exp { val[0].shift(val[2]) } | unit_exp SHIFT timestamp { val[0].shift(val[2]) } ; unit_exp: power_exp | number_exp | unit_exp power_exp { val[0].mul(val[1]) } | unit_exp MULTIPLY power_exp { val[0].mul(val[2]) } | unit_exp DIVIDE power_exp { val[0].divide(val[2]) } | unit_exp MULTIPLY number_exp { val[0].mul(val[2]) } | unit_exp DIVIDE number_exp { val[0].divide(val[2]) } ; power_exp: NAME { NameNode.new(val[0]) } | power_exp number_exp { val[0].pow(val[1]) } | power_exp EXPONENT value_exp { val[0].pow(val[2]) } | '(' origin_exp ')' { val[1] } ; value_exp: number_exp | '(' value_exp ')' { val[1] } ; number_exp: INT { NumberNode.new(val[0]) } | REAL { NumberNode.new(val[0]) } ; timestamp: time_exp | '(' timestamp ')' { val[1] } ; time_exp: DATE { TimeNode.new(val[0], 0.0, 0) } | DATE TIME { TimeNode.new(val[0], val[1], 0) } | DATE TIME ZONE { TimeNode.new(val[0], val[1], val[2]) } ; end ---- header require 'date' ---- inner VERSION = "1.9" =begin = class Node Node is a parent class for classes of parse tree node. This is not expected to be instanciated directly. =end class Node def initialize(*args) raise "#{self.class} is virtual." end def to_s(*args) raise "#{self.class}#to_s is virtual." end =begin --- pow other simply constructs a PowNode object. No reduction is performed. =end def pow(other) PowNode.new(self, other) end =begin --- mul other simply constructs a MulNode object. No reduction is performed. =end def mul(other) other = NumberNode.new(other) if Numeric === other MulNode.new(self, other) end =begin --- divide other simply constructs a MulNode object. No reduction is performed. =end def divide(other) MulNode.new(self, PowNode.new(other, NumberNode.new(-1))) end =begin --- shift other simply constructs a ShiftNode object. No reduction is performed. =end def shift(other) ShiftNode.new(self, other) end =begin --- pow_eval other similar to (()), but reduces PowNode[PowNode[...]] into single PowNode[...], so overriden at PowNode class. =end def pow_eval(other) pow(other) end =begin --- inspect =end def inspect2; "#{self.class}[#{to_s}]"; end def inspect; inspect2.gsub(/Units::/, '').gsub(/NumRu::/, '').gsub(/Node\[/, '['); end =begin --- trim in most subclasses, "trim" is redirected into "trim2". =end def trim trim2 end =begin --- flatten in most subclasses, "flatten" is redirected into "flatten2". =end def flatten flatten2 end =begin --- sort =end def sort raise "#{self.class}#sort is virtual: call after flatten" end =begin --- reduce1 --- reduce2 --- reduce3 --- reduce4 --- reduce5 =end def reduce1 self end def reduce2 trim end def reduce3 trim.flatten end def reduce4 # unalias(Hash.new).trim.flatten.sort foldnumber(nil).trim.flatten.sort end def reduce5 expand(Hash.new).trim.flatten.sort end =begin --- ref to be overriden at ShiftNode --- deref to be overriden at ShiftNode =end def ref NumberNode::ZERO end def deref self end end class ErrorNode < Node def initialize(string) @a = string end def to_s; @a; end end class ContainerNode < Node def trim2 x = [] for child in self x.push child.trim2 end self.class.new(*x) end def inspect2 a = [] for child in self a.push child.inspect2 end "#{self.class}[#{a.join(', ')}]" end end module BinaryNode def each yield @lhs yield @rhs end def expand(stopper) self.class.new(@lhs.expand(stopper), @rhs.expand(stopper)) end def unalias(stopper) self.class.new(@lhs.unalias(stopper), @rhs.unalias(stopper)) end def foldnumber(stopper) self.class.new(@lhs.foldnumber(stopper), @rhs.foldnumber(stopper)) end end class TerminalNode < Node def trim2; self; end def flatten2; self; end def expand(stopper); self; end alias :unalias :expand alias :foldnumber :expand def sort; self; end end class NameNode < TerminalNode def initialize(string) @a = string end def to_s; @a; end alias :name :to_s def power; NumberNode::UNITY; end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name PowNode.new(self, self.power.add_eval(another.power)) end def expand(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self if basic? return CACHE[@a] if CACHE.include?(@a) CACHE[@a] = expand2(stopper) end def expand2(stopper) newstopper = stopper.dup newstopper[@a] = true if UDEFS.include?(@a) then Units.new(UDEFS[@a]).ptree.expand(newstopper) else p, n = UALIASES[@a] u = Units.new(UDEFS[n] || n).ptree.expand(newstopper) MulNode.new(u, PowNode.new(NumberNode.new(10), NumberNode.new(p))) end end def unalias(stopper) raise "circular dependency for #{@a}" if stopper[@a] return self unless UALIASES.include?(@a) p, n = UALIASES[@a] u = NameNode.new(n) q = PowNode.new(NumberNode.new(10), NumberNode.new(p)) MulNode.new(u, q) end def foldnumber(stopper) return self unless UPLURALS.include?(@a) n = UPLURALS[@a] NameNode.new(n) end def basic? not (UDEFS.include?(@a) or UALIASES.include?(@a)) end CACHE = {} def factor 1 end end class NameNode UDEFS = { "%" => "1e-2", "Au" => "astronomical_unit", "Bq" => "s-1", "C" => "A.s", "Celsius" => "K @ 273.15", "F" => "C/V", "Fahrenheit" => "degree_F", "G" => "gauss", "Gal" => "cm s-2", "Gy" => "J.kg-1", "H" => "Wb.A-1", "Hg" => "mercury", "Hz" => "1/s", "J" => "N.m", "Julian_year" => "365.25 day", "L" => "litre", "N" => "kg.m.s-2", "P" => "poise", "Pa" => "N.m-2", "Pascal" => "Pa", "S" => "A/V", "St" => "stokes", "Sv" => "J.kg-1", "T" => "Wb.m-2", "V" => "J/C", "W" => "J/s", "Wb" => "V.s", "a" => "are", "ac" => "acre", "acre" => "10 chain2", "ampere" => "A", "angstrom" => "1.0e-10 m", "angular_degree" => "degree", "angular_minute" => "minute_angle", "angular_second" => "second_angle", "are" => "100 m2", "astronomical_unit" => "1.49597870e11 m", "astronomical_units" => "1.49597870e11 m", "atm" => "atmosphere", "atmosphere" => "101325 Pa", "bar" => "1e6 dyn.cm-2", "cal" => "calorie", "calorie" => "4.18605 J", "candela" => "cd", "celsius" => "K @ 273.15", "centigrade" => "K @ 273.15", "century" => "100 year", "chain" => "22 yard", "common_year" => "365 day", "conventional_mercury" => "gravity 13595.10 kg/m3", "coulomb" => "C", "d" => "24 hour", "day" => "24 hour", "degC" => "K @ 273.15", "degF" => "degree_F", "degK" => "K", "deg_C" => "K @ 273.15", "deg_F" => "degree_F", "deg_K" => "K", "degree" => "pi.rad/180", "degreeC" => "K @ 273.15", "degreeF" => "degree_F", "degreeK" => "K", "degree_C" => "K @ 273.15", "degree_E" => "degree", "degree_F" => "degree_R @ 459.67", "degree_N" => "degree", "degree_R" => "K / 1.8", "degree_S" => "degree", "degree_W" => "degree", "degree_c" => "K @ 273.15", "degree_east" => "degree_E", "degree_f" => "degree_R @ 459.67", "degree_north" => "degree_N", "degree_south" => "degree_S", "degree_west" => "degree_W", "degrees_east" => "degree_E", "degrees_north" => "degree_N", "degrees_south" => "degree_S", "degrees_west" => "degree_W", "dyn" => "g.cm.s-2", "dyne" => "g.cm.s-2", "erg" => "dyn cm", "fahrenheit" => "degree_F", "farad" => "coulomb/volt", "feet" => "foot", "fermi" => "1.0e-15 m", "foot" => "12 inch", "force" => "9.80665 m.s-2", "ft" => "foot", "g" => "kg/1000", "gal" => "cm s-2", "gauss" => "T / 10000", "gpm" => "m", "gram" => "kg/1000", "gravity" => "9.806650 meter/second2", "h" => "60 min", "hectare" => "100 are", "hertz" => "Hz", "hg" => "mercury", "horse_power" => "75 m kilogram-force / s", "hour" => "60 min", "hr" => "60 min", "in" => "inch", "inch" => "2.54 cm", "joule" => "J", "kelvin" => "K", "kgf" => "kilogram-force", "kilogram" => "kg", "knot" => "nautical_mile / hour", "kph" => "km / hour", "lb" => "pound", "light_speed" => "299792458 m/s", "light_year" => "9.46e15 m", "light_years" => "9.46e15 m", "litre" => "1.0e-3 m3", "lm" => "cd.sr", "lx" => "lm.m-2", "ly" => "light_year", "mb" => "bar / 1000", "mercury" => "conventional_mercury", "meter" => "metre", "metre" => "m", "mgal" => "cm s-2 / 1000", "micron" => "1.0e-6 m", "mile" => "1760 yard", "millibar" => "bar / 1000", "min" => "60 s", "minute" => "60 s", "minute_angle" => "pi.rad/180/60", "mole" => "mol", "mon" => "month", "month" => "6 pentad", "mph" => "mile / hour", "nautical_mile" => "1852 m", "nautical_miles" => "1852 m", "newton" => "N", "ohm" => "V/A", "ounce" => "pound / 16", "oz" => "ounce", "parsec" => "3.0857e16 m", "pascal" => "Pa", "pc" => "parsec", "percent" => "1e-2", "permil" => "1e-3", "pi" => "3.141592653589793238462", "poise" => "dyn s / cm2", "pound" => "453.6 g", "psi" => "pound-force / inch2", "radian" => "rad", "second" => "s", "second_angle" => "pi.rad/180/60/60", "steradian" => "sr", "stokes" => "cm2 / s", "t" => "ton", "tesla" => "Wb.m-2", "ton" => "1000 kg", "tonne" => "ton", "torr" => "133.322 Pa", "volt" => "V", "watt" => "W", "weber" => "Wb", "yard" => "6 feet", "yd" => "yard", "year" => "12 month", "yr" => "year", } UALIASES = { "Celsiuses" => [0, "Celsius"], "EA" => [18, "A"], "EAu" => [18, "Au"], "EBq" => [18, "Bq"], "EC" => [18, "C"], "EF" => [18, "F"], "EG" => [18, "G"], "EGal" => [18, "Gal"], "EGy" => [18, "Gy"], "EH" => [18, "H"], "EHg" => [18, "Hg"], "EHz" => [18, "Hz"], "EJ" => [18, "J"], "EK" => [18, "K"], "EL" => [18, "L"], "EN" => [18, "N"], "EP" => [18, "P"], "EPa" => [18, "Pa"], "ES" => [18, "S"], "ESt" => [18, "St"], "ESv" => [18, "Sv"], "ET" => [18, "T"], "EV" => [18, "V"], "EW" => [18, "W"], "EWb" => [18, "Wb"], "Ea" => [18, "a"], "Eac" => [18, "ac"], "Eatm" => [18, "atm"], "Ebar" => [18, "bar"], "Ecal" => [18, "cal"], "Ecd" => [18, "cd"], "Econventional_mercury" => [18, "conventional_mercury"], "EdegC" => [18, "degC"], "EdegF" => [18, "degF"], "Edeg_C" => [18, "deg_C"], "Edeg_F" => [18, "deg_F"], "EdegreeC" => [18, "degreeC"], "EdegreeF" => [18, "degreeF"], "Edegree_C" => [18, "degree_C"], "Edegree_E" => [18, "degree_E"], "Edegree_F" => [18, "degree_F"], "Edegree_N" => [18, "degree_N"], "Edegree_R" => [18, "degree_R"], "Edegree_S" => [18, "degree_S"], "Edegree_W" => [18, "degree_W"], "Edegree_c" => [18, "degree_c"], "Edegree_east" => [18, "degree_east"], "Edegree_f" => [18, "degree_f"], "Edegree_north" => [18, "degree_north"], "Edegree_south" => [18, "degree_south"], "Edegree_west" => [18, "degree_west"], "Edegrees_east" => [18, "degrees_east"], "Edegrees_north" => [18, "degrees_north"], "Edegrees_south" => [18, "degrees_south"], "Edegrees_west" => [18, "degrees_west"], "Edyn" => [18, "dyn"], "Eerg" => [18, "erg"], "Eforce" => [18, "force"], "Eg" => [18, "g"], "Egravity" => [18, "gravity"], "Eh" => [18, "h"], "Ehg" => [18, "hg"], "Ehr" => [18, "hr"], "Ein" => [18, "in"], "Ekgf" => [18, "kgf"], "Ekph" => [18, "kph"], "Elb" => [18, "lb"], "Elm" => [18, "lm"], "Elx" => [18, "lx"], "Ely" => [18, "ly"], "Em" => [18, "m"], "Emb" => [18, "mb"], "Emercury" => [18, "mercury"], "Emgal" => [18, "mgal"], "Emin" => [18, "min"], "Emol" => [18, "mol"], "Emon" => [18, "mon"], "Emph" => [18, "mph"], "Eohm" => [18, "ohm"], "Eoz" => [18, "oz"], "Epc" => [18, "pc"], "Epsi" => [18, "psi"], "Erad" => [18, "rad"], "Es" => [18, "s"], "Esr" => [18, "sr"], "Et" => [18, "t"], "Eyr" => [18, "yr"], "Fahrenheits" => [0, "Fahrenheit"], "GA" => [9, "A"], "GAu" => [9, "Au"], "GBq" => [9, "Bq"], "GC" => [9, "C"], "GF" => [9, "F"], "GG" => [9, "G"], "GGal" => [9, "Gal"], "GGy" => [9, "Gy"], "GH" => [9, "H"], "GHg" => [9, "Hg"], "GHz" => [9, "Hz"], "GJ" => [9, "J"], "GK" => [9, "K"], "GL" => [9, "L"], "GN" => [9, "N"], "GP" => [9, "P"], "GPa" => [9, "Pa"], "GS" => [9, "S"], "GSt" => [9, "St"], "GSv" => [9, "Sv"], "GT" => [9, "T"], "GV" => [9, "V"], "GW" => [9, "W"], "GWb" => [9, "Wb"], "Ga" => [9, "a"], "Gac" => [9, "ac"], "Gatm" => [9, "atm"], "Gbar" => [9, "bar"], "Gcal" => [9, "cal"], "Gcd" => [9, "cd"], "Gconventional_mercury" => [9, "conventional_mercury"], "GdegC" => [9, "degC"], "GdegF" => [9, "degF"], "Gdeg_C" => [9, "deg_C"], "Gdeg_F" => [9, "deg_F"], "GdegreeC" => [9, "degreeC"], "GdegreeF" => [9, "degreeF"], "Gdegree_C" => [9, "degree_C"], "Gdegree_E" => [9, "degree_E"], "Gdegree_F" => [9, "degree_F"], "Gdegree_N" => [9, "degree_N"], "Gdegree_R" => [9, "degree_R"], "Gdegree_S" => [9, "degree_S"], "Gdegree_W" => [9, "degree_W"], "Gdegree_c" => [9, "degree_c"], "Gdegree_east" => [9, "degree_east"], "Gdegree_f" => [9, "degree_f"], "Gdegree_north" => [9, "degree_north"], "Gdegree_south" => [9, "degree_south"], "Gdegree_west" => [9, "degree_west"], "Gdegrees_east" => [9, "degrees_east"], "Gdegrees_north" => [9, "degrees_north"], "Gdegrees_south" => [9, "degrees_south"], "Gdegrees_west" => [9, "degrees_west"], "Gdyn" => [9, "dyn"], "Gerg" => [9, "erg"], "Gforce" => [9, "force"], "Gg" => [9, "g"], "Ggravity" => [9, "gravity"], "Gh" => [9, "h"], "Ghg" => [9, "hg"], "Ghr" => [9, "hr"], "Gin" => [9, "in"], "Gkgf" => [9, "kgf"], "Gkph" => [9, "kph"], "Glb" => [9, "lb"], "Glm" => [9, "lm"], "Glx" => [9, "lx"], "Gly" => [9, "ly"], "Gm" => [9, "m"], "Gmb" => [9, "mb"], "Gmercury" => [9, "mercury"], "Gmgal" => [9, "mgal"], "Gmin" => [9, "min"], "Gmol" => [9, "mol"], "Gmon" => [9, "mon"], "Gmph" => [9, "mph"], "Gohm" => [9, "ohm"], "Goz" => [9, "oz"], "Gpc" => [9, "pc"], "Gpsi" => [9, "psi"], "Grad" => [9, "rad"], "Gs" => [9, "s"], "Gsr" => [9, "sr"], "Gt" => [9, "t"], "Gyr" => [9, "yr"], "Julians_year" => [0, "Julian_year"], "MA" => [6, "A"], "MAu" => [6, "Au"], "MBq" => [6, "Bq"], "MC" => [6, "C"], "MF" => [6, "F"], "MG" => [6, "G"], "MGal" => [6, "Gal"], "MGy" => [6, "Gy"], "MH" => [6, "H"], "MHg" => [6, "Hg"], "MHz" => [6, "Hz"], "MJ" => [6, "J"], "MK" => [6, "K"], "ML" => [6, "L"], "MN" => [6, "N"], "MP" => [6, "P"], "MPa" => [6, "Pa"], "MS" => [6, "S"], "MSt" => [6, "St"], "MSv" => [6, "Sv"], "MT" => [6, "T"], "MV" => [6, "V"], "MW" => [6, "W"], "MWb" => [6, "Wb"], "Ma" => [6, "a"], "Mac" => [6, "ac"], "Matm" => [6, "atm"], "Mbar" => [6, "bar"], "Mcal" => [6, "cal"], "Mcd" => [6, "cd"], "Mconventional_mercury" => [6, "conventional_mercury"], "MdegC" => [6, "degC"], "MdegF" => [6, "degF"], "Mdeg_C" => [6, "deg_C"], "Mdeg_F" => [6, "deg_F"], "MdegreeC" => [6, "degreeC"], "MdegreeF" => [6, "degreeF"], "Mdegree_C" => [6, "degree_C"], "Mdegree_E" => [6, "degree_E"], "Mdegree_F" => [6, "degree_F"], "Mdegree_N" => [6, "degree_N"], "Mdegree_R" => [6, "degree_R"], "Mdegree_S" => [6, "degree_S"], "Mdegree_W" => [6, "degree_W"], "Mdegree_c" => [6, "degree_c"], "Mdegree_east" => [6, "degree_east"], "Mdegree_f" => [6, "degree_f"], "Mdegree_north" => [6, "degree_north"], "Mdegree_south" => [6, "degree_south"], "Mdegree_west" => [6, "degree_west"], "Mdegrees_east" => [6, "degrees_east"], "Mdegrees_north" => [6, "degrees_north"], "Mdegrees_south" => [6, "degrees_south"], "Mdegrees_west" => [6, "degrees_west"], "Mdyn" => [6, "dyn"], "Merg" => [6, "erg"], "Mforce" => [6, "force"], "Mg" => [6, "g"], "Mgravity" => [6, "gravity"], "Mh" => [6, "h"], "Mhg" => [6, "hg"], "Mhr" => [6, "hr"], "Min" => [6, "in"], "Mkgf" => [6, "kgf"], "Mkph" => [6, "kph"], "Mlb" => [6, "lb"], "Mlm" => [6, "lm"], "Mlx" => [6, "lx"], "Mly" => [6, "ly"], "Mm" => [6, "m"], "Mmb" => [6, "mb"], "Mmercury" => [6, "mercury"], "Mmgal" => [6, "mgal"], "Mmin" => [6, "min"], "Mmol" => [6, "mol"], "Mmon" => [6, "mon"], "Mmph" => [6, "mph"], "Mohm" => [6, "ohm"], "Moz" => [6, "oz"], "Mpc" => [6, "pc"], "Mpsi" => [6, "psi"], "Mrad" => [6, "rad"], "Ms" => [6, "s"], "Msr" => [6, "sr"], "Mt" => [6, "t"], "Myr" => [6, "yr"], "PA" => [15, "A"], "PAu" => [15, "Au"], "PBq" => [15, "Bq"], "PC" => [15, "C"], "PF" => [15, "F"], "PG" => [15, "G"], "PGal" => [15, "Gal"], "PGy" => [15, "Gy"], "PH" => [15, "H"], "PHg" => [15, "Hg"], "PHz" => [15, "Hz"], "PJ" => [15, "J"], "PK" => [15, "K"], "PL" => [15, "L"], "PN" => [15, "N"], "PP" => [15, "P"], "PPa" => [15, "Pa"], "PS" => [15, "S"], "PSt" => [15, "St"], "PSv" => [15, "Sv"], "PT" => [15, "T"], "PV" => [15, "V"], "PW" => [15, "W"], "PWb" => [15, "Wb"], "Pa" => [15, "a"], "Pac" => [15, "ac"], "Pascals" => [0, "Pascal"], "Patm" => [15, "atm"], "Pbar" => [15, "bar"], "Pcal" => [15, "cal"], "Pcd" => [15, "cd"], "Pconventional_mercury" => [15, "conventional_mercury"], "PdegC" => [15, "degC"], "PdegF" => [15, "degF"], "Pdeg_C" => [15, "deg_C"], "Pdeg_F" => [15, "deg_F"], "PdegreeC" => [15, "degreeC"], "PdegreeF" => [15, "degreeF"], "Pdegree_C" => [15, "degree_C"], "Pdegree_E" => [15, "degree_E"], "Pdegree_F" => [15, "degree_F"], "Pdegree_N" => [15, "degree_N"], "Pdegree_R" => [15, "degree_R"], "Pdegree_S" => [15, "degree_S"], "Pdegree_W" => [15, "degree_W"], "Pdegree_c" => [15, "degree_c"], "Pdegree_east" => [15, "degree_east"], "Pdegree_f" => [15, "degree_f"], "Pdegree_north" => [15, "degree_north"], "Pdegree_south" => [15, "degree_south"], "Pdegree_west" => [15, "degree_west"], "Pdegrees_east" => [15, "degrees_east"], "Pdegrees_north" => [15, "degrees_north"], "Pdegrees_south" => [15, "degrees_south"], "Pdegrees_west" => [15, "degrees_west"], "Pdyn" => [15, "dyn"], "Perg" => [15, "erg"], "Pforce" => [15, "force"], "Pg" => [15, "g"], "Pgravity" => [15, "gravity"], "Ph" => [15, "h"], "Phg" => [15, "hg"], "Phr" => [15, "hr"], "Pin" => [15, "in"], "Pkgf" => [15, "kgf"], "Pkph" => [15, "kph"], "Plb" => [15, "lb"], "Plm" => [15, "lm"], "Plx" => [15, "lx"], "Ply" => [15, "ly"], "Pm" => [15, "m"], "Pmb" => [15, "mb"], "Pmercury" => [15, "mercury"], "Pmgal" => [15, "mgal"], "Pmin" => [15, "min"], "Pmol" => [15, "mol"], "Pmon" => [15, "mon"], "Pmph" => [15, "mph"], "Pohm" => [15, "ohm"], "Poz" => [15, "oz"], "Ppc" => [15, "pc"], "Ppsi" => [15, "psi"], "Prad" => [15, "rad"], "Ps" => [15, "s"], "Psr" => [15, "sr"], "Pt" => [15, "t"], "Pyr" => [15, "yr"], "TA" => [12, "A"], "TAu" => [12, "Au"], "TBq" => [12, "Bq"], "TC" => [12, "C"], "TF" => [12, "F"], "TG" => [12, "G"], "TGal" => [12, "Gal"], "TGy" => [12, "Gy"], "TH" => [12, "H"], "THg" => [12, "Hg"], "THz" => [12, "Hz"], "TJ" => [12, "J"], "TK" => [12, "K"], "TL" => [12, "L"], "TN" => [12, "N"], "TP" => [12, "P"], "TPa" => [12, "Pa"], "TS" => [12, "S"], "TSt" => [12, "St"], "TSv" => [12, "Sv"], "TT" => [12, "T"], "TV" => [12, "V"], "TW" => [12, "W"], "TWb" => [12, "Wb"], "Ta" => [12, "a"], "Tac" => [12, "ac"], "Tatm" => [12, "atm"], "Tbar" => [12, "bar"], "Tcal" => [12, "cal"], "Tcd" => [12, "cd"], "Tconventional_mercury" => [12, "conventional_mercury"], "TdegC" => [12, "degC"], "TdegF" => [12, "degF"], "Tdeg_C" => [12, "deg_C"], "Tdeg_F" => [12, "deg_F"], "TdegreeC" => [12, "degreeC"], "TdegreeF" => [12, "degreeF"], "Tdegree_C" => [12, "degree_C"], "Tdegree_E" => [12, "degree_E"], "Tdegree_F" => [12, "degree_F"], "Tdegree_N" => [12, "degree_N"], "Tdegree_R" => [12, "degree_R"], "Tdegree_S" => [12, "degree_S"], "Tdegree_W" => [12, "degree_W"], "Tdegree_c" => [12, "degree_c"], "Tdegree_east" => [12, "degree_east"], "Tdegree_f" => [12, "degree_f"], "Tdegree_north" => [12, "degree_north"], "Tdegree_south" => [12, "degree_south"], "Tdegree_west" => [12, "degree_west"], "Tdegrees_east" => [12, "degrees_east"], "Tdegrees_north" => [12, "degrees_north"], "Tdegrees_south" => [12, "degrees_south"], "Tdegrees_west" => [12, "degrees_west"], "Tdyn" => [12, "dyn"], "Terg" => [12, "erg"], "Tforce" => [12, "force"], "Tg" => [12, "g"], "Tgravity" => [12, "gravity"], "Th" => [12, "h"], "Thg" => [12, "hg"], "Thr" => [12, "hr"], "Tin" => [12, "in"], "Tkgf" => [12, "kgf"], "Tkph" => [12, "kph"], "Tlb" => [12, "lb"], "Tlm" => [12, "lm"], "Tlx" => [12, "lx"], "Tly" => [12, "ly"], "Tm" => [12, "m"], "Tmb" => [12, "mb"], "Tmercury" => [12, "mercury"], "Tmgal" => [12, "mgal"], "Tmin" => [12, "min"], "Tmol" => [12, "mol"], "Tmon" => [12, "mon"], "Tmph" => [12, "mph"], "Tohm" => [12, "ohm"], "Toz" => [12, "oz"], "Tpc" => [12, "pc"], "Tpsi" => [12, "psi"], "Trad" => [12, "rad"], "Ts" => [12, "s"], "Tsr" => [12, "sr"], "Tt" => [12, "t"], "Tyr" => [12, "yr"], "aA" => [-18, "A"], "aAu" => [-18, "Au"], "aBq" => [-18, "Bq"], "aC" => [-18, "C"], "aF" => [-18, "F"], "aG" => [-18, "G"], "aGal" => [-18, "Gal"], "aGy" => [-18, "Gy"], "aH" => [-18, "H"], "aHg" => [-18, "Hg"], "aHz" => [-18, "Hz"], "aJ" => [-18, "J"], "aK" => [-18, "K"], "aL" => [-18, "L"], "aN" => [-18, "N"], "aP" => [-18, "P"], "aPa" => [-18, "Pa"], "aS" => [-18, "S"], "aSt" => [-18, "St"], "aSv" => [-18, "Sv"], "aT" => [-18, "T"], "aV" => [-18, "V"], "aW" => [-18, "W"], "aWb" => [-18, "Wb"], "aa" => [-18, "a"], "aac" => [-18, "ac"], "aatm" => [-18, "atm"], "abar" => [-18, "bar"], "acal" => [-18, "cal"], "acd" => [-18, "cd"], "aconventional_mercury" => [-18, "conventional_mercury"], "acres" => [0, "acre"], "adegC" => [-18, "degC"], "adegF" => [-18, "degF"], "adeg_C" => [-18, "deg_C"], "adeg_F" => [-18, "deg_F"], "adegreeC" => [-18, "degreeC"], "adegreeF" => [-18, "degreeF"], "adegree_C" => [-18, "degree_C"], "adegree_E" => [-18, "degree_E"], "adegree_F" => [-18, "degree_F"], "adegree_N" => [-18, "degree_N"], "adegree_R" => [-18, "degree_R"], "adegree_S" => [-18, "degree_S"], "adegree_W" => [-18, "degree_W"], "adegree_c" => [-18, "degree_c"], "adegree_east" => [-18, "degree_east"], "adegree_f" => [-18, "degree_f"], "adegree_north" => [-18, "degree_north"], "adegree_south" => [-18, "degree_south"], "adegree_west" => [-18, "degree_west"], "adegrees_east" => [-18, "degrees_east"], "adegrees_north" => [-18, "degrees_north"], "adegrees_south" => [-18, "degrees_south"], "adegrees_west" => [-18, "degrees_west"], "adyn" => [-18, "dyn"], "aerg" => [-18, "erg"], "aforce" => [-18, "force"], "ag" => [-18, "g"], "agravity" => [-18, "gravity"], "ah" => [-18, "h"], "ahg" => [-18, "hg"], "ahr" => [-18, "hr"], "ain" => [-18, "in"], "akgf" => [-18, "kgf"], "akph" => [-18, "kph"], "alb" => [-18, "lb"], "alm" => [-18, "lm"], "alx" => [-18, "lx"], "aly" => [-18, "ly"], "am" => [-18, "m"], "amb" => [-18, "mb"], "amercury" => [-18, "mercury"], "amgal" => [-18, "mgal"], "amin" => [-18, "min"], "amol" => [-18, "mol"], "amon" => [-18, "mon"], "amperes" => [0, "ampere"], "amph" => [-18, "mph"], "angstroms" => [0, "angstrom"], "angulars_degree" => [0, "angular_degree"], "angulars_minute" => [0, "angular_minute"], "angulars_second" => [0, "angular_second"], "aohm" => [-18, "ohm"], "aoz" => [-18, "oz"], "apc" => [-18, "pc"], "apsi" => [-18, "psi"], "arad" => [-18, "rad"], "ares" => [0, "are"], "as" => [-18, "s"], "asr" => [-18, "sr"], "at" => [-18, "t"], "atmospheres" => [0, "atmosphere"], "attoCelsius" => [-18, "Celsius"], "attoFahrenheit" => [-18, "Fahrenheit"], "attoJulian_year" => [-18, "Julian_year"], "attoPascal" => [-18, "Pascal"], "attoacre" => [-18, "acre"], "attoampere" => [-18, "ampere"], "attoangstrom" => [-18, "angstrom"], "attoangular_degree" => [-18, "angular_degree"], "attoangular_minute" => [-18, "angular_minute"], "attoangular_second" => [-18, "angular_second"], "attoare" => [-18, "are"], "attoatmosphere" => [-18, "atmosphere"], "attocalorie" => [-18, "calorie"], "attocandela" => [-18, "candela"], "attocelsius" => [-18, "celsius"], "attocentigrade" => [-18, "centigrade"], "attocentury" => [-18, "century"], "attochain" => [-18, "chain"], "attocommon_year" => [-18, "common_year"], "attocoulomb" => [-18, "coulomb"], "attoday" => [-18, "day"], "attodegK" => [-18, "degK"], "attodeg_K" => [-18, "deg_K"], "attodegree" => [-18, "degree"], "attodegreeK" => [-18, "degreeK"], "attodyne" => [-18, "dyne"], "attoerg" => [-18, "erg"], "attofahrenheit" => [-18, "fahrenheit"], "attofarad" => [-18, "farad"], "attofermi" => [-18, "fermi"], "attogal" => [-18, "gal"], "attogauss" => [-18, "gauss"], "attogram" => [-18, "gram"], "attohectare" => [-18, "hectare"], "attohertz" => [-18, "hertz"], "attohour" => [-18, "hour"], "attoinch" => [-18, "inch"], "attojoule" => [-18, "joule"], "attokelvin" => [-18, "kelvin"], "attokilogram" => [-18, "kilogram"], "attoknot" => [-18, "knot"], "attolitre" => [-18, "litre"], "attometer" => [-18, "meter"], "attometre" => [-18, "metre"], "attomicron" => [-18, "micron"], "attomile" => [-18, "mile"], "attomillibar" => [-18, "millibar"], "attominute" => [-18, "minute"], "attominute_angle" => [-18, "minute_angle"], "attomole" => [-18, "mole"], "attomonth" => [-18, "month"], "attonewton" => [-18, "newton"], "attoounce" => [-18, "ounce"], "attoparsec" => [-18, "parsec"], "attopascal" => [-18, "pascal"], "attopentad" => [-18, "pentad"], "attopercent" => [-18, "percent"], "attopoise" => [-18, "poise"], "attopound" => [-18, "pound"], "attoradian" => [-18, "radian"], "attosecond" => [-18, "second"], "attosecond_angle" => [-18, "second_angle"], "attosteradian" => [-18, "steradian"], "attostokes" => [-18, "stokes"], "attotesla" => [-18, "tesla"], "attoton" => [-18, "ton"], "attotonne" => [-18, "tonne"], "attotorr" => [-18, "torr"], "attovolt" => [-18, "volt"], "attowatt" => [-18, "watt"], "attoweber" => [-18, "weber"], "attoyard" => [-18, "yard"], "attoyd" => [-18, "yd"], "attoyear" => [-18, "year"], "ayr" => [-18, "yr"], "cA" => [-2, "A"], "cAu" => [-2, "Au"], "cBq" => [-2, "Bq"], "cC" => [-2, "C"], "cF" => [-2, "F"], "cG" => [-2, "G"], "cGal" => [-2, "Gal"], "cGy" => [-2, "Gy"], "cH" => [-2, "H"], "cHg" => [-2, "Hg"], "cHz" => [-2, "Hz"], "cJ" => [-2, "J"], "cK" => [-2, "K"], "cL" => [-2, "L"], "cN" => [-2, "N"], "cP" => [-2, "P"], "cPa" => [-2, "Pa"], "cS" => [-2, "S"], "cSt" => [-2, "St"], "cSv" => [-2, "Sv"], "cT" => [-2, "T"], "cV" => [-2, "V"], "cW" => [-2, "W"], "cWb" => [-2, "Wb"], "ca" => [-2, "a"], "cac" => [-2, "ac"], "calories" => [0, "calorie"], "candelas" => [0, "candela"], "catm" => [-2, "atm"], "cbar" => [-2, "bar"], "ccal" => [-2, "cal"], "ccd" => [-2, "cd"], "cconventional_mercury" => [-2, "conventional_mercury"], "cdegC" => [-2, "degC"], "cdegF" => [-2, "degF"], "cdeg_C" => [-2, "deg_C"], "cdeg_F" => [-2, "deg_F"], "cdegreeC" => [-2, "degreeC"], "cdegreeF" => [-2, "degreeF"], "cdegree_C" => [-2, "degree_C"], "cdegree_E" => [-2, "degree_E"], "cdegree_F" => [-2, "degree_F"], "cdegree_N" => [-2, "degree_N"], "cdegree_R" => [-2, "degree_R"], "cdegree_S" => [-2, "degree_S"], "cdegree_W" => [-2, "degree_W"], "cdegree_c" => [-2, "degree_c"], "cdegree_east" => [-2, "degree_east"], "cdegree_f" => [-2, "degree_f"], "cdegree_north" => [-2, "degree_north"], "cdegree_south" => [-2, "degree_south"], "cdegree_west" => [-2, "degree_west"], "cdegrees_east" => [-2, "degrees_east"], "cdegrees_north" => [-2, "degrees_north"], "cdegrees_south" => [-2, "degrees_south"], "cdegrees_west" => [-2, "degrees_west"], "cdyn" => [-2, "dyn"], "celsiuses" => [0, "celsius"], "centiCelsius" => [-2, "Celsius"], "centiFahrenheit" => [-2, "Fahrenheit"], "centiJulian_year" => [-2, "Julian_year"], "centiPascal" => [-2, "Pascal"], "centiacre" => [-2, "acre"], "centiampere" => [-2, "ampere"], "centiangstrom" => [-2, "angstrom"], "centiangular_degree" => [-2, "angular_degree"], "centiangular_minute" => [-2, "angular_minute"], "centiangular_second" => [-2, "angular_second"], "centiare" => [-2, "are"], "centiatmosphere" => [-2, "atmosphere"], "centicalorie" => [-2, "calorie"], "centicandela" => [-2, "candela"], "centicelsius" => [-2, "celsius"], "centicentigrade" => [-2, "centigrade"], "centicentury" => [-2, "century"], "centichain" => [-2, "chain"], "centicommon_year" => [-2, "common_year"], "centicoulomb" => [-2, "coulomb"], "centiday" => [-2, "day"], "centidegK" => [-2, "degK"], "centideg_K" => [-2, "deg_K"], "centidegree" => [-2, "degree"], "centidegreeK" => [-2, "degreeK"], "centidyne" => [-2, "dyne"], "centierg" => [-2, "erg"], "centifahrenheit" => [-2, "fahrenheit"], "centifarad" => [-2, "farad"], "centifermi" => [-2, "fermi"], "centigal" => [-2, "gal"], "centigauss" => [-2, "gauss"], "centigrades" => [0, "centigrade"], "centigram" => [-2, "gram"], "centihectare" => [-2, "hectare"], "centihertz" => [-2, "hertz"], "centihour" => [-2, "hour"], "centiinch" => [-2, "inch"], "centijoule" => [-2, "joule"], "centikelvin" => [-2, "kelvin"], "centikilogram" => [-2, "kilogram"], "centiknot" => [-2, "knot"], "centilitre" => [-2, "litre"], "centimeter" => [-2, "meter"], "centimetre" => [-2, "metre"], "centimicron" => [-2, "micron"], "centimile" => [-2, "mile"], "centimillibar" => [-2, "millibar"], "centiminute" => [-2, "minute"], "centiminute_angle" => [-2, "minute_angle"], "centimole" => [-2, "mole"], "centimonth" => [-2, "month"], "centinewton" => [-2, "newton"], "centiounce" => [-2, "ounce"], "centiparsec" => [-2, "parsec"], "centipascal" => [-2, "pascal"], "centipentad" => [-2, "pentad"], "centipercent" => [-2, "percent"], "centipoise" => [-2, "poise"], "centipound" => [-2, "pound"], "centiradian" => [-2, "radian"], "centisecond" => [-2, "second"], "centisecond_angle" => [-2, "second_angle"], "centisteradian" => [-2, "steradian"], "centistokes" => [-2, "stokes"], "centitesla" => [-2, "tesla"], "centiton" => [-2, "ton"], "centitonne" => [-2, "tonne"], "centitorr" => [-2, "torr"], "centivolt" => [-2, "volt"], "centiwatt" => [-2, "watt"], "centiweber" => [-2, "weber"], "centiyard" => [-2, "yard"], "centiyd" => [-2, "yd"], "centiyear" => [-2, "year"], "centuries" => [0, "century"], "cerg" => [-2, "erg"], "cforce" => [-2, "force"], "cg" => [-2, "g"], "cgravity" => [-2, "gravity"], "ch" => [-2, "h"], "chains" => [0, "chain"], "chg" => [-2, "hg"], "chr" => [-2, "hr"], "cin" => [-2, "in"], "ckgf" => [-2, "kgf"], "ckph" => [-2, "kph"], "clb" => [-2, "lb"], "clm" => [-2, "lm"], "clx" => [-2, "lx"], "cly" => [-2, "ly"], "cm" => [-2, "m"], "cmb" => [-2, "mb"], "cmercury" => [-2, "mercury"], "cmgal" => [-2, "mgal"], "cmin" => [-2, "min"], "cmol" => [-2, "mol"], "cmon" => [-2, "mon"], "cmph" => [-2, "mph"], "cohm" => [-2, "ohm"], "commons_year" => [0, "common_year"], "coulombs" => [0, "coulomb"], "coz" => [-2, "oz"], "cpc" => [-2, "pc"], "cpsi" => [-2, "psi"], "crad" => [-2, "rad"], "cs" => [-2, "s"], "csr" => [-2, "sr"], "ct" => [-2, "t"], "cyr" => [-2, "yr"], "dA" => [-1, "A"], "dAu" => [-1, "Au"], "dBq" => [-1, "Bq"], "dC" => [-1, "C"], "dF" => [-1, "F"], "dG" => [-1, "G"], "dGal" => [-1, "Gal"], "dGy" => [-1, "Gy"], "dH" => [-1, "H"], "dHg" => [-1, "Hg"], "dHz" => [-1, "Hz"], "dJ" => [-1, "J"], "dK" => [-1, "K"], "dL" => [-1, "L"], "dN" => [-1, "N"], "dP" => [-1, "P"], "dPa" => [-1, "Pa"], "dS" => [-1, "S"], "dSt" => [-1, "St"], "dSv" => [-1, "Sv"], "dT" => [-1, "T"], "dV" => [-1, "V"], "dW" => [-1, "W"], "dWb" => [-1, "Wb"], "da" => [-1, "a"], "daA" => [1, "A"], "daAu" => [1, "Au"], "daBq" => [1, "Bq"], "daC" => [1, "C"], "daF" => [1, "F"], "daG" => [1, "G"], "daGal" => [1, "Gal"], "daGy" => [1, "Gy"], "daH" => [1, "H"], "daHg" => [1, "Hg"], "daHz" => [1, "Hz"], "daJ" => [1, "J"], "daK" => [1, "K"], "daL" => [1, "L"], "daN" => [1, "N"], "daP" => [1, "P"], "daPa" => [1, "Pa"], "daS" => [1, "S"], "daSt" => [1, "St"], "daSv" => [1, "Sv"], "daT" => [1, "T"], "daV" => [1, "V"], "daW" => [1, "W"], "daWb" => [1, "Wb"], "daa" => [1, "a"], "daac" => [1, "ac"], "daatm" => [1, "atm"], "dabar" => [1, "bar"], "dac" => [-1, "ac"], "dacal" => [1, "cal"], "dacd" => [1, "cd"], "daconventional_mercury" => [1, "conventional_mercury"], "dadegC" => [1, "degC"], "dadegF" => [1, "degF"], "dadeg_C" => [1, "deg_C"], "dadeg_F" => [1, "deg_F"], "dadegreeC" => [1, "degreeC"], "dadegreeF" => [1, "degreeF"], "dadegree_C" => [1, "degree_C"], "dadegree_E" => [1, "degree_E"], "dadegree_F" => [1, "degree_F"], "dadegree_N" => [1, "degree_N"], "dadegree_R" => [1, "degree_R"], "dadegree_S" => [1, "degree_S"], "dadegree_W" => [1, "degree_W"], "dadegree_c" => [1, "degree_c"], "dadegree_east" => [1, "degree_east"], "dadegree_f" => [1, "degree_f"], "dadegree_north" => [1, "degree_north"], "dadegree_south" => [1, "degree_south"], "dadegree_west" => [1, "degree_west"], "dadegrees_east" => [1, "degrees_east"], "dadegrees_north" => [1, "degrees_north"], "dadegrees_south" => [1, "degrees_south"], "dadegrees_west" => [1, "degrees_west"], "dadyn" => [1, "dyn"], "daerg" => [1, "erg"], "daforce" => [1, "force"], "dag" => [1, "g"], "dagravity" => [1, "gravity"], "dah" => [1, "h"], "dahg" => [1, "hg"], "dahr" => [1, "hr"], "dain" => [1, "in"], "dakgf" => [1, "kgf"], "dakph" => [1, "kph"], "dalb" => [1, "lb"], "dalm" => [1, "lm"], "dalx" => [1, "lx"], "daly" => [1, "ly"], "dam" => [1, "m"], "damb" => [1, "mb"], "damercury" => [1, "mercury"], "damgal" => [1, "mgal"], "damin" => [1, "min"], "damol" => [1, "mol"], "damon" => [1, "mon"], "damph" => [1, "mph"], "daohm" => [1, "ohm"], "daoz" => [1, "oz"], "dapc" => [1, "pc"], "dapsi" => [1, "psi"], "darad" => [1, "rad"], "das" => [1, "s"], "dasr" => [1, "sr"], "dat" => [1, "t"], "datm" => [-1, "atm"], "dayr" => [1, "yr"], "days" => [0, "day"], "dbar" => [-1, "bar"], "dcal" => [-1, "cal"], "dcd" => [-1, "cd"], "dconventional_mercury" => [-1, "conventional_mercury"], "ddegC" => [-1, "degC"], "ddegF" => [-1, "degF"], "ddeg_C" => [-1, "deg_C"], "ddeg_F" => [-1, "deg_F"], "ddegreeC" => [-1, "degreeC"], "ddegreeF" => [-1, "degreeF"], "ddegree_C" => [-1, "degree_C"], "ddegree_E" => [-1, "degree_E"], "ddegree_F" => [-1, "degree_F"], "ddegree_N" => [-1, "degree_N"], "ddegree_R" => [-1, "degree_R"], "ddegree_S" => [-1, "degree_S"], "ddegree_W" => [-1, "degree_W"], "ddegree_c" => [-1, "degree_c"], "ddegree_east" => [-1, "degree_east"], "ddegree_f" => [-1, "degree_f"], "ddegree_north" => [-1, "degree_north"], "ddegree_south" => [-1, "degree_south"], "ddegree_west" => [-1, "degree_west"], "ddegrees_east" => [-1, "degrees_east"], "ddegrees_north" => [-1, "degrees_north"], "ddegrees_south" => [-1, "degrees_south"], "ddegrees_west" => [-1, "degrees_west"], "ddyn" => [-1, "dyn"], "decaCelsius" => [1, "Celsius"], "decaFahrenheit" => [1, "Fahrenheit"], "decaJulian_year" => [1, "Julian_year"], "decaPascal" => [1, "Pascal"], "decaacre" => [1, "acre"], "decaampere" => [1, "ampere"], "decaangstrom" => [1, "angstrom"], "decaangular_degree" => [1, "angular_degree"], "decaangular_minute" => [1, "angular_minute"], "decaangular_second" => [1, "angular_second"], "decaare" => [1, "are"], "decaatmosphere" => [1, "atmosphere"], "decacalorie" => [1, "calorie"], "decacandela" => [1, "candela"], "decacelsius" => [1, "celsius"], "decacentigrade" => [1, "centigrade"], "decacentury" => [1, "century"], "decachain" => [1, "chain"], "decacommon_year" => [1, "common_year"], "decacoulomb" => [1, "coulomb"], "decaday" => [1, "day"], "decadegK" => [1, "degK"], "decadeg_K" => [1, "deg_K"], "decadegree" => [1, "degree"], "decadegreeK" => [1, "degreeK"], "decadyne" => [1, "dyne"], "decaerg" => [1, "erg"], "decafahrenheit" => [1, "fahrenheit"], "decafarad" => [1, "farad"], "decafermi" => [1, "fermi"], "decagal" => [1, "gal"], "decagauss" => [1, "gauss"], "decagram" => [1, "gram"], "decahectare" => [1, "hectare"], "decahertz" => [1, "hertz"], "decahour" => [1, "hour"], "decainch" => [1, "inch"], "decajoule" => [1, "joule"], "decakelvin" => [1, "kelvin"], "decakilogram" => [1, "kilogram"], "decaknot" => [1, "knot"], "decalitre" => [1, "litre"], "decameter" => [1, "meter"], "decametre" => [1, "metre"], "decamicron" => [1, "micron"], "decamile" => [1, "mile"], "decamillibar" => [1, "millibar"], "decaminute" => [1, "minute"], "decaminute_angle" => [1, "minute_angle"], "decamole" => [1, "mole"], "decamonth" => [1, "month"], "decanewton" => [1, "newton"], "decaounce" => [1, "ounce"], "decaparsec" => [1, "parsec"], "decapascal" => [1, "pascal"], "decapentad" => [1, "pentad"], "decapercent" => [1, "percent"], "decapoise" => [1, "poise"], "decapound" => [1, "pound"], "decaradian" => [1, "radian"], "decasecond" => [1, "second"], "decasecond_angle" => [1, "second_angle"], "decasteradian" => [1, "steradian"], "decastokes" => [1, "stokes"], "decatesla" => [1, "tesla"], "decaton" => [1, "ton"], "decatonne" => [1, "tonne"], "decatorr" => [1, "torr"], "decavolt" => [1, "volt"], "decawatt" => [1, "watt"], "decaweber" => [1, "weber"], "decayard" => [1, "yard"], "decayd" => [1, "yd"], "decayear" => [1, "year"], "deciCelsius" => [-1, "Celsius"], "deciFahrenheit" => [-1, "Fahrenheit"], "deciJulian_year" => [-1, "Julian_year"], "deciPascal" => [-1, "Pascal"], "deciacre" => [-1, "acre"], "deciampere" => [-1, "ampere"], "deciangstrom" => [-1, "angstrom"], "deciangular_degree" => [-1, "angular_degree"], "deciangular_minute" => [-1, "angular_minute"], "deciangular_second" => [-1, "angular_second"], "deciare" => [-1, "are"], "deciatmosphere" => [-1, "atmosphere"], "decicalorie" => [-1, "calorie"], "decicandela" => [-1, "candela"], "decicelsius" => [-1, "celsius"], "decicentigrade" => [-1, "centigrade"], "decicentury" => [-1, "century"], "decichain" => [-1, "chain"], "decicommon_year" => [-1, "common_year"], "decicoulomb" => [-1, "coulomb"], "deciday" => [-1, "day"], "decidegK" => [-1, "degK"], "decideg_K" => [-1, "deg_K"], "decidegree" => [-1, "degree"], "decidegreeK" => [-1, "degreeK"], "decidyne" => [-1, "dyne"], "decierg" => [-1, "erg"], "decifahrenheit" => [-1, "fahrenheit"], "decifarad" => [-1, "farad"], "decifermi" => [-1, "fermi"], "decigal" => [-1, "gal"], "decigauss" => [-1, "gauss"], "decigram" => [-1, "gram"], "decihectare" => [-1, "hectare"], "decihertz" => [-1, "hertz"], "decihour" => [-1, "hour"], "deciinch" => [-1, "inch"], "decijoule" => [-1, "joule"], "decikelvin" => [-1, "kelvin"], "decikilogram" => [-1, "kilogram"], "deciknot" => [-1, "knot"], "decilitre" => [-1, "litre"], "decimeter" => [-1, "meter"], "decimetre" => [-1, "metre"], "decimicron" => [-1, "micron"], "decimile" => [-1, "mile"], "decimillibar" => [-1, "millibar"], "deciminute" => [-1, "minute"], "deciminute_angle" => [-1, "minute_angle"], "decimole" => [-1, "mole"], "decimonth" => [-1, "month"], "decinewton" => [-1, "newton"], "deciounce" => [-1, "ounce"], "deciparsec" => [-1, "parsec"], "decipascal" => [-1, "pascal"], "decipentad" => [-1, "pentad"], "decipercent" => [-1, "percent"], "decipoise" => [-1, "poise"], "decipound" => [-1, "pound"], "deciradian" => [-1, "radian"], "decisecond" => [-1, "second"], "decisecond_angle" => [-1, "second_angle"], "decisteradian" => [-1, "steradian"], "decistokes" => [-1, "stokes"], "decitesla" => [-1, "tesla"], "deciton" => [-1, "ton"], "decitonne" => [-1, "tonne"], "decitorr" => [-1, "torr"], "decivolt" => [-1, "volt"], "deciwatt" => [-1, "watt"], "deciweber" => [-1, "weber"], "deciyard" => [-1, "yard"], "deciyd" => [-1, "yd"], "deciyear" => [-1, "year"], "degKs" => [0, "degK"], "degreeKs" => [0, "degreeK"], "degrees" => [0, "degree"], "degs_K" => [0, "deg_K"], "derg" => [-1, "erg"], "dforce" => [-1, "force"], "dg" => [-1, "g"], "dgravity" => [-1, "gravity"], "dh" => [-1, "h"], "dhg" => [-1, "hg"], "dhr" => [-1, "hr"], "din" => [-1, "in"], "dkgf" => [-1, "kgf"], "dkph" => [-1, "kph"], "dlb" => [-1, "lb"], "dlm" => [-1, "lm"], "dlx" => [-1, "lx"], "dly" => [-1, "ly"], "dm" => [-1, "m"], "dmb" => [-1, "mb"], "dmercury" => [-1, "mercury"], "dmgal" => [-1, "mgal"], "dmin" => [-1, "min"], "dmol" => [-1, "mol"], "dmon" => [-1, "mon"], "dmph" => [-1, "mph"], "dohm" => [-1, "ohm"], "doz" => [-1, "oz"], "dpc" => [-1, "pc"], "dpsi" => [-1, "psi"], "drad" => [-1, "rad"], "ds" => [-1, "s"], "dsr" => [-1, "sr"], "dt" => [-1, "t"], "dynes" => [0, "dyne"], "dyr" => [-1, "yr"], "ergs" => [0, "erg"], "exaCelsius" => [18, "Celsius"], "exaFahrenheit" => [18, "Fahrenheit"], "exaJulian_year" => [18, "Julian_year"], "exaPascal" => [18, "Pascal"], "exaacre" => [18, "acre"], "exaampere" => [18, "ampere"], "exaangstrom" => [18, "angstrom"], "exaangular_degree" => [18, "angular_degree"], "exaangular_minute" => [18, "angular_minute"], "exaangular_second" => [18, "angular_second"], "exaare" => [18, "are"], "exaatmosphere" => [18, "atmosphere"], "exacalorie" => [18, "calorie"], "exacandela" => [18, "candela"], "exacelsius" => [18, "celsius"], "exacentigrade" => [18, "centigrade"], "exacentury" => [18, "century"], "exachain" => [18, "chain"], "exacommon_year" => [18, "common_year"], "exacoulomb" => [18, "coulomb"], "exaday" => [18, "day"], "exadegK" => [18, "degK"], "exadeg_K" => [18, "deg_K"], "exadegree" => [18, "degree"], "exadegreeK" => [18, "degreeK"], "exadyne" => [18, "dyne"], "exaerg" => [18, "erg"], "exafahrenheit" => [18, "fahrenheit"], "exafarad" => [18, "farad"], "exafermi" => [18, "fermi"], "exagal" => [18, "gal"], "exagauss" => [18, "gauss"], "exagram" => [18, "gram"], "exahectare" => [18, "hectare"], "exahertz" => [18, "hertz"], "exahour" => [18, "hour"], "exainch" => [18, "inch"], "exajoule" => [18, "joule"], "exakelvin" => [18, "kelvin"], "exakilogram" => [18, "kilogram"], "exaknot" => [18, "knot"], "exalitre" => [18, "litre"], "exameter" => [18, "meter"], "exametre" => [18, "metre"], "examicron" => [18, "micron"], "examile" => [18, "mile"], "examillibar" => [18, "millibar"], "examinute" => [18, "minute"], "examinute_angle" => [18, "minute_angle"], "examole" => [18, "mole"], "examonth" => [18, "month"], "exanewton" => [18, "newton"], "exaounce" => [18, "ounce"], "exaparsec" => [18, "parsec"], "exapascal" => [18, "pascal"], "exapentad" => [18, "pentad"], "exapercent" => [18, "percent"], "exapoise" => [18, "poise"], "exapound" => [18, "pound"], "exaradian" => [18, "radian"], "exasecond" => [18, "second"], "exasecond_angle" => [18, "second_angle"], "exasteradian" => [18, "steradian"], "exastokes" => [18, "stokes"], "exatesla" => [18, "tesla"], "exaton" => [18, "ton"], "exatonne" => [18, "tonne"], "exatorr" => [18, "torr"], "exavolt" => [18, "volt"], "exawatt" => [18, "watt"], "exaweber" => [18, "weber"], "exayard" => [18, "yard"], "exayd" => [18, "yd"], "exayear" => [18, "year"], "fA" => [-15, "A"], "fAu" => [-15, "Au"], "fBq" => [-15, "Bq"], "fC" => [-15, "C"], "fF" => [-15, "F"], "fG" => [-15, "G"], "fGal" => [-15, "Gal"], "fGy" => [-15, "Gy"], "fH" => [-15, "H"], "fHg" => [-15, "Hg"], "fHz" => [-15, "Hz"], "fJ" => [-15, "J"], "fK" => [-15, "K"], "fL" => [-15, "L"], "fN" => [-15, "N"], "fP" => [-15, "P"], "fPa" => [-15, "Pa"], "fS" => [-15, "S"], "fSt" => [-15, "St"], "fSv" => [-15, "Sv"], "fT" => [-15, "T"], "fV" => [-15, "V"], "fW" => [-15, "W"], "fWb" => [-15, "Wb"], "fa" => [-15, "a"], "fac" => [-15, "ac"], "fahrenheits" => [0, "fahrenheit"], "farads" => [0, "farad"], "fatm" => [-15, "atm"], "fbar" => [-15, "bar"], "fcal" => [-15, "cal"], "fcd" => [-15, "cd"], "fconventional_mercury" => [-15, "conventional_mercury"], "fdegC" => [-15, "degC"], "fdegF" => [-15, "degF"], "fdeg_C" => [-15, "deg_C"], "fdeg_F" => [-15, "deg_F"], "fdegreeC" => [-15, "degreeC"], "fdegreeF" => [-15, "degreeF"], "fdegree_C" => [-15, "degree_C"], "fdegree_E" => [-15, "degree_E"], "fdegree_F" => [-15, "degree_F"], "fdegree_N" => [-15, "degree_N"], "fdegree_R" => [-15, "degree_R"], "fdegree_S" => [-15, "degree_S"], "fdegree_W" => [-15, "degree_W"], "fdegree_c" => [-15, "degree_c"], "fdegree_east" => [-15, "degree_east"], "fdegree_f" => [-15, "degree_f"], "fdegree_north" => [-15, "degree_north"], "fdegree_south" => [-15, "degree_south"], "fdegree_west" => [-15, "degree_west"], "fdegrees_east" => [-15, "degrees_east"], "fdegrees_north" => [-15, "degrees_north"], "fdegrees_south" => [-15, "degrees_south"], "fdegrees_west" => [-15, "degrees_west"], "fdyn" => [-15, "dyn"], "femtoCelsius" => [-15, "Celsius"], "femtoFahrenheit" => [-15, "Fahrenheit"], "femtoJulian_year" => [-15, "Julian_year"], "femtoPascal" => [-15, "Pascal"], "femtoacre" => [-15, "acre"], "femtoampere" => [-15, "ampere"], "femtoangstrom" => [-15, "angstrom"], "femtoangular_degree" => [-15, "angular_degree"], "femtoangular_minute" => [-15, "angular_minute"], "femtoangular_second" => [-15, "angular_second"], "femtoare" => [-15, "are"], "femtoatmosphere" => [-15, "atmosphere"], "femtocalorie" => [-15, "calorie"], "femtocandela" => [-15, "candela"], "femtocelsius" => [-15, "celsius"], "femtocentigrade" => [-15, "centigrade"], "femtocentury" => [-15, "century"], "femtochain" => [-15, "chain"], "femtocommon_year" => [-15, "common_year"], "femtocoulomb" => [-15, "coulomb"], "femtoday" => [-15, "day"], "femtodegK" => [-15, "degK"], "femtodeg_K" => [-15, "deg_K"], "femtodegree" => [-15, "degree"], "femtodegreeK" => [-15, "degreeK"], "femtodyne" => [-15, "dyne"], "femtoerg" => [-15, "erg"], "femtofahrenheit" => [-15, "fahrenheit"], "femtofarad" => [-15, "farad"], "femtofermi" => [-15, "fermi"], "femtogal" => [-15, "gal"], "femtogauss" => [-15, "gauss"], "femtogram" => [-15, "gram"], "femtohectare" => [-15, "hectare"], "femtohertz" => [-15, "hertz"], "femtohour" => [-15, "hour"], "femtoinch" => [-15, "inch"], "femtojoule" => [-15, "joule"], "femtokelvin" => [-15, "kelvin"], "femtokilogram" => [-15, "kilogram"], "femtoknot" => [-15, "knot"], "femtolitre" => [-15, "litre"], "femtometer" => [-15, "meter"], "femtometre" => [-15, "metre"], "femtomicron" => [-15, "micron"], "femtomile" => [-15, "mile"], "femtomillibar" => [-15, "millibar"], "femtominute" => [-15, "minute"], "femtominute_angle" => [-15, "minute_angle"], "femtomole" => [-15, "mole"], "femtomonth" => [-15, "month"], "femtonewton" => [-15, "newton"], "femtoounce" => [-15, "ounce"], "femtoparsec" => [-15, "parsec"], "femtopascal" => [-15, "pascal"], "femtopentad" => [-15, "pentad"], "femtopercent" => [-15, "percent"], "femtopoise" => [-15, "poise"], "femtopound" => [-15, "pound"], "femtoradian" => [-15, "radian"], "femtosecond" => [-15, "second"], "femtosecond_angle" => [-15, "second_angle"], "femtosteradian" => [-15, "steradian"], "femtostokes" => [-15, "stokes"], "femtotesla" => [-15, "tesla"], "femtoton" => [-15, "ton"], "femtotonne" => [-15, "tonne"], "femtotorr" => [-15, "torr"], "femtovolt" => [-15, "volt"], "femtowatt" => [-15, "watt"], "femtoweber" => [-15, "weber"], "femtoyard" => [-15, "yard"], "femtoyd" => [-15, "yd"], "femtoyear" => [-15, "year"], "ferg" => [-15, "erg"], "fermis" => [0, "fermi"], "fforce" => [-15, "force"], "fg" => [-15, "g"], "fgravity" => [-15, "gravity"], "fh" => [-15, "h"], "fhg" => [-15, "hg"], "fhr" => [-15, "hr"], "fin" => [-15, "in"], "fkgf" => [-15, "kgf"], "fkph" => [-15, "kph"], "flb" => [-15, "lb"], "flm" => [-15, "lm"], "flx" => [-15, "lx"], "fly" => [-15, "ly"], "fm" => [-15, "m"], "fmb" => [-15, "mb"], "fmercury" => [-15, "mercury"], "fmgal" => [-15, "mgal"], "fmin" => [-15, "min"], "fmol" => [-15, "mol"], "fmon" => [-15, "mon"], "fmph" => [-15, "mph"], "fohm" => [-15, "ohm"], "foz" => [-15, "oz"], "fpc" => [-15, "pc"], "fpsi" => [-15, "psi"], "frad" => [-15, "rad"], "fs" => [-15, "s"], "fsr" => [-15, "sr"], "ft" => [-15, "t"], "fyr" => [-15, "yr"], "gals" => [0, "gal"], "gausses" => [0, "gauss"], "gigaCelsius" => [9, "Celsius"], "gigaFahrenheit" => [9, "Fahrenheit"], "gigaJulian_year" => [9, "Julian_year"], "gigaPascal" => [9, "Pascal"], "gigaacre" => [9, "acre"], "gigaampere" => [9, "ampere"], "gigaangstrom" => [9, "angstrom"], "gigaangular_degree" => [9, "angular_degree"], "gigaangular_minute" => [9, "angular_minute"], "gigaangular_second" => [9, "angular_second"], "gigaare" => [9, "are"], "gigaatmosphere" => [9, "atmosphere"], "gigacalorie" => [9, "calorie"], "gigacandela" => [9, "candela"], "gigacelsius" => [9, "celsius"], "gigacentigrade" => [9, "centigrade"], "gigacentury" => [9, "century"], "gigachain" => [9, "chain"], "gigacommon_year" => [9, "common_year"], "gigacoulomb" => [9, "coulomb"], "gigaday" => [9, "day"], "gigadegK" => [9, "degK"], "gigadeg_K" => [9, "deg_K"], "gigadegree" => [9, "degree"], "gigadegreeK" => [9, "degreeK"], "gigadyne" => [9, "dyne"], "gigaerg" => [9, "erg"], "gigafahrenheit" => [9, "fahrenheit"], "gigafarad" => [9, "farad"], "gigafermi" => [9, "fermi"], "gigagal" => [9, "gal"], "gigagauss" => [9, "gauss"], "gigagram" => [9, "gram"], "gigahectare" => [9, "hectare"], "gigahertz" => [9, "hertz"], "gigahour" => [9, "hour"], "gigainch" => [9, "inch"], "gigajoule" => [9, "joule"], "gigakelvin" => [9, "kelvin"], "gigakilogram" => [9, "kilogram"], "gigaknot" => [9, "knot"], "gigalitre" => [9, "litre"], "gigameter" => [9, "meter"], "gigametre" => [9, "metre"], "gigamicron" => [9, "micron"], "gigamile" => [9, "mile"], "gigamillibar" => [9, "millibar"], "gigaminute" => [9, "minute"], "gigaminute_angle" => [9, "minute_angle"], "gigamole" => [9, "mole"], "gigamonth" => [9, "month"], "giganewton" => [9, "newton"], "gigaounce" => [9, "ounce"], "gigaparsec" => [9, "parsec"], "gigapascal" => [9, "pascal"], "gigapentad" => [9, "pentad"], "gigapercent" => [9, "percent"], "gigapoise" => [9, "poise"], "gigapound" => [9, "pound"], "gigaradian" => [9, "radian"], "gigasecond" => [9, "second"], "gigasecond_angle" => [9, "second_angle"], "gigasteradian" => [9, "steradian"], "gigastokes" => [9, "stokes"], "gigatesla" => [9, "tesla"], "gigaton" => [9, "ton"], "gigatonne" => [9, "tonne"], "gigatorr" => [9, "torr"], "gigavolt" => [9, "volt"], "gigawatt" => [9, "watt"], "gigaweber" => [9, "weber"], "gigayard" => [9, "yard"], "gigayd" => [9, "yd"], "gigayear" => [9, "year"], "grams" => [0, "gram"], "hA" => [2, "A"], "hAu" => [2, "Au"], "hBq" => [2, "Bq"], "hC" => [2, "C"], "hF" => [2, "F"], "hG" => [2, "G"], "hGal" => [2, "Gal"], "hGy" => [2, "Gy"], "hH" => [2, "H"], "hHg" => [2, "Hg"], "hHz" => [2, "Hz"], "hJ" => [2, "J"], "hK" => [2, "K"], "hL" => [2, "L"], "hN" => [2, "N"], "hP" => [2, "P"], "hPa" => [2, "Pa"], "hS" => [2, "S"], "hSt" => [2, "St"], "hSv" => [2, "Sv"], "hT" => [2, "T"], "hV" => [2, "V"], "hW" => [2, "W"], "hWb" => [2, "Wb"], "ha" => [2, "a"], "hac" => [2, "ac"], "hatm" => [2, "atm"], "hbar" => [2, "bar"], "hcal" => [2, "cal"], "hcd" => [2, "cd"], "hconventional_mercury" => [2, "conventional_mercury"], "hdegC" => [2, "degC"], "hdegF" => [2, "degF"], "hdeg_C" => [2, "deg_C"], "hdeg_F" => [2, "deg_F"], "hdegreeC" => [2, "degreeC"], "hdegreeF" => [2, "degreeF"], "hdegree_C" => [2, "degree_C"], "hdegree_E" => [2, "degree_E"], "hdegree_F" => [2, "degree_F"], "hdegree_N" => [2, "degree_N"], "hdegree_R" => [2, "degree_R"], "hdegree_S" => [2, "degree_S"], "hdegree_W" => [2, "degree_W"], "hdegree_c" => [2, "degree_c"], "hdegree_east" => [2, "degree_east"], "hdegree_f" => [2, "degree_f"], "hdegree_north" => [2, "degree_north"], "hdegree_south" => [2, "degree_south"], "hdegree_west" => [2, "degree_west"], "hdegrees_east" => [2, "degrees_east"], "hdegrees_north" => [2, "degrees_north"], "hdegrees_south" => [2, "degrees_south"], "hdegrees_west" => [2, "degrees_west"], "hdyn" => [2, "dyn"], "hectares" => [0, "hectare"], "hectoCelsius" => [2, "Celsius"], "hectoFahrenheit" => [2, "Fahrenheit"], "hectoJulian_year" => [2, "Julian_year"], "hectoPascal" => [2, "Pascal"], "hectoacre" => [2, "acre"], "hectoampere" => [2, "ampere"], "hectoangstrom" => [2, "angstrom"], "hectoangular_degree" => [2, "angular_degree"], "hectoangular_minute" => [2, "angular_minute"], "hectoangular_second" => [2, "angular_second"], "hectoare" => [2, "are"], "hectoatmosphere" => [2, "atmosphere"], "hectocalorie" => [2, "calorie"], "hectocandela" => [2, "candela"], "hectocelsius" => [2, "celsius"], "hectocentigrade" => [2, "centigrade"], "hectocentury" => [2, "century"], "hectochain" => [2, "chain"], "hectocommon_year" => [2, "common_year"], "hectocoulomb" => [2, "coulomb"], "hectoday" => [2, "day"], "hectodegK" => [2, "degK"], "hectodeg_K" => [2, "deg_K"], "hectodegree" => [2, "degree"], "hectodegreeK" => [2, "degreeK"], "hectodyne" => [2, "dyne"], "hectoerg" => [2, "erg"], "hectofahrenheit" => [2, "fahrenheit"], "hectofarad" => [2, "farad"], "hectofermi" => [2, "fermi"], "hectogal" => [2, "gal"], "hectogauss" => [2, "gauss"], "hectogram" => [2, "gram"], "hectohectare" => [2, "hectare"], "hectohertz" => [2, "hertz"], "hectohour" => [2, "hour"], "hectoinch" => [2, "inch"], "hectojoule" => [2, "joule"], "hectokelvin" => [2, "kelvin"], "hectokilogram" => [2, "kilogram"], "hectoknot" => [2, "knot"], "hectolitre" => [2, "litre"], "hectometer" => [2, "meter"], "hectometre" => [2, "metre"], "hectomicron" => [2, "micron"], "hectomile" => [2, "mile"], "hectomillibar" => [2, "millibar"], "hectominute" => [2, "minute"], "hectominute_angle" => [2, "minute_angle"], "hectomole" => [2, "mole"], "hectomonth" => [2, "month"], "hectonewton" => [2, "newton"], "hectoounce" => [2, "ounce"], "hectoparsec" => [2, "parsec"], "hectopascal" => [2, "pascal"], "hectopentad" => [2, "pentad"], "hectopercent" => [2, "percent"], "hectopoise" => [2, "poise"], "hectopound" => [2, "pound"], "hectoradian" => [2, "radian"], "hectosecond" => [2, "second"], "hectosecond_angle" => [2, "second_angle"], "hectosteradian" => [2, "steradian"], "hectostokes" => [2, "stokes"], "hectotesla" => [2, "tesla"], "hectoton" => [2, "ton"], "hectotonne" => [2, "tonne"], "hectotorr" => [2, "torr"], "hectovolt" => [2, "volt"], "hectowatt" => [2, "watt"], "hectoweber" => [2, "weber"], "hectoyard" => [2, "yard"], "hectoyd" => [2, "yd"], "hectoyear" => [2, "year"], "herg" => [2, "erg"], "hertzes" => [0, "hertz"], "hforce" => [2, "force"], "hg" => [2, "g"], "hgravity" => [2, "gravity"], "hh" => [2, "h"], "hhg" => [2, "hg"], "hhr" => [2, "hr"], "hin" => [2, "in"], "hkgf" => [2, "kgf"], "hkph" => [2, "kph"], "hlb" => [2, "lb"], "hlm" => [2, "lm"], "hlx" => [2, "lx"], "hly" => [2, "ly"], "hm" => [2, "m"], "hmb" => [2, "mb"], "hmercury" => [2, "mercury"], "hmgal" => [2, "mgal"], "hmin" => [2, "min"], "hmol" => [2, "mol"], "hmon" => [2, "mon"], "hmph" => [2, "mph"], "hohm" => [2, "ohm"], "hours" => [0, "hour"], "hoz" => [2, "oz"], "hpc" => [2, "pc"], "hpsi" => [2, "psi"], "hrad" => [2, "rad"], "hs" => [2, "s"], "hsr" => [2, "sr"], "ht" => [2, "t"], "hyr" => [2, "yr"], "inchs" => [0, "inch"], "joules" => [0, "joule"], "kA" => [3, "A"], "kAu" => [3, "Au"], "kBq" => [3, "Bq"], "kC" => [3, "C"], "kF" => [3, "F"], "kG" => [3, "G"], "kGal" => [3, "Gal"], "kGy" => [3, "Gy"], "kH" => [3, "H"], "kHg" => [3, "Hg"], "kHz" => [3, "Hz"], "kJ" => [3, "J"], "kK" => [3, "K"], "kL" => [3, "L"], "kN" => [3, "N"], "kP" => [3, "P"], "kPa" => [3, "Pa"], "kS" => [3, "S"], "kSt" => [3, "St"], "kSv" => [3, "Sv"], "kT" => [3, "T"], "kV" => [3, "V"], "kW" => [3, "W"], "kWb" => [3, "Wb"], "ka" => [3, "a"], "kac" => [3, "ac"], "katm" => [3, "atm"], "kbar" => [3, "bar"], "kcal" => [3, "cal"], "kcd" => [3, "cd"], "kconventional_mercury" => [3, "conventional_mercury"], "kdegC" => [3, "degC"], "kdegF" => [3, "degF"], "kdeg_C" => [3, "deg_C"], "kdeg_F" => [3, "deg_F"], "kdegreeC" => [3, "degreeC"], "kdegreeF" => [3, "degreeF"], "kdegree_C" => [3, "degree_C"], "kdegree_E" => [3, "degree_E"], "kdegree_F" => [3, "degree_F"], "kdegree_N" => [3, "degree_N"], "kdegree_R" => [3, "degree_R"], "kdegree_S" => [3, "degree_S"], "kdegree_W" => [3, "degree_W"], "kdegree_c" => [3, "degree_c"], "kdegree_east" => [3, "degree_east"], "kdegree_f" => [3, "degree_f"], "kdegree_north" => [3, "degree_north"], "kdegree_south" => [3, "degree_south"], "kdegree_west" => [3, "degree_west"], "kdegrees_east" => [3, "degrees_east"], "kdegrees_north" => [3, "degrees_north"], "kdegrees_south" => [3, "degrees_south"], "kdegrees_west" => [3, "degrees_west"], "kdyn" => [3, "dyn"], "kelvins" => [0, "kelvin"], "kerg" => [3, "erg"], "kforce" => [3, "force"], "kgravity" => [3, "gravity"], "kh" => [3, "h"], "khg" => [3, "hg"], "khr" => [3, "hr"], "kiloCelsius" => [3, "Celsius"], "kiloFahrenheit" => [3, "Fahrenheit"], "kiloJulian_year" => [3, "Julian_year"], "kiloPascal" => [3, "Pascal"], "kiloacre" => [3, "acre"], "kiloampere" => [3, "ampere"], "kiloangstrom" => [3, "angstrom"], "kiloangular_degree" => [3, "angular_degree"], "kiloangular_minute" => [3, "angular_minute"], "kiloangular_second" => [3, "angular_second"], "kiloare" => [3, "are"], "kiloatmosphere" => [3, "atmosphere"], "kilocalorie" => [3, "calorie"], "kilocandela" => [3, "candela"], "kilocelsius" => [3, "celsius"], "kilocentigrade" => [3, "centigrade"], "kilocentury" => [3, "century"], "kilochain" => [3, "chain"], "kilocommon_year" => [3, "common_year"], "kilocoulomb" => [3, "coulomb"], "kiloday" => [3, "day"], "kilodegK" => [3, "degK"], "kilodeg_K" => [3, "deg_K"], "kilodegree" => [3, "degree"], "kilodegreeK" => [3, "degreeK"], "kilodyne" => [3, "dyne"], "kiloerg" => [3, "erg"], "kilofahrenheit" => [3, "fahrenheit"], "kilofarad" => [3, "farad"], "kilofermi" => [3, "fermi"], "kilogal" => [3, "gal"], "kilogauss" => [3, "gauss"], "kilogram" => [3, "gram"], "kilograms" => [0, "kilogram"], "kilohectare" => [3, "hectare"], "kilohertz" => [3, "hertz"], "kilohour" => [3, "hour"], "kiloinch" => [3, "inch"], "kilojoule" => [3, "joule"], "kilokelvin" => [3, "kelvin"], "kilokilogram" => [3, "kilogram"], "kiloknot" => [3, "knot"], "kilolitre" => [3, "litre"], "kilometer" => [3, "meter"], "kilometre" => [3, "metre"], "kilomicron" => [3, "micron"], "kilomile" => [3, "mile"], "kilomillibar" => [3, "millibar"], "kilominute" => [3, "minute"], "kilominute_angle" => [3, "minute_angle"], "kilomole" => [3, "mole"], "kilomonth" => [3, "month"], "kilonewton" => [3, "newton"], "kiloounce" => [3, "ounce"], "kiloparsec" => [3, "parsec"], "kilopascal" => [3, "pascal"], "kilopentad" => [3, "pentad"], "kilopercent" => [3, "percent"], "kilopoise" => [3, "poise"], "kilopound" => [3, "pound"], "kiloradian" => [3, "radian"], "kilosecond" => [3, "second"], "kilosecond_angle" => [3, "second_angle"], "kilosteradian" => [3, "steradian"], "kilostokes" => [3, "stokes"], "kilotesla" => [3, "tesla"], "kiloton" => [3, "ton"], "kilotonne" => [3, "tonne"], "kilotorr" => [3, "torr"], "kilovolt" => [3, "volt"], "kilowatt" => [3, "watt"], "kiloweber" => [3, "weber"], "kiloyard" => [3, "yard"], "kiloyd" => [3, "yd"], "kiloyear" => [3, "year"], "kin" => [3, "in"], "kkgf" => [3, "kgf"], "kkph" => [3, "kph"], "klb" => [3, "lb"], "klm" => [3, "lm"], "klx" => [3, "lx"], "kly" => [3, "ly"], "km" => [3, "m"], "kmb" => [3, "mb"], "kmercury" => [3, "mercury"], "kmgal" => [3, "mgal"], "kmin" => [3, "min"], "kmol" => [3, "mol"], "kmon" => [3, "mon"], "kmph" => [3, "mph"], "knots" => [0, "knot"], "kohm" => [3, "ohm"], "koz" => [3, "oz"], "kpc" => [3, "pc"], "kpsi" => [3, "psi"], "krad" => [3, "rad"], "ks" => [3, "s"], "ksr" => [3, "sr"], "kt" => [3, "t"], "kyr" => [3, "yr"], "litres" => [0, "litre"], "mA" => [-3, "A"], "mAu" => [-3, "Au"], "mBq" => [-3, "Bq"], "mC" => [-3, "C"], "mF" => [-3, "F"], "mG" => [-3, "G"], "mGal" => [-3, "Gal"], "mGy" => [-3, "Gy"], "mH" => [-3, "H"], "mHg" => [-3, "Hg"], "mHz" => [-3, "Hz"], "mJ" => [-3, "J"], "mK" => [-3, "K"], "mL" => [-3, "L"], "mN" => [-3, "N"], "mP" => [-3, "P"], "mPa" => [-3, "Pa"], "mS" => [-3, "S"], "mSt" => [-3, "St"], "mSv" => [-3, "Sv"], "mT" => [-3, "T"], "mV" => [-3, "V"], "mW" => [-3, "W"], "mWb" => [-3, "Wb"], "ma" => [-3, "a"], "mac" => [-3, "ac"], "matm" => [-3, "atm"], "mbar" => [-3, "bar"], "mcal" => [-3, "cal"], "mcd" => [-3, "cd"], "mconventional_mercury" => [-3, "conventional_mercury"], "mdegC" => [-3, "degC"], "mdegF" => [-3, "degF"], "mdeg_C" => [-3, "deg_C"], "mdeg_F" => [-3, "deg_F"], "mdegreeC" => [-3, "degreeC"], "mdegreeF" => [-3, "degreeF"], "mdegree_C" => [-3, "degree_C"], "mdegree_E" => [-3, "degree_E"], "mdegree_F" => [-3, "degree_F"], "mdegree_N" => [-3, "degree_N"], "mdegree_R" => [-3, "degree_R"], "mdegree_S" => [-3, "degree_S"], "mdegree_W" => [-3, "degree_W"], "mdegree_c" => [-3, "degree_c"], "mdegree_east" => [-3, "degree_east"], "mdegree_f" => [-3, "degree_f"], "mdegree_north" => [-3, "degree_north"], "mdegree_south" => [-3, "degree_south"], "mdegree_west" => [-3, "degree_west"], "mdegrees_east" => [-3, "degrees_east"], "mdegrees_north" => [-3, "degrees_north"], "mdegrees_south" => [-3, "degrees_south"], "mdegrees_west" => [-3, "degrees_west"], "mdyn" => [-3, "dyn"], "megaCelsius" => [6, "Celsius"], "megaFahrenheit" => [6, "Fahrenheit"], "megaJulian_year" => [6, "Julian_year"], "megaPascal" => [6, "Pascal"], "megaacre" => [6, "acre"], "megaampere" => [6, "ampere"], "megaangstrom" => [6, "angstrom"], "megaangular_degree" => [6, "angular_degree"], "megaangular_minute" => [6, "angular_minute"], "megaangular_second" => [6, "angular_second"], "megaare" => [6, "are"], "megaatmosphere" => [6, "atmosphere"], "megacalorie" => [6, "calorie"], "megacandela" => [6, "candela"], "megacelsius" => [6, "celsius"], "megacentigrade" => [6, "centigrade"], "megacentury" => [6, "century"], "megachain" => [6, "chain"], "megacommon_year" => [6, "common_year"], "megacoulomb" => [6, "coulomb"], "megaday" => [6, "day"], "megadegK" => [6, "degK"], "megadeg_K" => [6, "deg_K"], "megadegree" => [6, "degree"], "megadegreeK" => [6, "degreeK"], "megadyne" => [6, "dyne"], "megaerg" => [6, "erg"], "megafahrenheit" => [6, "fahrenheit"], "megafarad" => [6, "farad"], "megafermi" => [6, "fermi"], "megagal" => [6, "gal"], "megagauss" => [6, "gauss"], "megagram" => [6, "gram"], "megahectare" => [6, "hectare"], "megahertz" => [6, "hertz"], "megahour" => [6, "hour"], "megainch" => [6, "inch"], "megajoule" => [6, "joule"], "megakelvin" => [6, "kelvin"], "megakilogram" => [6, "kilogram"], "megaknot" => [6, "knot"], "megalitre" => [6, "litre"], "megameter" => [6, "meter"], "megametre" => [6, "metre"], "megamicron" => [6, "micron"], "megamile" => [6, "mile"], "megamillibar" => [6, "millibar"], "megaminute" => [6, "minute"], "megaminute_angle" => [6, "minute_angle"], "megamole" => [6, "mole"], "megamonth" => [6, "month"], "meganewton" => [6, "newton"], "megaounce" => [6, "ounce"], "megaparsec" => [6, "parsec"], "megapascal" => [6, "pascal"], "megapentad" => [6, "pentad"], "megapercent" => [6, "percent"], "megapoise" => [6, "poise"], "megapound" => [6, "pound"], "megaradian" => [6, "radian"], "megasecond" => [6, "second"], "megasecond_angle" => [6, "second_angle"], "megasteradian" => [6, "steradian"], "megastokes" => [6, "stokes"], "megatesla" => [6, "tesla"], "megaton" => [6, "ton"], "megatonne" => [6, "tonne"], "megatorr" => [6, "torr"], "megavolt" => [6, "volt"], "megawatt" => [6, "watt"], "megaweber" => [6, "weber"], "megayard" => [6, "yard"], "megayd" => [6, "yd"], "megayear" => [6, "year"], "merg" => [-3, "erg"], "meters" => [0, "meter"], "metres" => [0, "metre"], "mforce" => [-3, "force"], "mg" => [-3, "g"], "mgravity" => [-3, "gravity"], "mh" => [-3, "h"], "mhg" => [-3, "hg"], "mhr" => [-3, "hr"], "microCelsius" => [-6, "Celsius"], "microFahrenheit" => [-6, "Fahrenheit"], "microJulian_year" => [-6, "Julian_year"], "microPascal" => [-6, "Pascal"], "microacre" => [-6, "acre"], "microampere" => [-6, "ampere"], "microangstrom" => [-6, "angstrom"], "microangular_degree" => [-6, "angular_degree"], "microangular_minute" => [-6, "angular_minute"], "microangular_second" => [-6, "angular_second"], "microare" => [-6, "are"], "microatmosphere" => [-6, "atmosphere"], "microcalorie" => [-6, "calorie"], "microcandela" => [-6, "candela"], "microcelsius" => [-6, "celsius"], "microcentigrade" => [-6, "centigrade"], "microcentury" => [-6, "century"], "microchain" => [-6, "chain"], "microcommon_year" => [-6, "common_year"], "microcoulomb" => [-6, "coulomb"], "microday" => [-6, "day"], "microdegK" => [-6, "degK"], "microdeg_K" => [-6, "deg_K"], "microdegree" => [-6, "degree"], "microdegreeK" => [-6, "degreeK"], "microdyne" => [-6, "dyne"], "microerg" => [-6, "erg"], "microfahrenheit" => [-6, "fahrenheit"], "microfarad" => [-6, "farad"], "microfermi" => [-6, "fermi"], "microgal" => [-6, "gal"], "microgauss" => [-6, "gauss"], "microgram" => [-6, "gram"], "microhectare" => [-6, "hectare"], "microhertz" => [-6, "hertz"], "microhour" => [-6, "hour"], "microinch" => [-6, "inch"], "microjoule" => [-6, "joule"], "microkelvin" => [-6, "kelvin"], "microkilogram" => [-6, "kilogram"], "microknot" => [-6, "knot"], "microlitre" => [-6, "litre"], "micrometer" => [-6, "meter"], "micrometre" => [-6, "metre"], "micromicron" => [-6, "micron"], "micromile" => [-6, "mile"], "micromillibar" => [-6, "millibar"], "microminute" => [-6, "minute"], "microminute_angle" => [-6, "minute_angle"], "micromole" => [-6, "mole"], "micromonth" => [-6, "month"], "micronewton" => [-6, "newton"], "microns" => [0, "micron"], "microounce" => [-6, "ounce"], "microparsec" => [-6, "parsec"], "micropascal" => [-6, "pascal"], "micropentad" => [-6, "pentad"], "micropercent" => [-6, "percent"], "micropoise" => [-6, "poise"], "micropound" => [-6, "pound"], "microradian" => [-6, "radian"], "microsecond" => [-6, "second"], "microsecond_angle" => [-6, "second_angle"], "microsteradian" => [-6, "steradian"], "microstokes" => [-6, "stokes"], "microtesla" => [-6, "tesla"], "microton" => [-6, "ton"], "microtonne" => [-6, "tonne"], "microtorr" => [-6, "torr"], "microvolt" => [-6, "volt"], "microwatt" => [-6, "watt"], "microweber" => [-6, "weber"], "microyard" => [-6, "yard"], "microyd" => [-6, "yd"], "microyear" => [-6, "year"], "miles" => [0, "mile"], "milliCelsius" => [-3, "Celsius"], "milliFahrenheit" => [-3, "Fahrenheit"], "milliJulian_year" => [-3, "Julian_year"], "milliPascal" => [-3, "Pascal"], "milliacre" => [-3, "acre"], "milliampere" => [-3, "ampere"], "milliangstrom" => [-3, "angstrom"], "milliangular_degree" => [-3, "angular_degree"], "milliangular_minute" => [-3, "angular_minute"], "milliangular_second" => [-3, "angular_second"], "milliare" => [-3, "are"], "milliatmosphere" => [-3, "atmosphere"], "millibars" => [0, "millibar"], "millicalorie" => [-3, "calorie"], "millicandela" => [-3, "candela"], "millicelsius" => [-3, "celsius"], "millicentigrade" => [-3, "centigrade"], "millicentury" => [-3, "century"], "millichain" => [-3, "chain"], "millicommon_year" => [-3, "common_year"], "millicoulomb" => [-3, "coulomb"], "milliday" => [-3, "day"], "millidegK" => [-3, "degK"], "millideg_K" => [-3, "deg_K"], "millidegree" => [-3, "degree"], "millidegreeK" => [-3, "degreeK"], "millidyne" => [-3, "dyne"], "millierg" => [-3, "erg"], "millifahrenheit" => [-3, "fahrenheit"], "millifarad" => [-3, "farad"], "millifermi" => [-3, "fermi"], "milligal" => [-3, "gal"], "milligauss" => [-3, "gauss"], "milligram" => [-3, "gram"], "millihectare" => [-3, "hectare"], "millihertz" => [-3, "hertz"], "millihour" => [-3, "hour"], "milliinch" => [-3, "inch"], "millijoule" => [-3, "joule"], "millikelvin" => [-3, "kelvin"], "millikilogram" => [-3, "kilogram"], "milliknot" => [-3, "knot"], "millilitre" => [-3, "litre"], "millimeter" => [-3, "meter"], "millimetre" => [-3, "metre"], "millimicron" => [-3, "micron"], "millimile" => [-3, "mile"], "millimillibar" => [-3, "millibar"], "milliminute" => [-3, "minute"], "milliminute_angle" => [-3, "minute_angle"], "millimole" => [-3, "mole"], "millimonth" => [-3, "month"], "millinewton" => [-3, "newton"], "milliounce" => [-3, "ounce"], "milliparsec" => [-3, "parsec"], "millipascal" => [-3, "pascal"], "millipentad" => [-3, "pentad"], "millipercent" => [-3, "percent"], "millipoise" => [-3, "poise"], "millipound" => [-3, "pound"], "milliradian" => [-3, "radian"], "millisecond" => [-3, "second"], "millisecond_angle" => [-3, "second_angle"], "millisteradian" => [-3, "steradian"], "millistokes" => [-3, "stokes"], "millitesla" => [-3, "tesla"], "milliton" => [-3, "ton"], "millitonne" => [-3, "tonne"], "millitorr" => [-3, "torr"], "millivolt" => [-3, "volt"], "milliwatt" => [-3, "watt"], "milliweber" => [-3, "weber"], "milliyard" => [-3, "yard"], "milliyd" => [-3, "yd"], "milliyear" => [-3, "year"], "min" => [-3, "in"], "minutes" => [0, "minute"], "minutes_angle" => [0, "minute_angle"], "mkgf" => [-3, "kgf"], "mkph" => [-3, "kph"], "mlb" => [-3, "lb"], "mlm" => [-3, "lm"], "mlx" => [-3, "lx"], "mly" => [-3, "ly"], "mm" => [-3, "m"], "mmb" => [-3, "mb"], "mmercury" => [-3, "mercury"], "mmgal" => [-3, "mgal"], "mmin" => [-3, "min"], "mmol" => [-3, "mol"], "mmon" => [-3, "mon"], "mmph" => [-3, "mph"], "mohm" => [-3, "ohm"], "moles" => [0, "mole"], "months" => [0, "month"], "moz" => [-3, "oz"], "mpc" => [-3, "pc"], "mpsi" => [-3, "psi"], "mrad" => [-3, "rad"], "ms" => [-3, "s"], "msr" => [-3, "sr"], "mt" => [-3, "t"], "myr" => [-3, "yr"], "nA" => [-9, "A"], "nAu" => [-9, "Au"], "nBq" => [-9, "Bq"], "nC" => [-9, "C"], "nF" => [-9, "F"], "nG" => [-9, "G"], "nGal" => [-9, "Gal"], "nGy" => [-9, "Gy"], "nH" => [-9, "H"], "nHg" => [-9, "Hg"], "nHz" => [-9, "Hz"], "nJ" => [-9, "J"], "nK" => [-9, "K"], "nL" => [-9, "L"], "nN" => [-9, "N"], "nP" => [-9, "P"], "nPa" => [-9, "Pa"], "nS" => [-9, "S"], "nSt" => [-9, "St"], "nSv" => [-9, "Sv"], "nT" => [-9, "T"], "nV" => [-9, "V"], "nW" => [-9, "W"], "nWb" => [-9, "Wb"], "na" => [-9, "a"], "nac" => [-9, "ac"], "nanoCelsius" => [-9, "Celsius"], "nanoFahrenheit" => [-9, "Fahrenheit"], "nanoJulian_year" => [-9, "Julian_year"], "nanoPascal" => [-9, "Pascal"], "nanoacre" => [-9, "acre"], "nanoampere" => [-9, "ampere"], "nanoangstrom" => [-9, "angstrom"], "nanoangular_degree" => [-9, "angular_degree"], "nanoangular_minute" => [-9, "angular_minute"], "nanoangular_second" => [-9, "angular_second"], "nanoare" => [-9, "are"], "nanoatmosphere" => [-9, "atmosphere"], "nanocalorie" => [-9, "calorie"], "nanocandela" => [-9, "candela"], "nanocelsius" => [-9, "celsius"], "nanocentigrade" => [-9, "centigrade"], "nanocentury" => [-9, "century"], "nanochain" => [-9, "chain"], "nanocommon_year" => [-9, "common_year"], "nanocoulomb" => [-9, "coulomb"], "nanoday" => [-9, "day"], "nanodegK" => [-9, "degK"], "nanodeg_K" => [-9, "deg_K"], "nanodegree" => [-9, "degree"], "nanodegreeK" => [-9, "degreeK"], "nanodyne" => [-9, "dyne"], "nanoerg" => [-9, "erg"], "nanofahrenheit" => [-9, "fahrenheit"], "nanofarad" => [-9, "farad"], "nanofermi" => [-9, "fermi"], "nanogal" => [-9, "gal"], "nanogauss" => [-9, "gauss"], "nanogram" => [-9, "gram"], "nanohectare" => [-9, "hectare"], "nanohertz" => [-9, "hertz"], "nanohour" => [-9, "hour"], "nanoinch" => [-9, "inch"], "nanojoule" => [-9, "joule"], "nanokelvin" => [-9, "kelvin"], "nanokilogram" => [-9, "kilogram"], "nanoknot" => [-9, "knot"], "nanolitre" => [-9, "litre"], "nanometer" => [-9, "meter"], "nanometre" => [-9, "metre"], "nanomicron" => [-9, "micron"], "nanomile" => [-9, "mile"], "nanomillibar" => [-9, "millibar"], "nanominute" => [-9, "minute"], "nanominute_angle" => [-9, "minute_angle"], "nanomole" => [-9, "mole"], "nanomonth" => [-9, "month"], "nanonewton" => [-9, "newton"], "nanoounce" => [-9, "ounce"], "nanoparsec" => [-9, "parsec"], "nanopascal" => [-9, "pascal"], "nanopentad" => [-9, "pentad"], "nanopercent" => [-9, "percent"], "nanopoise" => [-9, "poise"], "nanopound" => [-9, "pound"], "nanoradian" => [-9, "radian"], "nanosecond" => [-9, "second"], "nanosecond_angle" => [-9, "second_angle"], "nanosteradian" => [-9, "steradian"], "nanostokes" => [-9, "stokes"], "nanotesla" => [-9, "tesla"], "nanoton" => [-9, "ton"], "nanotonne" => [-9, "tonne"], "nanotorr" => [-9, "torr"], "nanovolt" => [-9, "volt"], "nanowatt" => [-9, "watt"], "nanoweber" => [-9, "weber"], "nanoyard" => [-9, "yard"], "nanoyd" => [-9, "yd"], "nanoyear" => [-9, "year"], "natm" => [-9, "atm"], "nbar" => [-9, "bar"], "ncal" => [-9, "cal"], "ncd" => [-9, "cd"], "nconventional_mercury" => [-9, "conventional_mercury"], "ndegC" => [-9, "degC"], "ndegF" => [-9, "degF"], "ndeg_C" => [-9, "deg_C"], "ndeg_F" => [-9, "deg_F"], "ndegreeC" => [-9, "degreeC"], "ndegreeF" => [-9, "degreeF"], "ndegree_C" => [-9, "degree_C"], "ndegree_E" => [-9, "degree_E"], "ndegree_F" => [-9, "degree_F"], "ndegree_N" => [-9, "degree_N"], "ndegree_R" => [-9, "degree_R"], "ndegree_S" => [-9, "degree_S"], "ndegree_W" => [-9, "degree_W"], "ndegree_c" => [-9, "degree_c"], "ndegree_east" => [-9, "degree_east"], "ndegree_f" => [-9, "degree_f"], "ndegree_north" => [-9, "degree_north"], "ndegree_south" => [-9, "degree_south"], "ndegree_west" => [-9, "degree_west"], "ndegrees_east" => [-9, "degrees_east"], "ndegrees_north" => [-9, "degrees_north"], "ndegrees_south" => [-9, "degrees_south"], "ndegrees_west" => [-9, "degrees_west"], "ndyn" => [-9, "dyn"], "nerg" => [-9, "erg"], "newtons" => [0, "newton"], "nforce" => [-9, "force"], "ng" => [-9, "g"], "ngravity" => [-9, "gravity"], "nh" => [-9, "h"], "nhg" => [-9, "hg"], "nhr" => [-9, "hr"], "nin" => [-9, "in"], "nkgf" => [-9, "kgf"], "nkph" => [-9, "kph"], "nlb" => [-9, "lb"], "nlm" => [-9, "lm"], "nlx" => [-9, "lx"], "nly" => [-9, "ly"], "nm" => [-9, "m"], "nmb" => [-9, "mb"], "nmercury" => [-9, "mercury"], "nmgal" => [-9, "mgal"], "nmin" => [-9, "min"], "nmol" => [-9, "mol"], "nmon" => [-9, "mon"], "nmph" => [-9, "mph"], "nohm" => [-9, "ohm"], "noz" => [-9, "oz"], "npc" => [-9, "pc"], "npsi" => [-9, "psi"], "nrad" => [-9, "rad"], "ns" => [-9, "s"], "nsr" => [-9, "sr"], "nt" => [-9, "t"], "nyr" => [-9, "yr"], "ounces" => [0, "ounce"], "pA" => [-12, "A"], "pAu" => [-12, "Au"], "pBq" => [-12, "Bq"], "pC" => [-12, "C"], "pF" => [-12, "F"], "pG" => [-12, "G"], "pGal" => [-12, "Gal"], "pGy" => [-12, "Gy"], "pH" => [-12, "H"], "pHg" => [-12, "Hg"], "pHz" => [-12, "Hz"], "pJ" => [-12, "J"], "pK" => [-12, "K"], "pL" => [-12, "L"], "pN" => [-12, "N"], "pP" => [-12, "P"], "pPa" => [-12, "Pa"], "pS" => [-12, "S"], "pSt" => [-12, "St"], "pSv" => [-12, "Sv"], "pT" => [-12, "T"], "pV" => [-12, "V"], "pW" => [-12, "W"], "pWb" => [-12, "Wb"], "pa" => [-12, "a"], "pac" => [-12, "ac"], "parsecs" => [0, "parsec"], "pascals" => [0, "pascal"], "patm" => [-12, "atm"], "pbar" => [-12, "bar"], "pcal" => [-12, "cal"], "pcd" => [-12, "cd"], "pconventional_mercury" => [-12, "conventional_mercury"], "pdegC" => [-12, "degC"], "pdegF" => [-12, "degF"], "pdeg_C" => [-12, "deg_C"], "pdeg_F" => [-12, "deg_F"], "pdegreeC" => [-12, "degreeC"], "pdegreeF" => [-12, "degreeF"], "pdegree_C" => [-12, "degree_C"], "pdegree_E" => [-12, "degree_E"], "pdegree_F" => [-12, "degree_F"], "pdegree_N" => [-12, "degree_N"], "pdegree_R" => [-12, "degree_R"], "pdegree_S" => [-12, "degree_S"], "pdegree_W" => [-12, "degree_W"], "pdegree_c" => [-12, "degree_c"], "pdegree_east" => [-12, "degree_east"], "pdegree_f" => [-12, "degree_f"], "pdegree_north" => [-12, "degree_north"], "pdegree_south" => [-12, "degree_south"], "pdegree_west" => [-12, "degree_west"], "pdegrees_east" => [-12, "degrees_east"], "pdegrees_north" => [-12, "degrees_north"], "pdegrees_south" => [-12, "degrees_south"], "pdegrees_west" => [-12, "degrees_west"], "pdyn" => [-12, "dyn"], "pentads" => [0, "pentad"], "percents" => [0, "percent"], "perg" => [-12, "erg"], "petaCelsius" => [15, "Celsius"], "petaFahrenheit" => [15, "Fahrenheit"], "petaJulian_year" => [15, "Julian_year"], "petaPascal" => [15, "Pascal"], "petaacre" => [15, "acre"], "petaampere" => [15, "ampere"], "petaangstrom" => [15, "angstrom"], "petaangular_degree" => [15, "angular_degree"], "petaangular_minute" => [15, "angular_minute"], "petaangular_second" => [15, "angular_second"], "petaare" => [15, "are"], "petaatmosphere" => [15, "atmosphere"], "petacalorie" => [15, "calorie"], "petacandela" => [15, "candela"], "petacelsius" => [15, "celsius"], "petacentigrade" => [15, "centigrade"], "petacentury" => [15, "century"], "petachain" => [15, "chain"], "petacommon_year" => [15, "common_year"], "petacoulomb" => [15, "coulomb"], "petaday" => [15, "day"], "petadegK" => [15, "degK"], "petadeg_K" => [15, "deg_K"], "petadegree" => [15, "degree"], "petadegreeK" => [15, "degreeK"], "petadyne" => [15, "dyne"], "petaerg" => [15, "erg"], "petafahrenheit" => [15, "fahrenheit"], "petafarad" => [15, "farad"], "petafermi" => [15, "fermi"], "petagal" => [15, "gal"], "petagauss" => [15, "gauss"], "petagram" => [15, "gram"], "petahectare" => [15, "hectare"], "petahertz" => [15, "hertz"], "petahour" => [15, "hour"], "petainch" => [15, "inch"], "petajoule" => [15, "joule"], "petakelvin" => [15, "kelvin"], "petakilogram" => [15, "kilogram"], "petaknot" => [15, "knot"], "petalitre" => [15, "litre"], "petameter" => [15, "meter"], "petametre" => [15, "metre"], "petamicron" => [15, "micron"], "petamile" => [15, "mile"], "petamillibar" => [15, "millibar"], "petaminute" => [15, "minute"], "petaminute_angle" => [15, "minute_angle"], "petamole" => [15, "mole"], "petamonth" => [15, "month"], "petanewton" => [15, "newton"], "petaounce" => [15, "ounce"], "petaparsec" => [15, "parsec"], "petapascal" => [15, "pascal"], "petapentad" => [15, "pentad"], "petapercent" => [15, "percent"], "petapoise" => [15, "poise"], "petapound" => [15, "pound"], "petaradian" => [15, "radian"], "petasecond" => [15, "second"], "petasecond_angle" => [15, "second_angle"], "petasteradian" => [15, "steradian"], "petastokes" => [15, "stokes"], "petatesla" => [15, "tesla"], "petaton" => [15, "ton"], "petatonne" => [15, "tonne"], "petatorr" => [15, "torr"], "petavolt" => [15, "volt"], "petawatt" => [15, "watt"], "petaweber" => [15, "weber"], "petayard" => [15, "yard"], "petayd" => [15, "yd"], "petayear" => [15, "year"], "pforce" => [-12, "force"], "pg" => [-12, "g"], "pgravity" => [-12, "gravity"], "ph" => [-12, "h"], "phg" => [-12, "hg"], "phr" => [-12, "hr"], "picoCelsius" => [-12, "Celsius"], "picoFahrenheit" => [-12, "Fahrenheit"], "picoJulian_year" => [-12, "Julian_year"], "picoPascal" => [-12, "Pascal"], "picoacre" => [-12, "acre"], "picoampere" => [-12, "ampere"], "picoangstrom" => [-12, "angstrom"], "picoangular_degree" => [-12, "angular_degree"], "picoangular_minute" => [-12, "angular_minute"], "picoangular_second" => [-12, "angular_second"], "picoare" => [-12, "are"], "picoatmosphere" => [-12, "atmosphere"], "picocalorie" => [-12, "calorie"], "picocandela" => [-12, "candela"], "picocelsius" => [-12, "celsius"], "picocentigrade" => [-12, "centigrade"], "picocentury" => [-12, "century"], "picochain" => [-12, "chain"], "picocommon_year" => [-12, "common_year"], "picocoulomb" => [-12, "coulomb"], "picoday" => [-12, "day"], "picodegK" => [-12, "degK"], "picodeg_K" => [-12, "deg_K"], "picodegree" => [-12, "degree"], "picodegreeK" => [-12, "degreeK"], "picodyne" => [-12, "dyne"], "picoerg" => [-12, "erg"], "picofahrenheit" => [-12, "fahrenheit"], "picofarad" => [-12, "farad"], "picofermi" => [-12, "fermi"], "picogal" => [-12, "gal"], "picogauss" => [-12, "gauss"], "picogram" => [-12, "gram"], "picohectare" => [-12, "hectare"], "picohertz" => [-12, "hertz"], "picohour" => [-12, "hour"], "picoinch" => [-12, "inch"], "picojoule" => [-12, "joule"], "picokelvin" => [-12, "kelvin"], "picokilogram" => [-12, "kilogram"], "picoknot" => [-12, "knot"], "picolitre" => [-12, "litre"], "picometer" => [-12, "meter"], "picometre" => [-12, "metre"], "picomicron" => [-12, "micron"], "picomile" => [-12, "mile"], "picomillibar" => [-12, "millibar"], "picominute" => [-12, "minute"], "picominute_angle" => [-12, "minute_angle"], "picomole" => [-12, "mole"], "picomonth" => [-12, "month"], "piconewton" => [-12, "newton"], "picoounce" => [-12, "ounce"], "picoparsec" => [-12, "parsec"], "picopascal" => [-12, "pascal"], "picopentad" => [-12, "pentad"], "picopercent" => [-12, "percent"], "picopoise" => [-12, "poise"], "picopound" => [-12, "pound"], "picoradian" => [-12, "radian"], "picosecond" => [-12, "second"], "picosecond_angle" => [-12, "second_angle"], "picosteradian" => [-12, "steradian"], "picostokes" => [-12, "stokes"], "picotesla" => [-12, "tesla"], "picoton" => [-12, "ton"], "picotonne" => [-12, "tonne"], "picotorr" => [-12, "torr"], "picovolt" => [-12, "volt"], "picowatt" => [-12, "watt"], "picoweber" => [-12, "weber"], "picoyard" => [-12, "yard"], "picoyd" => [-12, "yd"], "picoyear" => [-12, "year"], "pin" => [-12, "in"], "pkgf" => [-12, "kgf"], "pkph" => [-12, "kph"], "plb" => [-12, "lb"], "plm" => [-12, "lm"], "plx" => [-12, "lx"], "ply" => [-12, "ly"], "pm" => [-12, "m"], "pmb" => [-12, "mb"], "pmercury" => [-12, "mercury"], "pmgal" => [-12, "mgal"], "pmin" => [-12, "min"], "pmol" => [-12, "mol"], "pmon" => [-12, "mon"], "pmph" => [-12, "mph"], "pohm" => [-12, "ohm"], "poises" => [0, "poise"], "pounds" => [0, "pound"], "poz" => [-12, "oz"], "ppc" => [-12, "pc"], "ppsi" => [-12, "psi"], "prad" => [-12, "rad"], "ps" => [-12, "s"], "psr" => [-12, "sr"], "pt" => [-12, "t"], "pyr" => [-12, "yr"], "radians" => [0, "radian"], "seconds" => [0, "second"], "seconds_angle" => [0, "second_angle"], "steradians" => [0, "steradian"], "stokeses" => [0, "stokes"], "telaCelsius" => [12, "Celsius"], "telaFahrenheit" => [12, "Fahrenheit"], "telaJulian_year" => [12, "Julian_year"], "telaPascal" => [12, "Pascal"], "telaacre" => [12, "acre"], "telaampere" => [12, "ampere"], "telaangstrom" => [12, "angstrom"], "telaangular_degree" => [12, "angular_degree"], "telaangular_minute" => [12, "angular_minute"], "telaangular_second" => [12, "angular_second"], "telaare" => [12, "are"], "telaatmosphere" => [12, "atmosphere"], "telacalorie" => [12, "calorie"], "telacandela" => [12, "candela"], "telacelsius" => [12, "celsius"], "telacentigrade" => [12, "centigrade"], "telacentury" => [12, "century"], "telachain" => [12, "chain"], "telacommon_year" => [12, "common_year"], "telacoulomb" => [12, "coulomb"], "teladay" => [12, "day"], "teladegK" => [12, "degK"], "teladeg_K" => [12, "deg_K"], "teladegree" => [12, "degree"], "teladegreeK" => [12, "degreeK"], "teladyne" => [12, "dyne"], "telaerg" => [12, "erg"], "telafahrenheit" => [12, "fahrenheit"], "telafarad" => [12, "farad"], "telafermi" => [12, "fermi"], "telagal" => [12, "gal"], "telagauss" => [12, "gauss"], "telagram" => [12, "gram"], "telahectare" => [12, "hectare"], "telahertz" => [12, "hertz"], "telahour" => [12, "hour"], "telainch" => [12, "inch"], "telajoule" => [12, "joule"], "telakelvin" => [12, "kelvin"], "telakilogram" => [12, "kilogram"], "telaknot" => [12, "knot"], "telalitre" => [12, "litre"], "telameter" => [12, "meter"], "telametre" => [12, "metre"], "telamicron" => [12, "micron"], "telamile" => [12, "mile"], "telamillibar" => [12, "millibar"], "telaminute" => [12, "minute"], "telaminute_angle" => [12, "minute_angle"], "telamole" => [12, "mole"], "telamonth" => [12, "month"], "telanewton" => [12, "newton"], "telaounce" => [12, "ounce"], "telaparsec" => [12, "parsec"], "telapascal" => [12, "pascal"], "telapentad" => [12, "pentad"], "telapercent" => [12, "percent"], "telapoise" => [12, "poise"], "telapound" => [12, "pound"], "telaradian" => [12, "radian"], "telasecond" => [12, "second"], "telasecond_angle" => [12, "second_angle"], "telasteradian" => [12, "steradian"], "telastokes" => [12, "stokes"], "telatesla" => [12, "tesla"], "telaton" => [12, "ton"], "telatonne" => [12, "tonne"], "telatorr" => [12, "torr"], "telavolt" => [12, "volt"], "telawatt" => [12, "watt"], "telaweber" => [12, "weber"], "telayard" => [12, "yard"], "telayd" => [12, "yd"], "telayear" => [12, "year"], "teslas" => [0, "tesla"], "tonnes" => [0, "tonne"], "tons" => [0, "ton"], "torrs" => [0, "torr"], "uA" => [-6, "A"], "uAu" => [-6, "Au"], "uBq" => [-6, "Bq"], "uC" => [-6, "C"], "uF" => [-6, "F"], "uG" => [-6, "G"], "uGal" => [-6, "Gal"], "uGy" => [-6, "Gy"], "uH" => [-6, "H"], "uHg" => [-6, "Hg"], "uHz" => [-6, "Hz"], "uJ" => [-6, "J"], "uK" => [-6, "K"], "uL" => [-6, "L"], "uN" => [-6, "N"], "uP" => [-6, "P"], "uPa" => [-6, "Pa"], "uS" => [-6, "S"], "uSt" => [-6, "St"], "uSv" => [-6, "Sv"], "uT" => [-6, "T"], "uV" => [-6, "V"], "uW" => [-6, "W"], "uWb" => [-6, "Wb"], "ua" => [-6, "a"], "uac" => [-6, "ac"], "uatm" => [-6, "atm"], "ubar" => [-6, "bar"], "ucal" => [-6, "cal"], "ucd" => [-6, "cd"], "uconventional_mercury" => [-6, "conventional_mercury"], "udegC" => [-6, "degC"], "udegF" => [-6, "degF"], "udeg_C" => [-6, "deg_C"], "udeg_F" => [-6, "deg_F"], "udegreeC" => [-6, "degreeC"], "udegreeF" => [-6, "degreeF"], "udegree_C" => [-6, "degree_C"], "udegree_E" => [-6, "degree_E"], "udegree_F" => [-6, "degree_F"], "udegree_N" => [-6, "degree_N"], "udegree_R" => [-6, "degree_R"], "udegree_S" => [-6, "degree_S"], "udegree_W" => [-6, "degree_W"], "udegree_c" => [-6, "degree_c"], "udegree_east" => [-6, "degree_east"], "udegree_f" => [-6, "degree_f"], "udegree_north" => [-6, "degree_north"], "udegree_south" => [-6, "degree_south"], "udegree_west" => [-6, "degree_west"], "udegrees_east" => [-6, "degrees_east"], "udegrees_north" => [-6, "degrees_north"], "udegrees_south" => [-6, "degrees_south"], "udegrees_west" => [-6, "degrees_west"], "udyn" => [-6, "dyn"], "uerg" => [-6, "erg"], "uforce" => [-6, "force"], "ug" => [-6, "g"], "ugravity" => [-6, "gravity"], "uh" => [-6, "h"], "uhg" => [-6, "hg"], "uhr" => [-6, "hr"], "uin" => [-6, "in"], "ukgf" => [-6, "kgf"], "ukph" => [-6, "kph"], "ulb" => [-6, "lb"], "ulm" => [-6, "lm"], "ulx" => [-6, "lx"], "uly" => [-6, "ly"], "um" => [-6, "m"], "umb" => [-6, "mb"], "umercury" => [-6, "mercury"], "umgal" => [-6, "mgal"], "umin" => [-6, "min"], "umol" => [-6, "mol"], "umon" => [-6, "mon"], "umph" => [-6, "mph"], "uohm" => [-6, "ohm"], "uoz" => [-6, "oz"], "upc" => [-6, "pc"], "upsi" => [-6, "psi"], "urad" => [-6, "rad"], "us" => [-6, "s"], "usr" => [-6, "sr"], "ut" => [-6, "t"], "uyr" => [-6, "yr"], "volts" => [0, "volt"], "watts" => [0, "watt"], "webers" => [0, "weber"], "yards" => [0, "yard"], "yds" => [0, "yd"], "years" => [0, "year"], } UPLURALS = { "Celsiuses" => "Celsius", "Fahrenheits" => "Fahrenheit", "Julians_year" => "Julian_year", "Pascals" => "Pascal", "acres" => "acre", "amperes" => "ampere", "angstroms" => "angstrom", "angulars_degree" => "angular_degree", "angulars_minute" => "angular_minute", "angulars_second" => "angular_second", "ares" => "are", "atmospheres" => "atmosphere", "calories" => "calorie", "candelas" => "candela", "celsiuses" => "celsius", "centigrades" => "centigrade", "centuries" => "century", "chains" => "chain", "commons_year" => "common_year", "coulombs" => "coulomb", "days" => "day", "degKs" => "degK", "degreeKs" => "degreeK", "degrees" => "degree", "degs_K" => "deg_K", "dynes" => "dyne", "ergs" => "erg", "fahrenheits" => "fahrenheit", "farads" => "farad", "fermis" => "fermi", "gals" => "gal", "gausses" => "gauss", "grams" => "gram", "hectares" => "hectare", "hertzes" => "hertz", "hours" => "hour", "inchs" => "inch", "joules" => "joule", "kelvins" => "kelvin", "kilograms" => "kilogram", "knots" => "knot", "litres" => "litre", "meters" => "meter", "metres" => "metre", "microns" => "micron", "miles" => "mile", "millibars" => "millibar", "minutes" => "minute", "minutes_angle" => "minute_angle", "moles" => "mole", "months" => "month", "newtons" => "newton", "ounces" => "ounce", "parsecs" => "parsec", "pascals" => "pascal", "pentads" => "pentad", "percents" => "percent", "poises" => "poise", "pounds" => "pound", "radians" => "radian", "seconds" => "second", "seconds_angle" => "second_angle", "steradians" => "steradian", "stokeses" => "stokes", "teslas" => "tesla", "tonnes" => "tonne", "tons" => "ton", "torrs" => "torr", "volts" => "volt", "watts" => "watt", "webers" => "weber", "yards" => "yard", "yds" => "yd", "years" => "year", } end class NumberNode < TerminalNode def initialize(arg) raise TypeError unless Numeric === arg @a = arg end UNITY = NumberNode.new(1) ZERO = NumberNode.new(0) def to_s if @a == @a.to_i sprintf("%d",@a) else String(@a) end end attr_reader :a alias :value :a alias :factor :a def == (other) case other when NumberNode @a == other.a else false end end def add_eval(another) raise TypeError unless NumberNode === another NumberNode.new(@a + another.value) end def mul_eval(another) case another when NumberNode then NumberNode.new(@a * another.a) when PowNode raise TypeError unless NumberNode === another.lhs raise TypeError unless NumberNode === another.rhs NumberNode.new(@a * Units::pow_f(another.lhs.value, another.rhs.value)) else raise TypeError end end def name; "1"; end def power; UNITY; end end class XDate def initialize(year, month, day) @year, @month, @day = year.to_i, month.to_i, day.to_i end attr_reader :year, :month, :day def to_s format('%04d-%02d-%02d', @year, @month, @day) end alias :inspect :to_s def to_time Time.gm(@year, @month, @day) end def to_date Date.new(@year, @month, @day) end def -(other) case other when XDate (to_date - other.to_date) when Time to_time - other when Date (to_date - other.to_date) else to_date - other end end def +(other) t = to_date + other self.class.new(t.year, t.month, t.mday) end end class TimeNode < TerminalNode def initialize(date, time, zone) @date, @time, @zone = date, time, zone if :now === @date then now = Time.now.utc @date = XDate.new(now.year, now.month, now.day) @time = ((now.hour * 60 + now.min) * 60 + Float(now.sec)) else qdays = (@time / 86400).floor if not qdays.zero? @date += qdays @time -= (qdays * 86400) end end raise TypeError unless XDate === @date @time = 0.0 unless @time raise TypeError unless Float === @time @zone = 0 unless @zone raise TypeError unless Integer === @zone end attr_reader :date, :time, :zone def to_s hr = @time.floor / 3600 mi = (@time.floor / 60) % 60 sc = @time % 60 tzm = @zone.abs tzh = tzm / 60 tzm %= 60 tzh = -tzh if @zone < 0 format("%sT%02d:%02d:%05.2f %+03d:%02d", \ @date.to_s, hr, mi, sc, tzh, tzm) end def self::pentad(d) (d > 25) ? 5 : ((d - 1) / 5) end def add_time(increment) inc = increment.reduce5 case inc.name when 's' t2 = @time + inc.factor d2 = @date + (t2 / 86400) t2 = t2 % 86400 self.class.new(d2, t2, @zone) when 'pentad' ifac = Integer(inc.factor) ipen = ifac % 6 imon = ifac / 6 spen = self.class.pentad(@date.day) smon = @date.month + imon + spen / 6 spen = spen % 6 sday = spen * 5 + (@date.day - 1) % 5 + 1 syear = @date.year + (smon - 1) / 12 smon = (smon - 1) % 12 + 1 sdate = XDate.new(syear, smon, sday) self.class.new(sdate, @time, @zone) else raise "bad time unit '#{inc.name}'" end end def utcsod @time - @zone * 60 end def div_time(units) base = units.ref inc = units.deref.reduce5 begin incname = inc.name rescue Exception incname = "(undefined)" end case incname when 's' dif = (@date - base.date) * 86400 + (utcsod - base.utcsod) dif / inc.factor when 'pentad' dif = (@date.year - base.date.year) * 72 dif += (@date.month - base.date.month) * 6 dif += self.class.pentad(@date.day) dif -= self.class.pentad(base.date.day) dif = Float(dif) if dif % inc.factor != 0 dif / inc.factor else raise "bad time unit '#{incname}'" end end end class PowNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs raise TypeError unless NumberNode === @rhs end def to_s lhs = @lhs.to_s case lhs when /\d$/, /[\d\.]/ lhs = "(#{lhs})" end rhs = @rhs.to_s if rhs == '1' lhs else rhs = "^(#{rhs})" if (/\./ =~ rhs) lhs + rhs end end attr_reader :lhs, :rhs alias :power :rhs def pow_eval(other) case other when NumberNode PowNode.new(@lhs, @rhs.mul_eval(other)) else super(other) end end def flatten2 x = @lhs.flatten2 case x when NumberNode a = @lhs.pow_eval(@rhs) when TerminalNode a = self when PowNode a = PowNode.new(x.lhs, x.rhs.mul_eval(@rhs)) when MulNode, MultiNode a = MultiNode.new() for gc in x a.append(gc.pow_eval(@rhs)) end else raise "internal error" end return a end def name case @lhs when NumberNode, NameNode @lhs.name else raise "internal error" end end def value case @lhs when NumberNode Units::pow_f(@lhs.value, @rhs.value) else raise(format('%s#value: internal error', self.class.to_s)) end end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value) * another.value) else self.class.new(@lhs, @rhs.add_eval(another.power)) end end def sort case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value)) else self end end def factor Units::pow_f(@lhs.factor, @rhs.value) end end module Kakezan def flatten2 r = MultiNode.new() each do |child| case child when MultiNode r.append child when MulNode r.append child.flatten2 when ContainerNode r.append child.flatten2 else r.append child end end r end def name n = nil for c in @children next if NumberNode === c na = c.name if n.nil? n = na else raise "multiple names found" if na != n end end n = "1" if n.nil? n end def factor f = 1 for c in @children f *= c.factor end f end end class MulNode < ContainerNode include BinaryNode include Kakezan def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end def to_s lhs = @lhs.to_s rhs = @rhs.to_s if (/\d$/ =~ lhs && /^\w/ =~ rhs) then "#{lhs} #{rhs}" else "#{lhs}.#{rhs}" end end end class MultiNode < ContainerNode include Kakezan def initialize(*children) @children = children for c in @children raise "# MultiNode.new(#{children.inspect})" unless Node === c end end def to_s s = @children.join(';') s.gsub(/\d;\w/) { |dsw| dsw.sub(/;/, ' ') }.gsub(/;/, '.') end def each @children.each {|child| yield child } end attr_reader :children def append(other) case other when MultiNode @children += other.children else @children.push other end end def sort table = {} for child in self name = child.name if (table.include?(name)) then table[name] = table[name].mul_eval(child) else table[name] = child end end list = [] for name in table.keys.sort candi = table[name] if PowNode === candi and NumberNode === candi.lhs then v = candi.value list.push NumberNode.new(v) unless v == 1 next end next if candi.power.value == 0 list.push candi end if list.length > 1 list.delete(NumberNode::UNITY) end self.class.new(*list) end def collect_hash(stopper, op) list = [] for child in self list.push(child.send(op, stopper)) end self.class.new(*list).flatten2 end def expand(stopper) collect_hash(stopper, :expand) end def unalias(stopper) collect_hash(stopper, :unalias) end def foldnumber(stopper) collect_hash(stopper, :foldnumber) end def value raise "this is dimensional units" if (@children.size > 1) @children.first ? @children.first.value : NumberNode::UNITY.value end end class ShiftNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end attr_reader :lhs, :rhs alias :ref :rhs def to_s "(#{@lhs.to_s} @ #{@rhs.to_s})" end def trim2; @lhs; end def trim self.class.new(@lhs.trim, @rhs.trim2) end def flatten2; @lhs; end def flatten lf = @lhs.flatten case lf when ShiftNode rf = lf.rhs.add_eval(@rhs) self.class.new(lf.lhs, rf) else self.class.new(lf, @rhs.flatten) end end def sort self.class.new(@lhs.sort, @rhs.sort) end def ref case @lhs when ShiftNode @lhs.ref.add_eval(@rhs) else @rhs end end def deref case @lhs when ShiftNode @lhs.deref else @lhs end end def name @lhs.name end def factor @lhs.factor end end def initialize string case string when String @string, @ptree = string, nil when Node @string, @ptree = nil, string else @string, @ptree = String(string), nil end @copy = @lexstat = nil end # # === LEXICAL ANALYZER === # def rewind @copy = @string.dup.strip @lexstat = nil end RE_SPACE = '([ \t])' RE_INTEGER = '([-+]?\d+)' RE_EXP = '([eE][-+]?[0-9]+)' RE_REAL = "([-+]?[0-9]*(\\.[0-9]*#{RE_EXP}?|#{RE_EXP}))" RE_YEAR = "([-+]?[0-9]{1,4})" RE_MONTH = "(0?[1-9]|1[0-2])" RE_DAY = "([12][0-9]|30|31|0?[1-9])" RE_HOUR = "(2[0-3]|[0-1]?[0-9])" RE_MINUTE = "([0-5]?[0-9])" RE_SECOND = "((#{RE_MINUTE}|60)(\\.[0-9]*)?)" RE_NAME = "(%|[a-zA-Z][a-zA-Z_]*([0-9]+[a-zA-Z_]+)*)" RE_DATE = "#{RE_YEAR}-#{RE_MONTH}-#{RE_DAY}" RE_TIME = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9])(:#{RE_SECOND})?)?" RE_HandM = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9]))?" def next_token # decomment @copy.sub!(/^#.*/, ''); if @copy.sub!(%r{^\s*(\))}, '') then @lexstat = nil return [$1, $1] end if @copy.sub!(%r{^\s*(\()\s*}, '') then return [$1, $1] end if @copy.sub!(%r{^[ \t]*(@)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(after|from|since|ref)[ \t]+}i, '') then @lexstat = :SHIFT_SEEN return [:SHIFT, $1] end if @copy.sub!(%r{^[ \t]*(/)[ \t]*}, '') \ or @copy.sub!(%r{^[ \t]+(per)[ \t]+}i, '') then @lexstat = nil return [:DIVIDE, $1] end if @copy.sub!(%r{^(\^|\*\*)}, '') then @lexstat = nil return [:EXPONENT, $1] end if @copy.sub!(%r{^(\.|\*|[ \t]+)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_DATE}T?[ \t]*}, '') then y, m, d = $1, $2, $3 @lexstat = :DATE_SEEN return [:DATE, XDate.new(y.to_i, m.to_i, d.to_i)] end if :SHIFT_SEEN === @lexstat \ and @copy.sub!(%r{^now[ \t]*}, '') then @lexstat = nil return [:DATE, :now] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^#{RE_TIME}[ \t]*}, '') then h, m, s = $1, $3, $5 m = m.sub(/:/,'') if m s = 0 if s.nil? @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60 + Float(s))] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-2][0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :DATE_SEEN === @lexstat \ and @copy.sub!(%r{^([0-9])([0-5][0-9])[ \t]*}, '') then h, m = $1, $2 @lexstat = :TIME_SEEN return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^(UTC|Z)[ \t]*}, '') then @lexstat = nil return [:ZONE, 0] end if :TIME_SEEN === @lexstat \ and @copy.sub!(%r{^([-+]?)#{RE_HandM}[ \t]*}, '') then sgn, h, m = $1, $2, $4 m = m.sub(/:/,'') if m @lexstat = nil h = h.to_i h = -h if sgn == "-" m = m.to_i m = -m if sgn == "-" return [:ZONE, ((h * 60) + m)] end if @copy.sub!(%r{^#{RE_NAME}}, '') then @lexstat = nil return [:NAME, $1] end if @copy.sub!(%r{^#{RE_REAL}}, '') then @lexstat = nil return [:REAL, $1.to_f] end if @copy.sub!(%r{^#{RE_INTEGER}}, '') then @lexstat = nil return [:INT, $1.to_i] end if @copy.sub!(%r{^(-)}, '') then @lexstat = nil return [:MULTIPLY, $1] end if @copy.sub!(%r{^(.)}, '') then return [$1, $1] end return [false, false] end # # === USER LEVEL METHODS === # def tokens rewind x = [] while (t = next_token).first x.push t end x end def do_parse2 rewind return NumberNode.new(1) if @string.nil? or @string.empty? pa = do_parse pa ? pa : ErrorNode.new(@string) end def ptree @ptree = do_parse2 if not @ptree @ptree end def dup @string ? self.class.new(@string) : self.class.new(@ptree) end def parse dup.parse! end def parse! @ptree = do_parse2 if not @ptree self end def self::parse(string) new(string).parse! end =begin --- reduce0 just do nothing. =end def reduce0 self end =begin --- reduce1 removes unnecessary parentheses. =end def reduce1 @string = ptree.to_s self end =begin --- reduce2 removes shift operator within multiplication/division/exponent =end def reduce2 @ptree = ptree.reduce2 @string = nil self end =begin --- reduce3 flattens expression and collects all factors =end def reduce3 @ptree = ptree.reduce3 @string = nil self end =begin --- reduce4 collects terms with the same name =end def reduce4 @ptree = ptree.reduce4 @string = nil self end =begin --- reduce5 expands all terms recursively =end def reduce5 @ptree = ptree.reduce5 @string = nil self end attr_reader :string def to_s @string = @ptree.to_s if @string.nil? @string end def inspect if @ptree.nil? then "Units{#{@string}}" else "Units[#{@ptree.inspect}]".gsub(/Units::/, '').gsub(/Node\[/, '[') end end def self::[](string) new(string) end def self::parse(string) new(string).parse! end def eval(x = 0) r5 = ptree.reduce5 case r = r5.ref when TimeNode r.add(x, r5.name) else fac = NumberNode.new(x + r.value) self.class.new(MulNode.new(fac, r5.deref)) end end def convert(numeric, to_units) to_units = Units.new( to_units ) if to_units.is_a?(String) r5 = dup.ptree.reduce5 case r = r5.ref when TimeNode r.add_time(r5.deref.mul(numeric)).div_time(to_units.ptree) else shift1 = r.value numeric = shift1 + numeric if shift1 != 0 fact = r5.divide(tp = to_units.dup.ptree).reduce5.value numeric *= fact if fact != 1 shift2 = tp.reduce5.ref.value numeric = numeric - shift2 if shift2 != 0 numeric end end def factor_and_offset(to_units) # To convert a numeric from self to to_units: # scale_factor * numeric + add_offset to_units = Units.new( to_units ) if to_units.is_a?(String) add_offset = convert(0, to_units) scale_factor = convert(1, to_units) - add_offset [ scale_factor, add_offset ] end def convert2(val, to_units) # Like Units#convert, but applicable to any Numeric-like objects. # Returns the original value if the units are incompatible. to_units = Units.new( to_units ) if to_units.is_a?(String) if ( self == to_units ) val elsif ( self =~ to_units ) if Numeric===val convert( val, to_units ) else factor, offset = factor_and_offset( to_units ) val*factor + offset end else unless $VERBOSE.nil? $stderr.print( "*WARNING*: " + "incompatible units: #{self.to_s} and #{to_units.to_s}\n") caller(0).each{|c| $stderr.print "\t* ",c,"\n"} end val end end @@reduce = :reduce4 def self::reduce_level @@reduce.to_s[-1] end def self::reduce_level=(n) @@reduce = case n when 1 then :reduce1 when 2 then :reduce2 when 3 then :reduce3 when 4 then :reduce4 else :reduce5 end end def binop(op, other) case other when Numeric other = NumberNode.new(other) when Units other = other.ptree end q = self.ptree.send(op, other).send(@@reduce) Units.new(q) end def *(other) binop(:mul, other) end def **(other) binop(:pow, other) end def /(other) binop(:divide, other) end def ^(other) binop(:shift, other) end def ==(other) case other when self.class dup.reduce5.to_s == other.dup.reduce5.to_s else false end end #def === (other) # reduce5.ptree.deref.to_s == other.reduce5.ptree.deref.to_s #end alias === == #def === (other) # # returns true if other is within a factor and/or offset of difference. # case other # when self.class # (self/other).reduce5.ptree.children.each do |child| # return false if !( NumberNode === child ) # end # true # else # false # end #end def =~(other) case other when self.class (self/other).reduce5.ptree.children.each{ |node| return false unless NumberNode === node } true else false end end def self::pow_f(a, b) if Integer === b and b < 0 then a ** b.to_f else a ** b end end numru-units-1.9/src/numbernode.rb0000644000175000017500000000170311616210727017447 0ustar horinouthorinoutclass NumberNode < TerminalNode def initialize(arg) raise TypeError unless Numeric === arg @a = arg end UNITY = NumberNode.new(1) ZERO = NumberNode.new(0) def to_s if @a == @a.to_i sprintf("%d",@a) else String(@a) end end attr_reader :a alias :value :a alias :factor :a def == (other) case other when NumberNode @a == other.a else false end end def add_eval(another) raise TypeError unless NumberNode === another NumberNode.new(@a + another.value) end def mul_eval(another) case another when NumberNode then NumberNode.new(@a * another.a) when PowNode raise TypeError unless NumberNode === another.lhs raise TypeError unless NumberNode === another.rhs NumberNode.new(@a * Units::pow_f(another.lhs.value, another.rhs.value)) else raise TypeError end end def name; "1"; end def power; UNITY; end end numru-units-1.9/src/shiftnode.rb0000644000175000017500000000151610016557722017300 0ustar horinouthorinoutclass ShiftNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end attr_reader :lhs, :rhs alias :ref :rhs def to_s "(#{@lhs.to_s} @ #{@rhs.to_s})" end def trim2; @lhs; end def trim self.class.new(@lhs.trim, @rhs.trim2) end def flatten2; @lhs; end def flatten lf = @lhs.flatten case lf when ShiftNode rf = lf.rhs.add_eval(@rhs) self.class.new(lf.lhs, rf) else self.class.new(lf, @rhs.flatten) end end def sort self.class.new(@lhs.sort, @rhs.sort) end def ref case @lhs when ShiftNode @lhs.ref.add_eval(@rhs) else @rhs end end def deref case @lhs when ShiftNode @lhs.deref else @lhs end end def name @lhs.name end def factor @lhs.factor end end numru-units-1.9/src/makeutab.rb0000644000175000017500000000326310020516646017102 0ustar horinouthorinout SI_ABBREV = { 'E' => 18, 'P' => 15, 'T' => 12, 'G' => 9, 'M' => 6, 'k' => 3, 'h' => 2, 'da' => 1, 'd' => -1, 'c' => -2, 'm' => -3, 'u' => -6, 'n' => -9, 'p' => -12, 'f' => -15, 'a' => -18, } SI_PREFIX = { 'exa' => 18, 'peta' => 15, 'tela' => 12, 'giga' => 9, 'mega' => 6, 'kilo' => 3, 'hecto' => 2, 'deca' => 1, 'deci' => -1, 'centi' => -2, 'milli' => -3, 'micro' => -6, 'nano' => -9, 'pico' => -12, 'femto' => -15, 'atto' => -18, } def plural(string) case string when /^([^_]+)(_.*)/ pre, post = $1, $2 plural(pre) + post when /[szoj]$/ string.sub(/$/, "es") when /[^aeou]y$/ string.sub(/y$/, "ies") else string.sub(/$/, "s") end end udefs = {} ualiases = {} uplurals = {} while (line = gets) next if /^#/ =~ line case line.strip when /(\S+)\s+(\S)\s+(\S.*)/ name, mode, definition = $1, $2, $3 udefs[name] = definition when /(\S+)\s+(\S)/ name, mode = $1, $2 else next end case mode when /^S/ for prefix, power in SI_ABBREV next if prefix + name == 'kg' ualiases[prefix + name] = [power, name] end when /^P/ pname = plural(name) ualiases[pname] = [0, name] uplurals[pname] = name for prefix, power in SI_PREFIX ualiases[prefix + name] = [power, name] end end end def dumphash(hname, h) puts "#{hname} = {" s = "" for name in h.keys.sort a = " #{name.dump} => #{h[name].inspect}," if s.length + a.length > 72 puts s s = "" end s += a end if s.length > 0 puts s s = "" end puts "}" end puts "class NameNode" dumphash('UDEFS', udefs) dumphash('UALIASES', ualiases) dumphash('UPLURALS', uplurals) puts "end" numru-units-1.9/src/mulnode.rb0000644000175000017500000000463010105450767016760 0ustar horinouthorinout module Kakezan def flatten2 r = MultiNode.new() each do |child| case child when MultiNode r.append child when MulNode r.append child.flatten2 when ContainerNode r.append child.flatten2 else r.append child end end r end def name n = nil for c in @children next if NumberNode === c na = c.name if n.nil? n = na else raise "multiple names found" if na != n end end n = "1" if n.nil? n end def factor f = 1 for c in @children f *= c.factor end f end end class MulNode < ContainerNode include BinaryNode include Kakezan def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs end def to_s lhs = @lhs.to_s rhs = @rhs.to_s if (/\d$/ =~ lhs && /^\w/ =~ rhs) then "#{lhs} #{rhs}" else "#{lhs}.#{rhs}" end end end class MultiNode < ContainerNode include Kakezan def initialize(*children) @children = children for c in @children raise "# MultiNode.new(#{children.inspect})" unless Node === c end end def to_s s = @children.join(';') s.gsub(/\d;\w/) { |dsw| dsw.sub(/;/, ' ') }.gsub(/;/, '.') end def each @children.each {|child| yield child } end attr_reader :children def append(other) case other when MultiNode @children += other.children else @children.push other end end def sort table = {} for child in self name = child.name if (table.include?(name)) then table[name] = table[name].mul_eval(child) else table[name] = child end end list = [] for name in table.keys.sort candi = table[name] if PowNode === candi and NumberNode === candi.lhs then v = candi.value list.push NumberNode.new(v) unless v == 1 next end next if candi.power.value == 0 list.push candi end if list.length > 1 list.delete(NumberNode::UNITY) end self.class.new(*list) end def collect_hash(stopper, op) list = [] for child in self list.push(child.send(op, stopper)) end self.class.new(*list).flatten2 end def expand(stopper) collect_hash(stopper, :expand) end def unalias(stopper) collect_hash(stopper, :unalias) end def foldnumber(stopper) collect_hash(stopper, :foldnumber) end def value raise "this is dimensional units" if (@children.size > 1) @children.first ? @children.first.value : NumberNode::UNITY.value end end numru-units-1.9/src/utab.rb0000644000175000017500000024631712467011742016261 0ustar horinouthorinoutclass NameNode UDEFS = { "%" => "1e-2", "Au" => "astronomical_unit", "Bq" => "s-1", "C" => "A.s", "Celsius" => "K @ 273.15", "F" => "C/V", "Fahrenheit" => "degree_F", "G" => "gauss", "Gal" => "cm s-2", "Gy" => "J.kg-1", "H" => "Wb.A-1", "Hg" => "mercury", "Hz" => "1/s", "J" => "N.m", "Julian_year" => "365.25 day", "L" => "litre", "N" => "kg.m.s-2", "P" => "poise", "Pa" => "N.m-2", "Pascal" => "Pa", "S" => "A/V", "St" => "stokes", "Sv" => "J.kg-1", "T" => "Wb.m-2", "V" => "J/C", "W" => "J/s", "Wb" => "V.s", "a" => "are", "ac" => "acre", "acre" => "10 chain2", "ampere" => "A", "angstrom" => "1.0e-10 m", "angular_degree" => "degree", "angular_minute" => "minute_angle", "angular_second" => "second_angle", "are" => "100 m2", "astronomical_unit" => "1.49597870e11 m", "astronomical_units" => "1.49597870e11 m", "atm" => "atmosphere", "atmosphere" => "101325 Pa", "bar" => "1e6 dyn.cm-2", "cal" => "calorie", "calorie" => "4.18605 J", "candela" => "cd", "celsius" => "K @ 273.15", "centigrade" => "K @ 273.15", "century" => "100 year", "chain" => "22 yard", "common_year" => "365 day", "conventional_mercury" => "gravity 13595.10 kg/m3", "coulomb" => "C", "d" => "24 hour", "day" => "24 hour", "degC" => "K @ 273.15", "degF" => "degree_F", "degK" => "K", "deg_C" => "K @ 273.15", "deg_F" => "degree_F", "deg_K" => "K", "degree" => "pi.rad/180", "degreeC" => "K @ 273.15", "degreeF" => "degree_F", "degreeK" => "K", "degree_C" => "K @ 273.15", "degree_E" => "degree", "degree_F" => "degree_R @ 459.67", "degree_N" => "degree", "degree_R" => "K / 1.8", "degree_S" => "degree", "degree_W" => "degree", "degree_c" => "K @ 273.15", "degree_east" => "degree_E", "degree_f" => "degree_R @ 459.67", "degree_north" => "degree_N", "degree_south" => "degree_S", "degree_west" => "degree_W", "degrees_east" => "degree_E", "degrees_north" => "degree_N", "degrees_south" => "degree_S", "degrees_west" => "degree_W", "dyn" => "g.cm.s-2", "dyne" => "g.cm.s-2", "erg" => "dyn cm", "fahrenheit" => "degree_F", "farad" => "coulomb/volt", "feet" => "foot", "fermi" => "1.0e-15 m", "foot" => "12 inch", "force" => "9.80665 m.s-2", "ft" => "foot", "g" => "kg/1000", "gal" => "cm s-2", "gauss" => "T / 10000", "gpm" => "m", "gram" => "kg/1000", "gravity" => "9.806650 meter/second2", "h" => "60 min", "hectare" => "100 are", "hertz" => "Hz", "hg" => "mercury", "horse_power" => "75 m kilogram-force / s", "hour" => "60 min", "hr" => "60 min", "in" => "inch", "inch" => "2.54 cm", "joule" => "J", "kelvin" => "K", "kgf" => "kilogram-force", "kilogram" => "kg", "knot" => "nautical_mile / hour", "kph" => "km / hour", "lb" => "pound", "light_speed" => "299792458 m/s", "light_year" => "9.46e15 m", "light_years" => "9.46e15 m", "litre" => "1.0e-3 m3", "lm" => "cd.sr", "lx" => "lm.m-2", "ly" => "light_year", "mb" => "bar / 1000", "mercury" => "conventional_mercury", "meter" => "metre", "metre" => "m", "mgal" => "cm s-2 / 1000", "micron" => "1.0e-6 m", "mile" => "1760 yard", "millibar" => "bar / 1000", "min" => "60 s", "minute" => "60 s", "minute_angle" => "pi.rad/180/60", "mole" => "mol", "mon" => "month", "month" => "6 pentad", "mph" => "mile / hour", "nautical_mile" => "1852 m", "nautical_miles" => "1852 m", "newton" => "N", "ohm" => "V/A", "ounce" => "pound / 16", "oz" => "ounce", "parsec" => "3.0857e16 m", "pascal" => "Pa", "pc" => "parsec", "percent" => "1e-2", "permil" => "1e-3", "pi" => "3.141592653589793238462", "poise" => "dyn s / cm2", "pound" => "453.6 g", "psi" => "pound-force / inch2", "radian" => "rad", "second" => "s", "second_angle" => "pi.rad/180/60/60", "steradian" => "sr", "stokes" => "cm2 / s", "t" => "ton", "tesla" => "Wb.m-2", "ton" => "1000 kg", "tonne" => "ton", "torr" => "133.322 Pa", "volt" => "V", "watt" => "W", "weber" => "Wb", "yard" => "6 feet", "yd" => "yard", "year" => "12 month", "yr" => "year", } UALIASES = { "Celsiuses" => [0, "Celsius"], "EA" => [18, "A"], "EAu" => [18, "Au"], "EBq" => [18, "Bq"], "EC" => [18, "C"], "EF" => [18, "F"], "EG" => [18, "G"], "EGal" => [18, "Gal"], "EGy" => [18, "Gy"], "EH" => [18, "H"], "EHg" => [18, "Hg"], "EHz" => [18, "Hz"], "EJ" => [18, "J"], "EK" => [18, "K"], "EL" => [18, "L"], "EN" => [18, "N"], "EP" => [18, "P"], "EPa" => [18, "Pa"], "ES" => [18, "S"], "ESt" => [18, "St"], "ESv" => [18, "Sv"], "ET" => [18, "T"], "EV" => [18, "V"], "EW" => [18, "W"], "EWb" => [18, "Wb"], "Ea" => [18, "a"], "Eac" => [18, "ac"], "Eatm" => [18, "atm"], "Ebar" => [18, "bar"], "Ecal" => [18, "cal"], "Ecd" => [18, "cd"], "Econventional_mercury" => [18, "conventional_mercury"], "EdegC" => [18, "degC"], "EdegF" => [18, "degF"], "Edeg_C" => [18, "deg_C"], "Edeg_F" => [18, "deg_F"], "EdegreeC" => [18, "degreeC"], "EdegreeF" => [18, "degreeF"], "Edegree_C" => [18, "degree_C"], "Edegree_E" => [18, "degree_E"], "Edegree_F" => [18, "degree_F"], "Edegree_N" => [18, "degree_N"], "Edegree_R" => [18, "degree_R"], "Edegree_S" => [18, "degree_S"], "Edegree_W" => [18, "degree_W"], "Edegree_c" => [18, "degree_c"], "Edegree_east" => [18, "degree_east"], "Edegree_f" => [18, "degree_f"], "Edegree_north" => [18, "degree_north"], "Edegree_south" => [18, "degree_south"], "Edegree_west" => [18, "degree_west"], "Edegrees_east" => [18, "degrees_east"], "Edegrees_north" => [18, "degrees_north"], "Edegrees_south" => [18, "degrees_south"], "Edegrees_west" => [18, "degrees_west"], "Edyn" => [18, "dyn"], "Eerg" => [18, "erg"], "Eforce" => [18, "force"], "Eg" => [18, "g"], "Egravity" => [18, "gravity"], "Eh" => [18, "h"], "Ehg" => [18, "hg"], "Ehr" => [18, "hr"], "Ein" => [18, "in"], "Ekgf" => [18, "kgf"], "Ekph" => [18, "kph"], "Elb" => [18, "lb"], "Elm" => [18, "lm"], "Elx" => [18, "lx"], "Ely" => [18, "ly"], "Em" => [18, "m"], "Emb" => [18, "mb"], "Emercury" => [18, "mercury"], "Emgal" => [18, "mgal"], "Emin" => [18, "min"], "Emol" => [18, "mol"], "Emon" => [18, "mon"], "Emph" => [18, "mph"], "Eohm" => [18, "ohm"], "Eoz" => [18, "oz"], "Epc" => [18, "pc"], "Epsi" => [18, "psi"], "Erad" => [18, "rad"], "Es" => [18, "s"], "Esr" => [18, "sr"], "Et" => [18, "t"], "Eyr" => [18, "yr"], "Fahrenheits" => [0, "Fahrenheit"], "GA" => [9, "A"], "GAu" => [9, "Au"], "GBq" => [9, "Bq"], "GC" => [9, "C"], "GF" => [9, "F"], "GG" => [9, "G"], "GGal" => [9, "Gal"], "GGy" => [9, "Gy"], "GH" => [9, "H"], "GHg" => [9, "Hg"], "GHz" => [9, "Hz"], "GJ" => [9, "J"], "GK" => [9, "K"], "GL" => [9, "L"], "GN" => [9, "N"], "GP" => [9, "P"], "GPa" => [9, "Pa"], "GS" => [9, "S"], "GSt" => [9, "St"], "GSv" => [9, "Sv"], "GT" => [9, "T"], "GV" => [9, "V"], "GW" => [9, "W"], "GWb" => [9, "Wb"], "Ga" => [9, "a"], "Gac" => [9, "ac"], "Gatm" => [9, "atm"], "Gbar" => [9, "bar"], "Gcal" => [9, "cal"], "Gcd" => [9, "cd"], "Gconventional_mercury" => [9, "conventional_mercury"], "GdegC" => [9, "degC"], "GdegF" => [9, "degF"], "Gdeg_C" => [9, "deg_C"], "Gdeg_F" => [9, "deg_F"], "GdegreeC" => [9, "degreeC"], "GdegreeF" => [9, "degreeF"], "Gdegree_C" => [9, "degree_C"], "Gdegree_E" => [9, "degree_E"], "Gdegree_F" => [9, "degree_F"], "Gdegree_N" => [9, "degree_N"], "Gdegree_R" => [9, "degree_R"], "Gdegree_S" => [9, "degree_S"], "Gdegree_W" => [9, "degree_W"], "Gdegree_c" => [9, "degree_c"], "Gdegree_east" => [9, "degree_east"], "Gdegree_f" => [9, "degree_f"], "Gdegree_north" => [9, "degree_north"], "Gdegree_south" => [9, "degree_south"], "Gdegree_west" => [9, "degree_west"], "Gdegrees_east" => [9, "degrees_east"], "Gdegrees_north" => [9, "degrees_north"], "Gdegrees_south" => [9, "degrees_south"], "Gdegrees_west" => [9, "degrees_west"], "Gdyn" => [9, "dyn"], "Gerg" => [9, "erg"], "Gforce" => [9, "force"], "Gg" => [9, "g"], "Ggravity" => [9, "gravity"], "Gh" => [9, "h"], "Ghg" => [9, "hg"], "Ghr" => [9, "hr"], "Gin" => [9, "in"], "Gkgf" => [9, "kgf"], "Gkph" => [9, "kph"], "Glb" => [9, "lb"], "Glm" => [9, "lm"], "Glx" => [9, "lx"], "Gly" => [9, "ly"], "Gm" => [9, "m"], "Gmb" => [9, "mb"], "Gmercury" => [9, "mercury"], "Gmgal" => [9, "mgal"], "Gmin" => [9, "min"], "Gmol" => [9, "mol"], "Gmon" => [9, "mon"], "Gmph" => [9, "mph"], "Gohm" => [9, "ohm"], "Goz" => [9, "oz"], "Gpc" => [9, "pc"], "Gpsi" => [9, "psi"], "Grad" => [9, "rad"], "Gs" => [9, "s"], "Gsr" => [9, "sr"], "Gt" => [9, "t"], "Gyr" => [9, "yr"], "Julians_year" => [0, "Julian_year"], "MA" => [6, "A"], "MAu" => [6, "Au"], "MBq" => [6, "Bq"], "MC" => [6, "C"], "MF" => [6, "F"], "MG" => [6, "G"], "MGal" => [6, "Gal"], "MGy" => [6, "Gy"], "MH" => [6, "H"], "MHg" => [6, "Hg"], "MHz" => [6, "Hz"], "MJ" => [6, "J"], "MK" => [6, "K"], "ML" => [6, "L"], "MN" => [6, "N"], "MP" => [6, "P"], "MPa" => [6, "Pa"], "MS" => [6, "S"], "MSt" => [6, "St"], "MSv" => [6, "Sv"], "MT" => [6, "T"], "MV" => [6, "V"], "MW" => [6, "W"], "MWb" => [6, "Wb"], "Ma" => [6, "a"], "Mac" => [6, "ac"], "Matm" => [6, "atm"], "Mbar" => [6, "bar"], "Mcal" => [6, "cal"], "Mcd" => [6, "cd"], "Mconventional_mercury" => [6, "conventional_mercury"], "MdegC" => [6, "degC"], "MdegF" => [6, "degF"], "Mdeg_C" => [6, "deg_C"], "Mdeg_F" => [6, "deg_F"], "MdegreeC" => [6, "degreeC"], "MdegreeF" => [6, "degreeF"], "Mdegree_C" => [6, "degree_C"], "Mdegree_E" => [6, "degree_E"], "Mdegree_F" => [6, "degree_F"], "Mdegree_N" => [6, "degree_N"], "Mdegree_R" => [6, "degree_R"], "Mdegree_S" => [6, "degree_S"], "Mdegree_W" => [6, "degree_W"], "Mdegree_c" => [6, "degree_c"], "Mdegree_east" => [6, "degree_east"], "Mdegree_f" => [6, "degree_f"], "Mdegree_north" => [6, "degree_north"], "Mdegree_south" => [6, "degree_south"], "Mdegree_west" => [6, "degree_west"], "Mdegrees_east" => [6, "degrees_east"], "Mdegrees_north" => [6, "degrees_north"], "Mdegrees_south" => [6, "degrees_south"], "Mdegrees_west" => [6, "degrees_west"], "Mdyn" => [6, "dyn"], "Merg" => [6, "erg"], "Mforce" => [6, "force"], "Mg" => [6, "g"], "Mgravity" => [6, "gravity"], "Mh" => [6, "h"], "Mhg" => [6, "hg"], "Mhr" => [6, "hr"], "Min" => [6, "in"], "Mkgf" => [6, "kgf"], "Mkph" => [6, "kph"], "Mlb" => [6, "lb"], "Mlm" => [6, "lm"], "Mlx" => [6, "lx"], "Mly" => [6, "ly"], "Mm" => [6, "m"], "Mmb" => [6, "mb"], "Mmercury" => [6, "mercury"], "Mmgal" => [6, "mgal"], "Mmin" => [6, "min"], "Mmol" => [6, "mol"], "Mmon" => [6, "mon"], "Mmph" => [6, "mph"], "Mohm" => [6, "ohm"], "Moz" => [6, "oz"], "Mpc" => [6, "pc"], "Mpsi" => [6, "psi"], "Mrad" => [6, "rad"], "Ms" => [6, "s"], "Msr" => [6, "sr"], "Mt" => [6, "t"], "Myr" => [6, "yr"], "PA" => [15, "A"], "PAu" => [15, "Au"], "PBq" => [15, "Bq"], "PC" => [15, "C"], "PF" => [15, "F"], "PG" => [15, "G"], "PGal" => [15, "Gal"], "PGy" => [15, "Gy"], "PH" => [15, "H"], "PHg" => [15, "Hg"], "PHz" => [15, "Hz"], "PJ" => [15, "J"], "PK" => [15, "K"], "PL" => [15, "L"], "PN" => [15, "N"], "PP" => [15, "P"], "PPa" => [15, "Pa"], "PS" => [15, "S"], "PSt" => [15, "St"], "PSv" => [15, "Sv"], "PT" => [15, "T"], "PV" => [15, "V"], "PW" => [15, "W"], "PWb" => [15, "Wb"], "Pa" => [15, "a"], "Pac" => [15, "ac"], "Pascals" => [0, "Pascal"], "Patm" => [15, "atm"], "Pbar" => [15, "bar"], "Pcal" => [15, "cal"], "Pcd" => [15, "cd"], "Pconventional_mercury" => [15, "conventional_mercury"], "PdegC" => [15, "degC"], "PdegF" => [15, "degF"], "Pdeg_C" => [15, "deg_C"], "Pdeg_F" => [15, "deg_F"], "PdegreeC" => [15, "degreeC"], "PdegreeF" => [15, "degreeF"], "Pdegree_C" => [15, "degree_C"], "Pdegree_E" => [15, "degree_E"], "Pdegree_F" => [15, "degree_F"], "Pdegree_N" => [15, "degree_N"], "Pdegree_R" => [15, "degree_R"], "Pdegree_S" => [15, "degree_S"], "Pdegree_W" => [15, "degree_W"], "Pdegree_c" => [15, "degree_c"], "Pdegree_east" => [15, "degree_east"], "Pdegree_f" => [15, "degree_f"], "Pdegree_north" => [15, "degree_north"], "Pdegree_south" => [15, "degree_south"], "Pdegree_west" => [15, "degree_west"], "Pdegrees_east" => [15, "degrees_east"], "Pdegrees_north" => [15, "degrees_north"], "Pdegrees_south" => [15, "degrees_south"], "Pdegrees_west" => [15, "degrees_west"], "Pdyn" => [15, "dyn"], "Perg" => [15, "erg"], "Pforce" => [15, "force"], "Pg" => [15, "g"], "Pgravity" => [15, "gravity"], "Ph" => [15, "h"], "Phg" => [15, "hg"], "Phr" => [15, "hr"], "Pin" => [15, "in"], "Pkgf" => [15, "kgf"], "Pkph" => [15, "kph"], "Plb" => [15, "lb"], "Plm" => [15, "lm"], "Plx" => [15, "lx"], "Ply" => [15, "ly"], "Pm" => [15, "m"], "Pmb" => [15, "mb"], "Pmercury" => [15, "mercury"], "Pmgal" => [15, "mgal"], "Pmin" => [15, "min"], "Pmol" => [15, "mol"], "Pmon" => [15, "mon"], "Pmph" => [15, "mph"], "Pohm" => [15, "ohm"], "Poz" => [15, "oz"], "Ppc" => [15, "pc"], "Ppsi" => [15, "psi"], "Prad" => [15, "rad"], "Ps" => [15, "s"], "Psr" => [15, "sr"], "Pt" => [15, "t"], "Pyr" => [15, "yr"], "TA" => [12, "A"], "TAu" => [12, "Au"], "TBq" => [12, "Bq"], "TC" => [12, "C"], "TF" => [12, "F"], "TG" => [12, "G"], "TGal" => [12, "Gal"], "TGy" => [12, "Gy"], "TH" => [12, "H"], "THg" => [12, "Hg"], "THz" => [12, "Hz"], "TJ" => [12, "J"], "TK" => [12, "K"], "TL" => [12, "L"], "TN" => [12, "N"], "TP" => [12, "P"], "TPa" => [12, "Pa"], "TS" => [12, "S"], "TSt" => [12, "St"], "TSv" => [12, "Sv"], "TT" => [12, "T"], "TV" => [12, "V"], "TW" => [12, "W"], "TWb" => [12, "Wb"], "Ta" => [12, "a"], "Tac" => [12, "ac"], "Tatm" => [12, "atm"], "Tbar" => [12, "bar"], "Tcal" => [12, "cal"], "Tcd" => [12, "cd"], "Tconventional_mercury" => [12, "conventional_mercury"], "TdegC" => [12, "degC"], "TdegF" => [12, "degF"], "Tdeg_C" => [12, "deg_C"], "Tdeg_F" => [12, "deg_F"], "TdegreeC" => [12, "degreeC"], "TdegreeF" => [12, "degreeF"], "Tdegree_C" => [12, "degree_C"], "Tdegree_E" => [12, "degree_E"], "Tdegree_F" => [12, "degree_F"], "Tdegree_N" => [12, "degree_N"], "Tdegree_R" => [12, "degree_R"], "Tdegree_S" => [12, "degree_S"], "Tdegree_W" => [12, "degree_W"], "Tdegree_c" => [12, "degree_c"], "Tdegree_east" => [12, "degree_east"], "Tdegree_f" => [12, "degree_f"], "Tdegree_north" => [12, "degree_north"], "Tdegree_south" => [12, "degree_south"], "Tdegree_west" => [12, "degree_west"], "Tdegrees_east" => [12, "degrees_east"], "Tdegrees_north" => [12, "degrees_north"], "Tdegrees_south" => [12, "degrees_south"], "Tdegrees_west" => [12, "degrees_west"], "Tdyn" => [12, "dyn"], "Terg" => [12, "erg"], "Tforce" => [12, "force"], "Tg" => [12, "g"], "Tgravity" => [12, "gravity"], "Th" => [12, "h"], "Thg" => [12, "hg"], "Thr" => [12, "hr"], "Tin" => [12, "in"], "Tkgf" => [12, "kgf"], "Tkph" => [12, "kph"], "Tlb" => [12, "lb"], "Tlm" => [12, "lm"], "Tlx" => [12, "lx"], "Tly" => [12, "ly"], "Tm" => [12, "m"], "Tmb" => [12, "mb"], "Tmercury" => [12, "mercury"], "Tmgal" => [12, "mgal"], "Tmin" => [12, "min"], "Tmol" => [12, "mol"], "Tmon" => [12, "mon"], "Tmph" => [12, "mph"], "Tohm" => [12, "ohm"], "Toz" => [12, "oz"], "Tpc" => [12, "pc"], "Tpsi" => [12, "psi"], "Trad" => [12, "rad"], "Ts" => [12, "s"], "Tsr" => [12, "sr"], "Tt" => [12, "t"], "Tyr" => [12, "yr"], "aA" => [-18, "A"], "aAu" => [-18, "Au"], "aBq" => [-18, "Bq"], "aC" => [-18, "C"], "aF" => [-18, "F"], "aG" => [-18, "G"], "aGal" => [-18, "Gal"], "aGy" => [-18, "Gy"], "aH" => [-18, "H"], "aHg" => [-18, "Hg"], "aHz" => [-18, "Hz"], "aJ" => [-18, "J"], "aK" => [-18, "K"], "aL" => [-18, "L"], "aN" => [-18, "N"], "aP" => [-18, "P"], "aPa" => [-18, "Pa"], "aS" => [-18, "S"], "aSt" => [-18, "St"], "aSv" => [-18, "Sv"], "aT" => [-18, "T"], "aV" => [-18, "V"], "aW" => [-18, "W"], "aWb" => [-18, "Wb"], "aa" => [-18, "a"], "aac" => [-18, "ac"], "aatm" => [-18, "atm"], "abar" => [-18, "bar"], "acal" => [-18, "cal"], "acd" => [-18, "cd"], "aconventional_mercury" => [-18, "conventional_mercury"], "acres" => [0, "acre"], "adegC" => [-18, "degC"], "adegF" => [-18, "degF"], "adeg_C" => [-18, "deg_C"], "adeg_F" => [-18, "deg_F"], "adegreeC" => [-18, "degreeC"], "adegreeF" => [-18, "degreeF"], "adegree_C" => [-18, "degree_C"], "adegree_E" => [-18, "degree_E"], "adegree_F" => [-18, "degree_F"], "adegree_N" => [-18, "degree_N"], "adegree_R" => [-18, "degree_R"], "adegree_S" => [-18, "degree_S"], "adegree_W" => [-18, "degree_W"], "adegree_c" => [-18, "degree_c"], "adegree_east" => [-18, "degree_east"], "adegree_f" => [-18, "degree_f"], "adegree_north" => [-18, "degree_north"], "adegree_south" => [-18, "degree_south"], "adegree_west" => [-18, "degree_west"], "adegrees_east" => [-18, "degrees_east"], "adegrees_north" => [-18, "degrees_north"], "adegrees_south" => [-18, "degrees_south"], "adegrees_west" => [-18, "degrees_west"], "adyn" => [-18, "dyn"], "aerg" => [-18, "erg"], "aforce" => [-18, "force"], "ag" => [-18, "g"], "agravity" => [-18, "gravity"], "ah" => [-18, "h"], "ahg" => [-18, "hg"], "ahr" => [-18, "hr"], "ain" => [-18, "in"], "akgf" => [-18, "kgf"], "akph" => [-18, "kph"], "alb" => [-18, "lb"], "alm" => [-18, "lm"], "alx" => [-18, "lx"], "aly" => [-18, "ly"], "am" => [-18, "m"], "amb" => [-18, "mb"], "amercury" => [-18, "mercury"], "amgal" => [-18, "mgal"], "amin" => [-18, "min"], "amol" => [-18, "mol"], "amon" => [-18, "mon"], "amperes" => [0, "ampere"], "amph" => [-18, "mph"], "angstroms" => [0, "angstrom"], "angulars_degree" => [0, "angular_degree"], "angulars_minute" => [0, "angular_minute"], "angulars_second" => [0, "angular_second"], "aohm" => [-18, "ohm"], "aoz" => [-18, "oz"], "apc" => [-18, "pc"], "apsi" => [-18, "psi"], "arad" => [-18, "rad"], "ares" => [0, "are"], "as" => [-18, "s"], "asr" => [-18, "sr"], "at" => [-18, "t"], "atmospheres" => [0, "atmosphere"], "attoCelsius" => [-18, "Celsius"], "attoFahrenheit" => [-18, "Fahrenheit"], "attoJulian_year" => [-18, "Julian_year"], "attoPascal" => [-18, "Pascal"], "attoacre" => [-18, "acre"], "attoampere" => [-18, "ampere"], "attoangstrom" => [-18, "angstrom"], "attoangular_degree" => [-18, "angular_degree"], "attoangular_minute" => [-18, "angular_minute"], "attoangular_second" => [-18, "angular_second"], "attoare" => [-18, "are"], "attoatmosphere" => [-18, "atmosphere"], "attocalorie" => [-18, "calorie"], "attocandela" => [-18, "candela"], "attocelsius" => [-18, "celsius"], "attocentigrade" => [-18, "centigrade"], "attocentury" => [-18, "century"], "attochain" => [-18, "chain"], "attocommon_year" => [-18, "common_year"], "attocoulomb" => [-18, "coulomb"], "attoday" => [-18, "day"], "attodegK" => [-18, "degK"], "attodeg_K" => [-18, "deg_K"], "attodegree" => [-18, "degree"], "attodegreeK" => [-18, "degreeK"], "attodyne" => [-18, "dyne"], "attoerg" => [-18, "erg"], "attofahrenheit" => [-18, "fahrenheit"], "attofarad" => [-18, "farad"], "attofermi" => [-18, "fermi"], "attogal" => [-18, "gal"], "attogauss" => [-18, "gauss"], "attogram" => [-18, "gram"], "attohectare" => [-18, "hectare"], "attohertz" => [-18, "hertz"], "attohour" => [-18, "hour"], "attoinch" => [-18, "inch"], "attojoule" => [-18, "joule"], "attokelvin" => [-18, "kelvin"], "attokilogram" => [-18, "kilogram"], "attoknot" => [-18, "knot"], "attolitre" => [-18, "litre"], "attometer" => [-18, "meter"], "attometre" => [-18, "metre"], "attomicron" => [-18, "micron"], "attomile" => [-18, "mile"], "attomillibar" => [-18, "millibar"], "attominute" => [-18, "minute"], "attominute_angle" => [-18, "minute_angle"], "attomole" => [-18, "mole"], "attomonth" => [-18, "month"], "attonewton" => [-18, "newton"], "attoounce" => [-18, "ounce"], "attoparsec" => [-18, "parsec"], "attopascal" => [-18, "pascal"], "attopentad" => [-18, "pentad"], "attopercent" => [-18, "percent"], "attopoise" => [-18, "poise"], "attopound" => [-18, "pound"], "attoradian" => [-18, "radian"], "attosecond" => [-18, "second"], "attosecond_angle" => [-18, "second_angle"], "attosteradian" => [-18, "steradian"], "attostokes" => [-18, "stokes"], "attotesla" => [-18, "tesla"], "attoton" => [-18, "ton"], "attotonne" => [-18, "tonne"], "attotorr" => [-18, "torr"], "attovolt" => [-18, "volt"], "attowatt" => [-18, "watt"], "attoweber" => [-18, "weber"], "attoyard" => [-18, "yard"], "attoyd" => [-18, "yd"], "attoyear" => [-18, "year"], "ayr" => [-18, "yr"], "cA" => [-2, "A"], "cAu" => [-2, "Au"], "cBq" => [-2, "Bq"], "cC" => [-2, "C"], "cF" => [-2, "F"], "cG" => [-2, "G"], "cGal" => [-2, "Gal"], "cGy" => [-2, "Gy"], "cH" => [-2, "H"], "cHg" => [-2, "Hg"], "cHz" => [-2, "Hz"], "cJ" => [-2, "J"], "cK" => [-2, "K"], "cL" => [-2, "L"], "cN" => [-2, "N"], "cP" => [-2, "P"], "cPa" => [-2, "Pa"], "cS" => [-2, "S"], "cSt" => [-2, "St"], "cSv" => [-2, "Sv"], "cT" => [-2, "T"], "cV" => [-2, "V"], "cW" => [-2, "W"], "cWb" => [-2, "Wb"], "ca" => [-2, "a"], "cac" => [-2, "ac"], "calories" => [0, "calorie"], "candelas" => [0, "candela"], "catm" => [-2, "atm"], "cbar" => [-2, "bar"], "ccal" => [-2, "cal"], "ccd" => [-2, "cd"], "cconventional_mercury" => [-2, "conventional_mercury"], "cdegC" => [-2, "degC"], "cdegF" => [-2, "degF"], "cdeg_C" => [-2, "deg_C"], "cdeg_F" => [-2, "deg_F"], "cdegreeC" => [-2, "degreeC"], "cdegreeF" => [-2, "degreeF"], "cdegree_C" => [-2, "degree_C"], "cdegree_E" => [-2, "degree_E"], "cdegree_F" => [-2, "degree_F"], "cdegree_N" => [-2, "degree_N"], "cdegree_R" => [-2, "degree_R"], "cdegree_S" => [-2, "degree_S"], "cdegree_W" => [-2, "degree_W"], "cdegree_c" => [-2, "degree_c"], "cdegree_east" => [-2, "degree_east"], "cdegree_f" => [-2, "degree_f"], "cdegree_north" => [-2, "degree_north"], "cdegree_south" => [-2, "degree_south"], "cdegree_west" => [-2, "degree_west"], "cdegrees_east" => [-2, "degrees_east"], "cdegrees_north" => [-2, "degrees_north"], "cdegrees_south" => [-2, "degrees_south"], "cdegrees_west" => [-2, "degrees_west"], "cdyn" => [-2, "dyn"], "celsiuses" => [0, "celsius"], "centiCelsius" => [-2, "Celsius"], "centiFahrenheit" => [-2, "Fahrenheit"], "centiJulian_year" => [-2, "Julian_year"], "centiPascal" => [-2, "Pascal"], "centiacre" => [-2, "acre"], "centiampere" => [-2, "ampere"], "centiangstrom" => [-2, "angstrom"], "centiangular_degree" => [-2, "angular_degree"], "centiangular_minute" => [-2, "angular_minute"], "centiangular_second" => [-2, "angular_second"], "centiare" => [-2, "are"], "centiatmosphere" => [-2, "atmosphere"], "centicalorie" => [-2, "calorie"], "centicandela" => [-2, "candela"], "centicelsius" => [-2, "celsius"], "centicentigrade" => [-2, "centigrade"], "centicentury" => [-2, "century"], "centichain" => [-2, "chain"], "centicommon_year" => [-2, "common_year"], "centicoulomb" => [-2, "coulomb"], "centiday" => [-2, "day"], "centidegK" => [-2, "degK"], "centideg_K" => [-2, "deg_K"], "centidegree" => [-2, "degree"], "centidegreeK" => [-2, "degreeK"], "centidyne" => [-2, "dyne"], "centierg" => [-2, "erg"], "centifahrenheit" => [-2, "fahrenheit"], "centifarad" => [-2, "farad"], "centifermi" => [-2, "fermi"], "centigal" => [-2, "gal"], "centigauss" => [-2, "gauss"], "centigrades" => [0, "centigrade"], "centigram" => [-2, "gram"], "centihectare" => [-2, "hectare"], "centihertz" => [-2, "hertz"], "centihour" => [-2, "hour"], "centiinch" => [-2, "inch"], "centijoule" => [-2, "joule"], "centikelvin" => [-2, "kelvin"], "centikilogram" => [-2, "kilogram"], "centiknot" => [-2, "knot"], "centilitre" => [-2, "litre"], "centimeter" => [-2, "meter"], "centimetre" => [-2, "metre"], "centimicron" => [-2, "micron"], "centimile" => [-2, "mile"], "centimillibar" => [-2, "millibar"], "centiminute" => [-2, "minute"], "centiminute_angle" => [-2, "minute_angle"], "centimole" => [-2, "mole"], "centimonth" => [-2, "month"], "centinewton" => [-2, "newton"], "centiounce" => [-2, "ounce"], "centiparsec" => [-2, "parsec"], "centipascal" => [-2, "pascal"], "centipentad" => [-2, "pentad"], "centipercent" => [-2, "percent"], "centipoise" => [-2, "poise"], "centipound" => [-2, "pound"], "centiradian" => [-2, "radian"], "centisecond" => [-2, "second"], "centisecond_angle" => [-2, "second_angle"], "centisteradian" => [-2, "steradian"], "centistokes" => [-2, "stokes"], "centitesla" => [-2, "tesla"], "centiton" => [-2, "ton"], "centitonne" => [-2, "tonne"], "centitorr" => [-2, "torr"], "centivolt" => [-2, "volt"], "centiwatt" => [-2, "watt"], "centiweber" => [-2, "weber"], "centiyard" => [-2, "yard"], "centiyd" => [-2, "yd"], "centiyear" => [-2, "year"], "centuries" => [0, "century"], "cerg" => [-2, "erg"], "cforce" => [-2, "force"], "cg" => [-2, "g"], "cgravity" => [-2, "gravity"], "ch" => [-2, "h"], "chains" => [0, "chain"], "chg" => [-2, "hg"], "chr" => [-2, "hr"], "cin" => [-2, "in"], "ckgf" => [-2, "kgf"], "ckph" => [-2, "kph"], "clb" => [-2, "lb"], "clm" => [-2, "lm"], "clx" => [-2, "lx"], "cly" => [-2, "ly"], "cm" => [-2, "m"], "cmb" => [-2, "mb"], "cmercury" => [-2, "mercury"], "cmgal" => [-2, "mgal"], "cmin" => [-2, "min"], "cmol" => [-2, "mol"], "cmon" => [-2, "mon"], "cmph" => [-2, "mph"], "cohm" => [-2, "ohm"], "commons_year" => [0, "common_year"], "coulombs" => [0, "coulomb"], "coz" => [-2, "oz"], "cpc" => [-2, "pc"], "cpsi" => [-2, "psi"], "crad" => [-2, "rad"], "cs" => [-2, "s"], "csr" => [-2, "sr"], "ct" => [-2, "t"], "cyr" => [-2, "yr"], "dA" => [-1, "A"], "dAu" => [-1, "Au"], "dBq" => [-1, "Bq"], "dC" => [-1, "C"], "dF" => [-1, "F"], "dG" => [-1, "G"], "dGal" => [-1, "Gal"], "dGy" => [-1, "Gy"], "dH" => [-1, "H"], "dHg" => [-1, "Hg"], "dHz" => [-1, "Hz"], "dJ" => [-1, "J"], "dK" => [-1, "K"], "dL" => [-1, "L"], "dN" => [-1, "N"], "dP" => [-1, "P"], "dPa" => [-1, "Pa"], "dS" => [-1, "S"], "dSt" => [-1, "St"], "dSv" => [-1, "Sv"], "dT" => [-1, "T"], "dV" => [-1, "V"], "dW" => [-1, "W"], "dWb" => [-1, "Wb"], "da" => [-1, "a"], "daA" => [1, "A"], "daAu" => [1, "Au"], "daBq" => [1, "Bq"], "daC" => [1, "C"], "daF" => [1, "F"], "daG" => [1, "G"], "daGal" => [1, "Gal"], "daGy" => [1, "Gy"], "daH" => [1, "H"], "daHg" => [1, "Hg"], "daHz" => [1, "Hz"], "daJ" => [1, "J"], "daK" => [1, "K"], "daL" => [1, "L"], "daN" => [1, "N"], "daP" => [1, "P"], "daPa" => [1, "Pa"], "daS" => [1, "S"], "daSt" => [1, "St"], "daSv" => [1, "Sv"], "daT" => [1, "T"], "daV" => [1, "V"], "daW" => [1, "W"], "daWb" => [1, "Wb"], "daa" => [1, "a"], "daac" => [1, "ac"], "daatm" => [1, "atm"], "dabar" => [1, "bar"], "dac" => [-1, "ac"], "dacal" => [1, "cal"], "dacd" => [1, "cd"], "daconventional_mercury" => [1, "conventional_mercury"], "dadegC" => [1, "degC"], "dadegF" => [1, "degF"], "dadeg_C" => [1, "deg_C"], "dadeg_F" => [1, "deg_F"], "dadegreeC" => [1, "degreeC"], "dadegreeF" => [1, "degreeF"], "dadegree_C" => [1, "degree_C"], "dadegree_E" => [1, "degree_E"], "dadegree_F" => [1, "degree_F"], "dadegree_N" => [1, "degree_N"], "dadegree_R" => [1, "degree_R"], "dadegree_S" => [1, "degree_S"], "dadegree_W" => [1, "degree_W"], "dadegree_c" => [1, "degree_c"], "dadegree_east" => [1, "degree_east"], "dadegree_f" => [1, "degree_f"], "dadegree_north" => [1, "degree_north"], "dadegree_south" => [1, "degree_south"], "dadegree_west" => [1, "degree_west"], "dadegrees_east" => [1, "degrees_east"], "dadegrees_north" => [1, "degrees_north"], "dadegrees_south" => [1, "degrees_south"], "dadegrees_west" => [1, "degrees_west"], "dadyn" => [1, "dyn"], "daerg" => [1, "erg"], "daforce" => [1, "force"], "dag" => [1, "g"], "dagravity" => [1, "gravity"], "dah" => [1, "h"], "dahg" => [1, "hg"], "dahr" => [1, "hr"], "dain" => [1, "in"], "dakgf" => [1, "kgf"], "dakph" => [1, "kph"], "dalb" => [1, "lb"], "dalm" => [1, "lm"], "dalx" => [1, "lx"], "daly" => [1, "ly"], "dam" => [1, "m"], "damb" => [1, "mb"], "damercury" => [1, "mercury"], "damgal" => [1, "mgal"], "damin" => [1, "min"], "damol" => [1, "mol"], "damon" => [1, "mon"], "damph" => [1, "mph"], "daohm" => [1, "ohm"], "daoz" => [1, "oz"], "dapc" => [1, "pc"], "dapsi" => [1, "psi"], "darad" => [1, "rad"], "das" => [1, "s"], "dasr" => [1, "sr"], "dat" => [1, "t"], "datm" => [-1, "atm"], "dayr" => [1, "yr"], "days" => [0, "day"], "dbar" => [-1, "bar"], "dcal" => [-1, "cal"], "dcd" => [-1, "cd"], "dconventional_mercury" => [-1, "conventional_mercury"], "ddegC" => [-1, "degC"], "ddegF" => [-1, "degF"], "ddeg_C" => [-1, "deg_C"], "ddeg_F" => [-1, "deg_F"], "ddegreeC" => [-1, "degreeC"], "ddegreeF" => [-1, "degreeF"], "ddegree_C" => [-1, "degree_C"], "ddegree_E" => [-1, "degree_E"], "ddegree_F" => [-1, "degree_F"], "ddegree_N" => [-1, "degree_N"], "ddegree_R" => [-1, "degree_R"], "ddegree_S" => [-1, "degree_S"], "ddegree_W" => [-1, "degree_W"], "ddegree_c" => [-1, "degree_c"], "ddegree_east" => [-1, "degree_east"], "ddegree_f" => [-1, "degree_f"], "ddegree_north" => [-1, "degree_north"], "ddegree_south" => [-1, "degree_south"], "ddegree_west" => [-1, "degree_west"], "ddegrees_east" => [-1, "degrees_east"], "ddegrees_north" => [-1, "degrees_north"], "ddegrees_south" => [-1, "degrees_south"], "ddegrees_west" => [-1, "degrees_west"], "ddyn" => [-1, "dyn"], "decaCelsius" => [1, "Celsius"], "decaFahrenheit" => [1, "Fahrenheit"], "decaJulian_year" => [1, "Julian_year"], "decaPascal" => [1, "Pascal"], "decaacre" => [1, "acre"], "decaampere" => [1, "ampere"], "decaangstrom" => [1, "angstrom"], "decaangular_degree" => [1, "angular_degree"], "decaangular_minute" => [1, "angular_minute"], "decaangular_second" => [1, "angular_second"], "decaare" => [1, "are"], "decaatmosphere" => [1, "atmosphere"], "decacalorie" => [1, "calorie"], "decacandela" => [1, "candela"], "decacelsius" => [1, "celsius"], "decacentigrade" => [1, "centigrade"], "decacentury" => [1, "century"], "decachain" => [1, "chain"], "decacommon_year" => [1, "common_year"], "decacoulomb" => [1, "coulomb"], "decaday" => [1, "day"], "decadegK" => [1, "degK"], "decadeg_K" => [1, "deg_K"], "decadegree" => [1, "degree"], "decadegreeK" => [1, "degreeK"], "decadyne" => [1, "dyne"], "decaerg" => [1, "erg"], "decafahrenheit" => [1, "fahrenheit"], "decafarad" => [1, "farad"], "decafermi" => [1, "fermi"], "decagal" => [1, "gal"], "decagauss" => [1, "gauss"], "decagram" => [1, "gram"], "decahectare" => [1, "hectare"], "decahertz" => [1, "hertz"], "decahour" => [1, "hour"], "decainch" => [1, "inch"], "decajoule" => [1, "joule"], "decakelvin" => [1, "kelvin"], "decakilogram" => [1, "kilogram"], "decaknot" => [1, "knot"], "decalitre" => [1, "litre"], "decameter" => [1, "meter"], "decametre" => [1, "metre"], "decamicron" => [1, "micron"], "decamile" => [1, "mile"], "decamillibar" => [1, "millibar"], "decaminute" => [1, "minute"], "decaminute_angle" => [1, "minute_angle"], "decamole" => [1, "mole"], "decamonth" => [1, "month"], "decanewton" => [1, "newton"], "decaounce" => [1, "ounce"], "decaparsec" => [1, "parsec"], "decapascal" => [1, "pascal"], "decapentad" => [1, "pentad"], "decapercent" => [1, "percent"], "decapoise" => [1, "poise"], "decapound" => [1, "pound"], "decaradian" => [1, "radian"], "decasecond" => [1, "second"], "decasecond_angle" => [1, "second_angle"], "decasteradian" => [1, "steradian"], "decastokes" => [1, "stokes"], "decatesla" => [1, "tesla"], "decaton" => [1, "ton"], "decatonne" => [1, "tonne"], "decatorr" => [1, "torr"], "decavolt" => [1, "volt"], "decawatt" => [1, "watt"], "decaweber" => [1, "weber"], "decayard" => [1, "yard"], "decayd" => [1, "yd"], "decayear" => [1, "year"], "deciCelsius" => [-1, "Celsius"], "deciFahrenheit" => [-1, "Fahrenheit"], "deciJulian_year" => [-1, "Julian_year"], "deciPascal" => [-1, "Pascal"], "deciacre" => [-1, "acre"], "deciampere" => [-1, "ampere"], "deciangstrom" => [-1, "angstrom"], "deciangular_degree" => [-1, "angular_degree"], "deciangular_minute" => [-1, "angular_minute"], "deciangular_second" => [-1, "angular_second"], "deciare" => [-1, "are"], "deciatmosphere" => [-1, "atmosphere"], "decicalorie" => [-1, "calorie"], "decicandela" => [-1, "candela"], "decicelsius" => [-1, "celsius"], "decicentigrade" => [-1, "centigrade"], "decicentury" => [-1, "century"], "decichain" => [-1, "chain"], "decicommon_year" => [-1, "common_year"], "decicoulomb" => [-1, "coulomb"], "deciday" => [-1, "day"], "decidegK" => [-1, "degK"], "decideg_K" => [-1, "deg_K"], "decidegree" => [-1, "degree"], "decidegreeK" => [-1, "degreeK"], "decidyne" => [-1, "dyne"], "decierg" => [-1, "erg"], "decifahrenheit" => [-1, "fahrenheit"], "decifarad" => [-1, "farad"], "decifermi" => [-1, "fermi"], "decigal" => [-1, "gal"], "decigauss" => [-1, "gauss"], "decigram" => [-1, "gram"], "decihectare" => [-1, "hectare"], "decihertz" => [-1, "hertz"], "decihour" => [-1, "hour"], "deciinch" => [-1, "inch"], "decijoule" => [-1, "joule"], "decikelvin" => [-1, "kelvin"], "decikilogram" => [-1, "kilogram"], "deciknot" => [-1, "knot"], "decilitre" => [-1, "litre"], "decimeter" => [-1, "meter"], "decimetre" => [-1, "metre"], "decimicron" => [-1, "micron"], "decimile" => [-1, "mile"], "decimillibar" => [-1, "millibar"], "deciminute" => [-1, "minute"], "deciminute_angle" => [-1, "minute_angle"], "decimole" => [-1, "mole"], "decimonth" => [-1, "month"], "decinewton" => [-1, "newton"], "deciounce" => [-1, "ounce"], "deciparsec" => [-1, "parsec"], "decipascal" => [-1, "pascal"], "decipentad" => [-1, "pentad"], "decipercent" => [-1, "percent"], "decipoise" => [-1, "poise"], "decipound" => [-1, "pound"], "deciradian" => [-1, "radian"], "decisecond" => [-1, "second"], "decisecond_angle" => [-1, "second_angle"], "decisteradian" => [-1, "steradian"], "decistokes" => [-1, "stokes"], "decitesla" => [-1, "tesla"], "deciton" => [-1, "ton"], "decitonne" => [-1, "tonne"], "decitorr" => [-1, "torr"], "decivolt" => [-1, "volt"], "deciwatt" => [-1, "watt"], "deciweber" => [-1, "weber"], "deciyard" => [-1, "yard"], "deciyd" => [-1, "yd"], "deciyear" => [-1, "year"], "degKs" => [0, "degK"], "degreeKs" => [0, "degreeK"], "degrees" => [0, "degree"], "degs_K" => [0, "deg_K"], "derg" => [-1, "erg"], "dforce" => [-1, "force"], "dg" => [-1, "g"], "dgravity" => [-1, "gravity"], "dh" => [-1, "h"], "dhg" => [-1, "hg"], "dhr" => [-1, "hr"], "din" => [-1, "in"], "dkgf" => [-1, "kgf"], "dkph" => [-1, "kph"], "dlb" => [-1, "lb"], "dlm" => [-1, "lm"], "dlx" => [-1, "lx"], "dly" => [-1, "ly"], "dm" => [-1, "m"], "dmb" => [-1, "mb"], "dmercury" => [-1, "mercury"], "dmgal" => [-1, "mgal"], "dmin" => [-1, "min"], "dmol" => [-1, "mol"], "dmon" => [-1, "mon"], "dmph" => [-1, "mph"], "dohm" => [-1, "ohm"], "doz" => [-1, "oz"], "dpc" => [-1, "pc"], "dpsi" => [-1, "psi"], "drad" => [-1, "rad"], "ds" => [-1, "s"], "dsr" => [-1, "sr"], "dt" => [-1, "t"], "dynes" => [0, "dyne"], "dyr" => [-1, "yr"], "ergs" => [0, "erg"], "exaCelsius" => [18, "Celsius"], "exaFahrenheit" => [18, "Fahrenheit"], "exaJulian_year" => [18, "Julian_year"], "exaPascal" => [18, "Pascal"], "exaacre" => [18, "acre"], "exaampere" => [18, "ampere"], "exaangstrom" => [18, "angstrom"], "exaangular_degree" => [18, "angular_degree"], "exaangular_minute" => [18, "angular_minute"], "exaangular_second" => [18, "angular_second"], "exaare" => [18, "are"], "exaatmosphere" => [18, "atmosphere"], "exacalorie" => [18, "calorie"], "exacandela" => [18, "candela"], "exacelsius" => [18, "celsius"], "exacentigrade" => [18, "centigrade"], "exacentury" => [18, "century"], "exachain" => [18, "chain"], "exacommon_year" => [18, "common_year"], "exacoulomb" => [18, "coulomb"], "exaday" => [18, "day"], "exadegK" => [18, "degK"], "exadeg_K" => [18, "deg_K"], "exadegree" => [18, "degree"], "exadegreeK" => [18, "degreeK"], "exadyne" => [18, "dyne"], "exaerg" => [18, "erg"], "exafahrenheit" => [18, "fahrenheit"], "exafarad" => [18, "farad"], "exafermi" => [18, "fermi"], "exagal" => [18, "gal"], "exagauss" => [18, "gauss"], "exagram" => [18, "gram"], "exahectare" => [18, "hectare"], "exahertz" => [18, "hertz"], "exahour" => [18, "hour"], "exainch" => [18, "inch"], "exajoule" => [18, "joule"], "exakelvin" => [18, "kelvin"], "exakilogram" => [18, "kilogram"], "exaknot" => [18, "knot"], "exalitre" => [18, "litre"], "exameter" => [18, "meter"], "exametre" => [18, "metre"], "examicron" => [18, "micron"], "examile" => [18, "mile"], "examillibar" => [18, "millibar"], "examinute" => [18, "minute"], "examinute_angle" => [18, "minute_angle"], "examole" => [18, "mole"], "examonth" => [18, "month"], "exanewton" => [18, "newton"], "exaounce" => [18, "ounce"], "exaparsec" => [18, "parsec"], "exapascal" => [18, "pascal"], "exapentad" => [18, "pentad"], "exapercent" => [18, "percent"], "exapoise" => [18, "poise"], "exapound" => [18, "pound"], "exaradian" => [18, "radian"], "exasecond" => [18, "second"], "exasecond_angle" => [18, "second_angle"], "exasteradian" => [18, "steradian"], "exastokes" => [18, "stokes"], "exatesla" => [18, "tesla"], "exaton" => [18, "ton"], "exatonne" => [18, "tonne"], "exatorr" => [18, "torr"], "exavolt" => [18, "volt"], "exawatt" => [18, "watt"], "exaweber" => [18, "weber"], "exayard" => [18, "yard"], "exayd" => [18, "yd"], "exayear" => [18, "year"], "fA" => [-15, "A"], "fAu" => [-15, "Au"], "fBq" => [-15, "Bq"], "fC" => [-15, "C"], "fF" => [-15, "F"], "fG" => [-15, "G"], "fGal" => [-15, "Gal"], "fGy" => [-15, "Gy"], "fH" => [-15, "H"], "fHg" => [-15, "Hg"], "fHz" => [-15, "Hz"], "fJ" => [-15, "J"], "fK" => [-15, "K"], "fL" => [-15, "L"], "fN" => [-15, "N"], "fP" => [-15, "P"], "fPa" => [-15, "Pa"], "fS" => [-15, "S"], "fSt" => [-15, "St"], "fSv" => [-15, "Sv"], "fT" => [-15, "T"], "fV" => [-15, "V"], "fW" => [-15, "W"], "fWb" => [-15, "Wb"], "fa" => [-15, "a"], "fac" => [-15, "ac"], "fahrenheits" => [0, "fahrenheit"], "farads" => [0, "farad"], "fatm" => [-15, "atm"], "fbar" => [-15, "bar"], "fcal" => [-15, "cal"], "fcd" => [-15, "cd"], "fconventional_mercury" => [-15, "conventional_mercury"], "fdegC" => [-15, "degC"], "fdegF" => [-15, "degF"], "fdeg_C" => [-15, "deg_C"], "fdeg_F" => [-15, "deg_F"], "fdegreeC" => [-15, "degreeC"], "fdegreeF" => [-15, "degreeF"], "fdegree_C" => [-15, "degree_C"], "fdegree_E" => [-15, "degree_E"], "fdegree_F" => [-15, "degree_F"], "fdegree_N" => [-15, "degree_N"], "fdegree_R" => [-15, "degree_R"], "fdegree_S" => [-15, "degree_S"], "fdegree_W" => [-15, "degree_W"], "fdegree_c" => [-15, "degree_c"], "fdegree_east" => [-15, "degree_east"], "fdegree_f" => [-15, "degree_f"], "fdegree_north" => [-15, "degree_north"], "fdegree_south" => [-15, "degree_south"], "fdegree_west" => [-15, "degree_west"], "fdegrees_east" => [-15, "degrees_east"], "fdegrees_north" => [-15, "degrees_north"], "fdegrees_south" => [-15, "degrees_south"], "fdegrees_west" => [-15, "degrees_west"], "fdyn" => [-15, "dyn"], "femtoCelsius" => [-15, "Celsius"], "femtoFahrenheit" => [-15, "Fahrenheit"], "femtoJulian_year" => [-15, "Julian_year"], "femtoPascal" => [-15, "Pascal"], "femtoacre" => [-15, "acre"], "femtoampere" => [-15, "ampere"], "femtoangstrom" => [-15, "angstrom"], "femtoangular_degree" => [-15, "angular_degree"], "femtoangular_minute" => [-15, "angular_minute"], "femtoangular_second" => [-15, "angular_second"], "femtoare" => [-15, "are"], "femtoatmosphere" => [-15, "atmosphere"], "femtocalorie" => [-15, "calorie"], "femtocandela" => [-15, "candela"], "femtocelsius" => [-15, "celsius"], "femtocentigrade" => [-15, "centigrade"], "femtocentury" => [-15, "century"], "femtochain" => [-15, "chain"], "femtocommon_year" => [-15, "common_year"], "femtocoulomb" => [-15, "coulomb"], "femtoday" => [-15, "day"], "femtodegK" => [-15, "degK"], "femtodeg_K" => [-15, "deg_K"], "femtodegree" => [-15, "degree"], "femtodegreeK" => [-15, "degreeK"], "femtodyne" => [-15, "dyne"], "femtoerg" => [-15, "erg"], "femtofahrenheit" => [-15, "fahrenheit"], "femtofarad" => [-15, "farad"], "femtofermi" => [-15, "fermi"], "femtogal" => [-15, "gal"], "femtogauss" => [-15, "gauss"], "femtogram" => [-15, "gram"], "femtohectare" => [-15, "hectare"], "femtohertz" => [-15, "hertz"], "femtohour" => [-15, "hour"], "femtoinch" => [-15, "inch"], "femtojoule" => [-15, "joule"], "femtokelvin" => [-15, "kelvin"], "femtokilogram" => [-15, "kilogram"], "femtoknot" => [-15, "knot"], "femtolitre" => [-15, "litre"], "femtometer" => [-15, "meter"], "femtometre" => [-15, "metre"], "femtomicron" => [-15, "micron"], "femtomile" => [-15, "mile"], "femtomillibar" => [-15, "millibar"], "femtominute" => [-15, "minute"], "femtominute_angle" => [-15, "minute_angle"], "femtomole" => [-15, "mole"], "femtomonth" => [-15, "month"], "femtonewton" => [-15, "newton"], "femtoounce" => [-15, "ounce"], "femtoparsec" => [-15, "parsec"], "femtopascal" => [-15, "pascal"], "femtopentad" => [-15, "pentad"], "femtopercent" => [-15, "percent"], "femtopoise" => [-15, "poise"], "femtopound" => [-15, "pound"], "femtoradian" => [-15, "radian"], "femtosecond" => [-15, "second"], "femtosecond_angle" => [-15, "second_angle"], "femtosteradian" => [-15, "steradian"], "femtostokes" => [-15, "stokes"], "femtotesla" => [-15, "tesla"], "femtoton" => [-15, "ton"], "femtotonne" => [-15, "tonne"], "femtotorr" => [-15, "torr"], "femtovolt" => [-15, "volt"], "femtowatt" => [-15, "watt"], "femtoweber" => [-15, "weber"], "femtoyard" => [-15, "yard"], "femtoyd" => [-15, "yd"], "femtoyear" => [-15, "year"], "ferg" => [-15, "erg"], "fermis" => [0, "fermi"], "fforce" => [-15, "force"], "fg" => [-15, "g"], "fgravity" => [-15, "gravity"], "fh" => [-15, "h"], "fhg" => [-15, "hg"], "fhr" => [-15, "hr"], "fin" => [-15, "in"], "fkgf" => [-15, "kgf"], "fkph" => [-15, "kph"], "flb" => [-15, "lb"], "flm" => [-15, "lm"], "flx" => [-15, "lx"], "fly" => [-15, "ly"], "fm" => [-15, "m"], "fmb" => [-15, "mb"], "fmercury" => [-15, "mercury"], "fmgal" => [-15, "mgal"], "fmin" => [-15, "min"], "fmol" => [-15, "mol"], "fmon" => [-15, "mon"], "fmph" => [-15, "mph"], "fohm" => [-15, "ohm"], "foz" => [-15, "oz"], "fpc" => [-15, "pc"], "fpsi" => [-15, "psi"], "frad" => [-15, "rad"], "fs" => [-15, "s"], "fsr" => [-15, "sr"], "ft" => [-15, "t"], "fyr" => [-15, "yr"], "gals" => [0, "gal"], "gausses" => [0, "gauss"], "gigaCelsius" => [9, "Celsius"], "gigaFahrenheit" => [9, "Fahrenheit"], "gigaJulian_year" => [9, "Julian_year"], "gigaPascal" => [9, "Pascal"], "gigaacre" => [9, "acre"], "gigaampere" => [9, "ampere"], "gigaangstrom" => [9, "angstrom"], "gigaangular_degree" => [9, "angular_degree"], "gigaangular_minute" => [9, "angular_minute"], "gigaangular_second" => [9, "angular_second"], "gigaare" => [9, "are"], "gigaatmosphere" => [9, "atmosphere"], "gigacalorie" => [9, "calorie"], "gigacandela" => [9, "candela"], "gigacelsius" => [9, "celsius"], "gigacentigrade" => [9, "centigrade"], "gigacentury" => [9, "century"], "gigachain" => [9, "chain"], "gigacommon_year" => [9, "common_year"], "gigacoulomb" => [9, "coulomb"], "gigaday" => [9, "day"], "gigadegK" => [9, "degK"], "gigadeg_K" => [9, "deg_K"], "gigadegree" => [9, "degree"], "gigadegreeK" => [9, "degreeK"], "gigadyne" => [9, "dyne"], "gigaerg" => [9, "erg"], "gigafahrenheit" => [9, "fahrenheit"], "gigafarad" => [9, "farad"], "gigafermi" => [9, "fermi"], "gigagal" => [9, "gal"], "gigagauss" => [9, "gauss"], "gigagram" => [9, "gram"], "gigahectare" => [9, "hectare"], "gigahertz" => [9, "hertz"], "gigahour" => [9, "hour"], "gigainch" => [9, "inch"], "gigajoule" => [9, "joule"], "gigakelvin" => [9, "kelvin"], "gigakilogram" => [9, "kilogram"], "gigaknot" => [9, "knot"], "gigalitre" => [9, "litre"], "gigameter" => [9, "meter"], "gigametre" => [9, "metre"], "gigamicron" => [9, "micron"], "gigamile" => [9, "mile"], "gigamillibar" => [9, "millibar"], "gigaminute" => [9, "minute"], "gigaminute_angle" => [9, "minute_angle"], "gigamole" => [9, "mole"], "gigamonth" => [9, "month"], "giganewton" => [9, "newton"], "gigaounce" => [9, "ounce"], "gigaparsec" => [9, "parsec"], "gigapascal" => [9, "pascal"], "gigapentad" => [9, "pentad"], "gigapercent" => [9, "percent"], "gigapoise" => [9, "poise"], "gigapound" => [9, "pound"], "gigaradian" => [9, "radian"], "gigasecond" => [9, "second"], "gigasecond_angle" => [9, "second_angle"], "gigasteradian" => [9, "steradian"], "gigastokes" => [9, "stokes"], "gigatesla" => [9, "tesla"], "gigaton" => [9, "ton"], "gigatonne" => [9, "tonne"], "gigatorr" => [9, "torr"], "gigavolt" => [9, "volt"], "gigawatt" => [9, "watt"], "gigaweber" => [9, "weber"], "gigayard" => [9, "yard"], "gigayd" => [9, "yd"], "gigayear" => [9, "year"], "grams" => [0, "gram"], "hA" => [2, "A"], "hAu" => [2, "Au"], "hBq" => [2, "Bq"], "hC" => [2, "C"], "hF" => [2, "F"], "hG" => [2, "G"], "hGal" => [2, "Gal"], "hGy" => [2, "Gy"], "hH" => [2, "H"], "hHg" => [2, "Hg"], "hHz" => [2, "Hz"], "hJ" => [2, "J"], "hK" => [2, "K"], "hL" => [2, "L"], "hN" => [2, "N"], "hP" => [2, "P"], "hPa" => [2, "Pa"], "hS" => [2, "S"], "hSt" => [2, "St"], "hSv" => [2, "Sv"], "hT" => [2, "T"], "hV" => [2, "V"], "hW" => [2, "W"], "hWb" => [2, "Wb"], "ha" => [2, "a"], "hac" => [2, "ac"], "hatm" => [2, "atm"], "hbar" => [2, "bar"], "hcal" => [2, "cal"], "hcd" => [2, "cd"], "hconventional_mercury" => [2, "conventional_mercury"], "hdegC" => [2, "degC"], "hdegF" => [2, "degF"], "hdeg_C" => [2, "deg_C"], "hdeg_F" => [2, "deg_F"], "hdegreeC" => [2, "degreeC"], "hdegreeF" => [2, "degreeF"], "hdegree_C" => [2, "degree_C"], "hdegree_E" => [2, "degree_E"], "hdegree_F" => [2, "degree_F"], "hdegree_N" => [2, "degree_N"], "hdegree_R" => [2, "degree_R"], "hdegree_S" => [2, "degree_S"], "hdegree_W" => [2, "degree_W"], "hdegree_c" => [2, "degree_c"], "hdegree_east" => [2, "degree_east"], "hdegree_f" => [2, "degree_f"], "hdegree_north" => [2, "degree_north"], "hdegree_south" => [2, "degree_south"], "hdegree_west" => [2, "degree_west"], "hdegrees_east" => [2, "degrees_east"], "hdegrees_north" => [2, "degrees_north"], "hdegrees_south" => [2, "degrees_south"], "hdegrees_west" => [2, "degrees_west"], "hdyn" => [2, "dyn"], "hectares" => [0, "hectare"], "hectoCelsius" => [2, "Celsius"], "hectoFahrenheit" => [2, "Fahrenheit"], "hectoJulian_year" => [2, "Julian_year"], "hectoPascal" => [2, "Pascal"], "hectoacre" => [2, "acre"], "hectoampere" => [2, "ampere"], "hectoangstrom" => [2, "angstrom"], "hectoangular_degree" => [2, "angular_degree"], "hectoangular_minute" => [2, "angular_minute"], "hectoangular_second" => [2, "angular_second"], "hectoare" => [2, "are"], "hectoatmosphere" => [2, "atmosphere"], "hectocalorie" => [2, "calorie"], "hectocandela" => [2, "candela"], "hectocelsius" => [2, "celsius"], "hectocentigrade" => [2, "centigrade"], "hectocentury" => [2, "century"], "hectochain" => [2, "chain"], "hectocommon_year" => [2, "common_year"], "hectocoulomb" => [2, "coulomb"], "hectoday" => [2, "day"], "hectodegK" => [2, "degK"], "hectodeg_K" => [2, "deg_K"], "hectodegree" => [2, "degree"], "hectodegreeK" => [2, "degreeK"], "hectodyne" => [2, "dyne"], "hectoerg" => [2, "erg"], "hectofahrenheit" => [2, "fahrenheit"], "hectofarad" => [2, "farad"], "hectofermi" => [2, "fermi"], "hectogal" => [2, "gal"], "hectogauss" => [2, "gauss"], "hectogram" => [2, "gram"], "hectohectare" => [2, "hectare"], "hectohertz" => [2, "hertz"], "hectohour" => [2, "hour"], "hectoinch" => [2, "inch"], "hectojoule" => [2, "joule"], "hectokelvin" => [2, "kelvin"], "hectokilogram" => [2, "kilogram"], "hectoknot" => [2, "knot"], "hectolitre" => [2, "litre"], "hectometer" => [2, "meter"], "hectometre" => [2, "metre"], "hectomicron" => [2, "micron"], "hectomile" => [2, "mile"], "hectomillibar" => [2, "millibar"], "hectominute" => [2, "minute"], "hectominute_angle" => [2, "minute_angle"], "hectomole" => [2, "mole"], "hectomonth" => [2, "month"], "hectonewton" => [2, "newton"], "hectoounce" => [2, "ounce"], "hectoparsec" => [2, "parsec"], "hectopascal" => [2, "pascal"], "hectopentad" => [2, "pentad"], "hectopercent" => [2, "percent"], "hectopoise" => [2, "poise"], "hectopound" => [2, "pound"], "hectoradian" => [2, "radian"], "hectosecond" => [2, "second"], "hectosecond_angle" => [2, "second_angle"], "hectosteradian" => [2, "steradian"], "hectostokes" => [2, "stokes"], "hectotesla" => [2, "tesla"], "hectoton" => [2, "ton"], "hectotonne" => [2, "tonne"], "hectotorr" => [2, "torr"], "hectovolt" => [2, "volt"], "hectowatt" => [2, "watt"], "hectoweber" => [2, "weber"], "hectoyard" => [2, "yard"], "hectoyd" => [2, "yd"], "hectoyear" => [2, "year"], "herg" => [2, "erg"], "hertzes" => [0, "hertz"], "hforce" => [2, "force"], "hg" => [2, "g"], "hgravity" => [2, "gravity"], "hh" => [2, "h"], "hhg" => [2, "hg"], "hhr" => [2, "hr"], "hin" => [2, "in"], "hkgf" => [2, "kgf"], "hkph" => [2, "kph"], "hlb" => [2, "lb"], "hlm" => [2, "lm"], "hlx" => [2, "lx"], "hly" => [2, "ly"], "hm" => [2, "m"], "hmb" => [2, "mb"], "hmercury" => [2, "mercury"], "hmgal" => [2, "mgal"], "hmin" => [2, "min"], "hmol" => [2, "mol"], "hmon" => [2, "mon"], "hmph" => [2, "mph"], "hohm" => [2, "ohm"], "hours" => [0, "hour"], "hoz" => [2, "oz"], "hpc" => [2, "pc"], "hpsi" => [2, "psi"], "hrad" => [2, "rad"], "hs" => [2, "s"], "hsr" => [2, "sr"], "ht" => [2, "t"], "hyr" => [2, "yr"], "inchs" => [0, "inch"], "joules" => [0, "joule"], "kA" => [3, "A"], "kAu" => [3, "Au"], "kBq" => [3, "Bq"], "kC" => [3, "C"], "kF" => [3, "F"], "kG" => [3, "G"], "kGal" => [3, "Gal"], "kGy" => [3, "Gy"], "kH" => [3, "H"], "kHg" => [3, "Hg"], "kHz" => [3, "Hz"], "kJ" => [3, "J"], "kK" => [3, "K"], "kL" => [3, "L"], "kN" => [3, "N"], "kP" => [3, "P"], "kPa" => [3, "Pa"], "kS" => [3, "S"], "kSt" => [3, "St"], "kSv" => [3, "Sv"], "kT" => [3, "T"], "kV" => [3, "V"], "kW" => [3, "W"], "kWb" => [3, "Wb"], "ka" => [3, "a"], "kac" => [3, "ac"], "katm" => [3, "atm"], "kbar" => [3, "bar"], "kcal" => [3, "cal"], "kcd" => [3, "cd"], "kconventional_mercury" => [3, "conventional_mercury"], "kdegC" => [3, "degC"], "kdegF" => [3, "degF"], "kdeg_C" => [3, "deg_C"], "kdeg_F" => [3, "deg_F"], "kdegreeC" => [3, "degreeC"], "kdegreeF" => [3, "degreeF"], "kdegree_C" => [3, "degree_C"], "kdegree_E" => [3, "degree_E"], "kdegree_F" => [3, "degree_F"], "kdegree_N" => [3, "degree_N"], "kdegree_R" => [3, "degree_R"], "kdegree_S" => [3, "degree_S"], "kdegree_W" => [3, "degree_W"], "kdegree_c" => [3, "degree_c"], "kdegree_east" => [3, "degree_east"], "kdegree_f" => [3, "degree_f"], "kdegree_north" => [3, "degree_north"], "kdegree_south" => [3, "degree_south"], "kdegree_west" => [3, "degree_west"], "kdegrees_east" => [3, "degrees_east"], "kdegrees_north" => [3, "degrees_north"], "kdegrees_south" => [3, "degrees_south"], "kdegrees_west" => [3, "degrees_west"], "kdyn" => [3, "dyn"], "kelvins" => [0, "kelvin"], "kerg" => [3, "erg"], "kforce" => [3, "force"], "kgravity" => [3, "gravity"], "kh" => [3, "h"], "khg" => [3, "hg"], "khr" => [3, "hr"], "kiloCelsius" => [3, "Celsius"], "kiloFahrenheit" => [3, "Fahrenheit"], "kiloJulian_year" => [3, "Julian_year"], "kiloPascal" => [3, "Pascal"], "kiloacre" => [3, "acre"], "kiloampere" => [3, "ampere"], "kiloangstrom" => [3, "angstrom"], "kiloangular_degree" => [3, "angular_degree"], "kiloangular_minute" => [3, "angular_minute"], "kiloangular_second" => [3, "angular_second"], "kiloare" => [3, "are"], "kiloatmosphere" => [3, "atmosphere"], "kilocalorie" => [3, "calorie"], "kilocandela" => [3, "candela"], "kilocelsius" => [3, "celsius"], "kilocentigrade" => [3, "centigrade"], "kilocentury" => [3, "century"], "kilochain" => [3, "chain"], "kilocommon_year" => [3, "common_year"], "kilocoulomb" => [3, "coulomb"], "kiloday" => [3, "day"], "kilodegK" => [3, "degK"], "kilodeg_K" => [3, "deg_K"], "kilodegree" => [3, "degree"], "kilodegreeK" => [3, "degreeK"], "kilodyne" => [3, "dyne"], "kiloerg" => [3, "erg"], "kilofahrenheit" => [3, "fahrenheit"], "kilofarad" => [3, "farad"], "kilofermi" => [3, "fermi"], "kilogal" => [3, "gal"], "kilogauss" => [3, "gauss"], "kilogram" => [3, "gram"], "kilograms" => [0, "kilogram"], "kilohectare" => [3, "hectare"], "kilohertz" => [3, "hertz"], "kilohour" => [3, "hour"], "kiloinch" => [3, "inch"], "kilojoule" => [3, "joule"], "kilokelvin" => [3, "kelvin"], "kilokilogram" => [3, "kilogram"], "kiloknot" => [3, "knot"], "kilolitre" => [3, "litre"], "kilometer" => [3, "meter"], "kilometre" => [3, "metre"], "kilomicron" => [3, "micron"], "kilomile" => [3, "mile"], "kilomillibar" => [3, "millibar"], "kilominute" => [3, "minute"], "kilominute_angle" => [3, "minute_angle"], "kilomole" => [3, "mole"], "kilomonth" => [3, "month"], "kilonewton" => [3, "newton"], "kiloounce" => [3, "ounce"], "kiloparsec" => [3, "parsec"], "kilopascal" => [3, "pascal"], "kilopentad" => [3, "pentad"], "kilopercent" => [3, "percent"], "kilopoise" => [3, "poise"], "kilopound" => [3, "pound"], "kiloradian" => [3, "radian"], "kilosecond" => [3, "second"], "kilosecond_angle" => [3, "second_angle"], "kilosteradian" => [3, "steradian"], "kilostokes" => [3, "stokes"], "kilotesla" => [3, "tesla"], "kiloton" => [3, "ton"], "kilotonne" => [3, "tonne"], "kilotorr" => [3, "torr"], "kilovolt" => [3, "volt"], "kilowatt" => [3, "watt"], "kiloweber" => [3, "weber"], "kiloyard" => [3, "yard"], "kiloyd" => [3, "yd"], "kiloyear" => [3, "year"], "kin" => [3, "in"], "kkgf" => [3, "kgf"], "kkph" => [3, "kph"], "klb" => [3, "lb"], "klm" => [3, "lm"], "klx" => [3, "lx"], "kly" => [3, "ly"], "km" => [3, "m"], "kmb" => [3, "mb"], "kmercury" => [3, "mercury"], "kmgal" => [3, "mgal"], "kmin" => [3, "min"], "kmol" => [3, "mol"], "kmon" => [3, "mon"], "kmph" => [3, "mph"], "knots" => [0, "knot"], "kohm" => [3, "ohm"], "koz" => [3, "oz"], "kpc" => [3, "pc"], "kpsi" => [3, "psi"], "krad" => [3, "rad"], "ks" => [3, "s"], "ksr" => [3, "sr"], "kt" => [3, "t"], "kyr" => [3, "yr"], "litres" => [0, "litre"], "mA" => [-3, "A"], "mAu" => [-3, "Au"], "mBq" => [-3, "Bq"], "mC" => [-3, "C"], "mF" => [-3, "F"], "mG" => [-3, "G"], "mGal" => [-3, "Gal"], "mGy" => [-3, "Gy"], "mH" => [-3, "H"], "mHg" => [-3, "Hg"], "mHz" => [-3, "Hz"], "mJ" => [-3, "J"], "mK" => [-3, "K"], "mL" => [-3, "L"], "mN" => [-3, "N"], "mP" => [-3, "P"], "mPa" => [-3, "Pa"], "mS" => [-3, "S"], "mSt" => [-3, "St"], "mSv" => [-3, "Sv"], "mT" => [-3, "T"], "mV" => [-3, "V"], "mW" => [-3, "W"], "mWb" => [-3, "Wb"], "ma" => [-3, "a"], "mac" => [-3, "ac"], "matm" => [-3, "atm"], "mbar" => [-3, "bar"], "mcal" => [-3, "cal"], "mcd" => [-3, "cd"], "mconventional_mercury" => [-3, "conventional_mercury"], "mdegC" => [-3, "degC"], "mdegF" => [-3, "degF"], "mdeg_C" => [-3, "deg_C"], "mdeg_F" => [-3, "deg_F"], "mdegreeC" => [-3, "degreeC"], "mdegreeF" => [-3, "degreeF"], "mdegree_C" => [-3, "degree_C"], "mdegree_E" => [-3, "degree_E"], "mdegree_F" => [-3, "degree_F"], "mdegree_N" => [-3, "degree_N"], "mdegree_R" => [-3, "degree_R"], "mdegree_S" => [-3, "degree_S"], "mdegree_W" => [-3, "degree_W"], "mdegree_c" => [-3, "degree_c"], "mdegree_east" => [-3, "degree_east"], "mdegree_f" => [-3, "degree_f"], "mdegree_north" => [-3, "degree_north"], "mdegree_south" => [-3, "degree_south"], "mdegree_west" => [-3, "degree_west"], "mdegrees_east" => [-3, "degrees_east"], "mdegrees_north" => [-3, "degrees_north"], "mdegrees_south" => [-3, "degrees_south"], "mdegrees_west" => [-3, "degrees_west"], "mdyn" => [-3, "dyn"], "megaCelsius" => [6, "Celsius"], "megaFahrenheit" => [6, "Fahrenheit"], "megaJulian_year" => [6, "Julian_year"], "megaPascal" => [6, "Pascal"], "megaacre" => [6, "acre"], "megaampere" => [6, "ampere"], "megaangstrom" => [6, "angstrom"], "megaangular_degree" => [6, "angular_degree"], "megaangular_minute" => [6, "angular_minute"], "megaangular_second" => [6, "angular_second"], "megaare" => [6, "are"], "megaatmosphere" => [6, "atmosphere"], "megacalorie" => [6, "calorie"], "megacandela" => [6, "candela"], "megacelsius" => [6, "celsius"], "megacentigrade" => [6, "centigrade"], "megacentury" => [6, "century"], "megachain" => [6, "chain"], "megacommon_year" => [6, "common_year"], "megacoulomb" => [6, "coulomb"], "megaday" => [6, "day"], "megadegK" => [6, "degK"], "megadeg_K" => [6, "deg_K"], "megadegree" => [6, "degree"], "megadegreeK" => [6, "degreeK"], "megadyne" => [6, "dyne"], "megaerg" => [6, "erg"], "megafahrenheit" => [6, "fahrenheit"], "megafarad" => [6, "farad"], "megafermi" => [6, "fermi"], "megagal" => [6, "gal"], "megagauss" => [6, "gauss"], "megagram" => [6, "gram"], "megahectare" => [6, "hectare"], "megahertz" => [6, "hertz"], "megahour" => [6, "hour"], "megainch" => [6, "inch"], "megajoule" => [6, "joule"], "megakelvin" => [6, "kelvin"], "megakilogram" => [6, "kilogram"], "megaknot" => [6, "knot"], "megalitre" => [6, "litre"], "megameter" => [6, "meter"], "megametre" => [6, "metre"], "megamicron" => [6, "micron"], "megamile" => [6, "mile"], "megamillibar" => [6, "millibar"], "megaminute" => [6, "minute"], "megaminute_angle" => [6, "minute_angle"], "megamole" => [6, "mole"], "megamonth" => [6, "month"], "meganewton" => [6, "newton"], "megaounce" => [6, "ounce"], "megaparsec" => [6, "parsec"], "megapascal" => [6, "pascal"], "megapentad" => [6, "pentad"], "megapercent" => [6, "percent"], "megapoise" => [6, "poise"], "megapound" => [6, "pound"], "megaradian" => [6, "radian"], "megasecond" => [6, "second"], "megasecond_angle" => [6, "second_angle"], "megasteradian" => [6, "steradian"], "megastokes" => [6, "stokes"], "megatesla" => [6, "tesla"], "megaton" => [6, "ton"], "megatonne" => [6, "tonne"], "megatorr" => [6, "torr"], "megavolt" => [6, "volt"], "megawatt" => [6, "watt"], "megaweber" => [6, "weber"], "megayard" => [6, "yard"], "megayd" => [6, "yd"], "megayear" => [6, "year"], "merg" => [-3, "erg"], "meters" => [0, "meter"], "metres" => [0, "metre"], "mforce" => [-3, "force"], "mg" => [-3, "g"], "mgravity" => [-3, "gravity"], "mh" => [-3, "h"], "mhg" => [-3, "hg"], "mhr" => [-3, "hr"], "microCelsius" => [-6, "Celsius"], "microFahrenheit" => [-6, "Fahrenheit"], "microJulian_year" => [-6, "Julian_year"], "microPascal" => [-6, "Pascal"], "microacre" => [-6, "acre"], "microampere" => [-6, "ampere"], "microangstrom" => [-6, "angstrom"], "microangular_degree" => [-6, "angular_degree"], "microangular_minute" => [-6, "angular_minute"], "microangular_second" => [-6, "angular_second"], "microare" => [-6, "are"], "microatmosphere" => [-6, "atmosphere"], "microcalorie" => [-6, "calorie"], "microcandela" => [-6, "candela"], "microcelsius" => [-6, "celsius"], "microcentigrade" => [-6, "centigrade"], "microcentury" => [-6, "century"], "microchain" => [-6, "chain"], "microcommon_year" => [-6, "common_year"], "microcoulomb" => [-6, "coulomb"], "microday" => [-6, "day"], "microdegK" => [-6, "degK"], "microdeg_K" => [-6, "deg_K"], "microdegree" => [-6, "degree"], "microdegreeK" => [-6, "degreeK"], "microdyne" => [-6, "dyne"], "microerg" => [-6, "erg"], "microfahrenheit" => [-6, "fahrenheit"], "microfarad" => [-6, "farad"], "microfermi" => [-6, "fermi"], "microgal" => [-6, "gal"], "microgauss" => [-6, "gauss"], "microgram" => [-6, "gram"], "microhectare" => [-6, "hectare"], "microhertz" => [-6, "hertz"], "microhour" => [-6, "hour"], "microinch" => [-6, "inch"], "microjoule" => [-6, "joule"], "microkelvin" => [-6, "kelvin"], "microkilogram" => [-6, "kilogram"], "microknot" => [-6, "knot"], "microlitre" => [-6, "litre"], "micrometer" => [-6, "meter"], "micrometre" => [-6, "metre"], "micromicron" => [-6, "micron"], "micromile" => [-6, "mile"], "micromillibar" => [-6, "millibar"], "microminute" => [-6, "minute"], "microminute_angle" => [-6, "minute_angle"], "micromole" => [-6, "mole"], "micromonth" => [-6, "month"], "micronewton" => [-6, "newton"], "microns" => [0, "micron"], "microounce" => [-6, "ounce"], "microparsec" => [-6, "parsec"], "micropascal" => [-6, "pascal"], "micropentad" => [-6, "pentad"], "micropercent" => [-6, "percent"], "micropoise" => [-6, "poise"], "micropound" => [-6, "pound"], "microradian" => [-6, "radian"], "microsecond" => [-6, "second"], "microsecond_angle" => [-6, "second_angle"], "microsteradian" => [-6, "steradian"], "microstokes" => [-6, "stokes"], "microtesla" => [-6, "tesla"], "microton" => [-6, "ton"], "microtonne" => [-6, "tonne"], "microtorr" => [-6, "torr"], "microvolt" => [-6, "volt"], "microwatt" => [-6, "watt"], "microweber" => [-6, "weber"], "microyard" => [-6, "yard"], "microyd" => [-6, "yd"], "microyear" => [-6, "year"], "miles" => [0, "mile"], "milliCelsius" => [-3, "Celsius"], "milliFahrenheit" => [-3, "Fahrenheit"], "milliJulian_year" => [-3, "Julian_year"], "milliPascal" => [-3, "Pascal"], "milliacre" => [-3, "acre"], "milliampere" => [-3, "ampere"], "milliangstrom" => [-3, "angstrom"], "milliangular_degree" => [-3, "angular_degree"], "milliangular_minute" => [-3, "angular_minute"], "milliangular_second" => [-3, "angular_second"], "milliare" => [-3, "are"], "milliatmosphere" => [-3, "atmosphere"], "millibars" => [0, "millibar"], "millicalorie" => [-3, "calorie"], "millicandela" => [-3, "candela"], "millicelsius" => [-3, "celsius"], "millicentigrade" => [-3, "centigrade"], "millicentury" => [-3, "century"], "millichain" => [-3, "chain"], "millicommon_year" => [-3, "common_year"], "millicoulomb" => [-3, "coulomb"], "milliday" => [-3, "day"], "millidegK" => [-3, "degK"], "millideg_K" => [-3, "deg_K"], "millidegree" => [-3, "degree"], "millidegreeK" => [-3, "degreeK"], "millidyne" => [-3, "dyne"], "millierg" => [-3, "erg"], "millifahrenheit" => [-3, "fahrenheit"], "millifarad" => [-3, "farad"], "millifermi" => [-3, "fermi"], "milligal" => [-3, "gal"], "milligauss" => [-3, "gauss"], "milligram" => [-3, "gram"], "millihectare" => [-3, "hectare"], "millihertz" => [-3, "hertz"], "millihour" => [-3, "hour"], "milliinch" => [-3, "inch"], "millijoule" => [-3, "joule"], "millikelvin" => [-3, "kelvin"], "millikilogram" => [-3, "kilogram"], "milliknot" => [-3, "knot"], "millilitre" => [-3, "litre"], "millimeter" => [-3, "meter"], "millimetre" => [-3, "metre"], "millimicron" => [-3, "micron"], "millimile" => [-3, "mile"], "millimillibar" => [-3, "millibar"], "milliminute" => [-3, "minute"], "milliminute_angle" => [-3, "minute_angle"], "millimole" => [-3, "mole"], "millimonth" => [-3, "month"], "millinewton" => [-3, "newton"], "milliounce" => [-3, "ounce"], "milliparsec" => [-3, "parsec"], "millipascal" => [-3, "pascal"], "millipentad" => [-3, "pentad"], "millipercent" => [-3, "percent"], "millipoise" => [-3, "poise"], "millipound" => [-3, "pound"], "milliradian" => [-3, "radian"], "millisecond" => [-3, "second"], "millisecond_angle" => [-3, "second_angle"], "millisteradian" => [-3, "steradian"], "millistokes" => [-3, "stokes"], "millitesla" => [-3, "tesla"], "milliton" => [-3, "ton"], "millitonne" => [-3, "tonne"], "millitorr" => [-3, "torr"], "millivolt" => [-3, "volt"], "milliwatt" => [-3, "watt"], "milliweber" => [-3, "weber"], "milliyard" => [-3, "yard"], "milliyd" => [-3, "yd"], "milliyear" => [-3, "year"], "min" => [-3, "in"], "minutes" => [0, "minute"], "minutes_angle" => [0, "minute_angle"], "mkgf" => [-3, "kgf"], "mkph" => [-3, "kph"], "mlb" => [-3, "lb"], "mlm" => [-3, "lm"], "mlx" => [-3, "lx"], "mly" => [-3, "ly"], "mm" => [-3, "m"], "mmb" => [-3, "mb"], "mmercury" => [-3, "mercury"], "mmgal" => [-3, "mgal"], "mmin" => [-3, "min"], "mmol" => [-3, "mol"], "mmon" => [-3, "mon"], "mmph" => [-3, "mph"], "mohm" => [-3, "ohm"], "moles" => [0, "mole"], "months" => [0, "month"], "moz" => [-3, "oz"], "mpc" => [-3, "pc"], "mpsi" => [-3, "psi"], "mrad" => [-3, "rad"], "ms" => [-3, "s"], "msr" => [-3, "sr"], "mt" => [-3, "t"], "myr" => [-3, "yr"], "nA" => [-9, "A"], "nAu" => [-9, "Au"], "nBq" => [-9, "Bq"], "nC" => [-9, "C"], "nF" => [-9, "F"], "nG" => [-9, "G"], "nGal" => [-9, "Gal"], "nGy" => [-9, "Gy"], "nH" => [-9, "H"], "nHg" => [-9, "Hg"], "nHz" => [-9, "Hz"], "nJ" => [-9, "J"], "nK" => [-9, "K"], "nL" => [-9, "L"], "nN" => [-9, "N"], "nP" => [-9, "P"], "nPa" => [-9, "Pa"], "nS" => [-9, "S"], "nSt" => [-9, "St"], "nSv" => [-9, "Sv"], "nT" => [-9, "T"], "nV" => [-9, "V"], "nW" => [-9, "W"], "nWb" => [-9, "Wb"], "na" => [-9, "a"], "nac" => [-9, "ac"], "nanoCelsius" => [-9, "Celsius"], "nanoFahrenheit" => [-9, "Fahrenheit"], "nanoJulian_year" => [-9, "Julian_year"], "nanoPascal" => [-9, "Pascal"], "nanoacre" => [-9, "acre"], "nanoampere" => [-9, "ampere"], "nanoangstrom" => [-9, "angstrom"], "nanoangular_degree" => [-9, "angular_degree"], "nanoangular_minute" => [-9, "angular_minute"], "nanoangular_second" => [-9, "angular_second"], "nanoare" => [-9, "are"], "nanoatmosphere" => [-9, "atmosphere"], "nanocalorie" => [-9, "calorie"], "nanocandela" => [-9, "candela"], "nanocelsius" => [-9, "celsius"], "nanocentigrade" => [-9, "centigrade"], "nanocentury" => [-9, "century"], "nanochain" => [-9, "chain"], "nanocommon_year" => [-9, "common_year"], "nanocoulomb" => [-9, "coulomb"], "nanoday" => [-9, "day"], "nanodegK" => [-9, "degK"], "nanodeg_K" => [-9, "deg_K"], "nanodegree" => [-9, "degree"], "nanodegreeK" => [-9, "degreeK"], "nanodyne" => [-9, "dyne"], "nanoerg" => [-9, "erg"], "nanofahrenheit" => [-9, "fahrenheit"], "nanofarad" => [-9, "farad"], "nanofermi" => [-9, "fermi"], "nanogal" => [-9, "gal"], "nanogauss" => [-9, "gauss"], "nanogram" => [-9, "gram"], "nanohectare" => [-9, "hectare"], "nanohertz" => [-9, "hertz"], "nanohour" => [-9, "hour"], "nanoinch" => [-9, "inch"], "nanojoule" => [-9, "joule"], "nanokelvin" => [-9, "kelvin"], "nanokilogram" => [-9, "kilogram"], "nanoknot" => [-9, "knot"], "nanolitre" => [-9, "litre"], "nanometer" => [-9, "meter"], "nanometre" => [-9, "metre"], "nanomicron" => [-9, "micron"], "nanomile" => [-9, "mile"], "nanomillibar" => [-9, "millibar"], "nanominute" => [-9, "minute"], "nanominute_angle" => [-9, "minute_angle"], "nanomole" => [-9, "mole"], "nanomonth" => [-9, "month"], "nanonewton" => [-9, "newton"], "nanoounce" => [-9, "ounce"], "nanoparsec" => [-9, "parsec"], "nanopascal" => [-9, "pascal"], "nanopentad" => [-9, "pentad"], "nanopercent" => [-9, "percent"], "nanopoise" => [-9, "poise"], "nanopound" => [-9, "pound"], "nanoradian" => [-9, "radian"], "nanosecond" => [-9, "second"], "nanosecond_angle" => [-9, "second_angle"], "nanosteradian" => [-9, "steradian"], "nanostokes" => [-9, "stokes"], "nanotesla" => [-9, "tesla"], "nanoton" => [-9, "ton"], "nanotonne" => [-9, "tonne"], "nanotorr" => [-9, "torr"], "nanovolt" => [-9, "volt"], "nanowatt" => [-9, "watt"], "nanoweber" => [-9, "weber"], "nanoyard" => [-9, "yard"], "nanoyd" => [-9, "yd"], "nanoyear" => [-9, "year"], "natm" => [-9, "atm"], "nbar" => [-9, "bar"], "ncal" => [-9, "cal"], "ncd" => [-9, "cd"], "nconventional_mercury" => [-9, "conventional_mercury"], "ndegC" => [-9, "degC"], "ndegF" => [-9, "degF"], "ndeg_C" => [-9, "deg_C"], "ndeg_F" => [-9, "deg_F"], "ndegreeC" => [-9, "degreeC"], "ndegreeF" => [-9, "degreeF"], "ndegree_C" => [-9, "degree_C"], "ndegree_E" => [-9, "degree_E"], "ndegree_F" => [-9, "degree_F"], "ndegree_N" => [-9, "degree_N"], "ndegree_R" => [-9, "degree_R"], "ndegree_S" => [-9, "degree_S"], "ndegree_W" => [-9, "degree_W"], "ndegree_c" => [-9, "degree_c"], "ndegree_east" => [-9, "degree_east"], "ndegree_f" => [-9, "degree_f"], "ndegree_north" => [-9, "degree_north"], "ndegree_south" => [-9, "degree_south"], "ndegree_west" => [-9, "degree_west"], "ndegrees_east" => [-9, "degrees_east"], "ndegrees_north" => [-9, "degrees_north"], "ndegrees_south" => [-9, "degrees_south"], "ndegrees_west" => [-9, "degrees_west"], "ndyn" => [-9, "dyn"], "nerg" => [-9, "erg"], "newtons" => [0, "newton"], "nforce" => [-9, "force"], "ng" => [-9, "g"], "ngravity" => [-9, "gravity"], "nh" => [-9, "h"], "nhg" => [-9, "hg"], "nhr" => [-9, "hr"], "nin" => [-9, "in"], "nkgf" => [-9, "kgf"], "nkph" => [-9, "kph"], "nlb" => [-9, "lb"], "nlm" => [-9, "lm"], "nlx" => [-9, "lx"], "nly" => [-9, "ly"], "nm" => [-9, "m"], "nmb" => [-9, "mb"], "nmercury" => [-9, "mercury"], "nmgal" => [-9, "mgal"], "nmin" => [-9, "min"], "nmol" => [-9, "mol"], "nmon" => [-9, "mon"], "nmph" => [-9, "mph"], "nohm" => [-9, "ohm"], "noz" => [-9, "oz"], "npc" => [-9, "pc"], "npsi" => [-9, "psi"], "nrad" => [-9, "rad"], "ns" => [-9, "s"], "nsr" => [-9, "sr"], "nt" => [-9, "t"], "nyr" => [-9, "yr"], "ounces" => [0, "ounce"], "pA" => [-12, "A"], "pAu" => [-12, "Au"], "pBq" => [-12, "Bq"], "pC" => [-12, "C"], "pF" => [-12, "F"], "pG" => [-12, "G"], "pGal" => [-12, "Gal"], "pGy" => [-12, "Gy"], "pH" => [-12, "H"], "pHg" => [-12, "Hg"], "pHz" => [-12, "Hz"], "pJ" => [-12, "J"], "pK" => [-12, "K"], "pL" => [-12, "L"], "pN" => [-12, "N"], "pP" => [-12, "P"], "pPa" => [-12, "Pa"], "pS" => [-12, "S"], "pSt" => [-12, "St"], "pSv" => [-12, "Sv"], "pT" => [-12, "T"], "pV" => [-12, "V"], "pW" => [-12, "W"], "pWb" => [-12, "Wb"], "pa" => [-12, "a"], "pac" => [-12, "ac"], "parsecs" => [0, "parsec"], "pascals" => [0, "pascal"], "patm" => [-12, "atm"], "pbar" => [-12, "bar"], "pcal" => [-12, "cal"], "pcd" => [-12, "cd"], "pconventional_mercury" => [-12, "conventional_mercury"], "pdegC" => [-12, "degC"], "pdegF" => [-12, "degF"], "pdeg_C" => [-12, "deg_C"], "pdeg_F" => [-12, "deg_F"], "pdegreeC" => [-12, "degreeC"], "pdegreeF" => [-12, "degreeF"], "pdegree_C" => [-12, "degree_C"], "pdegree_E" => [-12, "degree_E"], "pdegree_F" => [-12, "degree_F"], "pdegree_N" => [-12, "degree_N"], "pdegree_R" => [-12, "degree_R"], "pdegree_S" => [-12, "degree_S"], "pdegree_W" => [-12, "degree_W"], "pdegree_c" => [-12, "degree_c"], "pdegree_east" => [-12, "degree_east"], "pdegree_f" => [-12, "degree_f"], "pdegree_north" => [-12, "degree_north"], "pdegree_south" => [-12, "degree_south"], "pdegree_west" => [-12, "degree_west"], "pdegrees_east" => [-12, "degrees_east"], "pdegrees_north" => [-12, "degrees_north"], "pdegrees_south" => [-12, "degrees_south"], "pdegrees_west" => [-12, "degrees_west"], "pdyn" => [-12, "dyn"], "pentads" => [0, "pentad"], "percents" => [0, "percent"], "perg" => [-12, "erg"], "petaCelsius" => [15, "Celsius"], "petaFahrenheit" => [15, "Fahrenheit"], "petaJulian_year" => [15, "Julian_year"], "petaPascal" => [15, "Pascal"], "petaacre" => [15, "acre"], "petaampere" => [15, "ampere"], "petaangstrom" => [15, "angstrom"], "petaangular_degree" => [15, "angular_degree"], "petaangular_minute" => [15, "angular_minute"], "petaangular_second" => [15, "angular_second"], "petaare" => [15, "are"], "petaatmosphere" => [15, "atmosphere"], "petacalorie" => [15, "calorie"], "petacandela" => [15, "candela"], "petacelsius" => [15, "celsius"], "petacentigrade" => [15, "centigrade"], "petacentury" => [15, "century"], "petachain" => [15, "chain"], "petacommon_year" => [15, "common_year"], "petacoulomb" => [15, "coulomb"], "petaday" => [15, "day"], "petadegK" => [15, "degK"], "petadeg_K" => [15, "deg_K"], "petadegree" => [15, "degree"], "petadegreeK" => [15, "degreeK"], "petadyne" => [15, "dyne"], "petaerg" => [15, "erg"], "petafahrenheit" => [15, "fahrenheit"], "petafarad" => [15, "farad"], "petafermi" => [15, "fermi"], "petagal" => [15, "gal"], "petagauss" => [15, "gauss"], "petagram" => [15, "gram"], "petahectare" => [15, "hectare"], "petahertz" => [15, "hertz"], "petahour" => [15, "hour"], "petainch" => [15, "inch"], "petajoule" => [15, "joule"], "petakelvin" => [15, "kelvin"], "petakilogram" => [15, "kilogram"], "petaknot" => [15, "knot"], "petalitre" => [15, "litre"], "petameter" => [15, "meter"], "petametre" => [15, "metre"], "petamicron" => [15, "micron"], "petamile" => [15, "mile"], "petamillibar" => [15, "millibar"], "petaminute" => [15, "minute"], "petaminute_angle" => [15, "minute_angle"], "petamole" => [15, "mole"], "petamonth" => [15, "month"], "petanewton" => [15, "newton"], "petaounce" => [15, "ounce"], "petaparsec" => [15, "parsec"], "petapascal" => [15, "pascal"], "petapentad" => [15, "pentad"], "petapercent" => [15, "percent"], "petapoise" => [15, "poise"], "petapound" => [15, "pound"], "petaradian" => [15, "radian"], "petasecond" => [15, "second"], "petasecond_angle" => [15, "second_angle"], "petasteradian" => [15, "steradian"], "petastokes" => [15, "stokes"], "petatesla" => [15, "tesla"], "petaton" => [15, "ton"], "petatonne" => [15, "tonne"], "petatorr" => [15, "torr"], "petavolt" => [15, "volt"], "petawatt" => [15, "watt"], "petaweber" => [15, "weber"], "petayard" => [15, "yard"], "petayd" => [15, "yd"], "petayear" => [15, "year"], "pforce" => [-12, "force"], "pg" => [-12, "g"], "pgravity" => [-12, "gravity"], "ph" => [-12, "h"], "phg" => [-12, "hg"], "phr" => [-12, "hr"], "picoCelsius" => [-12, "Celsius"], "picoFahrenheit" => [-12, "Fahrenheit"], "picoJulian_year" => [-12, "Julian_year"], "picoPascal" => [-12, "Pascal"], "picoacre" => [-12, "acre"], "picoampere" => [-12, "ampere"], "picoangstrom" => [-12, "angstrom"], "picoangular_degree" => [-12, "angular_degree"], "picoangular_minute" => [-12, "angular_minute"], "picoangular_second" => [-12, "angular_second"], "picoare" => [-12, "are"], "picoatmosphere" => [-12, "atmosphere"], "picocalorie" => [-12, "calorie"], "picocandela" => [-12, "candela"], "picocelsius" => [-12, "celsius"], "picocentigrade" => [-12, "centigrade"], "picocentury" => [-12, "century"], "picochain" => [-12, "chain"], "picocommon_year" => [-12, "common_year"], "picocoulomb" => [-12, "coulomb"], "picoday" => [-12, "day"], "picodegK" => [-12, "degK"], "picodeg_K" => [-12, "deg_K"], "picodegree" => [-12, "degree"], "picodegreeK" => [-12, "degreeK"], "picodyne" => [-12, "dyne"], "picoerg" => [-12, "erg"], "picofahrenheit" => [-12, "fahrenheit"], "picofarad" => [-12, "farad"], "picofermi" => [-12, "fermi"], "picogal" => [-12, "gal"], "picogauss" => [-12, "gauss"], "picogram" => [-12, "gram"], "picohectare" => [-12, "hectare"], "picohertz" => [-12, "hertz"], "picohour" => [-12, "hour"], "picoinch" => [-12, "inch"], "picojoule" => [-12, "joule"], "picokelvin" => [-12, "kelvin"], "picokilogram" => [-12, "kilogram"], "picoknot" => [-12, "knot"], "picolitre" => [-12, "litre"], "picometer" => [-12, "meter"], "picometre" => [-12, "metre"], "picomicron" => [-12, "micron"], "picomile" => [-12, "mile"], "picomillibar" => [-12, "millibar"], "picominute" => [-12, "minute"], "picominute_angle" => [-12, "minute_angle"], "picomole" => [-12, "mole"], "picomonth" => [-12, "month"], "piconewton" => [-12, "newton"], "picoounce" => [-12, "ounce"], "picoparsec" => [-12, "parsec"], "picopascal" => [-12, "pascal"], "picopentad" => [-12, "pentad"], "picopercent" => [-12, "percent"], "picopoise" => [-12, "poise"], "picopound" => [-12, "pound"], "picoradian" => [-12, "radian"], "picosecond" => [-12, "second"], "picosecond_angle" => [-12, "second_angle"], "picosteradian" => [-12, "steradian"], "picostokes" => [-12, "stokes"], "picotesla" => [-12, "tesla"], "picoton" => [-12, "ton"], "picotonne" => [-12, "tonne"], "picotorr" => [-12, "torr"], "picovolt" => [-12, "volt"], "picowatt" => [-12, "watt"], "picoweber" => [-12, "weber"], "picoyard" => [-12, "yard"], "picoyd" => [-12, "yd"], "picoyear" => [-12, "year"], "pin" => [-12, "in"], "pkgf" => [-12, "kgf"], "pkph" => [-12, "kph"], "plb" => [-12, "lb"], "plm" => [-12, "lm"], "plx" => [-12, "lx"], "ply" => [-12, "ly"], "pm" => [-12, "m"], "pmb" => [-12, "mb"], "pmercury" => [-12, "mercury"], "pmgal" => [-12, "mgal"], "pmin" => [-12, "min"], "pmol" => [-12, "mol"], "pmon" => [-12, "mon"], "pmph" => [-12, "mph"], "pohm" => [-12, "ohm"], "poises" => [0, "poise"], "pounds" => [0, "pound"], "poz" => [-12, "oz"], "ppc" => [-12, "pc"], "ppsi" => [-12, "psi"], "prad" => [-12, "rad"], "ps" => [-12, "s"], "psr" => [-12, "sr"], "pt" => [-12, "t"], "pyr" => [-12, "yr"], "radians" => [0, "radian"], "seconds" => [0, "second"], "seconds_angle" => [0, "second_angle"], "steradians" => [0, "steradian"], "stokeses" => [0, "stokes"], "telaCelsius" => [12, "Celsius"], "telaFahrenheit" => [12, "Fahrenheit"], "telaJulian_year" => [12, "Julian_year"], "telaPascal" => [12, "Pascal"], "telaacre" => [12, "acre"], "telaampere" => [12, "ampere"], "telaangstrom" => [12, "angstrom"], "telaangular_degree" => [12, "angular_degree"], "telaangular_minute" => [12, "angular_minute"], "telaangular_second" => [12, "angular_second"], "telaare" => [12, "are"], "telaatmosphere" => [12, "atmosphere"], "telacalorie" => [12, "calorie"], "telacandela" => [12, "candela"], "telacelsius" => [12, "celsius"], "telacentigrade" => [12, "centigrade"], "telacentury" => [12, "century"], "telachain" => [12, "chain"], "telacommon_year" => [12, "common_year"], "telacoulomb" => [12, "coulomb"], "teladay" => [12, "day"], "teladegK" => [12, "degK"], "teladeg_K" => [12, "deg_K"], "teladegree" => [12, "degree"], "teladegreeK" => [12, "degreeK"], "teladyne" => [12, "dyne"], "telaerg" => [12, "erg"], "telafahrenheit" => [12, "fahrenheit"], "telafarad" => [12, "farad"], "telafermi" => [12, "fermi"], "telagal" => [12, "gal"], "telagauss" => [12, "gauss"], "telagram" => [12, "gram"], "telahectare" => [12, "hectare"], "telahertz" => [12, "hertz"], "telahour" => [12, "hour"], "telainch" => [12, "inch"], "telajoule" => [12, "joule"], "telakelvin" => [12, "kelvin"], "telakilogram" => [12, "kilogram"], "telaknot" => [12, "knot"], "telalitre" => [12, "litre"], "telameter" => [12, "meter"], "telametre" => [12, "metre"], "telamicron" => [12, "micron"], "telamile" => [12, "mile"], "telamillibar" => [12, "millibar"], "telaminute" => [12, "minute"], "telaminute_angle" => [12, "minute_angle"], "telamole" => [12, "mole"], "telamonth" => [12, "month"], "telanewton" => [12, "newton"], "telaounce" => [12, "ounce"], "telaparsec" => [12, "parsec"], "telapascal" => [12, "pascal"], "telapentad" => [12, "pentad"], "telapercent" => [12, "percent"], "telapoise" => [12, "poise"], "telapound" => [12, "pound"], "telaradian" => [12, "radian"], "telasecond" => [12, "second"], "telasecond_angle" => [12, "second_angle"], "telasteradian" => [12, "steradian"], "telastokes" => [12, "stokes"], "telatesla" => [12, "tesla"], "telaton" => [12, "ton"], "telatonne" => [12, "tonne"], "telatorr" => [12, "torr"], "telavolt" => [12, "volt"], "telawatt" => [12, "watt"], "telaweber" => [12, "weber"], "telayard" => [12, "yard"], "telayd" => [12, "yd"], "telayear" => [12, "year"], "teslas" => [0, "tesla"], "tonnes" => [0, "tonne"], "tons" => [0, "ton"], "torrs" => [0, "torr"], "uA" => [-6, "A"], "uAu" => [-6, "Au"], "uBq" => [-6, "Bq"], "uC" => [-6, "C"], "uF" => [-6, "F"], "uG" => [-6, "G"], "uGal" => [-6, "Gal"], "uGy" => [-6, "Gy"], "uH" => [-6, "H"], "uHg" => [-6, "Hg"], "uHz" => [-6, "Hz"], "uJ" => [-6, "J"], "uK" => [-6, "K"], "uL" => [-6, "L"], "uN" => [-6, "N"], "uP" => [-6, "P"], "uPa" => [-6, "Pa"], "uS" => [-6, "S"], "uSt" => [-6, "St"], "uSv" => [-6, "Sv"], "uT" => [-6, "T"], "uV" => [-6, "V"], "uW" => [-6, "W"], "uWb" => [-6, "Wb"], "ua" => [-6, "a"], "uac" => [-6, "ac"], "uatm" => [-6, "atm"], "ubar" => [-6, "bar"], "ucal" => [-6, "cal"], "ucd" => [-6, "cd"], "uconventional_mercury" => [-6, "conventional_mercury"], "udegC" => [-6, "degC"], "udegF" => [-6, "degF"], "udeg_C" => [-6, "deg_C"], "udeg_F" => [-6, "deg_F"], "udegreeC" => [-6, "degreeC"], "udegreeF" => [-6, "degreeF"], "udegree_C" => [-6, "degree_C"], "udegree_E" => [-6, "degree_E"], "udegree_F" => [-6, "degree_F"], "udegree_N" => [-6, "degree_N"], "udegree_R" => [-6, "degree_R"], "udegree_S" => [-6, "degree_S"], "udegree_W" => [-6, "degree_W"], "udegree_c" => [-6, "degree_c"], "udegree_east" => [-6, "degree_east"], "udegree_f" => [-6, "degree_f"], "udegree_north" => [-6, "degree_north"], "udegree_south" => [-6, "degree_south"], "udegree_west" => [-6, "degree_west"], "udegrees_east" => [-6, "degrees_east"], "udegrees_north" => [-6, "degrees_north"], "udegrees_south" => [-6, "degrees_south"], "udegrees_west" => [-6, "degrees_west"], "udyn" => [-6, "dyn"], "uerg" => [-6, "erg"], "uforce" => [-6, "force"], "ug" => [-6, "g"], "ugravity" => [-6, "gravity"], "uh" => [-6, "h"], "uhg" => [-6, "hg"], "uhr" => [-6, "hr"], "uin" => [-6, "in"], "ukgf" => [-6, "kgf"], "ukph" => [-6, "kph"], "ulb" => [-6, "lb"], "ulm" => [-6, "lm"], "ulx" => [-6, "lx"], "uly" => [-6, "ly"], "um" => [-6, "m"], "umb" => [-6, "mb"], "umercury" => [-6, "mercury"], "umgal" => [-6, "mgal"], "umin" => [-6, "min"], "umol" => [-6, "mol"], "umon" => [-6, "mon"], "umph" => [-6, "mph"], "uohm" => [-6, "ohm"], "uoz" => [-6, "oz"], "upc" => [-6, "pc"], "upsi" => [-6, "psi"], "urad" => [-6, "rad"], "us" => [-6, "s"], "usr" => [-6, "sr"], "ut" => [-6, "t"], "uyr" => [-6, "yr"], "volts" => [0, "volt"], "watts" => [0, "watt"], "webers" => [0, "weber"], "yards" => [0, "yard"], "yds" => [0, "yd"], "years" => [0, "year"], } UPLURALS = { "Celsiuses" => "Celsius", "Fahrenheits" => "Fahrenheit", "Julians_year" => "Julian_year", "Pascals" => "Pascal", "acres" => "acre", "amperes" => "ampere", "angstroms" => "angstrom", "angulars_degree" => "angular_degree", "angulars_minute" => "angular_minute", "angulars_second" => "angular_second", "ares" => "are", "atmospheres" => "atmosphere", "calories" => "calorie", "candelas" => "candela", "celsiuses" => "celsius", "centigrades" => "centigrade", "centuries" => "century", "chains" => "chain", "commons_year" => "common_year", "coulombs" => "coulomb", "days" => "day", "degKs" => "degK", "degreeKs" => "degreeK", "degrees" => "degree", "degs_K" => "deg_K", "dynes" => "dyne", "ergs" => "erg", "fahrenheits" => "fahrenheit", "farads" => "farad", "fermis" => "fermi", "gals" => "gal", "gausses" => "gauss", "grams" => "gram", "hectares" => "hectare", "hertzes" => "hertz", "hours" => "hour", "inchs" => "inch", "joules" => "joule", "kelvins" => "kelvin", "kilograms" => "kilogram", "knots" => "knot", "litres" => "litre", "meters" => "meter", "metres" => "metre", "microns" => "micron", "miles" => "mile", "millibars" => "millibar", "minutes" => "minute", "minutes_angle" => "minute_angle", "moles" => "mole", "months" => "month", "newtons" => "newton", "ounces" => "ounce", "parsecs" => "parsec", "pascals" => "pascal", "pentads" => "pentad", "percents" => "percent", "poises" => "poise", "pounds" => "pound", "radians" => "radian", "seconds" => "second", "seconds_angle" => "second_angle", "steradians" => "steradian", "stokeses" => "stokes", "teslas" => "tesla", "tonnes" => "tonne", "tons" => "ton", "torrs" => "torr", "volts" => "volt", "watts" => "watt", "webers" => "weber", "yards" => "yard", "yds" => "yd", "years" => "year", } end numru-units-1.9/src/pownode.rb0000644000175000017500000000320210105450767016762 0ustar horinouthorinoutclass PowNode < ContainerNode include BinaryNode def initialize(lhs, rhs) @lhs, @rhs = lhs, rhs raise TypeError unless NumberNode === @rhs end def to_s lhs = @lhs.to_s case lhs when /\d$/, /[\d\.]/ lhs = "(#{lhs})" end rhs = @rhs.to_s if rhs == '1' lhs else rhs = "^(#{rhs})" if (/\./ =~ rhs) lhs + rhs end end attr_reader :lhs, :rhs alias :power :rhs def pow_eval(other) case other when NumberNode PowNode.new(@lhs, @rhs.mul_eval(other)) else super(other) end end def flatten2 x = @lhs.flatten2 case x when NumberNode a = @lhs.pow_eval(@rhs) when TerminalNode a = self when PowNode a = PowNode.new(x.lhs, x.rhs.mul_eval(@rhs)) when MulNode, MultiNode a = MultiNode.new() for gc in x a.append(gc.pow_eval(@rhs)) end else raise "internal error" end return a end def name case @lhs when NumberNode, NameNode @lhs.name else raise "internal error" end end def value case @lhs when NumberNode Units::pow_f(@lhs.value, @rhs.value) else raise(format('%s#value: internal error', self.class.to_s)) end end def mul_eval(another) raise "internal error (#{name}, #{another.name})" if name != another.name case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value) * another.value) else self.class.new(@lhs, @rhs.add_eval(another.power)) end end def sort case @lhs when NumberNode NumberNode.new(Units::pow_f(@lhs.value, @rhs.value)) else self end end def factor Units::pow_f(@lhs.factor, @rhs.value) end end numru-units-1.9/install.rb0000644000175000017500000000303012454711574016172 0ustar horinouthorinoutrequire 'rbconfig' require 'find' include RbConfig require 'fileutils' default_destdir = CONFIG["sitelibdir"] def install_rb(srcdir, destdir) libdir = "lib" libdir = File.join(srcdir, libdir) if srcdir path = [] dir = [] Find.find(libdir) do |f| next unless FileTest.file?(f) next if (f = f[libdir.length+1..-1]) == nil next if (/CVS$/ =~ File.dirname(f)) path.push f dir |= [File.dirname(f)] end for f in dir next if f == "." next if f == "CVS" FileUtils.makedirs(File.join(destdir, f)) end for f in path next if (/\~$/ =~ f) next if (/^\./ =~ File.basename(f)) FileUtils.install(File.join("lib", f), File.join(destdir, f), {:mode => 0644, :verbose => true}) end end def ARGV.switch return nil if self.empty? arg = self.shift return nil if arg == '--' if arg =~ /^-(.)(.*)/ return arg if $1 == '-' raise 'unknown switch "-"' if $2.index('-') self.unshift "-#{$2}" if $2.size > 0 "-#{$1}" else self.unshift arg nil end end def ARGV.req_arg self.shift || raise('missing argument') end destdir = default_destdir begin while switch = ARGV.switch case switch when '-d', '--destdir' destdir = ARGV.req_arg # when '-u', '--uninstall' # uninstall = true else raise "unknown switch #{switch.dump}" end end rescue STDERR.puts $!.to_s STDERR.puts File.basename($0) + " -d " exit 1 end #if( defined?(uninstall) && uninstall ) # uninstall_rb(nil, destdir) #else install_rb(nil, destdir) #end