From cda1e06827822c2b14d2744cfcc768c974e29cb8 Mon Sep 17 00:00:00 2001
From: Olivier BICHLER <olivier.bichler@cea.fr>
Date: Tue, 30 Apr 2024 10:40:28 +0200
Subject: [PATCH] Improved error messages

---
 src/graph/GraphView.cpp     |  7 +++++--
 src/scheduler/Scheduler.cpp | 20 ++++++++++++++++++--
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/graph/GraphView.cpp b/src/graph/GraphView.cpp
index df2177cf6..5b37e0e8a 100644
--- a/src/graph/GraphView.cpp
+++ b/src/graph/GraphView.cpp
@@ -83,6 +83,7 @@ void Aidge::GraphView::save(const std::string& path, bool verbose, bool showProd
     }
 
     fmt::print(fp.get(),
+                "```mermaid\n"
                 "%%{{init: {{'flowchart': {{ 'curve': 'monotoneY'}}, "
                 "'fontFamily': 'Verdana' }} }}%%\nflowchart TB\n\n");
 
@@ -204,6 +205,7 @@ void Aidge::GraphView::save(const std::string& path, bool verbose, bool showProd
     fmt::print(fp.get(), "classDef producerCls_rootCls stroke:#f00,fill:#ccf\n");
     fmt::print(fp.get(), "classDef genericCls_rootCls stroke:#f00,fill:#f9f9ff,stroke-width:1px,stroke-dasharray: 5 5\n");
     fmt::print(fp.get(), "classDef metaCls_rootCls stroke:#f00,stroke-width:5px\n");
+    fmt::print(fp.get(), "```\n");
     fmt::print(fp.get(), "\n");
 }
 
@@ -414,9 +416,10 @@ bool Aidge::GraphView::forwardDims(const std::vector<std::vector<Aidge::DimSize_
                     i, nodePtr->name(), nodePtr->type(), inputI.second, inputI.first->name(), inputI.first->type());
             } else {
                 // Input is missing
-                AIDGE_ASSERT(nodePtr->getOperator()->getRawInput(i)
-                    && !std::static_pointer_cast<Tensor>(nodePtr->getOperator()->getRawInput(i))->empty(),
+                AIDGE_ASSERT(nodePtr->getOperator()->getRawInput(i),
                   "Missing input#{} for node {} ({})", i, nodePtr->name(), nodePtr->type());
+                AIDGE_ASSERT(!std::static_pointer_cast<Tensor>(nodePtr->getOperator()->getRawInput(i))->empty(),
+                  "Empty input#{} for node {} ({})", i, nodePtr->name(), nodePtr->type());
             }
 
         }
diff --git a/src/scheduler/Scheduler.cpp b/src/scheduler/Scheduler.cpp
index 4e3f99788..1c41afd4a 100644
--- a/src/scheduler/Scheduler.cpp
+++ b/src/scheduler/Scheduler.cpp
@@ -280,7 +280,12 @@ std::vector<std::shared_ptr<Aidge::Scheduler::StaticSchedulingElement>> Aidge::S
     mPriorCache.clear();
 
     if (!consumers.empty()) {
-        Log::warn("Remaining consumers: possible dead-lock");
+        std::vector<std::string> consumersName;
+        std::transform(consumers.begin(), consumers.end(),
+            std::back_inserter(consumersName),
+            [&namePtrTable](auto val){ return namePtrTable.at(val); });
+
+        Log::warn("Remaining consumers: {}. Possible dead-lock.", consumersName);
     }
 
     return schedule;
@@ -518,7 +523,18 @@ void Aidge::Scheduler::connectInputs(std::vector<std::shared_ptr<Aidge::Tensor>>
     auto inputNodes = mGraphView->getOrderedInputs();
 
     // Assert that the number of input data producers corresponds to the number of data input
-    assert(data.size() == inputNodes.size()  && "Scheduler connectInput error - Inconsistent number of graph inputs and inputs passed to the graph");
+    if (data.size() != inputNodes.size()) {
+        const std::map<std::shared_ptr<Node>, std::string> namePtrTable
+            = mGraphView->getRankedNodesName("{0} ({1}#{3})");
+
+        std::vector<std::pair<std::string, IOIndex_t>> inputNodesName;
+        std::transform(inputNodes.begin(), inputNodes.end(),
+            std::back_inserter(inputNodesName),
+            [&namePtrTable](auto val){ return std::make_pair(namePtrTable.at(val.first), val.second); });
+
+        AIDGE_THROW_OR_ABORT(std::runtime_error, "Provided {} inputs to the scheduler, but graph has {} inputs (required inputs in order: )",
+            data.size(), inputNodes.size(), inputNodesName);
+    }
 
     for (std::size_t i = 0; i < data.size(); ++i){
         // TODO : maybe shallow copy instead of deepcopy
-- 
GitLab