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.

Files changed (125) hide show
  1. flixopt-3.0.0/CHANGELOG.md +471 -0
  2. flixopt-3.0.0/MANIFEST.in +26 -0
  3. flixopt-3.0.0/PKG-INFO +209 -0
  4. flixopt-3.0.0/README.md +129 -0
  5. flixopt-3.0.0/flixopt/__init__.py +69 -0
  6. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/aggregation.py +60 -81
  7. flixopt-3.0.0/flixopt/calculation.py +668 -0
  8. flixopt-3.0.0/flixopt/components.py +1342 -0
  9. flixopt-3.0.0/flixopt/config.py +621 -0
  10. flixopt-3.0.0/flixopt/core.py +645 -0
  11. flixopt-3.0.0/flixopt/effects.py +853 -0
  12. flixopt-3.0.0/flixopt/elements.py +852 -0
  13. flixopt-3.0.0/flixopt/features.py +613 -0
  14. flixopt-3.0.0/flixopt/flow_system.py +980 -0
  15. flixopt-3.0.0/flixopt/interface.py +1326 -0
  16. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/io.py +50 -55
  17. flixopt-3.0.0/flixopt/linear_converters.py +623 -0
  18. flixopt-3.0.0/flixopt/modeling.py +759 -0
  19. flixopt-3.0.0/flixopt/network_app.py +789 -0
  20. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/plotting.py +273 -135
  21. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/results.py +639 -383
  22. flixopt-3.0.0/flixopt/solvers.py +81 -0
  23. flixopt-3.0.0/flixopt/structure.py +1170 -0
  24. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/utils.py +34 -5
  25. flixopt-3.0.0/flixopt.egg-info/PKG-INFO +209 -0
  26. flixopt-3.0.0/flixopt.egg-info/SOURCES.txt +31 -0
  27. flixopt-3.0.0/flixopt.egg-info/requires.txt +62 -0
  28. flixopt-3.0.0/flixopt.egg-info/top_level.txt +1 -0
  29. flixopt-3.0.0/pyproject.toml +214 -0
  30. flixopt-2.2.0b0/.github/workflows/deploy-docs.yaml +0 -35
  31. flixopt-2.2.0b0/.github/workflows/python-app.yaml +0 -147
  32. flixopt-2.2.0b0/.gitignore +0 -10
  33. flixopt-2.2.0b0/PKG-INFO +0 -146
  34. flixopt-2.2.0b0/README.md +0 -86
  35. flixopt-2.2.0b0/docs/SUMMARY.md +0 -7
  36. flixopt-2.2.0b0/docs/contribute.md +0 -49
  37. flixopt-2.2.0b0/docs/examples/00-Minimal Example.md +0 -5
  38. flixopt-2.2.0b0/docs/examples/01-Basic Example.md +0 -5
  39. flixopt-2.2.0b0/docs/examples/02-Complex Example.md +0 -10
  40. flixopt-2.2.0b0/docs/examples/03-Calculation Modes.md +0 -5
  41. flixopt-2.2.0b0/docs/examples/index.md +0 -5
  42. flixopt-2.2.0b0/docs/faq/contribute.md +0 -49
  43. flixopt-2.2.0b0/docs/faq/index.md +0 -3
  44. flixopt-2.2.0b0/docs/getting-started.md +0 -42
  45. flixopt-2.2.0b0/docs/images/architecture_flixOpt-pre2.0.0.png +0 -0
  46. flixopt-2.2.0b0/docs/images/architecture_flixOpt.png +0 -0
  47. flixopt-2.2.0b0/docs/images/flixopt-icon.svg +0 -1
  48. flixopt-2.2.0b0/docs/index.md +0 -47
  49. flixopt-2.2.0b0/docs/javascripts/mathjax.js +0 -18
  50. flixopt-2.2.0b0/docs/release-notes/_template.txt +0 -32
  51. flixopt-2.2.0b0/docs/release-notes/index.md +0 -7
  52. flixopt-2.2.0b0/docs/release-notes/v2.0.0.md +0 -93
  53. flixopt-2.2.0b0/docs/release-notes/v2.0.1.md +0 -12
  54. flixopt-2.2.0b0/docs/release-notes/v2.1.0.md +0 -31
  55. flixopt-2.2.0b0/docs/release-notes/v2.2.0.md +0 -55
  56. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Bus.md +0 -33
  57. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Effects, Penalty & Objective.md +0 -132
  58. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Flow.md +0 -26
  59. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Investment.md +0 -115
  60. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/LinearConverter.md +0 -21
  61. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Piecewise.md +0 -49
  62. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/Storage.md +0 -44
  63. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/index.md +0 -22
  64. flixopt-2.2.0b0/docs/user-guide/Mathematical Notation/others.md +0 -3
  65. flixopt-2.2.0b0/docs/user-guide/index.md +0 -124
  66. flixopt-2.2.0b0/examples/00_Minmal/minimal_example.py +0 -71
  67. flixopt-2.2.0b0/examples/01_Simple/simple_example.py +0 -120
  68. flixopt-2.2.0b0/examples/02_Complex/complex_example.py +0 -200
  69. flixopt-2.2.0b0/examples/02_Complex/complex_example_results.py +0 -33
  70. flixopt-2.2.0b0/examples/03_Calculation_types/Zeitreihen2020.csv +0 -35137
  71. flixopt-2.2.0b0/examples/03_Calculation_types/example_calculation_types.py +0 -227
  72. flixopt-2.2.0b0/examples/04_Scenarios/scenario_example.py +0 -125
  73. flixopt-2.2.0b0/flixopt/__init__.py +0 -35
  74. flixopt-2.2.0b0/flixopt/calculation.py +0 -483
  75. flixopt-2.2.0b0/flixopt/components.py +0 -679
  76. flixopt-2.2.0b0/flixopt/config.py +0 -259
  77. flixopt-2.2.0b0/flixopt/config.yaml +0 -10
  78. flixopt-2.2.0b0/flixopt/core.py +0 -1485
  79. flixopt-2.2.0b0/flixopt/effects.py +0 -590
  80. flixopt-2.2.0b0/flixopt/elements.py +0 -605
  81. flixopt-2.2.0b0/flixopt/features.py +0 -1167
  82. flixopt-2.2.0b0/flixopt/flow_system.py +0 -492
  83. flixopt-2.2.0b0/flixopt/interface.py +0 -356
  84. flixopt-2.2.0b0/flixopt/linear_converters.py +0 -331
  85. flixopt-2.2.0b0/flixopt/solvers.py +0 -77
  86. flixopt-2.2.0b0/flixopt/structure.py +0 -684
  87. flixopt-2.2.0b0/flixopt.egg-info/PKG-INFO +0 -146
  88. flixopt-2.2.0b0/flixopt.egg-info/SOURCES.txt +0 -99
  89. flixopt-2.2.0b0/flixopt.egg-info/requires.txt +0 -37
  90. flixopt-2.2.0b0/flixopt.egg-info/top_level.txt +0 -6
  91. flixopt-2.2.0b0/mkdocs.yml +0 -136
  92. flixopt-2.2.0b0/pics/architecture_flixOpt-pre2.0.0.png +0 -0
  93. flixopt-2.2.0b0/pics/architecture_flixOpt.png +0 -0
  94. flixopt-2.2.0b0/pics/flixOpt_plotting.jpg +0 -0
  95. flixopt-2.2.0b0/pics/flixopt-icon.svg +0 -1
  96. flixopt-2.2.0b0/pics/pics.pptx +0 -0
  97. flixopt-2.2.0b0/pyproject.toml +0 -124
  98. flixopt-2.2.0b0/scripts/gen_ref_pages.py +0 -54
  99. flixopt-2.2.0b0/tests/__init__.py +0 -0
  100. flixopt-2.2.0b0/tests/conftest.py +0 -573
  101. flixopt-2.2.0b0/tests/ressources/Zeitreihen2020.csv +0 -35137
  102. flixopt-2.2.0b0/tests/run_all_tests.py +0 -10
  103. flixopt-2.2.0b0/tests/test_bus.py +0 -58
  104. flixopt-2.2.0b0/tests/test_component.py +0 -184
  105. flixopt-2.2.0b0/tests/test_cycle_detection.py +0 -226
  106. flixopt-2.2.0b0/tests/test_dataconverter.py +0 -756
  107. flixopt-2.2.0b0/tests/test_effect.py +0 -224
  108. flixopt-2.2.0b0/tests/test_effects_shares_summation.py +0 -236
  109. flixopt-2.2.0b0/tests/test_examples.py +0 -50
  110. flixopt-2.2.0b0/tests/test_flow.py +0 -1132
  111. flixopt-2.2.0b0/tests/test_functional.py +0 -787
  112. flixopt-2.2.0b0/tests/test_integration.py +0 -425
  113. flixopt-2.2.0b0/tests/test_io.py +0 -68
  114. flixopt-2.2.0b0/tests/test_linear_converter.py +0 -556
  115. flixopt-2.2.0b0/tests/test_on_hours_computation.py +0 -105
  116. flixopt-2.2.0b0/tests/test_plots.py +0 -136
  117. flixopt-2.2.0b0/tests/test_results_plots.py +0 -84
  118. flixopt-2.2.0b0/tests/test_scenarios.py +0 -332
  119. flixopt-2.2.0b0/tests/test_storage.py +0 -399
  120. flixopt-2.2.0b0/tests/test_timeseries.py +0 -746
  121. flixopt-2.2.0b0/tests/todos.txt +0 -5
  122. {flixopt-2.2.0b0 → flixopt-3.0.0}/LICENSE +0 -0
  123. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt/commons.py +0 -0
  124. {flixopt-2.2.0b0 → flixopt-3.0.0}/flixopt.egg-info/dependency_links.txt +0 -0
  125. {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