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.5.1.post1000004001003

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.5.1.post1000004001003
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)

Table of built distributions (wheels) for opensemantic.characteristics.quantitative 0.5.1.post1000004001003
File Interpreter ABI Platform Actions
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.

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