diff --git a/src/Model/Results/Results.py b/src/Model/Results/Results.py index 2e92767e..5f8ef19c 100644 --- a/src/Model/Results/Results.py +++ b/src/Model/Results/Results.py @@ -22,6 +22,8 @@ import numpy as np from copy import deepcopy from datetime import datetime +from tools import timer + from Model.Scenario import Scenario from Model.Tools.PamhyrDB import SQLSubModel from Model.Results.River.River import River @@ -167,7 +169,7 @@ class Results(SQLSubModel): self._name = name self._study = study - self._river = River(self._study) + self._river = River(self._study, self) self._solver = solver self._repertory = repertory @@ -195,6 +197,7 @@ class Results(SQLSubModel): def study(self): return self._study + @timer def set(self, key, value): self._meta_data[key] = value @@ -314,6 +317,7 @@ class Results(SQLSubModel): new_results.set("timestamps", ts) data["timestamps"] = sorted(ts) + data["parent"] = new_results new_results._river = River._db_load(execute, data) new_results.set( diff --git a/src/Model/Results/River/River.py b/src/Model/Results/River/River.py index bccf0fe0..f3602f02 100644 --- a/src/Model/Results/River/River.py +++ b/src/Model/Results/River/River.py @@ -31,15 +31,17 @@ logger = logging.getLogger() class Profile(SQLSubModel): - def __init__(self, profile, study): + def __init__(self, profile, study, parent): super(Profile, self).__init__( id=-1, status=study.status, owner_scenario=study.status.scenario.id ) + self._parent = parent self._study = study self._profile = profile # Source profile in the study self._data = {} # Dict of dict {: {: , ...}, ...} + self._global_index = -1 def __len__(self): return len(self._data) @@ -56,6 +58,15 @@ class Profile(SQLSubModel): def geometry(self): return self._profile + @property + def global_index(self): + return self._global_index + + @global_index.setter + def global_index(self, id): + self._global_index = id + + @timer def set(self, timestamp, key, data): if timestamp not in self._data: self._data[timestamp] = {} @@ -129,6 +140,7 @@ class Profile(SQLSubModel): new = {} status = data['status'] + parent = data['parent'] study = data['study'] reach = data['reach'] profile = data['profile'] @@ -156,7 +168,7 @@ class Profile(SQLSubModel): owner_scenario = next(it) if profile not in new: - new_data = cls(profile, study) + new_data = cls(profile, study, parent) new[profile] = new_data else: new_data = new[profile] @@ -269,19 +281,20 @@ class Profile(SQLSubModel): class Reach(SQLSubModel): _sub_classes = [Profile] - def __init__(self, reach, study, with_init=True): + def __init__(self, reach, study, parent, with_init=True): super(Reach, self).__init__( id=-1, status=study.status, owner_scenario=study.status.scenario.id ) + self._parent = parent self._study = study self._reach = reach # Source reach in the study self._profiles = [] if with_init: self._profiles = list( map( - lambda p: Profile(p, self._study), + lambda p: Profile(p, self._study, self._parent), reach.profiles ) ) @@ -319,6 +332,11 @@ class Reach(SQLSubModel): def profile(self, id): return self._profiles[id] + def set_global_index(self, indexs): + for profile, ind in zip(self._profiles, indexs): + profile.global_index = ind + + @timer def set(self, profile_id, timestamp, key, data): self._profiles[profile_id].set(timestamp, key, data) @@ -347,7 +365,8 @@ class Reach(SQLSubModel): reach = data["reach"] new_reach = cls( - data["reach"], data["study"], with_init=False + data["reach"], data["study"], data["parent"], + with_init=False ) for i, profile in enumerate(reach.profiles): @@ -366,13 +385,14 @@ class Reach(SQLSubModel): class River(SQLSubModel): _sub_classes = [Reach] - def __init__(self, study): + def __init__(self, study, parent): super(River, self).__init__( id=-1, status=study.status, owner_scenario=study.status.scenario.id ) self._study = study + self._parent = parent # Dict with timestamps as key self._reachs = [] @@ -393,7 +413,7 @@ class River(SQLSubModel): def add(self, reach_id): reachs = self._study.river.enable_edges() - new = Reach(reachs[reach_id].reach, self._study) + new = Reach(reachs[reach_id].reach, self._study, self._parent) self._reachs.append(new) return new @@ -417,7 +437,9 @@ class River(SQLSubModel): @classmethod def _db_load(cls, execute, data=None): study = data["study"] - new_river = cls(study) + parent = data["parent"] + + new_river = cls(study, parent) for reach in study.river.reachs(): data["reach"] = reach.reach diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index 5d34b17f..136e594c 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -1098,6 +1098,9 @@ class Mage8(Mage): i1 = data[2*i] - 1 i2 = data[2*i+1] - 1 + # Keep profiles index of all river + r.set_global_index(range(i1, i2 + 1)) + # Add profile id correspondance to reach for key in range(i1, i2 + 1): iprofiles.append(i)