asciimath2unitsml 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 939880ec148bae10c193dc7958d2866ff5788d7e98617158bfde25a736576b13
4
- data.tar.gz: dc8d0afdfc6c134341735b55bfed5ae68b50da906ea5765e8404135d58adf011
3
+ metadata.gz: dfcf63b9b9f9f447f63f744608bb19423025756a5f174a123acb5fbecb2143a4
4
+ data.tar.gz: a45ba18eb0b8090ba886453bedf91ed18f531afc31061a90e9f33a6bc6e0085b
5
5
  SHA512:
6
- metadata.gz: f2f5e07977df15d3354ce4e509c585de929caf592ccd9ccd6974d5830b932b0982bd1c7c3cc0483c028e64846032925907316406f0f95cb9c6dda49ecb1ef2b6
7
- data.tar.gz: e1f358839665b8b815772e32c30ecaea7581061962d7b87cb5e844aaddaed666ae1b95fb2885e7f8eff4bc0d656325660eeba5cf5a45414690614e987da7f31f
6
+ metadata.gz: 61c26594d8ab5b4ab07439085ce23de798b8f4e38c0272790a60d64a247f10a19778e4d0cbdb37b9a3a79d6994a6a14ebf97c0dd031551366019ebe2905c5612
7
+ data.tar.gz: e60ff3e91ff37a31ac3d5ac0beccb30c5f05c9c9590e1cc0dd01915ff1c9b57520af1d11b14c1b718173d7258a41b318f67db4a509ccd3ed3b4af43501b50d87
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .rubocop-https--*
data/.rubocop.yml ADDED
@@ -0,0 +1,14 @@
1
+ # This project follows the Ribose OSS style guide.
2
+ # https://github.com/riboseinc/oss-guides
3
+ # All project-specific additions and overrides should be specified in this file.
4
+ inherit_from:
5
+ - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
6
+
7
+ # local repo-specific modifications
8
+
9
+ AllCops:
10
+ DisplayCopNames: false
11
+ StyleGuideCopsOnly: false
12
+ TargetRubyVersion: 2.4
13
+ Rails:
14
+ Enabled: true
data/README.adoc CHANGED
@@ -53,6 +53,8 @@ from UnitsDB. For example, `unitsml(cal_th/cm^2, name: langley)`.
53
53
  The unit-string gives the canonical representation of the unit, but SYMBOL is what will be rendered.
54
54
  For example, `unitsml(cal_th/cm^2, name: langley, symbol: La)`, or `unitsml(mm*s^-2, symbol: mm cdot s^-2)`.
55
55
  (All variables in SYMBOL are rendered upright, as is the default for units.)
56
+ * `unitsml(unit-string, multiplier: SYMBOL)` provides an alternate symbol for the multiliper of
57
+ units. The options are an XML entity, or the values `space` or `nospace` (for which see discussion under _Usage_).
56
58
 
57
59
  Standalone prefixes can be recognised by replacing the unit with hyphen; so `unitsml(p-)` corresponds
58
60
  to the standalone prefix "pico" (and is rendered as "p").
@@ -230,7 +232,7 @@ This table can be generated (in Asciidoc format) through `Asciimath2UnitsML::Con
230
232
  | ton | ton of TNT (energy equivalent): `ton_TNT` | ton of refrigeration (12 000 Btu_IT/h): `ton_refrigeration` | | | |
231
233
  | tsp | teaspoon: `tsp` | teaspoon (FDA): `tsp_label` | | | |
232
234
  | yd | yard: `yd` | yard (based on US survey foot): `yd_US_survey` | | | |
233
- | º | degree (degree of arc): `deg` | | | | |
235
+ | ° | degree (degree of arc): `deg` | | | | |
234
236
  | γ | gamma: `gamma` | | | | |
235
237
  | μ | micron: `micron` | | | | |
236
238
  | Ω | ohm: `Ohm` | | | | |
@@ -258,3 +260,4 @@ This table can be generated (in Asciidoc format) through `Asciimath2UnitsML::Con
258
260
  | °R | degree Rankine: `degR` | | | | |
259
261
  | ƛ~C~ | natural unit of length: `lambda-bar_C` | | | | |
260
262
  |===
263
+
@@ -57,7 +57,7 @@ Gem::Specification.new do |spec|
57
57
  spec.add_development_dependency "guard-rspec", "~> 4.7"
