Skip to content

Commit b55b559

Browse files
committed
Switch to Quantity-specific constructors from default constructors
This is because support for default constructors for derived types is going away in a subsequent commit. Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 8ec17ef commit b55b559

File tree

6 files changed

+91
-55
lines changed

6 files changed

+91
-55
lines changed

src/frequenz/sdk/timeseries/_quantities.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,9 @@ def __mul__(self, duration: timedelta) -> Energy:
367367
Returns:
368368
An energy from multiplying this power by the given duration.
369369
"""
370-
return Energy(self._base_value * duration.total_seconds() / 3600.0, exponent=0)
370+
return Energy.from_watt_hours(
371+
self._base_value * duration.total_seconds() / 3600.0
372+
)
371373

372374
@overload
373375
def __truediv__(self, other: Current) -> Voltage:
@@ -398,9 +400,9 @@ def __truediv__(self, other: Current | Voltage) -> Voltage | Current:
398400
TypeError: If the given value is not a current or voltage.
399401
"""
400402
if isinstance(other, Current):
401-
return Voltage(self._base_value / other._base_value, exponent=0)
403+
return Voltage.from_volts(self._base_value / other._base_value)
402404
if isinstance(other, Voltage):
403-
return Current(self._base_value / other._base_value, exponent=0)
405+
return Current.from_amperes(self._base_value / other._base_value)
404406
raise TypeError(
405407
f"unsupported operand type(s) for /: '{type(self)}' and '{type(other)}'"
406408
)
@@ -464,7 +466,7 @@ def __mul__(self, voltage: Voltage) -> Power:
464466
Returns:
465467
The power.
466468
"""
467-
return Power(self._base_value * voltage._base_value, exponent=0)
469+
return Power.from_watts(self._base_value * voltage._base_value)
468470

469471

470472
class Voltage(Quantity, exponent_unit_map={0: "V", -3: "mV", 3: "kV"}):
@@ -539,7 +541,7 @@ def __mul__(self, current: Current) -> Power:
539541
Returns:
540542
The calculated power.
541543
"""
542-
return Power(self._base_value * current._base_value, exponent=0)
544+
return Power.from_watts(self._base_value * current._base_value)
543545

544546

