From 242df7f6486a7abfb0bc29f47ce93a8909b5aaa8 Mon Sep 17 00:00:00 2001 From: Theophile Terraz Date: Thu, 2 Apr 2026 11:54:55 +0200 Subject: [PATCH] start work on results buffers --- src/Model/Results/Results.py | 5 +++++ src/Model/Results/River/River.py | 11 +++++++++++ src/Solver/Mage.py | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/src/Model/Results/Results.py b/src/Model/Results/Results.py index aad79c04..01969fba 100644 --- a/src/Model/Results/Results.py +++ b/src/Model/Results/Results.py @@ -219,6 +219,11 @@ class Results(SQLSubModel): qlog=None, ) + def bufferize(self, key): + if self.is_valid: + for reach in self._river._reachs: + reach.bufferize(self._meta_data["timestamps"], key) + def timestamps_to_struct(self): ts = self._meta_data["timestamps"] sf = ">" + ''.join(itertools.repeat("d", len(ts))) diff --git a/src/Model/Results/River/River.py b/src/Model/Results/River/River.py index bed5fd45..d97738d3 100644 --- a/src/Model/Results/River/River.py +++ b/src/Model/Results/River/River.py @@ -17,6 +17,7 @@ import struct import logging import itertools +import numpy as np from tools import flatten from functools import reduce @@ -275,6 +276,7 @@ class Reach(SQLSubModel): lambda p: p.name[0:8] != 'interpol', self._profiles ) ) + self._buffers = {} def __len__(self): return len(self._profiles) @@ -295,6 +297,10 @@ class Reach(SQLSubModel): def profile_mask(self): return self._profile_mask + @property + def buffers(self): + return self._buffers + def profile(self, id): return self._profiles[id] @@ -304,6 +310,11 @@ class Reach(SQLSubModel): def has_sediment(self): return any(map(lambda profile: profile.has_sediment(), self._profiles)) + def bufferize(self, timestamps, key): + self._buffers[key] = np.zeros((len(timestamps), len(self))) + for i, p in enumerate(self._profiles): + self._buffers[key][:, i] = p.get_key(key) + @classmethod def _db_create(cls, execute, ext=""): return cls._create_submodel(execute) diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index 19802289..06d674e8 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -1196,6 +1196,10 @@ class Mage8(Mage): r.set(i, t, "V", v) logger.info(f"read_bin: ... end with {len(ts)} timestamp read") + results.bufferize("Z") + results.bufferize("Q") + results.bufferize("V") + @timer def read_gra(self, study, repertory, results, qlog=None, name="0"): if not study.river.has_sediment():