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