python-units 0.1.2.post1__tar.gz → 0.2.0__tar.gz

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.
Files changed (38) hide show
  1. python_units-0.2.0/LICENSE +0 -0
  2. python_units-0.2.0/PKG-INFO +279 -0
  3. python_units-0.2.0/README.md +253 -0
  4. python_units-0.2.0/pyproject.toml +41 -0
  5. python_units-0.2.0/setup.py +7 -0
  6. python_units-0.2.0/src/adapters/__init__.py +1 -0
  7. python_units-0.2.0/src/api/__init__.py +3 -0
  8. python_units-0.2.0/src/api/public.py +109 -0
  9. python_units-0.2.0/src/api/si.py +88 -0
  10. python_units-0.2.0/src/core/__init__.py +42 -0
  11. python_units-0.2.0/src/core/errors.py +22 -0
  12. python_units-0.2.0/src/core/quantity.py +216 -0
  13. python_units-0.2.0/src/core/unit_definitions.py +215 -0
  14. python_units-0.2.0/src/models/__init__.py +5 -0
  15. python_units-0.2.0/src/models/dimension.py +80 -0
  16. python_units-0.2.0/src/python_units.egg-info/PKG-INFO +279 -0
  17. python_units-0.2.0/src/python_units.egg-info/SOURCES.txt +28 -0
  18. python_units-0.2.0/src/python_units.egg-info/requires.txt +7 -0
  19. python_units-0.2.0/src/python_units.egg-info/top_level.txt +7 -0
  20. python_units-0.2.0/src/services/__init__.py +1 -0
  21. python_units-0.2.0/src/units/__init__.py +13 -0
  22. python_units-0.2.0/src/units/dimension.py +6 -0
  23. python_units-0.2.0/src/units/errors.py +18 -0
  24. python_units-0.2.0/src/units/quantity.py +28 -0
  25. python_units-0.2.0/src/units/si.py +4 -0
  26. python_units-0.2.0/src/units/unit.py +24 -0
  27. python_units-0.2.0/src/utils/__init__.py +5 -0
  28. python_units-0.2.0/src/utils/numbers.py +29 -0
  29. python-units-0.1.2.post1/PKG-INFO +0 -251
  30. python-units-0.1.2.post1/README.rst +0 -240
  31. python-units-0.1.2.post1/python_units.egg-info/PKG-INFO +0 -251
  32. python-units-0.1.2.post1/python_units.egg-info/SOURCES.txt +0 -8
  33. python-units-0.1.2.post1/python_units.egg-info/top_level.txt +0 -1
  34. python-units-0.1.2.post1/setup.py +0 -28
  35. python-units-0.1.2.post1/units/__init__.py +0 -534
  36. python-units-0.1.2.post1/units/tests.py +0 -153
  37. {python-units-0.1.2.post1 → python_units-0.2.0}/setup.cfg +0 -0
  38. {python-units-0.1.2.post1 → python_units-0.2.0/src}/python_units.egg-info/dependency_links.txt +0 -0
