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