flixopt 2.2.0b0__tar.gz → 3.0.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.
Potentially problematic release.
This version of flixopt might be problematic. Click here for more details.
- flixopt-3.0.0/CHANGELOG.md +471 -0
- flixopt-3.0.0/MANIFEST.in +26 -0
- flixopt-3.0.0/PKG-INFO +209 -0
- flixopt-3.0.0/README.md +129 -0
- flixopt-3.0.0/flixopt/__init__.py +69 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/aggregation.py +60 -81
- flixopt-3.0.0/flixopt/calculation.py +668 -0
- flixopt-3.0.0/flixopt/components.py +1342 -0
- flixopt-3.0.0/flixopt/config.py +621 -0
- flixopt-3.0.0/flixopt/core.py +645 -0
- flixopt-3.0.0/flixopt/effects.py +853 -0
- flixopt-3.0.0/flixopt/elements.py +852 -0
- flixopt-3.0.0/flixopt/features.py +613 -0
- flixopt-3.0.0/flixopt/flow_system.py +980 -0
- flixopt-3.0.0/flixopt/interface.py +1326 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/io.py +50 -55
- flixopt-3.0.0/flixopt/linear_converters.py +623 -0
- flixopt-3.0.0/flixopt/modeling.py +759 -0
- flixopt-3.0.0/flixopt/network_app.py +789 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/plotting.py +273 -135
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/results.py +639 -383
- flixopt-3.0.0/flixopt/solvers.py +81 -0
- flixopt-3.0.0/flixopt/structure.py +1170 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/utils.py +34 -5
- flixopt-3.0.0/flixopt.egg-info/PKG-INFO +209 -0
- flixopt-3.0.0/flixopt.egg-info/SOURCES.txt +31 -0
- flixopt-3.0.0/flixopt.egg-info/requires.txt +62 -0
- flixopt-3.0.0/flixopt.egg-info/top_level.txt +1 -0
- flixopt-3.0.0/pyproject.toml +214 -0
- flixopt-2.2.0b0/.github/workflows/deploy-docs.yaml +0 -35
- flixopt-2.2.0b0/.github/workflows/python-app.yaml +0 -147
- flixopt-2.2.0b0/.gitignore +0 -10
- flixopt-2.2.0b0/PKG-INFO +0 -146
- flixopt-2.2.0b0/README.md +0 -86
- flixopt-2.2.0b0/docs/SUMMARY.md +0 -7
- flixopt-2.2.0b0/docs/contribute.md +0 -49
- flixopt-2.2.0b0/docs/examples/00-Minimal Example.md +0 -5
- flixopt-2.2.0b0/docs/examples/01-Basic Example.md +0 -5
- flixopt-2.2.0b0/docs/examples/02-Complex Example.md +0 -10
- flixopt-2.2.0b0/docs/examples/03-Calculation Modes.md +0 -5
- flixopt-2.2.0b0/docs/examples/index.md +0 -5
- flixopt-2.2.0b0/docs/faq/contribute.md +0 -49
- flixopt-2.2.0b0/docs/faq/index.md +0 -3
- flixopt-2.2.0b0/docs/getting-started.md +0 -42
- flixopt-2.2.0b0/docs/images/architecture_flixOpt-pre2.0.0.png +0 -0
- flixopt-2.2.0b0/docs/images/architecture_flixOpt.png +0 -0
- flixopt-2.2.0b0/docs/images/flixopt-icon.svg +0 -1
- flixopt-2.2.0b0/docs/index.md +0 -47
- flixopt-2.2.0b0/docs/javascripts/mathjax.js +0 -18
- flixopt-2.2.0b0/docs/release-notes/_template.txt +0 -32
- flixopt-2.2.0b0/docs/release-notes/index.md +0 -7
- flixopt-2.2.0b0/docs/release-notes/v2.0.0.md +0 -93
- flixopt-2.2.0b0/docs/release-notes/v2.0.1.md +0 -12
- flixopt-2.2.0b0/docs/release-notes/v2.1.0.md +0 -31
- flixopt-2.2.0b0/docs/release-notes/v2.2.0.md +0 -55
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Bus.md +0 -33
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Effects, Penalty & Objective.md +0 -132
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Flow.md +0 -26
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Investment.md +0 -115
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/LinearConverter.md +0 -21
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Piecewise.md +0 -49
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Storage.md +0 -44
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/index.md +0 -22
- flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/others.md +0 -3
- flixopt-2.2.0b0/docs/user-guide/index.md +0 -124
- flixopt-2.2.0b0/examples/00_Minmal/minimal_example.py +0 -71
- flixopt-2.2.0b0/examples/01_Simple/simple_example.py +0 -120
- flixopt-2.2.0b0/examples/02_Complex/complex_example.py +0 -200
- flixopt-2.2.0b0/examples/02_Complex/complex_example_results.py +0 -33
- flixopt-2.2.0b0/examples/03_Calculation_types/Zeitreihen2020.csv +0 -35137
- flixopt-2.2.0b0/examples/03_Calculation_types/example_calculation_types.py +0 -227
- flixopt-2.2.0b0/examples/04_Scenarios/scenario_example.py +0 -125
- flixopt-2.2.0b0/flixopt/__init__.py +0 -35
- flixopt-2.2.0b0/flixopt/calculation.py +0 -483
- flixopt-2.2.0b0/flixopt/components.py +0 -679
- flixopt-2.2.0b0/flixopt/config.py +0 -259
- flixopt-2.2.0b0/flixopt/config.yaml +0 -10
- flixopt-2.2.0b0/flixopt/core.py +0 -1485
- flixopt-2.2.0b0/flixopt/effects.py +0 -590
- flixopt-2.2.0b0/flixopt/elements.py +0 -605
- flixopt-2.2.0b0/flixopt/features.py +0 -1167
- flixopt-2.2.0b0/flixopt/flow_system.py +0 -492
- flixopt-2.2.0b0/flixopt/interface.py +0 -356
- flixopt-2.2.0b0/flixopt/linear_converters.py +0 -331
- flixopt-2.2.0b0/flixopt/solvers.py +0 -77
- flixopt-2.2.0b0/flixopt/structure.py +0 -684
- flixopt-2.2.0b0/flixopt.egg-info/PKG-INFO +0 -146
- flixopt-2.2.0b0/flixopt.egg-info/SOURCES.txt +0 -99
- flixopt-2.2.0b0/flixopt.egg-info/requires.txt +0 -37
- flixopt-2.2.0b0/flixopt.egg-info/top_level.txt +0 -6
- flixopt-2.2.0b0/mkdocs.yml +0 -136
- flixopt-2.2.0b0/pics/architecture_flixOpt-pre2.0.0.png +0 -0
- flixopt-2.2.0b0/pics/architecture_flixOpt.png +0 -0
- flixopt-2.2.0b0/pics/flixOpt_plotting.jpg +0 -0
- flixopt-2.2.0b0/pics/flixopt-icon.svg +0 -1
- flixopt-2.2.0b0/pics/pics.pptx +0 -0
- flixopt-2.2.0b0/pyproject.toml +0 -124
- flixopt-2.2.0b0/scripts/gen_ref_pages.py +0 -54
- flixopt-2.2.0b0/tests/__init__.py +0 -0
- flixopt-2.2.0b0/tests/conftest.py +0 -573
- flixopt-2.2.0b0/tests/ressources/Zeitreihen2020.csv +0 -35137
- flixopt-2.2.0b0/tests/run_all_tests.py +0 -10
- flixopt-2.2.0b0/tests/test_bus.py +0 -58
- flixopt-2.2.0b0/tests/test_component.py +0 -184
- flixopt-2.2.0b0/tests/test_cycle_detection.py +0 -226
- flixopt-2.2.0b0/tests/test_dataconverter.py +0 -756
- flixopt-2.2.0b0/tests/test_effect.py +0 -224
- flixopt-2.2.0b0/tests/test_effects_shares_summation.py +0 -236
- flixopt-2.2.0b0/tests/test_examples.py +0 -50
- flixopt-2.2.0b0/tests/test_flow.py +0 -1132
- flixopt-2.2.0b0/tests/test_functional.py +0 -787
- flixopt-2.2.0b0/tests/test_integration.py +0 -425
- flixopt-2.2.0b0/tests/test_io.py +0 -68
- flixopt-2.2.0b0/tests/test_linear_converter.py +0 -556
- flixopt-2.2.0b0/tests/test_on_hours_computation.py +0 -105
- flixopt-2.2.0b0/tests/test_plots.py +0 -136
- flixopt-2.2.0b0/tests/test_results_plots.py +0 -84
- flixopt-2.2.0b0/tests/test_scenarios.py +0 -332
- flixopt-2.2.0b0/tests/test_storage.py +0 -399
- flixopt-2.2.0b0/tests/test_timeseries.py +0 -746
- flixopt-2.2.0b0/tests/todos.txt +0 -5
- {flixopt-2.2.0b0 → flixopt-3.0.0}/LICENSE +0 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/commons.py +0 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt.egg-info/dependency_links.txt +0 -0
- {flixopt-2.2.0b0 → flixopt-3.0.0}/setup.cfg +0 -0
|
@@ -0,0 +1,471 @@
|
|
|
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
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- This text won't be rendered
|
|
10
|
+
Note: The CI will automatically append a "What's Changed" section to the changelog for github releases.
|
|
11
|
+
This contains all commits, PRs, and contributors.
|
|
12
|
+
Therefore, the Changelog should focus on the user-facing changes.
|
|
13
|
+
|
|
14
|
+
Please remove all irrelevant sections before releasing.
|
|
15
|
+
Please keep the format of the changelog consistent with the other releases, so the extraction for mkdocs works.
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## [Template] - ????-??-??
|
|
19
|
+
|
|
20
|
+
### ✨ Added
|
|
21
|
+
|
|
22
|
+
### 💥 Breaking Changes
|
|
23
|
+
|
|
24
|
+
### ♻️ Changed
|
|
25
|
+
|
|
26
|
+
### 🗑️ Deprecated
|
|
27
|
+
|
|
28
|
+
### 🔥 Removed
|
|
29
|
+
|
|
30
|
+
### 🐛 Fixed
|
|
31
|
+
|
|
32
|
+
### 🔒 Security
|
|
33
|
+
|
|
34
|
+
### 📦 Dependencies
|
|
35
|
+
|
|
36
|
+
### 📝 Docs
|
|
37
|
+
|
|
38
|
+
### 👷 Development
|
|
39
|
+
|
|
40
|
+
### 🚧 Known Issues
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## [Unreleased] - ????-??-??
|
|
46
|
+
|
|
47
|
+
### ✨ Added
|
|
48
|
+
|
|
49
|
+
### 💥 Breaking Changes
|
|
50
|
+
|
|
51
|
+
### ♻️ Changed
|
|
52
|
+
|
|
53
|
+
### 🗑️ Deprecated
|
|
54
|
+
|
|
55
|
+
### 🔥 Removed
|
|
56
|
+
|
|
57
|
+
### 🐛 Fixed
|
|
58
|
+
|
|
59
|
+
### 🔒 Security
|
|
60
|
+
|
|
61
|
+
### 📦 Dependencies
|
|
62
|
+
|
|
63
|
+
### 📝 Docs
|
|
64
|
+
|
|
65
|
+
### 👷 Development
|
|
66
|
+
|
|
67
|
+
### 🚧 Known Issues
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
Until here -->
|
|
71
|
+
|
|
72
|
+
## [3.0.0] - 2025-10-13
|
|
73
|
+
**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.
|
|
74
|
+
|
|
75
|
+
### ✨ Added
|
|
76
|
+
|
|
77
|
+
**New model dimensions:**
|
|
78
|
+
|
|
79
|
+
- **Period dimension**: Enables multi-period investment modeling with distinct decisions in each period for transformation pathway optimization
|
|
80
|
+
- **Scenario dimension**: Supports stochastic modeling with weighted scenarios for robust decision-making under uncertainty (demand, prices, weather)
|
|
81
|
+
- Control variable independence across scenarios via `scenario_independent_sizes` and `scenario_independent_flow_rates` parameters
|
|
82
|
+
- By default, investment sizes are shared across scenarios while flow rates vary per scenario
|
|
83
|
+
|
|
84
|
+
**Redesigned effect sharing system:**
|
|
85
|
+
|
|
86
|
+
Effects now use intuitive `share_from_*` syntax that clearly shows contribution sources:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
costs = fx.Effect('costs', '€', 'Total costs',
|
|
90
|
+
share_from_temporal={'CO2': 0.2}, # From temporal effects
|
|
91
|
+
share_from_periodic={'land': 100}) # From periodic effects
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This replaces `specific_share_to_other_effects_*` parameters and inverts the direction for clearer relationships.
|
|
95
|
+
|
|
96
|
+
**Enhanced I/O and data handling:**
|
|
97
|
+
|
|
98
|
+
- NetCDF/JSON serialization for all Interface objects and FlowSystem with round-trip support
|
|
99
|
+
- FlowSystem manipulation: `sel()`, `isel()`, `resample()`, `copy()`, `__eq__()` methods
|
|
100
|
+
- Direct access to FlowSystem from results without manual restoring (lazily loaded)
|
|
101
|
+
- New `FlowResults` class and precomputed DataArrays for sizes/flow_rates/flow_hours
|
|
102
|
+
- `effects_per_component` dataset for component impact evaluation, including all indirect effects through effect shares
|
|
103
|
+
|
|
104
|
+
**Other additions:**
|
|
105
|
+
|
|
106
|
+
- Balanced storage - charging and discharging sizes can be forced equal via `balanced` parameter
|
|
107
|
+
- New Storage parameters: `relative_minimum_final_charge_state` and `relative_maximum_final_charge_state` for final state control
|
|
108
|
+
- Improved filter methods in results
|
|
109
|
+
- Example for 2-stage investment decisions leveraging FlowSystem resampling
|
|
110
|
+
|
|
111
|
+
### 💥 Breaking Changes
|
|
112
|
+
|
|
113
|
+
- `relative_minimum_charge_state` and `relative_maximum_charge_state` don't have an extra timestep anymore.
|
|
114
|
+
- Renamed class `SystemModel` to `FlowSystemModel`
|
|
115
|
+
- Renamed class `Model` to `Submodel`
|
|
116
|
+
- Renamed `mode` parameter in plotting methods to `style`
|
|
117
|
+
- Renamed investment binary variable `is_invested` to `invested` in `InvestmentModel`
|
|
118
|
+
- `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()`.
|
|
119
|
+
|
|
120
|
+
### ♻️ Changed
|
|
121
|
+
|
|
122
|
+
- FlowSystems cannot be shared across multiple Calculations anymore. A copy of the FlowSystem is created instead, making every Calculation independent
|
|
123
|
+
- Each Subcalculation in `SegmentedCalculation` now has its own distinct `FlowSystem` object
|
|
124
|
+
- Type system overhaul - added clear separation between temporal and non-temporal data throughout codebase for better clarity
|
|
125
|
+
- Enhanced FlowSystem interface with improved `__repr__()` and `__str__()` methods
|
|
126
|
+
- Improved Model Structure - Views and organisation is now divided into:
|
|
127
|
+
- Model: The main Model (linopy.Model) that is used to create and store the variables and constraints for the FlowSystem.
|
|
128
|
+
- Submodel: The base class for all submodels. Each is a subset of the Model, for simpler access and clearer code.
|
|
129
|
+
- Made docstrings in `config.py` more compact and easier to read
|
|
130
|
+
- Improved format handling in configuration module
|
|
131
|
+
- Enhanced console output to support both `stdout` and `stderr` stream selection
|
|
132
|
+
- Added `show_logger_name` parameter to `CONFIG.Logging` for displaying logger names in messages
|
|
133
|
+
|
|
134
|
+
### 🗑️ Deprecated
|
|
135
|
+
|
|
136
|
+
- 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.
|
|
137
|
+
- 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.
|
|
138
|
+
- 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.
|
|
139
|
+
- 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.
|
|
140
|
+
- **InvestParameters** parameters renamed for improved clarity around investment and retirement effects:
|
|
141
|
+
- `fix_effects` → `effects_of_investment`
|
|
142
|
+
- `specific_effects` → `effects_of_investment_per_size`
|
|
143
|
+
- `divest_effects` → `effects_of_retirement`
|
|
144
|
+
- `piecewise_effects` → `piecewise_effects_of_investment`
|
|
145
|
+
- **Effect** parameters renamed:
|
|
146
|
+
- `minimum_investment` → `minimum_periodic`
|
|
147
|
+
- `maximum_investment` → `maximum_periodic`
|
|
148
|
+
- `minimum_operation` → `minimum_temporal`
|
|
149
|
+
- `maximum_operation` → `maximum_temporal`
|
|
150
|
+
- `minimum_operation_per_hour` → `minimum_per_hour`
|
|
151
|
+
- `maximum_operation_per_hour` → `maximum_per_hour`
|
|
152
|
+
- **Component** parameters renamed:
|
|
153
|
+
- `Source.source` → `Source.outputs`
|
|
154
|
+
- `Sink.sink` → `Sink.inputs`
|
|
155
|
+
- `SourceAndSink.source` → `SourceAndSink.outputs`
|
|
156
|
+
- `SourceAndSink.sink` → `SourceAndSink.inputs`
|
|
157
|
+
- `SourceAndSink.prevent_simultaneous_sink_and_source` → `SourceAndSink.prevent_simultaneous_flow_rates`
|
|
158
|
+
|
|
159
|
+
### 🔥 Removed
|
|
160
|
+
|
|
161
|
+
- **Effect share parameters**: The old `specific_share_to_other_effects_*` parameters were replaced WITHOUT DEPRECATION
|
|
162
|
+
- `specific_share_to_other_effects_operation` → `share_from_temporal` (with inverted direction)
|
|
163
|
+
- `specific_share_to_other_effects_invest` → `share_from_periodic` (with inverted direction)
|
|
164
|
+
|
|
165
|
+
### 🐛 Fixed
|
|
166
|
+
|
|
167
|
+
- Enhanced NetCDF I/O with proper attribute preservation for DataArrays
|
|
168
|
+
- Improved error handling and validation in serialization processes
|
|
169
|
+
- Better type consistency across all framework components
|
|
170
|
+
- Added extra validation in `config.py` to improve error handling
|
|
171
|
+
|
|
172
|
+
### 📝 Docs
|
|
173
|
+
|
|
174
|
+
- Reorganized mathematical notation docs: moved to lowercase `mathematical-notation/` with subdirectories (`elements/`, `features/`, `modeling-patterns/`)
|
|
175
|
+
- Added comprehensive documentation pages: `dimensions.md` (time/period/scenario), `effects-penalty-objective.md`, modeling patterns
|
|
176
|
+
- Enhanced all element pages with implementation details, cross-references, and "See Also" sections
|
|
177
|
+
- Rewrote README and landing page with clearer vision, roadmap, and universal applicability emphasis
|
|
178
|
+
- Removed deprecated `docs/SUMMARY.md`, updated `mkdocs.yml` for new structure
|
|
179
|
+
- Tightened docstrings in core modules with better cross-referencing
|
|
180
|
+
- Added recipes section to docs
|
|
181
|
+
|
|
182
|
+
### 🚧 Known Issues
|
|
183
|
+
|
|
184
|
+
- 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.
|
|
185
|
+
|
|
186
|
+
### 👷 Development
|
|
187
|
+
|
|
188
|
+
- **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%.
|
|
189
|
+
- FlowSystem data management simplified - removed `time_series_collection` pattern in favor of direct timestep properties
|
|
190
|
+
- 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.
|
|
191
|
+
- Added new module `.modeling` that contains modeling primitives and utilities
|
|
192
|
+
- Clearer separation between the main Model and "Submodels"
|
|
193
|
+
- Improved access to the Submodels and their variables, constraints and submodels
|
|
194
|
+
- Added `__repr__()` for Submodels to easily inspect its content
|
|
195
|
+
- Enhanced data handling methods
|
|
196
|
+
- `fit_to_model_coords()` method for data alignment
|
|
197
|
+
- `fit_effects_to_model_coords()` method for effect data processing
|
|
198
|
+
- `connect_and_transform()` method replacing several operations
|
|
199
|
+
- **Testing improvements**: Eliminated warnings during test execution
|
|
200
|
+
- Updated deprecated code patterns in tests and examples (e.g., `sink`/`source` → `inputs`/`outputs`, `'H'` → `'h'` frequency)
|
|
201
|
+
- Refactored plotting logic to handle test environments explicitly with non-interactive backends
|
|
202
|
+
- Added comprehensive warning filters in `__init__.py` and `pyproject.toml` to suppress third-party library warnings
|
|
203
|
+
- Improved test fixtures with proper figure cleanup to prevent memory leaks
|
|
204
|
+
- Enhanced backend detection and handling in `plotting.py` for both Matplotlib and Plotly
|
|
205
|
+
- Always run dependent tests in order
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## [2.2.0] - 2025-10-11
|
|
210
|
+
**Summary:** This release is a Configuration and Logging management release.
|
|
211
|
+
|
|
212
|
+
### ✨ Added
|
|
213
|
+
- Added `CONFIG.reset()` method to restore configuration to default values
|
|
214
|
+
- Added configurable log file rotation settings: `CONFIG.Logging.max_file_size` and `CONFIG.Logging.backup_count`
|
|
215
|
+
- Added configurable log format settings: `CONFIG.Logging.date_format` and `CONFIG.Logging.format`
|
|
216
|
+
- Added configurable console settings: `CONFIG.Logging.console_width` and `CONFIG.Logging.show_path`
|
|
217
|
+
- Added `CONFIG.Logging.Colors` nested class for customizable log level colors using ANSI escape codes (works with both standard and Rich handlers)
|
|
218
|
+
- All examples now enable console logging to demonstrate proper logging usage
|
|
219
|
+
- Console logging now outputs to `sys.stdout` instead of `sys.stderr` for better compatibility with output redirection
|
|
220
|
+
|
|
221
|
+
### 💥 Breaking Changes
|
|
222
|
+
- 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()`
|
|
223
|
+
- File logging is now disabled by default (`CONFIG.Logging.file = None`). Set a file path to enable file logging
|
|
224
|
+
|
|
225
|
+
### ♻️ Changed
|
|
226
|
+
- Logging and Configuration management changed
|
|
227
|
+
- Improved default logging colors: DEBUG is now gray (`\033[90m`) for de-emphasized messages, INFO uses terminal default color (`\033[0m`) for clean output
|
|
228
|
+
|
|
229
|
+
### 🗑️ Deprecated
|
|
230
|
+
- `change_logging_level()` function is now deprecated in favor of `CONFIG.Logging.level` and `CONFIG.apply()`. Will be removed in version 3.0.0.
|
|
231
|
+
|
|
232
|
+
### 🔥 Removed
|
|
233
|
+
- Removed unused `config.merge_configs` function from configuration module
|
|
234
|
+
|
|
235
|
+
### 👷 Development
|
|
236
|
+
- Greatly expanded test coverage for `config.py` module
|
|
237
|
+
- Added `@pytest.mark.xdist_group` to `TestConfigModule` tests to prevent global config interference
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## [2.1.11] - 2025-10-05
|
|
242
|
+
**Summary:** Important bugfix in `Storage` leading to wrong results due to incorrect discharge losses.
|
|
243
|
+
|
|
244
|
+
### ♻️ Changed
|
|
245
|
+
- Using `h5netcdf` instead of `netCDF4` for dataset I/O operations. This follows the update in `xarray==2025.09.01`
|
|
246
|
+
|
|
247
|
+
### 🐛 Fixed
|
|
248
|
+
- Fix `charge_state` Constraint in `Storage` leading to incorrect losses in discharge and therefore incorrect charge states and discharge values.
|
|
249
|
+
|
|
250
|
+
### 📦 Dependencies
|
|
251
|
+
- Updated `renovate.config` to treat CalVer packages (xarray and dask) with more care
|
|
252
|
+
- Updated packaging configuration
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## [2.1.10] - 2025-09-29
|
|
257
|
+
**Summary:** This release is a Documentation and Development release.
|
|
258
|
+
|
|
259
|
+
### 📝 Docs
|
|
260
|
+
- Improved CHANGELOG.md formatting by adding better categories and formating by Gitmoji.
|
|
261
|
+
- Added a script to extract the release notes from the CHANGELOG.md file for better organized documentation.
|
|
262
|
+
|
|
263
|
+
### 👷 Development
|
|
264
|
+
- Improved `renovate.config`
|
|
265
|
+
- Sped up CI by not running examples in every run and using `pytest-xdist`
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## [2.1.9] - 2025-09-23
|
|
270
|
+
|
|
271
|
+
**Summary:** Small bugfix release addressing network visualization error handling.
|
|
272
|
+
|
|
273
|
+
### 🐛 Fixed
|
|
274
|
+
- Fix error handling in network visualization if `networkx` is not installed
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## [2.1.8] - 2025-09-22
|
|
279
|
+
|
|
280
|
+
**Summary:** Code quality improvements, enhanced documentation, and bug fixes for heat pump components and visualization features.
|
|
281
|
+
|
|
282
|
+
### ✨ Added
|
|
283
|
+
- Extra Check for HeatPumpWithSource.COP to be strictly > 1 to avoid division by zero
|
|
284
|
+
- Apply deterministic color assignment by using sorted() in `plotting.py`
|
|
285
|
+
- Add missing args in docstrings in `plotting.py`, `solvers.py`, and `core.py`.
|
|
286
|
+
|
|
287
|
+
### ♻️ Changed
|
|
288
|
+
- Greatly improved docstrings and documentation of all public classes
|
|
289
|
+
- Make path handling to be gentle about missing .html suffix in `plotting.py`
|
|
290
|
+
- Default for `relative_losses` in `Transmission` is now 0 instead of None
|
|
291
|
+
- Setter of COP in `HeatPumpWithSource` now completely overwrites the conversion factors, which is safer.
|
|
292
|
+
- Fix some docstrings in plotting.py
|
|
293
|
+
- Change assertions to raise Exceptions in `plotting.py`
|
|
294
|
+
|
|
295
|
+
### 🐛 Fixed
|
|
296
|
+
|
|
297
|
+
**Core Components:**
|
|
298
|
+
- Fix COP getter and setter of `HeatPumpWithSource` returning and setting wrong conversion factors
|
|
299
|
+
- Fix custom compression levels in `io.save_dataset_to_netcdf`
|
|
300
|
+
- Fix `total_max` did not work when total min was not used
|
|
301
|
+
|
|
302
|
+
**Visualization:**
|
|
303
|
+
- Fix color scheme selection in network_app; color pickers now update when a scheme is selected
|
|
304
|
+
|
|
305
|
+
### 📝 Docs
|
|
306
|
+
- Fix broken links in docs
|
|
307
|
+
- Fix some docstrings in plotting.py
|
|
308
|
+
|
|
309
|
+
### 👷 Development
|
|
310
|
+
- Pin dev dependencies to specific versions
|
|
311
|
+
- Improve CI workflows to run faster and smarter
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## [2.1.7] - 2025-09-13
|
|
316
|
+
|
|
317
|
+
**Summary:** Maintenance release to improve Code Quality, CI and update the dependencies. There are no changes or new features.
|
|
318
|
+
|
|
319
|
+
### ✨ Added
|
|
320
|
+
- Added `__version__` to flixopt
|
|
321
|
+
|
|
322
|
+
### 👷 Development
|
|
323
|
+
- ruff format the whole Codebase
|
|
324
|
+
- Added renovate config
|
|
325
|
+
- Added pre-commit
|
|
326
|
+
- lint and format in CI
|
|
327
|
+
- improved CI
|
|
328
|
+
- Updated Dependencies
|
|
329
|
+
- Updated Issue Templates
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## [2.1.6] - 2025-09-02
|
|
334
|
+
|
|
335
|
+
**Summary:** Enhanced Sink/Source components with multi-flow support and new interactive network visualization.
|
|
336
|
+
|
|
337
|
+
### ✨ Added
|
|
338
|
+
- **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
|
|
339
|
+
- *Note: This is still experimental and might change in the future*
|
|
340
|
+
|
|
341
|
+
### ♻️ Changed
|
|
342
|
+
- **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
|
|
343
|
+
- **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
|
|
344
|
+
|
|
345
|
+
### 🗑️ Deprecated
|
|
346
|
+
- 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`
|
|
347
|
+
|
|
348
|
+
### 🐛 Fixed
|
|
349
|
+
- Fixed testing issue with new `linopy` version 0.5.6
|
|
350
|
+
|
|
351
|
+
### 👷 Development
|
|
352
|
+
- Added dependency "nbformat>=4.2.0" to dev dependencies to resolve issue with plotly CI
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## [2.1.5] - 2025-07-08
|
|
357
|
+
|
|
358
|
+
### 🐛 Fixed
|
|
359
|
+
- Fixed Docs deployment
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## [2.1.4] - 2025-07-08
|
|
364
|
+
|
|
365
|
+
### 🐛 Fixed
|
|
366
|
+
- Fixing release notes of 2.1.3, as well as documentation build.
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## [2.1.3] - 2025-07-08
|
|
371
|
+
|
|
372
|
+
### 🐛 Fixed
|
|
373
|
+
- Using `Effect.maximum_operation_per_hour` raised an error, needing an extra timestep. This has been fixed thanks to @PRse4.
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## [2.1.2] - 2025-06-14
|
|
378
|
+
|
|
379
|
+
### 🐛 Fixed
|
|
380
|
+
- 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.
|
|
381
|
+
- Old implementation: $c(\text{t}_{i}) \cdot (1-\dot{\text{c}}_\text{rel,loss}(\text{t}_i)) \cdot \Delta \text{t}_{i}$
|
|
382
|
+
- Correct implementation: $c(\text{t}_{i}) \cdot (1-\dot{\text{c}}_\text{rel,loss}(\text{t}_i)) ^{\Delta \text{t}_{i}}$
|
|
383
|
+
|
|
384
|
+
### 🚧 Known Issues
|
|
385
|
+
- 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.
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## [2.1.1] - 2025-05-08
|
|
390
|
+
|
|
391
|
+
### ♻️ Changed
|
|
392
|
+
- Improved docstring and tests
|
|
393
|
+
|
|
394
|
+
### 🐛 Fixed
|
|
395
|
+
- Fixed bug in the `_ElementResults.constraints` not returning the constraints but rather the variables
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
## [2.1.0] - 2025-04-11
|
|
399
|
+
|
|
400
|
+
### ✨ Added
|
|
401
|
+
- Python 3.13 support added
|
|
402
|
+
- Logger warning if relative_minimum is used without on_off_parameters in Flow
|
|
403
|
+
- Greatly improved internal testing infrastructure by leveraging linopy's testing framework
|
|
404
|
+
|
|
405
|
+
### 💥 Breaking Changes
|
|
406
|
+
- Restructured the modeling of the On/Off state of Flows or Components
|
|
407
|
+
- Variable renaming: `...|consecutive_on_hours` → `...|ConsecutiveOn|hours`
|
|
408
|
+
- Variable renaming: `...|consecutive_off_hours` → `...|ConsecutiveOff|hours`
|
|
409
|
+
- Constraint renaming: `...|consecutive_on_hours_con1` → `...|ConsecutiveOn|con1`
|
|
410
|
+
- Similar pattern for all consecutive on/off constraints
|
|
411
|
+
|
|
412
|
+
### 🐛 Fixed
|
|
413
|
+
- Fixed the lower bound of `flow_rate` when using optional investments without OnOffParameters
|
|
414
|
+
- Fixed bug that prevented divest effects from working
|
|
415
|
+
- Added lower bounds of 0 to two unbounded vars (numerical improvement)
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## [2.0.1] - 2025-04-10
|
|
420
|
+
|
|
421
|
+
### ✨ Added
|
|
422
|
+
- Logger warning if relative_minimum is used without on_off_parameters in Flow
|
|
423
|
+
|
|
424
|
+
### 🐛 Fixed
|
|
425
|
+
- Replace "|" with "__" in filenames when saving figures (Windows compatibility)
|
|
426
|
+
- Fixed bug that prevented the load factor from working without InvestmentParameters
|
|
427
|
+
|
|
428
|
+
## [2.0.0] - 2025-03-29
|
|
429
|
+
|
|
430
|
+
**Summary:** 💥 **MAJOR RELEASE** - Complete framework migration from Pyomo to Linopy with redesigned architecture.
|
|
431
|
+
|
|
432
|
+
### ✨ Added
|
|
433
|
+
|
|
434
|
+
**Model Capabilities:**
|
|
435
|
+
- Full model serialization support - save and restore unsolved Models
|
|
436
|
+
- Enhanced model documentation with YAML export containing human-readable mathematical formulations
|
|
437
|
+
- Extend flixopt models with native linopy language support
|
|
438
|
+
- Full Model Export/Import capabilities via linopy.Model
|
|
439
|
+
|
|
440
|
+
**Results & Data:**
|
|
441
|
+
- Unified solution exploration through `Calculation.results` attribute
|
|
442
|
+
- Compression support for result files
|
|
443
|
+
- `to_netcdf/from_netcdf` methods for FlowSystem and core components
|
|
444
|
+
- xarray integration for TimeSeries with improved datatypes support
|
|
445
|
+
|
|
446
|
+
### 💥 Breaking Changes
|
|
447
|
+
|
|
448
|
+
**Framework Migration:**
|
|
449
|
+
- **Optimization Engine**: Complete migration from Pyomo to Linopy optimization framework
|
|
450
|
+
- **Package Import**: Framework renamed from flixOpt to flixopt (`import flixopt as fx`)
|
|
451
|
+
- **Data Architecture**: Redesigned data handling to rely on xarray.Dataset throughout the package
|
|
452
|
+
- **Results System**: Results handling completely redesigned with new `CalculationResults` class
|
|
453
|
+
|
|
454
|
+
**Variable Structure:**
|
|
455
|
+
- Restructured the modeling of the On/Off state of Flows or Components
|
|
456
|
+
- Variable renaming: `...|consecutive_on_hours` → `...|ConsecutiveOn|hours`
|
|
457
|
+
- Variable renaming: `...|consecutive_off_hours` → `...|ConsecutiveOff|hours`
|
|
458
|
+
- Constraint renaming: `...|consecutive_on_hours_con1` → `...|ConsecutiveOn|con1`
|
|
459
|
+
- Similar pattern for all consecutive on/off constraints
|
|
460
|
+
|
|
461
|
+
### 🔥 Removed
|
|
462
|
+
- **Pyomo dependency** (replaced by linopy)
|
|
463
|
+
- **Period concepts** in time management (simplified to timesteps)
|
|
464
|
+
|
|
465
|
+
### 🐛 Fixed
|
|
466
|
+
- Improved infeasible model detection and reporting
|
|
467
|
+
- Enhanced time series management and serialization
|
|
468
|
+
- Reduced file size through improved compression
|
|
469
|
+
|
|
470
|
+
### 📝 Docs
|
|
471
|
+
- Google Style Docstrings throughout the codebase
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Include essential files from source distribution
|
|
2
|
+
include LICENSE
|
|
3
|
+
include README.md
|
|
4
|
+
include CHANGELOG.md
|
|
5
|
+
include pyproject.toml
|
|
6
|
+
|
|
7
|
+
# Include package source and data
|
|
8
|
+
recursive-include flixopt *.py
|
|
9
|
+
|
|
10
|
+
# Exclude everything else
|
|
11
|
+
global-exclude *.pyc *.pyo __pycache__
|
|
12
|
+
prune .github
|
|
13
|
+
prune docs
|
|
14
|
+
prune examples
|
|
15
|
+
prune tests
|
|
16
|
+
prune pics
|
|
17
|
+
prune scripts
|
|
18
|
+
prune build
|
|
19
|
+
prune dist
|
|
20
|
+
prune .venv
|
|
21
|
+
prune venv
|
|
22
|
+
exclude .gitignore
|
|
23
|
+
exclude .pre-commit-config.yaml
|
|
24
|
+
exclude renovate.json
|
|
25
|
+
exclude mkdocs.yml
|
|
26
|
+
exclude test_package.sh
|