33from libecalc .common .energy_usage_type import EnergyUsageType
44from libecalc .common .list .list_utils import array_to_list
55from libecalc .common .units import Unit
6- from libecalc .common .utils .rates import Rates , RateType
76from libecalc .common .variables import ExpressionEvaluator
87from libecalc .domain .infrastructure .energy_components .legacy_consumer .consumer_function import (
98 ConsumerFunction ,
109 ConsumerFunctionResult ,
1110)
1211from libecalc .domain .infrastructure .energy_components .legacy_consumer .consumer_function .utils import (
13- apply_condition ,
1412 apply_power_loss_factor ,
15- get_condition_from_expression ,
1613 get_power_loss_factor_from_expression ,
1714)
1815from libecalc .domain .process .core .results import EnergyFunctionGenericResult
1916from libecalc .expression import Expression
17+ from libecalc .presentation .yaml .domain .expression_time_series_flow_rate import ExpressionTimeSeriesFlowRate
2018
2119
2220class DirectExpressionConsumerFunction (ConsumerFunction ):
2321 def __init__ (
2422 self ,
2523 energy_usage_type : EnergyUsageType ,
2624 condition : Expression | None = None ,
27- fuel_rate : Expression | None = None ,
28- load : Expression | None = None ,
25+ fuel_rate : ExpressionTimeSeriesFlowRate = None ,
26+ load : ExpressionTimeSeriesFlowRate | None = None ,
2927 power_loss_factor : Expression | None = None ,
30- consumption_rate_type : RateType = RateType .STREAM_DAY ,
3128 ):
32- expression = fuel_rate if energy_usage_type == EnergyUsageType .FUEL .value else load
29+ self . _energy_usage = fuel_rate if energy_usage_type == EnergyUsageType .FUEL .value else load
3330 power_loss_factor_expression = power_loss_factor
34- assert isinstance (consumption_rate_type , RateType )
3531 self ._energy_usage_type = energy_usage_type
36- self ._expression = expression
37- self ._convert_to_stream_day = consumption_rate_type == RateType .CALENDAR_DAY
3832 self ._condition_expression = condition
3933 self ._power_loss_factor_expression = power_loss_factor_expression
4034
@@ -66,28 +60,15 @@ def evaluate(
6660 expression_evaluator : ExpressionEvaluator ,
6761 regularity : list [float ],
6862 ) -> ConsumerFunctionResult :
69- energy_usage_expression_evaluated = expression_evaluator .evaluate (expression = self ._expression ) # type: ignore[arg-type]
70-
71- # Do conditioning first - set rates to zero if conditions are not met
72- condition = get_condition_from_expression (
73- expression_evaluator = expression_evaluator ,
74- condition_expression = self ._condition_expression ,
75- )
76-
77- energy_usage = apply_condition (
78- input_array = Rates .to_stream_day (
79- calendar_day_rates = energy_usage_expression_evaluated ,
80- regularity = regularity ,
81- )
82- if self ._convert_to_stream_day
83- else energy_usage_expression_evaluated ,
84- condition = condition ,
85- )
63+ energy_usage_raw = self ._energy_usage .get_stream_day_values ()
64+ energy_usage = array_to_list (np .asarray (energy_usage_raw ))
65+ if energy_usage is None :
66+ energy_usage = []
8667
8768 energy_function_result = EnergyFunctionGenericResult (
88- energy_usage = array_to_list ( energy_usage ), # type: ignore[arg-type]
69+ energy_usage = energy_usage ,
8970 energy_usage_unit = self .energy_usage_unit ,
90- power = array_to_list ( energy_usage ) if self .is_electrical_consumer else None ,
71+ power = energy_usage if self .is_electrical_consumer else None ,
9172 power_unit = self .power_unit if self .is_electrical_consumer else None ,
9273 )
9374
@@ -104,7 +85,7 @@ def evaluate(
10485 # but negative fuel rates are always invalid.
10586
10687 if self .is_fuel_consumer :
107- is_valid [energy_usage < 0 ] = False
88+ is_valid [np . asarray ( energy_usage ) < 0 ] = False
10889
10990 consumer_function_result = ConsumerFunctionResult (
11091 periods = expression_evaluator .get_periods (),
0 commit comments