Skip to content

Commit bcc2acb

Browse files
committed
Update formula generators to work with new FormulaEngine interface
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 42e2286 commit bcc2acb

File tree

7 files changed

+37
-44
lines changed

7 files changed

+37
-44
lines changed

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_battery_power_formula.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
class BatteryPowerFormula(FormulaGenerator):
1717
"""Creates a formula engine from the component graph for calculating grid power."""
1818

19-
async def generate(
19+
def generate(
2020
self,
2121
) -> FormulaEngine:
2222
"""Make a formula for the cumulative AC battery power of a microgrid.
@@ -54,14 +54,14 @@ async def generate(
5454
# If there are no battery inverters, we have to send 0 values as the same
5555
# frequency as the other streams. So we subscribe with a non-existing
5656
# component id, just to get a `None` message at the resampling interval.
57-
await builder.push_component_metric(
57+
builder.push_component_metric(
5858
NON_EXISTING_COMPONENT_ID, nones_are_zeros=True
5959
)
6060
return builder.build()
6161

6262
for idx, comp in enumerate(battery_inverters):
6363
if idx > 0:
6464
builder.push_oper("+")
65-
await builder.push_component_metric(comp.component_id, nones_are_zeros=True)
65+
builder.push_component_metric(comp.component_id, nones_are_zeros=True)
6666

6767
return builder.build()

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_ev_charger_current_formula.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
class EVChargerCurrentFormula(FormulaGenerator):
1818
"""Create a formula engine from the component graph for calculating grid current."""
1919

20-
async def generate(self) -> FormulaEngine3Phase:
20+
def generate(self) -> FormulaEngine3Phase:
2121
"""Generate a formula for calculating total EV current for given component ids.
2222
2323
Returns:
@@ -35,37 +35,37 @@ async def generate(self) -> FormulaEngine3Phase:
3535
# frequency as the other streams. So we subscribe with a non-existing
3636
# component id, just to get a `None` message at the resampling interval.
3737
builder = self._get_builder("ev-current", ComponentMetricId.ACTIVE_POWER)
38-
await builder.push_component_metric(
38+
builder.push_component_metric(
3939
NON_EXISTING_COMPONENT_ID, nones_are_zeros=True
4040
)
4141
engine = builder.build()
4242
return FormulaEngine3Phase(
4343
"ev-current",
44-
(engine.new_receiver(), engine.new_receiver(), engine.new_receiver()),
44+
(engine, engine, engine),
4545
)
4646

4747
return FormulaEngine3Phase(
4848
"ev-current",
4949
(
5050
(
51-
await self._gen_phase_formula(
51+
self._gen_phase_formula(
5252
component_ids, ComponentMetricId.CURRENT_PHASE_1
5353
)
54-
).new_receiver(),
54+
),
5555
(
56-
await self._gen_phase_formula(
56+
self._gen_phase_formula(
5757
component_ids, ComponentMetricId.CURRENT_PHASE_2
5858
)
59-
).new_receiver(),
59+
),
6060
(
61-
await self._gen_phase_formula(
61+
self._gen_phase_formula(
6262
component_ids, ComponentMetricId.CURRENT_PHASE_3
6363
)
64-
).new_receiver(),
64+
),
6565
),
6666
)
6767

68-
async def _gen_phase_formula(
68+
def _gen_phase_formula(
6969
self,
7070
component_ids: set[int],
7171
metric_id: ComponentMetricId,
@@ -77,6 +77,6 @@ async def _gen_phase_formula(
7777
if idx > 0:
7878
builder.push_oper("+")
7979

80-
await builder.push_component_metric(component_id, nones_are_zeros=True)
80+
builder.push_component_metric(component_id, nones_are_zeros=True)
8181

8282
return builder.build()

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_ev_charger_power_formula.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
class EVChargerPowerFormula(FormulaGenerator):
1616
"""Create a formula engine from the component graph for calculating grid power."""
1717

18-
async def generate(self) -> FormulaEngine:
18+
def generate(self) -> FormulaEngine:
1919
"""Generate a formula for calculating total EV power for given component ids.
2020
2121
Returns:
@@ -33,7 +33,7 @@ async def generate(self) -> FormulaEngine:
3333
# If there are no EV Chargers, we have to send 0 values as the same
3434
# frequency as the other streams. So we subscribe with a non-existing
3535
# component id, just to get a `None` message at the resampling interval.
36-
await builder.push_component_metric(
36+
builder.push_component_metric(
3737
NON_EXISTING_COMPONENT_ID, nones_are_zeros=True
3838
)
3939
return builder.build()
@@ -42,6 +42,6 @@ async def generate(self) -> FormulaEngine:
4242
if idx > 0:
4343
builder.push_oper("+")
4444

45-
await builder.push_component_metric(component_id, nones_are_zeros=True)
45+
builder.push_component_metric(component_id, nones_are_zeros=True)
4646

4747
return builder.build()

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_formula_generator.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
import sys
99
from abc import ABC, abstractmethod
1010
from dataclasses import dataclass
11-
from typing import Generic
1211

1312
from frequenz.channels import Sender
1413

1514
from ....actor import ChannelRegistry, ComponentMetricRequest
1615
from ....microgrid.component import ComponentMetricId
17-
from .._formula_engine import _GenericEngine
16+
from .._formula_engine import FormulaEngine, FormulaEngine3Phase
1817
from .._resampled_formula_builder import ResampledFormulaBuilder
1918

2019

@@ -36,7 +35,7 @@ class FormulaGeneratorConfig:
3635
component_ids: set[int] | None = None
3736

3837

39-
class FormulaGenerator(ABC, Generic[_GenericEngine]):
38+
class FormulaGenerator(ABC):
4039
"""A class for generating formulas from the component graph."""
4140

4241
def __init__(
@@ -74,5 +73,5 @@ def _get_builder(
7473
return builder
7574

7675
@abstractmethod
77-
async def generate(self) -> _GenericEngine:
76+
def generate(self) -> FormulaEngine | FormulaEngine3Phase:
7877
"""Generate a formula engine, based on the component graph."""

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_grid_current_formula.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
class GridCurrentFormula(FormulaGenerator):
1515
"""Create a formula engine from the component graph for calculating grid current."""
1616

17-
async def generate(self) -> FormulaEngine3Phase:
17+
def generate(self) -> FormulaEngine3Phase:
1818
"""Generate a formula for calculating grid current from the component graph.
1919
2020
Returns:
@@ -43,25 +43,19 @@ async def generate(self) -> FormulaEngine3Phase:
4343
return FormulaEngine3Phase(
4444
"grid-current",
4545
(
46-
(
47-
await self._gen_phase_formula(
48-
grid_successors, ComponentMetricId.CURRENT_PHASE_1
49-
)
50-
).new_receiver(),
51-
(
52-
await self._gen_phase_formula(
53-
grid_successors, ComponentMetricId.CURRENT_PHASE_2
54-
)
55-
).new_receiver(),
56-
(
57-
await self._gen_phase_formula(
58-
grid_successors, ComponentMetricId.CURRENT_PHASE_3
59-
)
60-
).new_receiver(),
46+
self._gen_phase_formula(
47+
grid_successors, ComponentMetricId.CURRENT_PHASE_1
48+
),
49+
self._gen_phase_formula(
50+
grid_successors, ComponentMetricId.CURRENT_PHASE_2
51+
),
52+
self._gen_phase_formula(
53+
grid_successors, ComponentMetricId.CURRENT_PHASE_3
54+
),
6155
),
6256
)
6357

64-
async def _gen_phase_formula(
58+
def _gen_phase_formula(
6559
self,
6660
grid_successors: Set[Component],
6761
metric_id: ComponentMetricId,
@@ -90,7 +84,7 @@ async def _gen_phase_formula(
9084
else:
9185
continue
9286

93-
await builder.push_component_metric(
87+
builder.push_component_metric(
9488
comp.component_id, nones_are_zeros=nones_are_zeros
9589
)
9690

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_grid_power_formula.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
class GridPowerFormula(FormulaGenerator):
1313
"""Creates a formula engine from the component graph for calculating grid power."""
1414

15-
async def generate(
15+
def generate(
1616
self,
1717
) -> FormulaEngine:
1818
"""Generate a formula for calculating grid power from the component graph.
@@ -63,7 +63,7 @@ async def generate(
6363
else:
6464
continue
6565

66-
await builder.push_component_metric(
66+
builder.push_component_metric(
6767
comp.component_id, nones_are_zeros=nones_are_zeros
6868
)
6969

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_pv_power_formula.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
class PVPowerFormula(FormulaGenerator):
1717
"""Creates a formula engine for calculating the PV power production."""
1818

19-
async def generate(self) -> FormulaEngine:
19+
def generate(self) -> FormulaEngine:
2020
"""Make a formula for the PV power production of a microgrid.
2121
2222
Returns:
@@ -44,7 +44,7 @@ async def generate(self) -> FormulaEngine:
4444
# If there are no PV inverters, we have to send 0 values as the same
4545
# frequency as the other streams. So we subscribe with a non-existing
4646
# component id, just to get a `None` message at the resampling interval.
47-
await builder.push_component_metric(
47+
builder.push_component_metric(
4848
NON_EXISTING_COMPONENT_ID, nones_are_zeros=True
4949
)
5050
return builder.build()
@@ -53,6 +53,6 @@ async def generate(self) -> FormulaEngine:
5353
if idx > 0:
5454
builder.push_oper("+")
5555

56-
await builder.push_component_metric(comp.component_id, nones_are_zeros=True)
56+
builder.push_component_metric(comp.component_id, nones_are_zeros=True)
5757

5858
return builder.build()

0 commit comments

Comments
 (0)