Skip to content

Commit 506aa34

Browse files
committed
chore: implement interface
1 parent 99ed9b3 commit 506aa34

3 files changed

Lines changed: 27 additions & 14 deletions

File tree

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88
from libecalc.domain.process.pump.pump import PumpModel
99
from libecalc.domain.time_series_flow_rate import TimeSeriesFlowRate
1010
from libecalc.domain.time_series_fluid_density import TimeSeriesFluidDensity
11+
from libecalc.domain.time_series_power_loss_factor import TimeSeriesPowerLossFactor
1112
from libecalc.domain.time_series_pressure import TimeSeriesPressure
12-
from libecalc.presentation.yaml.domain.expression_time_series_power_loss_factor import (
13-
ExpressionTimeSeriesPowerLossFactor,
14-
)
1513

1614

1715
class PumpConsumerFunction(ConsumerFunction):
@@ -35,7 +33,7 @@ def __init__(
3533
suction_pressure: TimeSeriesPressure,
3634
discharge_pressure: TimeSeriesPressure,
3735
fluid_density: TimeSeriesFluidDensity,
38-
power_loss_factor: ExpressionTimeSeriesPowerLossFactor | None = None,
36+
power_loss_factor: TimeSeriesPowerLossFactor | None = None,
3937
):
4038
self._pump_function = pump_function
4139
self._rate = rate
Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
11
from abc import ABC, abstractmethod
22

3+
import numpy as np
4+
35

46
class TimeSeriesPowerLossFactor(ABC):
57
"""
68
Interface for evaluating power loss factor time series.
79
810
Implementations should provide methods to evaluate and return
9-
power loss factor values, for each stream day.
11+
power loss factor values.
1012
1113
"""
1214

1315
@abstractmethod
14-
def get_stream_day_values(self) -> list[float]:
16+
def get_values(self, length=None) -> list[float]:
17+
"""
18+
Returns the evaluated power loss factor values as a list.
19+
"""
20+
pass
21+
22+
@abstractmethod
23+
def apply(self, energy_usage: list[float | None] | np.ndarray) -> list[float]:
1524
"""
16-
Returns the evaluated power loss factor values for each stream day.
25+
Apply the power loss factor to the given energy usage.
1726
"""
1827
pass

src/libecalc/presentation/yaml/domain/expression_time_series_power_loss_factor.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
from collections.abc import Sequence
2-
31
import numpy as np
42

3+
from libecalc.domain.time_series_power_loss_factor import TimeSeriesPowerLossFactor
54
from libecalc.presentation.yaml.domain.time_series_expression import TimeSeriesExpression
65

76

8-
class ExpressionTimeSeriesPowerLossFactor:
7+
class ExpressionTimeSeriesPowerLossFactor(TimeSeriesPowerLossFactor):
98
"""
109
Provides power loss factor values by evaluating a time series expression.
1110
"""
@@ -27,14 +26,21 @@ def get_values(self, length=None) -> list[float]:
2726

2827
def apply(
2928
self,
30-
energy_usage: Sequence[float | None] | np.ndarray,
29+
energy_usage: list[float | None] | np.ndarray,
3130
) -> list[float]:
3231
"""
33-
Apply resulting required power taking a (cable/motor...) power loss factor into account.
32+
Adjusts the input energy usage to account for power losses.
33+
34+
Converts the input sequence to a NumPy array, replaces missing values (None or NaN) with 0.0,
35+
retrieves the corresponding power loss factor for each time step, and returns the adjusted
36+
energy usage as a list, where each value is calculated as:
37+
adjusted = energy_usage / (1 - power_loss_factor)
38+
3439
Args:
35-
energy_usage: initial required energy usage [MW]
40+
energy_usage: Sequence or array of initial energy usage values [MW], may contain None.
41+
3642
Returns:
37-
energy usage where power loss is accounted for, i.e. energy_usage/(1-power_loss_factor)
43+
List of energy usage values adjusted for power loss.
3844
"""
3945

4046
energy_usage_arr = np.asarray(energy_usage, dtype=np.float64)

0 commit comments

Comments
 (0)