Releases: Deltares/Ribasim
v2024.11.0
This major new release contains many improvements. A new formulation allows much smaller water balance errors, which is combined with several performance improvements. Ribasim Python does more validation that was previously only done in the core. The Ribasim QGIS plugin now sets the relations between tables for easier model inspection. Adding min_upstream_level
and max_downstream_level
to Pump and Outlet means DiscreteControl is often no longer needed.
The most significant breaking change is making the node_id
and edge_id
the index of the Node and Edge table; these need to be globally unique.
Starting from this release Ribasim is labeled as beta software. Since development is currently mainly driven by applications in the Dutch water system, we expect that addition work needs to be done for general use outside the Netherlands.
For coupled simulation with MODFLOW and/or MetaSWAP, this release is part of the iMOD Coupler, specifically release v2024.4.0
Added
- Support discrete control based on an external concentration condition. #1660
- Add
results/solver_stats.arrow
with solver statistics over time. #1677 - Add icon to
ribasim.exe
on Windows. #1712 - Save QGIS styling in the model database. #1713
- Add Delwaq coupling guide. #1619
- Solver speedup due to backtracking relaxation. #1761
- Reject adding a duplicate edge in Python. #1719
- Support transient UserDemand return factor. #1727
- Document the interpolation of input data. #1720
- Automate Jacobian sparsity detection. #1606
- Support specifying the
edge_id
asmodel.edge.add(a, b, edge_id=5)
. #1737 - Use https://ribasim.org/ to host our documentation. #1736
- Validate geometry types in Python. #1760
- Add relationships between tables in QGIS. #1755
- Support migrating from older Ribasim versions in Python. #1764
- Add quick start guide to docs. #1787
- Add
min_upstream_level
andmax_downstream_level
to Pump and Outlet. #1792 - Add
max_downstream_level
to TabulatedRatingCurve. #1795 - Validate edge connections in Python. #1765
- Add low storage reduction factor to ManningResistance. #1796
Changed
- Refactor of the core to ensure smaller water balance errors. #1819
- Make
node_id
globally unique. #1717 - Make the Node ID the index of the Node table, and Edge ID for Edge. #1737
- Make more Python functions private. #1702
- Put the contents of the CLI zips in a folder. #1722
- Changed water balance error definition. #1767
- Disallow missing priority parameter when using allocation. #1745
- Rename Outlet's
min_crest_level
tomin_upstream_level
. #1788 - Only allow flow under gravity in TabulatedRatingCurve. #1795
- Use
dtype_backend="pyarrow"
for Pandas DataFrames. #1781
Fixed
All changes
What's Changed
- Use install-ci on CI by @visr in #1656
- Update release process a bit by @visr in #1657
- Update basin.qmd by @Fati-Mon in #1662
- Remove
SmoothInterpolation
as a dependency by @SouthEndMusic in #1649 - Delwaq pixi run install-ci by @visr in #1664
- Listen to concentration by @SouthEndMusic in #1660
- test
libribasim.get_value_ptr
with all names by @SouthEndMusic in #1665 - Refactor build pipeline by @Manangka in #1645
- Ruff: apply all fixes by @visr in #1667
- Add technical documentation for allocation by @Jingru923 in #1579
- Fix development tools by @deltamarnix in #1670
get_value_ptr("basin.subgrid_level")
now return non-nan values by @Jingru923 in #1671- Update pre-commit hooks by @github-actions in #1673
- Update pixi lock file by @github-actions in #1692
- Pin older Delwaq build by @evetion in #1694
- Add
Makie
extension to Ribasim core by @SouthEndMusic in #1675 - Write output table with solver stats per saveat by @SouthEndMusic in #1677
- Fix links in Python README.md files by @visr in #1696
- Use
BackTracking
in non-linear interations by @SouthEndMusic in #1697 - Make more python functions private by @SouthEndMusic in #1702
- Plot labels + clean up running instructions in examples notebook by @SouthEndMusic in #1699
- Enforce aspect ratio bound and limit figure size in docs by @SouthEndMusic in #1706
- Update pixi lockfile by @github-actions in #1708
- Update GitHub action for updating lockfiles by @visr in #1701
- Use pixi to fix julia package permissions on Windows by @evetion in #1710
- Update figures in README and docs homepage by @SouthEndMusic in #1711
- [chore] Make mypy happy again by @evetion in #1714
- Add "add icon" step to windows pipeline by @Jingru923 in #1712
- Save QGIS styles in geopackage and remove them from QGIS plugin by @evetion in #1713
- Use a fixed relaxation factor of 0.1 by @visr in #1715
- Add Delwaq coupling guide by @evetion in #1619
- Regression tests for ODE solver and integration tests for production model is in place by @Jingru923 in #1695
- Make node_id globally unique (again) by @evetion in #1717
- no more Zip bomb from built binaries by @Jingru923 in #1722
- Duplicate edges by @Jingru923 in #1719
- fix regression test after global uniq id by @Jingru923 in #1728
- Use targets for windows specific pipeline by @evetion in #1731
- Support transient user demand return factor by @Jingru923 in #1727
- Interpolation documentation by @SouthEndMusic in #1720
- Symbolic Jacobian sparsity by @visr in #1606
- Make edge_id user configurable by @evetion in #1737
- Document dependency use by @SouthEndMusic in #1738
- Add CNAME file for docs deployment by @evetion in #1742
- clarify priority in user demand node by @Jingru923 in #1746
- Use relaxed square root for ManningResistance by @SouthEndMusic in #1750
- Use ribasim.org domain name by @visr in #1736
- Load qml styles in QGIS by @evetion in #1748
- Move from ReTestItems to TestItemRunner by @visr in #1758
- Remove TimerOutputs by @visr in #1749
- refactor
get_influx
for performance by @SouthEndMusic in #1753 - Validate geometry types in Python. by @evetion in #1760
- Remove
build
package from our environment. by @deltamarnix in #1766 - Initial qgis test pla...
v2024.10.0
For this release we said goodbye to the problematic FractionalFlow node, but welcome the ContinuousControl as a long requested feature.
Added
- Control: Add ContinuousControl node type. #1602
- Control: Support listening to flow through connector nodes. #1594
- Validate that TabulatedRatingCurve levels are above Basin bottom. #1607
- Validate that Outlet crest levels are above Basin bottom. #1607
- Always show convergence bottlenecks. #1636
- Docstrings for Ribasim Python. #1643
- Allocate to UserDemand from directly connected Basin if possible. #1581
- Add
basin_state.arrow
results. #1626 - Also write stacktraces to
ribasim.log
. #1653
Changed
- Require QGIS 3.34 (LTR) or newer for Ribasim QGIS plugin.
Fixed
- Compatibility with latest NumPy, Pandera and PyArrow releases. #1618
- LevelDemand can now be without
min_level
ormax_level
. #1629
Removed
- Removed unused urban runoff variable from Basin. #1611
- Removed unneeded static table from Terminal. #1624
- Removed FractionalFlow node. #1616
All changes
What's Changed
- change the names of artifacts by @Jingru923 in #1572
- quick fix the name of our executables by @Jingru923 in #1578
- Fix QGIS crash on plugin initialization by @visr in #1580
- Add controllable parameters table by @SouthEndMusic in #1584
- Update Julia manifest by @github-actions in #1598
- Support listening to flows trough conservative connector nodes by discrete control by @SouthEndMusic in #1594
- CompatHelper: bump compat for TranscodingStreams to 0.11 for package core, (keep existing compat) by @github-actions in #1604
- Fix cascading polders image in docs by @visr in #1613
- Stop using local JULIAUP_DEPOT_PATH by @visr in #1614
- Use the latest greatest Python deps by @evetion in #1618
- Use pixi update to update lockfile by @visr in #1622
- Validate level with upstream basin by @Jingru923 in #1607
- Remove urban_runoff from Basin by @visr in #1611
- Remove
Terminal / static
table by @visr in #1624 - Fix DataInterpolations to 0.5.2 by @visr in #1628
- Remove FractionalFlow by @visr in #1616
- Require QGIS 3.34 (LTR); remove activation scripts by @visr in #1627
- Take discontinuities in flow introduced through BMI into account by @SouthEndMusic in #1634
- Fix the failing pipeline by @Manangka in #1640
- Always show convergence bottlenecks by @visr in #1636
- Resolve the SSL error produced when running the build task on windows by @Manangka in #1644
level_demand
can now be without max_level or min_level by @Jingru923 in #1629- Remove unapplied patches by @Manangka in #1646
- QGIS: Update minimal TOML with new required fields by @visr in #1647
- Update install.qmd by @Fati-Mon in #1642
- Update docstrings of Ribasim python API by @SouthEndMusic in #1643
- Add
ContinuousControl
node by @SouthEndMusic in #1602 - Improve subprocess docs by @visr in #1650
- Allocate to UserDemand from directly connected basin if possible by @SouthEndMusic in #1581
- Add
basin_state.arrow
results by @visr in #1626 - Log stacktraces by @visr in #1653
- Prepare release 2024.10.0 by @visr in #1654
Full Changelog: v2024.9.0...v2024.10.0
v2024.9.0
Added
- Support for concentration state and time for Delwaq coupling.
- Show exact commit on
ribasim --version
if it is not a release. #1479
Changed
- Optimized performance.
- Documentation has been overhauled to be more user-friendly.
- Stricter TabulatedRatingCurve validation. #1469
- Stricter Basin / profile validation. #1486
- Allocation objective function now gives equal ratios during shortage. #1386
Fixed
- Don't require unique node IDs. #1513
All changes
What's Changed
- Bump prefix-dev/setup-pixi from 0.6.0 to 0.7.0 by @dependabot in #1459
- Move to DataInterpolations v5 by @visr in #1464
- Fix subgrid_id in output by @visr in #1466
- Support macOS in our cli build by @evetion in #1476
- Add git status to Ribasim CLI wrapper version by @evetion in #1479
- Offline coupling with Delwaq by @evetion in #1137
- Stricter TabulatedRatingCurve validation by @visr in #1469
- Update Julia manifest by @github-actions in #1488
- Add coupling documentation. by @evetion in #1481
- Fix QGIS 'LevelDemand / static' schema by @visr in #1489
- Stronger 'Basin / profile' validation by @visr in #1486
- Update pixi lock file by @github-actions in #1487
- Support
model.to_xugrid(add_allocation = True)
by @visr in #1478 - Allow
missing
as static user demand by @SouthEndMusic in #1493 - Equal ratio allocation objective take 2 by @SouthEndMusic in #1386
- Run allocation at
t = 0
by @SouthEndMusic in #1496 - Fix github release script by @visr in #1492
- Test Integrating discontinuous flow by @SouthEndMusic in #1499
- Bump prefix-dev/setup-pixi from 0.7.0 to 0.8.0 by @dependabot in #1500
- Update Julia manifest by @github-actions in #1516
- Bump prefix-dev/setup-pixi from 0.8.0 to 0.8.1 by @dependabot in #1518
- Fix edge table in netCDF used for Delwaq coupling. by @evetion in #1519
- Allocation refactoring by @Jingru923 in #1503
- Fix a few issues found by JET by @visr in #1510
- corrected the link in Ribasim Python API readme.md by @Jingru923 in #1523
- Split usage to separate pages by @visr in #1522
- Don't trigger Github CI in a PR on merging Teamcity config commits by @evetion in #1528
- Write Delwaq boundary concentrations with time. Includes basin boundaries. by @evetion in #1524
- Don't require unique node IDs by @visr in #1513
- Update to Julia 1.10.4 by @visr in #1533
- Compute mean realized flows by @SouthEndMusic in #1514
- Generate basin concentration state for Delwaq by @evetion in #1534
- Add subgrid levels results
subgrid_level.arrow
to docs by @Jingru923 in #1525 - Add ipykernel to pixi deps by @evetion in #1542
- Don't write empty result tables by @visr in #1538
- Refactor docs to follow diataxis concept by @evetion in #1541
- Convert TeamCity xml configuration files to Kotlin by @Manangka in #1546
- Discrete Control performance improvements based on AGV model by @SouthEndMusic in #1529
- BMI docs page by @SouthEndMusic in #1521
- Restructure docs a bit more by @visr in #1548
- Include Ribasim Python API reference by @visr in #1553
- Improve first sentence index.qmd by @gijsber in #1557
- Integrate Delwaq into our Python package by @evetion in #1554
- Refactor all the things by @SouthEndMusic in #1559
- Incorporate SmoothInterpolation by @SouthEndMusic in #1543
- line_marker_at_central_point by @DanielTollenaar in #1563
- Move node equations to the node reference pages by @visr in #1564
- Prepare Ribasim release v2024.9.0 by @visr in #1561
- Use keywords for creating parameter structs by @visr in #1566
- Allow for meta_ prefix in spatial tables. by @evetion in #1568
- Auto-generate framework for Python API reference documentation by @Jingru923 in #1565
- Check only connected control states in FractionalFlow validation by @visr in #1569
- Disallow multiple outflows from Outlet at validation by @visr in #1570
Full Changelog: v2024.8.0...v2024.9.0
New Contributors
- @Manangka made their first contribution in #1546
- @DanielTollenaar made their first contribution in #1563
v2024.8.0
Highlights
- Performance improvements have been a focus of this release, giving up to 10x faster runs. #1433, #1436, #1438, #1448, #1457
- Users of the QGIS plugin need to remove the old version to avoid two copies due to #1453.
- If the model does not converge and the used algorithm supports it, we log which Basins don't converge. #1440
- The CLI exe is now always in the root of the zip and makes use of the libribasim shared library. #1415
- If negative storages unadvertently happen, we now throw an error. #1425
- There is more validation on the edges. #1434
What's Changed
- Remove dutch_waterways model by @SouthEndMusic in #1403
- testmodelrun: Actually exit with an error code if it fails by @Hofer-Julian in #1405
- Use pixi task cache by @Jingru923 in #1407
- Bump prefix-dev/setup-pixi from 0.5.2 to 0.6.0 by @dependabot in #1408
- docs: Move from
subprocess.call
tosubprocess.run
by @Hofer-Julian in #1410 - only release if branch stars with v20 by @Jingru923 in #1411
- Use the same network for allocation as for the physical layer by @SouthEndMusic in #1399
- Use a Rust binary to expose Ribasim CLI by @Hofer-Julian in #1415
- Add tstops for more timeseries by @SouthEndMusic in #1418
- update the doc for CI by @Jingru923 in #1421
- Build change follow-ups by @visr in #1420
- Negative storage check by @SouthEndMusic in #1425
- Require pandera 0.18 by @visr in #1426
- FlowBoundary is flow direction constraining by @visr in #1424
- Use mean input in allocation by @SouthEndMusic in #1427
- Don't run allocation if not active during BMI runs by @SouthEndMusic in #1437
- Precalculate resistance neighbors by @visr in #1436
- Update vertical fluxes all at once by @visr in #1433
- Tighten edge validation by @visr in #1434
- Switch to TimeZones release 1.15 by @visr in #1432
- Make LevelDemand min_level and max_level optional by @visr in #1430
- Precalculate Basin neighbors by @visr in #1438
- Avoid unconstrained sections in allocation networks by @SouthEndMusic in #1429
- Update pixi lock file by @github-actions in #1443
- Update julia from 1.10.0 to 1.10.3 by @visr in #1445
- Update pixi lock file by @github-actions in #1450
- Re-enable validation in Ribasim python by @Jingru923 in #1446
- Bump julia-actions/cache from 1 to 2 by @dependabot in #1454
- Rename QGIS plugin to Ribasim by @visr in #1453
- Add waterquality (substance/concentration) tables by @evetion in #1267
- Remove Julia API reference by @visr in #1451
- Let Aqua check for persistent tasks by @visr in #1452
- Pre-calculate flow neighbor IDs for Pump, Outlet, UserDemand, FractionalFlow, TabulatedRatingCurve by @visr in #1448
- Redo the "stop explicitly requiring
--environment=dev
when running pixi install tasks" with new pixi release by @Jingru923 in #1455 - Show convergence bottleneck nodes to users by @SouthEndMusic in #1440
- CompatHelper: bump compat for DataInterpolations to 5 for package core, (keep existing compat) by @github-actions in #1458
- Increase performance by reducing lookups by @SouthEndMusic in #1457
- release Ribasim version 2024.8.0 by @Jingru923 in #1462
Full Changelog: v2024.7.0...v2024.8.0
v2024.7.0
DiscreteControl has been changed. We write all water balance terms to results. And crs
is a new required keyword in the TOML file. See the linked pull requests for more information.
Breaking
- Support specifying coordinate reference system (CRS) of geometries by @Hofer-Julian in #1339
- Support conditions on linear combinations of variables for
DiscreteControl
by @SouthEndMusic in #1371 - Discrete control with discrete callback by @SouthEndMusic in #1393
What's Changed
- Add results to xugrid by @visr in #1369
- Split vertical fluxes on basin by @SouthEndMusic in #1300
- Add remaining water balance terms to basin.arrow by @visr in #1367
- Write full Node table once by @visr in #1312
- Stop printing warnings when you can't read from database file by @Hofer-Julian in #1332
- Expose proper vertical flux data by @SouthEndMusic in #1337
- Split collecting subnetwork demand into internal sources and main network phases by @SouthEndMusic in #1235
- Fix allocation arrow bug by @SouthEndMusic in #1347
- Simplify sparsity.jl by @SouthEndMusic in #1349
- Disallow LevelBoundary next to ManningResistance by @SouthEndMusic in #1352
- Fix node ID bug in allocation by @SouthEndMusic in #1330
- Fix allocation flow output by @SouthEndMusic in #1355
- Don't add the endtime to basin.arrow results by @visr in #1359
- Add
Model.to_crs
method in order to reproject by @Hofer-Julian in #1360 - Guide documentation for cascade polder basins by @Jingru923 in #1258
- Sort only Edge fid so edge_id becomes more stable by @visr in #1363
- Add error starttime > endtime by @SouthEndMusic in #1379
- Run allocation first after BMI stop by @visr in #1390
Full Changelog: v2024.6.1...v2024.7.0
v2024.6.1
What's Changed
Full Changelog: v2024.6.0...v2024.6.1
v2024.6.0
What's Changed
- Parallelize generate testmodels by @Hofer-Julian in #1309
- Error early on non globally unique node IDs by @visr in #1311
- Set the Node fid back to the node_id by @visr in #1316
- Use 32 bit signed integer on the Python side as well by @visr in #1315
- Minimal pixi default environment by @Hofer-Julian in #1322
- Add
model.to_xugrid()
by @visr in #1314 - Bump version number for release by @visr in #1323
Full Changelog: v2024.5.0...v2024.6.0
v2024.5.0
The biggest breaking change of this release is the refactoring of the Ribasim Python API.
You can find its usage in the examples.
The same examples with the old API can be found in this PDF.
Breaking
- Ribasim Python: Add-API by @Hofer-Julian in #1110
- Initialize spatial table as GeoDataFrame by @Huite in #1242
- Enable read method again with the new add API by @evetion in #1243
- Infer edge type in add API by @Hofer-Julian in #1275
Changed
- Use 32 bit signed integer for all IDs and priorities by @visr in #1252
- QGIS: don't crash on unknown layers in database by @visr in #1265
- Improve Model repr and make more API private by @visr in #1270
- Sort Node and Edge tables by @visr in #1272
- Refactor function UserDemand in read.jl by @SouthEndMusic in #1268
- Add
model.node_table()
, take two by @visr in #1279 - Assert no timezone for naive datetimes. by @Huite in #1286
- Test Ribasim Python with multi environment feature by @Hofer-Julian in #1285
- Examples: bring necessary symbols into scope by @Hofer-Julian in #1287
- activate subnetwork plotting by @SouthEndMusic in #1291
- Plot listen edges by @SouthEndMusic in #1288
- Stop pinning Python version for default environment by @Hofer-Julian in #1290
- change int to string for PID listen_node_type by @Jingru923 in #1293
- Don't save states on callbacks by @visr in #1281
- Fix variable name in Python tests by @Hofer-Julian in #1294
- Add FlowDemand node type by @SouthEndMusic in #1188
- Treat
UserDemand
return flow as a source by @SouthEndMusic in #1226 - Update version numbers by @Hofer-Julian in #1303
- Add support for indexing into TableModel, except Edge by @Huite in #1304
Full Changelog: v2024.4.0...v2024.5.1
v2024.4.0
What's Changed
- Update pixi lock file by @github-actions in #1205
- Fix precompile script by @visr in #1211
- Deleted relevant code of alternative object functions in Ribasim python and core by @Jingru923 in #1199
- Document
listen_feature_type
inDiscreteControl / condition
by @Hofer-Julian in #1214 - Stop 'Julia auto update' from upgrading Julia version by @visr in #1215
- Update to HiGHS 1.7.0 by @visr in #1219
- QGIS plugin updates for
node_type
, removeexplode_and_connect
by @visr in #1220 - Add plotting support for multiple line segment edges by @Huite in #1223
- Pin pixi version for now in CI by @Hofer-Julian in #1225
- Add
pixi run ribasim-models
to run all test models by @visr in #1224
Full Changelog: v2024.3.0...v2024.4.0
v2024.3.0
For allocation we added a new LevelDemand node, and we now support a 'Basin / area' table to put polygons. The flow results now represent a mean flow from the timestamp until the next.
There were a number of breaking changes. See the associated pull request for upgrade information. Some were aimed at making the configuration options simpler. To navigate these changes better it helps to know what Ribasim version a model is made for, so we add ribasim_version
as a required TOML key. The output files are also tagged with the version of the CLI that produced them. Adding extra columns with a meta_
prefix is still possible, but the prefix is no longer applied automatically to prevent accidental usage when a column name is not correct.
Breaking
- Introduce consistent naming of subnetworks and allocation networks by @SouthEndMusic in #1130
- Make
results.compression
a Boolean by @visr in #1147 - Support only fixed
saveat
intervals, set default at daily by @visr in #1155 - Add
node_id
column to Node table by @Hofer-Julian in #1149 - Remove
adaptive
solver config option by @visr in #1170 - Rename
User
toUserDemand
by @visr in #1175 - Write
ribasim_version
to TOML and warn in core if it is different by @visr in #1181 - Don't auto add
meta_
prefix, error. by @visr in #1186 - Disable the alternative object functions by @Jingru923 in #1193
Changed
- Use equality constraint in allocation flow conservation by @Jingru923 in #1083
- Reduce binary size by leaving out artifacts by @visr in #1176
- Mean output flows by @SouthEndMusic in #1159
Added
- Water supply/demand by basins in allocation (new node type
LevelDemand
) by @SouthEndMusic in #1082 - Add
ribasim_version
metadata to Arrow results by @visr in #1145 - Basin allocation output by @SouthEndMusic in #1148
- Relax PID validation by @SouthEndMusic in #1194
- Add realized user demand for BMI by @SouthEndMusic in #1190
- Add optional 'Basin / area' spatial table by @visr in #1200
Full Changelog: v2024.2.0...v2024.3.0
All changes
What's Changed
- Set mypypath dynamically by @deltamarnix in #1116
- change leq to eq constrain in flow conservation by @Jingru923 in #1083
- Avoid lookup of node type from Node metadata by @SouthEndMusic in #1120
- Don't add
Basin / static
if there are no flows by @visr in #1135 - Introduce consistent naming of subnetworks and allocation networks by @SouthEndMusic in #1130
- Update Julia manifest by @github-actions in #1138
- Water supply/demand by basins in allocation (new node type
LevelDemand
) by @SouthEndMusic in #1082 - Allow no allocation model by @visr in #1134
- Update pixi lock file by @github-actions in #1139
- Install QGIS plugins on
pixi run install
by @visr in #1140 - Rename AllocationTarget to TargetLevel by @visr in #1141
- Add quarto on all platforms by @visr in #1142
- Update Edge Schema docs by @Hofer-Julian in #1146
- Add
ribasim_version
metadata to Arrow results by @visr in #1145 - Make results.compression a Boolean by @visr in #1147
- Run a model without compression by @visr in #1150
- Basin allocation output by @SouthEndMusic in #1148
- Support only fixed saving intervals, set default at daily by @visr in #1155
- Lock Julia patch version by @visr in #1167
- Add
node_id
column toNode
table by @Hofer-Julian in #1149 - Fix docs: use node_type instead of type by @visr in #1171
- CompatHelper: bump compat for DiffEqCallbacks to 3 for package core, (keep existing compat) by @github-actions in #1173
- Remove
adaptive
solver config option by @visr in #1170 - Rename TargetLevel again: LevelDemand by @visr in #1172
- Rename User to UserDemand by @visr in #1175
- Reduce binary size by leaving out artifacts by @visr in #1176
- Update codegen pixi task by @Hofer-Julian in #1180
- Remove dependency
types-requests
by @Hofer-Julian in #1179 - Write
ribasim_version
to TOML and warn in core if it is different by @visr in #1181 - test is_flow_constraining by @SouthEndMusic in #1182
- Change the default objective_type to linear_absolute by @visr in #1184
- docs: Fix node tables by @Hofer-Julian in #1185
- Don't auto add
meta_
prefix, error. by @visr in #1186 - Fix broken hyperlinks by @visr in #1187
- Mean output flows by @SouthEndMusic in #1159
- Disable the alternative object functions by @Jingru923 in #1193
- Relax PID validation by @SouthEndMusic in #1194
- add realized user demand and expose via BMI by @SouthEndMusic in #1190
- Use only explicit imports by @visr in #1198
- Clarify documentation on truth state ordering by @visr in #1197
- Fix ruff warnings by @visr in #1201
- Add optional 'Basin / area' spatial table by @visr in #1200