flixopt 2.1.10__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flixopt might be problematic. Click here for more details.

Files changed (108) hide show
  1. {flixopt-2.1.10 → flixopt-2.2.0}/CHANGELOG.md +41 -2
  2. flixopt-2.2.0/MANIFEST.in +26 -0
  3. {flixopt-2.1.10/flixopt.egg-info → flixopt-2.2.0}/PKG-INFO +6 -8
  4. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/__init__.py +0 -2
  5. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/calculation.py +2 -2
  6. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/components.py +1 -1
  7. flixopt-2.2.0/flixopt/config.py +561 -0
  8. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/elements.py +5 -5
  9. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/features.py +6 -6
  10. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/flow_system.py +2 -1
  11. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/interface.py +4 -4
  12. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/io.py +6 -4
  13. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/results.py +1 -1
  14. {flixopt-2.1.10 → flixopt-2.2.0/flixopt.egg-info}/PKG-INFO +6 -8
  15. flixopt-2.2.0/flixopt.egg-info/SOURCES.txt +30 -0
  16. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt.egg-info/requires.txt +4 -4
  17. flixopt-2.2.0/flixopt.egg-info/top_level.txt +1 -0
  18. {flixopt-2.1.10 → flixopt-2.2.0}/pyproject.toml +13 -8
  19. flixopt-2.1.10/.github/CONTRIBUTING.md +0 -85
  20. flixopt-2.1.10/.github/ISSUE_TEMPLATE/bug_report.yml +0 -111
  21. flixopt-2.1.10/.github/ISSUE_TEMPLATE/config.yml +0 -14
  22. flixopt-2.1.10/.github/ISSUE_TEMPLATE/feature_request.yml +0 -127
  23. flixopt-2.1.10/.github/ISSUE_TEMPLATE/general_issue.yml +0 -40
  24. flixopt-2.1.10/.github/pull_request_template.md +0 -20
  25. flixopt-2.1.10/.github/workflows/python-app.yaml +0 -419
  26. flixopt-2.1.10/.gitignore +0 -10
  27. flixopt-2.1.10/.pre-commit-config.yaml +0 -16
  28. flixopt-2.1.10/docs/SUMMARY.md +0 -7
  29. flixopt-2.1.10/docs/contribute.md +0 -45
  30. flixopt-2.1.10/docs/examples/00-Minimal Example.md +0 -5
  31. flixopt-2.1.10/docs/examples/01-Basic Example.md +0 -5
  32. flixopt-2.1.10/docs/examples/02-Complex Example.md +0 -10
  33. flixopt-2.1.10/docs/examples/03-Calculation Modes.md +0 -5
  34. flixopt-2.1.10/docs/examples/index.md +0 -5
  35. flixopt-2.1.10/docs/faq/contribute.md +0 -61
  36. flixopt-2.1.10/docs/faq/index.md +0 -3
  37. flixopt-2.1.10/docs/getting-started.md +0 -42
  38. flixopt-2.1.10/docs/images/architecture_flixOpt-pre2.0.0.png +0 -0
  39. flixopt-2.1.10/docs/images/architecture_flixOpt.png +0 -0
  40. flixopt-2.1.10/docs/images/flixopt-icon.svg +0 -1
  41. flixopt-2.1.10/docs/index.md +0 -47
  42. flixopt-2.1.10/docs/javascripts/mathjax.js +0 -18
  43. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Bus.md +0 -33
  44. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Effects, Penalty & Objective.md +0 -132
  45. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Flow.md +0 -26
  46. flixopt-2.1.10/docs/user-guide/Mathematical Notation/InvestParameters.md +0 -3
  47. flixopt-2.1.10/docs/user-guide/Mathematical Notation/LinearConverter.md +0 -21
  48. flixopt-2.1.10/docs/user-guide/Mathematical Notation/OnOffParameters.md +0 -3
  49. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Piecewise.md +0 -49
  50. flixopt-2.1.10/docs/user-guide/Mathematical Notation/Storage.md +0 -44
  51. flixopt-2.1.10/docs/user-guide/Mathematical Notation/index.md +0 -22
  52. flixopt-2.1.10/docs/user-guide/Mathematical Notation/others.md +0 -3
  53. flixopt-2.1.10/docs/user-guide/index.md +0 -124
  54. flixopt-2.1.10/examples/00_Minmal/minimal_example.py +0 -71
  55. flixopt-2.1.10/examples/01_Simple/simple_example.py +0 -119
  56. flixopt-2.1.10/examples/02_Complex/complex_example.py +0 -201
  57. flixopt-2.1.10/examples/02_Complex/complex_example_results.py +0 -34
  58. flixopt-2.1.10/examples/03_Calculation_types/Zeitreihen2020.csv +0 -35137
  59. flixopt-2.1.10/examples/03_Calculation_types/example_calculation_types.py +0 -224
  60. flixopt-2.1.10/flixopt/config.py +0 -268
  61. flixopt-2.1.10/flixopt/config.yaml +0 -10
  62. flixopt-2.1.10/flixopt.egg-info/SOURCES.txt +0 -102
  63. flixopt-2.1.10/flixopt.egg-info/top_level.txt +0 -6
  64. flixopt-2.1.10/mkdocs.yml +0 -136
  65. flixopt-2.1.10/pics/architecture_flixOpt-pre2.0.0.png +0 -0
  66. flixopt-2.1.10/pics/architecture_flixOpt.png +0 -0
  67. flixopt-2.1.10/pics/flixOpt_plotting.jpg +0 -0
  68. flixopt-2.1.10/pics/flixopt-icon.svg +0 -1
  69. flixopt-2.1.10/pics/pics.pptx +0 -0
  70. flixopt-2.1.10/renovate.json +0 -31
  71. flixopt-2.1.10/scripts/extract_changelog.py +0 -148
  72. flixopt-2.1.10/scripts/extract_release_notes.py +0 -45
  73. flixopt-2.1.10/scripts/gen_ref_pages.py +0 -54
  74. flixopt-2.1.10/tests/__init__.py +0 -0
  75. flixopt-2.1.10/tests/conftest.py +0 -508
  76. flixopt-2.1.10/tests/ressources/Zeitreihen2020.csv +0 -35137
  77. flixopt-2.1.10/tests/run_all_tests.py +0 -10
  78. flixopt-2.1.10/tests/test_bus.py +0 -65
  79. flixopt-2.1.10/tests/test_component.py +0 -202
  80. flixopt-2.1.10/tests/test_dataconverter.py +0 -113
  81. flixopt-2.1.10/tests/test_effect.py +0 -163
  82. flixopt-2.1.10/tests/test_examples.py +0 -49
  83. flixopt-2.1.10/tests/test_flow.py +0 -1156
  84. flixopt-2.1.10/tests/test_functional.py +0 -787
  85. flixopt-2.1.10/tests/test_integration.py +0 -423
  86. flixopt-2.1.10/tests/test_io.py +0 -64
  87. flixopt-2.1.10/tests/test_linear_converter.py +0 -500
  88. flixopt-2.1.10/tests/test_network_app.py +0 -24
  89. flixopt-2.1.10/tests/test_on_hours_computation.py +0 -108
  90. flixopt-2.1.10/tests/test_plots.py +0 -134
  91. flixopt-2.1.10/tests/test_results_plots.py +0 -91
  92. flixopt-2.1.10/tests/test_storage.py +0 -390
  93. flixopt-2.1.10/tests/test_timeseries.py +0 -603
  94. flixopt-2.1.10/tests/todos.txt +0 -5
  95. {flixopt-2.1.10 → flixopt-2.2.0}/LICENSE +0 -0
  96. {flixopt-2.1.10 → flixopt-2.2.0}/README.md +0 -0
  97. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/aggregation.py +0 -0
  98. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/commons.py +0 -0
  99. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/core.py +0 -0
  100. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/effects.py +0 -0
  101. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/linear_converters.py +0 -0
  102. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/network_app.py +0 -0
  103. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/plotting.py +0 -0
  104. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/solvers.py +0 -0
  105. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/structure.py +0 -0
  106. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt/utils.py +0 -0
  107. {flixopt-2.1.10 → flixopt-2.2.0}/flixopt.egg-info/dependency_links.txt +0 -0
  108. {flixopt-2.1.10 → flixopt-2.2.0}/setup.cfg +0 -0