58
58
  spec.add_development_dependency "rake", "~> 12.0"
59
59
  spec.add_development_dependency "rspec", "~> 3.6"
60
- spec.add_development_dependency "rubocop", "= 0.54.0"
60
+ spec.add_development_dependency "rubocop", "~> 1.5.2"
61
61
  spec.add_development_dependency "simplecov", "~> 0.15"
62
62
  spec.add_development_dependency "timecop", "~> 0.9"
63
63
  spec.add_development_dependency "rexml"
@@ -10,21 +10,25 @@ require_relative "unit"
10
10
 
11
11
  module Asciimath2UnitsML
12
12
  MATHML_NS = "http://www.w3.org/1998/Math/MathML".freeze
13
- UNITSML_NS = "http://unitsml.nist.gov/2005".freeze
13
+ UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
14
14
 
15
15
  class Conv
16
16
  def initialize(options = {})
17
- @dimensions_id = read_yaml("../unitsdb/dimensions.yaml").each_with_object({}) do |(k, v), m|
17
+ @dimensions_id = read_yaml("../unitsdb/dimensions.yaml").
18
+ each_with_object({}) do |(k, v), m|
18
19
  m[k.to_s] = UnitsDB::Dimension.new(k, v)
19
20
  end
20
- @prefixes_id = read_yaml("../unitsdb/prefixes.yaml").each_with_object({}) do |(k, v), m|
21
+ @prefixes_id = read_yaml("../unitsdb/prefixes.yaml").
22
+ each_with_object({}) do |(k, v), m|
21
23
  m[k] = UnitsDB::Prefix.new(k, v)
22
24
  end
23
25
  @prefixes = flip_name_and_symbol(@prefixes_id)
24
- @quantities = read_yaml("../unitsdb/quantities.yaml").each_with_object({}) do |(k, v), m|
26
+ @quantities = read_yaml("../unitsdb/quantities.yaml").
27
+ each_with_object({}) do |(k, v), m|
25
28
  m[k.to_s] = UnitsDB::Quantity.new(k, v)
26
29
  end
27
- @units_id = read_yaml("../unitsdb/units.yaml").each_with_object({}) do |(k, v), m|
30
+ @units_id = read_yaml("../unitsdb/units.yaml").
31
+ each_with_object({}) do |(k, v), m|
28
32
  m[k.to_s] = UnitsDB::Unit.new(k.to_s, v)
29
33
  end
30
34
  @units = flip_name_and_symbols(@units_id)
@@ -48,7 +52,7 @@ module Asciimath2UnitsML
48
52
  <PrefixSymbol type="ASCII">#{@prefixes[p].ascii}</PrefixSymbol>
49
53
  <PrefixSymbol type="unicode">#{@prefixes[p].unicode}</PrefixSymbol>
50
54
  <PrefixSymbol type="LaTeX">#{@prefixes[p].latex}</PrefixSymbol>
51
- <PrefixSymbol type="HTML">#{HTMLEntities.new.encode(@prefixes[p].html, :basic)}</PrefixSymbol>
55
+ <PrefixSymbol type="HTML">#{htmlent @prefixes[p].html}</PrefixSymbol>
52
56
  </Prefix>
53
57
  END
54
58
  end.join("\n")
@@ -63,9 +67,26 @@ module Asciimath2UnitsML
63
67
  END
64
68
  end
65
69
 
70
+ U2D = {
71
+ "m" => { dimension: "Length", order: 1, symbol: "L" },
72
+ "g" => { dimension: "Mass", order: 2, symbol: "M" },
73
+ "kg" => { dimension: "Mass", order: 2, symbol: "M" },
74
+ "s" => { dimension: "Time", order: 3, symbol: "T" },
75
+ "A" => { dimension: "ElectricCurrent", order: 4, symbol: "I" },
76
+ "K" => { dimension: "ThermodynamicTemperature", order: 5,
77
+ symbol: "Theta" },
78
+ "degK" => { dimension: "ThermodynamicTemperature", order: 5,
79
+ symbol: "Theta" },
80
+ "mol" => { dimension: "AmountOfSubstance", order: 6, symbol: "N" },
81
+ "cd" => { dimension: "LuminousIntensity", order: 7, symbol: "J" },
82
+ "deg" => { dimension: "PlaneAngle", order: 8, symbol: "Phi" },
83
+ }.freeze
84
+
66
85
  def units2dimensions(units)
67
86
  norm = decompose_units(units)
