asciimath2unitsml 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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