From 47734f884872f063398ff1f0054d8c301490d9a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire=20KUBLER?= <gregoire.kubler@proton.me>
Date: Fri, 6 Sep 2024 16:05:36 +0200
Subject: [PATCH] [MIN] added name as param to op args to allows giving name to
 created graphview

---
 include/aidge/graph/OpArgs.hpp         | 17 +++++++++++------
 python_binding/graph/pybind_OpArgs.cpp |  6 +++---
 src/graph/OpArgs.cpp                   | 20 ++++++++++++--------
 3 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/include/aidge/graph/OpArgs.hpp b/include/aidge/graph/OpArgs.hpp
index bf14d39af..70a431b56 100644
--- a/include/aidge/graph/OpArgs.hpp
+++ b/include/aidge/graph/OpArgs.hpp
@@ -12,8 +12,10 @@
 #ifndef AIDGE_CORE_GRAPH_OPARGS_H_
 #define AIDGE_CORE_GRAPH_OPARGS_H_
 
-#include <memory>
 #include <cassert>
+#include <memory>
+#include <string>
+#include <vector>
 
 namespace Aidge {
 class Node;
@@ -56,20 +58,22 @@ public:
  * one in a sequential way. Nodes linked with the Sequential graph
  * generation instructions must have a single output.
  * Sequential(A, B, C) returns A-->B-->C.
- * @param inputs List of Node and GraphView to link sequentially.
+ * @param[in] inputs List of Node and GraphView to link sequentially.
+ * @param[in] name : name of the graphview to return
  * @return std::shared_ptr<GraphView> Pointer to the generated view.
  */
-std::shared_ptr<GraphView> Sequential(std::vector<OpArgs> inputs);
+std::shared_ptr<GraphView> Sequential(std::vector<OpArgs> inputs, std::string name = "");
 
 /////////////////////////////
 // Parallel
 
 /**
  * @brief Creates a GraphView with provided Nodes without linking them.
- * @param inputs List of Node and GraphView to link sequentially.
+ * @param[in] inputs List of Node and GraphView to link sequentially.
+ * @param[in] name : name of the graphview to return
  * @return std::shared_ptr<GraphView> pointer to the generated view.
  */
-std::shared_ptr<GraphView> Parallel(std::vector<OpArgs> inputs);
+std::shared_ptr<GraphView> Parallel(std::vector<OpArgs> inputs, std::string name = "");
 
 /////////////////////////////
 // Residual
@@ -81,9 +85,10 @@ std::shared_ptr<GraphView> Parallel(std::vector<OpArgs> inputs);
  * generation instructions must have a single output.
  * Recursive(A, B, C) returns A-->B-->C , A-->C.
  * @param inputs List of Node and GraphView to link sequentially.
+ * @param[in] name : name of the graphview to return
  * @return std::shared_ptr<GraphView> pointer to the generated view.
  */
-std::shared_ptr<GraphView> Residual(std::vector<OpArgs> inputs);
+std::shared_ptr<GraphView> Residual(std::vector<OpArgs> inputs, std::string name = "");
 
 }
 
diff --git a/python_binding/graph/pybind_OpArgs.cpp b/python_binding/graph/pybind_OpArgs.cpp
index 6ea89f919..a129ca51c 100644
--- a/python_binding/graph/pybind_OpArgs.cpp
+++ b/python_binding/graph/pybind_OpArgs.cpp
@@ -31,9 +31,9 @@ void init_OpArgs(py::module& m){
     py::implicitly_convertible<Node, OpArgs>();
     py::implicitly_convertible<GraphView, OpArgs>();
 
-    m.def("sequential", &Sequential, py::arg("inputs"));
-    m.def("parallel", &Parallel, py::arg("inputs"));
-    m.def("residual", &Residual, py::arg("inputs"));
+    m.def("sequential", &Sequential, py::arg("inputs"), py::arg("name") =  "");
+    m.def("parallel", &Parallel, py::arg("inputs"), py::arg("name") =  "");
+    m.def("residual", &Residual, py::arg("inputs"), py::arg("name") =  "");
 
 }
 }
diff --git a/src/graph/OpArgs.cpp b/src/graph/OpArgs.cpp
index cffd14c35..6fe2320ea 100644
--- a/src/graph/OpArgs.cpp
+++ b/src/graph/OpArgs.cpp
@@ -9,16 +9,20 @@
  *
  ********************************************************************************/
 
-#include "aidge/graph/Node.hpp"
-#include "aidge/graph/GraphView.hpp"
 #include "aidge/graph/OpArgs.hpp"
 
+#include <memory>
+#include <string>
+
+#include "aidge/graph/GraphView.hpp"
+#include "aidge/graph/Node.hpp"
+
 Aidge::OpArgs::OpArgs(const OpArgs&) = default;
 Aidge::OpArgs& Aidge::OpArgs::operator=(const OpArgs&) = default;
 Aidge::OpArgs::~OpArgs() noexcept = default;
 
-std::shared_ptr<Aidge::GraphView> Aidge::Sequential(std::vector<OpArgs> inputs) {
-    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>();
+std::shared_ptr<Aidge::GraphView> Aidge::Sequential(std::vector<OpArgs> inputs, std::string name) {
+    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>(name);
     for (const OpArgs& elt : inputs) {
         if(elt.node() != nullptr) {
             // Connect the first output (ordered) of each output node (ordered)
@@ -61,8 +65,8 @@ std::shared_ptr<Aidge::GraphView> Aidge::Sequential(std::vector<OpArgs> inputs)
 }
 
 
-std::shared_ptr<Aidge::GraphView> Aidge::Parallel(std::vector<OpArgs> inputs) {
-    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>();
+std::shared_ptr<Aidge::GraphView> Aidge::Parallel(std::vector<OpArgs> inputs, std::string name) {
+    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>(name);
     for(const OpArgs& elt : inputs) {
         if (elt.node()!=nullptr)
             gv->add(elt.node());
@@ -73,8 +77,8 @@ std::shared_ptr<Aidge::GraphView> Aidge::Parallel(std::vector<OpArgs> inputs) {
 }
 
 
-std::shared_ptr<Aidge::GraphView> Aidge::Residual(std::vector<OpArgs> inputs) {
-    std::shared_ptr<GraphView> gv = Sequential(inputs);
+std::shared_ptr<Aidge::GraphView> Aidge::Residual(std::vector<OpArgs> inputs, std::string name) {
+    std::shared_ptr<GraphView> gv = Sequential(inputs,name);
     AIDGE_ASSERT(gv->outputNodes().size() == 1U,
         "Residual(): Zero or more than one output Node for the GraphView, don't know which one to choose from for the residual connection");
     std::shared_ptr<Node> lastNode = *gv->outputNodes().begin();
-- 
GitLab