Skip to content

Commit de312b3

Browse files
committed
Add abs() support for quantities
Signed-off-by: Mathias L. Baumann <[email protected]>
1 parent 76de40d commit de312b3

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

RELEASE_NOTES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
## New Features
1414

1515
- Add quantity class `Frequency` for frequency values.
16+
- Add `abs()` support for quantities.
1617

1718
## Bug Fixes
1819

src/frequenz/sdk/timeseries/_quantities.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,16 @@ def __neg__(self) -> Self:
300300
negation._base_value = -self._base_value
301301
return negation
302302

303+
def __abs__(self) -> Self:
304+
"""Return the absolute value of this quantity.
305+
306+
Returns:
307+
The absolute value of this quantity.
308+
"""
309+
absolute = type(self).__new__(type(self))
310+
absolute._base_value = abs(self._base_value)
311+
return absolute
312+
303313

304314
class _NoDefaultConstructible(type):
305315
"""A metaclass that disables the default constructor."""

tests/timeseries/test_quantities.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,3 +350,30 @@ def test_nan() -> None:
350350
assert f"{Energy.from_watt_hours(float('nan'))}" == "nan Wh"
351351
assert f"{Frequency.from_hertz(float('nan'))}" == "nan Hz"
352352
assert f"{Percentage.from_fraction(float('nan'))}" == "nan %"
353+
354+
355+
def test_abs() -> None:
356+
"""Test the absolute value of quantities."""
357+
power = Power.from_watts(1000.0)
358+
assert abs(power) == Power.from_watts(1000.0)
359+
assert abs(-power) == Power.from_watts(1000.0)
360+
361+
voltage = Voltage.from_volts(230.0)
362+
assert abs(voltage) == Voltage.from_volts(230.0)
363+
assert abs(-voltage) == Voltage.from_volts(230.0)
364+
365+
current = Current.from_amperes(2)
366+
assert abs(current) == Current.from_amperes(2)
367+
assert abs(-current) == Current.from_amperes(2)
368+
369+
energy = Energy.from_kilowatt_hours(6.2)
370+
assert abs(energy) == Energy.from_kilowatt_hours(6.2)
371+
assert abs(-energy) == Energy.from_kilowatt_hours(6.2)
372+
373+
freq = Frequency.from_hertz(50)
374+
assert abs(freq) == Frequency.from_hertz(50)
375+
assert abs(-freq) == Frequency.from_hertz(50)
376+
377+
pct = Percentage.from_fraction(30)
378+
assert abs(pct) == Percentage.from_fraction(30)
379+
assert abs(-pct) == Percentage.from_fraction(30)

0 commit comments

Comments
 (0)