flixopt 2.1.1__py3-none-any.whl → 2.1.3__py3-none-any.whl

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/components.py CHANGED
@@ -491,7 +491,7 @@ class StorageModel(ComponentModel):
491
491
  self.add(
492
492
  self._model.add_constraints(
493
493
  charge_state.isel(time=slice(1, None))
494
- == charge_state.isel(time=slice(None, -1)) * (1 - rel_loss * hours_per_step)
494
+ == charge_state.isel(time=slice(None, -1)) * ((1 - rel_loss) ** hours_per_step)
495
495
  + charge_rate * eff_charge * hours_per_step
496
496
  - discharge_rate * eff_discharge * hours_per_step,
497
497
  name=f'{self.label_full}|charge_state',
flixopt/core.py CHANGED
@@ -62,13 +62,17 @@ class DataConverter:
62
62
  return xr.DataArray(data, coords=coords, dims=dims)
63
63
  elif isinstance(data, pd.DataFrame):
64
64
  if not data.index.equals(timesteps):
65
- raise ConversionError("DataFrame index doesn't match timesteps index")
65
+ raise ConversionError(f"DataFrame index doesn't match timesteps index. "
66
+ f"Its missing the following time steps: {timesteps.difference(data.index)}. "
67
+ f"Some parameters might need an extra timestep at the end.")
66
68
  if not len(data.columns) == 1:
67
69
  raise ConversionError('DataFrame must have exactly one column')
68
70
  return xr.DataArray(data.values.flatten(), coords=coords, dims=dims)
69
71
  elif isinstance(data, pd.Series):
70
72
  if not data.index.equals(timesteps):
71
- raise ConversionError("Series index doesn't match timesteps index")
73
+ raise ConversionError(f"Series index doesn't match timesteps index. "
74
+ f"Its missing the following time steps: {timesteps.difference(data.index)}. "
75
+ f"Some parameters might need an extra timestep at the end.")
72
76
  return xr.DataArray(data.values, coords=coords, dims=dims)
73
77
  elif isinstance(data, np.ndarray):
74
78
  if data.ndim != 1:
flixopt/effects.py CHANGED
@@ -94,7 +94,7 @@ class Effect(Element):
94
94
  f'{self.label_full}|minimum_operation_per_hour', self.minimum_operation_per_hour
95
95
  )
96
96
  self.maximum_operation_per_hour = flow_system.create_time_series(
97
- f'{self.label_full}|maximum_operation_per_hour', self.maximum_operation_per_hour, flow_system
97
+ f'{self.label_full}|maximum_operation_per_hour', self.maximum_operation_per_hour,
98
98
  )
99
99
 
100
100
  self.specific_share_to_other_effects_operation = flow_system.create_effect_time_series(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flixopt
3
- Version: 2.1.1
3
+ Version: 2.1.3
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>
@@ -22,40 +22,40 @@ Classifier: License :: OSI Approved :: MIT License
22
22
  Requires-Python: >=3.10
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
- Requires-Dist: numpy>=1.21.5
26
- Requires-Dist: PyYAML>=6.0
27
- Requires-Dist: linopy>=0.5.1
28
- Requires-Dist: netcdf4>=1.6.1
29
- Requires-Dist: rich>=13.0.1
25
+ Requires-Dist: numpy<3,>=1.21.5
26
+ Requires-Dist: pandas<3,>=2.0.0
27
+ Requires-Dist: linopy<0.6.0,>=0.5.1
28
+ Requires-Dist: netcdf4<2,>=1.6.1
29
+ Requires-Dist: PyYAML<7,>=6.0.0
30
+ Requires-Dist: rich>=13.0.0
31
+ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
30
32
  Requires-Dist: highspy>=1.5.3
31
- Requires-Dist: pandas<3,>=2
32
- Requires-Dist: matplotlib>=3.5.2
33
- Requires-Dist: plotly>=5.15
34
- Requires-Dist: tomli>=2.0.1
33
+ Requires-Dist: matplotlib<4.0.0,>=3.5.2
34
+ Requires-Dist: plotly<6.0.0,>=5.15.0
35
35
  Provides-Extra: dev
36
- Requires-Dist: pytest; extra == "dev"
37
- Requires-Dist: ruff; extra == "dev"
36
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
37
+ Requires-Dist: ruff>=0.9.0; extra == "dev"
38
38
  Requires-Dist: pyvis==0.3.1; extra == "dev"
39
- Requires-Dist: tsam>=2.3.1; extra == "dev"
40
- Requires-Dist: scipy>=1.15.1; extra == "dev"
41
- Requires-Dist: gurobipy>=10.0; extra == "dev"
39
+ Requires-Dist: tsam<3.0.0,>=2.3.1; extra == "dev"
40
+ Requires-Dist: scipy<2.0.0,>=1.15.1; extra == "dev"
41
+ Requires-Dist: gurobipy>=10.0.0; extra == "dev"
42
42
  Provides-Extra: full
43
43
  Requires-Dist: pyvis==0.3.1; extra == "full"
44
- Requires-Dist: tsam>=2.3.1; extra == "full"
45
- Requires-Dist: scipy>=1.15.1; extra == "full"
46
- Requires-Dist: streamlit>=1.44.0; extra == "full"
47
- Requires-Dist: gurobipy>=10.0; extra == "full"
44
+ Requires-Dist: tsam<3.0.0,>=2.3.1; extra == "full"
45
+ Requires-Dist: scipy<2.0.0,>=1.15.1; extra == "full"
46
+ Requires-Dist: streamlit<2.0.0,>=1.44.0; extra == "full"
47
+ Requires-Dist: gurobipy>=10.0.0; extra == "full"
48
48
  Provides-Extra: docs
49
- Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
50
- Requires-Dist: mkdocstrings-python; extra == "docs"
51
- Requires-Dist: mkdocs-table-reader-plugin; extra == "docs"
52
- Requires-Dist: mkdocs-gen-files; extra == "docs"
53
- Requires-Dist: mkdocs-include-markdown-plugin; extra == "docs"
54
- Requires-Dist: mkdocs-literate-nav; extra == "docs"
55
- Requires-Dist: markdown-include; extra == "docs"
56
- Requires-Dist: pymdown-extensions; extra == "docs"
57
- Requires-Dist: pygments; extra == "docs"
58
- Requires-Dist: mike; extra == "docs"
49
+ Requires-Dist: mkdocs-material<10,>=9.0.0; extra == "docs"
50
+ Requires-Dist: mkdocstrings-python>=1.0.0; extra == "docs"
51
+ Requires-Dist: mkdocs-table-reader-plugin>=2.0.0; extra == "docs"
52
+ Requires-Dist: mkdocs-gen-files>=0.4.0; extra == "docs"
53
+ Requires-Dist: mkdocs-include-markdown-plugin>=6.0.0; extra == "docs"
54
+ Requires-Dist: mkdocs-literate-nav>=0.6.0; extra == "docs"
55
+ Requires-Dist: markdown-include>=0.8.0; extra == "docs"
56
+ Requires-Dist: pymdown-extensions>=10.0.0; extra == "docs"
57
+ Requires-Dist: pygments>=2.14.0; extra == "docs"
58
+ Requires-Dist: mike<2,>=1.1.0; extra == "docs"
59
59
  Dynamic: license-file
60
60
 
61
61
  # FlixOpt: Energy and Material Flow Optimization Framework
@@ -9,12 +9,6 @@ docs/images/architecture_flixOpt-pre2.0.0.png,sha256=9RWSA3vys588aadr2437zor-_-x
9
9
  docs/images/architecture_flixOpt.png,sha256=KjN1bJwESbkHmTW7UsJ7dZyiKZlTO7Dx20dg8KlR1HU,260219
10
10
  docs/images/flixopt-icon.svg,sha256=_1a6bk2pDOVEy233LC1nM6jZ35NdzD8Hd3UqGxW1Xpg,135341
11
11
  docs/javascripts/mathjax.js,sha256=lkPNMk5XrDlyut9e5nGHgpN7gFl8OejpdJJ_gRW_14k,401
12
- docs/release-notes/_template.txt,sha256=j65E_FDxzimkcMXBrXyF6b2KPm0KAiQlGTxfhQHnN7c,496
13
- docs/release-notes/index.md,sha256=6VslOEfF3KQQCbntguRKz7uGWd_W_KIYotP8L1fzAeI,227
14
- docs/release-notes/v2.0.0.md,sha256=eauxvCH3O0B054vhbP0G8GdeF2LM__J57VAGYRFQzBg,4676
15
- docs/release-notes/v2.0.1.md,sha256=_0oqZjogRv_x6DToWih78uhHu65-J1tat5A1asYxg50,398
16
- docs/release-notes/v2.1.0.md,sha256=uUnlzG61rI2PYce1SxIySYOnW55e_vnJYJN7l8lcB8A,1325
17
- docs/release-notes/v2.1.1.md,sha256=Y9cMiB6LeO6rZexJ9DD9BEl5mnrP8GLcf9nDtOLfIgc,217
18
12
  docs/user-guide/index.md,sha256=fxI_bMjz7czJ5aF_7D7l5rQVpc03WV2EAaBo9y3gB2g,7452
19
13
  docs/user-guide/Mathematical Notation/Bus.md,sha256=getjae_-rNTXbotO0euXwYCq2arBoayKsN9KeFb2u60,1612
20
14
  "docs/user-guide/Mathematical Notation/Effects, Penalty & Objective.md",sha256=RNqcJzNI1E-U01gaeoKu7m-7gjmtDWvjr2Y5JK9YgTA,5685
@@ -28,11 +22,11 @@ flixopt/__init__.py,sha256=F49OK5QLUnMGmsaKQ-G0dXsVuKr9Ow_pjM4KMSNZ918,614
28
22
  flixopt/aggregation.py,sha256=UaAYh34C4XhDgiSs4lm31XEMLr4YO5BzLKUAx4NQuyI,17002
29
23
  flixopt/calculation.py,sha256=1Hs9dc6eqdJoHT6Dd3NlwdRORFO2vKdKx38o95FPxJE,20016
30
24
  flixopt/commons.py,sha256=ZNlUN1z-h9OGHPo-s-n5OLlJaoPZKVGcAdRyGKpMk4M,1256
31
- flixopt/components.py,sha256=WXSljJNnEXyQLXMQQRwMfkugus3qTmIu9bPcknzvr1w,29121
25
+ flixopt/components.py,sha256=7vI0IzWBLj81IErPllWHbMMqrrPlplYOPcH3aHvDbeY,29124
32
26
  flixopt/config.py,sha256=Kt8QYk7hX5qHcQUtfgjM862C6SQr4K2lDvtk_LLER8Y,9085
33
27
  flixopt/config.yaml,sha256=imzAnnhcJhIfKNTTXFB5Td7Pvk5ARn5j720k-oGGRug,392
34
- flixopt/core.py,sha256=JGsnw-VsNCQW2zDl0kMwhcPIzq08DJmcRQ02nLyDvIg,37633
35
- flixopt/effects.py,sha256=SGDIlo7VVIlMp-AeAyZx4CRJcUmpjFYqEq3lpBY8NEg,16662
28
+ flixopt/core.py,sha256=dBdAzA3khIe64aVGpPj3G5PzOr7RdGdSymnV3xWgaR8,38083
29
+ flixopt/effects.py,sha256=TKpUfUo0wbX5y5HS9U8HcDNOiygg0R7k9V3TM0G6uL4,16650
36
30
  flixopt/elements.py,sha256=9P2uB3twwADf48Gx1xCluE-ZJCkzw0X7tYrtKEQOjk8,26932
37
31
  flixopt/features.py,sha256=sEtdj7BpaYS9a0XdhRUtdDFXWLdaGABRXdi5JOoLPb0,43919
38
32
  flixopt/flow_system.py,sha256=4D2u2ucLig0GbC7ksCuWXuZPZdkgDzPafv-GhjAxRyk,17479
@@ -44,16 +38,16 @@ flixopt/results.py,sha256=GKSZmz0GCuJwspTC8Ot6MOKinvy_mhnDXCafb_f7uVY,35161
44
38
  flixopt/solvers.py,sha256=k1bSoiXec3asWED70-erXkgtpn2C8KRBfSZj0FLviSM,2436
45
39
  flixopt/structure.py,sha256=QS0IFBHzdEMKYTgd6uosudhoDD4X0JcdF7LlS-XRacs,26295
46
40
  flixopt/utils.py,sha256=f-_vFDvvG27-c_VMpzkv3lb79Yny4rvoSmemushbzhU,1687
47
- flixopt-2.1.1.dist-info/licenses/LICENSE,sha256=HKsZnbrM_3Rvnr_u9cWSG90cBsj5_slaqI_z_qcxnGI,1118
41
+ flixopt-2.1.3.dist-info/licenses/LICENSE,sha256=HKsZnbrM_3Rvnr_u9cWSG90cBsj5_slaqI_z_qcxnGI,1118
48
42
  pics/architecture_flixOpt-pre2.0.0.png,sha256=9RWSA3vys588aadr2437zor-_-xBTQNQ0bAf8xGcu5g,70605
49
43
  pics/architecture_flixOpt.png,sha256=KjN1bJwESbkHmTW7UsJ7dZyiKZlTO7Dx20dg8KlR1HU,260219
50
44
  pics/flixOpt_plotting.jpg,sha256=zn7ZPAtXm5eRTxtOj86e4-PPhHpCar1jqGh7vMBgQGY,518862
51
45
  pics/flixopt-icon.svg,sha256=_1a6bk2pDOVEy233LC1nM6jZ35NdzD8Hd3UqGxW1Xpg,135341
52
46
  pics/pics.pptx,sha256=ImWeGGvjtWJ6BGruipsnZYmWtHj5sWdbw1NSFePbkC8,683344
47
+ scripts/extract_release_notes.py,sha256=0v8B9c6VXz55PJ0I08W7FdxGp7jEY5NOkrqMY6MNdYU,1249
53
48
  scripts/gen_ref_pages.py,sha256=AYRtXyz78x5I_Hn0oRtGVbTxgLLj2QNyRX6vWRefPjc,1960
54
- site/release-notes/_template.txt,sha256=j65E_FDxzimkcMXBrXyF6b2KPm0KAiQlGTxfhQHnN7c,496
55
49
  tests/ressources/Zeitreihen2020.csv,sha256=kbsDTKZS0iUsNZAS7m3DohzZI_OHHWe44s3GwLvcTLw,1918412
56
- flixopt-2.1.1.dist-info/METADATA,sha256=3n5YyOC_w1ySnHAFZwJtYGUGEfboRLbYYFXOSKiNxaU,7155
57
- flixopt-2.1.1.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
58
- flixopt-2.1.1.dist-info/top_level.txt,sha256=U8aoMBkjiSFi7j4zgUOVgvgmyT5a1LnIArZI6TWdk-g,37
59
- flixopt-2.1.1.dist-info/RECORD,,
50
+ flixopt-2.1.3.dist-info/METADATA,sha256=cSd4EsEZzh5eFULFQgMtUICK26BxUIbFwM1vw5CCLDs,7343
51
+ flixopt-2.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
52
+ flixopt-2.1.3.dist-info/top_level.txt,sha256=DEuo4R1z7GmEp5R3pjbQEJbaPRjKHFvNX2ceiBnVOL0,32
53
+ flixopt-2.1.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -2,5 +2,4 @@ docs
2
2
  flixopt
3
3
  pics
4
4
  scripts
5
- site
6
5
  tests
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Extract release notes from CHANGELOG.md for a specific version.
4
+ Usage: python extract_release_notes.py <version>
5
+ """
6
+
7
+ import re
8
+ import sys
9
+ from pathlib import Path
10
+
11
+
12
+ def extract_release_notes(version: str) -> str:
13
+ """Extract release notes for a specific version from CHANGELOG.md"""
14
+ changelog_path = Path("CHANGELOG.md")
15
+
16
+ if not changelog_path.exists():
17
+ print("❌ Error: CHANGELOG.md not found", file=sys.stderr)
18
+ sys.exit(1)
19
+
20
+ content = changelog_path.read_text(encoding='utf-8')
21
+
22
+ # Pattern to match version section: ## [2.1.2] - 2025-06-14
23
+ pattern = rf'## \[{re.escape(version)}\] - [^\n]+\n(.*?)(?=\n## \[|\n\[Unreleased\]|\Z)'
24
+ match = re.search(pattern, content, re.DOTALL)
25
+
26
+ if not match:
27
+ print(f"❌ Error: No release notes found for version '{version}'", file=sys.stderr)
28
+ sys.exit(1)
29
+
30
+ return match.group(1).strip()
31
+
32
+
33
+ def main():
34
+ if len(sys.argv) != 2:
35
+ print("Usage: python extract_release_notes.py <version>")
36
+ print("Example: python extract_release_notes.py 2.1.2")
37
+ sys.exit(1)
38
+
39
+ version = sys.argv[1]
40
+ release_notes = extract_release_notes(version)
41
+ print(release_notes)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ main()
@@ -1,32 +0,0 @@
1
- # Release v{version}
2
-
3
- **Release Date:** YYYY-MM-DD
4
-
5
- ## What's New
6
-
7
- * Feature 1 - Description
8
- * Feature 2 - Description
9
-
10
- ## Improvements
11
-
12
- * Improvement 1 - Description
13
- * Improvement 2 - Description
14
-
15
- ## Bug Fixes
16
-
17
- * Fixed issue with X
18
- * Resolved problem with Y
19
-
20
- ## Breaking Changes
21
-
22
- * Change 1 - Migration instructions
23
- * Change 2 - Migration instructions
24
-
25
- ## Deprecations
26
-
27
- * Feature X will be removed in v{next_version}
28
-
29
- ## Dependencies
30
-
31
- * Added dependency X v1.2.3
32
- * Updated dependency Y to v2.0.0
@@ -1,7 +0,0 @@
1
- # Release Notes
2
-
3
- This page provides links to release notes for all versions of flixopt.
4
-
5
- ## Latest Release
6
-
7
- * [v2.0.0](v2.0.0.md) - 29.03.2025 - Migration from pyomo to linopy. Alround improvements in performance and usability
@@ -1,93 +0,0 @@
1
- # Release v2.0.0
2
-
3
- **Release Date:** March 29, 2025
4
-
5
- ## 🚀 Major Framework Changes
6
-
7
- - **Migration from Pyomo to Linopy**: Completely rebuilt the optimization foundation to use Linopy instead of Pyomo
8
- - Significant performance improvements, especially for large models
9
- - Internal useage of linopys mathematical modeling language
10
- - **xarray-Based Data Architecture**: Redesigned data handling to rely on xarray.Dataset throughout the package for:
11
- - Improved solution representation and analysis
12
- - Enhanced time series management
13
- - Consistent serialization across all elements
14
- - Reduced file size and improved performance
15
- - **Saving and restoring unsolved Models**: The FlowSystem is now fully serializable and can be saved to a file.
16
- - Share your work with others by saving the FlowSystem to a file
17
- - Load a FlowSystem from a file to extend or modify your work
18
-
19
- ## 🔧 Key Improvements
20
-
21
- ### Model Handling
22
-
23
- - **Extend every flixopt model with the linopy language**: Add any additional constraint or variable to your flixopt model by using the linopy language.
24
- - **Full Model Export/Import**: As a result of the migration to Linopy, the linopy.Model can be exported before or after the solve.
25
- - **Improved Infeasible Model Handling**: Added better detection and reporting for infeasible optimization models
26
- - **Improved Model Documentation**: Every model can be documented in a .yaml file, containing human readable mathematical formulations of all variables and constraints. THis is used to document every Calculation.
27
-
28
- ### Calculation Results and documentation:
29
- The `CalculationResults` class has been completely redesigned to provide a more streamlined and intuitive interface.
30
- Accessing the results of a Calculation is now as simple as:
31
- ```python
32
- fx.FullCalculation('Sim1', flow_system)
33
- calculation.solve(fx.solvers.HighsSolver())
34
- calculation.results # This object can be entirely saved and reloaded to file without any information loss
35
- ```
36
- This access doesn't change if you save and load the results to a file or use them in your script directly!
37
-
38
- - **Improved Documentation**: The FlowSystem as well as a model Documentation is created for every model run.
39
- - **Results without saving to file**: The results of a Calculation can now be properly accessed without saving the results to a file first.
40
- - **Unified Solution exploration**: Every `Calculation` has a `Calculation.results` attribute, which accesses the solution. This can be saved and reloaded without any information loss.
41
- - **Improved Calculation Results**: The results of a Calculation are now more intuitive and easier to access. The `CalculationResults` class has been completely redesigned to provide a more streamlined and intuitive interface.
42
-
43
- ### Data Management & I/O
44
-
45
- - **Unified Serialization**: Standardized serialization and deserialization across all elements
46
- - **Compression Support**: Added data compression when saving results to reduce file size
47
- - **to_netcdf/from_netcdf Methods**: Added for FlowSystem and other core components
48
-
49
- ### Details
50
- #### TimeSeries Enhancements
51
-
52
- - **xarray Integration**: Redesigned TimeSeries to depend on xr.DataArray
53
- - **datatypes**: Added support for more datatypes, with methods for conversion to TimeSeries
54
- - **Improved TimeSeriesCollection**: Enhanced indexing, representation, and dataset conversion
55
- - **Simplified Time Management**: Removed period concepts and focused on timesteps for more intuitive time handling
56
-
57
- ## 📚 Documentation
58
-
59
- - Improved documentation of the FlixOpt API and mathematical formulations
60
- - **Google Style Docstrings**: Updated all docstrings to Google style format
61
-
62
- ## 🔄 Dependencies
63
-
64
- - **Linopy**: Added as the core dependency replacing Pyomo
65
- - **xarray**: Now a critical dependency for data handling and file I/O
66
- - **netcdf4**: Dependency for fast and efficient file I/O
67
-
68
- ### Dropped Dependencies
69
- - **pyomo**: Replaced by linopy as the modeling language
70
-
71
- ## 📋 Migration Notes
72
-
73
- This version represents a significant architecture change. If you're upgrading:
74
-
75
- - Code that directly accessed Pyomo models will need to be updated to work with Linopy
76
- - Data handling now uses xarray.Dataset throughout, which may require changes in how you interact with results
77
- - The way labels are constructed has changed throughout the system
78
- - The results of calculations are now handled differently, and may require changes in how you access results
79
- - The framework was renamed from flixOpt to flixopt. Use `import flixopt as fx`.
80
-
81
- For complete details, please refer to the full commit history.
82
-
83
- ## Installation
84
-
85
- ```bash
86
- pip install flixopt==2.0.0
87
- ```
88
-
89
- ## Upgrading
90
-
91
- ```bash
92
- pip install --upgrade flixopt
93
- ```
@@ -1,12 +0,0 @@
1
- # Release v2.0.1
2
-
3
- **Release Date:** 2025-04-10
4
-
5
- ## Improvements
6
-
7
- * Add logger warning if relative_minimum is used without on_off_parameters in Flow, as this prevents the flow_rate from switching "OFF"
8
-
9
- ## Bug Fixes
10
-
11
- * Replace "|" with "__" in filenames when saving figures, as "|" can lead to issues on windows
12
- * Fixed a Bug that prevented the load factor from working without InvestmentParameters
@@ -1,31 +0,0 @@
1
- # Release v2.1.0
2
-
3
- **Release Date:** 2025-04-11
4
-
5
- ## Improvements
6
-
7
- * Add logger warning if relative_minimum is used without on_off_parameters in Flow, as this prevents the flow_rate from switching "OFF"
8
- * Python 3.13 support added
9
- * Greatly improved internal testing infrastructure by leveraging linopy's testing framework
10
-
11
- ## Bug Fixes
12
-
13
- * Bugfixing the lower bound of `flow_rate` when using optional investments without OnOffParameters.
14
- * Fixes a Bug that prevented divest effects from working.
15
- * added lower bounds of 0 to two unbounded vars (only numerical better)
16
-
17
- ## Breaking Changes
18
-
19
- * We restructured the modeling of the On/Off state of FLows or Components. This leads to slightly renaming of variables and constraints.
20
-
21
- ### Variable renaming
22
- * "...|consecutive_on_hours" is now "...|ConsecutiveOn|hours"
23
- * "...|consecutive_off_hours" is now "...|ConsecutiveOff|hours"
24
-
25
- ### Constraint renaming
26
- * "...|consecutive_on_hours_con1" is now "...|ConsecutiveOn|con1"
27
- * "...|consecutive_on_hours_con2a" is now "...|ConsecutiveOn|con2a"
28
- * "...|consecutive_on_hours_con2b" is now "...|ConsecutiveOn|con2b"
29
- * "...|consecutive_on_hours_initial" is now "...|ConsecutiveOn|initial"
30
- * "...|consecutive_on_hours_minimum_duration" is now "...|ConsecutiveOn|minimum"
31
- The same goes for "...|consecutive_off..." --> "...|ConsecutiveOff|..."
@@ -1,11 +0,0 @@
1
- # Release v2.1.1
2
-
3
- **Release Date:** 2025-05-08
4
-
5
- ## Improvements
6
-
7
- * Improving docstring and tests
8
-
9
- ## Bug Fixes
10
-
11
- * Fixing bug in the `_ElementResults.constraints` not returning the constraints but rather the variables
@@ -1,32 +0,0 @@
1
- # Release v{version}
2
-
3
- **Release Date:** YYYY-MM-DD
4
-
5
- ## What's New
6
-
7
- * Feature 1 - Description
8
- * Feature 2 - Description
9
-
10
- ## Improvements
11
-
12
- * Improvement 1 - Description
13
- * Improvement 2 - Description
14
-
15
- ## Bug Fixes
16
-
17
- * Fixed issue with X
18
- * Resolved problem with Y
19
-
20
- ## Breaking Changes
21
-
22
- * Change 1 - Migration instructions
23
- * Change 2 - Migration instructions
24
-
25
- ## Deprecations
26
-
27
- * Feature X will be removed in v{next_version}
28
-
29
- ## Dependencies
30
-
31
- * Added dependency X v1.2.3
32
- * Updated dependency Y to v2.0.0