openenergyid 0.1.19__py2.py3-none-any.whl → 0.1.20__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openenergyid might be problematic. Click here for more details.
- openenergyid/__init__.py +1 -1
- openenergyid/dyntar/__init__.py +4 -1
- openenergyid/dyntar/const.py +9 -0
- openenergyid/dyntar/main.py +153 -90
- openenergyid/dyntar/models.py +40 -3
- {openenergyid-0.1.19.dist-info → openenergyid-0.1.20.dist-info}/METADATA +1 -1
- {openenergyid-0.1.19.dist-info → openenergyid-0.1.20.dist-info}/RECORD +9 -9
- {openenergyid-0.1.19.dist-info → openenergyid-0.1.20.dist-info}/WHEEL +0 -0
- {openenergyid-0.1.19.dist-info → openenergyid-0.1.20.dist-info}/licenses/LICENSE +0 -0
openenergyid/__init__.py
CHANGED
openenergyid/dyntar/__init__.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Dynamic Tariff Analysis module."""
|
|
2
2
|
|
|
3
|
-
from .main import calculate_dyntar_columns
|
|
3
|
+
from .main import calculate_dyntar_columns, summarize_result
|
|
4
4
|
from .models import (
|
|
5
5
|
DynamicTariffAnalysisInput,
|
|
6
6
|
DynamicTariffAnalysisOutput,
|
|
7
|
+
DynamicTariffAnalysisOutputSummary,
|
|
7
8
|
OutputColumns,
|
|
8
9
|
RequiredColumns,
|
|
9
10
|
)
|
|
@@ -12,6 +13,8 @@ __all__ = [
|
|
|
12
13
|
"calculate_dyntar_columns",
|
|
13
14
|
"DynamicTariffAnalysisInput",
|
|
14
15
|
"DynamicTariffAnalysisOutput",
|
|
16
|
+
"DynamicTariffAnalysisOutputSummary",
|
|
15
17
|
"OutputColumns",
|
|
16
18
|
"RequiredColumns",
|
|
19
|
+
"summarize_result",
|
|
17
20
|
]
|
openenergyid/dyntar/const.py
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Constants for the dyntar analysis."""
|
|
2
2
|
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
3
5
|
ELECTRICITY_DELIVERED_SMR3 = "electricity_delivered_smr3"
|
|
4
6
|
ELECTRICITY_EXPORTED_SMR3 = "electricity_exported_smr3"
|
|
5
7
|
ELECTRICITY_DELIVERED_SMR2 = "electricity_delivered_smr2"
|
|
@@ -20,3 +22,10 @@ HEATMAP_TOTAL = "heatmap_total"
|
|
|
20
22
|
HEATMAP_DELIVERED_DESCRIPTION = "heatmap_delivered_description"
|
|
21
23
|
HEATMAP_EXPORTED_DESCRIPTION = "heatmap_exported_description"
|
|
22
24
|
HEATMAP_TOTAL_DESCRIPTION = "heatmap_total_description"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Register(Enum):
|
|
28
|
+
"""Register for dynamic tariff analysis."""
|
|
29
|
+
|
|
30
|
+
DELIVERY = "delivery"
|
|
31
|
+
EXPORT = "export"
|
openenergyid/dyntar/main.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Main module of the DynTar package."""
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from typing import cast
|
|
4
4
|
import pandas as pd
|
|
5
5
|
|
|
6
6
|
from openenergyid.const import (
|
|
@@ -29,6 +29,7 @@ from .const import (
|
|
|
29
29
|
HEATMAP_DELIVERED_DESCRIPTION,
|
|
30
30
|
HEATMAP_EXPORTED_DESCRIPTION,
|
|
31
31
|
HEATMAP_TOTAL_DESCRIPTION,
|
|
32
|
+
Register,
|
|
32
33
|
)
|
|
33
34
|
|
|
34
35
|
|
|
@@ -40,15 +41,28 @@ def weigh_by_monthly_profile(df: pd.DataFrame, series_name, profile_name) -> pd.
|
|
|
40
41
|
)
|
|
41
42
|
|
|
42
43
|
|
|
43
|
-
def extend_dataframe_with_smr2(
|
|
44
|
+
def extend_dataframe_with_smr2(
|
|
45
|
+
df: pd.DataFrame,
|
|
46
|
+
inplace: bool = False,
|
|
47
|
+
registers: list[Register] | None = None,
|
|
48
|
+
) -> pd.DataFrame | None:
|
|
44
49
|
"""Extend a DataFrame with the SMR2 columns."""
|
|
45
50
|
if not inplace:
|
|
46
51
|
result_df = df.copy()
|
|
47
52
|
else:
|
|
48
53
|
result_df = df
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
if registers is None:
|
|
56
|
+
registers = [Register.DELIVERY, Register.EXPORT]
|
|
57
|
+
|
|
58
|
+
if Register.DELIVERY in registers:
|
|
59
|
+
result_df[ELECTRICITY_DELIVERED_SMR2] = weigh_by_monthly_profile(
|
|
60
|
+
df, ELECTRICITY_DELIVERED, RLP
|
|
61
|
+
)
|
|
62
|
+
if Register.EXPORT in registers:
|
|
63
|
+
result_df[ELECTRICITY_EXPORTED_SMR2] = weigh_by_monthly_profile(
|
|
64
|
+
df, ELECTRICITY_EXPORTED, SPP
|
|
65
|
+
)
|
|
52
66
|
|
|
53
67
|
result_df.rename(
|
|
54
68
|
columns={
|
|
@@ -56,6 +70,7 @@ def extend_dataframe_with_smr2(df: pd.DataFrame, inplace: bool = False) -> pd.Da
|
|
|
56
70
|
ELECTRICITY_EXPORTED: ELECTRICITY_EXPORTED_SMR3,
|
|
57
71
|
},
|
|
58
72
|
inplace=True,
|
|
73
|
+
errors="ignore",
|
|
59
74
|
)
|
|
60
75
|
|
|
61
76
|
if not inplace:
|
|
@@ -63,26 +78,33 @@ def extend_dataframe_with_smr2(df: pd.DataFrame, inplace: bool = False) -> pd.Da
|
|
|
63
78
|
return None
|
|
64
79
|
|
|
65
80
|
|
|
66
|
-
def extend_dataframe_with_costs(
|
|
81
|
+
def extend_dataframe_with_costs(
|
|
82
|
+
df: pd.DataFrame, inplace: bool = False, registers: list[Register] | None = None
|
|
83
|
+
) -> pd.DataFrame | None:
|
|
67
84
|
"""Extend a DataFrame with the cost columns."""
|
|
68
85
|
if not inplace:
|
|
69
86
|
result_df = df.copy()
|
|
70
87
|
else:
|
|
71
88
|
result_df = df
|
|
72
89
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
)
|
|
76
|
-
result_df[COST_ELECTRICITY_EXPORTED_SMR2] = (
|
|
77
|
-
df[ELECTRICITY_EXPORTED_SMR2] * df[PRICE_ELECTRICITY_EXPORTED] * -1
|
|
78
|
-
)
|
|
90
|
+
if registers is None:
|
|
91
|
+
registers = [Register.DELIVERY, Register.EXPORT]
|
|
79
92
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
if Register.DELIVERY in registers:
|
|
94
|
+
result_df[COST_ELECTRICITY_DELIVERED_SMR2] = (
|
|
95
|
+
df[ELECTRICITY_DELIVERED_SMR2] * df[PRICE_ELECTRICITY_DELIVERED]
|
|
96
|
+
)
|
|
97
|
+
result_df[COST_ELECTRICITY_DELIVERED_SMR3] = (
|
|
98
|
+
df[ELECTRICITY_DELIVERED_SMR3] * df[PRICE_ELECTRICITY_DELIVERED]
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if Register.EXPORT in registers:
|
|
102
|
+
result_df[COST_ELECTRICITY_EXPORTED_SMR2] = (
|
|
103
|
+
df[ELECTRICITY_EXPORTED_SMR2] * df[PRICE_ELECTRICITY_EXPORTED] * -1
|
|
104
|
+
)
|
|
105
|
+
result_df[COST_ELECTRICITY_EXPORTED_SMR3] = (
|
|
106
|
+
df[ELECTRICITY_EXPORTED_SMR3] * df[PRICE_ELECTRICITY_EXPORTED] * -1
|
|
107
|
+
)
|
|
86
108
|
|
|
87
109
|
if not inplace:
|
|
88
110
|
return result_df
|
|
@@ -90,63 +112,70 @@ def extend_dataframe_with_costs(df: pd.DataFrame, inplace: bool = False) -> pd.D
|
|
|
90
112
|
|
|
91
113
|
|
|
92
114
|
def extend_dataframe_with_weighted_prices(
|
|
93
|
-
df: pd.DataFrame, inplace: bool = False
|
|
115
|
+
df: pd.DataFrame, inplace: bool = False, registers: list[Register] | None = None
|
|
94
116
|
) -> pd.DataFrame | None:
|
|
95
117
|
"""Extend a DataFrame with the weighted price columns."""
|
|
96
118
|
if not inplace:
|
|
97
119
|
df = df.copy()
|
|
98
120
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
df[RLP]
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
if registers is None:
|
|
122
|
+
registers = [Register.DELIVERY, Register.EXPORT]
|
|
123
|
+
|
|
124
|
+
if Register.DELIVERY in registers:
|
|
125
|
+
rlp_weighted_price_delivered = (df[PRICE_ELECTRICITY_DELIVERED] * df[RLP]).resample(
|
|
126
|
+
"MS"
|
|
127
|
+
).sum() / df[RLP].resample("MS").sum()
|
|
128
|
+
df[RLP_WEIGHTED_PRICE_DELIVERED] = rlp_weighted_price_delivered.reindex_like(
|
|
129
|
+
df[RLP], method="ffill"
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
if Register.EXPORT in registers:
|
|
133
|
+
spp_weighted_price_exported = (df[PRICE_ELECTRICITY_EXPORTED] * df[SPP]).resample(
|
|
134
|
+
"MS"
|
|
135
|
+
).sum() / df[SPP].resample("MS").sum()
|
|
136
|
+
df[SPP_WEIGHTED_PRICE_EXPORTED] = spp_weighted_price_exported.reindex_like(
|
|
137
|
+
df[SPP], method="ffill"
|
|
138
|
+
)
|
|
111
139
|
|
|
112
140
|
if not inplace:
|
|
113
141
|
return df
|
|
114
142
|
return None
|
|
115
143
|
|
|
116
144
|
|
|
117
|
-
def extend_dataframe_with_heatmap(
|
|
145
|
+
def extend_dataframe_with_heatmap(
|
|
146
|
+
df: pd.DataFrame, inplace: bool = False, registers: list[Register] | None = None
|
|
147
|
+
) -> pd.DataFrame | None:
|
|
118
148
|
"""Extend a DataFrame with the heatmap columns."""
|
|
119
149
|
if not inplace:
|
|
120
150
|
df = df.copy()
|
|
121
151
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
df[
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
df[HEATMAP_EXPORTED] = heatmap_score_exported
|
|
152
|
+
if registers is None:
|
|
153
|
+
registers = [Register.DELIVERY, Register.EXPORT]
|
|
154
|
+
|
|
155
|
+
if Register.DELIVERY in registers:
|
|
156
|
+
energy_delta_delivered = df[ELECTRICITY_DELIVERED_SMR2] - df[ELECTRICITY_DELIVERED_SMR3]
|
|
157
|
+
price_delta_delivered = df[RLP_WEIGHTED_PRICE_DELIVERED] - df[PRICE_ELECTRICITY_DELIVERED]
|
|
158
|
+
heatmap_score_delivered = energy_delta_delivered * price_delta_delivered
|
|
159
|
+
heatmap_score_delivered.fillna(0, inplace=True)
|
|
160
|
+
# Invert score so that positive values indicate a positive impact
|
|
161
|
+
heatmap_score_delivered = -heatmap_score_delivered
|
|
162
|
+
df[HEATMAP_DELIVERED] = heatmap_score_delivered
|
|
163
|
+
|
|
164
|
+
if Register.EXPORT in registers:
|
|
165
|
+
energy_delta_exported = df[ELECTRICITY_EXPORTED_SMR2] - df[ELECTRICITY_EXPORTED_SMR3]
|
|
166
|
+
price_delta_exported = df[SPP_WEIGHTED_PRICE_EXPORTED] - df[PRICE_ELECTRICITY_EXPORTED]
|
|
167
|
+
heatmap_score_exported = energy_delta_exported * price_delta_exported
|
|
168
|
+
heatmap_score_exported.fillna(0, inplace=True)
|
|
169
|
+
df[HEATMAP_EXPORTED] = heatmap_score_exported
|
|
170
|
+
|
|
171
|
+
if Register.DELIVERY in registers and Register.EXPORT in registers:
|
|
172
|
+
heatmap_score_delivered = cast(pd.Series, df[HEATMAP_DELIVERED])
|
|
173
|
+
heatmap_score_exported = cast(pd.Series, df[HEATMAP_EXPORTED])
|
|
174
|
+
heatmap_score_combined = heatmap_score_delivered + heatmap_score_exported
|
|
175
|
+
elif Register.DELIVERY in registers:
|
|
176
|
+
heatmap_score_combined = heatmap_score_delivered
|
|
177
|
+
else:
|
|
178
|
+
heatmap_score_combined = heatmap_score_exported
|
|
150
179
|
df[HEATMAP_TOTAL] = heatmap_score_combined
|
|
151
180
|
|
|
152
181
|
if not inplace:
|
|
@@ -194,56 +223,90 @@ def map_total_description(
|
|
|
194
223
|
|
|
195
224
|
|
|
196
225
|
def extend_dataframe_with_heatmap_description(
|
|
197
|
-
df: pd.DataFrame, inplace: bool = False
|
|
226
|
+
df: pd.DataFrame, inplace: bool = False, registers: list[Register] | None = None
|
|
198
227
|
) -> pd.DataFrame | None:
|
|
199
228
|
"""Extend a DataFrame with the heatmap description columns."""
|
|
200
229
|
if not inplace:
|
|
201
230
|
df = df.copy()
|
|
202
231
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
232
|
+
if registers is None:
|
|
233
|
+
registers = [Register.DELIVERY, Register.EXPORT]
|
|
234
|
+
|
|
235
|
+
if Register.DELIVERY in registers:
|
|
236
|
+
df[HEATMAP_DELIVERED_DESCRIPTION] = list(
|
|
237
|
+
map(
|
|
238
|
+
map_delivery_description,
|
|
239
|
+
df[PRICE_ELECTRICITY_DELIVERED],
|
|
240
|
+
df[RLP_WEIGHTED_PRICE_DELIVERED],
|
|
241
|
+
df[ELECTRICITY_DELIVERED_SMR3],
|
|
242
|
+
df[ELECTRICITY_DELIVERED_SMR2],
|
|
243
|
+
)
|
|
210
244
|
)
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
245
|
+
|
|
246
|
+
if Register.EXPORT in registers:
|
|
247
|
+
df[HEATMAP_EXPORTED_DESCRIPTION] = list(
|
|
248
|
+
map(
|
|
249
|
+
map_export_description,
|
|
250
|
+
df[PRICE_ELECTRICITY_EXPORTED],
|
|
251
|
+
df[SPP_WEIGHTED_PRICE_EXPORTED],
|
|
252
|
+
df[ELECTRICITY_EXPORTED_SMR3],
|
|
253
|
+
df[ELECTRICITY_EXPORTED_SMR2],
|
|
254
|
+
)
|
|
219
255
|
)
|
|
220
|
-
)
|
|
221
256
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
257
|
+
if Register.DELIVERY in registers and Register.EXPORT in registers:
|
|
258
|
+
df[HEATMAP_TOTAL_DESCRIPTION] = list(
|
|
259
|
+
map(
|
|
260
|
+
map_total_description,
|
|
261
|
+
df[HEATMAP_DELIVERED].abs(),
|
|
262
|
+
df[HEATMAP_EXPORTED].abs(),
|
|
263
|
+
df[HEATMAP_DELIVERED_DESCRIPTION],
|
|
264
|
+
df[HEATMAP_EXPORTED_DESCRIPTION],
|
|
265
|
+
)
|
|
229
266
|
)
|
|
230
|
-
|
|
267
|
+
elif Register.DELIVERY in registers:
|
|
268
|
+
df[HEATMAP_TOTAL_DESCRIPTION] = df[HEATMAP_DELIVERED_DESCRIPTION]
|
|
269
|
+
else:
|
|
270
|
+
df[HEATMAP_TOTAL_DESCRIPTION] = df[HEATMAP_EXPORTED_DESCRIPTION]
|
|
231
271
|
|
|
232
272
|
if not inplace:
|
|
233
273
|
return df
|
|
234
274
|
|
|
235
275
|
|
|
236
|
-
def calculate_dyntar_columns(
|
|
276
|
+
def calculate_dyntar_columns(
|
|
277
|
+
df: pd.DataFrame,
|
|
278
|
+
inplace: bool = False,
|
|
279
|
+
registers: list[Register] | None = None,
|
|
280
|
+
) -> pd.DataFrame | None:
|
|
237
281
|
"""Calculate all columns required for the dynamic tariff analysis."""
|
|
238
282
|
if not inplace:
|
|
239
283
|
df = df.copy()
|
|
240
284
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
285
|
+
if registers is None:
|
|
286
|
+
registers = [Register.DELIVERY, Register.EXPORT]
|
|
287
|
+
|
|
288
|
+
extend_dataframe_with_smr2(df, inplace=True, registers=registers)
|
|
289
|
+
extend_dataframe_with_costs(df, inplace=True, registers=registers)
|
|
290
|
+
extend_dataframe_with_weighted_prices(df, inplace=True, registers=registers)
|
|
291
|
+
extend_dataframe_with_heatmap(df, inplace=True, registers=registers)
|
|
292
|
+
extend_dataframe_with_heatmap_description(df, inplace=True, registers=registers)
|
|
246
293
|
|
|
247
294
|
if not inplace:
|
|
248
295
|
return df
|
|
249
296
|
return None
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def summarize_result(df: pd.DataFrame) -> pd.Series:
|
|
300
|
+
"""Summarize the dynamic tariff analysis result."""
|
|
301
|
+
summary = df.filter(like="cost").sum()
|
|
302
|
+
|
|
303
|
+
abs_smr2 = summary.filter(like="smr2").abs().sum()
|
|
304
|
+
|
|
305
|
+
summary["cost_electricity_total_smr2"] = summary.filter(like="smr2").sum()
|
|
306
|
+
summary["cost_electricity_total_smr3"] = summary.filter(like="smr3").sum()
|
|
307
|
+
|
|
308
|
+
summary["ratio"] = (
|
|
309
|
+
summary["cost_electricity_total_smr3"] - summary["cost_electricity_total_smr2"]
|
|
310
|
+
) / abs_smr2
|
|
311
|
+
|
|
312
|
+
return summary
|
openenergyid/dyntar/models.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Models for dynamic tariff analysis."""
|
|
2
2
|
|
|
3
3
|
from typing import Literal
|
|
4
|
-
from pydantic import Field, conlist, confloat
|
|
4
|
+
from pydantic import Field, conlist, confloat, BaseModel
|
|
5
5
|
|
|
6
6
|
from openenergyid.models import TimeDataFrame
|
|
7
|
+
from .const import Register
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
RequiredColumns = Literal[
|
|
@@ -43,18 +44,53 @@ class DynamicTariffAnalysisInput(TimeDataFrame):
|
|
|
43
44
|
"""Input frame for dynamic tariff analysis."""
|
|
44
45
|
|
|
45
46
|
columns: list[RequiredColumns] = Field(
|
|
46
|
-
min_length=
|
|
47
|
+
min_length=3,
|
|
47
48
|
max_length=len(RequiredColumns.__args__),
|
|
48
49
|
examples=[RequiredColumns.__args__],
|
|
49
50
|
)
|
|
50
51
|
data: list[
|
|
51
52
|
conlist(
|
|
52
53
|
item_type=confloat(allow_inf_nan=True),
|
|
53
|
-
min_length=
|
|
54
|
+
min_length=3,
|
|
54
55
|
max_length=len(RequiredColumns.__args__),
|
|
55
56
|
) # type: ignore
|
|
56
57
|
] = Field(examples=[[0.0] * len(RequiredColumns.__args__)])
|
|
57
58
|
|
|
59
|
+
@property
|
|
60
|
+
def registers(self) -> list[Register]:
|
|
61
|
+
"""Check which registers are present in the input data."""
|
|
62
|
+
registers = []
|
|
63
|
+
columns = list(self.columns)
|
|
64
|
+
# if "electricity_delivered", "price_electricity_delivered" and "RLP" are present
|
|
65
|
+
if all(
|
|
66
|
+
column in columns
|
|
67
|
+
for column in [
|
|
68
|
+
"electricity_delivered",
|
|
69
|
+
"price_electricity_delivered",
|
|
70
|
+
"RLP",
|
|
71
|
+
]
|
|
72
|
+
):
|
|
73
|
+
registers.append(Register.DELIVERY)
|
|
74
|
+
# if "electricity_exported", "price_electricity_exported" and "SPP" are present
|
|
75
|
+
if all(
|
|
76
|
+
column in columns
|
|
77
|
+
for column in ["electricity_exported", "price_electricity_exported", "SPP"]
|
|
78
|
+
):
|
|
79
|
+
registers.append(Register.EXPORT)
|
|
80
|
+
return registers
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class DynamicTariffAnalysisOutputSummary(BaseModel):
|
|
84
|
+
"""Summary of the dynamic tariff analysis output."""
|
|
85
|
+
|
|
86
|
+
cost_electricity_delivered_smr2: float | None = None
|
|
87
|
+
cost_electricity_delivered_smr3: float | None = None
|
|
88
|
+
cost_electricity_exported_smr2: float | None = None
|
|
89
|
+
cost_electricity_exported_smr3: float | None = None
|
|
90
|
+
cost_electricity_total_smr2: float | None = None
|
|
91
|
+
cost_electricity_total_smr3: float | None = None
|
|
92
|
+
ratio: float | None = None
|
|
93
|
+
|
|
58
94
|
|
|
59
95
|
class DynamicTariffAnalysisOutput(TimeDataFrame):
|
|
60
96
|
"""Output frame for dynamic tariff analysis."""
|
|
@@ -71,3 +107,4 @@ class DynamicTariffAnalysisOutput(TimeDataFrame):
|
|
|
71
107
|
max_length=len(OutputColumns.__args__),
|
|
72
108
|
) # type: ignore
|
|
73
109
|
] = Field(examples=[[0.0] * len(OutputColumns.__args__)])
|
|
110
|
+
summary: DynamicTariffAnalysisOutputSummary | None = None
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
openenergyid/__init__.py,sha256=
|
|
1
|
+
openenergyid/__init__.py,sha256=XVOYN9RAdcNJV1DaB0k2pD_zyPnk2aF6D5Tk4HFt4TU,193
|
|
2
2
|
openenergyid/const.py,sha256=D-xUnUyVuLmphClkePgxpFP6z0RDhw_6m7rX0BHBgrw,823
|
|
3
3
|
openenergyid/enums.py,sha256=jdw4CB1gkisx0re_SesrTEyh_T-UxYp6uieE7iYlHdA,357
|
|
4
4
|
openenergyid/models.py,sha256=CO6VdthCOQ9hNXqVSan_4IOBpiQvOix-ea3U6TR7Vgc,4343
|
|
5
5
|
openenergyid/capacity/__init__.py,sha256=1En96HlPV8kd1hOJO9RjRbXNInp5ZSkmjsjp0jfZlcQ,221
|
|
6
6
|
openenergyid/capacity/main.py,sha256=G6_EtXs1k_W-fxS33pFrCNKajuH81skdI32zp5RX9bI,3674
|
|
7
7
|
openenergyid/capacity/models.py,sha256=qi0IFyF_QOVleSzN8g0U2Fzqcc9ZDfNKt8oteFLY6Q0,832
|
|
8
|
-
openenergyid/dyntar/__init__.py,sha256=
|
|
9
|
-
openenergyid/dyntar/const.py,sha256=
|
|
10
|
-
openenergyid/dyntar/main.py,sha256=
|
|
11
|
-
openenergyid/dyntar/models.py,sha256=
|
|
8
|
+
openenergyid/dyntar/__init__.py,sha256=lUrk7ktS7yAqiafRHFoBE0RvFSI9mzDoO37diwLHuBg,495
|
|
9
|
+
openenergyid/dyntar/const.py,sha256=eJJV9VfpHlS9vWV47DWQkS3ICIXWhDmG4cU-ofbZJ3Q,1100
|
|
10
|
+
openenergyid/dyntar/main.py,sha256=i8EkayRicnMhG66cyrxGwUumFx3UGe7KDSImfFqmK04,10638
|
|
11
|
+
openenergyid/dyntar/models.py,sha256=lI4IjdAFallhsCqbw-EbBPbmk0g2MACgZnmMtTX7Pq0,3452
|
|
12
12
|
openenergyid/energysharing/__init__.py,sha256=A4JfrUYf-hBCzhUm0qL1GGlNMvpO8OwXJo80dJxFIvw,274
|
|
13
13
|
openenergyid/energysharing/const.py,sha256=X2zEPtTlsmZ66w6RmLS_h8NmdzObAEi5N6-0yrLN5V4,219
|
|
14
14
|
openenergyid/energysharing/data_formatting.py,sha256=Kwuhyn6ao_8Brdm9frlA6VzYOqimNYZsRbYwNXnE7yc,2583
|
|
@@ -19,7 +19,7 @@ openenergyid/mvlr/helpers.py,sha256=Uzbfrj3IpH26wA206KOl0hNucKE-n9guJNC_EROBVKA,
|
|
|
19
19
|
openenergyid/mvlr/main.py,sha256=cn7jZ98cHn2eh-0zG9q8Pad0Ft_FuI-u3a-eeHeF8jA,1304
|
|
20
20
|
openenergyid/mvlr/models.py,sha256=XvkViOLlYqi0ffgF3AD4Jvk3yL05gsoKdKgBAsGJ7L4,8581
|
|
21
21
|
openenergyid/mvlr/mvlr.py,sha256=F7WvWnZQtqUmK1vsguemsn9n8pDDk3tQ1weOlv-bo0c,18626
|
|
22
|
-
openenergyid-0.1.
|
|
23
|
-
openenergyid-0.1.
|
|
24
|
-
openenergyid-0.1.
|
|
25
|
-
openenergyid-0.1.
|
|
22
|
+
openenergyid-0.1.20.dist-info/METADATA,sha256=UJ-vbPX22VRhTyEtFnf0XzxrQa-U2LbdocBPcUFucuo,2477
|
|
23
|
+
openenergyid-0.1.20.dist-info/WHEEL,sha256=fl6v0VwpzfGBVsGtkAkhILUlJxROXbA3HvRL6Fe3140,105
|
|
24
|
+
openenergyid-0.1.20.dist-info/licenses/LICENSE,sha256=NgRdcNHwyXVCXZ8sJwoTp0DCowThJ9LWWl4xhbV1IUY,1074
|
|
25
|
+
openenergyid-0.1.20.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|