@@ -4,6 +4,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
4
4
  Formatting is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) & [Gitmoji](https://gitmoji.dev).
5
5
  For more details regarding the individual PRs and contributors, please refer to our [GitHub releases](https://github.com/flixOpt/flixopt/releases).
6
6
 
7
+ ---
8
+
7
9
  <!-- This text won't be rendered
8
10
  Note: The CI will automatically append a "What's Changed" section to the changelog for github releases.
9
11
  This contains all commits, PRs, and contributors.
@@ -58,14 +60,51 @@ Please keep the format of the changelog consistent with the other releases, so t
58
60
  ### 📦 Dependencies
59
61
 
60
62
  ### 📝 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
63
 
64
64
  ### 👷 Development
65
65
 
66
66
  ### 🚧 Known Issues
67
67
 
68
68
  Until here -->
69
+
70
+ ## [2.2.0] - 2025-10-11
71
+ **Summary:** This release is a Configuration and Logging management release.
72
+
73
+ ### ✨ Added
74
+ - Added `CONFIG.reset()` method to restore configuration to default values
75
+ - Added configurable log file rotation settings: `CONFIG.Logging.max_file_size` and `CONFIG.Logging.backup_count`
76
+ - Added configurable log format settings: `CONFIG.Logging.date_format` and `CONFIG.Logging.format`
77
+ - Added configurable console settings: `CONFIG.Logging.console_width` and `CONFIG.Logging.show_path`
78
+ - Added `CONFIG.Logging.Colors` nested class for customizable log level colors using ANSI escape codes (works with both standard and Rich handlers)
79
+
80
+ ### ♻️ Changed
81
+ - Logging and Configuration management changed
82
+
83
+ ### 🗑️ Deprecated
84
+ - `change_logging_level()` function is now deprecated in favor of `CONFIG.Logging.level` and `CONFIG.apply()`. Will be removed in version 3.0.0.
85
+
86
+ ### 🔥 Removed
87
+ - Removed unused `config.merge_configs` function from configuration module
88
+
89
+ ### 👷 Development
90
+ - Greatly expanded test coverage for `config.py` module
91
+ - Added `@pytest.mark.xdist_group` to `TestConfigModule` tests to prevent global config interference
92
+
93
+ ---
94
+
95
+ ## [2.1.11] - 2025-10-05
96
+ **Summary:** Important bugfix in `Storage` leading to wrong results due to incorrect discharge losses.
97
+
98
+ ### ♻️ Changed
99
+ - Using `h5netcdf` instead of `netCDF4` for dataset I/O operations. This follows the update in `xarray==2025.09.01`
100
+
101
+ ### 🐛 Fixed
102
+ - Fix `charge_state` Constraint in `Storage` leading to incorrect losses in discharge and therefore incorrect charge states and discharge values.
103
+
104
+ ### 📦 Dependencies
105
+ - Updated `renovate.config` to treat CalVer packages (xarray and dask) with more care
106
+ - Updated packaging configuration
107
+
69
108
  ---
70
109
 
71
110
  ## [2.1.10] - 2025-09-29
@@ -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.2.0
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"
@@ -55,10 +53,10 @@ Provides-Extra: dev
55
53
  Requires-Dist: pytest==8.4.2; extra == "dev"
56
54
  Requires-Dist: pytest-xdist==3.8.0; extra == "dev"
57
55
  Requires-Dist: nbformat==5.10.4; extra == "dev"
58
- Requires-Dist: ruff==0.13.0; extra == "dev"
56
+ Requires-Dist: ruff==0.13.2; extra == "dev"
59
57
  Requires-Dist: pre-commit==4.3.0; extra == "dev"
60
58
  Requires-Dist: pyvis==0.3.2; extra == "dev"
61
- Requires-Dist: tsam==2.3.1; extra == "dev"
59
+ Requires-Dist: tsam==2.3.9; extra == "dev"
62
60
  Requires-Dist: scipy==1.15.1; extra == "dev"
63
61
  Requires-Dist: gurobipy==12.0.3; extra == "dev"
64
62
  Requires-Dist: dash==3.0.0; extra == "dev"
@@ -67,7 +65,7 @@ Requires-Dist: dash-daq==0.6.0; extra == "dev"
67
65
  Requires-Dist: networkx==3.0.0; extra == "dev"
68
66
  Requires-Dist: werkzeug==3.0.0; extra == "dev"
69
67
  Provides-Extra: docs
70
- Requires-Dist: mkdocs-material==9.6.19; extra == "docs"
68
+ Requires-Dist: mkdocs-material==9.6.20; extra == "docs"
71
69
  Requires-Dist: mkdocstrings-python==1.18.2; extra == "docs"
72
70
  Requires-Dist: mkdocs-table-reader-plugin==3.1.0; extra == "docs"
73
71
  Requires-Dist: mkdocs-gen-files==0.5.0; extra == "docs"
@@ -35,5 +35,3 @@ from .commons import (
35
35
  results,
36
36
  solvers,
37
37
  )
38
-
39
- CONFIG.load_config()
@@ -91,13 +91,13 @@ class Calculation:
91
91
  model.label_of_element: float(model.size.solution)
92
92
  for component in self.flow_system.components.values()
93
93
  for model in component.model.all_sub_models
94
- if isinstance(model, InvestmentModel) and float(model.size.solution) >= CONFIG.modeling.EPSILON
94
+ if isinstance(model, InvestmentModel) and float(model.size.solution) >= CONFIG.Modeling.epsilon
95
95
  },
96
96
  'Not invested': {
97
97
  model.label_of_element: float(model.size.solution)
98
98
  for component in self.flow_system.components.values()
99
99
  for model in component.model.all_sub_models
100
- if isinstance(model, InvestmentModel) and float(model.size.solution) < CONFIG.modeling.EPSILON
100
+ if isinstance(model, InvestmentModel) and float(model.size.solution) < CONFIG.Modeling.epsilon
101
101
  },
102
102
  },
103
103
  'Buses with excess': [
@@ -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',