unitsml 0.6.13 → 0.6.14
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 +4 -4
- data/lib/unitsml/compose/builder.rb +6 -12
- data/lib/unitsml/parser.rb +21 -11
- data/lib/unitsml/power_numerator.rb +11 -0
- data/lib/unitsml/unit.rb +0 -8
- data/lib/unitsml/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6eb7b900c878fbb336b8664d9f82f09fb4b1971e9b5bc8c5e2e53f8fa63baceb
|
|
4
|
+
data.tar.gz: f4b0dc34053ec9fc8d6425c26d3a86b429a05825b009ce59cd8fd30b10e427c0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2851de6c91a67f92f5e84b1d76efea7626d850dff7bed04d660f3522462e5859c63b88ae9ff3990560aa85efdba8d9faa3bfd3b47fba391cf819583cfaa0b0d8
|
|
7
|
+
data.tar.gz: ee3558da765dda1f3e7d4ae66a9b5e06e7d86b72860eae710276815c8c62d8725456895d14d6874b86dbf49f850f96e651196d81f07270fa0925edcb0cfc5f83
|
|
@@ -16,13 +16,10 @@ module Unitsml
|
|
|
16
16
|
# "/" and inverts b's power; `a * b` keeps "*"). An explicit trailing
|
|
17
17
|
# extender on the left (from #extender) already is the join, so no glyph
|
|
18
18
|
# is inserted after it — but `/` still inverts the right-hand side.
|
|
19
|
-
# An empty side inserts no glyph.
|
|
20
|
-
|
|
21
|
-
def build_product(left_terms, right_terms, operator,
|
|
22
|
-
invert_dimensions: true)
|
|
19
|
+
# An empty side inserts no glyph.
|
|
20
|
+
def build_product(left_terms, right_terms, operator)
|
|
23
21
|
left = build_terms(left_terms, invert: false)
|
|
24
|
-
right = build_terms(right_terms, invert: operator == "/"
|
|
25
|
-
invert_dimensions: invert_dimensions)
|
|
22
|
+
right = build_terms(right_terms, invert: operator == "/")
|
|
26
23
|
joiner = join_glyph(left, right, operator)
|
|
27
24
|
build_root_formula(left + joiner + right)
|
|
28
25
|
end
|
|
@@ -33,7 +30,7 @@ module Unitsml
|
|
|
33
30
|
return nil unless left || right
|
|
34
31
|
|
|
35
32
|
build_product(left ? left.value : [], right ? right.value : [],
|
|
36
|
-
operator
|
|
33
|
+
operator)
|
|
37
34
|
end
|
|
38
35
|
|
|
39
36
|
# Independent copy of a Formula (tree, powers, prefixes, text and
|
|
@@ -99,11 +96,8 @@ module Unitsml
|
|
|
99
96
|
# Rebuild every operand: map_leaves reconstructs branch wrappers and
|
|
100
97
|
# each Unit/Dimension leaf is copied with a freshly built final power
|
|
101
98
|
# (and a duplicated prefix). Non-leaf terms (Extender/Number) plain-dup.
|
|
102
|
-
def build_terms(terms, invert
|
|
103
|
-
TermTree.map_leaves(terms)
|
|
104
|
-
rebuild_leaf(leaf, invert && (invert_dimensions ||
|
|
105
|
-
!leaf.is_a?(Dimension)))
|
|
106
|
-
end
|
|
99
|
+
def build_terms(terms, invert:)
|
|
100
|
+
TermTree.map_leaves(terms) { |leaf| rebuild_leaf(leaf, invert) }
|
|
107
101
|
end
|
|
108
102
|
|
|
109
103
|
def join_glyph(left, right, operator)
|
data/lib/unitsml/parser.rb
CHANGED
|
@@ -73,18 +73,28 @@ module Unitsml
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
76
|
+
inverse = update_term_exponent(object, inverse, sqrt)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Apply the sqrt/inverse state to one term; returns the inverse state for
|
|
81
|
+
# the next term (a "/" or "//" separator flips it).
|
|
82
|
+
def update_term_exponent(object, inverse, sqrt)
|
|
83
|
+
case object
|
|
84
|
+
when Unit, Dimension then update_leaf_exponent(object, inverse, sqrt)
|
|
85
|
+
when Extender then return !inverse if ["/", "//"].any?(object.symbol)
|
|
86
|
+
when Formula then update_units_exponents(object.value, inverse)
|
|
87
|
+
when Fenced then update_units_exponents([object.value], inverse, sqrt)
|
|
87
88
|
end
|
|
89
|
+
inverse
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Units and dimensions follow the same rule: a sqrt sets the 0.5 exponent,
|
|
93
|
+
# otherwise a term after "/" has its exponent inverted.
|
|
94
|
+
def update_leaf_exponent(object, inverse, sqrt)
|
|
95
|
+
return object.power_numerator = Number.new("0.5") if sqrt
|
|
96
|
+
|
|
97
|
+
object.inverse_power_numerator if inverse
|
|
88
98
|
end
|
|
89
99
|
|
|
90
100
|
def post_extras
|
|
@@ -17,6 +17,17 @@ module Unitsml
|
|
|
17
17
|
@power_numerator = coerce_power_type(power)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
# Flip the exponent's sign in place for a term after "/" in a parsed
|
|
21
|
+
# string; no exponent becomes -1. Used by the parser for both units and
|
|
22
|
+
# dimensions.
|
|
23
|
+
def inverse_power_numerator
|
|
24
|
+
if power_numerator
|
|
25
|
+
power_numerator.update_negative_sign
|
|
26
|
+
else
|
|
27
|
+
@power_numerator = Number.new("-1")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
20
31
|
private
|
|
21
32
|
|
|
22
33
|
# The exponent lexemes the library itself stores: an integer, an n/m or
|
data/lib/unitsml/unit.rb
CHANGED
|
@@ -114,14 +114,6 @@ module Unitsml
|
|
|
114
114
|
Lutaml::Model::Utils.snake_case(system_type)
|
|
115
115
|
end
|
|
116
116
|
|
|
117
|
-
def inverse_power_numerator
|
|
118
|
-
if power_numerator
|
|
119
|
-
power_numerator.update_negative_sign
|
|
120
|
-
else
|
|
121
|
-
@power_numerator = Number.new("-1")
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
117
|
private
|
|
126
118
|
|
|
127
119
|
# Resolve a unit reference to a canonical symbol id, exactly like the parser
|
data/lib/unitsml/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: unitsml
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.14
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-11-
|
|
11
|
+
date: 2026-11-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: asciiunits
|