flixopt 3.0.2__tar.gz → 3.0.3__tar.gz
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 flixopt might be problematic. Click here for more details.
- {flixopt-3.0.2 → flixopt-3.0.3}/CHANGELOG.md +44 -8
- {flixopt-3.0.2/flixopt.egg-info → flixopt-3.0.3}/PKG-INFO +2 -2
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/plotting.py +16 -16
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/results.py +17 -14
- {flixopt-3.0.2 → flixopt-3.0.3/flixopt.egg-info}/PKG-INFO +2 -2
- {flixopt-3.0.2 → flixopt-3.0.3}/pyproject.toml +1 -1
- {flixopt-3.0.2 → flixopt-3.0.3}/LICENSE +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/MANIFEST.in +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/README.md +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/__init__.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/aggregation.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/calculation.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/commons.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/components.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/config.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/core.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/effects.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/elements.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/features.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/flow_system.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/interface.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/io.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/linear_converters.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/modeling.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/network_app.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/solvers.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/structure.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt/utils.py +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt.egg-info/SOURCES.txt +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt.egg-info/dependency_links.txt +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt.egg-info/requires.txt +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/flixopt.egg-info/top_level.txt +0 -0
- {flixopt-3.0.2 → flixopt-3.0.3}/setup.cfg +0 -0
|
@@ -41,7 +41,6 @@ Please keep the format of the changelog consistent with the other releases, so t
|
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
44
|
-
|
|
45
44
|
## [Unreleased] - ????-??-??
|
|
46
45
|
|
|
47
46
|
### ✨ Added
|
|
@@ -69,6 +68,19 @@ Please keep the format of the changelog consistent with the other releases, so t
|
|
|
69
68
|
---
|
|
70
69
|
Until here -->
|
|
71
70
|
|
|
71
|
+
## [3.0.3] - 2025-10-16
|
|
72
|
+
**Summary**: Hotfixing new plotting parameter `style`. Continue to use `mode`.
|
|
73
|
+
|
|
74
|
+
### 🐛 Fixed
|
|
75
|
+
- Reverted breaking change from v3.0.0: continue to use `mode parameter in plotting instead of new `style`
|
|
76
|
+
- Renamed new `mode` parameter in plotting methods to `unit_type`
|
|
77
|
+
|
|
78
|
+
### 📝 Docs
|
|
79
|
+
- Updated Migration Guide and added missing entries.
|
|
80
|
+
- Improved Changelog of v3.0.0
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
72
84
|
## [3.0.2] - 2025-10-15
|
|
73
85
|
**Summary**: This is a follow-up release to **[v3.0.0](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0)**, improving the documentation.
|
|
74
86
|
|
|
@@ -139,17 +151,43 @@ This replaces `specific_share_to_other_effects_*` parameters and inverts the dir
|
|
|
139
151
|
|
|
140
152
|
### 💥 Breaking Changes
|
|
141
153
|
|
|
142
|
-
|
|
154
|
+
**API and Behavior Changes:**
|
|
155
|
+
|
|
156
|
+
- **Effect system redesigned** (no deprecation):
|
|
157
|
+
- **Terminology changes**: Effect domains renamed for clarity: `operation` → `temporal`, `invest`/`investment` → `periodic`
|
|
158
|
+
- **Sharing system**: The old `specific_share_to_other_effects_*` parameters were completely replaced with the new `share_from_temporal` and `share_from_periodic` syntax (see 🔥 Removed section)
|
|
159
|
+
- **FlowSystem independence**: FlowSystems cannot be shared across multiple Calculations anymore. A copy of the FlowSystem is created instead, making every Calculation independent. Each Subcalculation in `SegmentedCalculation` now has its own distinct `FlowSystem` object
|
|
160
|
+
- **Bus and Effect object assignment**: Direct assignment of Bus/Effect objects is no longer supported. Use labels (strings) instead:
|
|
161
|
+
- `Flow.bus` must receive a string label, not a Bus object
|
|
162
|
+
- Effect shares must use effect labels (strings) in dictionaries, not Effect objects
|
|
163
|
+
- **Logging defaults** (from v2.2.0): Console and file logging are now disabled by default. Enable explicitly with `CONFIG.Logging.console = True` and `CONFIG.apply()`
|
|
164
|
+
|
|
165
|
+
**Class and Method Renaming:**
|
|
166
|
+
|
|
143
167
|
- Renamed class `SystemModel` to `FlowSystemModel`
|
|
144
168
|
- Renamed class `Model` to `Submodel`
|
|
145
169
|
- Renamed `mode` parameter in plotting methods to `style`
|
|
146
|
-
-
|
|
147
|
-
|
|
170
|
+
- `Calculation.do_modeling()` now returns the `Calculation` object instead of its `linopy.Model`. Callers that previously accessed the linopy model directly should now use `calculation.do_modeling().model` instead of `calculation.do_modeling()`
|
|
171
|
+
|
|
172
|
+
**Variable Renaming in Results:**
|
|
173
|
+
|
|
174
|
+
- Investment binary variable: `is_invested` → `invested` in `InvestmentModel`
|
|
175
|
+
- Switch tracking variables in `OnOffModel`:
|
|
176
|
+
- `switch_on` → `switch|on`
|
|
177
|
+
- `switch_off` → `switch|off`
|
|
178
|
+
- `switch_on_nr` → `switch|count`
|
|
179
|
+
- Effect submodel variables (following terminology changes):
|
|
180
|
+
- `Effect(invest)|total` → `Effect(periodic)`
|
|
181
|
+
- `Effect(operation)|total` → `Effect(temporal)`
|
|
182
|
+
- `Effect(operation)|total_per_timestep` → `Effect(temporal)|per_timestep`
|
|
183
|
+
- `Effect|total` → `Effect`
|
|
184
|
+
|
|
185
|
+
**Data Structure Changes:**
|
|
186
|
+
|
|
187
|
+
- `relative_minimum_charge_state` and `relative_maximum_charge_state` don't have an extra timestep anymore. Use the new `relative_minimum_final_charge_state` and `relative_maximum_final_charge_state` parameters for final state control
|
|
148
188
|
|
|
149
189
|
### ♻️ Changed
|
|
150
190
|
|
|
151
|
-
- FlowSystems cannot be shared across multiple Calculations anymore. A copy of the FlowSystem is created instead, making every Calculation independent
|
|
152
|
-
- Each Subcalculation in `SegmentedCalculation` now has its own distinct `FlowSystem` object
|
|
153
191
|
- Type system overhaul - added clear separation between temporal and non-temporal data throughout codebase for better clarity
|
|
154
192
|
- Enhanced FlowSystem interface with improved `__repr__()` and `__str__()` methods
|
|
155
193
|
- Improved Model Structure - Views and organisation is now divided into:
|
|
@@ -164,8 +202,6 @@ This replaces `specific_share_to_other_effects_*` parameters and inverts the dir
|
|
|
164
202
|
|
|
165
203
|
- The `agg_group` and `agg_weight` parameters of `TimeSeriesData` are deprecated and will be removed in a future version. Use `aggregation_group` and `aggregation_weight` instead.
|
|
166
204
|
- The `active_timesteps` parameter of `Calculation` is deprecated and will be removed in a future version. Use the new `sel(time=...)` method on the FlowSystem instead.
|
|
167
|
-
- The assignment of Bus Objects to Flow.bus is deprecated and will be removed in a future version. Use the label of the Bus instead.
|
|
168
|
-
- The usage of Effects objects in Dicts to assign shares to Effects is deprecated and will be removed in a future version. Use the label of the Effect instead.
|
|
169
205
|
- **InvestParameters** parameters renamed for improved clarity around investment and retirement effects:
|
|
170
206
|
- `fix_effects` → `effects_of_investment`
|
|
171
207
|
- `specific_effects` → `effects_of_investment_per_size`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flixopt
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.3
|
|
4
4
|
Summary: Vector based energy and material flow optimization framework in Python.
|
|
5
5
|
Author-email: "Chair of Building Energy Systems and Heat Supply, TU Dresden" <peter.stange@tu-dresden.de>, Felix Bumann <felixbumann387@gmail.com>, Felix Panitz <baumbude@googlemail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
6
6
|
Maintainer-email: Felix Bumann <felixbumann387@gmail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
@@ -9,7 +9,7 @@ Project-URL: homepage, https://tu-dresden.de/ing/maschinenwesen/iet/gewv/forschu
|
|
|
9
9
|
Project-URL: repository, https://github.com/flixOpt/flixopt
|
|
10
10
|
Project-URL: documentation, https://flixopt.github.io/flixopt/
|
|
11
11
|
Keywords: optimization,energy systems,numerical analysis
|
|
12
|
-
Classifier: Development Status ::
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -327,7 +327,7 @@ class ColorProcessor:
|
|
|
327
327
|
|
|
328
328
|
def with_plotly(
|
|
329
329
|
data: pd.DataFrame,
|
|
330
|
-
|
|
330
|
+
mode: Literal['stacked_bar', 'line', 'area', 'grouped_bar'] = 'stacked_bar',
|
|
331
331
|
colors: ColorType = 'viridis',
|
|
332
332
|
title: str = '',
|
|
333
333
|
ylabel: str = '',
|
|
@@ -340,7 +340,7 @@ def with_plotly(
|
|
|
340
340
|
Args:
|
|
341
341
|
data: A DataFrame containing the data to plot, where the index represents time (e.g., hours),
|
|
342
342
|
and each column represents a separate data series.
|
|
343
|
-
|
|
343
|
+
mode: The plotting mode. Use 'stacked_bar' for stacked bar charts, 'line' for stepped lines,
|
|
344
344
|
or 'area' for stacked area charts.
|
|
345
345
|
colors: Color specification, can be:
|
|
346
346
|
- A string with a colorscale name (e.g., 'viridis', 'plasma')
|
|
@@ -354,8 +354,8 @@ def with_plotly(
|
|
|
354
354
|
Returns:
|
|
355
355
|
A Plotly figure object containing the generated plot.
|
|
356
356
|
"""
|
|
357
|
-
if
|
|
358
|
-
raise ValueError(f"'
|
|
357
|
+
if mode not in ('stacked_bar', 'line', 'area', 'grouped_bar'):
|
|
358
|
+
raise ValueError(f"'mode' must be one of {{'stacked_bar','line','area', 'grouped_bar'}}, got {mode!r}")
|
|
359
359
|
if data.empty:
|
|
360
360
|
return go.Figure()
|
|
361
361
|
|
|
@@ -363,7 +363,7 @@ def with_plotly(
|
|
|
363
363
|
|
|
364
364
|
fig = fig if fig is not None else go.Figure()
|
|
365
365
|
|
|
366
|
-
if
|
|
366
|
+
if mode == 'stacked_bar':
|
|
367
367
|
for i, column in enumerate(data.columns):
|
|
368
368
|
fig.add_trace(
|
|
369
369
|
go.Bar(
|
|
@@ -381,7 +381,7 @@ def with_plotly(
|
|
|
381
381
|
bargap=0, # No space between bars
|
|
382
382
|
bargroupgap=0, # No space between grouped bars
|
|
383
383
|
)
|
|
384
|
-
if
|
|
384
|
+
if mode == 'grouped_bar':
|
|
385
385
|
for i, column in enumerate(data.columns):
|
|
386
386
|
fig.add_trace(go.Bar(x=data.index, y=data[column], name=column, marker=dict(color=processed_colors[i])))
|
|
387
387
|
|
|
@@ -390,7 +390,7 @@ def with_plotly(
|
|
|
390
390
|
bargap=0.2, # No space between bars
|
|
391
391
|
bargroupgap=0, # space between grouped bars
|
|
392
392
|
)
|
|
393
|
-
elif
|
|
393
|
+
elif mode == 'line':
|
|
394
394
|
for i, column in enumerate(data.columns):
|
|
395
395
|
fig.add_trace(
|
|
396
396
|
go.Scatter(
|
|
@@ -401,7 +401,7 @@ def with_plotly(
|
|
|
401
401
|
line=dict(shape='hv', color=processed_colors[i]),
|
|
402
402
|
)
|
|
403
403
|
)
|
|
404
|
-
elif
|
|
404
|
+
elif mode == 'area':
|
|
405
405
|
data = data.copy()
|
|
406
406
|
data[(data > -1e-5) & (data < 1e-5)] = 0 # Preventing issues with plotting
|
|
407
407
|
# Split columns into positive, negative, and mixed categories
|
|
@@ -468,7 +468,7 @@ def with_plotly(
|
|
|
468
468
|
|
|
469
469
|
def with_matplotlib(
|
|
470
470
|
data: pd.DataFrame,
|
|
471
|
-
|
|
471
|
+
mode: Literal['stacked_bar', 'line'] = 'stacked_bar',
|
|
472
472
|
colors: ColorType = 'viridis',
|
|
473
473
|
title: str = '',
|
|
474
474
|
ylabel: str = '',
|
|
@@ -483,7 +483,7 @@ def with_matplotlib(
|
|
|
483
483
|
Args:
|
|
484
484
|
data: A DataFrame containing the data to plot. The index should represent time (e.g., hours),
|
|
485
485
|
and each column represents a separate data series.
|
|
486
|
-
|
|
486
|
+
mode: Plotting mode. Use 'stacked_bar' for stacked bar charts or 'line' for stepped lines.
|
|
487
487
|
colors: Color specification, can be:
|
|
488
488
|
- A string with a colormap name (e.g., 'viridis', 'plasma')
|
|
489
489
|
- A list of color strings (e.g., ['#ff0000', '#00ff00'])
|
|
@@ -499,19 +499,19 @@ def with_matplotlib(
|
|
|
499
499
|
A tuple containing the Matplotlib figure and axes objects used for the plot.
|
|
500
500
|
|
|
501
501
|
Notes:
|
|
502
|
-
- If `
|
|
502
|
+
- If `mode` is 'stacked_bar', bars are stacked for both positive and negative values.
|
|
503
503
|
Negative values are stacked separately without extra labels in the legend.
|
|
504
|
-
- If `
|
|
504
|
+
- If `mode` is 'line', stepped lines are drawn for each data series.
|
|
505
505
|
"""
|
|
506
|
-
if
|
|
507
|
-
raise ValueError(f"'
|
|
506
|
+
if mode not in ('stacked_bar', 'line'):
|
|
507
|
+
raise ValueError(f"'mode' must be one of {{'stacked_bar','line'}} for matplotlib, got {mode!r}")
|
|
508
508
|
|
|
509
509
|
if fig is None or ax is None:
|
|
510
510
|
fig, ax = plt.subplots(figsize=figsize)
|
|
511
511
|
|
|
512
512
|
processed_colors = ColorProcessor(engine='matplotlib').process_colors(colors, list(data.columns))
|
|
513
513
|
|
|
514
|
-
if
|
|
514
|
+
if mode == 'stacked_bar':
|
|
515
515
|
cumulative_positive = np.zeros(len(data))
|
|
516
516
|
cumulative_negative = np.zeros(len(data))
|
|
517
517
|
width = data.index.to_series().diff().dropna().min() # Minimum time difference
|
|
@@ -542,7 +542,7 @@ def with_matplotlib(
|
|
|
542
542
|
)
|
|
543
543
|
cumulative_negative += negative_values.values
|
|
544
544
|
|
|
545
|
-
elif
|
|
545
|
+
elif mode == 'line':
|
|
546
546
|
for i, column in enumerate(data.columns):
|
|
547
547
|
ax.step(data.index, data[column], where='post', color=processed_colors[i], label=column)
|
|
548
548
|
|
|
@@ -921,8 +921,8 @@ class _NodeResults(_ElementResults):
|
|
|
921
921
|
colors: plotting.ColorType = 'viridis',
|
|
922
922
|
engine: plotting.PlottingEngine = 'plotly',
|
|
923
923
|
indexer: dict[FlowSystemDimensions, Any] | None = None,
|
|
924
|
-
|
|
925
|
-
|
|
924
|
+
unit_type: Literal['flow_rate', 'flow_hours'] = 'flow_rate',
|
|
925
|
+
mode: Literal['area', 'stacked_bar', 'line'] = 'stacked_bar',
|
|
926
926
|
drop_suffix: bool = True,
|
|
927
927
|
) -> plotly.graph_objs.Figure | tuple[plt.Figure, plt.Axes]:
|
|
928
928
|
"""
|
|
@@ -935,23 +935,26 @@ class _NodeResults(_ElementResults):
|
|
|
935
935
|
indexer: Optional selection dict, e.g., {'scenario': 'base', 'period': 2024}.
|
|
936
936
|
If None, uses first value for each dimension (except time).
|
|
937
937
|
If empty dict {}, uses all values.
|
|
938
|
-
|
|
938
|
+
unit_type: The unit type to use for the dataset. Can be 'flow_rate' or 'flow_hours'.
|
|
939
939
|
- 'flow_rate': Returns the flow_rates of the Node.
|
|
940
940
|
- 'flow_hours': Returns the flow_hours of the Node. [flow_hours(t) = flow_rate(t) * dt(t)]. Renames suffixes to |flow_hours.
|
|
941
|
+
mode: The plotting mode. Use 'stacked_bar' for stacked bar charts, 'line' for stepped lines, or 'area' for stacked area charts.
|
|
941
942
|
drop_suffix: Whether to drop the suffix from the variable names.
|
|
942
943
|
"""
|
|
943
|
-
ds = self.node_balance(with_last_timestep=True,
|
|
944
|
+
ds = self.node_balance(with_last_timestep=True, unit_type=unit_type, drop_suffix=drop_suffix, indexer=indexer)
|
|
944
945
|
|
|
945
946
|
ds, suffix_parts = _apply_indexer_to_data(ds, indexer, drop=True)
|
|
946
947
|
suffix = '--' + '-'.join(suffix_parts) if suffix_parts else ''
|
|
947
948
|
|
|
948
|
-
title =
|
|
949
|
+
title = (
|
|
950
|
+
f'{self.label} (flow rates){suffix}' if unit_type == 'flow_rate' else f'{self.label} (flow hours){suffix}'
|
|
951
|
+
)
|
|
949
952
|
|
|
950
953
|
if engine == 'plotly':
|
|
951
954
|
figure_like = plotting.with_plotly(
|
|
952
955
|
ds.to_dataframe(),
|
|
953
956
|
colors=colors,
|
|
954
|
-
|
|
957
|
+
mode=mode,
|
|
955
958
|
title=title,
|
|
956
959
|
)
|
|
957
960
|
default_filetype = '.html'
|
|
@@ -959,7 +962,7 @@ class _NodeResults(_ElementResults):
|
|
|
959
962
|
figure_like = plotting.with_matplotlib(
|
|
960
963
|
ds.to_dataframe(),
|
|
961
964
|
colors=colors,
|
|
962
|
-
|
|
965
|
+
mode=mode,
|
|
963
966
|
title=title,
|
|
964
967
|
)
|
|
965
968
|
default_filetype = '.png'
|
|
@@ -1063,7 +1066,7 @@ class _NodeResults(_ElementResults):
|
|
|
1063
1066
|
negate_outputs: bool = False,
|
|
1064
1067
|
threshold: float | None = 1e-5,
|
|
1065
1068
|
with_last_timestep: bool = False,
|
|
1066
|
-
|
|
1069
|
+
unit_type: Literal['flow_rate', 'flow_hours'] = 'flow_rate',
|
|
1067
1070
|
drop_suffix: bool = False,
|
|
1068
1071
|
indexer: dict[FlowSystemDimensions, Any] | None = None,
|
|
1069
1072
|
) -> xr.Dataset:
|
|
@@ -1074,7 +1077,7 @@ class _NodeResults(_ElementResults):
|
|
|
1074
1077
|
negate_outputs: Whether to negate the output flow_rates of the Node.
|
|
1075
1078
|
threshold: The threshold for small values. Variables with all values below the threshold are dropped.
|
|
1076
1079
|
with_last_timestep: Whether to include the last timestep in the dataset.
|
|
1077
|
-
|
|
1080
|
+
unit_type: The unit type to use for the dataset. Can be 'flow_rate' or 'flow_hours'.
|
|
1078
1081
|
- 'flow_rate': Returns the flow_rates of the Node.
|
|
1079
1082
|
- 'flow_hours': Returns the flow_hours of the Node. [flow_hours(t) = flow_rate(t) * dt(t)]. Renames suffixes to |flow_hours.
|
|
1080
1083
|
drop_suffix: Whether to drop the suffix from the variable names.
|
|
@@ -1102,7 +1105,7 @@ class _NodeResults(_ElementResults):
|
|
|
1102
1105
|
|
|
1103
1106
|
ds, _ = _apply_indexer_to_data(ds, indexer, drop=True)
|
|
1104
1107
|
|
|
1105
|
-
if
|
|
1108
|
+
if unit_type == 'flow_hours':
|
|
1106
1109
|
ds = ds * self._calculation_results.hours_per_timestep
|
|
1107
1110
|
ds = ds.rename_vars({var: var.replace('flow_rate', 'flow_hours') for var in ds.data_vars})
|
|
1108
1111
|
|
|
@@ -1137,7 +1140,7 @@ class ComponentResults(_NodeResults):
|
|
|
1137
1140
|
show: bool = True,
|
|
1138
1141
|
colors: plotting.ColorType = 'viridis',
|
|
1139
1142
|
engine: plotting.PlottingEngine = 'plotly',
|
|
1140
|
-
|
|
1143
|
+
mode: Literal['area', 'stacked_bar', 'line'] = 'stacked_bar',
|
|
1141
1144
|
indexer: dict[FlowSystemDimensions, Any] | None = None,
|
|
1142
1145
|
) -> plotly.graph_objs.Figure:
|
|
1143
1146
|
"""Plot storage charge state over time, combined with the node balance.
|
|
@@ -1147,7 +1150,7 @@ class ComponentResults(_NodeResults):
|
|
|
1147
1150
|
show: Whether to show the plot or not.
|
|
1148
1151
|
colors: Color scheme. Also see plotly.
|
|
1149
1152
|
engine: Plotting engine to use. Only 'plotly' is implemented atm.
|
|
1150
|
-
|
|
1153
|
+
mode: The plotting mode. Use 'stacked_bar' for stacked bar charts, 'line' for stepped lines, or 'area' for stacked area charts.
|
|
1151
1154
|
indexer: Optional selection dict, e.g., {'scenario': 'base', 'period': 2024}.
|
|
1152
1155
|
If None, uses first value for each dimension.
|
|
1153
1156
|
If empty dict {}, uses all values.
|
|
@@ -1171,7 +1174,7 @@ class ComponentResults(_NodeResults):
|
|
|
1171
1174
|
fig = plotting.with_plotly(
|
|
1172
1175
|
ds.to_dataframe(),
|
|
1173
1176
|
colors=colors,
|
|
1174
|
-
|
|
1177
|
+
mode=mode,
|
|
1175
1178
|
title=title,
|
|
1176
1179
|
)
|
|
1177
1180
|
|
|
@@ -1187,7 +1190,7 @@ class ComponentResults(_NodeResults):
|
|
|
1187
1190
|
fig, ax = plotting.with_matplotlib(
|
|
1188
1191
|
ds.to_dataframe(),
|
|
1189
1192
|
colors=colors,
|
|
1190
|
-
|
|
1193
|
+
mode=mode,
|
|
1191
1194
|
title=title,
|
|
1192
1195
|
)
|
|
1193
1196
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flixopt
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.3
|
|
4
4
|
Summary: Vector based energy and material flow optimization framework in Python.
|
|
5
5
|
Author-email: "Chair of Building Energy Systems and Heat Supply, TU Dresden" <peter.stange@tu-dresden.de>, Felix Bumann <felixbumann387@gmail.com>, Felix Panitz <baumbude@googlemail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
6
6
|
Maintainer-email: Felix Bumann <felixbumann387@gmail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
@@ -9,7 +9,7 @@ Project-URL: homepage, https://tu-dresden.de/ing/maschinenwesen/iet/gewv/forschu
|
|
|
9
9
|
Project-URL: repository, https://github.com/flixOpt/flixopt
|
|
10
10
|
Project-URL: documentation, https://flixopt.github.io/flixopt/
|
|
11
11
|
Keywords: optimization,energy systems,numerical analysis
|
|
12
|
-
Classifier: Development Status ::
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -21,7 +21,7 @@ maintainers = [
|
|
|
21
21
|
]
|
|
22
22
|
keywords = ["optimization", "energy systems", "numerical analysis"]
|
|
23
23
|
classifiers = [
|
|
24
|
-
"Development Status ::
|
|
24
|
+
"Development Status :: 4 - Beta",
|
|
25
25
|
"Programming Language :: Python :: 3.10",
|
|
26
26
|
"Programming Language :: Python :: 3.11",
|
|
27
27
|
"Programming Language :: Python :: 3.12",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|