diff --git a/src/code_.py b/src/code_.py index af4784ace02565f244b8a203ba534f6457ef5879..e9eb67b37285292586911bfa2c357ab1c156daea 100644 --- a/src/code_.py +++ b/src/code_.py @@ -347,10 +347,10 @@ class Code: for r in to_replace: old, new = r + #Check that we have corretly extracted a ternary operator (this is a way to filter false positives) if(new.strip()!=''): self.add_to_ternary_operation_dico(old, new) - else: - print(f"old '{old}'", f"new '{new}'") + #Check if there is still a ternary operation in this case we cannot analyse it for match in re.finditer(pattern, code): diff --git a/src/graph.py b/src/graph.py index 8329f044bb947bd9f2269e4ed3a222c26d26f3a1..f6c091921e52911459f9a1bee085f94a034793b6 100644 --- a/src/graph.py +++ b/src/graph.py @@ -180,54 +180,55 @@ class Graph(): + #This is the greedy version #This is a dictionnary which links every node to it's connected process - #node_2_processes = copy.deepcopy(self.link_dico) - #already_searched = {} - #for nodeA in node_2_processes: - # already_searched[nodeA] = [nodeA] - #changed = True - #while(changed): - # changed = False - # for nodeA in node_2_processes: - # temp = node_2_processes[nodeA].copy() - # for give in node_2_processes[nodeA]: - # if(is_operation(give)): - # temp.remove(give) - # if(nodeA!=give and give not in already_searched[nodeA]): - # already_searched[nodeA] += give - # temp_temp = node_2_processes[give] - # for node_temp in already_searched[nodeA]: - # try: - # temp_temp.remove(node_temp) - # except: - # None - # temp+=temp_temp - # changed = True - # node_2_processes[nodeA] = list(set(temp)) + node_2_processes = copy.deepcopy(self.link_dico) + already_searched = {} + for nodeA in node_2_processes: + already_searched[nodeA] = [nodeA] + changed = True + while(changed): + changed = False + for nodeA in node_2_processes: + temp = node_2_processes[nodeA].copy() + for give in node_2_processes[nodeA]: + if(is_operation(give)): + temp.remove(give) + if(nodeA!=give and give not in already_searched[nodeA]): + already_searched[nodeA] += give + temp_temp = node_2_processes[give] + for node_temp in already_searched[nodeA]: + try: + temp_temp.remove(node_temp) + except: + None + temp+=temp_temp + changed = True + node_2_processes[nodeA] = list(set(temp)) #print(node_2_processes) - - topological_order = topological_sort(self.link_dico) - #topological_order.reverse() - node_2_processes = copy.deepcopy(self.link_dico) - for i in [len(topological_order)-1-x for x in range(len(topological_order))]: - updating = topological_order[i] - for y in [len(topological_order)-1-x for x in range(len(topological_order))]: - if(y>i): - fixed = topological_order[y] - if(is_operation(fixed)): - if(fixed in node_2_processes[updating]): - node_2_processes[updating]+=node_2_processes[fixed].copy() - node_2_processes[updating] = list(set(node_2_processes[updating])) - tab = [] - for give in node_2_processes[updating]: - if(is_process(give)): - tab.append(give) - #if(is_operation(give)): - # node_2_processes[updating].remove(give) - #else: - # print("**", give) - node_2_processes[updating] = tab + #This is the optimised version but it is based on the topological order -> thus far i can't get it to work when there is a loop in the workflow + #topological_order = topological_sort(self.link_dico) + ##topological_order.reverse() + #node_2_processes = copy.deepcopy(self.link_dico) + #for i in [len(topological_order)-1-x for x in range(len(topological_order))]: + # updating = topological_order[i] + # for y in [len(topological_order)-1-x for x in range(len(topological_order))]: + # if(y>i): + # fixed = topological_order[y] + # if(is_operation(fixed)): + # if(fixed in node_2_processes[updating]): + # node_2_processes[updating]+=node_2_processes[fixed].copy() + # node_2_processes[updating] = list(set(node_2_processes[updating])) + # tab = [] + # for give in node_2_processes[updating]: + # if(is_process(give)): + # tab.append(give) + # #if(is_operation(give)): + # # node_2_processes[updating].remove(give) + # #else: + # # print("**", give) + # node_2_processes[updating] = tab