numru-units 1.7.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b9aa6ff8758cccbbc3bac5299c946c1cafd1de45
4
+ data.tar.gz: dffe312aefd1531fc4e2a4a355b1e1c572b35d07
5
+ SHA512:
6
+ metadata.gz: e065c34277db2b4a6913a45b9107503e4be0e4777945e264fe384e65c7ce60f42ebad84794dc0b9af44c06ec7ac30f1db88db1966aa86c95bedc52e5f0a8b0d8
7
+ data.tar.gz: 2bac48e91ab581506aa81e8b90413d0b676595cd7442acc020596b779e5e2e259e510e15c9a32703df5866d1d33bcf8957fb24cdf15a9902b0efe5f30eab0c86
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ *.bundle
10
+ *.so
11
+ *.o
12
+ *.a
13
+ mkmf.log
data/ChangeLog CHANGED
@@ -1,3 +1,34 @@
1
+ Tue Feb 17 2015 T Horinouchi
2
+ * version 1.9 released ((cvs) tag: numru-units-1_9)
3
+ Fri Jan 23 2015 T Horinouchi
4
+ * dcunits.txt
5
+ * added a description as comments at the beginning of the file
6
+ * added units: cd, candela
7
+ * changed the mode of the following units
8
+ * S to N: kg, %, permil, d
9
+ * S to P: percent
10
+ * added a meteorological unit gpm (mode: N, definition: m).
11
+ * LICENSE.txt: updated (years)
12
+ * src/version.rb: added
13
+ * src/Makefile: updated to use version.rb
14
+ Tue Jan 20 2015 T Horinouchi
15
+ * src/lex.rb: Regexp changed: UTC --> (UTC|Z)
16
+ Mon Jan 12 2015 T Horinouchi
17
+ * version 1.8 released ((cvs) tag: numru-units-1_8)
18
+ Mon Jan 12 2015 T Horinouchi <-- S Nishizawa [dennou-ruby:003805] and
19
+ T Koshiro [dennou-ruby:003806] (files to patch was corrected, though)
20
+ * src/rules.rb: Update to support ruby 2.1 or later
21
+ (l.10: origin_exp { yyaccept; } --> origin_exp { val[0] })
22
+ and a cleaner treatment of the NumRu:: wrapper
23
+ (l.1: class Units --> class NumRu::Units).
24
+ * src/test.rb: updated (handling of "" and numeric expressions:
25
+ float --> rational)
26
+ * src/Makefile: updated in response to the change in rule.rb
27
+ * install.rb: updated (ruby 1.6 support abondoned)
28
+ * src/units.racc, src/units.rb, lib/numru/units.rb: regenreated
29
+
30
+ Fri Mar 14 2014 T Koshiro < M Nakano [dennou-ruby:003646]
31
+ * install.rb: for Ruby 2.x
1
32
  Thu Aug 4 2011 T Horinouchi
2
33
  * version 1.7 released ((cvs) tag: numru-units-1_7)
3
34
  * LICENSE.txt: added (BSD 2-clause)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in numru-units.gemspec
