Skip to content

Commit d6f019b

Browse files
authored
refactor: simplify consumer system with domain time series objects (#1063)
* refactor: consumer system time series expressions
1 parent d2a5351 commit d6f019b

20 files changed

Lines changed: 664 additions & 510 deletions

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/component.py

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from libecalc.common.consumption_type import ConsumptionType
99
from libecalc.common.logger import logger
1010
from libecalc.common.temporal_model import TemporalModel
11-
from libecalc.common.time_utils import Period, Periods
11+
from libecalc.common.time_utils import Periods
1212
from libecalc.common.units import Unit
1313
from libecalc.common.utils.nan_handling import clean_nan_values
1414
from libecalc.common.utils.rates import TimeSeriesBoolean, TimeSeriesFloat, TimeSeriesInt, TimeSeriesStreamDayRate
@@ -209,13 +209,9 @@ def evaluate(
209209
probably be changed soon.
210210
"""
211211
logger.debug(f"Evaluating consumer: {self.name}")
212-
regularity = self.regularity
213212

214213
# NOTE! This function may not handle regularity 0
215-
consumer_function_results = self.evaluate_consumer_temporal_model(
216-
expression_evaluator=expression_evaluator,
217-
regularity=regularity,
218-
)
214+
consumer_function_results = self.evaluate_consumer_temporal_model()
219215

220216
aggregated_consumer_function_result = self.aggregate_consumer_function_results(
221217
consumer_function_results=consumer_function_results,
@@ -276,29 +272,12 @@ def evaluate(
276272

277273
def evaluate_consumer_temporal_model(
278274
self,
279-
expression_evaluator: ExpressionEvaluator,
280-
regularity: Regularity,
281275
) -> list[ConsumerOrSystemFunctionResult]:
282276
"""Evaluate each of the models in the temporal model for this consumer."""
283277
results = []
284-
for period, consumer_model in self._consumer_time_function.items():
285-
if Period.intersects(period, expression_evaluator.get_period()):
286-
start_index, end_index = period.get_period_indices(expression_evaluator.get_periods())
287-
regularity_this_period = regularity.time_series.values[start_index:end_index]
288-
variables_map_this_period = expression_evaluator.get_subset(
289-
start_index=start_index,
290-
end_index=end_index,
291-
)
292-
logger.debug(
293-
f"Evaluating {consumer_model.__class__.__name__} with"
294-
f" {len(variables_map_this_period.get_periods())} periods(s) in range"
295-
f" [{period}]"
296-
)
297-
consumer_function_result = consumer_model.evaluate(
298-
expression_evaluator=variables_map_this_period,
299-
regularity=regularity_this_period,
300-
)
301-
results.append(consumer_function_result)
278+
for _period, consumer_model in self._consumer_time_function.items():
279+
consumer_function_result = consumer_model.evaluate()
280+
results.append(consumer_function_result)
302281

303282
return results
304283

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/consumer_function/compressor_consumer_function.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import numpy as np
22

3-
from libecalc.common.variables import ExpressionEvaluator
43
from libecalc.domain.infrastructure.energy_components.legacy_consumer.consumer_function import (
54
ConsumerFunction,
65
ConsumerFunctionResult,
@@ -55,11 +54,7 @@ def suction_pressure(self) -> TimeSeriesPressure | None:
5554
def discharge_pressure(self) -> TimeSeriesPressure | None:
5655
return self._discharge_pressure_expression
5756

58-
def evaluate(
59-
self,
60-
expression_evaluator: ExpressionEvaluator,
61-
regularity: list[float],
62-
) -> ConsumerFunctionResult:
57+
def evaluate(self) -> ConsumerFunctionResult:
6358
"""Evaluate the Compressor energy usage.
6459
:param expression_evaluator: Variables map is the VariablesMap-object holding all the data to be evaluated.
6560
:param regularity:

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/consumer_function/consumer_function.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
from abc import ABC, abstractmethod
44

5-
from libecalc.common.variables import ExpressionEvaluator
65
from libecalc.domain.infrastructure.energy_components.legacy_consumer.consumer_function.results import (
7-
ConsumerFunctionResult,
6+
ConsumerFunctionResultBase,
87
)
98
from libecalc.expression import Expression
109

@@ -14,11 +13,7 @@ class ConsumerFunction(ABC):
1413
power_loss_factor_expression: Expression
1514

1615
@abstractmethod
17-
def evaluate(
18-
self,
19-
expression_evaluator: ExpressionEvaluator,
20-
regularity: list[float],
21-
) -> ConsumerFunctionResult:
16+
def evaluate(self) -> ConsumerFunctionResultBase:
2217
"""Referred to as ENERGY_USAGE_MODEL in yaml.
2318
2419
Evaluation of a consumer function given a collection of time series cases

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/consumer_function/direct_consumer_function.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from libecalc.common.energy_usage_type import EnergyUsageType
44
from libecalc.common.units import Unit
5-
from libecalc.common.variables import ExpressionEvaluator
65
from libecalc.domain.infrastructure.energy_components.legacy_consumer.consumer_function import (
76
ConsumerFunction,
87
ConsumerFunctionResult,
@@ -48,11 +47,7 @@ def power_unit(self) -> Unit | None:
4847
return Unit.MEGA_WATT
4948
return None
5049

51-
def evaluate(
52-
self,
53-
expression_evaluator: ExpressionEvaluator,
54-
regularity: list[float],
55-
) -> ConsumerFunctionResult:
50+
def evaluate(self) -> ConsumerFunctionResult:
5651
energy_usage = self._energy_usage.get_stream_day_values()
5752

5853
energy_function_result = EnergyFunctionGenericResult(
@@ -66,7 +61,7 @@ def evaluate(
6661
energy_usage = self._power_loss_factor.apply(
6762
energy_usage=np.asarray(energy_function_result.energy_usage, dtype=np.float64)
6863
)
69-
power_loss_factor = self._power_loss_factor.get_values(length=len(energy_usage))
64+
power_loss_factor = self._power_loss_factor.get_values()
7065
else:
7166
energy_usage = energy_function_result.energy_usage
7267
power_loss_factor = None

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/consumer_function/pump_consumer_function.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import numpy as np
22

3-
from libecalc.common.variables import ExpressionEvaluator
43
from libecalc.domain.infrastructure.energy_components.legacy_consumer.consumer_function import (
54
ConsumerFunction,
65
ConsumerFunctionResult,
@@ -44,11 +43,7 @@ def __init__(
4443
# Typically used for power line loss subsea et.c.
4544
self._power_loss_factor = power_loss_factor
4645

47-
def evaluate(
48-
self,
49-
expression_evaluator: ExpressionEvaluator,
50-
regularity: list[float],
51-
) -> ConsumerFunctionResult:
46+
def evaluate(self) -> ConsumerFunctionResult:
5247
"""Evaluate the pump consumer function
5348
5449
Args:
@@ -73,13 +68,13 @@ def evaluate(
7368
energy_usage = self._power_loss_factor.apply(
7469
energy_usage=np.asarray(energy_function_result.energy_usage, dtype=np.float64)
7570
)
76-
power_loss_factor = self._power_loss_factor.get_values(length=len(energy_usage))
71+
power_loss_factor = self._power_loss_factor.get_values()
7772
else:
7873
energy_usage = energy_function_result.energy_usage
7974
power_loss_factor = None
8075

8176
pump_consumer_function_result = ConsumerFunctionResult(
82-
periods=expression_evaluator.get_periods(),
77+
periods=self._rate.get_periods(),
8378
is_valid=np.asarray(energy_function_result.is_valid, dtype=bool),
8479
energy_function_result=energy_function_result,
8580
energy_usage_before_power_loss_factor=np.asarray(energy_function_result.energy_usage, dtype=np.float64),

0 commit comments

Comments
 (0)