File without changes
@@ -0,0 +1,279 @@
1
+ Metadata-Version: 2.4
2
+ Name: python-units
3
+ Version: 0.2.0
4
+ Summary: Python library to represent numbers with units
5
+ Author-email: "Paul K. Korir, PhD" <paul.korir@gmail.com>
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/sci2pro/python-units
8
+ Keywords: units
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3 :: Only
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Provides-Extra: dev
20
+ Requires-Dist: build; extra == "dev"
21
+ Requires-Dist: pytest; extra == "dev"
22
+ Requires-Dist: pytest-cov; extra == "dev"
23
+ Requires-Dist: tox; extra == "dev"
24
+ Requires-Dist: twine; extra == "dev"
25
+ Dynamic: license-file
26
+
27
+ # units
28
+
29
+ [![badge.fury.io](https://badge.fury.io/py/python-units.svg)](https://badge.fury.io/py/python-units)
30
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://pypi.org/project/python-units/)
31
+ [![Coverage 92%](https://img.shields.io/badge/coverage-92%25-brightgreen.svg)](/Users/paulkorir/PycharmProjects/python-units/tests/unit/test_units.py)
32
+
33
+ Python library to represent quantities with units.
34
+
35
+ Supported Python versions: 3.10+
36
+
37
+ Python 2 is not supported.
38
+
39
+ Project layout:
40
+
41
+ - public facade: `src/units`
42
+ - API exports: `src/api`
43
+ - business logic: `src/core`
44
+ - data models: `src/models`
45
+ - utilities: `src/utils`
46
+ - tests: `tests/unit` and `tests/integration`
47
+
48
+ Preferred API:
49
+
50
+ ```python
51
+ from units import Quantity
52
+ from units.si import metre, second, newton
53
+
54
+ distance = 10 * metre
55
+ time = 2 * second
56
+ speed = distance / time
57
+ force = 5 * newton
58
+ print(distance)
59
+ print(speed)
60
+ print(force)
61
+ ```
62
+
63
+ The preferred construction style is scalar-by-unit multiplication:
64
+
65
+ ```python
66
+ from units.si import metre, second
67
+
68
+ length = 3 * metre
69
+ time = 2 * second
70
+ speed = length / time
71
+ volume = 5 * metre ** 3
72
+ ```
73
+
74
+ Because `**` binds more tightly than `*`, `5 * metre ** 3` is interpreted as
75
+ `5 * (metre ** 3)`, which is the intended geometric-unit behavior.
76
+
77
+ The explicit constructor remains supported and is still the right low-level form
78
+ when you want to be fully explicit:
79
+
80
+ ```python
81
+ from units import Quantity
82
+ from units.si import metre
83
+
84
+ length = Quantity(3, metre)
85
+ ```
86
+
87
+ Legacy API compatibility:
88
+
89
+ ```python
90
+ import units as u
91
+ print(u.Unit(1, u.metre))
92
+ ```
93
+
94
+ The legacy `Unit` constructor remains available as a compatibility alias for
95
+ `Quantity` during the migration period, but new code should prefer
96
+ `from units import Quantity` and `from units.si import ...`.
97
+
98
+ The package is Python 3-only. Python 2 compatibility behavior is not part of the
99
+ supported interface.
100
+
101
+ # Migration guide
102
+
103
+ Old style:
104
+
105
+ ```python
106
+ import units as u
107
+ distance = u.Unit(3, u.metre)
108
+ time = u.Unit(2, u.second)
109
+ speed = distance / time
110
+ ```
111
+
112
+ New style:
113
+
114
+ ```python
115
+ from units.si import metre, second
116
+
117
+ distance = 3 * metre
118
+ time = 2 * second
119
+ speed = distance / time
120
+ volume = 5 * metre ** 3
121
+ ```
122
+
123
+ Still supported when you want the fully explicit constructor form:
124
+
125
+ ```python
126
+ from units import Quantity
127
+ from units.si import metre, second
128
+
129
+ distance = Quantity(3, metre)
130
+ time = Quantity(2, second)
131
+ speed = distance / time
132
+ ```
133
+
134
+ # Public API
135
+
136
+ Stable top-level imports:
137
+
138
+ * `Quantity`
139
+ * `Unit` (compatibility alias for `Quantity`)
140
+ * `UnitsError`, `InvalidUnitError`, `InvalidValueError`,
141
+ `UnitCompatibilityError`, `UnitOperandError`
142
+
143
+ Canonical unit imports:
144
+
145
+ * `from units.si import metre, second, newton`
146
+
147
+ Legacy compatibility helpers:
148
+
149
+ * `long_quantity`
150
+ * `long_unit`
151
+
152
+ These names remain available as compatibility aliases for integer conversion in
153
+ Python 3, but new code should prefer `int_quantity`.
154
+
155
+ # Notes on semantics
156
+
157
+ * Addition and subtraction require identical units.
158
+ * Multiplication and division combine units algebraically.
159
+ * Integer powers of units and unit-bearing quantities are supported.
160
+ * Unitless quantities are supported explicitly.
161
+ * The core quantity model allows signed values. Domain-specific constraints such
162
+ as non-negative lengths should be enforced by higher-level types or validators.
163
+
164
+ # Real-world examples
165
+
166
+ ## Electrical engineering: from resistance to power dissipation
167
+
168
+ ```python
169
+ from units.si import ampere, ohm, volt, watt
170
+
171
+ current = 12 * ampere
172
+ resistance = 8 * ohm
173
+ voltage = current * resistance
174
+ power = voltage * current
175
+
176
+ print(voltage) # 96 V
177
+ print(power) # 1152 W
178
+ ```
179
+
180
+ This works because the package canonicalizes unambiguous derived-unit assemblies:
181
+
182
+ - `ampere * ohm -> volt`
183
+ - `volt * ampere -> watt`
184
+
185
+ ## Pump sizing: hydraulic power from pressure rise and flow rate
186
+
187
+ ```python
188
+ from units.si import metre, second, kilogram, pascal, watt
189
+
190
+ density = 998 * (kilogram / metre ** 3)
191
+ flow_velocity = 2.5 * (metre / second)
192
+ pipe_area = 0.0314 * metre ** 2
193
+ pressure_rise = 180000 * pascal
194
+
195
+ volumetric_flow = flow_velocity * pipe_area
196
+ hydraulic_power = pressure_rise * volumetric_flow
197
+
198
+ print(volumetric_flow) # m^3·s^-1
199
+ print(hydraulic_power) # W
200
+ ```
201
+
202
+ This is a good example of a multi-step engineering computation that still renders
203
+ to intuitive derived units at the end of the chain.
204
+
205
+ ## Structural mechanics: work from force over distance
206
+
207
+ ```python
208
+ from units.si import metre, newton
209
+
210
+ force = 4200 * newton
211
+ displacement = 0.35 * metre
212
+ work = force * displacement
213
+
214
+ print(work) # J
215
+ ```
216
+
217
+ ## Geometric quantities: powers of units
218
+
219
+ ```python
220
+ from units.si import metre
221
+
222
+ volume = 5 * metre ** 3
223
+ area = (12 * metre) ** 2
224
+
225
+ print(volume) # 5 m^3
226
+ print(area) # 144 m^2
227
+ ```
228
+
229
+ The unit form is also valid on its own:
230
+
231
+ ```python
232
+ from units.si import metre
233
+
234
+ area_unit = metre ** 2
235
+ volume_unit = metre ** 3
236
+ ```
237
+
238
+ ## Fluid mechanics: dynamic pressure
239
+
240
+ ```python
241
+ from units.si import kilogram, metre, pascal, second
242
+
243
+ density = 1.225 * (kilogram / metre ** 3)
244
+ velocity = 68 * (metre / second)
245
+ dynamic_pressure = 0.5 * density * velocity * velocity
246
+
247
+ print(dynamic_pressure) # Pa
248
+ ```
249
+
250
+ ## Custom unit systems
251
+
252
+ Custom unit systems are supported, but they are intentionally separate from SI
253
+ canonicalization. Use them when you want the same algebra and formatting
254
+ behaviour without forcing your units into the SI registry.
255
+
256
+ ```python
257
+ from units import CustomUnitBase, DimensionSystem
258
+
259
+ class CommUnit(CustomUnitBase):
260
+ dimension_system = DimensionSystem('comm', ('b', 's', 'B'))
261
+
262
+ bit = CommUnit.define('b')
263
+ second = CommUnit.define('s')
264
+
265
+ data = 32 * bit
266
+ duration = 4 * second
267
+ rate = data / duration
268
+
269
+ print(rate) # 8.0 b·s^-1
270
+ ```
271
+
272
+ Custom systems inherit useful behaviour:
273
+
274
+ - dimensional algebra
275
+ - string rendering
276
+ - incompatibility checks within a system
277
+
278
+ They do not automatically simplify into SI-derived names such as `V`, `J`, or
279
+ `Pa`, and they cannot be mixed with SI units unless you build an explicit bridge.
@@ -0,0 +1,253 @@
1
+ # units
2
+
3
+ [![badge.fury.io](https://badge.fury.io/py/python-units.svg)](https://badge.fury.io/py/python-units)
4
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://pypi.org/project/python-units/)
5
+ [![Coverage 92%](https://img.shields.io/badge/coverage-92%25-brightgreen.svg)](/Users/paulkorir/PycharmProjects/python-units/tests/unit/test_units.py)
6
+
7
+ Python library to represent quantities with units.
8
+
9
+ Supported Python versions: 3.10+
10
+
11
+ Python 2 is not supported.
12
+
13
+ Project layout:
14
+
15
+ - public facade: `src/units`
16
+ - API exports: `src/api`
17
+ - business logic: `src/core`
18
+ - data models: `src/models`
19
+ - utilities: `src/utils`
20
+ - tests: `tests/unit` and `tests/integration`
21
+
22
+ Preferred API:
23
+
24
+ ```python
25
+ from units import Quantity
26
+ from units.si import metre, second, newton
27
+
28
+ distance = 10 * metre
29
+ time = 2 * second
30
+ speed = distance / time
31
+ force = 5 * newton
32
+ print(distance)
33
+ print(speed)
34
+ print(force)
35
+ ```
36
+
37
+ The preferred construction style is scalar-by-unit multiplication:
38
+
39
+ ```python
40
+ from units.si import metre, second
41
+
42
+ length = 3 * metre
43
+ time = 2 * second
44
+ speed = length / time
45
+ volume = 5 * metre ** 3
46
+ ```
47
+
48
+ Because `**` binds more tightly than `*`, `5 * metre ** 3` is interpreted as
49
+ `5 * (metre ** 3)`, which is the intended geometric-unit behavior.
50
+
51
+ The explicit constructor remains supported and is still the right low-level form
52
+ when you want to be fully explicit:
53
+
54
+ ```python
55
+ from units import Quantity
56
+ from units.si import metre
57
+
58
+ length = Quantity(3, metre)
59
+ ```
60
+
61
+ Legacy API compatibility:
62
+
63
+ ```python
64
+ import units as u
65
+ print(u.Unit(1, u.metre))
66
+ ```
67
+
68
+ The legacy `Unit` constructor remains available as a compatibility alias for
69
+ `Quantity` during the migration period, but new code should prefer
70
+ `from units import Quantity` and `from units.si import ...`.
71
+
72
+ The package is Python 3-only. Python 2 compatibility behavior is not part of the
73
+ supported interface.
74
+
75
+ # Migration guide
76
+
77
+ Old style:
78
+
79
+ ```python
80
+ import units as u
81
+ distance = u.Unit(3, u.metre)
82
+ time = u.Unit(2, u.second)
83
+ speed = distance / time
84
+ ```
85
+
86
+ New style:
87
+
88
+ ```python
89
+ from units.si import metre, second
90
+
91
+ distance = 3 * metre
92
+ time = 2 * second
93
+ speed = distance / time
94
+ volume = 5 * metre ** 3
95
+ ```
96
+
97
+ Still supported when you want the fully explicit constructor form:
98
+
99
+ ```python
100
+ from units import Quantity
101
+ from units.si import metre, second
102
+
103
+ distance = Quantity(3, metre)
104
+ time = Quantity(2, second)
105
+ speed = distance / time
106
+ ```
107
+
108
+ # Public API
109
+
110
+ Stable top-level imports:
111
+
112
+ * `Quantity`
113
+ * `Unit` (compatibility alias for `Quantity`)
114
+ * `UnitsError`, `InvalidUnitError`, `InvalidValueError`,
115
+ `UnitCompatibilityError`, `UnitOperandError`
116
+
117
+ Canonical unit imports:
118
+
119
+ * `from units.si import metre, second, newton`
120
+
121
+ Legacy compatibility helpers:
122
+
123
+ * `long_quantity`
124
+ * `long_unit`
125
+
126
+ These names remain available as compatibility aliases for integer conversion in
127
+ Python 3, but new code should prefer `int_quantity`.
128
+
129
+ # Notes on semantics
130
+
131
+ * Addition and subtraction require identical units.
132
+ * Multiplication and division combine units algebraically.
133
+ * Integer powers of units and unit-bearing quantities are supported.
134
+ * Unitless quantities are supported explicitly.
135
+ * The core quantity model allows signed values. Domain-specific constraints such
136
+ as non-negative lengths should be enforced by higher-level types or validators.
137
+
138
+ # Real-world examples
139
+
140
+ ## Electrical engineering: from resistance to power dissipation
141
+
142
+ ```python
143
+ from units.si import ampere, ohm, volt, watt
144
+
145
+ current = 12 * ampere
146
+ resistance = 8 * ohm
147
+ voltage = current * resistance
148
+ power = voltage * current
149
+
150
+ print(voltage) # 96 V
151
+ print(power) # 1152 W
152
+ ```
153
+
154
+ This works because the package canonicalizes unambiguous derived-unit assemblies:
155
+
156
+ - `ampere * ohm -> volt`
157
+ - `volt * ampere -> watt`
158
+
159
+ ## Pump sizing: hydraulic power from pressure rise and flow rate
160
+
161
+ ```python
162
+ from units.si import metre, second, kilogram, pascal, watt
163
+
164
+ density = 998 * (kilogram / metre ** 3)
165
+ flow_velocity = 2.5 * (metre / second)
166
+ pipe_area = 0.0314 * metre ** 2
167
+ pressure_rise = 180000 * pascal
168
+
169
+ volumetric_flow = flow_velocity * pipe_area
170
+ hydraulic_power = pressure_rise * volumetric_flow
171
+
172
+ print(volumetric_flow) # m^3·s^-1
173
+ print(hydraulic_power) # W
174
+ ```
175
+
176
+ This is a good example of a multi-step engineering computation that still renders
177
+ to intuitive derived units at the end of the chain.
178
+
179
+ ## Structural mechanics: work from force over distance
180
+
181
+ ```python
182
+ from units.si import metre, newton
183
+
184
+ force = 4200 * newton
185
+ displacement = 0.35 * metre
186
+ work = force * displacement
187
+
188
+ print(work) # J
189
+ ```
190
+
191
+ ## Geometric quantities: powers of units
192
+
193
+ ```python
194
+ from units.si import metre
195
+
196
+ volume = 5 * metre ** 3
197
+ area = (12 * metre) ** 2
198
+
199
+ print(volume) # 5 m^3
200
+ print(area) # 144 m^2
201
+ ```
202
+
203
+ The unit form is also valid on its own:
204
+
205
+ ```python
206
+ from units.si import metre
207
+
208
+ area_unit = metre ** 2
209
+ volume_unit = metre ** 3
210
+ ```
211
+
212
+ ## Fluid mechanics: dynamic pressure
213
+
214
+ ```python
215
+ from units.si import kilogram, metre, pascal, second
216
+
217
+ density = 1.225 * (kilogram / metre ** 3)
218
+ velocity = 68 * (metre / second)
219
+ dynamic_pressure = 0.5 * density * velocity * velocity
220
+
221
+ print(dynamic_pressure) # Pa
222
+ ```
223
+
224
+ ## Custom unit systems
225
+
226
+ Custom unit systems are supported, but they are intentionally separate from SI
227
+ canonicalization. Use them when you want the same algebra and formatting
228
+ behaviour without forcing your units into the SI registry.
229
+
230
+ ```python
231
+ from units import CustomUnitBase, DimensionSystem
232
+
233
+ class CommUnit(CustomUnitBase):
234
+ dimension_system = DimensionSystem('comm', ('b', 's', 'B'))
235
+
236
+ bit = CommUnit.define('b')
237
+ second = CommUnit.define('s')
238
+
239
+ data = 32 * bit
240
+ duration = 4 * second
241
+ rate = data / duration
242
+
243
+ print(rate) # 8.0 b·s^-1
244
+ ```
245
+
246
+ Custom systems inherit useful behaviour:
247
+
248
+ - dimensional algebra
249
+ - string rendering
250
+ - incompatibility checks within a system
251
+
252
+ They do not automatically simplify into SI-derived names such as `V`, `J`, or
253
+ `Pa`, and they cannot be mixed with SI units unless you build an explicit bridge.
@@ -0,0 +1,41 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "python-units"
7
+ version = "0.2.0"
8
+ description = "Python library to represent numbers with units"
9
+ readme = { file = "README.md", content-type = "text/markdown" }
10
+ requires-python = ">=3.10"
11
+ license = "GPL-3.0-or-later"
12
+ authors = [
13
+ { name = "Paul K. Korir, PhD", email = "paul.korir@gmail.com" },
14
+ ]
15
+ keywords = ["units"]
16
+ classifiers = [
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3 :: Only",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: 3.14",
24
+ ]
25
+ dependencies = []
26
+
27
+ [project.optional-dependencies]
28
+ dev = [
29
+ "build",
30
+ "pytest",
31
+ "pytest-cov",
32
+ "tox",
33
+ "twine",
34
+ ]
35
+
36
+ [project.urls]
37
+ Homepage = "https://github.com/sci2pro/python-units"
38
+
39
+ [tool.setuptools.packages.find]
40
+ where = ["src"]
41
+ include = ["adapters*", "api*", "core*", "models*", "services*", "units*", "utils*"]
@@ -0,0 +1,7 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Compatibility shim for setuptools-based builds."""
3
+
4
+ from setuptools import setup
5
+
6
+
7
+ setup()
@@ -0,0 +1 @@
1
+ """Adapter-layer package reserved for external integrations."""
@@ -0,0 +1,3 @@
1
+ """Curated API exports for the units package."""
2
+
3
+ from .public import *
@@ -0,0 +1,109 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Public export surface for the units package."""
3
+
4
+ from api.si import (
5
+ ampere,
6
+ becquerel,
7
+ candela,
8
+ coulomb,
9
+ degree_celcius,
10
+ farad,
11
+ gray,
12
+ henry,
13
+ hertz,
14
+ joule,
15
+ katal,
16
+ kelvin,
17
+ kilogram,
18
+ lumen,
19
+ lux,
20
+ metre,
21
+ mole,
22
+ newton,
23
+ ohm,
24
+ pascal,
25
+ radian,
26
+ second,
27
+ siemens,
28
+ sievert,
29
+ steradian,
30
+ tesla,
31
+ volt,
32
+ watt,
33
+ weber,
34
+ )
35
+ from core.errors import (
36
+ InvalidUnitError,
37
+ InvalidValueError,
38
+ UnitCompatibilityError,
39
+ UnitOperandError,
40
+ UnitsError,
41
+ )
42
+ from core.quantity import (
43
+ Quantity,
44
+ complex_quantity,
45
+ complex_unit,
46
+ float_quantity,
47
+ float_unit,
48
+ int_quantity,
49
+ int_unit,
50
+ long_quantity,
51
+ long_unit,
52
+ )
53
+ from core.unit_definitions import BaseUnit, CustomUnitBase, DerivedUnit, SIUnit
54
+ from models.dimension import Dimension, DimensionSystem
55
+
56
+ Unit = Quantity
57
+
58
+ __all__ = [
59
+ "Dimension",
60
+ "DimensionSystem",
61
+ "Quantity",
62
+ "Unit",
63
+ "UnitsError",
64
+ "InvalidUnitError",
65
+ "InvalidValueError",
66
+ "UnitCompatibilityError",
67
+ "UnitOperandError",
68
+ "BaseUnit",
69
+ "CustomUnitBase",
70
+ "DerivedUnit",
71
+ "SIUnit",
72
+ "ampere",
73
+ "becquerel",
74
+ "candela",
75
+ "complex_quantity",
76
+ "complex_unit",
77
+ "coulomb",
78
+ "degree_celcius",
79
+ "farad",
80
+ "float_quantity",
81
+ "float_unit",
82
+ "gray",
83
+ "henry",
84
+ "hertz",
85
+ "int_quantity",
86
+ "int_unit",
87
+ "joule",
88
+ "katal",
89
+ "kelvin",
90
+ "kilogram",
91
+ "long_quantity",
92
+ "long_unit",
93
+ "lumen",
94
+ "lux",
95
+ "metre",
96
+ "mole",
97
+ "newton",
98
+ "ohm",
99
+ "pascal",
100
+ "radian",
101
+ "second",
102
+ "siemens",
103
+ "sievert",
104
+ "steradian",
105
+ "tesla",
106
+ "volt",
107
+ "watt",
108
+ "weber",
109
+ ]