opensemantic.characteristics.quantitative
Library with Python models derived from the page package world.opensemantic.characteristics.quantitative
Quantities and units generated from QUDT. pint mapping was done with support from ucumvert
Usage
from opensemantic.characteristics.quantitative import (
Length, LengthUnit, Width, Area, AreaUnit, QuantityValue,
)
# Create typed quantity values
length = Length(value=1.0, unit=LengthUnit.meter)
width = Width(value=200, unit=LengthUnit.milli_meter)
# Arithmetic — units are tracked automatically via pint
area = length * width
print(area.value, area.unit.name) # 200000.0 milli_meter_squared
assert isinstance(area, Area)
# Unit conversion
area_cm2 = area.to_unit(AreaUnit.centi_meter_squared)
print(area_cm2.value) # 2000.0
assert area == area_cm2 # physical equality across units
# Addition with automatic unit conversion
l1 = Length(value=1.0, unit=LengthUnit.milli_meter)
l2 = Length(value=1.0, unit=LengthUnit.meter)
print((l1 + l2).value) # 1.001 (in meters)
# pint interop: round-trip to/from pint.Quantity
q_pint = l1.to_pint() # -> 1.0 millimeter
restored = QuantityValue.from_pint(q_pint) # -> Length(1.0, milli_meter)
assert l1 == restored
# JSON serialization (via oold's unified API)
print(l1.to_json())
# {'type': ['Category:OSWee9c7e5c...'], 'value': 1.0, 'unit': 'Item:OSWf101d25e...'}
Round-tripping derived units
from_pint recovers a typed QuantityValue even when the exact unit symbol is
not in the registry - e.g. derived units (watt, joule, ohm) or composed
results such as volt * ampere. When the symbol is unknown it falls back to the
quantity's dimensionality, mapping it to a representative SI-coherent unit via
DIMENSION_TO_UNIT (generated into _dimensions.py by scripts/post_process.py):
from opensemantic.characteristics.quantitative import (
Voltage, VoltageUnit, ElectricCurrent, ElectricCurrentUnit, Power,
)
power = Voltage(value=3.7, unit=VoltageUnit.volt) * ElectricCurrent(
value=2.0, unit=ElectricCurrentUnit.ampere
)
assert isinstance(power, Power) # volt * ampere -> watt
Compact export
exclude_defaults=True omits values left at their default (e.g. the default
unit) for a minimal, portable representation:
length = Length(value=1.0, unit=LengthUnit.meter)
print(length.to_json(exclude_defaults=True)) # {'value': 1.0}
See examples/ for more, including tabular data with pandas and a tensile test analysis.
TODO: Unit Name Conflicts in _collection.py
18 unit member names appear in multiple *Unit enum classes with different OSW IDs.
The first occurrence goes into _collection.py; conflicting entries remain hardcoded in _model.py.
These likely stem from upstream QUDT modeling where the same unit name maps to different physical quantities.
| Name | Classes (conflicting OSW IDs) |
|---|---|
day |
TimeUnit vs HydraulicPermeabilityUnit |
kilo_newton |
ForceUnit vs TorquePerLengthUnit |
kilo_newton_per_meter |
EnergyPerAreaUnit vs ForcePerLengthUnit |
liter_per_meter_squared_per_second |
VolumetricFluxUnit vs VentilationRatePerFloorAreaUnit |
meter |
LengthUnit vs AreaPerLengthUnit vs VolumePerUnitAreaUnit |
meter_pascal |
StressIntensityFactorUnit vs UnknownUnit |
milli_newton_per_meter |
EnergyPerAreaUnit vs ForcePerLengthUnit |
minute |
TimeUnit vs PlaneAngleUnit |
newton |
ForceUnit vs TorquePerLengthUnit |
newton_per_meter |
EnergyPerAreaUnit vs ForcePerLengthUnit |
pH_value |
InductanceUnit vs BasicityUnit |
per_centi_meter |
InverseLengthUnit vs UnknownUnit |
per_day |
FrequencyUnit vs UnknownUnit vs MassSpecificBiogeochemicalRateUnit |
per_hour |
FrequencyUnit vs MassSpecificBiogeochemicalRateUnit |
per_meter |
InverseLengthUnit vs UnknownUnit |
per_meter_1 |
InverseLengthUnit vs UnknownUnit |
per_minute |
FrequencyUnit vs RotationalFrequencyUnit |
year |
AreaUnit vs TimeUnit |
Status
pint round-trip (full inventory): 0 unit_registry misses
tests/conversion_test.py::test_full_inventory_test round-trips every
QuantityValue x unit through to_pint() / from_pint() and now asserts
zero unit_registry misses (v2: 2089 ok / 282 errors; v1: 3181 ok / 442
errors). from_pint resolves every unit whose symbol pint can parse - derived
units fall back to the dimensionality map in _dimensions.py. The remaining
errors are all UndefinedUnitError (units pint itself does not define, e.g.
astronomical_unit, electron_volt, metric_ton, sidereal time units); the
critical warnings are units shared by several quantities of the same
dimensionality (value + unit still round-trip, but the class may resolve to a
sibling).
Note
This project has been set up using PyScaffold 4.6. For details and usage information on PyScaffold see https://pyscaffold.org/.
Metadata
Release files for opensemantic.characteristics.quantitative 0.5.1.post1000004001003
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| opensemantic_characteristics_quantitative-0.5.1.post1000004001003.tar.gz | 660.3 kB | Without provenance | Details for opensemantic_characteristics_quantitative-0.5.1.post1000004001003.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| opensemantic_characteristics_quantitative-0.5.1.post1000004001003-py3-none-any.whl | Python 3 | none | any | Details for opensemantic_characteristics_quantitative-0.5.1.post1000004001003-py3-none-any.whl |
Total release size: 1.3 MB
Release files / opensemantic_characteristics_quantitative-0.5.1.post1000004001003.tar.gz
| Download URL | opensemantic_characteristics_quantitative-0.5.1.post1000004001003.tar.gz |
|---|---|
| Size | 660.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c1d27a7a65e42876338257673c8c7bf44b68233e44ec3be133aee1166e308d66
|
|
BLAKE2b-256 checksum How to use checksums |
d88a21078cf8d833416bee03bdd13e9de519c92d32486110af901bf08e895d72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / opensemantic_characteristics_quantitative-0.5.1.post1000004001003-py3-none-any.whl
| Download URL | opensemantic_characteristics_quantitative-0.5.1.post1000004001003-py3-none-any.whl |
|---|---|
| Size | 593.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
46921fcd5a14d09fbb7f011d7a7920efcae6e1332031f0707fcdce893b5d87a9
|
|
BLAKE2b-256 checksum How to use checksums |
15b2d12cb3d69132d5daf3d2757d011a3c45e03cf292d5e8173b530eb8415216
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for opensemantic.characteristics.quantitative 0.5.1.post1000004001003
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.