What's Changed
This release adds new features for LP/MILP problem export and custom solver plugin integration, migrates the build tooling to uv, and includes several performance improvements and bug fixes. Python support is updated to 3.10–3.14.
Features
- optimization: Add LP file export for linear problems by @jarsarasty in #1752
- feat(util): Add
RTCTOOLS_EXTRA_CASADIPATHfor custom solver plugin path by @jarsarasty in #1767 - CollocatedIntegratedOptimizationProblem: Add option to inline delay expressions by @jbaayen in #1712
- pi: Check assumption of zero-based
ensembleMemberIndexby @Ailbhemit in #1721 - Examples: Add fallback solver example by @SGeeversAtVortech in #1680
Bug Fixes
- fix(optimization): Correct downhill logic and orifice flow constraints by @k-horvath-deltares in #1803
- fix(optimization): Raise
ValueErrorfor non-symbolic scalar constraints by @jarsarasty in #1755 - fix(optimization): Correct previously introduced wrong solver flag when the run fails by @k-horvath-deltares in #1703
- fix(optimization): Fix delay expression for models containing extra variables by @k-horvath-deltares in #1746
- ControlTreeMixin: Fix overflow by using
int64rather thanint16for control indices by @jbaayen in #1707 - pi: Fix incorrect assumption that the longest timeseries covers all timesteps — use union of all timeseries times instead by @k-horvath-deltares in #1710
- fix: Element count for path variable slices by @jarsarasty in #1784
- fix(rtctoolsapp): Fix download examples from release zipball by @FaridAlavi in #1805
- SinglePassGPMixin: Fix seeding of epsilons for the first priority by @jackvreeken in #1723
- CollInt: Fix symbolic parameter substitution by @jackvreeken in #1701
- CollInt/casadi_helpers: Fix NumPy 2.4 error, CasADi 3.6 substitution and related lowest/highest dependency issues by @jackvreeken in #1743
- pyproject.toml: Fix allowing CasADi 3.7.* by @jackvreeken in #1708
- doc/conf.py: Fix version import after hatch-vcs migration by @jackvreeken in #1736
Performance
- CollInt: Optimize performance of
inline_delay_expressionsby @jackvreeken in #1726 - CollInt: Optimize constant input mapping by avoiding repacking by @jackvreeken in #1732
Compatibility
- Python: Bump to Python 3.10–3.14; drop 3.9 by @jackvreeken in #1729
- pymoca: Bump to
0.11.*and addrtc-tools-standard-librarydependency by @jarsarasty in #1764 - build: Pin pymoca to
0.9.*and fix download URL scheme by @jarsarasty in #1802 - Modernize type hints to align with Python 3.10+ standards by @jackvreeken in #1727
Build / Tooling
- Use uv as package manager by @jackvreeken in #1695
- CI: Test with oldest and newest versions of dependencies by @jackvreeken in #1696
- CI: Fix CI/CD — remove SonarCloud, update repository references by @jackvreeken in #1728
- CI: Add SonarQube Cloud config and scan by @ModeSevenIndustrialSolutions in #1786
- CI: Allow SonarQube scan step to fail without blocking CI by @jarsarasty in #1788
- CI: Run examples job on pull requests by @jarsarasty in #1778
- Workflows: Pin setup-uv to specific commit SHA for security by @jarsarasty in #1716
- deps: Update vulnerable transitive dependencies by @jarsarasty in #1779
- build(deps): Bump pillow from 12.0.0 to 12.2.0 by @dependabot in #1749, #1781
- build(deps): Bump urllib3 from 2.5.0 to 2.7.0 by @dependabot in #1751, #1791
- build(deps): Bump uv from 0.9.24 to 0.11.15 by @dependabot in #1793, #1800
- build(deps): Bump idna from 3.11 to 3.15 by @dependabot in #1794
- build(deps-dev): Bump pytest from 8.4.0 to 9.0.3 by @dependabot in #1792
Testing
- test(modelica_mixin): Replace repr() comparisons with numerical evaluation by @jarsarasty in #1780
Documentation
- doc: Add LF Energy branding, logo, and improve docs build setup by @jarsarasty in #1750
- docs: Add LF Energy governance and update documentation by @jarsarasty in #1705
- docs: Add section on building the documentation to CONTRIBUTING.md by @jarsarasty in #1765
- docs: Update documentation to align with LF Energy project description by @jarsarasty in #1734
- Doc: Add 'related projects' to ToC by @jbaayen in #1737
- Doc: Fix Sphinx errors by @BernhardBecker in #1774
- docs: Update link to 'Modelica by Example' in modelica_models.rst by @jarsarasty in #1714
- docs(readme): Add TeamCity, PyPI, LFX Health Score, and license badges by @jarsarasty in #1809
- docs(readme): Update SonarCloud badges by @FaridAlavi in #1806
- Update README.md by @BernhardBecker in #1713
- AUTHORS: Update list by @jarsarasty in #1719
Full Changelog: 2.7.3...2.8.0