flixopt 3.6.0__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.
- flixopt-3.6.0/CHANGELOG.md +841 -0
- flixopt-3.6.0/LICENSE +21 -0
- flixopt-3.6.0/MANIFEST.in +26 -0
- flixopt-3.6.0/PKG-INFO +276 -0
- flixopt-3.6.0/README.md +192 -0
- flixopt-3.6.0/flixopt/__init__.py +88 -0
- flixopt-3.6.0/flixopt/aggregation.py +389 -0
- flixopt-3.6.0/flixopt/calculation.py +733 -0
- flixopt-3.6.0/flixopt/color_processing.py +258 -0
- flixopt-3.6.0/flixopt/components.py +1359 -0
- flixopt-3.6.0/flixopt/config.py +535 -0
- flixopt-3.6.0/flixopt/core.py +611 -0
- flixopt-3.6.0/flixopt/effects.py +838 -0
- flixopt-3.6.0/flixopt/elements.py +922 -0
- flixopt-3.6.0/flixopt/features.py +611 -0
- flixopt-3.6.0/flixopt/flow_system.py +1347 -0
- flixopt-3.6.0/flixopt/interface.py +1341 -0
- flixopt-3.6.0/flixopt/io.py +1051 -0
- flixopt-3.6.0/flixopt/linear_converters.py +638 -0
- flixopt-3.6.0/flixopt/modeling.py +753 -0
- flixopt-3.6.0/flixopt/network_app.py +788 -0
- flixopt-3.6.0/flixopt/plotting.py +1638 -0
- flixopt-3.6.0/flixopt/results.py +2797 -0
- flixopt-3.6.0/flixopt/solvers.py +88 -0
- flixopt-3.6.0/flixopt/structure.py +1509 -0
- flixopt-3.6.0/flixopt/types.py +112 -0
- flixopt-3.6.0/flixopt.egg-info/PKG-INFO +276 -0
- flixopt-3.6.0/flixopt.egg-info/SOURCES.txt +31 -0
- flixopt-3.6.0/flixopt.egg-info/dependency_links.txt +1 -0
- flixopt-3.6.0/flixopt.egg-info/requires.txt +66 -0
- flixopt-3.6.0/flixopt.egg-info/top_level.txt +1 -0
- flixopt-3.6.0/pyproject.toml +216 -0
- flixopt-3.6.0/setup.cfg +4 -0
|
@@ -0,0 +1,841 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
|
+
Formatting is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) & [Gitmoji](https://gitmoji.dev).
|
|
5
|
+
For more details regarding the individual PRs and contributors, please refer to our [GitHub releases](https://github.com/flixOpt/flixopt/releases).
|
|
6
|
+
|
|
7
|
+
!!! tip
|
|
8
|
+
|
|
9
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!-- This text won't be rendered
|
|
14
|
+
Note: The CI will automatically append a "What's Changed" section to the changelog for github releases.
|
|
15
|
+
This contains all commits, PRs, and contributors.
|
|
16
|
+
Therefore, the Changelog should focus on the user-facing changes.
|
|
17
|
+
|
|
18
|
+
Please remove all irrelevant sections before releasing.
|
|
19
|
+
Please keep the format of the changelog consistent with the other releases, so the extraction for mkdocs works.
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## [Template] - ????-??-??
|
|
23
|
+
|
|
24
|
+
**Summary**:
|
|
25
|
+
|
|
26
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
27
|
+
|
|
28
|
+
### ✨ Added
|
|
29
|
+
|
|
30
|
+
### 💥 Breaking Changes
|
|
31
|
+
|
|
32
|
+
### ♻️ Changed
|
|
33
|
+
|
|
34
|
+
### 🗑️ Deprecated
|
|
35
|
+
|
|
36
|
+
### 🔥 Removed
|
|
37
|
+
|
|
38
|
+
### 🐛 Fixed
|
|
39
|
+
|
|
40
|
+
### 🔒 Security
|
|
41
|
+
|
|
42
|
+
### 📦 Dependencies
|
|
43
|
+
|
|
44
|
+
### 📝 Docs
|
|
45
|
+
|
|
46
|
+
### 👷 Development
|
|
47
|
+
|
|
48
|
+
### 🚧 Known Issues
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## [Unreleased] - ????-??-??
|
|
53
|
+
|
|
54
|
+
**Summary**: Type system overhaul and migration to loguru for logging
|
|
55
|
+
|
|
56
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
57
|
+
|
|
58
|
+
### ✨ Added
|
|
59
|
+
- **New type system** (`flixopt/types.py`):
|
|
60
|
+
- Introduced dimension-aware type aliases using suffix notation (`_TPS`, `_PS`, `_S`) to clearly indicate which dimensions data can have
|
|
61
|
+
- Added `Numeric_TPS`, `Numeric_PS`, `Numeric_S` for numeric data with Time/Period/Scenario dimensions
|
|
62
|
+
- Added `Bool_TPS`, `Bool_PS`, `Bool_S` for boolean data with dimension support
|
|
63
|
+
- Added `Effect_TPS`, `Effect_PS`, `Effect_S` for effect dictionaries with dimension support
|
|
64
|
+
- Added `Scalar` type for scalar-only numeric values
|
|
65
|
+
- Added `NumericOrBool` utility type for internal use
|
|
66
|
+
- Type system supports scalars, numpy arrays, pandas Series/DataFrames, and xarray DataArrays
|
|
67
|
+
- Lazy logging evaluation - expensive log operations only execute when log level is active
|
|
68
|
+
- `CONFIG.Logging.verbose_tracebacks` option for detailed debugging with variable values
|
|
69
|
+
|
|
70
|
+
### 💥 Breaking Changes
|
|
71
|
+
- **Logging framework**: Migrated to [loguru](https://loguru.readthedocs.io/)
|
|
72
|
+
- Removed `CONFIG.Logging` parameters: `rich`, `Colors`, `date_format`, `format`, `console_width`, `show_path`, `show_logger_name`
|
|
73
|
+
- For advanced formatting, use loguru's API directly after `CONFIG.apply()`
|
|
74
|
+
|
|
75
|
+
### ♻️ Changed
|
|
76
|
+
- **Code structure**: Removed `commons.py` module and moved all imports directly to `__init__.py` for cleaner code organization (no public API changes)
|
|
77
|
+
- **Type handling improvements**: Updated internal data handling to work seamlessly with the new type system
|
|
78
|
+
|
|
79
|
+
### 🗑️ Deprecated
|
|
80
|
+
|
|
81
|
+
### 🔥 Removed
|
|
82
|
+
|
|
83
|
+
### 🐛 Fixed
|
|
84
|
+
- Fixed `ShareAllocationModel` inconsistency where None/inf conversion happened in `__init__` instead of during modeling, which could cause issues with parameter validation
|
|
85
|
+
- Fixed numerous type hint inconsistencies across the codebase
|
|
86
|
+
|
|
87
|
+
### 🔒 Security
|
|
88
|
+
|
|
89
|
+
### 📦 Dependencies
|
|
90
|
+
- Updated `mkdocs-material` to v9.6.23
|
|
91
|
+
- Replaced `rich >= 13.0.0` with `loguru >= 0.7.0` for logging
|
|
92
|
+
|
|
93
|
+
### 📝 Docs
|
|
94
|
+
- Enhanced documentation in `flixopt/types.py` with comprehensive examples and dimension explanation table
|
|
95
|
+
- Clarified Effect type docstrings - Effect types are dicts, but single numeric values work through union types
|
|
96
|
+
- Added clarifying comments in `effects.py` explaining parameter handling and transformation
|
|
97
|
+
- Improved OnOffParameters attribute documentation
|
|
98
|
+
- Updated getting-started guide with loguru examples
|
|
99
|
+
- Updated `config.py` docstrings for loguru integration
|
|
100
|
+
|
|
101
|
+
### 👷 Development
|
|
102
|
+
- Added test for FlowSystem resampling
|
|
103
|
+
|
|
104
|
+
### 🚧 Known Issues
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
Until here -->
|
|
109
|
+
|
|
110
|
+
## [3.6.0] - 2025-11-15
|
|
111
|
+
|
|
112
|
+
**Summary**: Type system overhaul and migration to loguru for logging. If you are heavily using our logs, this might be breaking!
|
|
113
|
+
|
|
114
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
115
|
+
|
|
116
|
+
### ✨ Added
|
|
117
|
+
- **New type system** (`flixopt/types.py`):
|
|
118
|
+
- Introduced dimension-aware type aliases using suffix notation (`_TPS`, `_PS`, `_S`) to clearly indicate which dimensions data can have
|
|
119
|
+
- Added `Numeric_TPS`, `Numeric_PS`, `Numeric_S` for numeric data with Time/Period/Scenario dimensions
|
|
120
|
+
- Added `Bool_TPS`, `Bool_PS`, `Bool_S` for boolean data with dimension support
|
|
121
|
+
- Added `Effect_TPS`, `Effect_PS`, `Effect_S` for effect dictionaries with dimension support
|
|
122
|
+
- Added `Scalar` type for scalar-only numeric values
|
|
123
|
+
- Added `NumericOrBool` utility type for internal use
|
|
124
|
+
- Type system supports scalars, numpy arrays, pandas Series/DataFrames, and xarray DataArrays
|
|
125
|
+
- Lazy logging evaluation - expensive log operations only execute when log level is active
|
|
126
|
+
- `CONFIG.Logging.verbose_tracebacks` option for detailed debugging with variable values
|
|
127
|
+
|
|
128
|
+
### 💥 Breaking Changes
|
|
129
|
+
- **Logging framework**: Migrated to [loguru](https://loguru.readthedocs.io/)
|
|
130
|
+
- Removed `CONFIG.Logging` parameters: `rich`, `Colors`, `date_format`, `format`, `console_width`, `show_path`, `show_logger_name`
|
|
131
|
+
- For advanced formatting, use loguru's API directly after `CONFIG.apply()`
|
|
132
|
+
|
|
133
|
+
### ♻️ Changed
|
|
134
|
+
- **Code structure**: Removed `commons.py` module and moved all imports directly to `__init__.py` for cleaner code organization (no public API changes)
|
|
135
|
+
- **Type handling improvements**: Updated internal data handling to work seamlessly with the new type system
|
|
136
|
+
|
|
137
|
+
### 🐛 Fixed
|
|
138
|
+
- Fixed `ShareAllocationModel` inconsistency where None/inf conversion happened in `__init__` instead of during modeling, which could cause issues with parameter validation
|
|
139
|
+
- Fixed numerous type hint inconsistencies across the codebase
|
|
140
|
+
|
|
141
|
+
### 📦 Dependencies
|
|
142
|
+
- Updated `mkdocs-material` to v9.6.23
|
|
143
|
+
- Replaced `rich >= 13.0.0` with `loguru >= 0.7.0` for logging
|
|
144
|
+
|
|
145
|
+
### 📝 Docs
|
|
146
|
+
- Enhanced documentation in `flixopt/types.py` with comprehensive examples and dimension explanation table
|
|
147
|
+
- Clarified Effect type docstrings - Effect types are dicts, but single numeric values work through union types
|
|
148
|
+
- Added clarifying comments in `effects.py` explaining parameter handling and transformation
|
|
149
|
+
- Improved OnOffParameters attribute documentation
|
|
150
|
+
- Updated getting-started guide with loguru examples
|
|
151
|
+
- Updated `config.py` docstrings for loguru integration
|
|
152
|
+
|
|
153
|
+
### 👷 Development
|
|
154
|
+
- Added test for FlowSystem resampling
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## [3.5.0] - 2025-11-06
|
|
159
|
+
|
|
160
|
+
**Summary**: Improve representations and improve resampling
|
|
161
|
+
|
|
162
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
163
|
+
|
|
164
|
+
### ✨ Added
|
|
165
|
+
- Added options to resample and select subsets of flowsystems without converting to and from Dataset each time. Use the new methods `FlowSystem.__dataset_resample()`, `FlowSystem.__dataset_sel()` and `FlowSystem.__dataset_isel()`. All of them expect and return a dataset.
|
|
166
|
+
|
|
167
|
+
### 💥 Breaking Changes
|
|
168
|
+
|
|
169
|
+
### ♻️ Changed
|
|
170
|
+
- Truncate repr of FlowSystem and CalculationResults to only show the first 10 items of each category
|
|
171
|
+
- Greatly sped up the resampling of a FlowSystem again
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## [3.4.1] - 2025-11-04
|
|
176
|
+
|
|
177
|
+
**Summary**: Speed up resampling by 20-40 times.
|
|
178
|
+
|
|
179
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
180
|
+
|
|
181
|
+
### ♻️ Changed
|
|
182
|
+
- Greatly sped up the resampling of a FlowSystem (x20 - x40) by converting to dataarray internally
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## [3.4.0] - 2025-11-01
|
|
187
|
+
|
|
188
|
+
**Summary**: Enhanced solver configuration with new CONFIG.Solving section for centralized solver parameter management.
|
|
189
|
+
|
|
190
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
191
|
+
|
|
192
|
+
### ✨ Added
|
|
193
|
+
|
|
194
|
+
**Solver configuration:**
|
|
195
|
+
- **New `CONFIG.Solving` configuration section** for centralized solver parameter management:
|
|
196
|
+
- `mip_gap`: Default MIP gap tolerance for solver convergence (default: 0.01)
|
|
197
|
+
- `time_limit_seconds`: Default time limit in seconds for solver runs (default: 300)
|
|
198
|
+
- `log_to_console`: Whether solver should output to console (default: True)
|
|
199
|
+
- `log_main_results`: Whether to log main results after solving (default: True)
|
|
200
|
+
- Solvers (`HighsSolver`, `GurobiSolver`) now use `CONFIG.Solving` defaults for parameters, allowing global configuration
|
|
201
|
+
- Solver parameters can still be explicitly overridden when creating solver instances
|
|
202
|
+
- New `log_to_console` parameter in all Solver classes
|
|
203
|
+
|
|
204
|
+
### ♻️ Changed
|
|
205
|
+
- Individual solver output is now hidden in **SegmentedCalculation**. To return to the prior behaviour, set `show_individual_solves=True` in `do_modeling_and_solve()`.
|
|
206
|
+
|
|
207
|
+
### 🐛 Fixed
|
|
208
|
+
- New compacted list representation for periods and scenarios also in results log and console print
|
|
209
|
+
|
|
210
|
+
### 📝 Docs
|
|
211
|
+
- Unified contributing guides in docs and on github
|
|
212
|
+
|
|
213
|
+
### 👷 Development
|
|
214
|
+
- Added type hints for submodel in all Interface classes
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## [3.3.1] - 2025-10-30
|
|
219
|
+
|
|
220
|
+
**Summary**: Small Bugfix and improving readability
|
|
221
|
+
|
|
222
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
223
|
+
|
|
224
|
+
### ♻️ Changed
|
|
225
|
+
- Improved `summary.yaml` to use a compacted list representation for periods and scenarios
|
|
226
|
+
|
|
227
|
+
### 🐛 Fixed
|
|
228
|
+
- Using `switch_on_total_max` with periods or scenarios failed
|
|
229
|
+
|
|
230
|
+
### 📝 Docs
|
|
231
|
+
- Add more comprehensive `CONTRIBUTE.md`
|
|
232
|
+
- Improve logical structure in User Guide
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## [3.3.0] - 2025-10-30
|
|
237
|
+
|
|
238
|
+
**Summary**: Better access to Elements stored in the FLowSystem and better representations (repr)
|
|
239
|
+
|
|
240
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
241
|
+
|
|
242
|
+
### ♻️ Changed
|
|
243
|
+
**Improved repr methods:**
|
|
244
|
+
- **Results classes** (`ComponentResults`, `BusResults`, `FlowResults`, `EffectResults`) now show concise header with key metadata followed by xarray Dataset repr
|
|
245
|
+
- **Element classes** (`Component`, `Bus`, `Flow`, `Effect`, `Storage`) now show one-line summaries with essential information (connections, sizes, capacities, constraints)
|
|
246
|
+
|
|
247
|
+
**Container-based access:**
|
|
248
|
+
- **FlowSystem** now provides dict-like access patterns for all elements
|
|
249
|
+
- Use `flow_system['element_label']`, `flow_system.keys()`, `flow_system.values()`, and `flow_system.items()` for unified element access
|
|
250
|
+
- Specialized containers (`components`, `buses`, `effects`, `flows`) offer type-specific access with helpful error messages
|
|
251
|
+
|
|
252
|
+
### 🗑️ Deprecated
|
|
253
|
+
- **`FlowSystem.all_elements`** property is deprecated in favor of dict-like interface (`flow_system['label']`, `.keys()`, `.values()`, `.items()`). Will be removed in v4.0.0.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## [3.2.1] - 2025-10-29
|
|
258
|
+
|
|
259
|
+
**Summary**:
|
|
260
|
+
|
|
261
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
262
|
+
|
|
263
|
+
### 🐛 Fixed
|
|
264
|
+
- Fixed resampling of FlowSystem to reset `hours_of_last_timestep` and `hours_of_previous_timesteps` properly
|
|
265
|
+
|
|
266
|
+
### 👷 Development
|
|
267
|
+
- Improved issue templates
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## [3.2.0] - 2025-10-26
|
|
272
|
+
|
|
273
|
+
**Summary**: Enhanced plotting capabilities with consistent color management, custom plotting kwargs support, and centralized I/O handling.
|
|
274
|
+
|
|
275
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
276
|
+
|
|
277
|
+
### ✨ Added
|
|
278
|
+
|
|
279
|
+
**Color management:**
|
|
280
|
+
- **`setup_colors()` method** for `CalculationResults` and `SegmentedCalculationResults` to configure consistent colors across all plots
|
|
281
|
+
- Group components by colorscales: `results.setup_colors({'CHP': 'reds', 'Storage': 'blues', 'Greys': ['Grid', 'Demand']})`
|
|
282
|
+
- Automatically propagates to all segments in segmented calculations
|
|
283
|
+
- Colors persist across all plot calls unless explicitly overridden
|
|
284
|
+
- **Flexible color inputs**: Supports colorscale names (e.g., 'turbo', 'plasma'), color lists, or label-to-color dictionaries
|
|
285
|
+
- **Cross-backend compatibility**: Seamless color handling for both Plotly and Matplotlib
|
|
286
|
+
|
|
287
|
+
**Plotting customization:**
|
|
288
|
+
- **Plotting kwargs support**: Pass additional arguments to plotting backends via `px_kwargs`, `plot_kwargs`, and `backend_kwargs` parameters
|
|
289
|
+
- **New `CONFIG.Plotting` configuration section**:
|
|
290
|
+
- `default_show`: Control default plot visibility
|
|
291
|
+
- `default_engine`: Choose 'plotly' or 'matplotlib'
|
|
292
|
+
- `default_dpi`: Set resolution for saved plots
|
|
293
|
+
- `default_facet_cols`: Configure default faceting columns
|
|
294
|
+
- `default_sequential_colorscale`: Default for heatmaps (now 'turbo')
|
|
295
|
+
- `default_qualitative_colorscale`: Default for categorical plots (now 'plotly')
|
|
296
|
+
|
|
297
|
+
**I/O improvements:**
|
|
298
|
+
- Centralized JSON/YAML I/O with auto-format detection
|
|
299
|
+
- Enhanced NetCDF handling with consistent engine usage
|
|
300
|
+
- Better numeric formatting in YAML exports
|
|
301
|
+
|
|
302
|
+
### ♻️ Changed
|
|
303
|
+
- **Default colorscale**: Changed from 'viridis' to 'turbo' for better perceptual uniformity
|
|
304
|
+
- **Color terminology**: Standardized from "colormap" to "colorscale" throughout for Plotly consistency
|
|
305
|
+
- **Plotting internals**: Now use `xr.Dataset` as primary data type (DataFrames automatically converted)
|
|
306
|
+
- **NetCDF engine**: Switched back to netcdf4 engine following xarray updates and performance benchmarks
|
|
307
|
+
|
|
308
|
+
### 🔥 Removed
|
|
309
|
+
- Removed unused `plotting.pie_with_plotly()` method
|
|
310
|
+
|
|
311
|
+
### 🐛 Fixed
|
|
312
|
+
- Improved error messages when using `engine='matplotlib'` with multidimensional data
|
|
313
|
+
- Better dimension validation in `results.plot_heatmap()`
|
|
314
|
+
|
|
315
|
+
### 📝 Docs
|
|
316
|
+
- Enhanced examples demonstrating `setup_colors()` usage
|
|
317
|
+
- Updated terminology from "colormap" to "colorscale" in docstrings
|
|
318
|
+
|
|
319
|
+
### 👷 Development
|
|
320
|
+
- Fixed concurrency issue in CI
|
|
321
|
+
- Centralized color processing logic into dedicated module
|
|
322
|
+
- Refactored to function-based color handling for simpler API
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## [3.1.1] - 2025-10-20
|
|
327
|
+
**Summary**: Fixed a bug when acessing the `effects_per_component` dataset in results without periodic effects.
|
|
328
|
+
|
|
329
|
+
If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0) and [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/).
|
|
330
|
+
|
|
331
|
+
### 🐛 Fixed
|
|
332
|
+
- Fixed ValueError in effects_per_component when all periodic effects are scalars/NaN by explicitly creating mode-specific templates (via _create_template_for_mode) with correct dimensions
|
|
333
|
+
|
|
334
|
+
### 👷 Development
|
|
335
|
+
- Converted all remaining numpy style docstrings to google style
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## [3.1.0] - 2025-10-19
|
|
340
|
+
|
|
341
|
+
**Summary**: This release adds faceting and animation support for multidimensional plots and redesigns the documentation website. Plotting results across scenarios or periods is now significantly simpler (Plotly only).
|
|
342
|
+
|
|
343
|
+
If upgrading from v2.x, see the [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/) and [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0).
|
|
344
|
+
|
|
345
|
+
### ✨ Added
|
|
346
|
+
- **Faceting and animation for multidimensional plots**: All plotting methods now support `facet_by` and `animate_by` parameters to create subplot grids and animations from multidimensional data (scenarios, periods, etc.). *Plotly only.*
|
|
347
|
+
- **Flexible data selection with `select` parameter**: Select data using single values, lists, slices, or index arrays for precise control over what gets plotted
|
|
348
|
+
- **Heatmap fill control**: New `fill` parameter in heatmap methods controls how missing values are filled after reshaping (`'ffill'` or `'bfill'`)
|
|
349
|
+
- **Smart line styling for mixed variables**: Area plots now automatically style variables containing both positive and negative values with dashed lines, while stacking purely positive or negative variables
|
|
350
|
+
|
|
351
|
+
### ♻️ Changed
|
|
352
|
+
- **Breaking: Selection behavior**: Plotting methods no longer automatically select the first value for non-time dimensions. Use the `select` parameter for explicit selection of scenarios, periods, or other dimensions
|
|
353
|
+
- **Better error messages**: Enhanced error messages when using Matplotlib with multidimensional data, with clearer guidance on dimension requirements and suggestions to use Plotly
|
|
354
|
+
- **Improved examples**: Enhanced `scenario_example.py` with better demonstration of new features
|
|
355
|
+
- **Robust validation**: Improved dimension validation in `plot_heatmap()` with clearer error messages
|
|
356
|
+
|
|
357
|
+
### 🗑️ Deprecated
|
|
358
|
+
- **`indexer` parameter**: Use the new `select` parameter instead. The `indexer` parameter will be removed in v4.0.0
|
|
359
|
+
- **`heatmap_timeframes` and `heatmap_timesteps_per_frame` parameters**: Use the new `reshape_time=(timeframes, timesteps_per_frame)` parameter instead in heatmap plotting methods
|
|
360
|
+
- **`color_map` parameter**: Use the new `colors` parameter instead in heatmap plotting methods
|
|
361
|
+
|
|
362
|
+
### 🐛 Fixed
|
|
363
|
+
- Fixed cryptic errors when working with empty buses by adding proper validation
|
|
364
|
+
- Added early validation for non-existent periods when using linked periods with tuples
|
|
365
|
+
|
|
366
|
+
### 📝 Documentation
|
|
367
|
+
- **Redesigned documentation website** with custom css
|
|
368
|
+
|
|
369
|
+
### 👷 Development
|
|
370
|
+
- Renamed internal `_apply_indexer_to_data()` to `_apply_selection_to_data()` for consistency with new API naming
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## [3.0.3] - 2025-10-16
|
|
375
|
+
**Summary**: Hotfixing new plotting parameter `style`. Continue to use `mode`.
|
|
376
|
+
|
|
377
|
+
**Note**: If upgrading from v2.x, see the [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/) and [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0).
|
|
378
|
+
|
|
379
|
+
### 🐛 Fixed
|
|
380
|
+
- Reverted breaking change from v3.0.0: continue to use `mode parameter in plotting instead of new `style`
|
|
381
|
+
- Renamed new `mode` parameter in plotting methods to `unit_type`
|
|
382
|
+
|
|
383
|
+
### 📝 Docs
|
|
384
|
+
- Updated Migration Guide and added missing entries.
|
|
385
|
+
- Improved Changelog of v3.0.0
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## [3.0.2] - 2025-10-15
|
|
390
|
+
**Summary**: This is a follow-up release to **[v3.0.0](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0)**, improving the documentation.
|
|
391
|
+
|
|
392
|
+
**Note**: If upgrading from v2.x, see the [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/) and [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0).
|
|
393
|
+
|
|
394
|
+
### 📝 Docs
|
|
395
|
+
- Update the Readme
|
|
396
|
+
- Add a project roadmap to the docs
|
|
397
|
+
- Change Development status to "Production/Stable"
|
|
398
|
+
- Regroup parts in docs
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## [3.0.1] - 2025-10-14
|
|
403
|
+
**Summary**: This is a follow-up release to **[v3.0.0](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0)**, adding a Migration Guide and bugfixing the docs.
|
|
404
|
+
|
|
405
|
+
**Note**: If upgrading from v2.x, see the [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/) and [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0).
|
|
406
|
+
|
|
407
|
+
### 📝 Docs
|
|
408
|
+
- Fixed deployed docs
|
|
409
|
+
- Added Migration Guide for flixopt 3
|
|
410
|
+
|
|
411
|
+
### 👷 Development
|
|
412
|
+
- Added missing type hints
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## [3.0.0] - 2025-10-13
|
|
417
|
+
**Summary**: This release introduces new model dimensions (periods and scenarios) for multi-period investments and stochastic modeling, along with a redesigned effect sharing system and enhanced I/O capabilities.
|
|
418
|
+
|
|
419
|
+
**Note**: If upgrading from v2.x, see the [Migration Guide](https://flixopt.github.io/flixopt/latest/user-guide/migration-guide-v3/) and [v3.0.0 release notes](https://github.com/flixOpt/flixOpt/releases/tag/v3.0.0).
|
|
420
|
+
|
|
421
|
+
### ✨ Added
|
|
422
|
+
|
|
423
|
+
**New model dimensions:**
|
|
424
|
+
|
|
425
|
+
- **Period dimension**: Enables multi-period investment modeling with distinct decisions in each period for transformation pathway optimization
|
|
426
|
+
- **Scenario dimension**: Supports stochastic modeling with weighted scenarios for robust decision-making under uncertainty (demand, prices, weather)
|
|
427
|
+
- Control variable independence across scenarios via `scenario_independent_sizes` and `scenario_independent_flow_rates` parameters
|
|
428
|
+
- By default, investment sizes are shared across scenarios while flow rates vary per scenario
|
|
429
|
+
|
|
430
|
+
**Redesigned effect sharing system:**
|
|
431
|
+
|
|
432
|
+
Effects now use intuitive `share_from_*` syntax that clearly shows contribution sources:
|
|
433
|
+
|
|
434
|
+
```python
|
|
435
|
+
costs = fx.Effect('costs', '€', 'Total costs',
|
|
436
|
+
share_from_temporal={'CO2': 0.2}, # From temporal effects
|
|
437
|
+
share_from_periodic={'land': 100}) # From periodic effects
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
This replaces `specific_share_to_other_effects_*` parameters and inverts the direction for clearer relationships.
|
|
441
|
+
|
|
442
|
+
**Enhanced I/O and data handling:**
|
|
443
|
+
|
|
444
|
+
- NetCDF/JSON serialization for all Interface objects and FlowSystem with round-trip support
|
|
445
|
+
- FlowSystem manipulation: `sel()`, `isel()`, `resample()`, `copy()`, `__eq__()` methods
|
|
446
|
+
- Direct access to FlowSystem from results without manual restoring (lazily loaded)
|
|
447
|
+
- New `FlowResults` class and precomputed DataArrays for sizes/flow_rates/flow_hours
|
|
448
|
+
- `effects_per_component` dataset for component impact evaluation, including all indirect effects through effect shares
|
|
449
|
+
|
|
450
|
+
**Other additions:**
|
|
451
|
+
|
|
452
|
+
- Balanced storage - charging and discharging sizes can be forced equal via `balanced` parameter
|
|
453
|
+
- New Storage parameters: `relative_minimum_final_charge_state` and `relative_maximum_final_charge_state` for final state control
|
|
454
|
+
- Improved filter methods in results
|
|
455
|
+
- Example for 2-stage investment decisions leveraging FlowSystem resampling
|
|
456
|
+
|
|
457
|
+
### 💥 Breaking Changes
|
|
458
|
+
|
|
459
|
+
**API and Behavior Changes:**
|
|
460
|
+
|
|
461
|
+
- **Effect system redesigned** (no deprecation):
|
|
462
|
+
- **Terminology changes**: Effect domains renamed for clarity: `operation` → `temporal`, `invest`/`investment` → `periodic`
|
|
463
|
+
- **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)
|
|
464
|
+
- **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
|
|
465
|
+
- **Bus and Effect object assignment**: Direct assignment of Bus/Effect objects is no longer supported. Use labels (strings) instead:
|
|
466
|
+
- `Flow.bus` must receive a string label, not a Bus object
|
|
467
|
+
- Effect shares must use effect labels (strings) in dictionaries, not Effect objects
|
|
468
|
+
- **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()`
|
|
469
|
+
|
|
470
|
+
**Class and Method Renaming:**
|
|
471
|
+
|
|
472
|
+
- Renamed class `SystemModel` to `FlowSystemModel`
|
|
473
|
+
- Renamed class `Model` to `Submodel`
|
|
474
|
+
- Renamed `mode` parameter in plotting methods to `style`
|
|
475
|
+
- `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()`
|
|
476
|
+
|
|
477
|
+
**Variable Renaming in Results:**
|
|
478
|
+
|
|
479
|
+
- Investment binary variable: `is_invested` → `invested` in `InvestmentModel`
|
|
480
|
+
- Switch tracking variables in `OnOffModel`:
|
|
481
|
+
- `switch_on` → `switch|on`
|
|
482
|
+
- `switch_off` → `switch|off`
|
|
483
|
+
- `switch_on_nr` → `switch|count`
|
|
484
|
+
- Effect submodel variables (following terminology changes):
|
|
485
|
+
- `Effect(invest)|total` → `Effect(periodic)`
|
|
486
|
+
- `Effect(operation)|total` → `Effect(temporal)`
|
|
487
|
+
- `Effect(operation)|total_per_timestep` → `Effect(temporal)|per_timestep`
|
|
488
|
+
- `Effect|total` → `Effect`
|
|
489
|
+
|
|
490
|
+
**Data Structure Changes:**
|
|
491
|
+
|
|
492
|
+
- `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
|
|
493
|
+
|
|
494
|
+
### ♻️ Changed
|
|
495
|
+
|
|
496
|
+
- Type system overhaul - added clear separation between temporal and non-temporal data throughout codebase for better clarity
|
|
497
|
+
- Enhanced FlowSystem interface with improved `__repr__()` and `__str__()` methods
|
|
498
|
+
- Improved Model Structure - Views and organisation is now divided into:
|
|
499
|
+
- Model: The main Model (linopy.Model) that is used to create and store the variables and constraints for the FlowSystem.
|
|
500
|
+
- Submodel: The base class for all submodels. Each is a subset of the Model, for simpler access and clearer code.
|
|
501
|
+
- Made docstrings in `config.py` more compact and easier to read
|
|
502
|
+
- Improved format handling in configuration module
|
|
503
|
+
- Enhanced console output to support both `stdout` and `stderr` stream selection
|
|
504
|
+
- Added `show_logger_name` parameter to `CONFIG.Logging` for displaying logger names in messages
|
|
505
|
+
|
|
506
|
+
### 🗑️ Deprecated
|
|
507
|
+
|
|
508
|
+
- 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.
|
|
509
|
+
- 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.
|
|
510
|
+
- **InvestParameters** parameters renamed for improved clarity around investment and retirement effects:
|
|
511
|
+
- `fix_effects` → `effects_of_investment`
|
|
512
|
+
- `specific_effects` → `effects_of_investment_per_size`
|
|
513
|
+
- `divest_effects` → `effects_of_retirement`
|
|
514
|
+
- `piecewise_effects` → `piecewise_effects_of_investment`
|
|
515
|
+
- **Effect** parameters renamed:
|
|
516
|
+
- `minimum_investment` → `minimum_periodic`
|
|
517
|
+
- `maximum_investment` → `maximum_periodic`
|
|
518
|
+
- `minimum_operation` → `minimum_temporal`
|
|
519
|
+
- `maximum_operation` → `maximum_temporal`
|
|
520
|
+
- `minimum_operation_per_hour` → `minimum_per_hour`
|
|
521
|
+
- `maximum_operation_per_hour` → `maximum_per_hour`
|
|
522
|
+
- **Component** parameters renamed:
|
|
523
|
+
- `Source.source` → `Source.outputs`
|
|
524
|
+
- `Sink.sink` → `Sink.inputs`
|
|
525
|
+
- `SourceAndSink.source` → `SourceAndSink.outputs`
|
|
526
|
+
- `SourceAndSink.sink` → `SourceAndSink.inputs`
|
|
527
|
+
- `SourceAndSink.prevent_simultaneous_sink_and_source` → `SourceAndSink.prevent_simultaneous_flow_rates`
|
|
528
|
+
|
|
529
|
+
### 🔥 Removed
|
|
530
|
+
|
|
531
|
+
- **Effect share parameters**: The old `specific_share_to_other_effects_*` parameters were replaced WITHOUT DEPRECATION
|
|
532
|
+
- `specific_share_to_other_effects_operation` → `share_from_temporal` (with inverted direction)
|
|
533
|
+
- `specific_share_to_other_effects_invest` → `share_from_periodic` (with inverted direction)
|
|
534
|
+
|
|
535
|
+
### 🐛 Fixed
|
|
536
|
+
|
|
537
|
+
- Enhanced NetCDF I/O with proper attribute preservation for DataArrays
|
|
538
|
+
- Improved error handling and validation in serialization processes
|
|
539
|
+
- Better type consistency across all framework components
|
|
540
|
+
- Added extra validation in `config.py` to improve error handling
|
|
541
|
+
|
|
542
|
+
### 📝 Docs
|
|
543
|
+
|
|
544
|
+
- Reorganized mathematical notation docs: moved to lowercase `mathematical-notation/` with subdirectories (`elements/`, `features/`, `modeling-patterns/`)
|
|
545
|
+
- Added comprehensive documentation pages: `dimensions.md` (time/period/scenario), `effects-penalty-objective.md`, modeling patterns
|
|
546
|
+
- Enhanced all element pages with implementation details, cross-references, and "See Also" sections
|
|
547
|
+
- Rewrote README and landing page with clearer vision, roadmap, and universal applicability emphasis
|
|
548
|
+
- Removed deprecated `docs/SUMMARY.md`, updated `mkdocs.yml` for new structure
|
|
549
|
+
- Tightened docstrings in core modules with better cross-referencing
|
|
550
|
+
- Added recipes section to docs
|
|
551
|
+
|
|
552
|
+
### 🚧 Known Issues
|
|
553
|
+
|
|
554
|
+
- IO for single Interfaces/Elements to Datasets might not work properly if the Interface/Element is not part of a fully transformed and connected FlowSystem. This arises from Numeric Data not being stored as xr.DataArray by the user. To avoid this, always use the `to_dataset()` on Elements inside a FlowSystem that's connected and transformed.
|
|
555
|
+
|
|
556
|
+
### 👷 Development
|
|
557
|
+
|
|
558
|
+
- **Centralized deprecation pattern**: Added `_handle_deprecated_kwarg()` helper method to `Interface` base class that provides reusable deprecation handling with consistent warnings, conflict detection, and optional value transformation. Applied across 5 classes (InvestParameters, Source, Sink, SourceAndSink, Effect) reducing deprecation boilerplate by 72%.
|
|
559
|
+
- FlowSystem data management simplified - removed `time_series_collection` pattern in favor of direct timestep properties
|
|
560
|
+
- Change modeling hierarchy to allow for more flexibility in future development. This leads to minimal changes in the access and creation of Submodels and their variables.
|
|
561
|
+
- Added new module `.modeling` that contains modeling primitives and utilities
|
|
562
|
+
- Clearer separation between the main Model and "Submodels"
|
|
563
|
+
- Improved access to the Submodels and their variables, constraints and submodels
|
|
564
|
+
- Added `__repr__()` for Submodels to easily inspect its content
|
|
565
|
+
- Enhanced data handling methods
|
|
566
|
+
- `fit_to_model_coords()` method for data alignment
|
|
567
|
+
- `fit_effects_to_model_coords()` method for effect data processing
|
|
568
|
+
- `connect_and_transform()` method replacing several operations
|
|
569
|
+
- **Testing improvements**: Eliminated warnings during test execution
|
|
570
|
+
- Updated deprecated code patterns in tests and examples (e.g., `sink`/`source` → `inputs`/`outputs`, `'H'` → `'h'` frequency)
|
|
571
|
+
- Refactored plotting logic to handle test environments explicitly with non-interactive backends
|
|
572
|
+
- Added comprehensive warning filters in `__init__.py` and `pyproject.toml` to suppress third-party library warnings
|
|
573
|
+
- Improved test fixtures with proper figure cleanup to prevent memory leaks
|
|
574
|
+
- Enhanced backend detection and handling in `plotting.py` for both Matplotlib and Plotly
|
|
575
|
+
- Always run dependent tests in order
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
## [2.2.0] - 2025-10-11
|
|
580
|
+
**Summary:** This release is a Configuration and Logging management release.
|
|
581
|
+
|
|
582
|
+
### ✨ Added
|
|
583
|
+
- Added `CONFIG.reset()` method to restore configuration to default values
|
|
584
|
+
- Added configurable log file rotation settings: `CONFIG.Logging.max_file_size` and `CONFIG.Logging.backup_count`
|
|
585
|
+
- Added configurable log format settings: `CONFIG.Logging.date_format` and `CONFIG.Logging.format`
|
|
586
|
+
- Added configurable console settings: `CONFIG.Logging.console_width` and `CONFIG.Logging.show_path`
|
|
587
|
+
- Added `CONFIG.Logging.Colors` nested class for customizable log level colors using ANSI escape codes (works with both standard and Rich handlers)
|
|
588
|
+
- All examples now enable console logging to demonstrate proper logging usage
|
|
589
|
+
- Console logging now outputs to `sys.stdout` instead of `sys.stderr` for better compatibility with output redirection
|
|
590
|
+
|
|
591
|
+
### 💥 Breaking Changes
|
|
592
|
+
- Console logging is now disabled by default (`CONFIG.Logging.console = False`). Enable it explicitly in your scripts with `CONFIG.Logging.console = True` and `CONFIG.apply()`
|
|
593
|
+
- File logging is now disabled by default (`CONFIG.Logging.file = None`). Set a file path to enable file logging
|
|
594
|
+
|
|
595
|
+
### ♻️ Changed
|
|
596
|
+
- Logging and Configuration management changed
|
|
597
|
+
- Improved default logging colors: DEBUG is now gray (`\033[90m`) for de-emphasized messages, INFO uses terminal default color (`\033[0m`) for clean output
|
|
598
|
+
|
|
599
|
+
### 🗑️ Deprecated
|
|
600
|
+
- `change_logging_level()` function is now deprecated in favor of `CONFIG.Logging.level` and `CONFIG.apply()`. Will be removed in version 3.0.0.
|
|
601
|
+
|
|
602
|
+
### 🔥 Removed
|
|
603
|
+
- Removed unused `config.merge_configs` function from configuration module
|
|
604
|
+
|
|
605
|
+
### 👷 Development
|
|
606
|
+
- Greatly expanded test coverage for `config.py` module
|
|
607
|
+
- Added `@pytest.mark.xdist_group` to `TestConfigModule` tests to prevent global config interference
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## [2.1.11] - 2025-10-05
|
|
612
|
+
**Summary:** Important bugfix in `Storage` leading to wrong results due to incorrect discharge losses.
|
|
613
|
+
|
|
614
|
+
### ♻️ Changed
|
|
615
|
+
- Using `h5netcdf` instead of `netCDF4` for dataset I/O operations. This follows the update in `xarray==2025.09.01`
|
|
616
|
+
|
|
617
|
+
### 🐛 Fixed
|
|
618
|
+
- Fix `charge_state` Constraint in `Storage` leading to incorrect losses in discharge and therefore incorrect charge states and discharge values.
|
|
619
|
+
|
|
620
|
+
### 📦 Dependencies
|
|
621
|
+
- Updated `renovate.config` to treat CalVer packages (xarray and dask) with more care
|
|
622
|
+
- Updated packaging configuration
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
## [2.1.10] - 2025-09-29
|
|
627
|
+
**Summary:** This release is a Documentation and Development release.
|
|
628
|
+
|
|
629
|
+
### 📝 Docs
|
|
630
|
+
- Improved CHANGELOG.md formatting by adding better categories and formating by Gitmoji.
|
|
631
|
+
- Added a script to extract the release notes from the CHANGELOG.md file for better organized documentation.
|
|
632
|
+
|
|
633
|
+
### 👷 Development
|
|
634
|
+
- Improved `renovate.config`
|
|
635
|
+
- Sped up CI by not running examples in every run and using `pytest-xdist`
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
639
|
+
## [2.1.9] - 2025-09-23
|
|
640
|
+
|
|
641
|
+
**Summary:** Small bugfix release addressing network visualization error handling.
|
|
642
|
+
|
|
643
|
+
### 🐛 Fixed
|
|
644
|
+
- Fix error handling in network visualization if `networkx` is not installed
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
## [2.1.8] - 2025-09-22
|
|
649
|
+
|
|
650
|
+
**Summary:** Code quality improvements, enhanced documentation, and bug fixes for heat pump components and visualization features.
|
|
651
|
+
|
|
652
|
+
### ✨ Added
|
|
653
|
+
- Extra Check for HeatPumpWithSource.COP to be strictly > 1 to avoid division by zero
|
|
654
|
+
- Apply deterministic color assignment by using sorted() in `plotting.py`
|
|
655
|
+
- Add missing args in docstrings in `plotting.py`, `solvers.py`, and `core.py`.
|
|
656
|
+
|
|
657
|
+
### ♻️ Changed
|
|
658
|
+
- Greatly improved docstrings and documentation of all public classes
|
|
659
|
+
- Make path handling to be gentle about missing .html suffix in `plotting.py`
|
|
660
|
+
- Default for `relative_losses` in `Transmission` is now 0 instead of None
|
|
661
|
+
- Setter of COP in `HeatPumpWithSource` now completely overwrites the conversion factors, which is safer.
|
|
662
|
+
- Fix some docstrings in plotting.py
|
|
663
|
+
- Change assertions to raise Exceptions in `plotting.py`
|
|
664
|
+
|
|
665
|
+
### 🐛 Fixed
|
|
666
|
+
|
|
667
|
+
**Core Components:**
|
|
668
|
+
- Fix COP getter and setter of `HeatPumpWithSource` returning and setting wrong conversion factors
|
|
669
|
+
- Fix custom compression levels in `io.save_dataset_to_netcdf`
|
|
670
|
+
- Fix `total_max` did not work when total min was not used
|
|
671
|
+
|
|
672
|
+
**Visualization:**
|
|
673
|
+
- Fix color scheme selection in network_app; color pickers now update when a scheme is selected
|
|
674
|
+
|
|
675
|
+
### 📝 Docs
|
|
676
|
+
- Fix broken links in docs
|
|
677
|
+
- Fix some docstrings in plotting.py
|
|
678
|
+
|
|
679
|
+
### 👷 Development
|
|
680
|
+
- Pin dev dependencies to specific versions
|
|
681
|
+
- Improve CI workflows to run faster and smarter
|
|
682
|
+
|
|
683
|
+
---
|
|
684
|
+
|
|
685
|
+
## [2.1.7] - 2025-09-13
|
|
686
|
+
|
|
687
|
+
**Summary:** Maintenance release to improve Code Quality, CI and update the dependencies. There are no changes or new features.
|
|
688
|
+
|
|
689
|
+
### ✨ Added
|
|
690
|
+
- Added `__version__` to flixopt
|
|
691
|
+
|
|
692
|
+
### 👷 Development
|
|
693
|
+
- ruff format the whole Codebase
|
|
694
|
+
- Added renovate config
|
|
695
|
+
- Added pre-commit
|
|
696
|
+
- lint and format in CI
|
|
697
|
+
- improved CI
|
|
698
|
+
- Updated Dependencies
|
|
699
|
+
- Updated Issue Templates
|
|
700
|
+
|
|
701
|
+
---
|
|
702
|
+
|
|
703
|
+
## [2.1.6] - 2025-09-02
|
|
704
|
+
|
|
705
|
+
**Summary:** Enhanced Sink/Source components with multi-flow support and new interactive network visualization.
|
|
706
|
+
|
|
707
|
+
### ✨ Added
|
|
708
|
+
- **Network Visualization**: Added `FlowSystem.start_network_app()` and `FlowSystem.stop_network_app()` to easily visualize the network structure of a flow system in an interactive Dash web app
|
|
709
|
+
- *Note: This is still experimental and might change in the future*
|
|
710
|
+
|
|
711
|
+
### ♻️ Changed
|
|
712
|
+
- **Multi-Flow Support**: `Sink`, `Source`, and `SourceAndSink` now accept multiple `flows` as `inputs` and `outputs` instead of just one. This enables modeling more use cases with these classes
|
|
713
|
+
- **Flow Control**: Both `Sink` and `Source` now have a `prevent_simultaneous_flow_rates` argument to prevent simultaneous flow rates of more than one of their flows
|
|
714
|
+
|
|
715
|
+
### 🗑️ Deprecated
|
|
716
|
+
- For the classes `Sink`, `Source` and `SourceAndSink`: `.sink`, `.source` and `.prevent_simultaneous_sink_and_source` are deprecated in favor of the new arguments `inputs`, `outputs` and `prevent_simultaneous_flow_rates`
|
|
717
|
+
|
|
718
|
+
### 🐛 Fixed
|
|
719
|
+
- Fixed testing issue with new `linopy` version 0.5.6
|
|
720
|
+
|
|
721
|
+
### 👷 Development
|
|
722
|
+
- Added dependency "nbformat>=4.2.0" to dev dependencies to resolve issue with plotly CI
|
|
723
|
+
|
|
724
|
+
---
|
|
725
|
+
|
|
726
|
+
## [2.1.5] - 2025-07-08
|
|
727
|
+
|
|
728
|
+
### 🐛 Fixed
|
|
729
|
+
- Fixed Docs deployment
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
|
|
733
|
+
## [2.1.4] - 2025-07-08
|
|
734
|
+
|
|
735
|
+
### 🐛 Fixed
|
|
736
|
+
- Fixing release notes of 2.1.3, as well as documentation build.
|
|
737
|
+
|
|
738
|
+
---
|
|
739
|
+
|
|
740
|
+
## [2.1.3] - 2025-07-08
|
|
741
|
+
|
|
742
|
+
### 🐛 Fixed
|
|
743
|
+
- Using `Effect.maximum_operation_per_hour` raised an error, needing an extra timestep. This has been fixed thanks to @PRse4.
|
|
744
|
+
|
|
745
|
+
---
|
|
746
|
+
|
|
747
|
+
## [2.1.2] - 2025-06-14
|
|
748
|
+
|
|
749
|
+
### 🐛 Fixed
|
|
750
|
+
- Storage losses per hour were not calculated correctly, as mentioned by @brokenwings01. This might have led to issues when modeling large losses and long timesteps.
|
|
751
|
+
- Old implementation: $c(\text{t}_{i}) \cdot (1-\dot{\text{c}}_\text{rel,loss}(\text{t}_i)) \cdot \Delta \text{t}_{i}$
|
|
752
|
+
- Correct implementation: $c(\text{t}_{i}) \cdot (1-\dot{\text{c}}_\text{rel,loss}(\text{t}_i)) ^{\Delta \text{t}_{i}}$
|
|
753
|
+
|
|
754
|
+
### 🚧 Known Issues
|
|
755
|
+
- Just to mention: Plotly >= 6 may raise errors if "nbformat" is not installed. We pinned plotly to <6, but this may be fixed in the future.
|
|
756
|
+
|
|
757
|
+
---
|
|
758
|
+
|
|
759
|
+
## [2.1.1] - 2025-05-08
|
|
760
|
+
|
|
761
|
+
### ♻️ Changed
|
|
762
|
+
- Improved docstring and tests
|
|
763
|
+
|
|
764
|
+
### 🐛 Fixed
|
|
765
|
+
- Fixed bug in the `_ElementResults.constraints` not returning the constraints but rather the variables
|
|
766
|
+
|
|
767
|
+
---
|
|
768
|
+
## [2.1.0] - 2025-04-11
|
|
769
|
+
|
|
770
|
+
### ✨ Added
|
|
771
|
+
- Python 3.13 support added
|
|
772
|
+
- Logger warning if relative_minimum is used without on_off_parameters in Flow
|
|
773
|
+
- Greatly improved internal testing infrastructure by leveraging linopy's testing framework
|
|
774
|
+
|
|
775
|
+
### 💥 Breaking Changes
|
|
776
|
+
- Restructured the modeling of the On/Off state of Flows or Components
|
|
777
|
+
- Variable renaming: `...|consecutive_on_hours` → `...|ConsecutiveOn|hours`
|
|
778
|
+
- Variable renaming: `...|consecutive_off_hours` → `...|ConsecutiveOff|hours`
|
|
779
|
+
- Constraint renaming: `...|consecutive_on_hours_con1` → `...|ConsecutiveOn|con1`
|
|
780
|
+
- Similar pattern for all consecutive on/off constraints
|
|
781
|
+
|
|
782
|
+
### 🐛 Fixed
|
|
783
|
+
- Fixed the lower bound of `flow_rate` when using optional investments without OnOffParameters
|
|
784
|
+
- Fixed bug that prevented divest effects from working
|
|
785
|
+
- Added lower bounds of 0 to two unbounded vars (numerical improvement)
|
|
786
|
+
|
|
787
|
+
---
|
|
788
|
+
|
|
789
|
+
## [2.0.1] - 2025-04-10
|
|
790
|
+
|
|
791
|
+
### ✨ Added
|
|
792
|
+
- Logger warning if relative_minimum is used without on_off_parameters in Flow
|
|
793
|
+
|
|
794
|
+
### 🐛 Fixed
|
|
795
|
+
- Replace "|" with "__" in filenames when saving figures (Windows compatibility)
|
|
796
|
+
- Fixed bug that prevented the load factor from working without InvestmentParameters
|
|
797
|
+
|
|
798
|
+
## [2.0.0] - 2025-03-29
|
|
799
|
+
|
|
800
|
+
**Summary:** 💥 **MAJOR RELEASE** - Complete framework migration from Pyomo to Linopy with redesigned architecture.
|
|
801
|
+
|
|
802
|
+
### ✨ Added
|
|
803
|
+
|
|
804
|
+
**Model Capabilities:**
|
|
805
|
+
- Full model serialization support - save and restore unsolved Models
|
|
806
|
+
- Enhanced model documentation with YAML export containing human-readable mathematical formulations
|
|
807
|
+
- Extend flixopt models with native linopy language support
|
|
808
|
+
- Full Model Export/Import capabilities via linopy.Model
|
|
809
|
+
|
|
810
|
+
**Results & Data:**
|
|
811
|
+
- Unified solution exploration through `Calculation.results` attribute
|
|
812
|
+
- Compression support for result files
|
|
813
|
+
- `to_netcdf/from_netcdf` methods for FlowSystem and core components
|
|
814
|
+
- xarray integration for TimeSeries with improved datatypes support
|
|
815
|
+
|
|
816
|
+
### 💥 Breaking Changes
|
|
817
|
+
|
|
818
|
+
**Framework Migration:**
|
|
819
|
+
- **Optimization Engine**: Complete migration from Pyomo to Linopy optimization framework
|
|
820
|
+
- **Package Import**: Framework renamed from flixOpt to flixopt (`import flixopt as fx`)
|
|
821
|
+
- **Data Architecture**: Redesigned data handling to rely on xarray.Dataset throughout the package
|
|
822
|
+
- **Results System**: Results handling completely redesigned with new `CalculationResults` class
|
|
823
|
+
|
|
824
|
+
**Variable Structure:**
|
|
825
|
+
- Restructured the modeling of the On/Off state of Flows or Components
|
|
826
|
+
- Variable renaming: `...|consecutive_on_hours` → `...|ConsecutiveOn|hours`
|
|
827
|
+
- Variable renaming: `...|consecutive_off_hours` → `...|ConsecutiveOff|hours`
|
|
828
|
+
- Constraint renaming: `...|consecutive_on_hours_con1` → `...|ConsecutiveOn|con1`
|
|
829
|
+
- Similar pattern for all consecutive on/off constraints
|
|
830
|
+
|
|
831
|
+
### 🔥 Removed
|
|
832
|
+
- **Pyomo dependency** (replaced by linopy)
|
|
833
|
+
- **Period concepts** in time management (simplified to timesteps)
|
|
834
|
+
|
|
835
|
+
### 🐛 Fixed
|
|
836
|
+
- Improved infeasible model detection and reporting
|
|
837
|
+
- Enhanced time series management and serialization
|
|
838
|
+
- Reduced file size through improved compression
|
|
839
|
+
|
|
840
|
+
### 📝 Docs
|
|
841
|
+
- Google Style Docstrings throughout the codebase
|