flixopt 2.1.10__tar.gz → 2.1.11__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-2.1.10 → flixopt-2.1.11}/CHANGELOG.md +15 -2
- flixopt-2.1.11/MANIFEST.in +26 -0
- {flixopt-2.1.10/flixopt.egg-info → flixopt-2.1.11}/PKG-INFO +3 -5
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/components.py +1 -1
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/flow_system.py +2 -1
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/io.py +6 -4
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/results.py +1 -1
- {flixopt-2.1.10 → flixopt-2.1.11/flixopt.egg-info}/PKG-INFO +3 -5
- flixopt-2.1.11/flixopt.egg-info/SOURCES.txt +31 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt.egg-info/requires.txt +1 -1
- flixopt-2.1.11/flixopt.egg-info/top_level.txt +1 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/pyproject.toml +10 -5
- flixopt-2.1.10/.github/CONTRIBUTING.md +0 -85
- flixopt-2.1.10/.github/ISSUE_TEMPLATE/bug_report.yml +0 -111
- flixopt-2.1.10/.github/ISSUE_TEMPLATE/config.yml +0 -14
- flixopt-2.1.10/.github/ISSUE_TEMPLATE/feature_request.yml +0 -127
- flixopt-2.1.10/.github/ISSUE_TEMPLATE/general_issue.yml +0 -40
- flixopt-2.1.10/.github/pull_request_template.md +0 -20
- flixopt-2.1.10/.github/workflows/python-app.yaml +0 -419
- flixopt-2.1.10/.gitignore +0 -10
- flixopt-2.1.10/.pre-commit-config.yaml +0 -16
- flixopt-2.1.10/docs/SUMMARY.md +0 -7
- flixopt-2.1.10/docs/contribute.md +0 -45
- flixopt-2.1.10/docs/examples/00-Minimal Example.md +0 -5
- flixopt-2.1.10/docs/examples/01-Basic Example.md +0 -5
- flixopt-2.1.10/docs/examples/02-Complex Example.md +0 -10
- flixopt-2.1.10/docs/examples/03-Calculation Modes.md +0 -5
- flixopt-2.1.10/docs/examples/index.md +0 -5
- flixopt-2.1.10/docs/faq/contribute.md +0 -61
- flixopt-2.1.10/docs/faq/index.md +0 -3
- flixopt-2.1.10/docs/getting-started.md +0 -42
- flixopt-2.1.10/docs/images/architecture_flixOpt-pre2.0.0.png +0 -0
- flixopt-2.1.10/docs/images/architecture_flixOpt.png +0 -0
- flixopt-2.1.10/docs/images/flixopt-icon.svg +0 -1
- flixopt-2.1.10/docs/index.md +0 -47
- flixopt-2.1.10/docs/javascripts/mathjax.js +0 -18
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/Bus.md +0 -33
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/Effects, Penalty & Objective.md +0 -132
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/Flow.md +0 -26
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/InvestParameters.md +0 -3
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/LinearConverter.md +0 -21
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/OnOffParameters.md +0 -3
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/Piecewise.md +0 -49
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/Storage.md +0 -44
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/index.md +0 -22
- flixopt-2.1.10/docs/user-guide/Mathematical Notation/others.md +0 -3
- flixopt-2.1.10/docs/user-guide/index.md +0 -124
- flixopt-2.1.10/examples/00_Minmal/minimal_example.py +0 -71
- flixopt-2.1.10/examples/01_Simple/simple_example.py +0 -119
- flixopt-2.1.10/examples/02_Complex/complex_example.py +0 -201
- flixopt-2.1.10/examples/02_Complex/complex_example_results.py +0 -34
- flixopt-2.1.10/examples/03_Calculation_types/Zeitreihen2020.csv +0 -35137
- flixopt-2.1.10/examples/03_Calculation_types/example_calculation_types.py +0 -224
- flixopt-2.1.10/flixopt.egg-info/SOURCES.txt +0 -102
- flixopt-2.1.10/flixopt.egg-info/top_level.txt +0 -6
- flixopt-2.1.10/mkdocs.yml +0 -136
- flixopt-2.1.10/pics/architecture_flixOpt-pre2.0.0.png +0 -0
- flixopt-2.1.10/pics/architecture_flixOpt.png +0 -0
- flixopt-2.1.10/pics/flixOpt_plotting.jpg +0 -0
- flixopt-2.1.10/pics/flixopt-icon.svg +0 -1
- flixopt-2.1.10/pics/pics.pptx +0 -0
- flixopt-2.1.10/renovate.json +0 -31
- flixopt-2.1.10/scripts/extract_changelog.py +0 -148
- flixopt-2.1.10/scripts/extract_release_notes.py +0 -45
- flixopt-2.1.10/scripts/gen_ref_pages.py +0 -54
- flixopt-2.1.10/tests/__init__.py +0 -0
- flixopt-2.1.10/tests/conftest.py +0 -508
- flixopt-2.1.10/tests/ressources/Zeitreihen2020.csv +0 -35137
- flixopt-2.1.10/tests/run_all_tests.py +0 -10
- flixopt-2.1.10/tests/test_bus.py +0 -65
- flixopt-2.1.10/tests/test_component.py +0 -202
- flixopt-2.1.10/tests/test_dataconverter.py +0 -113
- flixopt-2.1.10/tests/test_effect.py +0 -163
- flixopt-2.1.10/tests/test_examples.py +0 -49
- flixopt-2.1.10/tests/test_flow.py +0 -1156
- flixopt-2.1.10/tests/test_functional.py +0 -787
- flixopt-2.1.10/tests/test_integration.py +0 -423
- flixopt-2.1.10/tests/test_io.py +0 -64
- flixopt-2.1.10/tests/test_linear_converter.py +0 -500
- flixopt-2.1.10/tests/test_network_app.py +0 -24
- flixopt-2.1.10/tests/test_on_hours_computation.py +0 -108
- flixopt-2.1.10/tests/test_plots.py +0 -134
- flixopt-2.1.10/tests/test_results_plots.py +0 -91
- flixopt-2.1.10/tests/test_storage.py +0 -390
- flixopt-2.1.10/tests/test_timeseries.py +0 -603
- flixopt-2.1.10/tests/todos.txt +0 -5
- {flixopt-2.1.10 → flixopt-2.1.11}/LICENSE +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/README.md +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/__init__.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/aggregation.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/calculation.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/commons.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/config.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/config.yaml +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/core.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/effects.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/elements.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/features.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/interface.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/linear_converters.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/network_app.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/plotting.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/solvers.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/structure.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/utils.py +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/flixopt.egg-info/dependency_links.txt +0 -0
- {flixopt-2.1.10 → flixopt-2.1.11}/setup.cfg +0 -0
|
@@ -46,6 +46,7 @@ Please keep the format of the changelog consistent with the other releases, so t
|
|
|
46
46
|
### 💥 Breaking Changes
|
|
47
47
|
|
|
48
48
|
### ♻️ Changed
|
|
49
|
+
- Using `h5netcdf` instead of `netCDF4` for dataset I/O operations. This follows the update in `xarray==2025.09.01`
|
|
49
50
|
|
|
50
51
|
### 🗑️ Deprecated
|
|
51
52
|
|
|
@@ -58,8 +59,6 @@ Please keep the format of the changelog consistent with the other releases, so t
|
|
|
58
59
|
### 📦 Dependencies
|
|
59
60
|
|
|
60
61
|
### 📝 Docs
|
|
61
|
-
- Improved CHANGELOG.md formatting by adding better categories and formating by Gitmoji.
|
|
62
|
-
- Added a script to extract the release notes from the CHANGELOG.md file for better organized documentation.
|
|
63
62
|
|
|
64
63
|
### 👷 Development
|
|
65
64
|
|
|
@@ -68,6 +67,20 @@ Please keep the format of the changelog consistent with the other releases, so t
|
|
|
68
67
|
Until here -->
|
|
69
68
|
---
|
|
70
69
|
|
|
70
|
+
## [2.1.11] - 2025-10-05
|
|
71
|
+
**Summary:** Important bugfix in `Storage` leading to wrong results due to incorrect discharge losses.
|
|
72
|
+
|
|
73
|
+
### ♻️ Changed
|
|
74
|
+
- Using `h5netcdf` instead of `netCDF4` for dataset I/O operations. This follows the update in `xarray==2025.09.01`
|
|
75
|
+
|
|
76
|
+
### 🐛 Fixed
|
|
77
|
+
- Fix `charge_state` Constraint in `Storage` leading to incorrect losses in discharge and therefore incorrect charge states and discharge values.
|
|
78
|
+
|
|
79
|
+
### 📦 Dependencies
|
|
80
|
+
- Updated `renovate.config` to treat CalVer packages (xarray and dask) with more care
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
71
84
|
## [2.1.10] - 2025-09-29
|
|
72
85
|
**Summary:** This release is a Documentation and Development release.
|
|
73
86
|
|
|
@@ -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 *.yaml
|
|
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
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flixopt
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.11
|
|
4
4
|
Summary: Vector based energy and material flow optimization framework in Python.
|
|
5
5
|
Author-email: "Chair of Building Energy Systems and Heat Supply, TU Dresden" <peter.stange@tu-dresden.de>, Felix Bumann <felixbumann387@gmail.com>, Felix Panitz <baumbude@googlemail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
6
6
|
Maintainer-email: Felix Bumann <felixbumann387@gmail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
7
|
-
License: MIT
|
|
7
|
+
License-Expression: MIT
|
|
8
8
|
Project-URL: homepage, https://tu-dresden.de/ing/maschinenwesen/iet/gewv/forschung/forschungsprojekte/flixopt
|
|
9
9
|
Project-URL: repository, https://github.com/flixOpt/flixopt
|
|
10
10
|
Project-URL: documentation, https://flixopt.github.io/flixopt/
|
|
11
11
|
Keywords: optimization,energy systems,numerical analysis
|
|
12
12
|
Classifier: Development Status :: 3 - Alpha
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -18,7 +17,6 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
17
|
Classifier: Intended Audience :: Developers
|
|
19
18
|
Classifier: Intended Audience :: Science/Research
|
|
20
19
|
Classifier: Topic :: Scientific/Engineering
|
|
21
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
22
20
|
Requires-Python: >=3.10
|
|
23
21
|
Description-Content-Type: text/markdown
|
|
24
22
|
License-File: LICENSE
|
|
@@ -26,7 +24,7 @@ Requires-Dist: numpy<3,>=1.21.5
|
|
|
26
24
|
Requires-Dist: pandas<3,>=2.0.0
|
|
27
25
|
Requires-Dist: xarray<2026.0,>=2024.2.0
|
|
28
26
|
Requires-Dist: linopy<0.6,>=0.5.1
|
|
29
|
-
Requires-Dist:
|
|
27
|
+
Requires-Dist: h5netcdf<2,>=1.0.0
|
|
30
28
|
Requires-Dist: pyyaml<7,>=6.0.0
|
|
31
29
|
Requires-Dist: rich<15,>=13.0.0
|
|
32
30
|
Requires-Dist: tomli<3,>=2.0.1; python_version < "3.11"
|
|
@@ -791,7 +791,7 @@ class StorageModel(ComponentModel):
|
|
|
791
791
|
charge_state.isel(time=slice(1, None))
|
|
792
792
|
== charge_state.isel(time=slice(None, -1)) * ((1 - rel_loss) ** hours_per_step)
|
|
793
793
|
+ charge_rate * eff_charge * hours_per_step
|
|
794
|
-
- discharge_rate *
|
|
794
|
+
- discharge_rate * hours_per_step / eff_discharge,
|
|
795
795
|
name=f'{self.label_full}|charge_state',
|
|
796
796
|
),
|
|
797
797
|
'charge_state',
|
|
@@ -211,9 +211,10 @@ class FlowSystem:
|
|
|
211
211
|
ds.attrs = self.as_dict(data_mode='name')
|
|
212
212
|
return ds
|
|
213
213
|
|
|
214
|
-
def to_netcdf(self, path: str | pathlib.Path, compression: int = 0, constants_in_dataset: bool = True):
|
|
214
|
+
def to_netcdf(self, path: str | pathlib.Path, compression: int = 0, constants_in_dataset: bool = True) -> None:
|
|
215
215
|
"""
|
|
216
216
|
Saves the FlowSystem to a netCDF file.
|
|
217
|
+
|
|
217
218
|
Args:
|
|
218
219
|
path: The path to the netCDF file.
|
|
219
220
|
compression: The compression level to use when saving the file.
|
|
@@ -208,6 +208,7 @@ def save_dataset_to_netcdf(
|
|
|
208
208
|
ds: xr.Dataset,
|
|
209
209
|
path: str | pathlib.Path,
|
|
210
210
|
compression: int = 0,
|
|
211
|
+
engine: Literal['netcdf4', 'scipy', 'h5netcdf'] = 'h5netcdf',
|
|
211
212
|
) -> None:
|
|
212
213
|
"""
|
|
213
214
|
Save a dataset to a netcdf file. Store the attrs as a json string in the 'attrs' attribute.
|
|
@@ -226,12 +227,12 @@ def save_dataset_to_netcdf(
|
|
|
226
227
|
|
|
227
228
|
apply_encoding = False
|
|
228
229
|
if compression != 0:
|
|
229
|
-
if importlib.util.find_spec(
|
|
230
|
+
if importlib.util.find_spec(engine) is not None:
|
|
230
231
|
apply_encoding = True
|
|
231
232
|
else:
|
|
232
233
|
logger.warning(
|
|
233
|
-
'Dataset was exported without compression due to missing dependency "
|
|
234
|
-
'Install
|
|
234
|
+
f'Dataset was exported without compression due to missing dependency "{engine}".'
|
|
235
|
+
f'Install {engine} via `pip install {engine}`.'
|
|
235
236
|
)
|
|
236
237
|
ds = ds.copy(deep=True)
|
|
237
238
|
ds.attrs = {'attrs': json.dumps(ds.attrs)}
|
|
@@ -240,6 +241,7 @@ def save_dataset_to_netcdf(
|
|
|
240
241
|
encoding=None
|
|
241
242
|
if not apply_encoding
|
|
242
243
|
else {data_var: {'zlib': True, 'complevel': compression} for data_var in ds.data_vars},
|
|
244
|
+
engine=engine,
|
|
243
245
|
)
|
|
244
246
|
|
|
245
247
|
|
|
@@ -253,7 +255,7 @@ def load_dataset_from_netcdf(path: str | pathlib.Path) -> xr.Dataset:
|
|
|
253
255
|
Returns:
|
|
254
256
|
Dataset: Loaded dataset.
|
|
255
257
|
"""
|
|
256
|
-
ds = xr.load_dataset(str(path))
|
|
258
|
+
ds = xr.load_dataset(str(path), engine='h5netcdf')
|
|
257
259
|
ds.attrs = json.loads(ds.attrs['attrs'])
|
|
258
260
|
return ds
|
|
259
261
|
|
|
@@ -338,7 +338,7 @@ class CalculationResults:
|
|
|
338
338
|
if self.model is None:
|
|
339
339
|
logger.critical('No model in the CalculationResults. Saving the model is not possible.')
|
|
340
340
|
else:
|
|
341
|
-
self.model.to_netcdf(paths.linopy_model)
|
|
341
|
+
self.model.to_netcdf(paths.linopy_model, engine='h5netcdf')
|
|
342
342
|
|
|
343
343
|
if document_model:
|
|
344
344
|
if self.model is None:
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flixopt
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.11
|
|
4
4
|
Summary: Vector based energy and material flow optimization framework in Python.
|
|
5
5
|
Author-email: "Chair of Building Energy Systems and Heat Supply, TU Dresden" <peter.stange@tu-dresden.de>, Felix Bumann <felixbumann387@gmail.com>, Felix Panitz <baumbude@googlemail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
6
6
|
Maintainer-email: Felix Bumann <felixbumann387@gmail.com>, Peter Stange <peter.stange@tu-dresden.de>
|
|
7
|
-
License: MIT
|
|
7
|
+
License-Expression: MIT
|
|
8
8
|
Project-URL: homepage, https://tu-dresden.de/ing/maschinenwesen/iet/gewv/forschung/forschungsprojekte/flixopt
|
|
9
9
|
Project-URL: repository, https://github.com/flixOpt/flixopt
|
|
10
10
|
Project-URL: documentation, https://flixopt.github.io/flixopt/
|
|
11
11
|
Keywords: optimization,energy systems,numerical analysis
|
|
12
12
|
Classifier: Development Status :: 3 - Alpha
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -18,7 +17,6 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
17
|
Classifier: Intended Audience :: Developers
|
|
19
18
|
Classifier: Intended Audience :: Science/Research
|
|
20
19
|
Classifier: Topic :: Scientific/Engineering
|
|
21
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
22
20
|
Requires-Python: >=3.10
|
|
23
21
|
Description-Content-Type: text/markdown
|
|
24
22
|
License-File: LICENSE
|
|
@@ -26,7 +24,7 @@ Requires-Dist: numpy<3,>=1.21.5
|
|
|
26
24
|
Requires-Dist: pandas<3,>=2.0.0
|
|
27
25
|
Requires-Dist: xarray<2026.0,>=2024.2.0
|
|
28
26
|
Requires-Dist: linopy<0.6,>=0.5.1
|
|
29
|
-
Requires-Dist:
|
|
27
|
+
Requires-Dist: h5netcdf<2,>=1.0.0
|
|
30
28
|
Requires-Dist: pyyaml<7,>=6.0.0
|
|
31
29
|
Requires-Dist: rich<15,>=13.0.0
|
|
32
30
|
Requires-Dist: tomli<3,>=2.0.1; python_version < "3.11"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
CHANGELOG.md
|
|
2
|
+
LICENSE
|
|
3
|
+
MANIFEST.in
|
|
4
|
+
README.md
|
|
5
|
+
pyproject.toml
|
|
6
|
+
flixopt/__init__.py
|
|
7
|
+
flixopt/aggregation.py
|
|
8
|
+
flixopt/calculation.py
|
|
9
|
+
flixopt/commons.py
|
|
10
|
+
flixopt/components.py
|
|
11
|
+
flixopt/config.py
|
|
12
|
+
flixopt/config.yaml
|
|
13
|
+
flixopt/core.py
|
|
14
|
+
flixopt/effects.py
|
|
15
|
+
flixopt/elements.py
|
|
16
|
+
flixopt/features.py
|
|
17
|
+
flixopt/flow_system.py
|
|
18
|
+
flixopt/interface.py
|
|
19
|
+
flixopt/io.py
|
|
20
|
+
flixopt/linear_converters.py
|
|
21
|
+
flixopt/network_app.py
|
|
22
|
+
flixopt/plotting.py
|
|
23
|
+
flixopt/results.py
|
|
24
|
+
flixopt/solvers.py
|
|
25
|
+
flixopt/structure.py
|
|
26
|
+
flixopt/utils.py
|
|
27
|
+
flixopt.egg-info/PKG-INFO
|
|
28
|
+
flixopt.egg-info/SOURCES.txt
|
|
29
|
+
flixopt.egg-info/dependency_links.txt
|
|
30
|
+
flixopt.egg-info/requires.txt
|
|
31
|
+
flixopt.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
flixopt
|
|
@@ -8,7 +8,7 @@ dynamic = ["version"]
|
|
|
8
8
|
description = "Vector based energy and material flow optimization framework in Python."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
11
|
-
license =
|
|
11
|
+
license = "MIT"
|
|
12
12
|
authors = [
|
|
13
13
|
{ name = "Chair of Building Energy Systems and Heat Supply, TU Dresden", email = "peter.stange@tu-dresden.de" },
|
|
14
14
|
{ name = "Felix Bumann", email = "felixbumann387@gmail.com" },
|
|
@@ -22,7 +22,6 @@ maintainers = [
|
|
|
22
22
|
keywords = ["optimization", "energy systems", "numerical analysis"]
|
|
23
23
|
classifiers = [
|
|
24
24
|
"Development Status :: 3 - Alpha",
|
|
25
|
-
"License :: OSI Approved :: MIT License",
|
|
26
25
|
"Programming Language :: Python :: 3.10",
|
|
27
26
|
"Programming Language :: Python :: 3.11",
|
|
28
27
|
"Programming Language :: Python :: 3.12",
|
|
@@ -30,7 +29,6 @@ classifiers = [
|
|
|
30
29
|
"Intended Audience :: Developers",
|
|
31
30
|
"Intended Audience :: Science/Research",
|
|
32
31
|
"Topic :: Scientific/Engineering",
|
|
33
|
-
"License :: OSI Approved :: MIT License",
|
|
34
32
|
]
|
|
35
33
|
dependencies = [
|
|
36
34
|
# Core scientific computing
|
|
@@ -39,7 +37,7 @@ dependencies = [
|
|
|
39
37
|
"xarray >= 2024.2.0, < 2026.0", # CalVer: allow through next calendar year
|
|
40
38
|
# Optimization and data handling
|
|
41
39
|
"linopy >= 0.5.1, < 0.6", # Widened from patch pin to minor range
|
|
42
|
-
"
|
|
40
|
+
"h5netcdf>=1.0.0, < 2",
|
|
43
41
|
# Utilities
|
|
44
42
|
"pyyaml >= 6.0.0, < 7",
|
|
45
43
|
"rich >= 13.0.0, < 15",
|
|
@@ -116,11 +114,18 @@ documentation = "https://flixopt.github.io/flixopt/"
|
|
|
116
114
|
|
|
117
115
|
[tool.setuptools.packages.find]
|
|
118
116
|
where = ["."]
|
|
119
|
-
|
|
117
|
+
include = ["flixopt*"]
|
|
118
|
+
exclude = ["tests*", "docs*", "examples*", "Tutorials*"]
|
|
120
119
|
|
|
121
120
|
[tool.setuptools.package-data]
|
|
122
121
|
"flixopt" = ["config.yaml"]
|
|
123
122
|
|
|
123
|
+
[tool.setuptools]
|
|
124
|
+
include-package-data = true
|
|
125
|
+
|
|
126
|
+
[tool.setuptools.exclude-package-data]
|
|
127
|
+
"*" = ["*.md", ".git*", "*.ipynb", "renovate.json"]
|
|
128
|
+
|
|
124
129
|
[tool.setuptools_scm]
|
|
125
130
|
version_scheme = "post-release"
|
|
126
131
|
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# Contributing to FlixOpt
|
|
2
|
-
|
|
3
|
-
Thanks for your interest in contributing to FlixOpt! 🚀
|
|
4
|
-
|
|
5
|
-
## Quick Start
|
|
6
|
-
|
|
7
|
-
1. **Fork & Clone**
|
|
8
|
-
```bash
|
|
9
|
-
git clone https://github.com/yourusername/flixopt.git
|
|
10
|
-
cd flixopt
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
2. **Install for Development**
|
|
14
|
-
```bash
|
|
15
|
-
pip install -e ".[full]"
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
3. **Make Changes & Submit PR**
|
|
19
|
-
```bash
|
|
20
|
-
git checkout -b feature/your-change
|
|
21
|
-
# Make your changes
|
|
22
|
-
git commit -m "Add: description of changes"
|
|
23
|
-
git push origin feature/your-change
|
|
24
|
-
# Create Pull Request on GitHub
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## How to Contribute
|
|
28
|
-
|
|
29
|
-
### 🐛 **Found a Bug?**
|
|
30
|
-
Use our [bug report template](https://github.com/flixOpt/flixopt/issues/new?template=bug_report.yml) with:
|
|
31
|
-
- Minimal code example
|
|
32
|
-
- FlixOpt version, Python version, solver used
|
|
33
|
-
- Expected vs actual behavior
|
|
34
|
-
|
|
35
|
-
### ✨ **Have a Feature Idea?**
|
|
36
|
-
Use our [feature request template](https://github.com/flixOpt/flixopt/issues/new?template=feature_request.yml) with:
|
|
37
|
-
- Clear energy system use case
|
|
38
|
-
- Specific examples of what you want to model
|
|
39
|
-
|
|
40
|
-
### ❓ **Need Help?**
|
|
41
|
-
- Check the [documentation](https://flixopt.github.io/flixopt/latest/) first
|
|
42
|
-
- Search [existing issues](https://github.com/flixOpt/flixopt/issues)
|
|
43
|
-
- Start a [discussion](https://github.com/flixOpt/flixopt/discussions)
|
|
44
|
-
|
|
45
|
-
## Code Guidelines
|
|
46
|
-
|
|
47
|
-
- **Style**: Follow PEP 8, use descriptive names
|
|
48
|
-
- **Documentation**: Add docstrings with units (kW, kWh, etc.) if applicable
|
|
49
|
-
- **Energy Focus**: Use energy domain terminology consistently
|
|
50
|
-
- **Testing**: Test with different solvers when applicable
|
|
51
|
-
|
|
52
|
-
### Example
|
|
53
|
-
```python
|
|
54
|
-
def create_storage(
|
|
55
|
-
label: str,
|
|
56
|
-
capacity_kwh: float,
|
|
57
|
-
charging_power_kw: float
|
|
58
|
-
) -> Storage:
|
|
59
|
-
"""
|
|
60
|
-
Create a battery storage component.
|
|
61
|
-
|
|
62
|
-
Args:
|
|
63
|
-
label: Unique identifier
|
|
64
|
-
capacity_kwh: Storage capacity [kWh]
|
|
65
|
-
charging_power_kw: Maximum charging power [kW]
|
|
66
|
-
"""
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## What We Welcome
|
|
70
|
-
|
|
71
|
-
- 🔧 New energy components (batteries, heat pumps, etc.)
|
|
72
|
-
- 📚 Documentation improvements
|
|
73
|
-
- 🐛 Bug fixes
|
|
74
|
-
- 🧪 Test cases
|
|
75
|
-
- 💡 Energy system examples
|
|
76
|
-
|
|
77
|
-
## Questions?
|
|
78
|
-
|
|
79
|
-
- 📖 [Documentation](https://flixopt.github.io/flixopt/latest/)
|
|
80
|
-
- 💬 [Discussions](https://github.com/flixOpt/flixopt/discussions)
|
|
81
|
-
- 📧 Contact maintainers (see README)
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
**Every contribution helps advance sustainable energy solutions! 🌱⚡**
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
name: 🐛 Bug Report
|
|
2
|
-
description: Report a bug in flixopt
|
|
3
|
-
title: "[BUG] "
|
|
4
|
-
labels: ["type: bug"]
|
|
5
|
-
body:
|
|
6
|
-
- type: markdown
|
|
7
|
-
attributes:
|
|
8
|
-
value: |
|
|
9
|
-
Thanks for taking the time to fill out this bug report!
|
|
10
|
-
|
|
11
|
-
**Before submitting**: Please search [existing issues](https://github.com/flixOpt/flixopt/issues) to avoid duplicates.
|
|
12
|
-
|
|
13
|
-
- type: checkboxes
|
|
14
|
-
id: checks
|
|
15
|
-
attributes:
|
|
16
|
-
label: Version Confirmation
|
|
17
|
-
description: Please confirm you can reproduce this on a supported version
|
|
18
|
-
options:
|
|
19
|
-
- label: I have confirmed this bug exists on the latest [release](https://github.com/flixOpt/flixopt/releases) of FlixOpt
|
|
20
|
-
required: true
|
|
21
|
-
|
|
22
|
-
- type: textarea
|
|
23
|
-
id: problem
|
|
24
|
-
attributes:
|
|
25
|
-
label: Bug Description
|
|
26
|
-
description: Clearly describe what went wrong
|
|
27
|
-
placeholder: |
|
|
28
|
-
What happened? What did you expect to happen instead?
|
|
29
|
-
|
|
30
|
-
Include any error messages or unexpected outputs.
|
|
31
|
-
validations:
|
|
32
|
-
required: true
|
|
33
|
-
|
|
34
|
-
- type: textarea
|
|
35
|
-
id: example
|
|
36
|
-
attributes:
|
|
37
|
-
label: Minimal Reproducible Example
|
|
38
|
-
description: |
|
|
39
|
-
Provide the smallest possible code example that reproduces the bug.
|
|
40
|
-
See [how to create minimal bug reports](https://matthewrocklin.com/minimal-bug-reports).
|
|
41
|
-
placeholder: |
|
|
42
|
-
import flixopt as fx
|
|
43
|
-
import pandas as pd
|
|
44
|
-
|
|
45
|
-
# Minimal example that reproduces the bug
|
|
46
|
-
timesteps = pd.date_range('2024-01-01', periods=24, freq='h')
|
|
47
|
-
flow_system = fx.FlowSystem(timesteps)
|
|
48
|
-
|
|
49
|
-
# Add components that trigger the bug...
|
|
50
|
-
|
|
51
|
-
# Show the problematic operation
|
|
52
|
-
result = flow_system.solve() # This should fail/behave unexpectedly
|
|
53
|
-
render: python
|
|
54
|
-
validations:
|
|
55
|
-
required: true
|
|
56
|
-
|
|
57
|
-
- type: textarea
|
|
58
|
-
id: error-output
|
|
59
|
-
attributes:
|
|
60
|
-
label: Error Output
|
|
61
|
-
description: If there's an error message, paste the full traceback here
|
|
62
|
-
render: shell
|
|
63
|
-
|
|
64
|
-
- type: dropdown
|
|
65
|
-
id: solver
|
|
66
|
-
attributes:
|
|
67
|
-
label: Solver Used
|
|
68
|
-
description: Which solver were you using?
|
|
69
|
-
options:
|
|
70
|
-
- HiGHS (default)
|
|
71
|
-
- Gurobi
|
|
72
|
-
- CPLEX
|
|
73
|
-
- GLPK
|
|
74
|
-
- CBC
|
|
75
|
-
- Other (specify below)
|
|
76
|
-
validations:
|
|
77
|
-
required: true
|
|
78
|
-
|
|
79
|
-
- type: input
|
|
80
|
-
id: os
|
|
81
|
-
attributes:
|
|
82
|
-
label: Operating System
|
|
83
|
-
placeholder: "e.g., Windows 11, macOS 14.2, Ubuntu 22.04"
|
|
84
|
-
validations:
|
|
85
|
-
required: true
|
|
86
|
-
|
|
87
|
-
- type: input
|
|
88
|
-
id: python-version
|
|
89
|
-
attributes:
|
|
90
|
-
label: Python Version
|
|
91
|
-
placeholder: "e.g., 3.11.5"
|
|
92
|
-
validations:
|
|
93
|
-
required: true
|
|
94
|
-
|
|
95
|
-
- type: textarea
|
|
96
|
-
id: environment
|
|
97
|
-
attributes:
|
|
98
|
-
label: Environment Info
|
|
99
|
-
description: |
|
|
100
|
-
Run one of these commands and paste the output:
|
|
101
|
-
- `pip freeze`
|
|
102
|
-
- `conda env export`
|
|
103
|
-
render: shell
|
|
104
|
-
value: >
|
|
105
|
-
<details>
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
Replace this with your environment info
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
</details>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
blank_issues_enabled: false
|
|
2
|
-
contact_links:
|
|
3
|
-
- name: 🤔 Modeling Questions
|
|
4
|
-
url: https://github.com/flixOpt/flixopt/discussions/categories/q-a
|
|
5
|
-
about: "How to model specific energy systems, components, and constraints"
|
|
6
|
-
- name: ⚡ Performance & Optimization
|
|
7
|
-
url: https://github.com/flixOpt/flixopt/discussions/categories/performance
|
|
8
|
-
about: "Solver performance, memory usage, and optimization speed issues"
|
|
9
|
-
- name: 💡 Ideas & Suggestions
|
|
10
|
-
url: https://github.com/flixOpt/flixopt/discussions/categories/ideas
|
|
11
|
-
about: "Share ideas and discuss potential improvements with the community"
|
|
12
|
-
- name: 📖 Documentation
|
|
13
|
-
url: https://flixopt.github.io/flixopt/latest/
|
|
14
|
-
about: "Browse guides, API reference, and examples"
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
name: ✨ Feature Request
|
|
2
|
-
description: Suggest a new feature or enhancement
|
|
3
|
-
title: "[FEATURE] "
|
|
4
|
-
labels: ["type: feature"]
|
|
5
|
-
body:
|
|
6
|
-
- type: markdown
|
|
7
|
-
attributes:
|
|
8
|
-
value: |
|
|
9
|
-
Thanks for suggesting a new feature!
|
|
10
|
-
|
|
11
|
-
**Before submitting**: Please search [existing issues](https://github.com/flixOpt/flixopt/issues) and check our [roadmap](https://github.com/flixOpt/flixopt/discussions) to avoid duplicates.
|
|
12
|
-
|
|
13
|
-
- type: checkboxes
|
|
14
|
-
id: checks
|
|
15
|
-
attributes:
|
|
16
|
-
label: Prerequisites
|
|
17
|
-
options:
|
|
18
|
-
- label: I have searched existing issues and discussions
|
|
19
|
-
required: true
|
|
20
|
-
- label: I have checked the [documentation](https://flixopt.github.io/flixopt/latest/)
|
|
21
|
-
required: true
|
|
22
|
-
|
|
23
|
-
- type: dropdown
|
|
24
|
-
id: feature-type
|
|
25
|
-
attributes:
|
|
26
|
-
label: Feature Category
|
|
27
|
-
description: What type of feature is this?
|
|
28
|
-
options:
|
|
29
|
-
- New Component (storage, generation, conversion, etc.)
|
|
30
|
-
- Enhancement to Existing Component
|
|
31
|
-
- New Optimization Feature
|
|
32
|
-
- Data Input/Output Improvement
|
|
33
|
-
- Results/Visualization Enhancement
|
|
34
|
-
- Performance/Solver Improvement
|
|
35
|
-
- API/Usability Improvement
|
|
36
|
-
- Documentation/Examples
|
|
37
|
-
- Other
|
|
38
|
-
validations:
|
|
39
|
-
required: true
|
|
40
|
-
|
|
41
|
-
- type: textarea
|
|
42
|
-
id: problem
|
|
43
|
-
attributes:
|
|
44
|
-
label: Problem Statement
|
|
45
|
-
description: What problem would this feature solve?
|
|
46
|
-
placeholder: |
|
|
47
|
-
Current limitation: "FlixOpt doesn't support [specific energy system component/feature]..."
|
|
48
|
-
|
|
49
|
-
Impact: "This prevents users from modeling [specific scenarios]..."
|
|
50
|
-
|
|
51
|
-
- type: textarea
|
|
52
|
-
id: solution
|
|
53
|
-
attributes:
|
|
54
|
-
label: Proposed Solution
|
|
55
|
-
description: Describe your proposed solution in detail
|
|
56
|
-
placeholder: |
|
|
57
|
-
I propose adding a new component/feature that would...
|
|
58
|
-
|
|
59
|
-
Key capabilities:
|
|
60
|
-
- Feature 1
|
|
61
|
-
- Feature 2
|
|
62
|
-
- Feature 3
|
|
63
|
-
validations:
|
|
64
|
-
required: true
|
|
65
|
-
|
|
66
|
-
- type: textarea
|
|
67
|
-
id: use-case
|
|
68
|
-
attributes:
|
|
69
|
-
label: Use Case & Examples
|
|
70
|
-
description: Provide concrete examples of how this would be used
|
|
71
|
-
placeholder: |
|
|
72
|
-
Real-world scenario: "I'm modeling a microgrid with battery storage and need to..."
|
|
73
|
-
|
|
74
|
-
Specific requirements:
|
|
75
|
-
- Must handle [specific constraint]
|
|
76
|
-
- Should support [specific behavior]
|
|
77
|
-
- Would benefit [specific user group]
|
|
78
|
-
validations:
|
|
79
|
-
required: true
|
|
80
|
-
|
|
81
|
-
- type: textarea
|
|
82
|
-
id: code-example
|
|
83
|
-
attributes:
|
|
84
|
-
label: Desired API (Optional)
|
|
85
|
-
description: Show how you'd like to use this feature
|
|
86
|
-
placeholder: |
|
|
87
|
-
# Example of proposed API
|
|
88
|
-
component = fx.NewComponent(
|
|
89
|
-
label='example',
|
|
90
|
-
parameter1=value1,
|
|
91
|
-
parameter2=value2
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
flow_system.add_component(component)
|
|
95
|
-
render: python
|
|
96
|
-
|
|
97
|
-
- type: textarea
|
|
98
|
-
id: alternatives
|
|
99
|
-
attributes:
|
|
100
|
-
label: Alternatives Considered
|
|
101
|
-
description: What workarounds or alternatives have you tried?
|
|
102
|
-
placeholder: |
|
|
103
|
-
Current workaround: "I'm currently using [existing component] but it doesn't support..."
|
|
104
|
-
|
|
105
|
-
Other approaches considered: "I looked into [alternative] but..."
|
|
106
|
-
|
|
107
|
-
- type: dropdown
|
|
108
|
-
id: priority
|
|
109
|
-
attributes:
|
|
110
|
-
label: Priority/Impact
|
|
111
|
-
description: How important is this feature for your work?
|
|
112
|
-
options:
|
|
113
|
-
- Critical - Blocking important work
|
|
114
|
-
- High - Would significantly improve workflow
|
|
115
|
-
- Medium - Nice to have enhancement
|
|
116
|
-
- Low - Minor improvement
|
|
117
|
-
|
|
118
|
-
- type: textarea
|
|
119
|
-
id: additional-context
|
|
120
|
-
attributes:
|
|
121
|
-
label: Additional Context
|
|
122
|
-
description: References, papers, examples from other tools, etc.
|
|
123
|
-
placeholder: |
|
|
124
|
-
References:
|
|
125
|
-
- Research paper: [Title and link]
|
|
126
|
-
- Similar feature in [other tool]: [description]
|
|
127
|
-
- Industry standard: [description]
|