Skip to main content

Library with Python models derived from the page package world.opensemantic.characteristics.quantitative

Project description

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/.

Project details


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

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file opensemantic_characteristics_quantitative-0.5.1.post1000004001002.tar.gz.

File metadata

File hashes

Hashes for opensemantic_characteristics_quantitative-0.5.1.post1000004001002.tar.gz
Algorithm Hash digest
SHA256 fad0b5dfd77c66daca7fe33e2ea04b665358f85a847dbdd398149aec0b0cbc23
MD5 ed0333152748393a4c63a6ee61901c11
BLAKE2b-256 42879f8849779d2ad8aac18bb6294fe022e344b578ec45e514e93789158c1b87

See more details on using hashes here.

File details

Details for the file opensemantic_characteristics_quantitative-0.5.1.post1000004001002-py3-none-any.whl.

File metadata

File hashes

Hashes for opensemantic_characteristics_quantitative-0.5.1.post1000004001002-py3-none-any.whl
Algorithm Hash digest
SHA256 304ee33bb4f375b53fb6fa60b51df4a1f2b8ceeeac13150d32fd5c5f89f60d16
MD5 fae724b33be9a4c4ea4d7e7b064a9a14
BLAKE2b-256 f79a7b309c8933c27b02623844d8d1ffdf542100c7fdd9e3dcc1cc67656db629

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page