diff --git a/src/Checker/Mage.py b/src/Checker/Mage.py index d5b527fa053bb6aa2d59d3ed1ec6bba84845689d..e6672532a7bf707ac83e291ff08bbd0c70ab65ee 100644 --- a/src/Checker/Mage.py +++ b/src/Checker/Mage.py @@ -24,6 +24,7 @@ from tools import flatten, timer from PyQt5.QtCore import QCoreApplication from Checker.Checker import AbstractModelChecker, STATUS +from Checker.Study import StudyGeometryChecker _translate = QCoreApplication.translate @@ -195,3 +196,51 @@ class MageNetworkGraphChecker(AbstractModelChecker): self._summary = summary self._status = status return True + + +class MageGeometryGuideLineChecker(StudyGeometryChecker): + def __init__(self): + super(MageGeometryGuideLineChecker, self).__init__() + + self._name = _translate("Checker", "Mage geometry guide line checker") + self._description = _translate( + "Checker", + "Check if exists geometry guide line is correctly defined \ +for each reaches of the study" + ) + self._reachs = [] + + def run(self, study): + ok = super(MageGeometryGuideLineChecker, self).run(study) + + if not ok: + return ok + + river = study.river + edges = river.enable_edges() + + gls = [] + + for edge in edges: + comp, incomp = edge.reach.compute_guidelines() + if len(incomp) != 0: + self._status = STATUS.WARNING + self._summary = "incomplete_guideline" + return False + + gls.append(comp) + + profiles = edge.reach.profiles + for profile in profiles: + if not profile.has_standard_named_points(): + self._status = STATUS.WARNING + self._summary = "no_standard_guileline_defined" + return False + + for gl in gls[1:]: + if len(gls[0].symmetric_difference(gl)) != 0: + self._status = STATUS.WARNING + self._summary = "no_all_reaches_do_not_have_same_defined" + return False + + return ok diff --git a/src/Checker/Study.py b/src/Checker/Study.py index b5287e6f6877114982b18d7c5f3152b4bd9c6b46..c1de7c88023056b01a1b7f5d2e7ea49daa9871f7 100644 --- a/src/Checker/Study.py +++ b/src/Checker/Study.py @@ -82,15 +82,15 @@ class StudyGeometryChecker(AbstractModelChecker): self._summary = "no_river_found" return False - edges = list(filter(lambda e: e.is_enable(), river.edges())) + edges = river.enable_edges() if len(edges) == 0: self._status = STATUS.ERROR self._summary = "no_reach_defined" return False for edge in edges: - if edge.is_enable() and len(edge.reach.profiles) < 3: - summary = f"no_geometry_defined" + if len(edge.reach.profiles) < 3: + summary = "no_geometry_defined" status = STATUS.ERROR ok = False self._reachs.append(edge) diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index 444448c1050da6d8f26ce18999f5a3bea4ce574c..243c794f51de657cb1e2a38053f9a1a1f1142985 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -23,7 +23,9 @@ import numpy as np from tools import timer, trace from Solver.CommandLine import CommandLineSolver -from Checker.Mage import MageNetworkGraphChecker +from Checker.Mage import ( + MageNetworkGraphChecker, MageGeometryGuideLineChecker, +) from Model.Results.Results import Results from Model.Results.River.River import River, Reach, Profile @@ -90,7 +92,9 @@ class Mage(CommandLineSolver): def checkers(cls): lst = [ MageNetworkGraphChecker(connectivity=True), - MageNetworkGraphChecker(connectivity=False) + MageNetworkGraphChecker(connectivity=False), + MageGeometryGuideLineChecker(), + ] return lst