From 49cf5812de290bf1e987ea5670a92aeb620c8b33 Mon Sep 17 00:00:00 2001
From: George Marchment <georgemarchment@yahoo.fr>
Date: Mon, 5 Feb 2024 15:53:48 +0100
Subject: [PATCH] Add functionnality to remove processes

---
 src/call.py          |  2 +-
 src/function.py      |  3 +++
 src/graph.py         | 43 ++++++++++++++++++++++++++++++++++++++++++-
 src/nextflow_file.py |  4 ++--
 src/workflow.py      |  4 ++--
 5 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/src/call.py b/src/call.py
index b79c9b7..7740b65 100644
--- a/src/call.py
+++ b/src/call.py
@@ -52,7 +52,7 @@ class Call(Executor):
         tab += [self.first_element_called]
         for para in self.parameters:
             if(para.get_type()=="Call"):
-                tab = para.get_elements_called(tab = tab.copy(), first_call = False)
+                tab = para.get_elements_called(tab_input = tab.copy(), first_call = False)
         temp = list(set(tab))
         #del tab
         return temp
diff --git a/src/function.py b/src/function.py
index 9c55e96..8c9ec00 100644
--- a/src/function.py
+++ b/src/function.py
@@ -23,5 +23,8 @@ class Function(Nextflow_Building_Blocks):
     def get_name(self):
         return self.name
     
+    def add_2_rocrate(self, dico, parent_key):
+        None
+    
     
 
diff --git a/src/graph.py b/src/graph.py
index 73cca9f..99c98cc 100644
--- a/src/graph.py
+++ b/src/graph.py
@@ -23,7 +23,48 @@ class Graph():
         self.dico_flattened = {}
 
 
-    def initialise(self):
+    
+
+    def initialise(self, processes_2_remove = []):
+
+        def get_node_id(dico, process):
+            for node in dico["nodes"]:
+                if(node['name']==process):
+                    return node['id']
+            for sub in dico['subworkflows']:
+                res = get_node_id(dico['subworkflows'][sub], process)
+                if(res!=-1):
+                    return res
+            return -1
+
+        #This function removes the process -> by the simpliest way -> it doesn't create new links
+        def remove_node(dico, node_id):
+            #Remove nodes
+            nodes_to_remove = []
+            for node in dico["nodes"]:
+                if(node['id']==node_id):
+                    nodes_to_remove.append(node)
+            for node in nodes_to_remove:
+                dico["nodes"].remove(node)
+
+            #Remove edges
+            edges_to_remove = []
+            for edge in dico["edges"]:
+                if(edge['A']==node_id):
+                    edges_to_remove.append(edge)
+                if(edge['B']==node_id):
+                    edges_to_remove.append(edge)
+            for edge in edges_to_remove:
+                dico["edges"].remove(edge)
+
+            for sub in dico['subworkflows']:
+                remove_node(dico['subworkflows'][sub], node_id)
+
+        for process in processes_2_remove:
+            node_id = get_node_id(self.full_dico, process)
+            remove_node(self.full_dico, node_id)
+
+
         self.get_graph_wo_branch_operations()
         self.get_graph_wo_operations()
 
diff --git a/src/nextflow_file.py b/src/nextflow_file.py
index e733855..b254a1d 100644
--- a/src/nextflow_file.py
+++ b/src/nextflow_file.py
@@ -637,9 +637,9 @@ class Nextflow_File(Nextflow_Building_Blocks):
         if(self.graph==None):
             self.graph = Graph(self)
 
-    def generate_all_graphs(self, render_graphs = True):
+    def generate_all_graphs(self, render_graphs = True, processes_2_remove = []):
         #Initialisation (obligatory)
-        self.graph.initialise()
+        self.graph.initialise(processes_2_remove = processes_2_remove)
 
         #Generate the different graphs
         self.graph.get_full_graph(render_graphs = render_graphs)
diff --git a/src/workflow.py b/src/workflow.py
index 6e0fcd3..5342a54 100644
--- a/src/workflow.py
+++ b/src/workflow.py
@@ -123,5 +123,5 @@ class Workflow:
         self.nextflow_file.initialise()
         self.initialise_rocrate()
 
-    def generate_all_graphs(self, render_graphs = True):
-        self.nextflow_file.generate_all_graphs(render_graphs = render_graphs)
+    def generate_all_graphs(self, render_graphs = True, processes_2_remove = []):
+        self.nextflow_file.generate_all_graphs(render_graphs = render_graphs, processes_2_remove = processes_2_remove)
-- 
GitLab