Skip to content

Commit a37a75a

Browse files
committed
Return Sample after dividing QuantityT by float
This is where we start to see the limitations of the string formula spec. For a power formula, we treat the constant in: - `#10 + 100.0` as a power value in watts. - `#10 / 100.0` as a float value. Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 2075ad3 commit a37a75a

File tree

1 file changed

+12
-8
lines changed
  • src/frequenz/sdk/timeseries/formulas

1 file changed

+12
-8
lines changed

src/frequenz/sdk/timeseries/formulas/_ast.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ class Div(AstNode[QuantityT]):
300300
right: AstNode[QuantityT]
301301

302302
@override
303-
async def evaluate(self) -> QuantityT | None:
303+
async def evaluate(self) -> Sample[QuantityT] | QuantityT | None:
304304
"""Evaluate the division of the left node by the right node."""
305305
left = await self.left.evaluate()
306306
right = await self.right.evaluate()
@@ -313,7 +313,7 @@ async def evaluate(self) -> QuantityT | None:
313313
if is_close_to_zero(right.value.base_value):
314314
_logger.warning("Division by zero encountered in formula.")
315315
return None
316-
return left.value / right.value.base_value
316+
return Sample(left.timestamp, left.value / right.value.base_value)
317317
case Quantity(), Quantity():
318318
if is_close_to_zero(right.base_value):
319319
_logger.warning("Division by zero encountered in formula.")
@@ -323,14 +323,18 @@ async def evaluate(self) -> QuantityT | None:
323323
if is_close_to_zero(right.base_value):
324324
_logger.warning("Division by zero encountered in formula.")
325325
return None
326-
return None if left.value is None else left.value / right.base_value
326+
return Sample(
327+
left.timestamp,
328+
None if left.value is None else left.value / right.base_value,
329+
)
327330
case (Quantity(), Sample()):
328-
if right.value is None:
329-
return None
330-
if is_close_to_zero(right.value.base_value):
331+
if right.value and is_close_to_zero(right.value.base_value):
331332
_logger.warning("Division by zero encountered in formula.")
332-
return None
333-
return left / right.value.base_value
333+
return Sample(right.timestamp, None)
334+
return Sample(
335+
right.timestamp,
336+
None if right.value is None else left / right.value.base_value,
337+
)
334338
case (None, _) | (_, None):
335339
return None
336340
return None

0 commit comments

Comments
 (0)