Library with Python models derived from the page package world.opensemantic.characteristics.quantitative
Project description
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/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opensemantic_characteristics_quantitative-0.5.1.post1000004001002.tar.gz.
File metadata
- Download URL: opensemantic_characteristics_quantitative-0.5.1.post1000004001002.tar.gz
- Upload date:
- Size: 659.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fad0b5dfd77c66daca7fe33e2ea04b665358f85a847dbdd398149aec0b0cbc23
|
|
| MD5 |
ed0333152748393a4c63a6ee61901c11
|
|
| BLAKE2b-256 |
42879f8849779d2ad8aac18bb6294fe022e344b578ec45e514e93789158c1b87
|
File details
Details for the file opensemantic_characteristics_quantitative-0.5.1.post1000004001002-py3-none-any.whl.
File metadata
- Download URL: opensemantic_characteristics_quantitative-0.5.1.post1000004001002-py3-none-any.whl
- Upload date:
- Size: 594.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
304ee33bb4f375b53fb6fa60b51df4a1f2b8ceeeac13150d32fd5c5f89f60d16
|
|
| MD5 |
fae724b33be9a4c4ea4d7e7b064a9a14
|
|
| BLAKE2b-256 |
f79a7b309c8933c27b02623844d8d1ffdf542100c7fdd9e3dcc1cc67656db629
|