68
- return if norm.any? { |u| u[:unit] == "unknown" || u[:prefix] == "unknown" || u[:unit].nil? }
87
+ return if norm.any? do |u|
88
+ u[:unit] == "unknown" || u[:prefix] == "unknown" || u[:unit].nil?
89
+ end
69
90
  norm.map do |u|
70
91
  { dimension: U2D[u[:unit]][:dimension],
71
92
  unit: u[:unit],
@@ -75,7 +96,8 @@ module Asciimath2UnitsML
75
96
  end
76
97
 
77
98
  def dimension1(u)
78
- %(<#{u[:dimension]} symbol="#{u[:symbol]}" powerNumerator="#{float_to_display(u[:exponent])}"/>)
99
+ %(<#{u[:dimension]} symbol="#{u[:symbol]}"
100
+ powerNumerator="#{float_to_display(u[:exponent])}"/>)
79
101
  end
80
102
 
81
103
  def dim_id(dims)
@@ -84,9 +106,11 @@ module Asciimath2UnitsML
84
106
  dimsvector = %w(Length Mass Time ElectricCurrent ThermodynamicTemperature
85
107
  AmountOfSubstance LuminousIntensity PlaneAngle)
86
108
  .map { |h| dimhash.dig(h, :exponent) }.join(":")
87
- id = @dimensions_id&.values&.select { |d| d.vector == dimsvector }&.first&.id and return id.to_s
109
+ id = @dimensions_id&.values&.select { |d| d.vector == dimsvector }&.
110
+ first&.id and return id.to_s
88
111
  "D_" + dims.map do |d|
89
- U2D[d[:unit]][:symbol] + (d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
112
+ U2D[d[:unit]][:symbol] +
113
+ (d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
90
114
  end.join("")
91
115
  end
92
116
 
@@ -98,9 +122,12 @@ module Asciimath2UnitsML
98
122
  units.sort { |a, b| a[:unit] <=> b[:unit] }.each_with_object([]) do |k, m|
99
123
  if m.empty? || m[-1][:unit] != k[:unit] then m << k
100
124
  else
101
- m[-1] = { prefix: combine_prefixes(@prefixes[m[-1][:prefix]], @prefixes[k[:prefix]]),
102
- unit: m[-1][:unit],
103
- exponent: (k[:exponent]&.to_f || 1) + (m[-1][:exponent]&.to_f || 1) }
125
+ m[-1] = {
126
+ prefix: combine_prefixes(
127
+ @prefixes[m[-1][:prefix]], @prefixes[k[:prefix]]),
128
+ unit: m[-1][:unit],
129
+ exponent: (k[:exponent]&.to_f || 1) +
130
+ (m[-1][:exponent]&.to_f || 1) }
104
131
  end
105
132
  end
106
133
  end
@@ -115,8 +142,10 @@ module Asciimath2UnitsML
115
142
  { prefix: u[:prefix], unit: "unknown", exponent: u[:exponent] }
116
143
  else
117
144
  @units[u[:unit]].si_derived_bases.each_with_object([]) do |k, m|
118
- m << { prefix: !k[:prefix].nil? && !k[:prefix].empty? ?
119
- combine_prefixes(@prefixes_id[k[:prefix]], @prefixes[u[:prefix]]) : u[:prefix],
145
+ prefix = !k[:prefix].nil? && !k[:prefix].empty? ?
146
+ combine_prefixes(@prefixes_id[k[:prefix]], @prefixes[u[:prefix]]) :
147
+ u[:prefix]
148
+ m << { prefix: prefix,
120
149
  unit: @units_id[k[:id]].symbolid,
121
150
  exponent: (k[:power]&.to_i || 1) * (u[:exponent]&.to_f || 1) }
122
151
  end
@@ -143,9 +172,11 @@ module Asciimath2UnitsML
143
172
  end
144
173
 
145
174
  def quantity(normtext, quantity)
146
- return unless @units[normtext] && @units[normtext].quantities.size == 1 || @quantities[quantity]
175
+ return unless @units[normtext] && @units[normtext].quantities.size == 1 ||
176
+ @quantities[quantity]
147
177
  id = quantity || @units[normtext].quantities.first
148
- dim = %( dimensionURL="##{@units[normtext].dimension}") if @units[normtext]&.dimension
178
+ @units[normtext]&.dimension and
179
+ dim = %( dimensionURL="##{@units[normtext].dimension}")
149
180
  <<~END
150
181
  <Quantity xmlns='#{UNITSML_NS}' xml:id="#{id}"#{dim} quantityType="base">
151
182
  #{quantityname(id)}
@@ -87,7 +87,7 @@ module Asciimath2UnitsML
87
87
  prefix2 = /#{@prefixes.keys.select { |x| x.size == 2 }.join("|")}/.r
88
88
  prefix1 = /#{@prefixes.keys.select { |x| x.size == 1 }.join("|")}/.r
89
89
  unit_keys = @units.keys.reject do |k|
90
- @units[k].root&.any? { |x| x[:prefix] } || /\*|\^|\/|^1$/.match(k) || @units[k].prefixed
90
+ /\*|\^|\/|^1$/.match(k) || @units[k].prefixed
91
91
  end.map { |k| Regexp.escape(k) }
92
92
  unit1 = /#{unit_keys.sort_by(&:length).reverse.join("|")}/.r
93
93
  exponent = /\^\(-?\d+\)/.r.map { |m| m.sub(/\^/, "").gsub(/[()]/, "") } |
@@ -123,11 +123,12 @@ module Asciimath2UnitsML
123
123
  quantity = text[1..-1]&.select { |x| /^quantity:/.match(x) }&.first&.sub(/^quantity:\s*/, "")
124
124
  name = text[1..-1]&.select { |x| /^name:/.match(x) }&.first&.sub(/^name:\s*/, "")
125
125
  symbol = text[1..-1]&.select { |x| /^symbol:/.match(x) }&.first&.sub(/^symbol:\s*/, "")
126
+ multiplier = text[1..-1]&.select { |x| /^multiplier:/.match(x) }&.first&.sub(/^multiplier:\s*/, "")
126
127
  normtext = units_only(units).each.map do |u|
127
128
  exp = u[:exponent] && u[:exponent] != "1" ? "^#{u[:exponent]}" : ""
128
129
  "#{u[:prefix]}#{u[:unit]}#{exp}"
129
130
  end.join("*")
130
- [units, text[0], normtext, quantity, name, symbol]
131
+ [units, text[0], normtext, quantity, name, symbol, multiplier]
131
132
  end
132
133
 
133
134
  def postprocess1(units)
@@ -143,19 +144,6 @@ module Asciimath2UnitsML
143
144
  end
144
145
  end
145
146
 
146
- U2D = {
147
- "m" => { dimension: "Length", order: 1, symbol: "L" },
148
- "g" => { dimension: "Mass", order: 2, symbol: "M" },
149
- "kg" => { dimension: "Mass", order: 2, symbol: "M" },
150
- "s" => { dimension: "Time", order: 3, symbol: "T" },
151
- "A" => { dimension: "ElectricCurrent", order: 4, symbol: "I" },
152
- "K" => { dimension: "ThermodynamicTemperature", order: 5, symbol: "Theta" },
153
- "degK" => { dimension: "ThermodynamicTemperature", order: 5, symbol: "Theta" },
154
- "mol" => { dimension: "AmountOfSubstance", order: 6, symbol: "N" },
155
- "cd" => { dimension: "LuminousIntensity", order: 7, symbol: "J" },
156
- "deg" => { dimension: "PlaneAngle", order: 8, symbol: "Phi" },
157
- }.freeze
158
-
159
147
  def Asciimath2UnitsML(expression)
160
148
  xml = Nokogiri::XML(asciimath2mathml(expression))
161
149
  MathML2UnitsML(xml).to_xml
@@ -167,18 +155,22 @@ module Asciimath2UnitsML
167
155
  xml.xpath(".//m:mtext", "m" => MATHML_NS).each do |x|
168
156
  next unless %r{^unitsml\(.+\)$}.match(x.text)
169
157
  text = x.text.sub(%r{^unitsml\((.+)\)$}m, "\\1")
170
- units, origtext, normtext, quantity, name, symbol = parse(text)
171
- rendering = symbol ? embeddedmathml(asciimath2mathml(symbol)) : mathmlsymbol(units, false)
172
- delim = x&.previous_element&.name == "mn" ? delimspace(rendering) : ""
173
- x.replace("#{delim}<mrow xref='#{unit_id(origtext)}'>#{rendering}</mrow>\n"\
158
+ units, origtext, normtext, quantity, name, symbol, multiplier = parse(text)
159
+ rendering = symbol ? embeddedmathml(asciimath2mathml(symbol)) :
160
+ mathmlsymbol(units, false, multiplier)
161
+ x.replace("#{delimspace(rendering, x)}<mrow xref='#{unit_id(origtext)}'>#{rendering}</mrow>\n"\
174
162
  "#{unitsml(units, origtext, normtext, quantity, name)}")
175
163
  end
176
164
  dedup_ids(xml)
177
165
  end
178
166
 
179
- def delimspace(x)
180
- text = HTMLEntities.new.encode(Nokogiri::XML("<mrow>#{x}</mrow>").text.strip)
181
- /[[:alnum:]]/.match(text) ?
167
+ # if previous sibling's last descendent non-whitespace is MathML and mn or mi, no space
168
+ def delimspace(rendering, elem)
169
+ prec_text_elem = elem.xpath("./preceding-sibling::*[namespace-uri() = '#{MATHML_NS}']/"\
170
+ "descendant::text()[normalize-space()!=''][last()]/parent::*").last
171
+ return "" if prec_text_elem.nil? || !%w(mn mi).include?(prec_text_elem&.name)
172
+ text = HTMLEntities.new.encode(Nokogiri::XML("<mrow>#{rendering}</mrow>").text.strip)
173
+ /\p{L}|\p{N}/.match(text) ?
182
174
  "<mo rspace='thickmathspace'>&#x2062;</mo>" : "<mo>&#x2062;</mo>"
183
175
  end
184
176
 
@@ -15,6 +15,11 @@ module Asciimath2UnitsML
15
15
  @symbols[unit][style] || unit
16
16
  end
17
17
 
18
+ def htmlent(x)
19
+ HTMLEntities.new.decode(x).split(/([<>&])/)
20
+ .map { |c| /[<>'"]/.match(c) ? c : HTMLEntities.new.encode(c, :hexadecimal) }.join
21
+ end
22
+
18
23
  def htmlsymbol(units, normalise)
19
24
  units.map do |u|
20
25
  if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:html] : u[:multiplier]
@@ -37,11 +42,12 @@ module Asciimath2UnitsML
37
42
  base
38
43
  end
39
44
 
40
- def mathmlsymbol(units, normalise)
45
+ def mathmlsymbol(units, normalise, multiplier = nil)
46
+ multiplier = multiplier ? "<mo>#{multiplier}</mo>" : @multiplier[:mathml]
41
47
  exp = units.map do |u|
42
- if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:mathml] : "<mo>#{u[:multiplier]}</mo>"
48
+ if u[:multiplier] then u[:multiplier] == "*" ? multiplier : "<mo>#{u[:multiplier]}</mo>"
43
49
  elsif u[:unit].nil? && u[:prefix]
44
- %(<mi mathvariant='normal'>#{@prefixes[u[:prefix]].html}</mi>)
50
+ %(<mi mathvariant='normal'>#{htmlent(@prefixes[u[:prefix]].html)}</mi>)
45
51
  else
46
52
  mathmlsymbol1(u, normalise)
47
53
  end
@@ -51,9 +57,10 @@ module Asciimath2UnitsML
51
57
  def mathmlsymbol1(u, normalise)
52
58
  base = render(normalise ? @units[u[:unit]].symbolid : u[:unit], :mathml)
53
59
  if u[:prefix]
60
+ prefix = htmlent(@prefixes[u[:prefix]].html)
54
61
  base = base.match(/<mi mathvariant='normal'>/) ?
55
- base.sub(/<mi mathvariant='normal'>/, "<mi mathvariant='normal'>#{u[:prefix]}") :
56
- "<mrow><mi mathvariant='normal'>#{u[:prefix]}#{base}</mrow>"
62
+ base.sub(/<mi mathvariant='normal'>/, "<mi mathvariant='normal'>#{prefix}") :
63
+ "<mrow><mi mathvariant='normal'>#{prefix}#{base}</mrow>"
57
64
  end
58
65
  mathmlsymbol_exponent(u, base)
59
66
  end
@@ -7,7 +7,7 @@ module Asciimath2UnitsML
7
7
  def unit_id(text)
8
8
  text = text.gsub(/[()]/, "")
9
9
  /-$/.match(text) and return @prefixes[text.sub(/-$/, "")].id
10
- "U_" + (@units[text] ? @units[text].id : text.gsub(/\*/, ".").gsub(/\^/, ""))
10
+ "U_" + (@units[text] ? @units[text].id.gsub(/'/, "_") : text.gsub(/\*/, ".").gsub(/\^/, ""))
11
11
  end
12
12
 
13
13
  def unit(units, origtext, normtext, dims, name)
@@ -1,3 +1,3 @@
1
1
  module Asciimath2UnitsML
2
- VERSION = '0.2.1'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
@@ -753,50 +753,50 @@ NISTd75:
753
753
  powerNumerator: 1
754
754
  symbol: I
755
755
 
756
- NISTd85:
757
- dimensionless: true
756
+ #NISTd85:
757
+ #dimensionless: true
758
758
 
759
- NISTd84:
760
- dimensionless: true
759
+ #NISTd84:
760
+ #dimensionless: true
761
761
 
762
- NISTd87:
763
- dimensionless: true
762
+ #NISTd87:
763
+ #dimensionless: true
764
764
 
765
- NISTd86:
766
- dimensionless: true
765
+ #NISTd86:
766
+ #dimensionless: true
767
767
 
768
- NISTd81:
769
- dimensionless: true
768
+ #NISTd81:
769
+ #dimensionless: true
770
770
 
771
771
  NISTd80:
772
- dimensionless: true
772
+ dimensionless: true
773
773
 
774
- NISTd83:
775
- dimensionless: true
774
+ #NISTd83:
775
+ #dimensionless: true
776
776
 
777
- NISTd82:
778
- dimensionless: true
777
+ #NISTd82:
778
+ #dimensionless: true
779
779
 
780
- NISTd95:
781
- dimensionless: true
780
+ #NISTd95:
781
+ #dimensionless: true
782
782
 
783
- NISTd94:
784
- dimensionless: true
783
+ #NISTd94:
784
+ #dimensionless: true
785
785
 
786
- NISTd89:
787
- dimensionless: true
786
+ #NISTd89:
787
+ #dimensionless: true
788
788
 
789
- NISTd88:
790
- dimensionless: true
789
+ #NISTd88:
790
+ #dimensionless: true
791
791
 
792
- NISTd91:
793
- dimensionless: true
792
+ #NISTd91:
793
+ #dimensionless: true
794
794
 
795
- NISTd90:
796
- dimensionless: true
795
+ #NISTd90:
796
+ #dimensionless: true
797
797
 
798
- NISTd92:
799
- dimensionless: true
798
+ #NISTd92:
799
+ #dimensionless: true
800
800
 
801
- NISTd93:
802
- dimensionless: true
801
+ #NISTd93:
802
+ #dimensionless: true
@@ -1153,13 +1153,13 @@ NISTq88:
1153
1153
  url: "#NISTu14.u10e-1/1"
1154
1154
 
1155
1155
  NISTq111:
1156
- dimension_url: "#NISTd82"
1156
+ dimension_url: "#NISTd80"
1157
1157
  quantity_type: derived
1158
1158
  quantity_name:
1159
1159
  - rotation
1160
1160
  unit_reference:
1161
1161
  - name: one
1162
- url: "#NISTu181"
1162
+ url: "#NISTu61"
1163
1163
 
1164
1164
  NISTq112:
1165
1165
  dimension_url: "#NISTd24"
@@ -1234,13 +1234,13 @@ NISTq118:
1234
1234
  url: "#NISTu154"
1235
1235
 
1236
1236
  NISTq121:
1237
- dimension_url: "#NISTd85"
1237
+ dimension_url: "#NISTd80"
1238
1238
  quantity_type: derived
1239
1239
  quantity_name:
1240
1240
  - logarithmic decrement
1241
1241
  unit_reference:
1242
1242
  - name: one
1243
- url: "#NISTu132"
1243
+ url: "#NISTu61"
1244
1244
  - name: neper
1245
1245
  url: "#NISTu153"
1246
1246
 
@@ -1385,14 +1385,14 @@ NISTq124:
1385
1385
  url: "#NISTu1e-1/1"
1386
1386
 
1387
1387
  NISTq125:
1388
- dimension_url: "#NISTd86"
1388
+ dimension_url: "#NISTd80"
1389
1389
  quantity_type: derived
1390
1390
  quantity_name:
1391
1391
  - relative mass density
1392
1392
  - relative density
1393
1393
  unit_reference:
1394
1394
  - name: one
1395
- url: "#NISTu368"
1395
+ url: "#NISTu61"
1396
1396
 
1397
1397
  NISTq122:
1398
1398
  dimension_url: "#NISTd29"
@@ -1546,22 +1546,22 @@ NISTq71:
1546
1546
  url: "#NISTu293"
1547
1547
 
1548
1548
  NISTq137:
1549
- dimension_url: "#NISTd88"
1549
+ dimension_url: "#NISTd80"
1550
1550
  quantity_type: derived
1551
1551
  quantity_name:
1552
1552
  - shear strain
1553
1553
  unit_reference:
1554
1554
  - name: one
1555
- url: "#NISTu370"
1555
+ url: "#NISTu61"
1556
1556
 
1557
1557
  NISTq138:
1558
- dimension_url: "#NISTd89"
1558
+ dimension_url: "#NISTd80"
1559
1559
  quantity_type: derived
1560
1560
  quantity_name:
1561
1561
  - volume strain
1562
1562
  unit_reference:
1563
1563
  - name: one
1564
- url: "#NISTu371"
1564
+ url: "#NISTu61"
1565
1565
 
1566
1566
  NISTq139:
1567
1567
  dimension_url: "#NISTd63"
@@ -1637,13 +1637,13 @@ NISTq135:
1637
1637
  url: "#NISTu12"
1638
1638
 
1639
1639
  NISTq136:
1640
- dimension_url: "#NISTd87"
1640
+ dimension_url: "#NISTd80"
1641
1641
  quantity_type: derived
1642
1642
  quantity_name:
1643
1643
  - linear strain
1644
1644
  unit_reference:
1645
1645
  - name: one
1646
- url: "#NISTu369"
1646
+ url: "#NISTu61"
1647
1647
 
1648
1648
  NISTq21:
1649
1649
  dimension_url: "#NISTd16"
@@ -1672,13 +1672,13 @@ NISTq141:
1672
1672
  url: "#NISTu12"
1673
1673
 
1674
1674
  NISTq140:
1675
- dimension_url: "#NISTd90"
1675
+ dimension_url: "#NISTd80"
1676
1676
  quantity_type: derived
1677
1677
  quantity_name:
1678
1678
  - Poisson number
1679
1679
  unit_reference:
1680
1680
  - name: one
1681
- url: "#NISTu372"
1681
+ url: "#NISTu61"
1682
1682
 
1683
1683
  NISTq22:
1684
1684
  dimension_url: "#NISTd17"
@@ -1840,13 +1840,13 @@ NISTq146:
1840
1840
  url: "#NISTu209"
1841
1841
 
1842
1842
  NISTq147:
1843
- dimension_url: "#NISTd91"
1843
+ dimension_url: "#NISTd80"
1844
1844
  quantity_type: derived
1845
1845
  quantity_name:
1846
1846
  - dynamic friction factor
1847
1847
  unit_reference:
1848
1848
  - name: one
1849
- url: "#NISTu373"
1849
+ url: "#NISTu61"
1850
1850
 
1851
1851
  NISTq144:
1852
1852
  dimension_url: "#NISTd57"
@@ -2387,13 +2387,13 @@ NISTq95:
2387
2387
  url: "#NISTu1"
2388
2388
 
2389
2389
  NISTq94:
2390
- dimension_url: "#NISTd81"
2390
+ dimension_url: "#NISTd80"
2391
2391
  quantity_type: derived
2392
2392
  quantity_name:
2393
2393
  - relative permeability
2394
2394
  unit_reference:
2395
2395
  - name: one
2396
- url: "#NISTu174"
2396
+ url: "#NISTu61"
2397
2397
 
2398
2398
  NISTq97:
2399
2399
  dimension_url: "#NISTd1"
@@ -2413,7 +2413,6 @@ NISTq96:
2413
2413
  - name: meter
2414
2414
  url: "#NISTu1"
2415
2415
 
2416
-
2417
2416
  NISTq40:
2418
2417
  dimension_url: "#NISTd25"
2419
2418
  quantity_type: derived
@@ -2457,4 +2456,12 @@ NISTq1001:
2457
2456
  - name: var
2458
2457
  url: "#NISTu401"
2459
2458
 
2459
+ NISTq1002:
2460
+ dimension_url: "#NISTd80"
2461
+ quantity_type: derived
2462
+ quantity_name:
2463
+ - nil
2464
+ unit_reference:
2465
+ - name: one
2466
+ url: "#NISTu61"
2460
2467