numru-units-1.9.0/ 0000755 0001750 0001750 00000000000 13025004163 013655 5 ustar uwabami uwabami numru-units-1.9.0/Rakefile 0000644 0001750 0001750 00000000035 13025004162 015317 0 ustar uwabami uwabami require "bundler/gem_tasks"
numru-units-1.9.0/Gemfile 0000644 0001750 0001750 00000000140 13025004162 015142 0 ustar uwabami uwabami source 'https://rubygems.org'
# Specify your gem's dependencies in numru-units.gemspec
gemspec
numru-units-1.9.0/doc/ 0000755 0001750 0001750 00000000000 13025004162 014421 5 ustar uwabami uwabami numru-units-1.9.0/doc/units.html 0000644 0001750 0001750 00000022043 13025004162 016452 0 ustar uwabami uwabami
units.rd
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.
Move to the top directly of this library (where you find
the file install.rb). Then, type in the following:
% ruby install.rb
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
In what follows, the prefix NumRu:: is omitted for conciseness.
See Usage Examples on this issue.
-
Constructor.
ARGUMENTS
- string (String): string expression of the units.
[factor] units; [factor] time units [since ...] (see EXAMPLES below)
RETURN VALUE
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')
-
Same as Units.new
-
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.
-
Returns a string expression of the units.
-
Multiplies self with another units.
Applies reduce4 to format the string expression of the result.
ARGUMENTS
- other [Units]: the other units
RETURN VALUE
-
Divides self with another units.
Applies reduce4 to format the string expression of the result.
ARGUMENTS
- other [Units]: the other units
RETURN VALUE
-
Power.
Applies reduce4 to format the string expression of the result.
ARGUMENTS
- pow [Numeric -- Integer, Rational, or Float]
RETURN VALUE
-
Whether the two units are the same.
('m/s' and 'm.s-1' are the same, for instance.)
-
Same as ==.
-
Whether the two units are compatible (i.e., with the same dimensionality).
('m/s' and '10 m.s-1' are compatible, for instance.)
-
Moderately reduces the string expression of the units (destructive method).
This method preserves string expression of atomic units.
See also reduce5.
RETURN VALUE
EXAMPLE
Untis.new('hour/hour').reduce4.to_s
# => "1"
Units.new('mm/m').reduce4.to_s
# => "mm.m-1"
-
Aggressively reduces the string expression of the units (destructive method).
See also reduce4.
RETURN VALUE
EXAMPLE
Units.new('hour/hour').reduce4.to_s
# => "1"
Units.new('mm/m').reduce5.to_s
# => "0.001"
-
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
EXCEPTIONS
- self and to_units are incompatible.
-
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.
-
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.0/doc/units.rd 0000644 0001750 0001750 00000014075 13025004162 016121 0 ustar uwabami uwabami =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.0/doc/Makefile 0000644 0001750 0001750 00000000206 13025004162 016057 0 ustar uwabami uwabami all: units.html
units.html: units.rd
rd2 units.rd | sed -e 's///' -e 's/<\/dt>/<\/h4><\/dt>/' \
> units.html
numru-units-1.9.0/src/ 0000755 0001750 0001750 00000000000 13025004163 014444 5 ustar uwabami uwabami numru-units-1.9.0/src/makeutab.rb 0000644 0001750 0001750 00000003263 13025004163 016566 0 ustar uwabami uwabami
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.0/src/numbernode.rb 0000644 0001750 0001750 00000001703 13025004163 017130 0 ustar uwabami uwabami 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
numru-units-1.9.0/src/pownode.rb 0000644 0001750 0001750 00000003202 13025004163 016441 0 ustar uwabami uwabami 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
numru-units-1.9.0/src/rules.rb 0000644 0001750 0001750 00000002401 13025004163 016120 0 ustar uwabami uwabami class 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.0/src/timenode.rb 0000644 0001750 0001750 00000005462 13025004163 016604 0 ustar uwabami uwabami 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
numru-units-1.9.0/src/dcunits.txt 0000644 0001750 0001750 00000007572 13025004163 016671 0 ustar uwabami uwabami # 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.0/src/units.rd 0000644 0001750 0001750 00000007455 13025004163 016150 0 ustar uwabami uwabami =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.0/src/shiftnode.rb 0000644 0001750 0001750 00000001516 13025004163 016757 0 ustar uwabami uwabami 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
numru-units-1.9.0/src/lex.rb 0000644 0001750 0001750 00000017765 13025004163 015601 0 ustar uwabami uwabami 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.0/src/test.rb 0000644 0001750 0001750 00000010365 13025004163 015755 0 ustar uwabami uwabami require './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.0/src/version.rb 0000644 0001750 0001750 00000000021 13025004163 016447 0 ustar uwabami uwabami VERSION = "1.9"
numru-units-1.9.0/src/units.racc 0000644 0001750 0001750 00000322647 13025004163 016456 0 ustar uwabami uwabami class 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.0/src/Makefile 0000644 0001750 0001750 00000001442 13025004163 016105 0 ustar uwabami uwabami all: 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.0/src/namenode.rb 0000644 0001750 0001750 00000002460 13025004163 016561 0 ustar uwabami uwabami 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
numru-units-1.9.0/src/utab.rb 0000644 0001750 0001750 00000246317 13025004163 015741 0 ustar uwabami uwabami 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
numru-units-1.9.0/src/mulnode.rb 0000644 0001750 0001750 00000004630 13025004163 016437 0 ustar uwabami uwabami
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.0/src/units.rb 0000644 0001750 0001750 00000346062 13025004163 016146 0 ustar uwabami uwabami #
# 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.0/src/node.rb 0000644 0001750 0001750 00000006104 13025004163 015717 0 ustar uwabami uwabami =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.0/LICENSE.txt 0000644 0001750 0001750 00000003214 13025004162 015477 0 ustar uwabami uwabami NumRu::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.0/README.rdoc 0000644 0001750 0001750 00000014075 13025004162 015471 0 ustar uwabami uwabami =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.0/lib/ 0000755 0001750 0001750 00000000000 13025004162 014422 5 ustar uwabami uwabami numru-units-1.9.0/lib/numru/ 0000755 0001750 0001750 00000000000 13025004162 015570 5 ustar uwabami uwabami numru-units-1.9.0/lib/numru/units.rb 0000644 0001750 0001750 00000000075 13025004162 017261 0 ustar uwabami uwabami require "numru/units/version"
require "numru/units/units.rb"
numru-units-1.9.0/lib/numru/units/ 0000755 0001750 0001750 00000000000 13025004162 016732 5 ustar uwabami uwabami numru-units-1.9.0/lib/numru/units/version.rb 0000644 0001750 0001750 00000000074 13025004162 020745 0 ustar uwabami uwabami module Numru
module Units
VERSION = "1.9.0"
end
end
numru-units-1.9.0/lib/numru/units/units.rb 0000644 0001750 0001750 00000346624 13025004162 020440 0 ustar uwabami uwabami #
# 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.0/install.rb 0000644 0001750 0001750 00000003030 13025004162 015643 0 ustar uwabami uwabami require '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
numru-units-1.9.0/numru-units.gemspec 0000644 0001750 0001750 00000002421 13025004163 017527 0 ustar uwabami uwabami # coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'numru/units/version'
Gem::Specification.new do |spec|
spec.name = "numru-units"
spec.version = Numru::Units::VERSION
spec.authors = ["Eizi Toyoda","Takeshi Horinouchi"]
spec.email = ["eriko@gfd-dennou.org"]
spec.summary = %q{Class to handle units of physical quantities}
spec.description = %q{This is a class to handle units of physical quantities. It covers most functionality of UNIDATA's UDUNITS Library, however, with a more sophisticated handling of string expressions. See the documentation for more infomation.}
spec.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/numru-units/'
spec.licenses = ["Takeshi Horinouchi", "GFD Dennou Club"]
spec.files = `git ls-files -z`.split("\x0")
#spec.extra_rdoc_files = ['./doc/units.rd']
#spec.extra_rdoc_files = spec.files.grep(%r{^(doc)/})
#spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
#spec.add_development_dependency "bundler", "~> 1.7"
#spec.add_development_dependency "rake", "~> 10.0"
end
numru-units-1.9.0/Makefile 0000644 0001750 0001750 00000000302 13025004162 015307 0 ustar uwabami uwabami all:
@(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.0/ChangeLog 0000644 0001750 0001750 00000014531 13025004162 015432 0 ustar uwabami uwabami Tue 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