Skip to main content

PyPI-Server Coveralls Project generated with PyScaffold

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.8.0.post1000004005000

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opensemantic.characteristics.quantitative 0.8.0.post1000004005000
File Size Uploaded
opensemantic_characteristics_quantitative-0.8.0.post1000004005000.tar.gz 663.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for opensemantic.characteristics.quantitative 0.8.0.post1000004005000
File Interpreter ABI Platform
opensemantic_characteristics_quantitative-0.8.0.post1000004005000-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / opensemantic_characteristics_quantitative-0.8.0.post1000004005000.tar.gz

Download URL opensemantic_characteristics_quantitative-0.8.0.post1000004005000.tar.gz
Size 663.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6d18f270313eb6ae54b1a2b8415b66018019501eb107c432d9c7de8406020ffa
BLAKE2b-256 checksum
How to use checksums
d234da2d8b94c9aa1b937cc3bfb00f1c2fa8c40488fb4d2645fe38b68c3d9a9a
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.8.0.post1000004005000-py3-none-any.whl

Download URL opensemantic_characteristics_quantitative-0.8.0.post1000004005000-py3-none-any.whl
Size 596.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
069b9e6a34303463ff396ae63cef27fcb1d92070ea518602bebef085d338017c
BLAKE2b-256 checksum
How to use checksums
e2eb1e6df97c8e2dcfdd68e2480c0e42f046781bfea45e823b709212c741697e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page