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.

Files changed (107) hide show
  1. {flixopt-2.1.10 → flixopt-2.1.11}/CHANGELOG.md +15 -2
  2. flixopt-2.1.11/MANIFEST.in +26 -0
  3. {flixopt-2.1.10/flixopt.egg-info → flixopt-2.1.11}/PKG-INFO +3 -5
  4. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/components.py +1 -1
  5. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/flow_system.py +2 -1
  6. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/io.py +6 -4
  7. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/results.py +1 -1
  8. {flixopt-2.1.10 → flixopt-2.1.11/flixopt.egg-info}/PKG-INFO +3 -5
  9. flixopt-2.1.11/flixopt.egg-info/SOURCES.txt +31 -0
  10. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt.egg-info/requires.txt +1 -1
  11. flixopt-2.1.11/flixopt.egg-info/top_level.txt +1 -0
  12. {flixopt-2.1.10 → flixopt-2.1.11}/pyproject.toml +10 -5
  13. flixopt-2.1.10/.github/CONTRIBUTING.md +0 -85
  14. flixopt-2.1.10/.github/ISSUE_TEMPLATE/bug_report.yml +0 -111
  15. flixopt-2.1.10/.github/ISSUE_TEMPLATE/config.yml +0 -14
  16. flixopt-2.1.10/.github/ISSUE_TEMPLATE/feature_request.yml +0 -127
  17. flixopt-2.1.10/.github/ISSUE_TEMPLATE/general_issue.yml +0 -40
  18. flixopt-2.1.10/.github/pull_request_template.md +0 -20
  19. flixopt-2.1.10/.github/workflows/python-app.yaml +0 -419
  20. flixopt-2.1.10/.gitignore +0 -10
  21. flixopt-2.1.10/.pre-commit-config.yaml +0 -16
  22. flixopt-2.1.10/docs/SUMMARY.md +0 -7
  23. flixopt-2.1.10/docs/contribute.md +0 -45
  24. flixopt-2.1.10/docs/examples/00-Minimal Example.md +0 -5
  25. flixopt-2.1.10/docs/examples/01-Basic Example.md +0 -5
  26. flixopt-2.1.10/docs/examples/02-Complex Example.md +0 -10
  27. flixopt-2.1.10/docs/examples/03-Calculation Modes.md +0 -5
  28. flixopt-2.1.10/docs/examples/index.md +0 -5
  29. flixopt-2.1.10/docs/faq/contribute.md +0 -61
  30. flixopt-2.1.10/docs/faq/index.md +0 -3
  31. flixopt-2.1.10/docs/getting-started.md +0 -42
  32. flixopt-2.1.10/docs/images/architecture_flixOpt-pre2.0.0.png +0 -0
  33. flixopt-2.1.10/docs/images/architecture_flixOpt.png +0 -0
  34. flixopt-2.1.10/docs/images/flixopt-icon.svg +0 -1
  35. flixopt-2.1.10/docs/index.md +0 -47
  36. flixopt-2.1.10/docs/javascripts/mathjax.js +0 -18
  37. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Bus.md +0 -33
  38. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Effects, Penalty & Objective.md +0 -132
  39. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Flow.md +0 -26
  40. flixopt-2.1.10/docs/user-guide/Mathematical Notation/InvestParameters.md +0 -3
  41. flixopt-2.1.10/docs/user-guide/Mathematical Notation/LinearConverter.md +0 -21
  42. flixopt-2.1.10/docs/user-guide/Mathematical Notation/OnOffParameters.md +0 -3
  43. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Piecewise.md +0 -49
  44. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Storage.md +0 -44
  45. flixopt-2.1.10/docs/user-guide/Mathematical Notation/index.md +0 -22
  46. flixopt-2.1.10/docs/user-guide/Mathematical Notation/others.md +0 -3
  47. flixopt-2.1.10/docs/user-guide/index.md +0 -124
  48. flixopt-2.1.10/examples/00_Minmal/minimal_example.py +0 -71
  49. flixopt-2.1.10/examples/01_Simple/simple_example.py +0 -119
  50. flixopt-2.1.10/examples/02_Complex/complex_example.py +0 -201
  51. flixopt-2.1.10/examples/02_Complex/complex_example_results.py +0 -34
  52. flixopt-2.1.10/examples/03_Calculation_types/Zeitreihen2020.csv +0 -35137
  53. flixopt-2.1.10/examples/03_Calculation_types/example_calculation_types.py +0 -224
  54. flixopt-2.1.10/flixopt.egg-info/SOURCES.txt +0 -102
  55. flixopt-2.1.10/flixopt.egg-info/top_level.txt +0 -6
  56. flixopt-2.1.10/mkdocs.yml +0 -136
  57. flixopt-2.1.10/pics/architecture_flixOpt-pre2.0.0.png +0 -0
  58. flixopt-2.1.10/pics/architecture_flixOpt.png +0 -0
  59. flixopt-2.1.10/pics/flixOpt_plotting.jpg +0 -0
  60. flixopt-2.1.10/pics/flixopt-icon.svg +0 -1
  61. flixopt-2.1.10/pics/pics.pptx +0 -0
  62. flixopt-2.1.10/renovate.json +0 -31
  63. flixopt-2.1.10/scripts/extract_changelog.py +0 -148
  64. flixopt-2.1.10/scripts/extract_release_notes.py +0 -45
  65. flixopt-2.1.10/scripts/gen_ref_pages.py +0 -54
  66. flixopt-2.1.10/tests/__init__.py +0 -0
  67. flixopt-2.1.10/tests/conftest.py +0 -508
  68. flixopt-2.1.10/tests/ressources/Zeitreihen2020.csv +0 -35137
  69. flixopt-2.1.10/tests/run_all_tests.py +0 -10
  70. flixopt-2.1.10/tests/test_bus.py +0 -65
  71. flixopt-2.1.10/tests/test_component.py +0 -202
  72. flixopt-2.1.10/tests/test_dataconverter.py +0 -113
  73. flixopt-2.1.10/tests/test_effect.py +0 -163
  74. flixopt-2.1.10/tests/test_examples.py +0 -49
  75. flixopt-2.1.10/tests/test_flow.py +0 -1156
  76. flixopt-2.1.10/tests/test_functional.py +0 -787
  77. flixopt-2.1.10/tests/test_integration.py +0 -423
  78. flixopt-2.1.10/tests/test_io.py +0 -64
  79. flixopt-2.1.10/tests/test_linear_converter.py +0 -500
  80. flixopt-2.1.10/tests/test_network_app.py +0 -24
  81. flixopt-2.1.10/tests/test_on_hours_computation.py +0 -108
  82. flixopt-2.1.10/tests/test_plots.py +0 -134
  83. flixopt-2.1.10/tests/test_results_plots.py +0 -91
  84. flixopt-2.1.10/tests/test_storage.py +0 -390
  85. flixopt-2.1.10/tests/test_timeseries.py +0 -603
  86. flixopt-2.1.10/tests/todos.txt +0 -5
  87. {flixopt-2.1.10 → flixopt-2.1.11}/LICENSE +0 -0
  88. {flixopt-2.1.10 → flixopt-2.1.11}/README.md +0 -0
  89. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/__init__.py +0 -0
  90. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/aggregation.py +0 -0
  91. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/calculation.py +0 -0
  92. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/commons.py +0 -0
  93. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/config.py +0 -0
  94. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/config.yaml +0 -0
  95. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/core.py +0 -0
  96. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/effects.py +0 -0
  97. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/elements.py +0 -0
  98. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/features.py +0 -0
  99. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/interface.py +0 -0
  100. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/linear_converters.py +0 -0
  101. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/network_app.py +0 -0
  102. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/plotting.py +0 -0
  103. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/solvers.py +0 -0
  104. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/structure.py +0 -0
  105. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt/utils.py +0 -0
  106. {flixopt-2.1.10 → flixopt-2.1.11}/flixopt.egg-info/dependency_links.txt +0 -0
  107. {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.10
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 License
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: netcdf4<2,>=1.6.1
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 * eff_discharge * hours_per_step,
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('netCDF4') is not None:
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 "netcdf4".'
234
- 'Install netcdf4 via `pip install netcdf4`.'
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.10
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 License
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: netcdf4<2,>=1.6.1
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
@@ -2,7 +2,7 @@ numpy<3,>=1.21.5
2
2
  pandas<3,>=2.0.0
3
3
  xarray<2026.0,>=2024.2.0
4
4
  linopy<0.6,>=0.5.1
5
- netcdf4<2,>=1.6.1
5
+ h5netcdf<2,>=1.0.0
6
6
  pyyaml<7,>=6.0.0
7
7
  rich<15,>=13.0.0
8
8
  highspy<2,>=1.5.3
@@ -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 = { text = "MIT 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
- "netcdf4 >= 1.6.1, < 2",
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
- exclude = ["tests", "docs", "examples", "examples.*", "Tutorials", ".git", ".vscode", "build", ".venv", "venv/"]
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]