545547
class Energy(
@@ -641,9 +643,7 @@ def __truediv__(self, other: timedelta | Power) -> Power | timedelta:
641643
TypeError: If the given value is not a power or duration.
642644
"""
643645
if isinstance(other, timedelta):
644-
return Power(
645-
self._base_value / (other.total_seconds() / 3600.0), exponent=0
646-
)
646+
return Power.from_watts(self._base_value / (other.total_seconds() / 3600.0))
647647
if isinstance(other, Power):
648648
return timedelta(seconds=(self._base_value / other._base_value) * 3600.0)
649649
raise TypeError(

src/frequenz/sdk/timeseries/ev_charger_pool/_ev_charger_pool.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,13 +349,13 @@ async def _stream_component_data(
349349
timestamp=phase_1.timestamp,
350350
value_p1=None
351351
if phase_1.value is None
352-
else Current(phase_1.value.base_value),
352+
else Current.from_amperes(phase_1.value.base_value),
353353
value_p2=None
354354
if phase_2.value is None
355-
else Current(phase_2.value.base_value),
355+
else Current.from_amperes(phase_2.value.base_value),
356356
value_p3=None
357357
if phase_3.value is None
358-
else Current(phase_3.value.base_value),
358+
else Current.from_amperes(phase_3.value.base_value),
359359
)
360360

361361
if (

tests/timeseries/_battery_pool/test_battery_pool.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -447,19 +447,19 @@ async def test_battery_pool_power(mocker: MockerFixture) -> None:
447447
production_receiver = battery_pool.production_power.new_receiver()
448448

449449
await mockgrid.mock_data.send_bat_inverter_power([2.0, 3.0])
450-
assert (await power_receiver.receive()).value == Power(5.0)
451-
assert (await consumption_receiver.receive()).value == Power(5.0)
452-
assert (await production_receiver.receive()).value == Power(0.0)
450+
assert (await power_receiver.receive()).value == Power.from_watts(5.0)
451+
assert (await consumption_receiver.receive()).value == Power.from_watts(5.0)
452+
assert (await production_receiver.receive()).value == Power.from_watts(0.0)
453453

454454
await mockgrid.mock_data.send_bat_inverter_power([-2.0, -5.0])
455-
assert (await power_receiver.receive()).value == Power(-7.0)
456-
assert (await consumption_receiver.receive()).value == Power(0.0)
457-
assert (await production_receiver.receive()).value == Power(7.0)
455+
assert (await power_receiver.receive()).value == Power.from_watts(-7.0)
456+
assert (await consumption_receiver.receive()).value == Power.from_watts(0.0)
457+
assert (await production_receiver.receive()).value == Power.from_watts(7.0)
458458

459459
await mockgrid.mock_data.send_bat_inverter_power([2.0, -5.0])
460-
assert (await power_receiver.receive()).value == Power(-3.0)
461-
assert (await consumption_receiver.receive()).value == Power(0.0)
462-
assert (await production_receiver.receive()).value == Power(3.0)
460+
assert (await power_receiver.receive()).value == Power.from_watts(-3.0)
461+
assert (await consumption_receiver.receive()).value == Power.from_watts(0.0)
462+
assert (await production_receiver.receive()).value == Power.from_watts(3.0)
463463

464464
await mockgrid.cleanup()
465465

tests/timeseries/_formula_engine/test_formula_composition.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ async def test_formula_composition_missing_pv(self, mocker: MockerFixture) -> No
120120
inv_pow = await inv_calc_recv.receive()
121121

122122
assert inv_pow == bat_pow
123-
assert pv_pow.timestamp == inv_pow.timestamp and pv_pow.value == Power(0.0)
123+
assert (
124+
pv_pow.timestamp == inv_pow.timestamp
125+
and pv_pow.value == Power.from_watts(0.0)
126+
)
124127
count += 1
125128

126129
await mockgrid.cleanup()
@@ -154,8 +157,9 @@ async def test_formula_composition_missing_bat(self, mocker: MockerFixture) -> N
154157
inv_pow = await inv_calc_recv.receive()
155158

156159
assert inv_pow == pv_pow
157-
assert bat_pow.timestamp == inv_pow.timestamp and bat_pow.value == Power(
158-
0.0
160+
assert (
161+
bat_pow.timestamp == inv_pow.timestamp
162+
and bat_pow.value == Power.from_watts(0.0)
159163
)
160164
count += 1
161165

tests/timeseries/test_ev_charger_pool.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,14 @@ async def test_ev_power( # pylint: disable=too-many-locals
8787
consumption_receiver = ev_pool.consumption_power.new_receiver()
8888

8989
await mockgrid.mock_data.send_evc_power([2.0, 4.0, 10.0])
90-
assert (await power_receiver.receive()).value == Power(16.0)
91-
assert (await production_receiver.receive()).value == Power(0.0)
92-
assert (await consumption_receiver.receive()).value == Power(16.0)
90+
assert (await power_receiver.receive()).value == Power.from_watts(16.0)
91+
assert (await production_receiver.receive()).value == Power.from_watts(0.0)
92+
assert (await consumption_receiver.receive()).value == Power.from_watts(16.0)
9393

9494
await mockgrid.mock_data.send_evc_power([2.0, 4.0, -10.0])
95-
assert (await power_receiver.receive()).value == Power(-4.0)
96-
assert (await production_receiver.receive()).value == Power(4.0)
97-
assert (await consumption_receiver.receive()).value == Power(0.0)
95+
assert (await power_receiver.receive()).value == Power.from_watts(-4.0)
96+
assert (await production_receiver.receive()).value == Power.from_watts(4.0)
97+
assert (await consumption_receiver.receive()).value == Power.from_watts(0.0)
9898

9999
await mockgrid.cleanup()
100100

@@ -126,7 +126,11 @@ async def test_ev_component_data(self, mocker: MockerFixture) -> None:
126126
status.current.value_p1,
127127
status.current.value_p2,
128128
status.current.value_p3,
129-
) == (Current(2), Current(3), Current(5))
129+
) == (
130+
Current.from_amperes(2),
131+
Current.from_amperes(3),
132+
Current.from_amperes(5),
133+
)
130134
assert status.state == EVChargerState.MISSING
131135

132136
await mockgrid.mock_data.send_evc_current([[2, 3, None]])
@@ -136,7 +140,11 @@ async def test_ev_component_data(self, mocker: MockerFixture) -> None:
136140
status.current.value_p1,
137141
status.current.value_p2,
138142
status.current.value_p3,
139-
) == (Current(2), Current(3), None)
143+
) == (
144+
Current.from_amperes(2),
145+
Current.from_amperes(3),
146+
None,
147+
)
140148
assert status.state == EVChargerState.IDLE
141149

142150
await mockgrid.mock_data.send_evc_current([[None, None, None]])
@@ -146,7 +154,11 @@ async def test_ev_component_data(self, mocker: MockerFixture) -> None:
146154
status.current.value_p1,
147155
status.current.value_p2,
148156
status.current.value_p3,
149-
) == (None, None, None)
157+
) == (
158+
None,
159+
None,
160+
None,
161+
)
150162
assert status.state == EVChargerState.MISSING
151163

152164
await mockgrid.mock_data.send_evc_current([[None, None, None]])
@@ -157,7 +169,11 @@ async def test_ev_component_data(self, mocker: MockerFixture) -> None:
157169
status.current.value_p1,
158170
status.current.value_p2,
159171
status.current.value_p3,
160-
) == (None, None, None)
172+
) == (
173+
None,
174+
None,
175+
None,
176+
)
161177
assert status.state == EVChargerState.MISSING
162178

163179
await mockgrid.mock_data.send_evc_current([[4, None, None]])
@@ -167,7 +183,11 @@ async def test_ev_component_data(self, mocker: MockerFixture) -> None:
167183
status.current.value_p1,
168184
status.current.value_p2,
169185
status.current.value_p3,
170-
) == (Current(4), None, None)
186+
) == (
187+
Current.from_amperes(4),
188+
None,
189+
None,
190+
)
171191
assert status.state == EVChargerState.EV_PLUGGED
172192

173193
await mockgrid.cleanup()

tests/timeseries/test_logical_meter.py

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,14 @@ async def test_grid_production_consumption_power(
118118
grid_consumption_recv = logical_meter.grid_consumption_power.new_receiver()
119119

120120
await mockgrid.mock_data.send_meter_power([1.0, 2.0, 3.0, 4.0])
121-
assert (await grid_recv.receive()).value == Power(10.0)
122-
assert (await grid_production_recv.receive()).value == Power(0.0)
123-
assert (await grid_consumption_recv.receive()).value == Power(10.0)
121+
assert (await grid_recv.receive()).value == Power.from_watts(10.0)
122+
assert (await grid_production_recv.receive()).value == Power.from_watts(0.0)
123+
assert (await grid_consumption_recv.receive()).value == Power.from_watts(10.0)
124124

125125
await mockgrid.mock_data.send_meter_power([1.0, 2.0, -3.0, -4.0])
126-
assert (await grid_recv.receive()).value == Power(-4.0)
127-
assert (await grid_production_recv.receive()).value == Power(4.0)
128-
assert (await grid_consumption_recv.receive()).value == Power(0.0)
126+
assert (await grid_recv.receive()).value == Power.from_watts(-4.0)
127+
assert (await grid_production_recv.receive()).value == Power.from_watts(4.0)
128+
assert (await grid_consumption_recv.receive()).value == Power.from_watts(0.0)
129129

130130
async def test_chp_power(self, mocker: MockerFixture) -> None:
131131
"""Test the chp power formula."""
@@ -144,14 +144,22 @@ async def test_chp_power(self, mocker: MockerFixture) -> None:
144144
)
145145

146146
await mockgrid.mock_data.send_meter_power([1.0, 2.0, 3.0, 4.0])
147-
assert (await chp_power_receiver.receive()).value == Power(2.0)
148-
assert (await chp_production_power_receiver.receive()).value == Power(0.0)
149-
assert (await chp_consumption_power_receiver.receive()).value == Power(2.0)
147+
assert (await chp_power_receiver.receive()).value == Power.from_watts(2.0)
148+
assert (
149+
await chp_production_power_receiver.receive()
150+
).value == Power.from_watts(0.0)
151+
assert (
152+
await chp_consumption_power_receiver.receive()
153+
).value == Power.from_watts(2.0)
150154

151155
await mockgrid.mock_data.send_meter_power([-4.0, -12.0, None, 10.2])
152-
assert (await chp_power_receiver.receive()).value == Power(-12.0)
153-
assert (await chp_production_power_receiver.receive()).value == Power(12.0)
154-
assert (await chp_consumption_power_receiver.receive()).value == Power(0.0)
156+
assert (await chp_power_receiver.receive()).value == Power.from_watts(-12.0)
157+
assert (
158+
await chp_production_power_receiver.receive()
159+
).value == Power.from_watts(12.0)
160+
assert (
161+
await chp_consumption_power_receiver.receive()
162+
).value == Power.from_watts(0.0)
155163

156164
async def test_pv_power(self, mocker: MockerFixture) -> None:
157165
"""Test the pv power formula."""
@@ -167,9 +175,13 @@ async def test_pv_power(self, mocker: MockerFixture) -> None:
167175
)
168176

169177
await mockgrid.mock_data.send_meter_power([10.0, -1.0, -2.0])
170-
assert (await pv_power_receiver.receive()).value == Power(-3.0)
171-
assert (await pv_production_power_receiver.receive()).value == Power(3.0)
172-
assert (await pv_consumption_power_receiver.receive()).value == Power(0.0)
178+
assert (await pv_power_receiver.receive()).value == Power.from_watts(-3.0)
179+
assert (await pv_production_power_receiver.receive()).value == Power.from_watts(
180+
3.0
181+
)
182+
assert (
183+
await pv_consumption_power_receiver.receive()
184+
).value == Power.from_watts(0.0)
173185

174186
async def test_consumer_power_grid_meter(self, mocker: MockerFixture) -> None:
175187
"""Test the consumer power formula with a grid meter."""
@@ -182,7 +194,7 @@ async def test_consumer_power_grid_meter(self, mocker: MockerFixture) -> None:
182194
consumer_power_receiver = logical_meter.consumer_power.new_receiver()
183195

184196
await mockgrid.mock_data.send_meter_power([20.0, 2.0, 3.0, 4.0, 5.0])
185-
assert (await consumer_power_receiver.receive()).value == Power(6.0)
197+
assert (await consumer_power_receiver.receive()).value == Power.from_watts(6.0)
186198

187199
async def test_consumer_power_no_grid_meter(self, mocker: MockerFixture) -> None:
188200
"""Test the consumer power formula without a grid meter."""
@@ -195,7 +207,7 @@ async def test_consumer_power_no_grid_meter(self, mocker: MockerFixture) -> None
195207
consumer_power_receiver = logical_meter.consumer_power.new_receiver()
196208

197209
await mockgrid.mock_data.send_meter_power([20.0, 2.0, 3.0, 4.0, 5.0])
198-
assert (await consumer_power_receiver.receive()).value == Power(20.0)
210+
assert (await consumer_power_receiver.receive()).value == Power.from_watts(20.0)
199211

200212
async def test_producer_power(self, mocker: MockerFixture) -> None:
201213
"""Test the producer power formula."""
@@ -208,7 +220,7 @@ async def test_producer_power(self, mocker: MockerFixture) -> None:
208220
producer_power_receiver = logical_meter.producer_power.new_receiver()
209221

210222
await mockgrid.mock_data.send_meter_power([20.0, 2.0, 3.0, 4.0, 5.0])
211-
assert (await producer_power_receiver.receive()).value == Power(14.0)
223+
assert (await producer_power_receiver.receive()).value == Power.from_watts(14.0)
212224

213225
async def test_producer_power_no_chp(self, mocker: MockerFixture) -> None:
214226
"""Test the producer power formula without a chp."""
@@ -220,7 +232,7 @@ async def test_producer_power_no_chp(self, mocker: MockerFixture) -> None:
220232
producer_power_receiver = logical_meter.producer_power.new_receiver()
221233

222234
await mockgrid.mock_data.send_meter_power([20.0, 2.0, 3.0])
223-
assert (await producer_power_receiver.receive()).value == Power(5.0)
235+
assert (await producer_power_receiver.receive()).value == Power.from_watts(5.0)
224236

225237
async def test_producer_power_no_pv(self, mocker: MockerFixture) -> None:
226238
"""Test the producer power formula without pv."""
@@ -232,7 +244,7 @@ async def test_producer_power_no_pv(self, mocker: MockerFixture) -> None:
232244
producer_power_receiver = logical_meter.producer_power.new_receiver()
233245

234246
await mockgrid.mock_data.send_meter_power([20.0, 2.0])
235-
assert (await producer_power_receiver.receive()).value == Power(2.0)
247+
assert (await producer_power_receiver.receive()).value == Power.from_watts(2.0)
236248

237249
async def test_no_producer_power(self, mocker: MockerFixture) -> None:
238250
"""Test the producer power formula without producers."""
@@ -243,4 +255,4 @@ async def test_no_producer_power(self, mocker: MockerFixture) -> None:
243255
producer_power_receiver = logical_meter.producer_power.new_receiver()
244256

245257
await mockgrid.mock_data.send_non_existing_component_value()
246-
assert (await producer_power_receiver.receive()).value == Power(0.0)
258+
assert (await producer_power_receiver.receive()).value == Power.from_watts(0.0)

0 commit comments

Comments
 (0)