Skip to content

Commit d39a6a2

Browse files
committed
fix: count only device models, not stock entries, when enumerating devices in _prepare
The commodity_to_devices mapping and the num_flexible_devices count were built from the re-copied flex_model, which includes stock-model entries. This overran the sensors list (IndexError at sensor_d = sensors[d]) whenever the flex-model contained a stock entry, and gave stock entries bogus device indices in commodity groups. Enumerate device_models instead, keeping the earlier num_flexible_devices = len(device_models) and matching _compute_commodity_aggregate_schedules, which already uses self._device_models. Signed-off-by: F.N. Claessen <claessen@seita.nl>
1 parent b3e12bd commit d39a6a2

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

flexmeasures/data/models/planning/storage.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,17 +342,18 @@ def device_list_series(
342342
) -> pd.Series:
343343
return pd.Series([tuple(devices)] * len(index), index=index, name="device")
344344

345+
# Enumerate only device models (not stock entries), so device indices line up
346+
# with the sensors and device_constraints lists.
345347
commodity_to_devices = {}
346-
for d, flex_model_d in enumerate(flex_model):
348+
for d, flex_model_d in enumerate(device_models):
347349
commodity = flex_model_d.get("commodity", "electricity")
348350
commodity_to_devices.setdefault(commodity, []).append(d)
349351

350352
# inflexible devices are electricity by default
351-
number_flexible_devices = len(flex_model)
353+
number_flexible_devices = len(device_models)
352354
number_inflexible_devices = len(
353355
self.flex_context.get("inflexible_device_sensors", [])
354356
)
355-
num_flexible_devices = len(flex_model)
356357
commodity_to_devices["electricity"] += list(
357358
range(
358359
number_flexible_devices,

0 commit comments

Comments
 (0)