From 852a3f58ff0aa6aebdc8d34bc8e9a2a6ec2b6a01 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 17 Jan 2024 15:26:00 +0100 Subject: [PATCH] Checker: Mage: Add guidelines checker. --- src/Checker/Mage.py | 49 ++++++++++++++++++++++++++++++++++++++++++++ src/Checker/Study.py | 6 +++--- src/Solver/Mage.py | 8 ++++++-- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/Checker/Mage.py b/src/Checker/Mage.py index d5b527fa..e6672532 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 b5287e6f..c1de7c88 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 444448c1..243c794f 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 -- GitLab