4
+ gemspec
@@ -1,7 +1,7 @@
1
- NumRu::Units is copyrighted free software by Takeshi Horinouchi and
1
+ NumRu::Units is copyrighted free software by
2
2
  GFD Dennou Club (http://www.gfd-dennou.org/).
3
3
 
4
- Copyright 2011 (C) Takeshi Horinouchi and GFD Dennou Club
4
+ Copyright 2004-2015 (C) GFD Dennou Club
5
5
  (http://www.gfd-dennou.org/) All rights reserved.
6
6
 
7
7
  Redistribution and use in source and binary forms, with or without
@@ -0,0 +1,232 @@
1
+ =begin
2
+ =class NumRu::Units
3
+
4
+ * ((<Overview>))
5
+ * ((<Installation>))
6
+ * ((<Usage Examples>))
7
+ * ((<Class Methods>))
8
+ * ((<Instance Methods>))
9
+ * ((<Supported units|URL:http://ruby.gfd-dennou.org/products/numru-units/doc/dcunits.txt>)) (Plural form allowed if the second field is "P")
10
+
11
+ ==Overview
12
+
13
+ A class of units of physical quantities.
14
+
15
+ This class covers most functionality of UNIDATA's
16
+ ((<UDUNITS Library|URL:http://www.unidata.ucar.edu/packages/udunits/>)),
17
+ however, with a more sophisticated handling of string expressions.
18
+
19
+ UDUNITS always decomposes units into the four base units and discards
20
+ the original string expressions. Therefore, 'hPa' always becomes
21
+ '100 kg.m-1.sec-1', and 'day' always becomes '86400 sec'. On the other
22
+ hand, this library tries to keep the original expressions as much as
23
+ possible by default, while allowing partial to complete decompositions
24
+ if needed.
25
+
26
+ ==Installation
27
+
28
+ Move to the top directly of this library (where you find
29
+ the file install.rb). Then, type in the following:
30
+
31
+ % ruby install.rb
32
+
33
+ ==Usage Examples
34
+
35
+ Here is an example using the "irb" interactive shell ("(('%'))" is the
36
+ command prompt, and "(('>>'))" is the irb prompt -- Type in those after it
37
+ to test. "(('=>'))" shows the result.):
38
+
39
+ % irb --simple-prompt
40
+ >> require "numru/units"
41
+ => true
42
+ >> un1 = NumRu::Units.new('kg.m2/s')
43
+ => Units{kg.m2/s}
44
+ >> un2 = NumRu::Units.new('g.m')
45
+ => Units{g.m}
46
+ >> un3 = un1 / un2
47
+ => Units[Multi[Pow[Name[g], Number[-1]], Name[kg], Pow[Name[m], Number[1]], Pow[Name[s], Number[-1]]]]
48
+ >> un1.to_s
49
+ => "kg.m2/s"
50
+ >> un2.to_s
51
+ => "g.m"
52
+ >> un3.to_s
53
+ => "g-1 kg.m1 s-1"
54
+ >> un3.reduce5
55
+ => Units[Multi[Number[1000], Pow[Name[m], Number[1]], Pow[Name[s], Number[-1]]]]
56
+ >> un3.to_s
57
+ => "1000 m1 s-1"
58
+
59
+ Note the difference between the results of (('un3.to_s'))
60
+ before and after (('un3.reduce5')),
61
+ where the former retains the literal expression
62
+ of each atomic unit, while the latter does the maximum reduction.
63
+ You can change the default behavior by using the class method
64
+ (('reduce_level=')):
65
+
66
+ >> NumRu::Units.reduce_level = 5
67
+ => :reduce5
68
+ >> un3.to_s
69
+ => "1000 m1 s-1"
70
+
71
+ Note that you can eliminate the prefix (('NumRu::')) by "including"
72
+ it:
73
+
74
+ >> require "numru/units"
75
+ => true
76
+ >> include NumRu
77
+ => Object
78
+ >> un1 = Units.new('kg.m2/s')
79
+ => Units{kg.m2/s}
80
+ >> Units.reduce_level = 5
81
+ => :reduce5
82
+
83
+ ==Class Methods
84
+
85
+ In what follows, the prefix (('NumRu::')) is omitted for conciseness.
86
+ See ((<Usage Examples>)) on this issue.
87
+
88
+ ---Units.new(string)
89
+ Constructor.
90
+
91
+ ARGUMENTS
92
+ * string (String): string expression of the units.
93
+ [factor] units; [factor] time units [since ...] (see EXAMPLES below)
94
+
95
+ RETURN VALUE
96
+ * a Units
97
+
98
+ EXAMPLE
99
+
100
+ units = Units.new('kg.m2/s')
101
+ units = Units.new('100 m')
102
+ units = Units.new('g/kg')
103
+ units = Units.new('hour since 2003-10-01 00:00:0 +0:00')
104
+ units = Units.new('hour since 2003-10-01') # same as above
105
+ units = Units.new('minutes since 2003-10-01 03:15:22.5 -6:00')
106
+
107
+ ---Units[string]
108
+
109
+ Same as ((<Units.new>))
110
+
111
+ ---Units.reduce_level=(n)
112
+ Set the reduction level before ((<to_s>)) is applied.
113
+
114
+ ARGUMENTS
115
+ * n (Integer): the reduction level. The default value is 4.
116
+ Use 5 if you want a full reduction. Levels lower than 4
117
+ will not be needed.
118
+
119
+ ==Instance Methods
120
+
121
+ ---to_s
122
+ Returns a string expression of the units.
123
+
124
+ ---*(other)
125
+ Multiplies self with another units.
126
+ Applies ((<reduce4>)) to format the string expression of the result.
127
+
128
+ ARGUMENTS
129
+ * other [Units]: the other units
130
+
131
+ RETURN VALUE
132
+ * a Units
133
+
134
+ ---/(other)
135
+ Divides self with another units.
136
+ Applies ((<reduce4>)) to format the string expression of the result.
137
+
138
+ ARGUMENTS
139
+ * other [Units]: the other units
140
+
141
+ RETURN VALUE
142
+ * a Units
143
+
144
+ ---**(pow)
145
+ Power.
146
+ Applies ((<reduce4>)) to format the string expression of the result.
147
+
148
+ ARGUMENTS
149
+ * pow [Numeric -- Integer, Rational, or Float]
150
+
151
+ RETURN VALUE
152
+ * a Units
153
+
154
+ ---==(other)
155
+ Whether the two units are the same.
156
+ ('m/s' and 'm.s-1' are the same, for instance.)
157
+
158
+ ---===(other)
159
+ Same as ((<==>)).
160
+
161
+ ---=~(other)
162
+ Whether the two units are compatible (i.e., with the same dimensionality).
163
+ ('m/s' and '10 m.s-1' are compatible, for instance.)
164
+
165
+ ---reduce4
166
+ Moderately reduces the string expression of the units (destructive method).
167
+ This method preserves string expression of atomic units.
168
+ See also ((<reduce5>)).
169
+
170
+ RETURN VALUE
171
+ * self
172
+
173
+ EXAMPLE
174
+ Untis.new('hour/hour').reduce4.to_s
175
+ # => "1"
176
+ Units.new('mm/m').reduce4.to_s
177
+ # => "mm.m-1"
178
+
179
+ ---reduce5
180
+ Aggressively reduces the string expression of the units (destructive method).
181
+ See also ((<reduce4>)).
182
+
183
+ RETURN VALUE
184
+ * self
185
+
186
+ EXAMPLE
187
+ Units.new('hour/hour').reduce4.to_s
188
+ # => "1"
189
+ Units.new('mm/m').reduce5.to_s
190
+ # => "0.001"
191
+
192
+ ---convert(numeric, to_units)
193
+ Converts a numeric of the current units (=self) to ((|to_units|)).
194
+
195
+ ARGUMENTS
196
+ * numeric [Numeric]: the numeric to convert
197
+ * to_units [Units]: the units converted into
198
+
199
+ RETURN VALUE
200
+ * a Numeric
201
+
202
+ EXCEPTIONS
203
+ * ((|self|)) and ((|to_units|)) are incompatible.
204
+
205
+ ---convert2(val, to_units)
206
+ Like ((<convert>)), but (1) accpets any Numeric-like objects, and (2)
207
+ does not raise an exception even if the two units are incompatible --
208
+ in this case, simply returns ((|val|)) (warned).
209
+
210
+ ARGUMENTS
211
+ * val [a Numeric-like class, for which (('*')) and (('+')) are defined]:
212
+ the value to convert
213
+ * to_units [Units]: the units converted into
214
+
215
+ RETURN VALUE
216
+ * an object with the same class as ((|val|)).
217
+
218
+ ---factor_and_offset(to_units)
219
+ Returns the factor and offset to convert from ((|self|)) to ((|to_units|)).
220
+ The conversion is done as (('scale_factor * operand + add_offset')).
221
+
222
+ ARGUMENTS
223
+ * to_units [Units]: the units to be converted into
224
+
225
+ RETURN VALUE
226
+ * [ scale_factor, add_offset ] (a 2-element Array, where both are Numeric)
227
+
228
+ EXAMPLE
229
+ scale_factor, add_offset = from_units.factor_and_offset(to_units)
230
+ to = scale_factor * from + add_offset
231
+
232
+ =end
data/Rakefile CHANGED
@@ -1,39 +1,2 @@
1
- require 'rake/gempackagetask'
1
+ require "bundler/gem_tasks"
2
2
 
3
- NAME = 'numru-units'
4
- VER = '1.7.0'
5
-
6
- PKG_FILES = FileList[
7
- '**',
8
- 'lib/**/*',
9
- 'doc/**/*',
10
- 'src/**/*'
11
- ]
12
-
13
- spec = Gem::Specification.new do |s|
14
- s.name = NAME
15
- s.version = VER
16
- s.authors = ["Eizi Toyoda","Takeshi Horinouchi"]
17
- s.email = ['eriko@gfd-dennou.org']
18
- s.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/numru-units/'
19
- s.licenses = ["Takeshi Horinouchi", "GFD Dennou Club"]
20
- s.platform = Gem::Platform::RUBY
21
- s.summary = %q{Class to handle units of physical quantities}
22
- s.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.}
23
-
24
- s.files = PKG_FILES.to_a
25
- s.require_paths = ['lib']
26
- #s.test_files = Dir.glob("test/*")
27
- #s.has_rdoc = true
28
- s.required_ruby_version = Gem::Requirement.new(">= 1.6")
29
- #s.add_runtime_dependency(%q<narray>, [">= 0"])
30
- #s.add_runtime_dependency(%q<narray_miss>, [">= 0"])
31
- #s.extra_rdoc_files = ['README']
32
-
33
- #s.extensions << "install.rb"
34
- end
35
-
36
- Rake::GemPackageTask.new(spec) do |pkg|
37
- pkg.gem_spec = spec
38
- pkg.need_tar = true
39
- end
data/install.rb CHANGED
@@ -1,27 +1,8 @@
1
1
  require 'rbconfig'
2
2
  require 'find'
3
- include Config
3
+ include RbConfig
4
4
 
5
- if CONFIG["MINOR"].to_i > 6 then $rb_18 = true else $rb_18 = false end
6
- if $rb_18
7
- require 'fileutils'
8
- else
9
- require 'ftools'
10
- end
11
-
12
- =begin
13
- $version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
14
- $libdir = File.join(CONFIG["libdir"], "ruby", $version)
15
- # $archdir = File.join($libdir, CONFIG["arch"])
16
- $site_libdir = $:.find {|x| x =~ /site_ruby$/}
17
- if !$site_libdir
18
- $site_libdir = File.join($libdir, "site_ruby")
19
- elsif Regexp.compile($site_libdir) !~ Regexp.quote($version)
20
- $site_libdir = File.join($site_libdir, $version)
21
- end
22
-
23
- default_destdir = $site_libdir
24
- =end
5
+ require 'fileutils'
25
6
 
26
7
  default_destdir = CONFIG["sitelibdir"]
27
8
 
@@ -40,20 +21,12 @@ def install_rb(srcdir, destdir)
40
21
  for f in dir
41
22
  next if f == "."
42
23
  next if f == "CVS"
43
- if $rb_18
44
- FileUtils.makedirs(File.join(destdir, f))
45
- else
46
- File::makedirs(File.join(destdir, f))
47
- end
24
+ FileUtils.makedirs(File.join(destdir, f))
48
25
  end
49
26
  for f in path
50
27
  next if (/\~$/ =~ f)
51
28
  next if (/^\./ =~ File.basename(f))
52
- if $rb_18
53
- FileUtils.install(File.join("lib", f), File.join(destdir, f), {:mode => 0644, :verbose => true})
54
- else
55
- File::install(File.join("lib", f), File.join(destdir, f), 0644, true)
56
- end
29
+ FileUtils.install(File.join("lib", f), File.join(destdir, f), {:mode => 0644, :verbose => true})
57
30
  end
58
31
  end
59
32
 
@@ -1,3505 +1,2 @@
1
- #
2
- # DO NOT MODIFY!!!!
3
- # This file is automatically generated by racc 1.4.5
4
- # from racc grammer file "units.racc".
5
- #
6
- #
7
- # tmp.rb: generated by racc (runtime embedded)
8
- #
9
- ###### racc/parser.rb begin
10
- unless $".index 'racc/parser.rb'
11
- $".push 'racc/parser.rb'
12
-
13
- #
14
- # $Id: units.rb,v 1.19 2011-08-03 09:16:07 horinout Exp $
15
- #
16
- # Copyright (c) 1999-2005 Minero Aoki
17
- #
18
- # This program is free software.
19
- # You can distribute/modify this program under the same terms of ruby.
20
- #
21
- # As a special exception, when this code is copied by Racc
22
- # into a Racc output file, you may use that output file
23
- # without restriction.
24
- #
25
-
26
- unless defined?(NotImplementedError)
27
- NotImplementedError = NotImplementError
28
- end
29
-
30
- module Racc
31
- class ParseError < StandardError; end
32
- end
33
- unless defined?(::ParseError)
34
- ParseError = Racc::ParseError
35
- end
36
-
37
- module Racc
38
-
39
- unless defined?(Racc_No_Extentions)
40
- Racc_No_Extentions = false
41
- end
42
-
43
- class Parser
44
-
45
- Racc_Runtime_Version = '1.4.5'
46
- Racc_Runtime_Revision = '$Revision: 1.19 $'.split[1]
47
-
48
- Racc_Runtime_Core_Version_R = '1.4.5'
49
- Racc_Runtime_Core_Revision_R = '$Revision: 1.19 $'.split[1]
50
- begin
51
- require 'racc/cparse'
52
- # Racc_Runtime_Core_Version_C = (defined in extention)
53
- Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split[2]
54
- unless new.respond_to?(:_racc_do_parse_c, true)
55
- raise LoadError, 'old cparse.so'
56
- end
57
- if Racc_No_Extentions
58
- raise LoadError, 'selecting ruby version of racc runtime core'
59
- end
60
-
61
- Racc_Main_Parsing_Routine = :_racc_do_parse_c
62
- Racc_YY_Parse_Method = :_racc_yyparse_c
63
- Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_C
64
- Racc_Runtime_Core_Revision = Racc_Runtime_Core_Revision_C
65
- Racc_Runtime_Type = 'c'
66
- rescue LoadError
67
- Racc_Main_Parsing_Routine = :_racc_do_parse_rb
68
- Racc_YY_Parse_Method = :_racc_yyparse_rb
69
- Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_R
70
- Racc_Runtime_Core_Revision = Racc_Runtime_Core_Revision_R
71
- Racc_Runtime_Type = 'ruby'
72
- end
73
-
74
- def Parser.racc_runtime_type
75
- Racc_Runtime_Type
76
- end
77
-
78
- private
79
-
80
- def _racc_setup
81
- @yydebug = false unless self.class::Racc_debug_parser
82
- @yydebug = false unless defined?(@yydebug)
83
- if @yydebug
84
- @racc_debug_out = $stderr unless defined?(@racc_debug_out)
85
- @racc_debug_out ||= $stderr
86
- end
87
- arg = self.class::Racc_arg
88
- arg[13] = true if arg.size < 14
89
- arg
90
- end
91
-
92
- def _racc_init_sysvars
93
- @racc_state = [0]
94
- @racc_tstack = []
95
- @racc_vstack = []
96
-
97
- @racc_t = nil
98
- @racc_val = nil
99
-
100
- @racc_read_next = true
101
-
102
- @racc_user_yyerror = false
103
- @racc_error_status = 0
104
- end
105
-
106
- ###
107
- ### do_parse
108
- ###
109
-
110
- def do_parse
111
- __send__(Racc_Main_Parsing_Routine, _racc_setup(), false)
112
- end
113
-
114
- def next_token
115
- raise NotImplementedError, "#{self.class}\#next_token is not defined"
116
- end
117
-
118
- def _racc_do_parse_rb(arg, in_debug)
119
- action_table, action_check, action_default, action_pointer,
120
- goto_table, goto_check, goto_default, goto_pointer,
121
- nt_base, reduce_table, token_table, shift_n,
122
- reduce_n, use_result, * = arg
123
-
124
- _racc_init_sysvars
125
- tok = act = i = nil
126
- nerr = 0
127
-
128
- catch(:racc_end_parse) {
129
- while true
130
- if i = action_pointer[@racc_state[-1]]
131
- if @racc_read_next
132
- if @racc_t != 0 # not EOF
133
- tok, @racc_val = next_token()
134
- unless tok # EOF
135
- @racc_t = 0
136
- else
137
- @racc_t = (token_table[tok] or 1) # error token
138
- end
139
- racc_read_token(@racc_t, tok, @racc_val) if @yydebug
140
- @racc_read_next = false
141
- end
142
- end
143
- i += @racc_t
144
- unless i >= 0 and
145
- act = action_table[i] and
146
- action_check[i] == @racc_state[-1]
147
- act = action_default[@racc_state[-1]]
148
- end
149
- else
150
- act = action_default[@racc_state[-1]]
151
- end
152
- while act = _racc_evalact(act, arg)
153
- ;
154
- end
155
- end
156
- }
157
- end
158
-
159
- ###
160
- ### yyparse
161
- ###
162
-
163
- def yyparse(recv, mid)
164
- __send__(Racc_YY_Parse_Method, recv, mid, _racc_setup(), true)
165
- end
166
-
167
- def _racc_yyparse_rb(recv, mid, arg, c_debug)
168
- action_table, action_check, action_default, action_pointer,
169
- goto_table, goto_check, goto_default, goto_pointer,
170
- nt_base, reduce_table, token_table, shift_n,
171
- reduce_n, use_result, * = arg
172
-
173
- _racc_init_sysvars
174
- tok = nil
175
- act = nil
176
- i = nil
177
- nerr = 0
178
-
179
- catch(:racc_end_parse) {
180
- until i = action_pointer[@racc_state[-1]]
181
- while act = _racc_evalact(action_default[@racc_state[-1]], arg)
182
- ;
183
- end
184
- end
185
- recv.__send__(mid) do |tok, val|
186
- unless tok
187
- @racc_t = 0
188
- else
189
- @racc_t = (token_table[tok] or 1) # error token
190
- end
191
- @racc_val = val
192
- @racc_read_next = false
193
-
194
- i += @racc_t
195
- unless i >= 0 and
196
- act = action_table[i] and
197
- action_check[i] == @racc_state[-1]
198
- act = action_default[@racc_state[-1]]
199
- end
200
- while act = _racc_evalact(act, arg)
201
- ;
202
- end
203
-
204
- while not (i = action_pointer[@racc_state[-1]]) or
205
- not @racc_read_next or
206
- @racc_t == 0 # $
207
- unless i and i += @racc_t and
208
- i >= 0 and
209
- act = action_table[i] and
210
- action_check[i] == @racc_state[-1]
211
- act = action_default[@racc_state[-1]]
212
- end
213
- while act = _racc_evalact(act, arg)
214
- ;
215
- end
216
- end
217
- end
218
- }
219
- end
220
-
221
- ###
222
- ### common
223
- ###
224
-
225
- def _racc_evalact(act, arg)
226
- action_table, action_check, action_default, action_pointer,
227
- goto_table, goto_check, goto_default, goto_pointer,
228
- nt_base, reduce_table, token_table, shift_n,
229
- reduce_n, use_result, * = arg
230
- nerr = 0 # tmp
231
-
232
- if act > 0 and act < shift_n
233
- #
234
- # shift
235
- #
236
- if @racc_error_status > 0
237
- @racc_error_status -= 1 unless @racc_t == 1 # error token
238
- end
239
- @racc_vstack.push @racc_val
240
- @racc_state.push act
241
- @racc_read_next = true
242
- if @yydebug
243
- @racc_tstack.push @racc_t
244
- racc_shift @racc_t, @racc_tstack, @racc_vstack
245
- end
246
-
247
- elsif act < 0 and act > -reduce_n
248
- #
249
- # reduce
250
- #
251
- code = catch(:racc_jump) {
252
- @racc_state.push _racc_do_reduce(arg, act)
253
- false
254
- }
255
- if code
256
- case code
257
- when 1 # yyerror
258
- @racc_user_yyerror = true # user_yyerror
259
- return -reduce_n
260
- when 2 # yyaccept
261
- return shift_n
262
- else
263
- raise '[Racc Bug] unknown jump code'
264
- end
265
- end
266
-
267
- elsif act == shift_n
268
- #
269
- # accept
270
- #
271
- racc_accept if @yydebug
272
- throw :racc_end_parse, @racc_vstack[0]
273
-
274
- elsif act == -reduce_n
275
- #
276
- # error
277
- #
278
- case @racc_error_status
279
- when 0
280
- unless arg[21] # user_yyerror
281
- nerr += 1
282
- on_error @racc_t, @racc_val, @racc_vstack
283
- end
284
- when 3
285
- if @racc_t == 0 # is $
286
- throw :racc_end_parse, nil
287
- end
288
- @racc_read_next = true
289
- end
290
- @racc_user_yyerror = false
291
- @racc_error_status = 3
292
- while true
293
- if i = action_pointer[@racc_state[-1]]
294
- i += 1 # error token
295
- if i >= 0 and
296
- (act = action_table[i]) and
297
- action_check[i] == @racc_state[-1]
298
- break
299
- end
300
- end
301
- throw :racc_end_parse, nil if @racc_state.size <= 1
302
- @racc_state.pop
303
- @racc_vstack.pop
304
- if @yydebug
305
- @racc_tstack.pop
306
- racc_e_pop @racc_state, @racc_tstack, @racc_vstack
307
- end
308
- end
309
- return act
310
-
311
- else
312
- raise "[Racc Bug] unknown action #{act.inspect}"
313
- end
314
-
315
- racc_next_state(@racc_state[-1], @racc_state) if @yydebug
316
-
317
- nil
318
- end
319
-
320
- def _racc_do_reduce(arg, act)
321
- action_table, action_check, action_default, action_pointer,
322
- goto_table, goto_check, goto_default, goto_pointer,
323
- nt_base, reduce_table, token_table, shift_n,
324
- reduce_n, use_result, * = arg
325
- state = @racc_state
326
- vstack = @racc_vstack
327
- tstack = @racc_tstack
328
-
329
- i = act * -3
330
- len = reduce_table[i]
331
- reduce_to = reduce_table[i+1]
332
- method_id = reduce_table[i+2]
333
- void_array = []
334
-
335
- tmp_t = tstack[-len, len] if @yydebug
336
- tmp_v = vstack[-len, len]
337
- tstack[-len, len] = void_array if @yydebug
338
- vstack[-len, len] = void_array
339
- state[-len, len] = void_array
340
-
341
- # tstack must be updated AFTER method call
342
- if use_result
343
- vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])
344
- else
345
- vstack.push __send__(method_id, tmp_v, vstack)
346
- end
347
- tstack.push reduce_to
348
-
349
- racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug
350
-
351
- k1 = reduce_to - nt_base
352
- if i = goto_pointer[k1]
353
- i += state[-1]
354
- if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1
355
- return curstate
356
- end
357
- end
358
- goto_default[k1]
359
- end
360
-
361
- def on_error(t, val, vstack)
362
- raise ParseError, sprintf("\nparse error on value %s (%s)",
363
- val.inspect, token_to_str(t) || '?')
364
- end
365
-
366
- def yyerror
367
- throw :racc_jump, 1
368
- end
369
-
370
- def yyaccept
371
- throw :racc_jump, 2
372
- end
373
-
374
- def yyerrok
375
- @racc_error_status = 0
376
- end
377
-
378
- #
379
- # for debugging output
380
- #
381
-
382
- def racc_read_token(t, tok, val)
383
- @racc_debug_out.print 'read '
384
- @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
385
- @racc_debug_out.puts val.inspect
386
- @racc_debug_out.puts
387
- end
388
-
389
- def racc_shift(tok, tstack, vstack)
390
- @racc_debug_out.puts "shift #{racc_token2str tok}"
391
- racc_print_stacks tstack, vstack
392
- @racc_debug_out.puts
393
- end
394
-
395
- def racc_reduce(toks, sim, tstack, vstack)
396
- out = @racc_debug_out
397
- out.print 'reduce '
398
- if toks.empty?
399
- out.print ' <none>'
400
- else
401
- toks.each {|t| out.print ' ', racc_token2str(t) }
402
- end
403
- out.puts " --> #{racc_token2str(sim)}"
404
-
405
- racc_print_stacks tstack, vstack
406
- @racc_debug_out.puts
407
- end
408
-
409
- def racc_accept
410
- @racc_debug_out.puts 'accept'
411
- @racc_debug_out.puts
412
- end
413
-
414
- def racc_e_pop(state, tstack, vstack)
415
- @racc_debug_out.puts 'error recovering mode: pop token'
416
- racc_print_states state
417
- racc_print_stacks tstack, vstack
418
- @racc_debug_out.puts
419
- end
420
-
421
- def racc_next_state(curstate, state)
422
- @racc_debug_out.puts "goto #{curstate}"
423
- racc_print_states state
424
- @racc_debug_out.puts
425
- end
426
-
427
- def racc_print_stacks(t, v)
428
- out = @racc_debug_out
429
- out.print ' ['
430
- t.each_index do |i|
431
- out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'
432
- end
433
- out.puts ' ]'
434
- end
435
-
436
- def racc_print_states(s)
437
- out = @racc_debug_out
438
- out.print ' ['
439
- s.each {|st| out.print ' ', st }
440
- out.puts ' ]'
441
- end
442
-
443
- def racc_token2str(tok)
444
- self.class::Racc_token_to_s_table[tok] or
445
- raise "[Racc Bug] can't convert token #{tok} to string"
446
- end
447
-
448
- def token_to_str(t)
449
- self.class::Racc_token_to_s_table[t]
450
- end
451
-
452
- end
453
-
454
- end
455
- end
456
- ###### racc/parser.rb end
457
-
458
-
459
-
460
- require 'date'
461
-
462
-
463
- module NumRu
464
- class Units < Racc::Parser
465
-
466
-
467
- =begin
468
- = class Node
469
- Node is a parent class for classes of parse tree node.
470
- This is not expected to be instanciated directly.
471
- =end
472
-
473
- class Node
474
-
475
- def initialize(*args)
476
- raise "#{self.class} is virtual."
477
- end
478
-
479
- def to_s(*args)
480
- raise "#{self.class}#to_s is virtual."
481
- end
482
-
483
- =begin
484
- --- pow other
485
- simply constructs a PowNode object.
486
- No reduction is performed.
487
- =end
488
-
489
- def pow(other)
490
- PowNode.new(self, other)
491
- end
492
-
493
- =begin
494
- --- mul other
495
- simply constructs a MulNode object.
496
- No reduction is performed.
497
- =end
498
-
499
- def mul(other)
500
- other = NumberNode.new(other) if Numeric === other
501
- MulNode.new(self, other)
502
- end
503
-
504
- =begin
505
- --- divide other
506
- simply constructs a MulNode object.
507
- No reduction is performed.
508
- =end
509
-
510
- def divide(other)
511
- MulNode.new(self, PowNode.new(other, NumberNode.new(-1)))
512
- end
513
-
514
- =begin
515
- --- shift other
516
- simply constructs a ShiftNode object.
517
- No reduction is performed.
518
- =end
519
-
520
- def shift(other)
521
- ShiftNode.new(self, other)
522
- end
523
-
524
- =begin
525
- --- pow_eval other
526
- similar to ((<pow other>)), but reduces PowNode[PowNode[...]] into
527
- single PowNode[...], so overriden at PowNode class.
528
- =end
529
-
530
- def pow_eval(other)
531
- pow(other)
532
- end
533
-
534
- =begin
535
- --- inspect
536
- =end
537
-
538
- def inspect2; "#{self.class}[#{to_s}]"; end
539
-
540
- def inspect; inspect2.gsub(/Units::/, '').gsub(/NumRu::/, '').gsub(/Node\[/, '['); end
541
-
542
- =begin
543
- --- trim
544
- in most subclasses, "trim" is redirected into "trim2".
545
- =end
546
-
547
- def trim
548
- trim2
549
- end
550
-
551
- =begin
552
- --- flatten
553
- in most subclasses, "flatten" is redirected into "flatten2".
554
- =end
555
-
556
- def flatten
557
- flatten2
558
- end
559
-
560
- =begin
561
- --- sort
562
- =end
563
-
564
- def sort
565
- raise "#{self.class}#sort is virtual: call after flatten"
566
- end
567
-
568
- =begin
569
- --- reduce1
570
- --- reduce2
571
- --- reduce3
572
- --- reduce4
573
- --- reduce5
574
- =end
575
-
576
- def reduce1
577
- self
578
- end
579
-
580
- def reduce2
581
- trim
582
- end
583
-
584
- def reduce3
585
- trim.flatten
586
- end
587
-
588
- def reduce4
589
- # unalias(Hash.new).trim.flatten.sort
590
- foldnumber(nil).trim.flatten.sort
591
- end
592
-
593
- def reduce5
594
- expand(Hash.new).trim.flatten.sort
595
- end
596
-
597
- =begin
598
- --- ref
599
- to be overriden at ShiftNode
600
- --- deref
601
- to be overriden at ShiftNode
602
- =end
603
-
604
- def ref
605
- NumberNode::ZERO
606
- end
607
-
608
- def deref
609
- self
610
- end
611
-
612
- end
613
-
614
- class ErrorNode < Node
615
-
616
- def initialize(string)
617
- @a = string
618
- end
619
-
620
- def to_s; @a; end
621
-
622
- end
623
-
624
- class ContainerNode < Node
625
-
626
- def trim2
627
- x = []
628
- for child in self
629
- x.push child.trim2
630
- end
631
- self.class.new(*x)
632
- end
633
-
634
- def inspect2
635
- a = []
636
- for child in self
637
- a.push child.inspect2
638
- end
639
- "#{self.class}[#{a.join(', ')}]"
640
- end
641
-
642
- end
643
-
644
- module BinaryNode
645
-
646
- def each
647
- yield @lhs
648
- yield @rhs
649
- end
650
-
651
- def expand(stopper)
652
- self.class.new(@lhs.expand(stopper), @rhs.expand(stopper))
653
- end
654
-
655
- def unalias(stopper)
656
- self.class.new(@lhs.unalias(stopper), @rhs.unalias(stopper))
657
- end
658
-
659
- def foldnumber(stopper)
660
- self.class.new(@lhs.foldnumber(stopper), @rhs.foldnumber(stopper))
661
- end
662
-
663
- end
664
-
665
- class TerminalNode < Node
666
-
667
- def trim2; self; end
668
- def flatten2; self; end
669
-
670
- def expand(stopper); self; end
671
- alias :unalias :expand
672
- alias :foldnumber :expand
673
-
674
- def sort; self; end
675
-
676
- end
677
- class NameNode < TerminalNode
678
-
679
- def initialize(string)
680
- @a = string
681
- end
682
-
683
- def to_s; @a; end
684
-
685
- alias :name :to_s
686
-
687
- def power; NumberNode::UNITY; end
688
-
689
- def mul_eval(another)
690
- raise "internal error (#{name}, #{another.name})" if name != another.name
691
- PowNode.new(self, self.power.add_eval(another.power))
692
- end
693
-
694
- def expand(stopper)
695
- raise "circular dependency for #{@a}" if stopper[@a]
696
- return self if basic?
697
- return CACHE[@a] if CACHE.include?(@a)
698
- CACHE[@a] = expand2(stopper)
699
- end
700
-
701
- def expand2(stopper)
702
- newstopper = stopper.dup
703
- newstopper[@a] = true
704
- if UDEFS.include?(@a) then
705
- Units.new(UDEFS[@a]).ptree.expand(newstopper)
706
- else
707
- p, n = UALIASES[@a]
708
- u = Units.new(UDEFS[n] || n).ptree.expand(newstopper)
709
- MulNode.new(u, PowNode.new(NumberNode.new(10), NumberNode.new(p)))
710
- end
711
- end
712
-
713
- def unalias(stopper)
714
- raise "circular dependency for #{@a}" if stopper[@a]
715
- return self unless UALIASES.include?(@a)
716
- p, n = UALIASES[@a]
717
- u = NameNode.new(n)
718
- q = PowNode.new(NumberNode.new(10), NumberNode.new(p))
719
- MulNode.new(u, q)
720
- end
721
-
722
- def foldnumber(stopper)
723
- return self unless UPLURALS.include?(@a)
724
- n = UPLURALS[@a]
725
- NameNode.new(n)
726
- end
727
-
728
- def basic?
729
- not (UDEFS.include?(@a) or UALIASES.include?(@a))
730
- end
731
-
732
- CACHE = {}
733
-
734
- def factor
735
- 1
736
- end
737
-
738
- end
739
-
740
- class NameNode
741
- UDEFS = {
742
- "%" => "1e-2", "Au" => "astronomical_unit", "Bq" => "s-1",
743
- "C" => "A.s", "Celsius" => "K @ 273.15", "F" => "C/V",
744
- "Fahrenheit" => "degree_F", "G" => "gauss", "Gal" => "cm s-2",
745
- "Gy" => "J.kg-1", "H" => "Wb.A-1", "Hg" => "mercury",
746
- "Hz" => "1/s", "J" => "N.m", "Julian_year" => "365.25 day",
747
- "L" => "litre", "N" => "kg.m.s-2", "P" => "poise", "Pa" => "N.m-2",
748
- "Pascal" => "Pa", "S" => "A/V", "St" => "stokes", "Sv" => "J.kg-1",
749
- "T" => "Wb.m-2", "V" => "J/C", "W" => "J/s", "Wb" => "V.s",
750
- "a" => "are", "ac" => "acre", "acre" => "10 chain2",
751
- "ampere" => "A", "angstrom" => "1.0e-10 m",
752
- "angular_degree" => "degree", "angular_minute" => "minute_angle",
753
- "angular_second" => "second_angle", "are" => "100 m2",
754
- "astronomical_unit" => "1.49597870e11 m",
755
- "astronomical_units" => "1.49597870e11 m", "atm" => "atmosphere",
756
- "atmosphere" => "101325 Pa", "bar" => "1e6 dyn.cm-2",
757
- "cal" => "calorie", "calorie" => "4.18605 J",
758
- "celsius" => "K @ 273.15", "centigrade" => "K @ 273.15",
759
- "century" => "100 year", "chain" => "22 yard",
760
- "common_year" => "365 day",
761
- "conventional_mercury" => "gravity 13595.10 kg/m3", "coulomb" => "C",
762
- "d" => "24 hour", "day" => "24 hour", "degC" => "K @ 273.15",
763
- "degF" => "degree_F", "degK" => "K", "deg_C" => "K @ 273.15",
764
- "deg_F" => "degree_F", "deg_K" => "K", "degree" => "pi.rad/180",
765
- "degreeC" => "K @ 273.15", "degreeF" => "degree_F",
766
- "degreeK" => "K", "degree_C" => "K @ 273.15",
767
- "degree_E" => "degree", "degree_F" => "degree_R @ 459.67",
768
- "degree_N" => "degree", "degree_R" => "K / 1.8",
769
- "degree_S" => "degree", "degree_W" => "degree",
770
- "degree_c" => "K @ 273.15", "degree_east" => "degree_E",
771
- "degree_f" => "degree_R @ 459.67", "degree_north" => "degree_N",
772
- "degree_south" => "degree_S", "degree_west" => "degree_W",
773
- "degrees_east" => "degree_E", "degrees_north" => "degree_N",
774
- "degrees_south" => "degree_S", "degrees_west" => "degree_W",
775
- "dyn" => "g.cm.s-2", "dyne" => "g.cm.s-2", "erg" => "dyn cm",
776
- "fahrenheit" => "degree_F", "farad" => "coulomb/volt",
777
- "feet" => "foot", "fermi" => "1.0e-15 m", "foot" => "12 inch",
778
- "force" => "9.80665 m.s-2", "ft" => "foot", "g" => "kg/1000",
779
- "gal" => "cm s-2", "gauss" => "T / 10000", "gram" => "kg/1000",
780
- "gravity" => "9.806650 meter/second2", "h" => "60 min",
781
- "hectare" => "100 are", "hertz" => "Hz", "hg" => "mercury",
782
- "horse_power" => "75 m kilogram-force / s", "hour" => "60 min",
783
- "hr" => "60 min", "in" => "inch", "inch" => "2.54 cm",
784
- "joule" => "J", "kelvin" => "K", "kgf" => "kilogram-force",
785
- "kilogram" => "kg", "knot" => "nautical_mile / hour",
786
- "kph" => "km / hour", "lb" => "pound",
787
- "light_speed" => "299792458 m/s", "light_year" => "9.46e15 m",
788
- "light_years" => "9.46e15 m", "litre" => "1.0e-3 m3",
789
- "lm" => "cd.sr", "lx" => "lm.m-2", "ly" => "light_year",
790
- "mb" => "bar / 1000", "mercury" => "conventional_mercury",
791
- "meter" => "metre", "metre" => "m", "mgal" => "cm s-2 / 1000",
792
- "micron" => "1.0e-6 m", "mile" => "1760 yard",
793
- "millibar" => "bar / 1000", "min" => "60 s", "minute" => "60 s",
794
- "minute_angle" => "pi.rad/180/60", "mole" => "mol",
795
- "mon" => "month", "month" => "6 pentad", "mph" => "mile / hour",
796
- "nautical_mile" => "1852 m", "nautical_miles" => "1852 m",
797
- "newton" => "N", "ohm" => "V/A", "ounce" => "pound / 16",
798
- "oz" => "ounce", "parsec" => "3.0857e16 m", "pascal" => "Pa",
799
- "pc" => "parsec", "percent" => "1e-2", "permil" => "1e-3",
800
- "pi" => "3.141592653589793238462", "poise" => "dyn s / cm2",
801
- "pound" => "453.6 g", "psi" => "pound-force / inch2",
802
- "radian" => "rad", "second" => "s",
803
- "second_angle" => "pi.rad/180/60/60", "steradian" => "sr",
804
- "stokes" => "cm2 / s", "t" => "ton", "tesla" => "Wb.m-2",
805
- "ton" => "1000 kg", "tonne" => "ton", "torr" => "133.322 Pa",
806
- "volt" => "V", "watt" => "W", "weber" => "Wb", "yard" => "6 feet",
807
- "yd" => "yard", "year" => "12 month", "yr" => "year",
808
- }
809
- UALIASES = {
810
- "Celsiuses" => [0, "Celsius"], "E%" => [18, "%"], "EA" => [18, "A"],
811
- "EAu" => [18, "Au"], "EBq" => [18, "Bq"], "EC" => [18, "C"],
812
- "EF" => [18, "F"], "EG" => [18, "G"], "EGal" => [18, "Gal"],
813
- "EGy" => [18, "Gy"], "EH" => [18, "H"], "EHg" => [18, "Hg"],
814
- "EHz" => [18, "Hz"], "EJ" => [18, "J"], "EK" => [18, "K"],
815
- "EL" => [18, "L"], "EN" => [18, "N"], "EP" => [18, "P"],
816
- "EPa" => [18, "Pa"], "ES" => [18, "S"], "ESt" => [18, "St"],
817
- "ESv" => [18, "Sv"], "ET" => [18, "T"], "EV" => [18, "V"],
818
- "EW" => [18, "W"], "EWb" => [18, "Wb"], "Ea" => [18, "a"],
819
- "Eac" => [18, "ac"], "Eatm" => [18, "atm"], "Ebar" => [18, "bar"],
820
- "Ecal" => [18, "cal"],
821
- "Econventional_mercury" => [18, "conventional_mercury"],
822
- "Ed" => [18, "d"], "EdegC" => [18, "degC"], "EdegF" => [18, "degF"],
823
- "Edeg_C" => [18, "deg_C"], "Edeg_F" => [18, "deg_F"],
824
- "EdegreeC" => [18, "degreeC"], "EdegreeF" => [18, "degreeF"],
825
- "Edegree_C" => [18, "degree_C"], "Edegree_E" => [18, "degree_E"],
826
- "Edegree_F" => [18, "degree_F"], "Edegree_N" => [18, "degree_N"],
827
- "Edegree_R" => [18, "degree_R"], "Edegree_S" => [18, "degree_S"],
828
- "Edegree_W" => [18, "degree_W"], "Edegree_c" => [18, "degree_c"],
829
- "Edegree_east" => [18, "degree_east"],
830
- "Edegree_f" => [18, "degree_f"],
831
- "Edegree_north" => [18, "degree_north"],
832
- "Edegree_south" => [18, "degree_south"],
833
- "Edegree_west" => [18, "degree_west"],
834
- "Edegrees_east" => [18, "degrees_east"],
835
- "Edegrees_north" => [18, "degrees_north"],
836
- "Edegrees_south" => [18, "degrees_south"],
837
- "Edegrees_west" => [18, "degrees_west"], "Edyn" => [18, "dyn"],
838
- "Eerg" => [18, "erg"], "Eforce" => [18, "force"], "Eg" => [18, "g"],
839
- "Egravity" => [18, "gravity"], "Eh" => [18, "h"],
840
- "Ehg" => [18, "hg"], "Ehr" => [18, "hr"], "Ein" => [18, "in"],
841
- "Ekg" => [18, "kg"], "Ekgf" => [18, "kgf"], "Ekph" => [18, "kph"],
842
- "Elb" => [18, "lb"], "Elm" => [18, "lm"], "Elx" => [18, "lx"],
843
- "Ely" => [18, "ly"], "Em" => [18, "m"], "Emb" => [18, "mb"],
844
- "Emercury" => [18, "mercury"], "Emgal" => [18, "mgal"],
845
- "Emin" => [18, "min"], "Emol" => [18, "mol"], "Emon" => [18, "mon"],
846
- "Emph" => [18, "mph"], "Eohm" => [18, "ohm"], "Eoz" => [18, "oz"],
847
- "Epc" => [18, "pc"], "Epercent" => [18, "percent"],
848
- "Epermil" => [18, "permil"], "Epsi" => [18, "psi"],
849
- "Erad" => [18, "rad"], "Es" => [18, "s"], "Esr" => [18, "sr"],
850
- "Et" => [18, "t"], "Eyr" => [18, "yr"],
851
- "Fahrenheits" => [0, "Fahrenheit"], "G%" => [9, "%"],
852
- "GA" => [9, "A"], "GAu" => [9, "Au"], "GBq" => [9, "Bq"],
853
- "GC" => [9, "C"], "GF" => [9, "F"], "GG" => [9, "G"],
854
- "GGal" => [9, "Gal"], "GGy" => [9, "Gy"], "GH" => [9, "H"],
855
- "GHg" => [9, "Hg"], "GHz" => [9, "Hz"], "GJ" => [9, "J"],
856
- "GK" => [9, "K"], "GL" => [9, "L"], "GN" => [9, "N"],
857
- "GP" => [9, "P"], "GPa" => [9, "Pa"], "GS" => [9, "S"],
858
- "GSt" => [9, "St"], "GSv" => [9, "Sv"], "GT" => [9, "T"],
859
- "GV" => [9, "V"], "GW" => [9, "W"], "GWb" => [9, "Wb"],
860
- "Ga" => [9, "a"], "Gac" => [9, "ac"], "Gatm" => [9, "atm"],
861
- "Gbar" => [9, "bar"], "Gcal" => [9, "cal"],
862
- "Gconventional_mercury" => [9, "conventional_mercury"],
863
- "Gd" => [9, "d"], "GdegC" => [9, "degC"], "GdegF" => [9, "degF"],
864
- "Gdeg_C" => [9, "deg_C"], "Gdeg_F" => [9, "deg_F"],
865
- "GdegreeC" => [9, "degreeC"], "GdegreeF" => [9, "degreeF"],
866
- "Gdegree_C" => [9, "degree_C"], "Gdegree_E" => [9, "degree_E"],
867
- "Gdegree_F" => [9, "degree_F"], "Gdegree_N" => [9, "degree_N"],
868
- "Gdegree_R" => [9, "degree_R"], "Gdegree_S" => [9, "degree_S"],
869
- "Gdegree_W" => [9, "degree_W"], "Gdegree_c" => [9, "degree_c"],
870
- "Gdegree_east" => [9, "degree_east"], "Gdegree_f" => [9, "degree_f"],
871
- "Gdegree_north" => [9, "degree_north"],
872
- "Gdegree_south" => [9, "degree_south"],
873
- "Gdegree_west" => [9, "degree_west"],
874
- "Gdegrees_east" => [9, "degrees_east"],
875
- "Gdegrees_north" => [9, "degrees_north"],
876
- "Gdegrees_south" => [9, "degrees_south"],
877
- "Gdegrees_west" => [9, "degrees_west"], "Gdyn" => [9, "dyn"],
878
- "Gerg" => [9, "erg"], "Gforce" => [9, "force"], "Gg" => [9, "g"],
879
- "Ggravity" => [9, "gravity"], "Gh" => [9, "h"], "Ghg" => [9, "hg"],
880
- "Ghr" => [9, "hr"], "Gin" => [9, "in"], "Gkg" => [9, "kg"],
881
- "Gkgf" => [9, "kgf"], "Gkph" => [9, "kph"], "Glb" => [9, "lb"],
882
- "Glm" => [9, "lm"], "Glx" => [9, "lx"], "Gly" => [9, "ly"],
883
- "Gm" => [9, "m"], "Gmb" => [9, "mb"], "Gmercury" => [9, "mercury"],
884
- "Gmgal" => [9, "mgal"], "Gmin" => [9, "min"], "Gmol" => [9, "mol"],
885
- "Gmon" => [9, "mon"], "Gmph" => [9, "mph"], "Gohm" => [9, "ohm"],
886
- "Goz" => [9, "oz"], "Gpc" => [9, "pc"],
887
- "Gpercent" => [9, "percent"], "Gpermil" => [9, "permil"],
888
- "Gpsi" => [9, "psi"], "Grad" => [9, "rad"], "Gs" => [9, "s"],
889
- "Gsr" => [9, "sr"], "Gt" => [9, "t"], "Gyr" => [9, "yr"],
890
- "Julians_year" => [0, "Julian_year"], "M%" => [6, "%"],
891
- "MA" => [6, "A"], "MAu" => [6, "Au"], "MBq" => [6, "Bq"],
892
- "MC" => [6, "C"], "MF" => [6, "F"], "MG" => [6, "G"],
893
- "MGal" => [6, "Gal"], "MGy" => [6, "Gy"], "MH" => [6, "H"],
894
- "MHg" => [6, "Hg"], "MHz" => [6, "Hz"], "MJ" => [6, "J"],
895
- "MK" => [6, "K"], "ML" => [6, "L"], "MN" => [6, "N"],
896
- "MP" => [6, "P"], "MPa" => [6, "Pa"], "MS" => [6, "S"],
897
- "MSt" => [6, "St"], "MSv" => [6, "Sv"], "MT" => [6, "T"],
898
- "MV" => [6, "V"], "MW" => [6, "W"], "MWb" => [6, "Wb"],
899
- "Ma" => [6, "a"], "Mac" => [6, "ac"], "Matm" => [6, "atm"],
900
- "Mbar" => [6, "bar"], "Mcal" => [6, "cal"],
901
- "Mconventional_mercury" => [6, "conventional_mercury"],
902
- "Md" => [6, "d"], "MdegC" => [6, "degC"], "MdegF" => [6, "degF"],
903
- "Mdeg_C" => [6, "deg_C"], "Mdeg_F" => [6, "deg_F"],
904
- "MdegreeC" => [6, "degreeC"], "MdegreeF" => [6, "degreeF"],
905
- "Mdegree_C" => [6, "degree_C"], "Mdegree_E" => [6, "degree_E"],
906
- "Mdegree_F" => [6, "degree_F"], "Mdegree_N" => [6, "degree_N"],
907
- "Mdegree_R" => [6, "degree_R"], "Mdegree_S" => [6, "degree_S"],
908
- "Mdegree_W" => [6, "degree_W"], "Mdegree_c" => [6, "degree_c"],
909
- "Mdegree_east" => [6, "degree_east"], "Mdegree_f" => [6, "degree_f"],
910
- "Mdegree_north" => [6, "degree_north"],
911
- "Mdegree_south" => [6, "degree_south"],
912
- "Mdegree_west" => [6, "degree_west"],
913
- "Mdegrees_east" => [6, "degrees_east"],
914
- "Mdegrees_north" => [6, "degrees_north"],
915
- "Mdegrees_south" => [6, "degrees_south"],
916
- "Mdegrees_west" => [6, "degrees_west"], "Mdyn" => [6, "dyn"],
917
- "Merg" => [6, "erg"], "Mforce" => [6, "force"], "Mg" => [6, "g"],
918
- "Mgravity" => [6, "gravity"], "Mh" => [6, "h"], "Mhg" => [6, "hg"],
919
- "Mhr" => [6, "hr"], "Min" => [6, "in"], "Mkg" => [6, "kg"],
920
- "Mkgf" => [6, "kgf"], "Mkph" => [6, "kph"], "Mlb" => [6, "lb"],
921
- "Mlm" => [6, "lm"], "Mlx" => [6, "lx"], "Mly" => [6, "ly"],
922
- "Mm" => [6, "m"], "Mmb" => [6, "mb"], "Mmercury" => [6, "mercury"],
923
- "Mmgal" => [6, "mgal"], "Mmin" => [6, "min"], "Mmol" => [6, "mol"],
924
- "Mmon" => [6, "mon"], "Mmph" => [6, "mph"], "Mohm" => [6, "ohm"],
925
- "Moz" => [6, "oz"], "Mpc" => [6, "pc"],
926
- "Mpercent" => [6, "percent"], "Mpermil" => [6, "permil"],
927
- "Mpsi" => [6, "psi"], "Mrad" => [6, "rad"], "Ms" => [6, "s"],
928
- "Msr" => [6, "sr"], "Mt" => [6, "t"], "Myr" => [6, "yr"],
929
- "P%" => [15, "%"], "PA" => [15, "A"], "PAu" => [15, "Au"],
930
- "PBq" => [15, "Bq"], "PC" => [15, "C"], "PF" => [15, "F"],
931
- "PG" => [15, "G"], "PGal" => [15, "Gal"], "PGy" => [15, "Gy"],
932
- "PH" => [15, "H"], "PHg" => [15, "Hg"], "PHz" => [15, "Hz"],
933
- "PJ" => [15, "J"], "PK" => [15, "K"], "PL" => [15, "L"],
934
- "PN" => [15, "N"], "PP" => [15, "P"], "PPa" => [15, "Pa"],
935
- "PS" => [15, "S"], "PSt" => [15, "St"], "PSv" => [15, "Sv"],
936
- "PT" => [15, "T"], "PV" => [15, "V"], "PW" => [15, "W"],
937
- "PWb" => [15, "Wb"], "Pa" => [15, "a"], "Pac" => [15, "ac"],
938
- "Pascals" => [0, "Pascal"], "Patm" => [15, "atm"],
939
- "Pbar" => [15, "bar"], "Pcal" => [15, "cal"],
940
- "Pconventional_mercury" => [15, "conventional_mercury"],
941
- "Pd" => [15, "d"], "PdegC" => [15, "degC"], "PdegF" => [15, "degF"],
942
- "Pdeg_C" => [15, "deg_C"], "Pdeg_F" => [15, "deg_F"],
943
- "PdegreeC" => [15, "degreeC"], "PdegreeF" => [15, "degreeF"],
944
- "Pdegree_C" => [15, "degree_C"], "Pdegree_E" => [15, "degree_E"],
945
- "Pdegree_F" => [15, "degree_F"], "Pdegree_N" => [15, "degree_N"],
946
- "Pdegree_R" => [15, "degree_R"], "Pdegree_S" => [15, "degree_S"],
947
- "Pdegree_W" => [15, "degree_W"], "Pdegree_c" => [15, "degree_c"],
948
- "Pdegree_east" => [15, "degree_east"],
949
- "Pdegree_f" => [15, "degree_f"],
950
- "Pdegree_north" => [15, "degree_north"],
951
- "Pdegree_south" => [15, "degree_south"],
952
- "Pdegree_west" => [15, "degree_west"],
953
- "Pdegrees_east" => [15, "degrees_east"],
954
- "Pdegrees_north" => [15, "degrees_north"],
955
- "Pdegrees_south" => [15, "degrees_south"],
956
- "Pdegrees_west" => [15, "degrees_west"], "Pdyn" => [15, "dyn"],
957
- "Perg" => [15, "erg"], "Pforce" => [15, "force"], "Pg" => [15, "g"],
958
- "Pgravity" => [15, "gravity"], "Ph" => [15, "h"],
959
- "Phg" => [15, "hg"], "Phr" => [15, "hr"], "Pin" => [15, "in"],
960
- "Pkg" => [15, "kg"], "Pkgf" => [15, "kgf"], "Pkph" => [15, "kph"],
961
- "Plb" => [15, "lb"], "Plm" => [15, "lm"], "Plx" => [15, "lx"],
962
- "Ply" => [15, "ly"], "Pm" => [15, "m"], "Pmb" => [15, "mb"],
963
- "Pmercury" => [15, "mercury"], "Pmgal" => [15, "mgal"],
964
- "Pmin" => [15, "min"], "Pmol" => [15, "mol"], "Pmon" => [15, "mon"],
965
- "Pmph" => [15, "mph"], "Pohm" => [15, "ohm"], "Poz" => [15, "oz"],
966
- "Ppc" => [15, "pc"], "Ppercent" => [15, "percent"],
967
- "Ppermil" => [15, "permil"], "Ppsi" => [15, "psi"],
968
- "Prad" => [15, "rad"], "Ps" => [15, "s"], "Psr" => [15, "sr"],
969
- "Pt" => [15, "t"], "Pyr" => [15, "yr"], "T%" => [12, "%"],
970
- "TA" => [12, "A"], "TAu" => [12, "Au"], "TBq" => [12, "Bq"],
971
- "TC" => [12, "C"], "TF" => [12, "F"], "TG" => [12, "G"],
972
- "TGal" => [12, "Gal"], "TGy" => [12, "Gy"], "TH" => [12, "H"],
973
- "THg" => [12, "Hg"], "THz" => [12, "Hz"], "TJ" => [12, "J"],
974
- "TK" => [12, "K"], "TL" => [12, "L"], "TN" => [12, "N"],
975
- "TP" => [12, "P"], "TPa" => [12, "Pa"], "TS" => [12, "S"],
976
- "TSt" => [12, "St"], "TSv" => [12, "Sv"], "TT" => [12, "T"],
977
- "TV" => [12, "V"], "TW" => [12, "W"], "TWb" => [12, "Wb"],
978
- "Ta" => [12, "a"], "Tac" => [12, "ac"], "Tatm" => [12, "atm"],
979
- "Tbar" => [12, "bar"], "Tcal" => [12, "cal"],
980
- "Tconventional_mercury" => [12, "conventional_mercury"],
981
- "Td" => [12, "d"], "TdegC" => [12, "degC"], "TdegF" => [12, "degF"],
982
- "Tdeg_C" => [12, "deg_C"], "Tdeg_F" => [12, "deg_F"],
983
- "TdegreeC" => [12, "degreeC"], "TdegreeF" => [12, "degreeF"],
984
- "Tdegree_C" => [12, "degree_C"], "Tdegree_E" => [12, "degree_E"],
985
- "Tdegree_F" => [12, "degree_F"], "Tdegree_N" => [12, "degree_N"],
986
- "Tdegree_R" => [12, "degree_R"], "Tdegree_S" => [12, "degree_S"],
987
- "Tdegree_W" => [12, "degree_W"], "Tdegree_c" => [12, "degree_c"],
988
- "Tdegree_east" => [12, "degree_east"],
989
- "Tdegree_f" => [12, "degree_f"],
990
- "Tdegree_north" => [12, "degree_north"],
991
- "Tdegree_south" => [12, "degree_south"],
992
- "Tdegree_west" => [12, "degree_west"],
993
- "Tdegrees_east" => [12, "degrees_east"],
994
- "Tdegrees_north" => [12, "degrees_north"],
995
- "Tdegrees_south" => [12, "degrees_south"],
996
- "Tdegrees_west" => [12, "degrees_west"], "Tdyn" => [12, "dyn"],
997
- "Terg" => [12, "erg"], "Tforce" => [12, "force"], "Tg" => [12, "g"],
998
- "Tgravity" => [12, "gravity"], "Th" => [12, "h"],
999
- "Thg" => [12, "hg"], "Thr" => [12, "hr"], "Tin" => [12, "in"],
1000
- "Tkg" => [12, "kg"], "Tkgf" => [12, "kgf"], "Tkph" => [12, "kph"],
1001
- "Tlb" => [12, "lb"], "Tlm" => [12, "lm"], "Tlx" => [12, "lx"],
1002
- "Tly" => [12, "ly"], "Tm" => [12, "m"], "Tmb" => [12, "mb"],
1003
- "Tmercury" => [12, "mercury"], "Tmgal" => [12, "mgal"],
1004
- "Tmin" => [12, "min"], "Tmol" => [12, "mol"], "Tmon" => [12, "mon"],
1005
- "Tmph" => [12, "mph"], "Tohm" => [12, "ohm"], "Toz" => [12, "oz"],
1006
- "Tpc" => [12, "pc"], "Tpercent" => [12, "percent"],
1007
- "Tpermil" => [12, "permil"], "Tpsi" => [12, "psi"],
1008
- "Trad" => [12, "rad"], "Ts" => [12, "s"], "Tsr" => [12, "sr"],
1009
- "Tt" => [12, "t"], "Tyr" => [12, "yr"], "a%" => [-18, "%"],
1010
- "aA" => [-18, "A"], "aAu" => [-18, "Au"], "aBq" => [-18, "Bq"],
1011
- "aC" => [-18, "C"], "aF" => [-18, "F"], "aG" => [-18, "G"],
1012
- "aGal" => [-18, "Gal"], "aGy" => [-18, "Gy"], "aH" => [-18, "H"],
1013
- "aHg" => [-18, "Hg"], "aHz" => [-18, "Hz"], "aJ" => [-18, "J"],
1014
- "aK" => [-18, "K"], "aL" => [-18, "L"], "aN" => [-18, "N"],
1015
- "aP" => [-18, "P"], "aPa" => [-18, "Pa"], "aS" => [-18, "S"],
1016
- "aSt" => [-18, "St"], "aSv" => [-18, "Sv"], "aT" => [-18, "T"],
1017
- "aV" => [-18, "V"], "aW" => [-18, "W"], "aWb" => [-18, "Wb"],
1018
- "aa" => [-18, "a"], "aac" => [-18, "ac"], "aatm" => [-18, "atm"],
1019
- "abar" => [-18, "bar"], "acal" => [-18, "cal"],
1020
- "aconventional_mercury" => [-18, "conventional_mercury"],
1021
- "acres" => [0, "acre"], "ad" => [-18, "d"],
1022
- "adegC" => [-18, "degC"], "adegF" => [-18, "degF"],
1023
- "adeg_C" => [-18, "deg_C"], "adeg_F" => [-18, "deg_F"],
1024
- "adegreeC" => [-18, "degreeC"], "adegreeF" => [-18, "degreeF"],
1025
- "adegree_C" => [-18, "degree_C"], "adegree_E" => [-18, "degree_E"],
1026
- "adegree_F" => [-18, "degree_F"], "adegree_N" => [-18, "degree_N"],
1027
- "adegree_R" => [-18, "degree_R"], "adegree_S" => [-18, "degree_S"],
1028
- "adegree_W" => [-18, "degree_W"], "adegree_c" => [-18, "degree_c"],
1029
- "adegree_east" => [-18, "degree_east"],
1030
- "adegree_f" => [-18, "degree_f"],
1031
- "adegree_north" => [-18, "degree_north"],
1032
- "adegree_south" => [-18, "degree_south"],
1033
- "adegree_west" => [-18, "degree_west"],
1034
- "adegrees_east" => [-18, "degrees_east"],
1035
- "adegrees_north" => [-18, "degrees_north"],
1036
- "adegrees_south" => [-18, "degrees_south"],
1037
- "adegrees_west" => [-18, "degrees_west"], "adyn" => [-18, "dyn"],
1038
- "aerg" => [-18, "erg"], "aforce" => [-18, "force"],
1039
- "ag" => [-18, "g"], "agravity" => [-18, "gravity"],
1040
- "ah" => [-18, "h"], "ahg" => [-18, "hg"], "ahr" => [-18, "hr"],
1041
- "ain" => [-18, "in"], "akg" => [-18, "kg"], "akgf" => [-18, "kgf"],
1042
- "akph" => [-18, "kph"], "alb" => [-18, "lb"], "alm" => [-18, "lm"],
1043
- "alx" => [-18, "lx"], "aly" => [-18, "ly"], "am" => [-18, "m"],
1044
- "amb" => [-18, "mb"], "amercury" => [-18, "mercury"],
1045
- "amgal" => [-18, "mgal"], "amin" => [-18, "min"],
1046
- "amol" => [-18, "mol"], "amon" => [-18, "mon"],
1047
- "amperes" => [0, "ampere"], "amph" => [-18, "mph"],
1048
- "angstroms" => [0, "angstrom"],
1049
- "angulars_degree" => [0, "angular_degree"],
1050
- "angulars_minute" => [0, "angular_minute"],
1051
- "angulars_second" => [0, "angular_second"], "aohm" => [-18, "ohm"],
1052
- "aoz" => [-18, "oz"], "apc" => [-18, "pc"],
1053
- "apercent" => [-18, "percent"], "apermil" => [-18, "permil"],
1054
- "apsi" => [-18, "psi"], "arad" => [-18, "rad"],
1055
- "ares" => [0, "are"], "as" => [-18, "s"], "asr" => [-18, "sr"],
1056
- "at" => [-18, "t"], "atmospheres" => [0, "atmosphere"],
1057
- "attoCelsius" => [-18, "Celsius"],
1058
- "attoFahrenheit" => [-18, "Fahrenheit"],
1059
- "attoJulian_year" => [-18, "Julian_year"],
1060
- "attoPascal" => [-18, "Pascal"], "attoacre" => [-18, "acre"],
1061
- "attoampere" => [-18, "ampere"], "attoangstrom" => [-18, "angstrom"],
1062
- "attoangular_degree" => [-18, "angular_degree"],
1063
- "attoangular_minute" => [-18, "angular_minute"],
1064
- "attoangular_second" => [-18, "angular_second"],
1065
- "attoare" => [-18, "are"], "attoatmosphere" => [-18, "atmosphere"],
1066
- "attocalorie" => [-18, "calorie"], "attocelsius" => [-18, "celsius"],
1067
- "attocentigrade" => [-18, "centigrade"],
1068
- "attocentury" => [-18, "century"], "attochain" => [-18, "chain"],
1069
- "attocommon_year" => [-18, "common_year"],
1070
- "attocoulomb" => [-18, "coulomb"], "attoday" => [-18, "day"],
1071
- "attodegK" => [-18, "degK"], "attodeg_K" => [-18, "deg_K"],
1072
- "attodegree" => [-18, "degree"], "attodegreeK" => [-18, "degreeK"],
1073
- "attodyne" => [-18, "dyne"], "attoerg" => [-18, "erg"],
1074
- "attofahrenheit" => [-18, "fahrenheit"],
1075
- "attofarad" => [-18, "farad"], "attofermi" => [-18, "fermi"],
1076
- "attogal" => [-18, "gal"], "attogauss" => [-18, "gauss"],
1077
- "attogram" => [-18, "gram"], "attohectare" => [-18, "hectare"],
1078
- "attohertz" => [-18, "hertz"], "attohour" => [-18, "hour"],
1079
- "attoinch" => [-18, "inch"], "attojoule" => [-18, "joule"],
1080
- "attokelvin" => [-18, "kelvin"], "attokilogram" => [-18, "kilogram"],
1081
- "attoknot" => [-18, "knot"], "attolitre" => [-18, "litre"],
1082
- "attometer" => [-18, "meter"], "attometre" => [-18, "metre"],
1083
- "attomicron" => [-18, "micron"], "attomile" => [-18, "mile"],
1084
- "attomillibar" => [-18, "millibar"], "attominute" => [-18, "minute"],
1085
- "attominute_angle" => [-18, "minute_angle"],
1086
- "attomole" => [-18, "mole"], "attomonth" => [-18, "month"],
1087
- "attonewton" => [-18, "newton"], "attoounce" => [-18, "ounce"],
1088
- "attoparsec" => [-18, "parsec"], "attopascal" => [-18, "pascal"],
1089
- "attopentad" => [-18, "pentad"], "attopoise" => [-18, "poise"],
1090
- "attopound" => [-18, "pound"], "attoradian" => [-18, "radian"],
1091
- "attosecond" => [-18, "second"],
1092
- "attosecond_angle" => [-18, "second_angle"],
1093
- "attosteradian" => [-18, "steradian"],
1094
- "attostokes" => [-18, "stokes"], "attotesla" => [-18, "tesla"],
1095
- "attoton" => [-18, "ton"], "attotonne" => [-18, "tonne"],
1096
- "attotorr" => [-18, "torr"], "attovolt" => [-18, "volt"],
1097
- "attowatt" => [-18, "watt"], "attoweber" => [-18, "weber"],
1098
- "attoyard" => [-18, "yard"], "attoyd" => [-18, "yd"],
1099
- "attoyear" => [-18, "year"], "ayr" => [-18, "yr"],
1100
- "c%" => [-2, "%"], "cA" => [-2, "A"], "cAu" => [-2, "Au"],
1101
- "cBq" => [-2, "Bq"], "cC" => [-2, "C"], "cF" => [-2, "F"],
1102
- "cG" => [-2, "G"], "cGal" => [-2, "Gal"], "cGy" => [-2, "Gy"],
1103
- "cH" => [-2, "H"], "cHg" => [-2, "Hg"], "cHz" => [-2, "Hz"],
1104
- "cJ" => [-2, "J"], "cK" => [-2, "K"], "cL" => [-2, "L"],
1105
- "cN" => [-2, "N"], "cP" => [-2, "P"], "cPa" => [-2, "Pa"],
1106
- "cS" => [-2, "S"], "cSt" => [-2, "St"], "cSv" => [-2, "Sv"],
1107
- "cT" => [-2, "T"], "cV" => [-2, "V"], "cW" => [-2, "W"],
1108
- "cWb" => [-2, "Wb"], "ca" => [-2, "a"], "cac" => [-2, "ac"],
1109
- "calories" => [0, "calorie"], "catm" => [-2, "atm"],
1110
- "cbar" => [-2, "bar"], "ccal" => [-2, "cal"],
1111
- "cconventional_mercury" => [-2, "conventional_mercury"],
1112
- "cd" => [-2, "d"], "cdegC" => [-2, "degC"], "cdegF" => [-2, "degF"],
1113
- "cdeg_C" => [-2, "deg_C"], "cdeg_F" => [-2, "deg_F"],
1114
- "cdegreeC" => [-2, "degreeC"], "cdegreeF" => [-2, "degreeF"],
1115
- "cdegree_C" => [-2, "degree_C"], "cdegree_E" => [-2, "degree_E"],
1116
- "cdegree_F" => [-2, "degree_F"], "cdegree_N" => [-2, "degree_N"],
1117
- "cdegree_R" => [-2, "degree_R"], "cdegree_S" => [-2, "degree_S"],
1118
- "cdegree_W" => [-2, "degree_W"], "cdegree_c" => [-2, "degree_c"],
1119
- "cdegree_east" => [-2, "degree_east"],
1120
- "cdegree_f" => [-2, "degree_f"],
1121
- "cdegree_north" => [-2, "degree_north"],
1122
- "cdegree_south" => [-2, "degree_south"],
1123
- "cdegree_west" => [-2, "degree_west"],
1124
- "cdegrees_east" => [-2, "degrees_east"],
1125
- "cdegrees_north" => [-2, "degrees_north"],
1126
- "cdegrees_south" => [-2, "degrees_south"],
1127
- "cdegrees_west" => [-2, "degrees_west"], "cdyn" => [-2, "dyn"],
1128
- "celsiuses" => [0, "celsius"], "centiCelsius" => [-2, "Celsius"],
1129
- "centiFahrenheit" => [-2, "Fahrenheit"],
1130
- "centiJulian_year" => [-2, "Julian_year"],
1131
- "centiPascal" => [-2, "Pascal"], "centiacre" => [-2, "acre"],
1132
- "centiampere" => [-2, "ampere"], "centiangstrom" => [-2, "angstrom"],
1133
- "centiangular_degree" => [-2, "angular_degree"],
1134
- "centiangular_minute" => [-2, "angular_minute"],
1135
- "centiangular_second" => [-2, "angular_second"],
1136
- "centiare" => [-2, "are"], "centiatmosphere" => [-2, "atmosphere"],
1137
- "centicalorie" => [-2, "calorie"], "centicelsius" => [-2, "celsius"],
1138
- "centicentigrade" => [-2, "centigrade"],
1139
- "centicentury" => [-2, "century"], "centichain" => [-2, "chain"],
1140
- "centicommon_year" => [-2, "common_year"],
1141
- "centicoulomb" => [-2, "coulomb"], "centiday" => [-2, "day"],
1142
- "centidegK" => [-2, "degK"], "centideg_K" => [-2, "deg_K"],
1143
- "centidegree" => [-2, "degree"], "centidegreeK" => [-2, "degreeK"],
1144
- "centidyne" => [-2, "dyne"], "centierg" => [-2, "erg"],
1145
- "centifahrenheit" => [-2, "fahrenheit"],
1146
- "centifarad" => [-2, "farad"], "centifermi" => [-2, "fermi"],
1147
- "centigal" => [-2, "gal"], "centigauss" => [-2, "gauss"],
1148
- "centigrades" => [0, "centigrade"], "centigram" => [-2, "gram"],
1149
- "centihectare" => [-2, "hectare"], "centihertz" => [-2, "hertz"],
1150
- "centihour" => [-2, "hour"], "centiinch" => [-2, "inch"],
1151
- "centijoule" => [-2, "joule"], "centikelvin" => [-2, "kelvin"],
1152
- "centikilogram" => [-2, "kilogram"], "centiknot" => [-2, "knot"],
1153
- "centilitre" => [-2, "litre"], "centimeter" => [-2, "meter"],
1154
- "centimetre" => [-2, "metre"], "centimicron" => [-2, "micron"],
1155
- "centimile" => [-2, "mile"], "centimillibar" => [-2, "millibar"],
1156
- "centiminute" => [-2, "minute"],
1157
- "centiminute_angle" => [-2, "minute_angle"],
1158
- "centimole" => [-2, "mole"], "centimonth" => [-2, "month"],
1159
- "centinewton" => [-2, "newton"], "centiounce" => [-2, "ounce"],
1160
- "centiparsec" => [-2, "parsec"], "centipascal" => [-2, "pascal"],
1161
- "centipentad" => [-2, "pentad"], "centipoise" => [-2, "poise"],
1162
- "centipound" => [-2, "pound"], "centiradian" => [-2, "radian"],
1163
- "centisecond" => [-2, "second"],
1164
- "centisecond_angle" => [-2, "second_angle"],
1165
- "centisteradian" => [-2, "steradian"],
1166
- "centistokes" => [-2, "stokes"], "centitesla" => [-2, "tesla"],
1167
- "centiton" => [-2, "ton"], "centitonne" => [-2, "tonne"],
1168
- "centitorr" => [-2, "torr"], "centivolt" => [-2, "volt"],
1169
- "centiwatt" => [-2, "watt"], "centiweber" => [-2, "weber"],
1170
- "centiyard" => [-2, "yard"], "centiyd" => [-2, "yd"],
1171
- "centiyear" => [-2, "year"], "centuries" => [0, "century"],
1172
- "cerg" => [-2, "erg"], "cforce" => [-2, "force"], "cg" => [-2, "g"],
1173
- "cgravity" => [-2, "gravity"], "ch" => [-2, "h"],
1174
- "chains" => [0, "chain"], "chg" => [-2, "hg"], "chr" => [-2, "hr"],
1175
- "cin" => [-2, "in"], "ckg" => [-2, "kg"], "ckgf" => [-2, "kgf"],
1176
- "ckph" => [-2, "kph"], "clb" => [-2, "lb"], "clm" => [-2, "lm"],
1177
- "clx" => [-2, "lx"], "cly" => [-2, "ly"], "cm" => [-2, "m"],
1178
- "cmb" => [-2, "mb"], "cmercury" => [-2, "mercury"],
1179
- "cmgal" => [-2, "mgal"], "cmin" => [-2, "min"],
1180
- "cmol" => [-2, "mol"], "cmon" => [-2, "mon"], "cmph" => [-2, "mph"],
1181
- "cohm" => [-2, "ohm"], "commons_year" => [0, "common_year"],
1182
- "coulombs" => [0, "coulomb"], "coz" => [-2, "oz"],
1183
- "cpc" => [-2, "pc"], "cpercent" => [-2, "percent"],
1184
- "cpermil" => [-2, "permil"], "cpsi" => [-2, "psi"],
1185
- "crad" => [-2, "rad"], "cs" => [-2, "s"], "csr" => [-2, "sr"],
1186
- "ct" => [-2, "t"], "cyr" => [-2, "yr"], "d%" => [-1, "%"],
1187
- "dA" => [-1, "A"], "dAu" => [-1, "Au"], "dBq" => [-1, "Bq"],
1188
- "dC" => [-1, "C"], "dF" => [-1, "F"], "dG" => [-1, "G"],
1189
- "dGal" => [-1, "Gal"], "dGy" => [-1, "Gy"], "dH" => [-1, "H"],
1190
- "dHg" => [-1, "Hg"], "dHz" => [-1, "Hz"], "dJ" => [-1, "J"],
1191
- "dK" => [-1, "K"], "dL" => [-1, "L"], "dN" => [-1, "N"],
1192
- "dP" => [-1, "P"], "dPa" => [-1, "Pa"], "dS" => [-1, "S"],
1193
- "dSt" => [-1, "St"], "dSv" => [-1, "Sv"], "dT" => [-1, "T"],
1194
- "dV" => [-1, "V"], "dW" => [-1, "W"], "dWb" => [-1, "Wb"],
1195
- "da" => [-1, "a"], "da%" => [1, "%"], "daA" => [1, "A"],
1196
- "daAu" => [1, "Au"], "daBq" => [1, "Bq"], "daC" => [1, "C"],
1197
- "daF" => [1, "F"], "daG" => [1, "G"], "daGal" => [1, "Gal"],
1198
- "daGy" => [1, "Gy"], "daH" => [1, "H"], "daHg" => [1, "Hg"],
1199
- "daHz" => [1, "Hz"], "daJ" => [1, "J"], "daK" => [1, "K"],
1200
- "daL" => [1, "L"], "daN" => [1, "N"], "daP" => [1, "P"],
1201
- "daPa" => [1, "Pa"], "daS" => [1, "S"], "daSt" => [1, "St"],
1202
- "daSv" => [1, "Sv"], "daT" => [1, "T"], "daV" => [1, "V"],
1203
- "daW" => [1, "W"], "daWb" => [1, "Wb"], "daa" => [1, "a"],
1204
- "daac" => [1, "ac"], "daatm" => [1, "atm"], "dabar" => [1, "bar"],
1205
- "dac" => [-1, "ac"], "dacal" => [1, "cal"],
1206
- "daconventional_mercury" => [1, "conventional_mercury"],
1207
- "dad" => [1, "d"], "dadegC" => [1, "degC"], "dadegF" => [1, "degF"],
1208
- "dadeg_C" => [1, "deg_C"], "dadeg_F" => [1, "deg_F"],
1209
- "dadegreeC" => [1, "degreeC"], "dadegreeF" => [1, "degreeF"],
1210
- "dadegree_C" => [1, "degree_C"], "dadegree_E" => [1, "degree_E"],
1211
- "dadegree_F" => [1, "degree_F"], "dadegree_N" => [1, "degree_N"],
1212
- "dadegree_R" => [1, "degree_R"], "dadegree_S" => [1, "degree_S"],
1213
- "dadegree_W" => [1, "degree_W"], "dadegree_c" => [1, "degree_c"],
1214
- "dadegree_east" => [1, "degree_east"],
1215
- "dadegree_f" => [1, "degree_f"],
1216
- "dadegree_north" => [1, "degree_north"],
1217
- "dadegree_south" => [1, "degree_south"],
1218
- "dadegree_west" => [1, "degree_west"],
1219
- "dadegrees_east" => [1, "degrees_east"],
1220
- "dadegrees_north" => [1, "degrees_north"],
1221
- "dadegrees_south" => [1, "degrees_south"],
1222
- "dadegrees_west" => [1, "degrees_west"], "dadyn" => [1, "dyn"],
1223
- "daerg" => [1, "erg"], "daforce" => [1, "force"], "dag" => [1, "g"],
1224
- "dagravity" => [1, "gravity"], "dah" => [1, "h"],
1225
- "dahg" => [1, "hg"], "dahr" => [1, "hr"], "dain" => [1, "in"],
1226
- "dakg" => [1, "kg"], "dakgf" => [1, "kgf"], "dakph" => [1, "kph"],
1227
- "dalb" => [1, "lb"], "dalm" => [1, "lm"], "dalx" => [1, "lx"],
1228
- "daly" => [1, "ly"], "dam" => [1, "m"], "damb" => [1, "mb"],
1229
- "damercury" => [1, "mercury"], "damgal" => [1, "mgal"],
1230
- "damin" => [1, "min"], "damol" => [1, "mol"], "damon" => [1, "mon"],
1231
- "damph" => [1, "mph"], "daohm" => [1, "ohm"], "daoz" => [1, "oz"],
1232
- "dapc" => [1, "pc"], "dapercent" => [1, "percent"],
1233
- "dapermil" => [1, "permil"], "dapsi" => [1, "psi"],
1234
- "darad" => [1, "rad"], "das" => [1, "s"], "dasr" => [1, "sr"],
1235
- "dat" => [1, "t"], "datm" => [-1, "atm"], "dayr" => [1, "yr"],
1236
- "days" => [0, "day"], "dbar" => [-1, "bar"], "dcal" => [-1, "cal"],
1237
- "dconventional_mercury" => [-1, "conventional_mercury"],
1238
- "dd" => [-1, "d"], "ddegC" => [-1, "degC"], "ddegF" => [-1, "degF"],
1239
- "ddeg_C" => [-1, "deg_C"], "ddeg_F" => [-1, "deg_F"],
1240
- "ddegreeC" => [-1, "degreeC"], "ddegreeF" => [-1, "degreeF"],
1241
- "ddegree_C" => [-1, "degree_C"], "ddegree_E" => [-1, "degree_E"],
1242
- "ddegree_F" => [-1, "degree_F"], "ddegree_N" => [-1, "degree_N"],
1243
- "ddegree_R" => [-1, "degree_R"], "ddegree_S" => [-1, "degree_S"],
1244
- "ddegree_W" => [-1, "degree_W"], "ddegree_c" => [-1, "degree_c"],
1245
- "ddegree_east" => [-1, "degree_east"],
1246
- "ddegree_f" => [-1, "degree_f"],
1247
- "ddegree_north" => [-1, "degree_north"],
1248
- "ddegree_south" => [-1, "degree_south"],
1249
- "ddegree_west" => [-1, "degree_west"],
1250
- "ddegrees_east" => [-1, "degrees_east"],
1251
- "ddegrees_north" => [-1, "degrees_north"],
1252
- "ddegrees_south" => [-1, "degrees_south"],
1253
- "ddegrees_west" => [-1, "degrees_west"], "ddyn" => [-1, "dyn"],
1254
- "decaCelsius" => [1, "Celsius"],
1255
- "decaFahrenheit" => [1, "Fahrenheit"],
1256
- "decaJulian_year" => [1, "Julian_year"],
1257
- "decaPascal" => [1, "Pascal"], "decaacre" => [1, "acre"],
1258
- "decaampere" => [1, "ampere"], "decaangstrom" => [1, "angstrom"],
1259
- "decaangular_degree" => [1, "angular_degree"],
1260
- "decaangular_minute" => [1, "angular_minute"],
1261
- "decaangular_second" => [1, "angular_second"],
1262
- "decaare" => [1, "are"], "decaatmosphere" => [1, "atmosphere"],
1263
- "decacalorie" => [1, "calorie"], "decacelsius" => [1, "celsius"],
1264
- "decacentigrade" => [1, "centigrade"],
1265
- "decacentury" => [1, "century"], "decachain" => [1, "chain"],
1266
- "decacommon_year" => [1, "common_year"],
1267
- "decacoulomb" => [1, "coulomb"], "decaday" => [1, "day"],
1268
- "decadegK" => [1, "degK"], "decadeg_K" => [1, "deg_K"],
1269
- "decadegree" => [1, "degree"], "decadegreeK" => [1, "degreeK"],
1270
- "decadyne" => [1, "dyne"], "decaerg" => [1, "erg"],
1271
- "decafahrenheit" => [1, "fahrenheit"], "decafarad" => [1, "farad"],
1272
- "decafermi" => [1, "fermi"], "decagal" => [1, "gal"],
1273
- "decagauss" => [1, "gauss"], "decagram" => [1, "gram"],
1274
- "decahectare" => [1, "hectare"], "decahertz" => [1, "hertz"],
1275
- "decahour" => [1, "hour"], "decainch" => [1, "inch"],
1276
- "decajoule" => [1, "joule"], "decakelvin" => [1, "kelvin"],
1277
- "decakilogram" => [1, "kilogram"], "decaknot" => [1, "knot"],
1278
- "decalitre" => [1, "litre"], "decameter" => [1, "meter"],
1279
- "decametre" => [1, "metre"], "decamicron" => [1, "micron"],
1280
- "decamile" => [1, "mile"], "decamillibar" => [1, "millibar"],
1281
- "decaminute" => [1, "minute"],
1282
- "decaminute_angle" => [1, "minute_angle"], "decamole" => [1, "mole"],
1283
- "decamonth" => [1, "month"], "decanewton" => [1, "newton"],
1284
- "decaounce" => [1, "ounce"], "decaparsec" => [1, "parsec"],
1285
- "decapascal" => [1, "pascal"], "decapentad" => [1, "pentad"],
1286
- "decapoise" => [1, "poise"], "decapound" => [1, "pound"],
1287
- "decaradian" => [1, "radian"], "decasecond" => [1, "second"],
1288
- "decasecond_angle" => [1, "second_angle"],
1289
- "decasteradian" => [1, "steradian"], "decastokes" => [1, "stokes"],
1290
- "decatesla" => [1, "tesla"], "decaton" => [1, "ton"],
1291
- "decatonne" => [1, "tonne"], "decatorr" => [1, "torr"],
1292
- "decavolt" => [1, "volt"], "decawatt" => [1, "watt"],
1293
- "decaweber" => [1, "weber"], "decayard" => [1, "yard"],
1294
- "decayd" => [1, "yd"], "decayear" => [1, "year"],
1295
- "deciCelsius" => [-1, "Celsius"],
1296
- "deciFahrenheit" => [-1, "Fahrenheit"],
1297
- "deciJulian_year" => [-1, "Julian_year"],
1298
- "deciPascal" => [-1, "Pascal"], "deciacre" => [-1, "acre"],
1299
- "deciampere" => [-1, "ampere"], "deciangstrom" => [-1, "angstrom"],
1300
- "deciangular_degree" => [-1, "angular_degree"],
1301
- "deciangular_minute" => [-1, "angular_minute"],
1302
- "deciangular_second" => [-1, "angular_second"],
1303
- "deciare" => [-1, "are"], "deciatmosphere" => [-1, "atmosphere"],
1304
- "decicalorie" => [-1, "calorie"], "decicelsius" => [-1, "celsius"],
1305
- "decicentigrade" => [-1, "centigrade"],
1306
- "decicentury" => [-1, "century"], "decichain" => [-1, "chain"],
1307
- "decicommon_year" => [-1, "common_year"],
1308
- "decicoulomb" => [-1, "coulomb"], "deciday" => [-1, "day"],
1309
- "decidegK" => [-1, "degK"], "decideg_K" => [-1, "deg_K"],
1310
- "decidegree" => [-1, "degree"], "decidegreeK" => [-1, "degreeK"],
1311
- "decidyne" => [-1, "dyne"], "decierg" => [-1, "erg"],
1312
- "decifahrenheit" => [-1, "fahrenheit"], "decifarad" => [-1, "farad"],
1313
- "decifermi" => [-1, "fermi"], "decigal" => [-1, "gal"],
1314
- "decigauss" => [-1, "gauss"], "decigram" => [-1, "gram"],
1315
- "decihectare" => [-1, "hectare"], "decihertz" => [-1, "hertz"],
1316
- "decihour" => [-1, "hour"], "deciinch" => [-1, "inch"],
1317
- "decijoule" => [-1, "joule"], "decikelvin" => [-1, "kelvin"],
1318
- "decikilogram" => [-1, "kilogram"], "deciknot" => [-1, "knot"],
1319
- "decilitre" => [-1, "litre"], "decimeter" => [-1, "meter"],
1320
- "decimetre" => [-1, "metre"], "decimicron" => [-1, "micron"],
1321
- "decimile" => [-1, "mile"], "decimillibar" => [-1, "millibar"],
1322
- "deciminute" => [-1, "minute"],
1323
- "deciminute_angle" => [-1, "minute_angle"],
1324
- "decimole" => [-1, "mole"], "decimonth" => [-1, "month"],
1325
- "decinewton" => [-1, "newton"], "deciounce" => [-1, "ounce"],
1326
- "deciparsec" => [-1, "parsec"], "decipascal" => [-1, "pascal"],
1327
- "decipentad" => [-1, "pentad"], "decipoise" => [-1, "poise"],
1328
- "decipound" => [-1, "pound"], "deciradian" => [-1, "radian"],
1329
- "decisecond" => [-1, "second"],
1330
- "decisecond_angle" => [-1, "second_angle"],
1331
- "decisteradian" => [-1, "steradian"], "decistokes" => [-1, "stokes"],
1332
- "decitesla" => [-1, "tesla"], "deciton" => [-1, "ton"],
1333
- "decitonne" => [-1, "tonne"], "decitorr" => [-1, "torr"],
1334
- "decivolt" => [-1, "volt"], "deciwatt" => [-1, "watt"],
1335
- "deciweber" => [-1, "weber"], "deciyard" => [-1, "yard"],
1336
- "deciyd" => [-1, "yd"], "deciyear" => [-1, "year"],
1337
- "degKs" => [0, "degK"], "degreeKs" => [0, "degreeK"],
1338
- "degrees" => [0, "degree"], "degs_K" => [0, "deg_K"],
1339
- "derg" => [-1, "erg"], "dforce" => [-1, "force"], "dg" => [-1, "g"],
1340
- "dgravity" => [-1, "gravity"], "dh" => [-1, "h"],
1341
- "dhg" => [-1, "hg"], "dhr" => [-1, "hr"], "din" => [-1, "in"],
1342
- "dkg" => [-1, "kg"], "dkgf" => [-1, "kgf"], "dkph" => [-1, "kph"],
1343
- "dlb" => [-1, "lb"], "dlm" => [-1, "lm"], "dlx" => [-1, "lx"],
1344
- "dly" => [-1, "ly"], "dm" => [-1, "m"], "dmb" => [-1, "mb"],
1345
- "dmercury" => [-1, "mercury"], "dmgal" => [-1, "mgal"],
1346
- "dmin" => [-1, "min"], "dmol" => [-1, "mol"], "dmon" => [-1, "mon"],
1347
- "dmph" => [-1, "mph"], "dohm" => [-1, "ohm"], "doz" => [-1, "oz"],
1348
- "dpc" => [-1, "pc"], "dpercent" => [-1, "percent"],
1349
- "dpermil" => [-1, "permil"], "dpsi" => [-1, "psi"],
1350
- "drad" => [-1, "rad"], "ds" => [-1, "s"], "dsr" => [-1, "sr"],
1351
- "dt" => [-1, "t"], "dynes" => [0, "dyne"], "dyr" => [-1, "yr"],
1352
- "ergs" => [0, "erg"], "exaCelsius" => [18, "Celsius"],
1353
- "exaFahrenheit" => [18, "Fahrenheit"],
1354
- "exaJulian_year" => [18, "Julian_year"],
1355
- "exaPascal" => [18, "Pascal"], "exaacre" => [18, "acre"],
1356
- "exaampere" => [18, "ampere"], "exaangstrom" => [18, "angstrom"],
1357
- "exaangular_degree" => [18, "angular_degree"],
1358
- "exaangular_minute" => [18, "angular_minute"],
1359
- "exaangular_second" => [18, "angular_second"],
1360
- "exaare" => [18, "are"], "exaatmosphere" => [18, "atmosphere"],
1361
- "exacalorie" => [18, "calorie"], "exacelsius" => [18, "celsius"],
1362
- "exacentigrade" => [18, "centigrade"],
1363
- "exacentury" => [18, "century"], "exachain" => [18, "chain"],
1364
- "exacommon_year" => [18, "common_year"],
1365
- "exacoulomb" => [18, "coulomb"], "exaday" => [18, "day"],
1366
- "exadegK" => [18, "degK"], "exadeg_K" => [18, "deg_K"],
1367
- "exadegree" => [18, "degree"], "exadegreeK" => [18, "degreeK"],
1368
- "exadyne" => [18, "dyne"], "exaerg" => [18, "erg"],
1369
- "exafahrenheit" => [18, "fahrenheit"], "exafarad" => [18, "farad"],
1370
- "exafermi" => [18, "fermi"], "exagal" => [18, "gal"],
1371
- "exagauss" => [18, "gauss"], "exagram" => [18, "gram"],
1372
- "exahectare" => [18, "hectare"], "exahertz" => [18, "hertz"],
1373
- "exahour" => [18, "hour"], "exainch" => [18, "inch"],
1374
- "exajoule" => [18, "joule"], "exakelvin" => [18, "kelvin"],
1375
- "exakilogram" => [18, "kilogram"], "exaknot" => [18, "knot"],
1376
- "exalitre" => [18, "litre"], "exameter" => [18, "meter"],
1377
- "exametre" => [18, "metre"], "examicron" => [18, "micron"],
1378
- "examile" => [18, "mile"], "examillibar" => [18, "millibar"],
1379
- "examinute" => [18, "minute"],
1380
- "examinute_angle" => [18, "minute_angle"], "examole" => [18, "mole"],
1381
- "examonth" => [18, "month"], "exanewton" => [18, "newton"],
1382
- "exaounce" => [18, "ounce"], "exaparsec" => [18, "parsec"],
1383
- "exapascal" => [18, "pascal"], "exapentad" => [18, "pentad"],
1384
- "exapoise" => [18, "poise"], "exapound" => [18, "pound"],
1385
- "exaradian" => [18, "radian"], "exasecond" => [18, "second"],
1386
- "exasecond_angle" => [18, "second_angle"],
1387
- "exasteradian" => [18, "steradian"], "exastokes" => [18, "stokes"],
1388
- "exatesla" => [18, "tesla"], "exaton" => [18, "ton"],
1389
- "exatonne" => [18, "tonne"], "exatorr" => [18, "torr"],
1390
- "exavolt" => [18, "volt"], "exawatt" => [18, "watt"],
1391
- "exaweber" => [18, "weber"], "exayard" => [18, "yard"],
1392
- "exayd" => [18, "yd"], "exayear" => [18, "year"],
1393
- "f%" => [-15, "%"], "fA" => [-15, "A"], "fAu" => [-15, "Au"],
1394
- "fBq" => [-15, "Bq"], "fC" => [-15, "C"], "fF" => [-15, "F"],
1395
- "fG" => [-15, "G"], "fGal" => [-15, "Gal"], "fGy" => [-15, "Gy"],
1396
- "fH" => [-15, "H"], "fHg" => [-15, "Hg"], "fHz" => [-15, "Hz"],
1397
- "fJ" => [-15, "J"], "fK" => [-15, "K"], "fL" => [-15, "L"],
1398
- "fN" => [-15, "N"], "fP" => [-15, "P"], "fPa" => [-15, "Pa"],
1399
- "fS" => [-15, "S"], "fSt" => [-15, "St"], "fSv" => [-15, "Sv"],
1400
- "fT" => [-15, "T"], "fV" => [-15, "V"], "fW" => [-15, "W"],
1401
- "fWb" => [-15, "Wb"], "fa" => [-15, "a"], "fac" => [-15, "ac"],
1402
- "fahrenheits" => [0, "fahrenheit"], "farads" => [0, "farad"],
1403
- "fatm" => [-15, "atm"], "fbar" => [-15, "bar"],
1404
- "fcal" => [-15, "cal"],
1405
- "fconventional_mercury" => [-15, "conventional_mercury"],
1406
- "fd" => [-15, "d"], "fdegC" => [-15, "degC"],
1407
- "fdegF" => [-15, "degF"], "fdeg_C" => [-15, "deg_C"],
1408
- "fdeg_F" => [-15, "deg_F"], "fdegreeC" => [-15, "degreeC"],
1409
- "fdegreeF" => [-15, "degreeF"], "fdegree_C" => [-15, "degree_C"],
1410
- "fdegree_E" => [-15, "degree_E"], "fdegree_F" => [-15, "degree_F"],
1411
- "fdegree_N" => [-15, "degree_N"], "fdegree_R" => [-15, "degree_R"],
1412
- "fdegree_S" => [-15, "degree_S"], "fdegree_W" => [-15, "degree_W"],
1413
- "fdegree_c" => [-15, "degree_c"],
1414
- "fdegree_east" => [-15, "degree_east"],
1415
- "fdegree_f" => [-15, "degree_f"],
1416
- "fdegree_north" => [-15, "degree_north"],
1417
- "fdegree_south" => [-15, "degree_south"],
1418
- "fdegree_west" => [-15, "degree_west"],
1419
- "fdegrees_east" => [-15, "degrees_east"],
1420
- "fdegrees_north" => [-15, "degrees_north"],
1421
- "fdegrees_south" => [-15, "degrees_south"],
1422
- "fdegrees_west" => [-15, "degrees_west"], "fdyn" => [-15, "dyn"],
1423
- "femtoCelsius" => [-15, "Celsius"],
1424
- "femtoFahrenheit" => [-15, "Fahrenheit"],
1425
- "femtoJulian_year" => [-15, "Julian_year"],
1426
- "femtoPascal" => [-15, "Pascal"], "femtoacre" => [-15, "acre"],
1427
- "femtoampere" => [-15, "ampere"],
1428
- "femtoangstrom" => [-15, "angstrom"],
1429
- "femtoangular_degree" => [-15, "angular_degree"],
1430
- "femtoangular_minute" => [-15, "angular_minute"],
1431
- "femtoangular_second" => [-15, "angular_second"],
1432
- "femtoare" => [-15, "are"], "femtoatmosphere" => [-15, "atmosphere"],
1433
- "femtocalorie" => [-15, "calorie"],
1434
- "femtocelsius" => [-15, "celsius"],
1435
- "femtocentigrade" => [-15, "centigrade"],
1436
- "femtocentury" => [-15, "century"], "femtochain" => [-15, "chain"],
1437
- "femtocommon_year" => [-15, "common_year"],
1438
- "femtocoulomb" => [-15, "coulomb"], "femtoday" => [-15, "day"],
1439
- "femtodegK" => [-15, "degK"], "femtodeg_K" => [-15, "deg_K"],
1440
- "femtodegree" => [-15, "degree"], "femtodegreeK" => [-15, "degreeK"],
1441
- "femtodyne" => [-15, "dyne"], "femtoerg" => [-15, "erg"],
1442
- "femtofahrenheit" => [-15, "fahrenheit"],
1443
- "femtofarad" => [-15, "farad"], "femtofermi" => [-15, "fermi"],
1444
- "femtogal" => [-15, "gal"], "femtogauss" => [-15, "gauss"],
1445
- "femtogram" => [-15, "gram"], "femtohectare" => [-15, "hectare"],
1446
- "femtohertz" => [-15, "hertz"], "femtohour" => [-15, "hour"],
1447
- "femtoinch" => [-15, "inch"], "femtojoule" => [-15, "joule"],
1448
- "femtokelvin" => [-15, "kelvin"],
1449
- "femtokilogram" => [-15, "kilogram"], "femtoknot" => [-15, "knot"],
1450
- "femtolitre" => [-15, "litre"], "femtometer" => [-15, "meter"],
1451
- "femtometre" => [-15, "metre"], "femtomicron" => [-15, "micron"],
1452
- "femtomile" => [-15, "mile"], "femtomillibar" => [-15, "millibar"],
1453
- "femtominute" => [-15, "minute"],
1454
- "femtominute_angle" => [-15, "minute_angle"],
1455
- "femtomole" => [-15, "mole"], "femtomonth" => [-15, "month"],
1456
- "femtonewton" => [-15, "newton"], "femtoounce" => [-15, "ounce"],
1457
- "femtoparsec" => [-15, "parsec"], "femtopascal" => [-15, "pascal"],
1458
- "femtopentad" => [-15, "pentad"], "femtopoise" => [-15, "poise"],
1459
- "femtopound" => [-15, "pound"], "femtoradian" => [-15, "radian"],
1460
- "femtosecond" => [-15, "second"],
1461
- "femtosecond_angle" => [-15, "second_angle"],
1462
- "femtosteradian" => [-15, "steradian"],
1463
- "femtostokes" => [-15, "stokes"], "femtotesla" => [-15, "tesla"],
1464
- "femtoton" => [-15, "ton"], "femtotonne" => [-15, "tonne"],
1465
- "femtotorr" => [-15, "torr"], "femtovolt" => [-15, "volt"],
1466
- "femtowatt" => [-15, "watt"], "femtoweber" => [-15, "weber"],
1467
- "femtoyard" => [-15, "yard"], "femtoyd" => [-15, "yd"],
1468
- "femtoyear" => [-15, "year"], "ferg" => [-15, "erg"],
1469
- "fermis" => [0, "fermi"], "fforce" => [-15, "force"],
1470
- "fg" => [-15, "g"], "fgravity" => [-15, "gravity"],
1471
- "fh" => [-15, "h"], "fhg" => [-15, "hg"], "fhr" => [-15, "hr"],
1472
- "fin" => [-15, "in"], "fkg" => [-15, "kg"], "fkgf" => [-15, "kgf"],
1473
- "fkph" => [-15, "kph"], "flb" => [-15, "lb"], "flm" => [-15, "lm"],
1474
- "flx" => [-15, "lx"], "fly" => [-15, "ly"], "fm" => [-15, "m"],
1475
- "fmb" => [-15, "mb"], "fmercury" => [-15, "mercury"],
1476
- "fmgal" => [-15, "mgal"], "fmin" => [-15, "min"],
1477
- "fmol" => [-15, "mol"], "fmon" => [-15, "mon"],
1478
- "fmph" => [-15, "mph"], "fohm" => [-15, "ohm"],
1479
- "foz" => [-15, "oz"], "fpc" => [-15, "pc"],
1480
- "fpercent" => [-15, "percent"], "fpermil" => [-15, "permil"],
1481
- "fpsi" => [-15, "psi"], "frad" => [-15, "rad"], "fs" => [-15, "s"],
1482
- "fsr" => [-15, "sr"], "ft" => [-15, "t"], "fyr" => [-15, "yr"],
1483
- "gals" => [0, "gal"], "gausses" => [0, "gauss"],
1484
- "gigaCelsius" => [9, "Celsius"],
1485
- "gigaFahrenheit" => [9, "Fahrenheit"],
1486
- "gigaJulian_year" => [9, "Julian_year"],
1487
- "gigaPascal" => [9, "Pascal"], "gigaacre" => [9, "acre"],
1488
- "gigaampere" => [9, "ampere"], "gigaangstrom" => [9, "angstrom"],
1489
- "gigaangular_degree" => [9, "angular_degree"],
1490
- "gigaangular_minute" => [9, "angular_minute"],
1491
- "gigaangular_second" => [9, "angular_second"],
1492
- "gigaare" => [9, "are"], "gigaatmosphere" => [9, "atmosphere"],
1493
- "gigacalorie" => [9, "calorie"], "gigacelsius" => [9, "celsius"],
1494
- "gigacentigrade" => [9, "centigrade"],
1495
- "gigacentury" => [9, "century"], "gigachain" => [9, "chain"],
1496
- "gigacommon_year" => [9, "common_year"],
1497
- "gigacoulomb" => [9, "coulomb"], "gigaday" => [9, "day"],
1498
- "gigadegK" => [9, "degK"], "gigadeg_K" => [9, "deg_K"],
1499
- "gigadegree" => [9, "degree"], "gigadegreeK" => [9, "degreeK"],
1500
- "gigadyne" => [9, "dyne"], "gigaerg" => [9, "erg"],
1501
- "gigafahrenheit" => [9, "fahrenheit"], "gigafarad" => [9, "farad"],
1502
- "gigafermi" => [9, "fermi"], "gigagal" => [9, "gal"],
1503
- "gigagauss" => [9, "gauss"], "gigagram" => [9, "gram"],
1504
- "gigahectare" => [9, "hectare"], "gigahertz" => [9, "hertz"],
1505
- "gigahour" => [9, "hour"], "gigainch" => [9, "inch"],
1506
- "gigajoule" => [9, "joule"], "gigakelvin" => [9, "kelvin"],
1507
- "gigakilogram" => [9, "kilogram"], "gigaknot" => [9, "knot"],
1508
- "gigalitre" => [9, "litre"], "gigameter" => [9, "meter"],
1509
- "gigametre" => [9, "metre"], "gigamicron" => [9, "micron"],
1510
- "gigamile" => [9, "mile"], "gigamillibar" => [9, "millibar"],
1511
- "gigaminute" => [9, "minute"],
1512
- "gigaminute_angle" => [9, "minute_angle"], "gigamole" => [9, "mole"],
1513
- "gigamonth" => [9, "month"], "giganewton" => [9, "newton"],
1514
- "gigaounce" => [9, "ounce"], "gigaparsec" => [9, "parsec"],
1515
- "gigapascal" => [9, "pascal"], "gigapentad" => [9, "pentad"],
1516
- "gigapoise" => [9, "poise"], "gigapound" => [9, "pound"],
1517
- "gigaradian" => [9, "radian"], "gigasecond" => [9, "second"],
1518
- "gigasecond_angle" => [9, "second_angle"],
1519
- "gigasteradian" => [9, "steradian"], "gigastokes" => [9, "stokes"],
1520
- "gigatesla" => [9, "tesla"], "gigaton" => [9, "ton"],
1521
- "gigatonne" => [9, "tonne"], "gigatorr" => [9, "torr"],
1522
- "gigavolt" => [9, "volt"], "gigawatt" => [9, "watt"],
1523
- "gigaweber" => [9, "weber"], "gigayard" => [9, "yard"],
1524
- "gigayd" => [9, "yd"], "gigayear" => [9, "year"],
1525
- "grams" => [0, "gram"], "h%" => [2, "%"], "hA" => [2, "A"],
1526
- "hAu" => [2, "Au"], "hBq" => [2, "Bq"], "hC" => [2, "C"],
1527
- "hF" => [2, "F"], "hG" => [2, "G"], "hGal" => [2, "Gal"],
1528
- "hGy" => [2, "Gy"], "hH" => [2, "H"], "hHg" => [2, "Hg"],
1529
- "hHz" => [2, "Hz"], "hJ" => [2, "J"], "hK" => [2, "K"],
1530
- "hL" => [2, "L"], "hN" => [2, "N"], "hP" => [2, "P"],
1531
- "hPa" => [2, "Pa"], "hS" => [2, "S"], "hSt" => [2, "St"],
1532
- "hSv" => [2, "Sv"], "hT" => [2, "T"], "hV" => [2, "V"],
1533
- "hW" => [2, "W"], "hWb" => [2, "Wb"], "ha" => [2, "a"],
1534
- "hac" => [2, "ac"], "hatm" => [2, "atm"], "hbar" => [2, "bar"],
1535
- "hcal" => [2, "cal"],
1536
- "hconventional_mercury" => [2, "conventional_mercury"],
1537
- "hd" => [2, "d"], "hdegC" => [2, "degC"], "hdegF" => [2, "degF"],
1538
- "hdeg_C" => [2, "deg_C"], "hdeg_F" => [2, "deg_F"],
1539
- "hdegreeC" => [2, "degreeC"], "hdegreeF" => [2, "degreeF"],
1540
- "hdegree_C" => [2, "degree_C"], "hdegree_E" => [2, "degree_E"],
1541
- "hdegree_F" => [2, "degree_F"], "hdegree_N" => [2, "degree_N"],
1542
- "hdegree_R" => [2, "degree_R"], "hdegree_S" => [2, "degree_S"],
1543
- "hdegree_W" => [2, "degree_W"], "hdegree_c" => [2, "degree_c"],
1544
- "hdegree_east" => [2, "degree_east"], "hdegree_f" => [2, "degree_f"],
1545
- "hdegree_north" => [2, "degree_north"],
1546
- "hdegree_south" => [2, "degree_south"],
1547
- "hdegree_west" => [2, "degree_west"],
1548
- "hdegrees_east" => [2, "degrees_east"],
1549
- "hdegrees_north" => [2, "degrees_north"],
1550
- "hdegrees_south" => [2, "degrees_south"],
1551
- "hdegrees_west" => [2, "degrees_west"], "hdyn" => [2, "dyn"],
1552
- "hectares" => [0, "hectare"], "hectoCelsius" => [2, "Celsius"],
1553
- "hectoFahrenheit" => [2, "Fahrenheit"],
1554
- "hectoJulian_year" => [2, "Julian_year"],
1555
- "hectoPascal" => [2, "Pascal"], "hectoacre" => [2, "acre"],
1556
- "hectoampere" => [2, "ampere"], "hectoangstrom" => [2, "angstrom"],
1557
- "hectoangular_degree" => [2, "angular_degree"],
1558
- "hectoangular_minute" => [2, "angular_minute"],
1559
- "hectoangular_second" => [2, "angular_second"],
1560
- "hectoare" => [2, "are"], "hectoatmosphere" => [2, "atmosphere"],
1561
- "hectocalorie" => [2, "calorie"], "hectocelsius" => [2, "celsius"],
1562
- "hectocentigrade" => [2, "centigrade"],
1563
- "hectocentury" => [2, "century"], "hectochain" => [2, "chain"],
1564
- "hectocommon_year" => [2, "common_year"],
1565
- "hectocoulomb" => [2, "coulomb"], "hectoday" => [2, "day"],
1566
- "hectodegK" => [2, "degK"], "hectodeg_K" => [2, "deg_K"],
1567
- "hectodegree" => [2, "degree"], "hectodegreeK" => [2, "degreeK"],
1568
- "hectodyne" => [2, "dyne"], "hectoerg" => [2, "erg"],
1569
- "hectofahrenheit" => [2, "fahrenheit"], "hectofarad" => [2, "farad"],
1570
- "hectofermi" => [2, "fermi"], "hectogal" => [2, "gal"],
1571
- "hectogauss" => [2, "gauss"], "hectogram" => [2, "gram"],
1572
- "hectohectare" => [2, "hectare"], "hectohertz" => [2, "hertz"],
1573
- "hectohour" => [2, "hour"], "hectoinch" => [2, "inch"],
1574
- "hectojoule" => [2, "joule"], "hectokelvin" => [2, "kelvin"],
1575
- "hectokilogram" => [2, "kilogram"], "hectoknot" => [2, "knot"],
1576
- "hectolitre" => [2, "litre"], "hectometer" => [2, "meter"],
1577
- "hectometre" => [2, "metre"], "hectomicron" => [2, "micron"],
1578
- "hectomile" => [2, "mile"], "hectomillibar" => [2, "millibar"],
1579
- "hectominute" => [2, "minute"],
1580
- "hectominute_angle" => [2, "minute_angle"],
1581
- "hectomole" => [2, "mole"], "hectomonth" => [2, "month"],
1582
- "hectonewton" => [2, "newton"], "hectoounce" => [2, "ounce"],
1583
- "hectoparsec" => [2, "parsec"], "hectopascal" => [2, "pascal"],
1584
- "hectopentad" => [2, "pentad"], "hectopoise" => [2, "poise"],
1585
- "hectopound" => [2, "pound"], "hectoradian" => [2, "radian"],
1586
- "hectosecond" => [2, "second"],
1587
- "hectosecond_angle" => [2, "second_angle"],
1588
- "hectosteradian" => [2, "steradian"], "hectostokes" => [2, "stokes"],
1589
- "hectotesla" => [2, "tesla"], "hectoton" => [2, "ton"],
1590
- "hectotonne" => [2, "tonne"], "hectotorr" => [2, "torr"],
1591
- "hectovolt" => [2, "volt"], "hectowatt" => [2, "watt"],
1592
- "hectoweber" => [2, "weber"], "hectoyard" => [2, "yard"],
1593
- "hectoyd" => [2, "yd"], "hectoyear" => [2, "year"],
1594
- "herg" => [2, "erg"], "hertzes" => [0, "hertz"],
1595
- "hforce" => [2, "force"], "hg" => [2, "g"],
1596
- "hgravity" => [2, "gravity"], "hh" => [2, "h"], "hhg" => [2, "hg"],
1597
- "hhr" => [2, "hr"], "hin" => [2, "in"], "hkg" => [2, "kg"],
1598
- "hkgf" => [2, "kgf"], "hkph" => [2, "kph"], "hlb" => [2, "lb"],
1599
- "hlm" => [2, "lm"], "hlx" => [2, "lx"], "hly" => [2, "ly"],
1600
- "hm" => [2, "m"], "hmb" => [2, "mb"], "hmercury" => [2, "mercury"],
1601
- "hmgal" => [2, "mgal"], "hmin" => [2, "min"], "hmol" => [2, "mol"],
1602
- "hmon" => [2, "mon"], "hmph" => [2, "mph"], "hohm" => [2, "ohm"],
1603
- "hours" => [0, "hour"], "hoz" => [2, "oz"], "hpc" => [2, "pc"],
1604
- "hpercent" => [2, "percent"], "hpermil" => [2, "permil"],
1605
- "hpsi" => [2, "psi"], "hrad" => [2, "rad"], "hs" => [2, "s"],
1606
- "hsr" => [2, "sr"], "ht" => [2, "t"], "hyr" => [2, "yr"],
1607
- "inchs" => [0, "inch"], "joules" => [0, "joule"], "k%" => [3, "%"],
1608
- "kA" => [3, "A"], "kAu" => [3, "Au"], "kBq" => [3, "Bq"],
1609
- "kC" => [3, "C"], "kF" => [3, "F"], "kG" => [3, "G"],
1610
- "kGal" => [3, "Gal"], "kGy" => [3, "Gy"], "kH" => [3, "H"],
1611
- "kHg" => [3, "Hg"], "kHz" => [3, "Hz"], "kJ" => [3, "J"],
1612
- "kK" => [3, "K"], "kL" => [3, "L"], "kN" => [3, "N"],
1613
- "kP" => [3, "P"], "kPa" => [3, "Pa"], "kS" => [3, "S"],
1614
- "kSt" => [3, "St"], "kSv" => [3, "Sv"], "kT" => [3, "T"],
1615
- "kV" => [3, "V"], "kW" => [3, "W"], "kWb" => [3, "Wb"],
1616
- "ka" => [3, "a"], "kac" => [3, "ac"], "katm" => [3, "atm"],
1617
- "kbar" => [3, "bar"], "kcal" => [3, "cal"],
1618
- "kconventional_mercury" => [3, "conventional_mercury"],
1619
- "kd" => [3, "d"], "kdegC" => [3, "degC"], "kdegF" => [3, "degF"],
1620
- "kdeg_C" => [3, "deg_C"], "kdeg_F" => [3, "deg_F"],
1621
- "kdegreeC" => [3, "degreeC"], "kdegreeF" => [3, "degreeF"],
1622
- "kdegree_C" => [3, "degree_C"], "kdegree_E" => [3, "degree_E"],
1623
- "kdegree_F" => [3, "degree_F"], "kdegree_N" => [3, "degree_N"],
1624
- "kdegree_R" => [3, "degree_R"], "kdegree_S" => [3, "degree_S"],
1625
- "kdegree_W" => [3, "degree_W"], "kdegree_c" => [3, "degree_c"],
1626
- "kdegree_east" => [3, "degree_east"], "kdegree_f" => [3, "degree_f"],
1627
- "kdegree_north" => [3, "degree_north"],
1628
- "kdegree_south" => [3, "degree_south"],
1629
- "kdegree_west" => [3, "degree_west"],
1630
- "kdegrees_east" => [3, "degrees_east"],
1631
- "kdegrees_north" => [3, "degrees_north"],
1632
- "kdegrees_south" => [3, "degrees_south"],
1633
- "kdegrees_west" => [3, "degrees_west"], "kdyn" => [3, "dyn"],
1634
- "kelvins" => [0, "kelvin"], "kerg" => [3, "erg"],
1635
- "kforce" => [3, "force"], "kgravity" => [3, "gravity"],
1636
- "kh" => [3, "h"], "khg" => [3, "hg"], "khr" => [3, "hr"],
1637
- "kiloCelsius" => [3, "Celsius"],
1638
- "kiloFahrenheit" => [3, "Fahrenheit"],
1639
- "kiloJulian_year" => [3, "Julian_year"],
1640
- "kiloPascal" => [3, "Pascal"], "kiloacre" => [3, "acre"],
1641
- "kiloampere" => [3, "ampere"], "kiloangstrom" => [3, "angstrom"],
1642
- "kiloangular_degree" => [3, "angular_degree"],
1643
- "kiloangular_minute" => [3, "angular_minute"],
1644
- "kiloangular_second" => [3, "angular_second"],
1645
- "kiloare" => [3, "are"], "kiloatmosphere" => [3, "atmosphere"],
1646
- "kilocalorie" => [3, "calorie"], "kilocelsius" => [3, "celsius"],
1647
- "kilocentigrade" => [3, "centigrade"],
1648
- "kilocentury" => [3, "century"], "kilochain" => [3, "chain"],
1649
- "kilocommon_year" => [3, "common_year"],
1650
- "kilocoulomb" => [3, "coulomb"], "kiloday" => [3, "day"],
1651
- "kilodegK" => [3, "degK"], "kilodeg_K" => [3, "deg_K"],
1652
- "kilodegree" => [3, "degree"], "kilodegreeK" => [3, "degreeK"],
1653
- "kilodyne" => [3, "dyne"], "kiloerg" => [3, "erg"],
1654
- "kilofahrenheit" => [3, "fahrenheit"], "kilofarad" => [3, "farad"],
1655
- "kilofermi" => [3, "fermi"], "kilogal" => [3, "gal"],
1656
- "kilogauss" => [3, "gauss"], "kilogram" => [3, "gram"],
1657
- "kilograms" => [0, "kilogram"], "kilohectare" => [3, "hectare"],
1658
- "kilohertz" => [3, "hertz"], "kilohour" => [3, "hour"],
1659
- "kiloinch" => [3, "inch"], "kilojoule" => [3, "joule"],
1660
- "kilokelvin" => [3, "kelvin"], "kilokilogram" => [3, "kilogram"],
1661
- "kiloknot" => [3, "knot"], "kilolitre" => [3, "litre"],
1662
- "kilometer" => [3, "meter"], "kilometre" => [3, "metre"],
1663
- "kilomicron" => [3, "micron"], "kilomile" => [3, "mile"],
1664
- "kilomillibar" => [3, "millibar"], "kilominute" => [3, "minute"],
1665
- "kilominute_angle" => [3, "minute_angle"], "kilomole" => [3, "mole"],
1666
- "kilomonth" => [3, "month"], "kilonewton" => [3, "newton"],
1667
- "kiloounce" => [3, "ounce"], "kiloparsec" => [3, "parsec"],
1668
- "kilopascal" => [3, "pascal"], "kilopentad" => [3, "pentad"],
1669
- "kilopoise" => [3, "poise"], "kilopound" => [3, "pound"],
1670
- "kiloradian" => [3, "radian"], "kilosecond" => [3, "second"],
1671
- "kilosecond_angle" => [3, "second_angle"],
1672
- "kilosteradian" => [3, "steradian"], "kilostokes" => [3, "stokes"],
1673
- "kilotesla" => [3, "tesla"], "kiloton" => [3, "ton"],
1674
- "kilotonne" => [3, "tonne"], "kilotorr" => [3, "torr"],
1675
- "kilovolt" => [3, "volt"], "kilowatt" => [3, "watt"],
1676
- "kiloweber" => [3, "weber"], "kiloyard" => [3, "yard"],
1677
- "kiloyd" => [3, "yd"], "kiloyear" => [3, "year"],
1678
- "kin" => [3, "in"], "kkg" => [3, "kg"], "kkgf" => [3, "kgf"],
1679
- "kkph" => [3, "kph"], "klb" => [3, "lb"], "klm" => [3, "lm"],
1680
- "klx" => [3, "lx"], "kly" => [3, "ly"], "km" => [3, "m"],
1681
- "kmb" => [3, "mb"], "kmercury" => [3, "mercury"],
1682
- "kmgal" => [3, "mgal"], "kmin" => [3, "min"], "kmol" => [3, "mol"],
1683
- "kmon" => [3, "mon"], "kmph" => [3, "mph"], "knots" => [0, "knot"],
1684
- "kohm" => [3, "ohm"], "koz" => [3, "oz"], "kpc" => [3, "pc"],
1685
- "kpercent" => [3, "percent"], "kpermil" => [3, "permil"],
1686
- "kpsi" => [3, "psi"], "krad" => [3, "rad"], "ks" => [3, "s"],
1687
- "ksr" => [3, "sr"], "kt" => [3, "t"], "kyr" => [3, "yr"],
1688
- "litres" => [0, "litre"], "m%" => [-3, "%"], "mA" => [-3, "A"],
1689
- "mAu" => [-3, "Au"], "mBq" => [-3, "Bq"], "mC" => [-3, "C"],
1690
- "mF" => [-3, "F"], "mG" => [-3, "G"], "mGal" => [-3, "Gal"],
1691
- "mGy" => [-3, "Gy"], "mH" => [-3, "H"], "mHg" => [-3, "Hg"],
1692
- "mHz" => [-3, "Hz"], "mJ" => [-3, "J"], "mK" => [-3, "K"],
1693
- "mL" => [-3, "L"], "mN" => [-3, "N"], "mP" => [-3, "P"],
1694
- "mPa" => [-3, "Pa"], "mS" => [-3, "S"], "mSt" => [-3, "St"],
1695
- "mSv" => [-3, "Sv"], "mT" => [-3, "T"], "mV" => [-3, "V"],
1696
- "mW" => [-3, "W"], "mWb" => [-3, "Wb"], "ma" => [-3, "a"],
1697
- "mac" => [-3, "ac"], "matm" => [-3, "atm"], "mbar" => [-3, "bar"],
1698
- "mcal" => [-3, "cal"],
1699
- "mconventional_mercury" => [-3, "conventional_mercury"],
1700
- "md" => [-3, "d"], "mdegC" => [-3, "degC"], "mdegF" => [-3, "degF"],
1701
- "mdeg_C" => [-3, "deg_C"], "mdeg_F" => [-3, "deg_F"],
1702
- "mdegreeC" => [-3, "degreeC"], "mdegreeF" => [-3, "degreeF"],
1703
- "mdegree_C" => [-3, "degree_C"], "mdegree_E" => [-3, "degree_E"],
1704
- "mdegree_F" => [-3, "degree_F"], "mdegree_N" => [-3, "degree_N"],
1705
- "mdegree_R" => [-3, "degree_R"], "mdegree_S" => [-3, "degree_S"],
1706
- "mdegree_W" => [-3, "degree_W"], "mdegree_c" => [-3, "degree_c"],
1707
- "mdegree_east" => [-3, "degree_east"],
1708
- "mdegree_f" => [-3, "degree_f"],
1709
- "mdegree_north" => [-3, "degree_north"],
1710
- "mdegree_south" => [-3, "degree_south"],
1711
- "mdegree_west" => [-3, "degree_west"],
1712
- "mdegrees_east" => [-3, "degrees_east"],
1713
- "mdegrees_north" => [-3, "degrees_north"],
1714
- "mdegrees_south" => [-3, "degrees_south"],
1715
- "mdegrees_west" => [-3, "degrees_west"], "mdyn" => [-3, "dyn"],
1716
- "megaCelsius" => [6, "Celsius"],
1717
- "megaFahrenheit" => [6, "Fahrenheit"],
1718
- "megaJulian_year" => [6, "Julian_year"],
1719
- "megaPascal" => [6, "Pascal"], "megaacre" => [6, "acre"],
1720
- "megaampere" => [6, "ampere"], "megaangstrom" => [6, "angstrom"],
1721
- "megaangular_degree" => [6, "angular_degree"],
1722
- "megaangular_minute" => [6, "angular_minute"],
1723
- "megaangular_second" => [6, "angular_second"],
1724
- "megaare" => [6, "are"], "megaatmosphere" => [6, "atmosphere"],
1725
- "megacalorie" => [6, "calorie"], "megacelsius" => [6, "celsius"],
1726
- "megacentigrade" => [6, "centigrade"],
1727
- "megacentury" => [6, "century"], "megachain" => [6, "chain"],
1728
- "megacommon_year" => [6, "common_year"],
1729
- "megacoulomb" => [6, "coulomb"], "megaday" => [6, "day"],
1730
- "megadegK" => [6, "degK"], "megadeg_K" => [6, "deg_K"],
1731
- "megadegree" => [6, "degree"], "megadegreeK" => [6, "degreeK"],
1732
- "megadyne" => [6, "dyne"], "megaerg" => [6, "erg"],
1733
- "megafahrenheit" => [6, "fahrenheit"], "megafarad" => [6, "farad"],
1734
- "megafermi" => [6, "fermi"], "megagal" => [6, "gal"],
1735
- "megagauss" => [6, "gauss"], "megagram" => [6, "gram"],
1736
- "megahectare" => [6, "hectare"], "megahertz" => [6, "hertz"],
1737
- "megahour" => [6, "hour"], "megainch" => [6, "inch"],
1738
- "megajoule" => [6, "joule"], "megakelvin" => [6, "kelvin"],
1739
- "megakilogram" => [6, "kilogram"], "megaknot" => [6, "knot"],
1740
- "megalitre" => [6, "litre"], "megameter" => [6, "meter"],
1741
- "megametre" => [6, "metre"], "megamicron" => [6, "micron"],
1742
- "megamile" => [6, "mile"], "megamillibar" => [6, "millibar"],
1743
- "megaminute" => [6, "minute"],
1744
- "megaminute_angle" => [6, "minute_angle"], "megamole" => [6, "mole"],
1745
- "megamonth" => [6, "month"], "meganewton" => [6, "newton"],
1746
- "megaounce" => [6, "ounce"], "megaparsec" => [6, "parsec"],
1747
- "megapascal" => [6, "pascal"], "megapentad" => [6, "pentad"],
1748
- "megapoise" => [6, "poise"], "megapound" => [6, "pound"],
1749
- "megaradian" => [6, "radian"], "megasecond" => [6, "second"],
1750
- "megasecond_angle" => [6, "second_angle"],
1751
- "megasteradian" => [6, "steradian"], "megastokes" => [6, "stokes"],
1752
- "megatesla" => [6, "tesla"], "megaton" => [6, "ton"],
1753
- "megatonne" => [6, "tonne"], "megatorr" => [6, "torr"],
1754
- "megavolt" => [6, "volt"], "megawatt" => [6, "watt"],
1755
- "megaweber" => [6, "weber"], "megayard" => [6, "yard"],
1756
- "megayd" => [6, "yd"], "megayear" => [6, "year"],
1757
- "merg" => [-3, "erg"], "meters" => [0, "meter"],
1758
- "metres" => [0, "metre"], "mforce" => [-3, "force"],
1759
- "mg" => [-3, "g"], "mgravity" => [-3, "gravity"], "mh" => [-3, "h"],
1760
- "mhg" => [-3, "hg"], "mhr" => [-3, "hr"],
1761
- "microCelsius" => [-6, "Celsius"],
1762
- "microFahrenheit" => [-6, "Fahrenheit"],
1763
- "microJulian_year" => [-6, "Julian_year"],
1764
- "microPascal" => [-6, "Pascal"], "microacre" => [-6, "acre"],
1765
- "microampere" => [-6, "ampere"], "microangstrom" => [-6, "angstrom"],
1766
- "microangular_degree" => [-6, "angular_degree"],
1767
- "microangular_minute" => [-6, "angular_minute"],
1768
- "microangular_second" => [-6, "angular_second"],
1769
- "microare" => [-6, "are"], "microatmosphere" => [-6, "atmosphere"],
1770
- "microcalorie" => [-6, "calorie"], "microcelsius" => [-6, "celsius"],
1771
- "microcentigrade" => [-6, "centigrade"],
1772
- "microcentury" => [-6, "century"], "microchain" => [-6, "chain"],
1773
- "microcommon_year" => [-6, "common_year"],
1774
- "microcoulomb" => [-6, "coulomb"], "microday" => [-6, "day"],
1775
- "microdegK" => [-6, "degK"], "microdeg_K" => [-6, "deg_K"],
1776
- "microdegree" => [-6, "degree"], "microdegreeK" => [-6, "degreeK"],
1777
- "microdyne" => [-6, "dyne"], "microerg" => [-6, "erg"],
1778
- "microfahrenheit" => [-6, "fahrenheit"],
1779
- "microfarad" => [-6, "farad"], "microfermi" => [-6, "fermi"],
1780
- "microgal" => [-6, "gal"], "microgauss" => [-6, "gauss"],
1781
- "microgram" => [-6, "gram"], "microhectare" => [-6, "hectare"],
1782
- "microhertz" => [-6, "hertz"], "microhour" => [-6, "hour"],
1783
- "microinch" => [-6, "inch"], "microjoule" => [-6, "joule"],
1784
- "microkelvin" => [-6, "kelvin"], "microkilogram" => [-6, "kilogram"],
1785
- "microknot" => [-6, "knot"], "microlitre" => [-6, "litre"],
1786
- "micrometer" => [-6, "meter"], "micrometre" => [-6, "metre"],
1787
- "micromicron" => [-6, "micron"], "micromile" => [-6, "mile"],
1788
- "micromillibar" => [-6, "millibar"], "microminute" => [-6, "minute"],
1789
- "microminute_angle" => [-6, "minute_angle"],
1790
- "micromole" => [-6, "mole"], "micromonth" => [-6, "month"],
1791
- "micronewton" => [-6, "newton"], "microns" => [0, "micron"],
1792
- "microounce" => [-6, "ounce"], "microparsec" => [-6, "parsec"],
1793
- "micropascal" => [-6, "pascal"], "micropentad" => [-6, "pentad"],
1794
- "micropoise" => [-6, "poise"], "micropound" => [-6, "pound"],
1795
- "microradian" => [-6, "radian"], "microsecond" => [-6, "second"],
1796
- "microsecond_angle" => [-6, "second_angle"],
1797
- "microsteradian" => [-6, "steradian"],
1798
- "microstokes" => [-6, "stokes"], "microtesla" => [-6, "tesla"],
1799
- "microton" => [-6, "ton"], "microtonne" => [-6, "tonne"],
1800
- "microtorr" => [-6, "torr"], "microvolt" => [-6, "volt"],
1801
- "microwatt" => [-6, "watt"], "microweber" => [-6, "weber"],
1802
- "microyard" => [-6, "yard"], "microyd" => [-6, "yd"],
1803
- "microyear" => [-6, "year"], "miles" => [0, "mile"],
1804
- "milliCelsius" => [-3, "Celsius"],
1805
- "milliFahrenheit" => [-3, "Fahrenheit"],
1806
- "milliJulian_year" => [-3, "Julian_year"],
1807
- "milliPascal" => [-3, "Pascal"], "milliacre" => [-3, "acre"],
1808
- "milliampere" => [-3, "ampere"], "milliangstrom" => [-3, "angstrom"],
1809
- "milliangular_degree" => [-3, "angular_degree"],
1810
- "milliangular_minute" => [-3, "angular_minute"],
1811
- "milliangular_second" => [-3, "angular_second"],
1812
- "milliare" => [-3, "are"], "milliatmosphere" => [-3, "atmosphere"],
1813
- "millibars" => [0, "millibar"], "millicalorie" => [-3, "calorie"],
1814
- "millicelsius" => [-3, "celsius"],
1815
- "millicentigrade" => [-3, "centigrade"],
1816
- "millicentury" => [-3, "century"], "millichain" => [-3, "chain"],
1817
- "millicommon_year" => [-3, "common_year"],
1818
- "millicoulomb" => [-3, "coulomb"], "milliday" => [-3, "day"],
1819
- "millidegK" => [-3, "degK"], "millideg_K" => [-3, "deg_K"],
1820
- "millidegree" => [-3, "degree"], "millidegreeK" => [-3, "degreeK"],
1821
- "millidyne" => [-3, "dyne"], "millierg" => [-3, "erg"],
1822
- "millifahrenheit" => [-3, "fahrenheit"],
1823
- "millifarad" => [-3, "farad"], "millifermi" => [-3, "fermi"],
1824
- "milligal" => [-3, "gal"], "milligauss" => [-3, "gauss"],
1825
- "milligram" => [-3, "gram"], "millihectare" => [-3, "hectare"],
1826
- "millihertz" => [-3, "hertz"], "millihour" => [-3, "hour"],
1827
- "milliinch" => [-3, "inch"], "millijoule" => [-3, "joule"],
1828
- "millikelvin" => [-3, "kelvin"], "millikilogram" => [-3, "kilogram"],
1829
- "milliknot" => [-3, "knot"], "millilitre" => [-3, "litre"],
1830
- "millimeter" => [-3, "meter"], "millimetre" => [-3, "metre"],
1831
- "millimicron" => [-3, "micron"], "millimile" => [-3, "mile"],
1832
- "millimillibar" => [-3, "millibar"], "milliminute" => [-3, "minute"],
1833
- "milliminute_angle" => [-3, "minute_angle"],
1834
- "millimole" => [-3, "mole"], "millimonth" => [-3, "month"],
1835
- "millinewton" => [-3, "newton"], "milliounce" => [-3, "ounce"],
1836
- "milliparsec" => [-3, "parsec"], "millipascal" => [-3, "pascal"],
1837
- "millipentad" => [-3, "pentad"], "millipoise" => [-3, "poise"],
1838
- "millipound" => [-3, "pound"], "milliradian" => [-3, "radian"],
1839
- "millisecond" => [-3, "second"],
1840
- "millisecond_angle" => [-3, "second_angle"],
1841
- "millisteradian" => [-3, "steradian"],
1842
- "millistokes" => [-3, "stokes"], "millitesla" => [-3, "tesla"],
1843
- "milliton" => [-3, "ton"], "millitonne" => [-3, "tonne"],
1844
- "millitorr" => [-3, "torr"], "millivolt" => [-3, "volt"],
1845
- "milliwatt" => [-3, "watt"], "milliweber" => [-3, "weber"],
1846
- "milliyard" => [-3, "yard"], "milliyd" => [-3, "yd"],
1847
- "milliyear" => [-3, "year"], "min" => [-3, "in"],
1848
- "minutes" => [0, "minute"], "minutes_angle" => [0, "minute_angle"],
1849
- "mkg" => [-3, "kg"], "mkgf" => [-3, "kgf"], "mkph" => [-3, "kph"],
1850
- "mlb" => [-3, "lb"], "mlm" => [-3, "lm"], "mlx" => [-3, "lx"],
1851
- "mly" => [-3, "ly"], "mm" => [-3, "m"], "mmb" => [-3, "mb"],
1852
- "mmercury" => [-3, "mercury"], "mmgal" => [-3, "mgal"],
1853
- "mmin" => [-3, "min"], "mmol" => [-3, "mol"], "mmon" => [-3, "mon"],
1854
- "mmph" => [-3, "mph"], "mohm" => [-3, "ohm"],
1855
- "moles" => [0, "mole"], "months" => [0, "month"],
1856
- "moz" => [-3, "oz"], "mpc" => [-3, "pc"],
1857
- "mpercent" => [-3, "percent"], "mpermil" => [-3, "permil"],
1858
- "mpsi" => [-3, "psi"], "mrad" => [-3, "rad"], "ms" => [-3, "s"],
1859
- "msr" => [-3, "sr"], "mt" => [-3, "t"], "myr" => [-3, "yr"],
1860
- "n%" => [-9, "%"], "nA" => [-9, "A"], "nAu" => [-9, "Au"],
1861
- "nBq" => [-9, "Bq"], "nC" => [-9, "C"], "nF" => [-9, "F"],
1862
- "nG" => [-9, "G"], "nGal" => [-9, "Gal"], "nGy" => [-9, "Gy"],
1863
- "nH" => [-9, "H"], "nHg" => [-9, "Hg"], "nHz" => [-9, "Hz"],
1864
- "nJ" => [-9, "J"], "nK" => [-9, "K"], "nL" => [-9, "L"],
1865
- "nN" => [-9, "N"], "nP" => [-9, "P"], "nPa" => [-9, "Pa"],
1866
- "nS" => [-9, "S"], "nSt" => [-9, "St"], "nSv" => [-9, "Sv"],
1867
- "nT" => [-9, "T"], "nV" => [-9, "V"], "nW" => [-9, "W"],
1868
- "nWb" => [-9, "Wb"], "na" => [-9, "a"], "nac" => [-9, "ac"],
1869
- "nanoCelsius" => [-9, "Celsius"],
1870
- "nanoFahrenheit" => [-9, "Fahrenheit"],
1871
- "nanoJulian_year" => [-9, "Julian_year"],
1872
- "nanoPascal" => [-9, "Pascal"], "nanoacre" => [-9, "acre"],
1873
- "nanoampere" => [-9, "ampere"], "nanoangstrom" => [-9, "angstrom"],
1874
- "nanoangular_degree" => [-9, "angular_degree"],
1875
- "nanoangular_minute" => [-9, "angular_minute"],
1876
- "nanoangular_second" => [-9, "angular_second"],
1877
- "nanoare" => [-9, "are"], "nanoatmosphere" => [-9, "atmosphere"],
1878
- "nanocalorie" => [-9, "calorie"], "nanocelsius" => [-9, "celsius"],
1879
- "nanocentigrade" => [-9, "centigrade"],
1880
- "nanocentury" => [-9, "century"], "nanochain" => [-9, "chain"],
1881
- "nanocommon_year" => [-9, "common_year"],
1882
- "nanocoulomb" => [-9, "coulomb"], "nanoday" => [-9, "day"],
1883
- "nanodegK" => [-9, "degK"], "nanodeg_K" => [-9, "deg_K"],
1884
- "nanodegree" => [-9, "degree"], "nanodegreeK" => [-9, "degreeK"],
1885
- "nanodyne" => [-9, "dyne"], "nanoerg" => [-9, "erg"],
1886
- "nanofahrenheit" => [-9, "fahrenheit"], "nanofarad" => [-9, "farad"],
1887
- "nanofermi" => [-9, "fermi"], "nanogal" => [-9, "gal"],
1888
- "nanogauss" => [-9, "gauss"], "nanogram" => [-9, "gram"],
1889
- "nanohectare" => [-9, "hectare"], "nanohertz" => [-9, "hertz"],
1890
- "nanohour" => [-9, "hour"], "nanoinch" => [-9, "inch"],
1891
- "nanojoule" => [-9, "joule"], "nanokelvin" => [-9, "kelvin"],
1892
- "nanokilogram" => [-9, "kilogram"], "nanoknot" => [-9, "knot"],
1893
- "nanolitre" => [-9, "litre"], "nanometer" => [-9, "meter"],
1894
- "nanometre" => [-9, "metre"], "nanomicron" => [-9, "micron"],
1895
- "nanomile" => [-9, "mile"], "nanomillibar" => [-9, "millibar"],
1896
- "nanominute" => [-9, "minute"],
1897
- "nanominute_angle" => [-9, "minute_angle"],
1898
- "nanomole" => [-9, "mole"], "nanomonth" => [-9, "month"],
1899
- "nanonewton" => [-9, "newton"], "nanoounce" => [-9, "ounce"],
1900
- "nanoparsec" => [-9, "parsec"], "nanopascal" => [-9, "pascal"],
1901
- "nanopentad" => [-9, "pentad"], "nanopoise" => [-9, "poise"],
1902
- "nanopound" => [-9, "pound"], "nanoradian" => [-9, "radian"],
1903
- "nanosecond" => [-9, "second"],
1904
- "nanosecond_angle" => [-9, "second_angle"],
1905
- "nanosteradian" => [-9, "steradian"], "nanostokes" => [-9, "stokes"],
1906
- "nanotesla" => [-9, "tesla"], "nanoton" => [-9, "ton"],
1907
- "nanotonne" => [-9, "tonne"], "nanotorr" => [-9, "torr"],
1908
- "nanovolt" => [-9, "volt"], "nanowatt" => [-9, "watt"],
1909
- "nanoweber" => [-9, "weber"], "nanoyard" => [-9, "yard"],
1910
- "nanoyd" => [-9, "yd"], "nanoyear" => [-9, "year"],
1911
- "natm" => [-9, "atm"], "nbar" => [-9, "bar"], "ncal" => [-9, "cal"],
1912
- "nconventional_mercury" => [-9, "conventional_mercury"],
1913
- "nd" => [-9, "d"], "ndegC" => [-9, "degC"], "ndegF" => [-9, "degF"],
1914
- "ndeg_C" => [-9, "deg_C"], "ndeg_F" => [-9, "deg_F"],
1915
- "ndegreeC" => [-9, "degreeC"], "ndegreeF" => [-9, "degreeF"],
1916
- "ndegree_C" => [-9, "degree_C"], "ndegree_E" => [-9, "degree_E"],
1917
- "ndegree_F" => [-9, "degree_F"], "ndegree_N" => [-9, "degree_N"],
1918
- "ndegree_R" => [-9, "degree_R"], "ndegree_S" => [-9, "degree_S"],
1919
- "ndegree_W" => [-9, "degree_W"], "ndegree_c" => [-9, "degree_c"],
1920
- "ndegree_east" => [-9, "degree_east"],
1921
- "ndegree_f" => [-9, "degree_f"],
1922
- "ndegree_north" => [-9, "degree_north"],
1923
- "ndegree_south" => [-9, "degree_south"],
1924
- "ndegree_west" => [-9, "degree_west"],
1925
- "ndegrees_east" => [-9, "degrees_east"],
1926
- "ndegrees_north" => [-9, "degrees_north"],
1927
- "ndegrees_south" => [-9, "degrees_south"],
1928
- "ndegrees_west" => [-9, "degrees_west"], "ndyn" => [-9, "dyn"],
1929
- "nerg" => [-9, "erg"], "newtons" => [0, "newton"],
1930
- "nforce" => [-9, "force"], "ng" => [-9, "g"],
1931
- "ngravity" => [-9, "gravity"], "nh" => [-9, "h"],
1932
- "nhg" => [-9, "hg"], "nhr" => [-9, "hr"], "nin" => [-9, "in"],
1933
- "nkg" => [-9, "kg"], "nkgf" => [-9, "kgf"], "nkph" => [-9, "kph"],
1934
- "nlb" => [-9, "lb"], "nlm" => [-9, "lm"], "nlx" => [-9, "lx"],
1935
- "nly" => [-9, "ly"], "nm" => [-9, "m"], "nmb" => [-9, "mb"],
1936
- "nmercury" => [-9, "mercury"], "nmgal" => [-9, "mgal"],
1937
- "nmin" => [-9, "min"], "nmol" => [-9, "mol"], "nmon" => [-9, "mon"],
1938
- "nmph" => [-9, "mph"], "nohm" => [-9, "ohm"], "noz" => [-9, "oz"],
1939
- "npc" => [-9, "pc"], "npercent" => [-9, "percent"],
1940
- "npermil" => [-9, "permil"], "npsi" => [-9, "psi"],
1941
- "nrad" => [-9, "rad"], "ns" => [-9, "s"], "nsr" => [-9, "sr"],
1942
- "nt" => [-9, "t"], "nyr" => [-9, "yr"], "ounces" => [0, "ounce"],
1943
- "p%" => [-12, "%"], "pA" => [-12, "A"], "pAu" => [-12, "Au"],
1944
- "pBq" => [-12, "Bq"], "pC" => [-12, "C"], "pF" => [-12, "F"],
1945
- "pG" => [-12, "G"], "pGal" => [-12, "Gal"], "pGy" => [-12, "Gy"],
1946
- "pH" => [-12, "H"], "pHg" => [-12, "Hg"], "pHz" => [-12, "Hz"],
1947
- "pJ" => [-12, "J"], "pK" => [-12, "K"], "pL" => [-12, "L"],
1948
- "pN" => [-12, "N"], "pP" => [-12, "P"], "pPa" => [-12, "Pa"],
1949
- "pS" => [-12, "S"], "pSt" => [-12, "St"], "pSv" => [-12, "Sv"],
1950
- "pT" => [-12, "T"], "pV" => [-12, "V"], "pW" => [-12, "W"],
1951
- "pWb" => [-12, "Wb"], "pa" => [-12, "a"], "pac" => [-12, "ac"],
1952
- "parsecs" => [0, "parsec"], "pascals" => [0, "pascal"],
1953
- "patm" => [-12, "atm"], "pbar" => [-12, "bar"],
1954
- "pcal" => [-12, "cal"],
1955
- "pconventional_mercury" => [-12, "conventional_mercury"],
1956
- "pd" => [-12, "d"], "pdegC" => [-12, "degC"],
1957
- "pdegF" => [-12, "degF"], "pdeg_C" => [-12, "deg_C"],
1958
- "pdeg_F" => [-12, "deg_F"], "pdegreeC" => [-12, "degreeC"],
1959
- "pdegreeF" => [-12, "degreeF"], "pdegree_C" => [-12, "degree_C"],
1960
- "pdegree_E" => [-12, "degree_E"], "pdegree_F" => [-12, "degree_F"],
1961
- "pdegree_N" => [-12, "degree_N"], "pdegree_R" => [-12, "degree_R"],
1962
- "pdegree_S" => [-12, "degree_S"], "pdegree_W" => [-12, "degree_W"],
1963
- "pdegree_c" => [-12, "degree_c"],
1964
- "pdegree_east" => [-12, "degree_east"],
1965
- "pdegree_f" => [-12, "degree_f"],
1966
- "pdegree_north" => [-12, "degree_north"],
1967
- "pdegree_south" => [-12, "degree_south"],
1968
- "pdegree_west" => [-12, "degree_west"],
1969
- "pdegrees_east" => [-12, "degrees_east"],
1970
- "pdegrees_north" => [-12, "degrees_north"],
1971
- "pdegrees_south" => [-12, "degrees_south"],
1972
- "pdegrees_west" => [-12, "degrees_west"], "pdyn" => [-12, "dyn"],
1973
- "pentads" => [0, "pentad"], "perg" => [-12, "erg"],
1974
- "petaCelsius" => [15, "Celsius"],
1975
- "petaFahrenheit" => [15, "Fahrenheit"],
1976
- "petaJulian_year" => [15, "Julian_year"],
1977
- "petaPascal" => [15, "Pascal"], "petaacre" => [15, "acre"],
1978
- "petaampere" => [15, "ampere"], "petaangstrom" => [15, "angstrom"],
1979
- "petaangular_degree" => [15, "angular_degree"],
1980
- "petaangular_minute" => [15, "angular_minute"],
1981
- "petaangular_second" => [15, "angular_second"],
1982
- "petaare" => [15, "are"], "petaatmosphere" => [15, "atmosphere"],
1983
- "petacalorie" => [15, "calorie"], "petacelsius" => [15, "celsius"],
1984
- "petacentigrade" => [15, "centigrade"],
1985
- "petacentury" => [15, "century"], "petachain" => [15, "chain"],
1986
- "petacommon_year" => [15, "common_year"],
1987
- "petacoulomb" => [15, "coulomb"], "petaday" => [15, "day"],
1988
- "petadegK" => [15, "degK"], "petadeg_K" => [15, "deg_K"],
1989
- "petadegree" => [15, "degree"], "petadegreeK" => [15, "degreeK"],
1990
- "petadyne" => [15, "dyne"], "petaerg" => [15, "erg"],
1991
- "petafahrenheit" => [15, "fahrenheit"], "petafarad" => [15, "farad"],
1992
- "petafermi" => [15, "fermi"], "petagal" => [15, "gal"],
1993
- "petagauss" => [15, "gauss"], "petagram" => [15, "gram"],
1994
- "petahectare" => [15, "hectare"], "petahertz" => [15, "hertz"],
1995
- "petahour" => [15, "hour"], "petainch" => [15, "inch"],
1996
- "petajoule" => [15, "joule"], "petakelvin" => [15, "kelvin"],
1997
- "petakilogram" => [15, "kilogram"], "petaknot" => [15, "knot"],
1998
- "petalitre" => [15, "litre"], "petameter" => [15, "meter"],
1999
- "petametre" => [15, "metre"], "petamicron" => [15, "micron"],
2000
- "petamile" => [15, "mile"], "petamillibar" => [15, "millibar"],
2001
- "petaminute" => [15, "minute"],
2002
- "petaminute_angle" => [15, "minute_angle"],
2003
- "petamole" => [15, "mole"], "petamonth" => [15, "month"],
2004
- "petanewton" => [15, "newton"], "petaounce" => [15, "ounce"],
2005
- "petaparsec" => [15, "parsec"], "petapascal" => [15, "pascal"],
2006
- "petapentad" => [15, "pentad"], "petapoise" => [15, "poise"],
2007
- "petapound" => [15, "pound"], "petaradian" => [15, "radian"],
2008
- "petasecond" => [15, "second"],
2009
- "petasecond_angle" => [15, "second_angle"],
2010
- "petasteradian" => [15, "steradian"], "petastokes" => [15, "stokes"],
2011
- "petatesla" => [15, "tesla"], "petaton" => [15, "ton"],
2012
- "petatonne" => [15, "tonne"], "petatorr" => [15, "torr"],
2013
- "petavolt" => [15, "volt"], "petawatt" => [15, "watt"],
2014
- "petaweber" => [15, "weber"], "petayard" => [15, "yard"],
2015
- "petayd" => [15, "yd"], "petayear" => [15, "year"],
2016
- "pforce" => [-12, "force"], "pg" => [-12, "g"],
2017
- "pgravity" => [-12, "gravity"], "ph" => [-12, "h"],
2018
- "phg" => [-12, "hg"], "phr" => [-12, "hr"],
2019
- "picoCelsius" => [-12, "Celsius"],
2020
- "picoFahrenheit" => [-12, "Fahrenheit"],
2021
- "picoJulian_year" => [-12, "Julian_year"],
2022
- "picoPascal" => [-12, "Pascal"], "picoacre" => [-12, "acre"],
2023
- "picoampere" => [-12, "ampere"], "picoangstrom" => [-12, "angstrom"],
2024
- "picoangular_degree" => [-12, "angular_degree"],
2025
- "picoangular_minute" => [-12, "angular_minute"],
2026
- "picoangular_second" => [-12, "angular_second"],
2027
- "picoare" => [-12, "are"], "picoatmosphere" => [-12, "atmosphere"],
2028
- "picocalorie" => [-12, "calorie"], "picocelsius" => [-12, "celsius"],
2029
- "picocentigrade" => [-12, "centigrade"],
2030
- "picocentury" => [-12, "century"], "picochain" => [-12, "chain"],
2031
- "picocommon_year" => [-12, "common_year"],
2032
- "picocoulomb" => [-12, "coulomb"], "picoday" => [-12, "day"],
2033
- "picodegK" => [-12, "degK"], "picodeg_K" => [-12, "deg_K"],
2034
- "picodegree" => [-12, "degree"], "picodegreeK" => [-12, "degreeK"],
2035
- "picodyne" => [-12, "dyne"], "picoerg" => [-12, "erg"],
2036
- "picofahrenheit" => [-12, "fahrenheit"],
2037
- "picofarad" => [-12, "farad"], "picofermi" => [-12, "fermi"],
2038
- "picogal" => [-12, "gal"], "picogauss" => [-12, "gauss"],
2039
- "picogram" => [-12, "gram"], "picohectare" => [-12, "hectare"],
2040
- "picohertz" => [-12, "hertz"], "picohour" => [-12, "hour"],
2041
- "picoinch" => [-12, "inch"], "picojoule" => [-12, "joule"],
2042
- "picokelvin" => [-12, "kelvin"], "picokilogram" => [-12, "kilogram"],
2043
- "picoknot" => [-12, "knot"], "picolitre" => [-12, "litre"],
2044
- "picometer" => [-12, "meter"], "picometre" => [-12, "metre"],
2045
- "picomicron" => [-12, "micron"], "picomile" => [-12, "mile"],
2046
- "picomillibar" => [-12, "millibar"], "picominute" => [-12, "minute"],
2047
- "picominute_angle" => [-12, "minute_angle"],
2048
- "picomole" => [-12, "mole"], "picomonth" => [-12, "month"],
2049
- "piconewton" => [-12, "newton"], "picoounce" => [-12, "ounce"],
2050
- "picoparsec" => [-12, "parsec"], "picopascal" => [-12, "pascal"],
2051
- "picopentad" => [-12, "pentad"], "picopoise" => [-12, "poise"],
2052
- "picopound" => [-12, "pound"], "picoradian" => [-12, "radian"],
2053
- "picosecond" => [-12, "second"],
2054
- "picosecond_angle" => [-12, "second_angle"],
2055
- "picosteradian" => [-12, "steradian"],
2056
- "picostokes" => [-12, "stokes"], "picotesla" => [-12, "tesla"],
2057
- "picoton" => [-12, "ton"], "picotonne" => [-12, "tonne"],
2058
- "picotorr" => [-12, "torr"], "picovolt" => [-12, "volt"],
2059
- "picowatt" => [-12, "watt"], "picoweber" => [-12, "weber"],
2060
- "picoyard" => [-12, "yard"], "picoyd" => [-12, "yd"],
2061
- "picoyear" => [-12, "year"], "pin" => [-12, "in"],
2062
- "pkg" => [-12, "kg"], "pkgf" => [-12, "kgf"],
2063
- "pkph" => [-12, "kph"], "plb" => [-12, "lb"], "plm" => [-12, "lm"],
2064
- "plx" => [-12, "lx"], "ply" => [-12, "ly"], "pm" => [-12, "m"],
2065
- "pmb" => [-12, "mb"], "pmercury" => [-12, "mercury"],
2066
- "pmgal" => [-12, "mgal"], "pmin" => [-12, "min"],
2067
- "pmol" => [-12, "mol"], "pmon" => [-12, "mon"],
2068
- "pmph" => [-12, "mph"], "pohm" => [-12, "ohm"],
2069
- "poises" => [0, "poise"], "pounds" => [0, "pound"],
2070
- "poz" => [-12, "oz"], "ppc" => [-12, "pc"],
2071
- "ppercent" => [-12, "percent"], "ppermil" => [-12, "permil"],
2072
- "ppsi" => [-12, "psi"], "prad" => [-12, "rad"], "ps" => [-12, "s"],
2073
- "psr" => [-12, "sr"], "pt" => [-12, "t"], "pyr" => [-12, "yr"],
2074
- "radians" => [0, "radian"], "seconds" => [0, "second"],
2075
- "seconds_angle" => [0, "second_angle"],
2076
- "steradians" => [0, "steradian"], "stokeses" => [0, "stokes"],
2077
- "telaCelsius" => [12, "Celsius"],
2078
- "telaFahrenheit" => [12, "Fahrenheit"],
2079
- "telaJulian_year" => [12, "Julian_year"],
2080
- "telaPascal" => [12, "Pascal"], "telaacre" => [12, "acre"],
2081
- "telaampere" => [12, "ampere"], "telaangstrom" => [12, "angstrom"],
2082
- "telaangular_degree" => [12, "angular_degree"],
2083
- "telaangular_minute" => [12, "angular_minute"],
2084
- "telaangular_second" => [12, "angular_second"],
2085
- "telaare" => [12, "are"], "telaatmosphere" => [12, "atmosphere"],
2086
- "telacalorie" => [12, "calorie"], "telacelsius" => [12, "celsius"],
2087
- "telacentigrade" => [12, "centigrade"],
2088
- "telacentury" => [12, "century"], "telachain" => [12, "chain"],
2089
- "telacommon_year" => [12, "common_year"],
2090
- "telacoulomb" => [12, "coulomb"], "teladay" => [12, "day"],
2091
- "teladegK" => [12, "degK"], "teladeg_K" => [12, "deg_K"],
2092
- "teladegree" => [12, "degree"], "teladegreeK" => [12, "degreeK"],
2093
- "teladyne" => [12, "dyne"], "telaerg" => [12, "erg"],
2094
- "telafahrenheit" => [12, "fahrenheit"], "telafarad" => [12, "farad"],
2095
- "telafermi" => [12, "fermi"], "telagal" => [12, "gal"],
2096
- "telagauss" => [12, "gauss"], "telagram" => [12, "gram"],
2097
- "telahectare" => [12, "hectare"], "telahertz" => [12, "hertz"],
2098
- "telahour" => [12, "hour"], "telainch" => [12, "inch"],
2099
- "telajoule" => [12, "joule"], "telakelvin" => [12, "kelvin"],
2100
- "telakilogram" => [12, "kilogram"], "telaknot" => [12, "knot"],
2101
- "telalitre" => [12, "litre"], "telameter" => [12, "meter"],
2102
- "telametre" => [12, "metre"], "telamicron" => [12, "micron"],
2103
- "telamile" => [12, "mile"], "telamillibar" => [12, "millibar"],
2104
- "telaminute" => [12, "minute"],
2105
- "telaminute_angle" => [12, "minute_angle"],
2106
- "telamole" => [12, "mole"], "telamonth" => [12, "month"],
2107
- "telanewton" => [12, "newton"], "telaounce" => [12, "ounce"],
2108
- "telaparsec" => [12, "parsec"], "telapascal" => [12, "pascal"],
2109
- "telapentad" => [12, "pentad"], "telapoise" => [12, "poise"],
2110
- "telapound" => [12, "pound"], "telaradian" => [12, "radian"],
2111
- "telasecond" => [12, "second"],
2112
- "telasecond_angle" => [12, "second_angle"],
2113
- "telasteradian" => [12, "steradian"], "telastokes" => [12, "stokes"],
2114
- "telatesla" => [12, "tesla"], "telaton" => [12, "ton"],
2115
- "telatonne" => [12, "tonne"], "telatorr" => [12, "torr"],
2116
- "telavolt" => [12, "volt"], "telawatt" => [12, "watt"],
2117
- "telaweber" => [12, "weber"], "telayard" => [12, "yard"],
2118
- "telayd" => [12, "yd"], "telayear" => [12, "year"],
2119
- "teslas" => [0, "tesla"], "tonnes" => [0, "tonne"],
2120
- "tons" => [0, "ton"], "torrs" => [0, "torr"], "u%" => [-6, "%"],
2121
- "uA" => [-6, "A"], "uAu" => [-6, "Au"], "uBq" => [-6, "Bq"],
2122
- "uC" => [-6, "C"], "uF" => [-6, "F"], "uG" => [-6, "G"],
2123
- "uGal" => [-6, "Gal"], "uGy" => [-6, "Gy"], "uH" => [-6, "H"],
2124
- "uHg" => [-6, "Hg"], "uHz" => [-6, "Hz"], "uJ" => [-6, "J"],
2125
- "uK" => [-6, "K"], "uL" => [-6, "L"], "uN" => [-6, "N"],
2126
- "uP" => [-6, "P"], "uPa" => [-6, "Pa"], "uS" => [-6, "S"],
2127
- "uSt" => [-6, "St"], "uSv" => [-6, "Sv"], "uT" => [-6, "T"],
2128
- "uV" => [-6, "V"], "uW" => [-6, "W"], "uWb" => [-6, "Wb"],
2129
- "ua" => [-6, "a"], "uac" => [-6, "ac"], "uatm" => [-6, "atm"],
2130
- "ubar" => [-6, "bar"], "ucal" => [-6, "cal"],
2131
- "uconventional_mercury" => [-6, "conventional_mercury"],
2132
- "ud" => [-6, "d"], "udegC" => [-6, "degC"], "udegF" => [-6, "degF"],
2133
- "udeg_C" => [-6, "deg_C"], "udeg_F" => [-6, "deg_F"],
2134
- "udegreeC" => [-6, "degreeC"], "udegreeF" => [-6, "degreeF"],
2135
- "udegree_C" => [-6, "degree_C"], "udegree_E" => [-6, "degree_E"],
2136
- "udegree_F" => [-6, "degree_F"], "udegree_N" => [-6, "degree_N"],
2137
- "udegree_R" => [-6, "degree_R"], "udegree_S" => [-6, "degree_S"],
2138
- "udegree_W" => [-6, "degree_W"], "udegree_c" => [-6, "degree_c"],
2139
- "udegree_east" => [-6, "degree_east"],
2140
- "udegree_f" => [-6, "degree_f"],
2141
- "udegree_north" => [-6, "degree_north"],
2142
- "udegree_south" => [-6, "degree_south"],
2143
- "udegree_west" => [-6, "degree_west"],
2144
- "udegrees_east" => [-6, "degrees_east"],
2145
- "udegrees_north" => [-6, "degrees_north"],
2146
- "udegrees_south" => [-6, "degrees_south"],
2147
- "udegrees_west" => [-6, "degrees_west"], "udyn" => [-6, "dyn"],
2148
- "uerg" => [-6, "erg"], "uforce" => [-6, "force"], "ug" => [-6, "g"],
2149
- "ugravity" => [-6, "gravity"], "uh" => [-6, "h"],
2150
- "uhg" => [-6, "hg"], "uhr" => [-6, "hr"], "uin" => [-6, "in"],
2151
- "ukg" => [-6, "kg"], "ukgf" => [-6, "kgf"], "ukph" => [-6, "kph"],
2152
- "ulb" => [-6, "lb"], "ulm" => [-6, "lm"], "ulx" => [-6, "lx"],
2153
- "uly" => [-6, "ly"], "um" => [-6, "m"], "umb" => [-6, "mb"],
2154
- "umercury" => [-6, "mercury"], "umgal" => [-6, "mgal"],
2155
- "umin" => [-6, "min"], "umol" => [-6, "mol"], "umon" => [-6, "mon"],
2156
- "umph" => [-6, "mph"], "uohm" => [-6, "ohm"], "uoz" => [-6, "oz"],
2157
- "upc" => [-6, "pc"], "upercent" => [-6, "percent"],
2158
- "upermil" => [-6, "permil"], "upsi" => [-6, "psi"],
2159
- "urad" => [-6, "rad"], "us" => [-6, "s"], "usr" => [-6, "sr"],
2160
- "ut" => [-6, "t"], "uyr" => [-6, "yr"], "volts" => [0, "volt"],
2161
- "watts" => [0, "watt"], "webers" => [0, "weber"],
2162
- "yards" => [0, "yard"], "yds" => [0, "yd"], "years" => [0, "year"],
2163
- }
2164
- UPLURALS = {
2165
- "Celsiuses" => "Celsius", "Fahrenheits" => "Fahrenheit",
2166
- "Julians_year" => "Julian_year", "Pascals" => "Pascal",
2167
- "acres" => "acre", "amperes" => "ampere", "angstroms" => "angstrom",
2168
- "angulars_degree" => "angular_degree",
2169
- "angulars_minute" => "angular_minute",
2170
- "angulars_second" => "angular_second", "ares" => "are",
2171
- "atmospheres" => "atmosphere", "calories" => "calorie",
2172
- "celsiuses" => "celsius", "centigrades" => "centigrade",
2173
- "centuries" => "century", "chains" => "chain",
2174
- "commons_year" => "common_year", "coulombs" => "coulomb",
2175
- "days" => "day", "degKs" => "degK", "degreeKs" => "degreeK",
2176
- "degrees" => "degree", "degs_K" => "deg_K", "dynes" => "dyne",
2177
- "ergs" => "erg", "fahrenheits" => "fahrenheit", "farads" => "farad",
2178
- "fermis" => "fermi", "gals" => "gal", "gausses" => "gauss",
2179
- "grams" => "gram", "hectares" => "hectare", "hertzes" => "hertz",
2180
- "hours" => "hour", "inchs" => "inch", "joules" => "joule",
2181
- "kelvins" => "kelvin", "kilograms" => "kilogram", "knots" => "knot",
2182
- "litres" => "litre", "meters" => "meter", "metres" => "metre",
2183
- "microns" => "micron", "miles" => "mile", "millibars" => "millibar",
2184
- "minutes" => "minute", "minutes_angle" => "minute_angle",
2185
- "moles" => "mole", "months" => "month", "newtons" => "newton",
2186
- "ounces" => "ounce", "parsecs" => "parsec", "pascals" => "pascal",
2187
- "pentads" => "pentad", "poises" => "poise", "pounds" => "pound",
2188
- "radians" => "radian", "seconds" => "second",
2189
- "seconds_angle" => "second_angle", "steradians" => "steradian",
2190
- "stokeses" => "stokes", "teslas" => "tesla", "tonnes" => "tonne",
2191
- "tons" => "ton", "torrs" => "torr", "volts" => "volt",
2192
- "watts" => "watt", "webers" => "weber", "yards" => "yard",
2193
- "yds" => "yd", "years" => "year",
2194
- }
2195
- end
2196
- class NumberNode < TerminalNode
2197
-
2198
- def initialize(arg)
2199
- raise TypeError unless Numeric === arg
2200
- @a = arg
2201
- end
2202
-
2203
- UNITY = NumberNode.new(1)
2204
- ZERO = NumberNode.new(0)
2205
-
2206
- def to_s
2207
- if @a == @a.to_i
2208
- sprintf("%d",@a)
2209
- else
2210
- String(@a)
2211
- end
2212
- end
2213
-
2214
- attr_reader :a
2215
-
2216
- alias :value :a
2217
- alias :factor :a
2218
-
2219
- def == (other)
2220
- case other
2221
- when NumberNode
2222
- @a == other.a
2223
- else
2224
- false
2225
- end
2226
- end
2227
-
2228
- def add_eval(another)
2229
- raise TypeError unless NumberNode === another
2230
- NumberNode.new(@a + another.value)
2231
- end
2232
-
2233
- def mul_eval(another)
2234
- case another
2235
- when NumberNode then NumberNode.new(@a * another.a)
2236
- when PowNode
2237
- raise TypeError unless NumberNode === another.lhs
2238
- raise TypeError unless NumberNode === another.rhs
2239
- NumberNode.new(@a * Units::pow_f(another.lhs.value, another.rhs.value))
2240
- else raise TypeError
2241
- end
2242
- end
2243
-
2244
- def name; "1"; end
2245
-
2246
- def power; UNITY; end
2247
-
2248
- end
2249
- class XDate
2250
-
2251
- def initialize(year, month, day)
2252
- @year, @month, @day = year.to_i, month.to_i, day.to_i
2253
- end
2254
-
2255
- attr_reader :year, :month, :day
2256
-
2257
- def to_s
2258
- format('%04d-%02d-%02d', @year, @month, @day)
2259
- end
2260
-
2261
- alias :inspect :to_s
2262
-
2263
- def to_time
2264
- Time.gm(@year, @month, @day)
2265
- end
2266
-
2267
- def to_date
2268
- Date.new(@year, @month, @day)
2269
- end
2270
-
2271
- def -(other)
2272
- case other
2273
- when XDate
2274
- (to_date - other.to_date)
2275
- when Time
2276
- to_time - other
2277
- when Date
2278
- (to_date - other.to_date)
2279
- else
2280
- to_date - other
2281
- end
2282
- end
2283
-
2284
- def +(other)
2285
- t = to_date + other
2286
- self.class.new(t.year, t.month, t.mday)
2287
- end
2288
-
2289
- end
2290
-
2291
- class TimeNode < TerminalNode
2292
-
2293
- def initialize(date, time, zone)
2294
- @date, @time, @zone = date, time, zone
2295
- if :now === @date then
2296
- now = Time.now.utc
2297
- @date = XDate.new(now.year, now.month, now.day)
2298
- @time = ((now.hour * 60 + now.min) * 60 + Float(now.sec))
2299
- else
2300
- qdays = (@time / 86400).floor
2301
- if not qdays.zero?
2302
- @date += qdays
2303
- @time -= (qdays * 86400)
2304
- end
2305
- end
2306
- raise TypeError unless XDate === @date
2307
- @time = 0.0 unless @time
2308
- raise TypeError unless Float === @time
2309
- @zone = 0 unless @zone
2310
- raise TypeError unless Integer === @zone
2311
- end
2312
-
2313
- attr_reader :date, :time, :zone
2314
-
2315
- def to_s
2316
- hr = @time.floor / 3600
2317
- mi = (@time.floor / 60) % 60
2318
- sc = @time % 60
2319
- tzm = @zone.abs
2320
- tzh = tzm / 60
2321
- tzm %= 60
2322
- tzh = -tzh if @zone < 0
2323
- format("%sT%02d:%02d:%05.2f %+03d:%02d", \
2324
- @date.to_s, hr, mi, sc, tzh, tzm)
2325
- end
2326
-
2327
- def self::pentad(d)
2328
- (d > 25) ? 5 : ((d - 1) / 5)
2329
- end
2330
-
2331
- def add_time(increment)
2332
- inc = increment.reduce5
2333
- case inc.name
2334
- when 's'
2335
- t2 = @time + inc.factor
2336
- d2 = @date + (t2 / 86400)
2337
- t2 = t2 % 86400
2338
- self.class.new(d2, t2, @zone)
2339
- when 'pentad'
2340
- ifac = Integer(inc.factor)
2341
- ipen = ifac % 6
2342
- imon = ifac / 6
2343
- spen = self.class.pentad(@date.day)
2344
- smon = @date.month + imon + spen / 6
2345
- spen = spen % 6
2346
- sday = spen * 5 + (@date.day - 1) % 5 + 1
2347
- syear = @date.year + (smon - 1) / 12
2348
- smon = (smon - 1) % 12 + 1
2349
- sdate = XDate.new(syear, smon, sday)
2350
- self.class.new(sdate, @time, @zone)
2351
- else
2352
- raise "bad time unit '#{inc.name}'"
2353
- end
2354
- end
2355
-
2356
- def utcsod
2357
- @time - @zone * 60
2358
- end
2359
-
2360
- def div_time(units)
2361
- base = units.ref
2362
- inc = units.deref.reduce5
2363
- begin
2364
- incname = inc.name
2365
- rescue Exception
2366
- incname = "(undefined)"
2367
- end
2368
- case incname
2369
- when 's'
2370
- dif = (@date - base.date) * 86400 + (utcsod - base.utcsod)
2371
- dif / inc.factor
2372
- when 'pentad'
2373
- dif = (@date.year - base.date.year) * 72
2374
- dif += (@date.month - base.date.month) * 6
2375
- dif += self.class.pentad(@date.day)
2376
- dif -= self.class.pentad(base.date.day)
2377
- dif = Float(dif) if dif % inc.factor != 0
2378
- dif / inc.factor
2379
- else
2380
- raise "bad time unit '#{incname}'"
2381
- end
2382
- end
2383
-
2384
- end
2385
- class PowNode < ContainerNode
2386
-
2387
- include BinaryNode
2388
-
2389
- def initialize(lhs, rhs)
2390
- @lhs, @rhs = lhs, rhs
2391
- raise TypeError unless NumberNode === @rhs
2392
- end
2393
-
2394
- def to_s
2395
- lhs = @lhs.to_s
2396
- case lhs
2397
- when /\d$/, /[\d\.]/
2398
- lhs = "(#{lhs})"
2399
- end
2400
- rhs = @rhs.to_s
2401
- if rhs == '1'
2402
- lhs
2403
- else
2404
- rhs = "^(#{rhs})" if (/\./ =~ rhs)
2405
- lhs + rhs
2406
- end
2407
- end
2408
-
2409
- attr_reader :lhs, :rhs
2410
- alias :power :rhs
2411
-
2412
- def pow_eval(other)
2413
- case other
2414
- when NumberNode
2415
- PowNode.new(@lhs, @rhs.mul_eval(other))
2416
- else
2417
- super(other)
2418
- end
2419
- end
2420
-
2421
- def flatten2
2422
- x = @lhs.flatten2
2423
- case x
2424
- when NumberNode
2425
- a = @lhs.pow_eval(@rhs)
2426
- when TerminalNode
2427
- a = self
2428
- when PowNode
2429
- a = PowNode.new(x.lhs, x.rhs.mul_eval(@rhs))
2430
- when MulNode, MultiNode
2431
- a = MultiNode.new()
2432
- for gc in x
2433
- a.append(gc.pow_eval(@rhs))
2434
- end
2435
- else
2436
- raise "internal error"
2437
- end
2438
- return a
2439
- end
2440
-
2441
- def name
2442
- case @lhs
2443
- when NumberNode, NameNode
2444
- @lhs.name
2445
- else
2446
- raise "internal error"
2447
- end
2448
- end
2449
-
2450
- def value
2451
- case @lhs
2452
- when NumberNode
2453
- Units::pow_f(@lhs.value, @rhs.value)
2454
- else
2455
- raise(format('%s#value: internal error', self.class.to_s))
2456
- end
2457
- end
2458
-
2459
- def mul_eval(another)
2460
- raise "internal error (#{name}, #{another.name})" if name != another.name
2461
- case @lhs
2462
- when NumberNode
2463
- NumberNode.new(Units::pow_f(@lhs.value, @rhs.value) * another.value)
2464
- else
2465
- self.class.new(@lhs, @rhs.add_eval(another.power))
2466
- end
2467
- end
2468
-
2469
- def sort
2470
- case @lhs
2471
- when NumberNode
2472
- NumberNode.new(Units::pow_f(@lhs.value, @rhs.value))
2473
- else
2474
- self
2475
- end
2476
- end
2477
-
2478
- def factor
2479
- Units::pow_f(@lhs.factor, @rhs.value)
2480
- end
2481
-
2482
- end
2483
-
2484
- module Kakezan
2485
-
2486
- def flatten2
2487
- r = MultiNode.new()
2488
- each do |child|
2489
- case child
2490
- when MultiNode
2491
- r.append child
2492
- when MulNode
2493
- r.append child.flatten2
2494
- when ContainerNode
2495
- r.append child.flatten2
2496
- else
2497
- r.append child
2498
- end
2499
- end
2500
- r
2501
- end
2502
-
2503
- def name
2504
- n = nil
2505
- for c in @children
2506
- next if NumberNode === c
2507
- na = c.name
2508
- if n.nil?
2509
- n = na
2510
- else
2511
- raise "multiple names found" if na != n
2512
- end
2513
- end
2514
- n = "1" if n.nil?
2515
- n
2516
- end
2517
-
2518
- def factor
2519
- f = 1
2520
- for c in @children
2521
- f *= c.factor
2522
- end
2523
- f
2524
- end
2525
-
2526
- end
2527
-
2528
- class MulNode < ContainerNode
2529
-
2530
- include BinaryNode
2531
- include Kakezan
2532
-
2533
- def initialize(lhs, rhs)
2534
- @lhs, @rhs = lhs, rhs
2535
- end
2536
-
2537
- def to_s
2538
- lhs = @lhs.to_s
2539
- rhs = @rhs.to_s
2540
- if (/\d$/ =~ lhs && /^\w/ =~ rhs) then
2541
- "#{lhs} #{rhs}"
2542
- else
2543
- "#{lhs}.#{rhs}"
2544
- end
2545
- end
2546
-
2547
- end
2548
-
2549
- class MultiNode < ContainerNode
2550
-
2551
- include Kakezan
2552
-
2553
- def initialize(*children)
2554
- @children = children
2555
- for c in @children
2556
- raise "# MultiNode.new(#{children.inspect})" unless Node === c
2557
- end
2558
- end
2559
-
2560
- def to_s
2561
- s = @children.join(';')
2562
- s.gsub(/\d;\w/) { |dsw| dsw.sub(/;/, ' ') }.gsub(/;/, '.')
2563
- end
2564
-
2565
- def each
2566
- @children.each {|child| yield child }
2567
- end
2568
-
2569
- attr_reader :children
2570
-
2571
- def append(other)
2572
- case other
2573
- when MultiNode
2574
- @children += other.children
2575
- else
2576
- @children.push other
2577
- end
2578
- end
2579
-
2580
- def sort
2581
- table = {}
2582
- for child in self
2583
- name = child.name
2584
- if (table.include?(name)) then
2585
- table[name] = table[name].mul_eval(child)
2586
- else
2587
- table[name] = child
2588
- end
2589
- end
2590
- list = []
2591
- for name in table.keys.sort
2592
- candi = table[name]
2593
- if PowNode === candi and NumberNode === candi.lhs then
2594
- v = candi.value
2595
- list.push NumberNode.new(v) unless v == 1
2596
- next
2597
- end
2598
- next if candi.power.value == 0
2599
- list.push candi
2600
- end
2601
- if list.length > 1
2602
- list.delete(NumberNode::UNITY)
2603
- end
2604
- self.class.new(*list)
2605
- end
2606
-
2607
- def collect_hash(stopper, op)
2608
- list = []
2609
- for child in self
2610
- list.push(child.send(op, stopper))
2611
- end
2612
- self.class.new(*list).flatten2
2613
- end
2614
-
2615
- def expand(stopper)
2616
- collect_hash(stopper, :expand)
2617
- end
2618
-
2619
- def unalias(stopper)
2620
- collect_hash(stopper, :unalias)
2621
- end
2622
-
2623
- def foldnumber(stopper)
2624
- collect_hash(stopper, :foldnumber)
2625
- end
2626
-
2627
- def value
2628
- raise "this is dimensional units" if (@children.size > 1)
2629
- @children.first ? @children.first.value : NumberNode::UNITY.value
2630
- end
2631
-
2632
- end
2633
- class ShiftNode < ContainerNode
2634
-
2635
- include BinaryNode
2636
-
2637
- def initialize(lhs, rhs)
2638
- @lhs, @rhs = lhs, rhs
2639
- end
2640
-
2641
- attr_reader :lhs, :rhs
2642
- alias :ref :rhs
2643
-
2644
- def to_s
2645
- "(#{@lhs.to_s} @ #{@rhs.to_s})"
2646
- end
2647
-
2648
- def trim2; @lhs; end
2649
- def trim
2650
- self.class.new(@lhs.trim, @rhs.trim2)
2651
- end
2652
-
2653
- def flatten2; @lhs; end
2654
- def flatten
2655
- lf = @lhs.flatten
2656
- case lf
2657
- when ShiftNode
2658
- rf = lf.rhs.add_eval(@rhs)
2659
- self.class.new(lf.lhs, rf)
2660
- else
2661
- self.class.new(lf, @rhs.flatten)
2662
- end
2663
- end
2664
-
2665
- def sort
2666
- self.class.new(@lhs.sort, @rhs.sort)
2667
- end
2668
-
2669
- def ref
2670
- case @lhs
2671
- when ShiftNode
2672
- @lhs.ref.add_eval(@rhs)
2673
- else
2674
- @rhs
2675
- end
2676
- end
2677
-
2678
- def deref
2679
- case @lhs
2680
- when ShiftNode
2681
- @lhs.deref
2682
- else
2683
- @lhs
2684
- end
2685
- end
2686
-
2687
- def name
2688
- @lhs.name
2689
- end
2690
-
2691
- def factor
2692
- @lhs.factor
2693
- end
2694
-
2695
- end
2696
- def initialize string
2697
- case string
2698
- when String
2699
- @string, @ptree = string, nil
2700
- when Node
2701
- @string, @ptree = nil, string
2702
- else
2703
- @string, @ptree = String(string), nil
2704
- end
2705
- @copy = @lexstat = nil
2706
- end
2707
-
2708
- #
2709
- # === LEXICAL ANALYZER ===
2710
- #
2711
-
2712
- def rewind
2713
- @copy = @string.dup.strip
2714
- @lexstat = nil
2715
- end
2716
-
2717
- RE_SPACE = '([ \t])'
2718
- RE_INTEGER = '([-+]?\d+)'
2719
- RE_EXP = '([eE][-+]?[0-9]+)'
2720
- RE_REAL = "([-+]?[0-9]*(\\.[0-9]*#{RE_EXP}?|#{RE_EXP}))"
2721
- RE_YEAR = "([-+]?[0-9]{1,4})"
2722
- RE_MONTH = "(0?[1-9]|1[0-2])"
2723
- RE_DAY = "([12][0-9]|30|31|0?[1-9])"
2724
- RE_HOUR = "(2[0-3]|[0-1]?[0-9])"
2725
- RE_MINUTE = "([0-5]?[0-9])"
2726
- RE_SECOND = "((#{RE_MINUTE}|60)(\\.[0-9]*)?)"
2727
- RE_NAME = "(%|[a-zA-Z][a-zA-Z_]*([0-9]+[a-zA-Z_]+)*)"
2728
-
2729
- RE_DATE = "#{RE_YEAR}-#{RE_MONTH}-#{RE_DAY}"
2730
- RE_TIME = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9])(:#{RE_SECOND})?)?"
2731
- RE_HandM = "#{RE_HOUR}((:[0-5]?[0-9]|[0-5][0-9]))?"
2732
-
2733
- def next_token
2734
-
2735
- # decomment
2736
- @copy.sub!(/^#.*/, '');
2737
-
2738
- if @copy.sub!(%r{^\s*(\))}, '') then
2739
- @lexstat = nil
2740
- return [$1, $1]
2741
- end
2742
-
2743
- if @copy.sub!(%r{^\s*(\()\s*}, '') then
2744
- return [$1, $1]
2745
- end
2746
-
2747
- if @copy.sub!(%r{^[ \t]*(@)[ \t]*}, '') \
2748
- or @copy.sub!(%r{^[ \t]+(after|from|since|ref)[ \t]+}i, '') then
2749
- @lexstat = :SHIFT_SEEN
2750
- return [:SHIFT, $1]
2751
- end
2752
-
2753
- if @copy.sub!(%r{^[ \t]*(/)[ \t]*}, '') \
2754
- or @copy.sub!(%r{^[ \t]+(per)[ \t]+}i, '') then
2755
- @lexstat = nil
2756
- return [:DIVIDE, $1]
2757
- end
2758
-
2759
- if @copy.sub!(%r{^(\^|\*\*)}, '') then
2760
- @lexstat = nil
2761
- return [:EXPONENT, $1]
2762
- end
2763
-
2764
- if @copy.sub!(%r{^(\.|\*|[ \t]+)}, '') then
2765
- @lexstat = nil
2766
- return [:MULTIPLY, $1]
2767
- end
2768
-
2769
- if :SHIFT_SEEN === @lexstat \
2770
- and @copy.sub!(%r{^#{RE_DATE}T?[ \t]*}, '') then
2771
- y, m, d = $1, $2, $3
2772
- @lexstat = :DATE_SEEN
2773
- return [:DATE, XDate.new(y.to_i, m.to_i, d.to_i)]
2774
- end
2775
-
2776
- if :SHIFT_SEEN === @lexstat \
2777
- and @copy.sub!(%r{^now[ \t]*}, '') then
2778
- @lexstat = nil
2779
- return [:DATE, :now]
2780
- end
2781
-
2782
- if :DATE_SEEN === @lexstat \
2783
- and @copy.sub!(%r{^#{RE_TIME}[ \t]*}, '') then
2784
- h, m, s = $1, $3, $5
2785
- m = m.sub(/:/,'') if m
2786
- s = 0 if s.nil?
2787
- @lexstat = :TIME_SEEN
2788
- return [:TIME, ((h.to_i * 60 + m.to_i) * 60 + Float(s))]
2789
- end
2790
-
2791
- if :DATE_SEEN === @lexstat \
2792
- and @copy.sub!(%r{^([0-2][0-9])([0-5][0-9])[ \t]*}, '') then
2793
- h, m = $1, $2
2794
- @lexstat = :TIME_SEEN
2795
- return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)]
2796
- end
2797
-
2798
- if :DATE_SEEN === @lexstat \
2799
- and @copy.sub!(%r{^([0-9])([0-5][0-9])[ \t]*}, '') then
2800
- h, m = $1, $2
2801
- @lexstat = :TIME_SEEN
2802
- return [:TIME, ((h.to_i * 60 + m.to_i) * 60.0)]
2803
- end
2804
-
2805
- if :TIME_SEEN === @lexstat \
2806
- and @copy.sub!(%r{^UTC[ \t]*}, '') then
2807
- @lexstat = nil
2808
- return [:ZONE, 0]
2809
- end
2810
-
2811
- if :TIME_SEEN === @lexstat \
2812
- and @copy.sub!(%r{^([-+]?)#{RE_HandM}[ \t]*}, '') then
2813
- sgn, h, m = $1, $2, $4
2814
- m = m.sub(/:/,'') if m
2815
- @lexstat = nil
2816
- h = h.to_i
2817
- h = -h if sgn == "-"
2818
- m = m.to_i
2819
- m = -m if sgn == "-"
2820
- return [:ZONE, ((h * 60) + m)]
2821
- end
2822
-
2823
- if @copy.sub!(%r{^#{RE_NAME}}, '') then
2824
- @lexstat = nil
2825
- return [:NAME, $1]
2826
- end
2827
-
2828
- if @copy.sub!(%r{^#{RE_REAL}}, '') then
2829
- @lexstat = nil
2830
- return [:REAL, $1.to_f]
2831
- end
2832
-
2833
- if @copy.sub!(%r{^#{RE_INTEGER}}, '') then
2834
- @lexstat = nil
2835
- return [:INT, $1.to_i]
2836
- end
2837
-
2838
- if @copy.sub!(%r{^(-)}, '') then
2839
- @lexstat = nil
2840
- return [:MULTIPLY, $1]
2841
- end
2842
-
2843
- if @copy.sub!(%r{^(.)}, '') then
2844
- return [$1, $1]
2845
- end
2846
-
2847
- return [false, false]
2848
-
2849
- end
2850
-
2851
- #
2852
- # === USER LEVEL METHODS ===
2853
- #
2854
-
2855
- def tokens
2856
- rewind
2857
- x = []
2858
- while (t = next_token).first
2859
- x.push t
2860
- end
2861
- x
2862
- end
2863
-
2864
- def do_parse2
2865
- rewind
2866
- return NumberNode.new(1) if @string.nil? or @string.empty?
2867
- pa = do_parse
2868
- pa ? pa : ErrorNode.new(@string)
2869
- end
2870
-
2871
- def ptree
2872
- @ptree = do_parse2 if not @ptree
2873
- @ptree
2874
- end
2875
-
2876
- def dup
2877
- @string ? self.class.new(@string) : self.class.new(@ptree)
2878
- end
2879
-
2880
- def parse
2881
- dup.parse!
2882
- end
2883
-
2884
- def parse!
2885
- @ptree = do_parse2 if not @ptree
2886
- self
2887
- end
2888
-
2889
- def self::parse(string)
2890
- new(string).parse!
2891
- end
2892
-
2893
- =begin
2894
- --- reduce0
2895
- just do nothing.
2896
- =end
2897
-
2898
- def reduce0
2899
- self
2900
- end
2901
-
2902
- =begin
2903
- --- reduce1
2904
- removes unnecessary parentheses.
2905
- =end
2906
-
2907
- def reduce1
2908
- @string = ptree.to_s
2909
- self
2910
- end
2911
-
2912
- =begin
2913
- --- reduce2
2914
- removes shift operator within multiplication/division/exponent
2915
- =end
2916
-
2917
- def reduce2
2918
- @ptree = ptree.reduce2
2919
- @string = nil
2920
- self
2921
- end
2922
-
2923
- =begin
2924
- --- reduce3
2925
- flattens expression and collects all factors
2926
- =end
2927
-
2928
- def reduce3
2929
- @ptree = ptree.reduce3
2930
- @string = nil
2931
- self
2932
- end
2933
-
2934
- =begin
2935
- --- reduce4
2936
- collects terms with the same name
2937
- =end
2938
-
2939
- def reduce4
2940
- @ptree = ptree.reduce4
2941
- @string = nil
2942
- self
2943
- end
2944
-
2945
- =begin
2946
- --- reduce5
2947
- expands all terms recursively
2948
- =end
2949
-
2950
- def reduce5
2951
- @ptree = ptree.reduce5
2952
- @string = nil
2953
- self
2954
- end
2955
-
2956
- attr_reader :string
2957
-
2958
- def to_s
2959
- @string = @ptree.to_s if @string.nil?
2960
- @string
2961
- end
2962
-
2963
- def inspect
2964
- if @ptree.nil? then
2965
- "Units{#{@string}}"
2966
- else
2967
- "Units[#{@ptree.inspect}]".gsub(/Units::/, '').gsub(/Node\[/, '[')
2968
- end
2969
- end
2970
-
2971
- def self::[](string)
2972
- new(string)
2973
- end
2974
-
2975
- def self::parse(string)
2976
- new(string).parse!
2977
- end
2978
-
2979
- def eval(x = 0)
2980
- r5 = ptree.reduce5
2981
- case r = r5.ref
2982
- when TimeNode
2983
- r.add(x, r5.name)
2984
- else
2985
- fac = NumberNode.new(x + r.value)
2986
- self.class.new(MulNode.new(fac, r5.deref))
2987
- end
2988
- end
2989
-
2990
- def convert(numeric, to_units)
2991
- to_units = Units.new( to_units ) if to_units.is_a?(String)
2992
- r5 = dup.ptree.reduce5
2993
- case r = r5.ref
2994
- when TimeNode
2995
- r.add_time(r5.deref.mul(numeric)).div_time(to_units.ptree)
2996
- else
2997
- shift1 = r.value
2998
- numeric = shift1 + numeric if shift1 != 0
2999
- fact = r5.divide(tp = to_units.dup.ptree).reduce5.value
3000
- numeric *= fact if fact != 1
3001
- shift2 = tp.reduce5.ref.value
3002
- numeric = numeric - shift2 if shift2 != 0
3003
- numeric
3004
- end
3005
- end
3006
-
3007
- def factor_and_offset(to_units)
3008
- # To convert a numeric from self to to_units:
3009
- # scale_factor * numeric + add_offset
3010
- to_units = Units.new( to_units ) if to_units.is_a?(String)
3011
- add_offset = convert(0, to_units)
3012
- scale_factor = convert(1, to_units) - add_offset
3013
- [ scale_factor, add_offset ]
3014
- end
3015
-
3016
- def convert2(val, to_units)
3017
- # Like Units#convert, but applicable to any Numeric-like objects.
3018
- # Returns the original value if the units are incompatible.
3019
- to_units = Units.new( to_units ) if to_units.is_a?(String)
3020
- if ( self == to_units )
3021
- val
3022
- elsif ( self =~ to_units )
3023
- if Numeric===val
3024
- convert( val, to_units )
3025
- else
3026
- factor, offset = factor_and_offset( to_units )
3027
- val*factor + offset
3028
- end
3029
- else
3030
- unless $VERBOSE.nil?
3031
- $stderr.print( "*WARNING*: " +
3032
- "incompatible units: #{self.to_s} and #{to_units.to_s}\n")
3033
- caller(0).each{|c| $stderr.print "\t* ",c,"\n"}
3034
- end
3035
- val
3036
- end
3037
- end
3038
-
3039
- @@reduce = :reduce4
3040
-
3041
- def self::reduce_level
3042
- @@reduce.to_s[-1]
3043
- end
3044
-
3045
- def self::reduce_level=(n)
3046
- @@reduce = case n
3047
- when 1 then :reduce1
3048
- when 2 then :reduce2
3049
- when 3 then :reduce3
3050
- when 4 then :reduce4
3051
- else :reduce5
3052
- end
3053
- end
3054
-
3055
- def binop(op, other)
3056
- case other
3057
- when Numeric
3058
- other = NumberNode.new(other)
3059
- when Units
3060
- other = other.ptree
3061
- end
3062
- q = self.ptree.send(op, other).send(@@reduce)
3063
- Units.new(q)
3064
- end
3065
-
3066
- def *(other)
3067
- binop(:mul, other)
3068
- end
3069
-
3070
- def **(other)
3071
- binop(:pow, other)
3072
- end
3073
-
3074
- def /(other)
3075
- binop(:divide, other)
3076
- end
3077
-
3078
- def ^(other)
3079
- binop(:shift, other)
3080
- end
3081
-
3082
- def ==(other)
3083
- case other
3084
- when self.class
3085
- dup.reduce5.to_s == other.dup.reduce5.to_s
3086
- else
3087
- false
3088
- end
3089
- end
3090
-
3091
- #def === (other)
3092
- # reduce5.ptree.deref.to_s == other.reduce5.ptree.deref.to_s
3093
- #end
3094
-
3095
- alias === ==
3096
-
3097
- #def === (other)
3098
- # # returns true if other is within a factor and/or offset of difference.
3099
- # case other
3100
- # when self.class
3101
- # (self/other).reduce5.ptree.children.each do |child|
3102
- # return false if !( NumberNode === child )
3103
- # end
3104
- # true
3105
- # else
3106
- # false
3107
- # end
3108
- #end
3109
-
3110
-
3111
- def =~(other)
3112
- case other
3113
- when self.class
3114
- (self/other).reduce5.ptree.children.each{ |node|
3115
- return false unless NumberNode === node
3116
- }
3117
- true
3118
- else
3119
- false
3120
- end
3121
- end
3122
-
3123
- def self::pow_f(a, b)
3124
- if Integer === b and b < 0 then
3125
- a ** b.to_f
3126
- else
3127
- a ** b
3128
- end
3129
- end
3130
-
3131
- ##### racc 1.4.5 generates ###
3132
-
3133
- racc_reduce_table = [
3134
- 0, 0, :racc_error,
3135
- 0, 17, :_reduce_none,
3136
- 1, 17, :_reduce_2,
3137
- 1, 17, :_reduce_3,
3138
- 1, 18, :_reduce_none,
3139
- 3, 18, :_reduce_5,
3140
- 3, 18, :_reduce_6,
3141
- 1, 19, :_reduce_none,
3142
- 1, 19, :_reduce_none,
3143
- 2, 19, :_reduce_9,
3144
- 3, 19, :_reduce_10,
3145
- 3, 19, :_reduce_11,
3146
- 3, 19, :_reduce_12,
3147
- 3, 19, :_reduce_13,
3148
- 1, 22, :_reduce_14,
3149
- 2, 22, :_reduce_15,
3150
- 3, 22, :_reduce_16,
3151
- 3, 22, :_reduce_17,
3152
- 1, 20, :_reduce_none,
3153
- 3, 20, :_reduce_19,
3154
- 1, 23, :_reduce_20,
3155
- 1, 23, :_reduce_21,
3156
- 1, 21, :_reduce_none,
3157
- 3, 21, :_reduce_23,
3158
- 1, 24, :_reduce_24,
3159
- 2, 24, :_reduce_25,
3160
- 3, 24, :_reduce_26 ]
3161
-
3162
- racc_reduce_n = 27
3163
-
3164
- racc_shift_n = 39
3165
-
3166
- racc_action_table = [
3167
- 3, 4, 34, 4, 14, 22, 23, 36, 9, 10,
3168
- 9, 4, 24, 5, 4, 26, 37, 4, 9, 10,
3169
- 4, 9, 38, 5, 9, 10, 20, 9, 4, 5,
3170
- nil, 4, 20, nil, nil, 9, nil, 24, 9, 10,
3171
- 26, nil, 16, 5, 17, 18, nil, 4, 10, 4,
3172
- nil, 4, 5, 12, 9, 12, 9, 12, 9, 4,
3173
- nil, nil, nil, nil, nil, 12, 9 ]
3174
-
3175
- racc_action_check = [
3176
- 0, 0, 24, 26, 6, 13, 14, 33, 0, 0,
3177
- 26, 5, 26, 0, 20, 26, 34, 18, 5, 5,
3178
- 12, 20, 35, 5, 18, 18, 20, 12, 16, 18,
3179
- nil, 17, 12, nil, nil, 16, nil, 16, 17, 17,
3180
- 16, nil, 8, 17, 8, 8, nil, 29, 8, 31,
3181
- nil, 15, 8, 29, 29, 31, 31, 15, 15, 1,
3182
- nil, nil, nil, nil, nil, 1, 1 ]
3183
-
3184
- racc_action_pointer = [
3185
- -1, 57, nil, nil, nil, 9, 4, nil, 38, nil,
3186
- nil, nil, 18, -10, 6, 49, 26, 29, 15, nil,
3187
- 12, nil, nil, nil, -10, nil, 1, nil, nil, 45,
3188
- nil, 47, nil, -8, 3, 7, nil, nil, nil ]
3189
-
3190
- racc_action_default = [
3191
- -1, -7, -8, -3, -20, -27, -27, -2, -4, -21,
3192
- -14, -15, -27, -27, -27, -9, -27, -27, -27, -18,
3193
- -27, -16, -17, 39, -24, -22, -27, -5, -6, -10,
3194
- -12, -11, -13, -27, -25, -27, -19, -26, -23 ]
3195
-
3196
- racc_goto_table = [
3197
- 2, 15, 7, 28, 21, 2, 6, 13, 27, nil,
3198
- 29, 31, 19, 35, nil, nil, 19, 30, 32, nil,
3199
- 19, nil, nil, nil, nil, nil, 19 ]
3200
-
3201
- racc_goto_check = [
3202
- 7, 6, 2, 5, 4, 7, 1, 2, 4, nil,
3203
- 6, 6, 7, 5, nil, nil, 7, 7, 7, nil,
3204
- 7, nil, nil, nil, nil, nil, 7 ]
3205
-
3206
- racc_goto_pointer = [
3207
- nil, 6, 2, nil, -8, -13, -7, 0, nil ]
3208
-
3209
- racc_goto_default = [
3210
- nil, nil, nil, 8, 33, nil, 1, 11, 25 ]
3211
-
3212
- racc_token_table = {
3213
- false => 0,
3214
- Object.new => 1,
3215
- :INT => 2,
3216
- :ERR => 3,
3217
- :SHIFT => 4,
3218
- :SPACE => 5,
3219
- :MULTIPLY => 6,
3220
- :DIVIDE => 7,
3221
- :EXPONENT => 8,
3222
- :REAL => 9,
3223
- :NAME => 10,
3224
- :DATE => 11,
3225
- :TIME => 12,
3226
- :ZONE => 13,
3227
- "(" => 14,
3228
- ")" => 15 }
3229
-
3230
- racc_use_result_var = false
3231
-
3232
- racc_nt_base = 16
3233
-
3234
- Racc_arg = [
3235
- racc_action_table,
3236
- racc_action_check,
3237
- racc_action_default,
3238
- racc_action_pointer,
3239
- racc_goto_table,
3240
- racc_goto_check,
3241
- racc_goto_default,
3242
- racc_goto_pointer,
3243
- racc_nt_base,
3244
- racc_reduce_table,
3245
- racc_token_table,
3246
- racc_shift_n,
3247
- racc_reduce_n,
3248
- racc_use_result_var ]
3249
-
3250
- Racc_token_to_s_table = [
3251
- '$end',
3252
- 'error',
3253
- 'INT',
3254
- 'ERR',
3255
- 'SHIFT',
3256
- 'SPACE',
3257
- 'MULTIPLY',
3258
- 'DIVIDE',
3259
- 'EXPONENT',
3260
- 'REAL',
3261
- 'NAME',
3262
- 'DATE',
3263
- 'TIME',
3264
- 'ZONE',
3265
- '"("',
3266
- '")"',
3267
- '$start',
3268
- 'unit_spec',
3269
- 'origin_exp',
3270
- 'unit_exp',
3271
- 'value_exp',
3272
- 'timestamp',
3273
- 'power_exp',
3274
- 'number_exp',
3275
- 'time_exp']
3276
-
3277
- Racc_debug_parser = false
3278
-
3279
- ##### racc system variables end #####
3280
-
3281
- # reduce 0 omitted
3282
-
3283
- # reduce 1 omitted
3284
-
3285
- def _reduce_2( val, _values)
3286
- yyaccept;
3287
- end
3288
-
3289
- def _reduce_3( val, _values)
3290
- yyerrok
3291
- end
3292
-
3293
- # reduce 4 omitted
3294
-
3295
- def _reduce_5( val, _values)
3296
- val[0].shift(val[2])
3297
- end
3298
-
3299
- def _reduce_6( val, _values)
3300
- val[0].shift(val[2])
3301
- end
3302
-
3303
- # reduce 7 omitted
3304
-
3305
- # reduce 8 omitted
3306
-
3307
- def _reduce_9( val, _values)
3308
- val[0].mul(val[1])
3309
- end
3310
-
3311
- def _reduce_10( val, _values)
3312
- val[0].mul(val[2])
3313
- end
3314
-
3315
- def _reduce_11( val, _values)
3316
- val[0].divide(val[2])
3317
- end
3318
-
3319
- def _reduce_12( val, _values)
3320
- val[0].mul(val[2])
3321
- end
3322
-
3323
- def _reduce_13( val, _values)
3324
- val[0].divide(val[2])
3325
- end
3326
-
3327
- def _reduce_14( val, _values)
3328
- NameNode.new(val[0])
3329
- end
3330
-
3331
- def _reduce_15( val, _values)
3332
- val[0].pow(val[1])
3333
- end
3334
-
3335
- def _reduce_16( val, _values)
3336
- val[0].pow(val[2])
3337
- end
3338
-
3339
- def _reduce_17( val, _values)
3340
- val[1]
3341
- end
3342
-
3343
- # reduce 18 omitted
3344
-
3345
- def _reduce_19( val, _values)
3346
- val[1]
3347
- end
3348
-
3349
- def _reduce_20( val, _values)
3350
- NumberNode.new(val[0])
3351
- end
3352
-
3353
- def _reduce_21( val, _values)
3354
- NumberNode.new(val[0])
3355
- end
3356
-
3357
- # reduce 22 omitted
3358
-
3359
- def _reduce_23( val, _values)
3360
- val[1]
3361
- end
3362
-
3363
- def _reduce_24( val, _values)
3364
- TimeNode.new(val[0], 0.0, 0)
3365
- end
3366
-
3367
- def _reduce_25( val, _values)
3368
- TimeNode.new(val[0], val[1], 0)
3369
- end
3370
-
3371
- def _reduce_26( val, _values)
3372
- TimeNode.new(val[0], val[1], val[2])
3373
- end
3374
-
3375
- def _reduce_none( val, _values)
3376
- val[0]
3377
- end
3378
-
3379
- end # class Units
3380
- end # module NumRu
3381
-
3382
- ####################
3383
- if $0 == __FILE__
3384
- include NumRu
3385
-
3386
- def assert(test, seikai)
3387
- raise "#{test.inspect} != #{seikai.inspect}" if test != seikai
3388
- puts "ok #{seikai.inspect}"
3389
- end
3390
-
3391
- puts "=== reduce1 ==="
3392
-
3393
- assert Units.new('').reduce1.to_s, ""
3394
- assert Units.new('m').reduce1.to_s, "m"
3395
- assert Units.new('3').reduce1.to_s, "3"
3396
- assert Units.new('3.14').reduce1.to_s, "3.14"
3397
- assert Units.new('m2').reduce1.to_s, "m2"
3398
- assert Units.new('m.s').reduce1.to_s, "m.s"
3399
- assert Units.new('m/s').reduce1.to_s, "m.s-1"
3400
- assert Units.new('kg.m/s2').reduce1.to_s, "kg.m.(s2)-1"
3401
- assert Units.new('s @ 2003-11-29').reduce1.to_s,
3402
- "(s @ 2003-11-29T00:00:00.00 +00:00)"
3403
- assert Units.new('s @ 2003-11-29T11:24').reduce1.to_s,
3404
- "(s @ 2003-11-29T11:24:00.00 +00:00)"
3405
- assert Units.new('s @ 2003-11-29T11:24:11 -09:00').reduce1.to_s,
3406
- "(s @ 2003-11-29T11:24:11.00 -09:00)"
3407
-
3408
- assert Units.new('100').reduce1.to_s, "100"
3409
- assert Units.new('(10)^2').reduce1.to_s, "(10)2"
3410
- assert Units.new('(10)^2/100').reduce1.to_s, "(10)2.(100)-1"
3411
-
3412
- puts "=== reduce2 ==="
3413
-
3414
- assert Units.new('s @ 2003-11-29').reduce2.to_s,
3415
- "(s @ 2003-11-29T00:00:00.00 +00:00)"
3416
- assert Units.new('m/(s @ 2003-11-29)').reduce2.to_s, "m.s-1"
3417
- assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce2.to_s, "m.(K.s)-1"
3418
-
3419
- assert Units.new('(10)^2/100').reduce2.to_s, "(10)2.(100)-1"
3420
-
3421
- puts "=== reduce3 ==="
3422
-
3423
- assert Units::MultiNode.new(Units::NameNode.new('a'), \
3424
- Units::NumberNode.new(1), \
3425
- Units::NameNode.new('b')).to_s, 'a.1 b'
3426
-
3427
- assert Units.new('kg').reduce3.inspect, "Units[Name[kg]]"
3428
- assert Units.new('kg.m').reduce3.inspect, "Units[Multi[Name[kg], Name[m]]]"
3429
- assert Units.new('kg.m.s').reduce3.inspect,
3430
- "Units[Multi[Name[kg], Name[m], Name[s]]]"
3431
-
3432
- assert Units.new('(m.s)^2').reduce3.inspect,
3433
- "Units[Multi[Pow[Name[m], Number[2]], Pow[Name[s], Number[2]]]]"
3434
- assert Units.new('K @ 273.15').reduce3.inspect,
3435
- "Units[Shift[Name[K], Number[273.15]]]"
3436
- assert Units.new('((a.b)^2)^2').reduce3.inspect,
3437
- "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]]]]"
3438
- assert Units.new('((a.b)^2 c4 d)^2').reduce3.inspect,
3439
- "Units[Multi[Pow[Name[a], Number[4]], Pow[Name[b], Number[4]], Pow[Name[c], Number[8]], Pow[Name[d], Number[2]]]]"
3440
- assert Units.new('((a.b)^2 c4 d)^2').reduce3.to_s,
3441
- "a4 b4 c8 d2"
3442
- assert Units.new('((a.b)^2 a4 b)^2').reduce3.to_s,
3443
- "a4 b4 a8 b2"
3444
-
3445
- assert Units.new('s @ 2003-11-29').reduce3.to_s,
3446
- "(s @ 2003-11-29T00:00:00.00 +00:00)"
3447
- assert Units.new('m/(s @ 2003-11-29)').reduce3.to_s, "m.s-1"
3448
- assert Units.new('m/((K @ 273.15) (s from 2003-11-29))').reduce3.to_s, "m.K-1 s-1"
3449
-
3450
- assert Units.new('(10)^2/100').reduce3.to_s, "(10)2.(100)-1"
3451
-
3452
- puts "=== reduce4 ==="
3453
-
3454
- assert Units.new('((a.b)^2 a4 b @ now)^2 @ 273.15').reduce4.to_s,
3455
- "(a12 b6 @ 273.15)"
3456
-
3457
- assert Units.new('km2').reduce4.to_s, "km2"
3458
- assert Units.new('hours.hour').reduce4.to_s, "hour2"
3459
- assert Units.new('(10)^2').reduce4.to_s, "100"
3460
- assert Units.new('100/10').reduce4.to_s, "10.0"
3461
- assert Units.new('(10)^2/100').reduce4.to_s, "1.0"
3462
-
3463
- puts "=== reduce5 ==="
3464
-
3465
- assert Units.new('km2').reduce5.to_s, "1000000 m2"
3466
- assert Units.new('(10)^2/100').reduce5.to_s, "1.0"
3467
-
3468
- assert Units.new('hPa').reduce5.to_s, "100 kg.m-1 s-2"
3469
- assert Units.new('mb').reduce5.to_s, "100.0 kg.m-1 s-2"
3470
-
3471
- assert Units.new('hPa/mb').reduce5.to_s, "1.0"
3472
-
3473
- assert Units.new('(K @ 273.15)@ 10').reduce5.to_s, "(K @ 283.15)"
3474
-
3475
- puts "=== APPLICATIONS ==="
3476
-
3477
- assert Units.new('km @ 2').convert(3, Units.new('m @ 100')), 4900
3478
- assert Units.new('degree_F').convert(32, Units.new('K')).to_s, "273.15"
3479
-
3480
- u1 = Units.new('m/s')
3481
- u2 = Units.new('mm/s')
3482
- assert((u1/u2).to_s, "m.mm-1")
3483
- assert((u1*u2).to_s, "m.mm.s-2")
3484
-
3485
- u1 = Units.new('years since 1999-01-01 00:00').reduce4
3486
- u2 = Units.new('hours since 2001-01-01 00:00').reduce4
3487
- assert u1.convert(3, u2), 24 * 365
3488
- u3 = Units.new('months since 2001-01-01 00:00').reduce4
3489
- assert u1.convert(3, u3), 12.0
3490
-
3491
- Units.reduce_level = 3
3492
- assert((Units.new('hours') ** 2).to_s, "hours2")
3493
- Units.reduce_level = 4
3494
- assert((Units.new('hours') ** 2).to_s, "hour2")
3495
- Units.reduce_level = 5
3496
- assert((Units.new('hours') ** 2).to_s, "12960000 s2")
3497
-
3498
- assert(Units.new('day') =~ Units.new('s since 2002-01-01'), true)
3499
- assert(Units.new('m') =~ Units.new('1'), false)
3500
-
3501
- un1 = Units['day since 2000-01-01']
3502
- un2 = Units['s since 2000-01-01']
3503
- assert(un1.convert(0, un2), 0.0)
3504
- assert(un1.convert(1, un2), 86400.0)
3505
- end
1
+ require "numru/units/version"
2
+ require "numru/units/units.rb"