diff --git a/src/graph.py b/src/graph.py index ffff0593bf161cf927460e106a039610b6234f5f..b9cd44248ed3b3fd90fb3739aa73aa3842729bc9 100644 --- a/src/graph.py +++ b/src/graph.py @@ -35,6 +35,7 @@ class Graph(): #Dico flattened (without any subworkflows) self.dico_flattened = {} self.initialised = False + self.processes_2_remove = [] def get_process_dependency_graph(self): @@ -42,7 +43,8 @@ class Graph(): def initialise(self, processes_2_remove = []): - if(not self.is_initialised()): + if(not self.is_initialised() or (processes_2_remove != [] and self.processes_2_remove==[])): + self.processes_2_remove = processes_2_remove self.initialised = True self.full_dico = self.workflow.get_structure() with open(f"{self.get_output_dir()}/graphs/specification_graph.json", 'w') as output_file : @@ -428,13 +430,15 @@ class Graph(): #GENERATE USER VIEW #============================ - def get_user_view_graph(self, relevant_processes = []): + def get_user_view_graph(self, relevant_processes = [], use_process_dependency_graph = False): #For now i'm only gonna work from the flattened dico - #self.initialise_flattened_dico(self.dico_process_dependency_graph) - self.initialise_flattened_dico(self.full_dico) + if(use_process_dependency_graph): + self.initialise_flattened_dico(self.dico_process_dependency_graph) + else: + self.initialise_flattened_dico(self.full_dico) dico = remove_artificial_nodes(self.dico_flattened) - self.user_view, self.new_nodes_user_view = relev_user_view_builder(dico, relevant_modules=relevant_processes, show_operations = False) + self.user_view, self.new_nodes_user_view = relev_user_view_builder(dico, relevant_modules=relevant_processes) with open(self.get_output_dir()/ "graphs/user_view.json", 'w') as output_file : json.dump(self.user_view, output_file, indent=4) @@ -447,9 +451,9 @@ class Graph(): #return self.user_view, user_view_with_subworkflows return self.user_view - def generate_user_view(self, relevant_processes = [], render_graphs = True): + def generate_user_view(self, relevant_processes = [], render_graphs = True, use_process_dependency_graph = False): #user_view, user_view_with_subworkflows = self.get_user_view_graph(relevant_processes = relevant_processes) - user_view = self.get_user_view_graph(relevant_processes = relevant_processes) + user_view = self.get_user_view_graph(relevant_processes = relevant_processes, use_process_dependency_graph = use_process_dependency_graph) #self.user_view_with_subworkflows = user_view_with_subworkflows generate_graph(self.get_output_dir()/'graphs'/"user_view", user_view, label_edge=True, label_node=True, render_graphs = render_graphs, root = False, relevant_nodes = copy.deepcopy(relevant_processes)) #generate_graph(self.get_output_dir()/'graphs'/"user_view_with_subworkflows", user_view_with_subworkflows, label_edge=True, label_node=True, render_graphs = render_graphs, root = False, relevant_nodes = copy.deepcopy(relevant_processes)) diff --git a/src/outils_graph.py b/src/outils_graph.py index 08b71a5dfb5578e6e38e131a550c054471706ca8..6b4646ec177cc36104c9fbabaad6254976c5b56a 100644 --- a/src/outils_graph.py +++ b/src/outils_graph.py @@ -835,7 +835,7 @@ def get_color_node(node, new_nodes): prop = 256- int(127*len(node)/max) return rgb_to_hex(prop, prop, prop) -def relev_user_view_builder(dico_param, relevant_modules, show_operations = True): +def relev_user_view_builder(dico_param, relevant_modules): import time dico = copy.deepcopy(dico_param) tag = str(time.time()) @@ -966,21 +966,14 @@ def relev_user_view_builder(dico_param, relevant_modules, show_operations = True new_name = get_name_new_node(get_names_tab(dico, new_nodes[i]), relevant_modules) name_printed = new_name.split(tag)[0] shape = "ellipse" - if(show_operations): - if(name_printed==""): - shape = "point" - node = {"id": '_$$_'.join(new_nodes[i]).replace('<', '').replace('>', ''), - "name": name_printed, - "shape": shape, - "xlabel": f"{len(new_nodes[i])}", - "fillcolor": get_color_node(new_nodes[i], new_nodes)} - else: - if(name_printed!=""): - node = {"id": '_$$_'.join(new_nodes[i]).replace('<', '').replace('>', ''), - "name": name_printed, - "shape": shape, - "xlabel": f"{len(new_nodes[i])}", - "fillcolor": get_color_node(new_nodes[i], new_nodes)} + if(name_printed==""): + shape = "point" + node = {"id": '_$$_'.join(new_nodes[i]).replace('<', '').replace('>', ''), + "name": name_printed, + "shape": shape, + "xlabel": f"{len(new_nodes[i])}", + "fillcolor": get_color_node(new_nodes[i], new_nodes)} + #If relevant module -> color it differently if(new_name in relevant_modules): @@ -997,13 +990,12 @@ def relev_user_view_builder(dico_param, relevant_modules, show_operations = True if(edge["A"].replace('<', '').replace('>', '') in nA["id"] and edge["B"].replace('<', '').replace('>', '') in nB["id"] and edge_string not in added_edges):#So we don't have dupliacte edges - if(show_operations or ((not show_operations) and nA["id"]!=nB["id"])): - new_dico["edges"].append({ - "A": nA["id"], - "B": nB["id"], - "label": "" - }) - added_edges.append(edge_string) + new_dico["edges"].append({ + "A": nA["id"], + "B": nB["id"], + "label": "" + }) + added_edges.append(edge_string) #The output nodes are the nodes which their outputs aren't connected to anything else #TODO -> remove these comments if you want to root the graph diff --git a/src/workflow.py b/src/workflow.py index 371af87930f3bd56ba0e0c32a6c7ecce988586c3..3ce11d064a076f47867bac8b0fe4d246130ba980 100644 --- a/src/workflow.py +++ b/src/workflow.py @@ -1019,9 +1019,9 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen return relevant_processes - def generate_user_view(self, relevant_processes = [], render_graphs = True, processes_2_remove = []): + def generate_user_view(self, relevant_processes = [], render_graphs = True, processes_2_remove = [], use_process_dependency_graph = False): self.graph.initialise(processes_2_remove = processes_2_remove) - self.graph.generate_user_view(relevant_processes = relevant_processes, render_graphs = render_graphs) + self.graph.generate_user_view(relevant_processes = relevant_processes, render_graphs = render_graphs, use_process_dependency_graph = use_process_dependency_graph) #I do not recommand that the dev uses the same name for the channels inside and outside the channels