From 565a7530fb3e097749fd24a517081c2e1b3a51c0 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 17 Jun 2026 17:03:51 +0200 Subject: [PATCH] Results: Minor results reading optimisation with async computation. --- src/Model/Geometry/ProfileXYZ.py | 5 +++-- src/Model/Results/River/River.py | 10 +++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 1b513447..48c09fc3 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -858,11 +858,11 @@ class ProfileXYZ(Profile, SQLSubModel): return start, list(reversed(end)) + @timer def get_water_limits(self, z): """ Determine left and right limits of water elevation. """ - # Get the index of first point with elevation lesser than water # elevation (for the right and left river side) i_left = -1 @@ -908,7 +908,8 @@ class ProfileXYZ(Profile, SQLSubModel): else: pt_right = self.point(self.number_points - 1) - return pt_left, pt_right + # Create a generator to improve results data reading speed + yield pt_left, pt_right def compute_tabulation(self): sorted_points = sorted(self._points, key=lambda p: p.z) diff --git a/src/Model/Results/River/River.py b/src/Model/Results/River/River.py index d1d3027b..6b926503 100644 --- a/src/Model/Results/River/River.py +++ b/src/Model/Results/River/River.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import types import struct import logging import itertools @@ -74,7 +75,14 @@ class Profile(SQLSubModel): def get_ts_key(self, timestamp, key): if timestamp in self._data: if key in self._data[timestamp]: - return self._data[timestamp][key] + v = self._data[timestamp][key] + + # If is a generator, compute value(s) + if isinstance(v, types.GeneratorType): + v = self._data[timestamp][key] = next(v) + + return v + return None def has_sediment_layers(self):