Coverage for backend/django/Economics/shared/unit_conversion.py: 90%
18 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-06-23 21:51 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-06-23 21:51 +0000
1from __future__ import annotations
3from decimal import Decimal, InvalidOperation, localcontext
5from pint.errors import PintError
7from idaes_factory.unit_conversion.unit_conversion import pint_registry
10def convert_quantity(
11 *,
12 value: Decimal,
13 source_unit: str,
14 target_unit: str,
15 multiplier=None,
16) -> Decimal | None:
17 """Convert a physical quantity between compatible units."""
18 try:
19 quantity = pint_registry.Quantity(value, source_unit)
20 if multiplier is not None:
21 quantity = quantity * multiplier
22 converted = quantity.to(target_unit)
23 except (PintError, AttributeError, ValueError, TypeError):
24 return None
25 try:
26 with localcontext() as context:
27 context.prec = 34
28 return Decimal(str(converted.magnitude))
29 except (InvalidOperation, ValueError):
30 return None