From b55e7a504f092040b5af10f99677695d26d8c810 Mon Sep 17 00:00:00 2001 From: George Marchment <georgemarchment@yahoo.fr> Date: Thu, 13 Mar 2025 09:49:20 +0100 Subject: [PATCH] optimised the implementation of the user view --- src/code_.py | 6 ++ src/outils_graph.py | 137 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 114 insertions(+), 29 deletions(-) diff --git a/src/code_.py b/src/code_.py index 53a0749..1e40f36 100644 --- a/src/code_.py +++ b/src/code_.py @@ -22,6 +22,7 @@ class Code: self.code_wo_comments = self.code_wo_comments.replace("||", "$OR$") self.code_wo_comments = self.turn_single_condition_into_multiline(self.code_wo_comments) self.code_wo_comments = self.rewrite_ternary_operation_to_normal_condition(self.code_wo_comments) + self.code_wo_comments = self.rewrite_jump_dot(self.code_wo_comments) def check_its_nextflow(self): @@ -61,6 +62,11 @@ class Code: code = code.replace(old, new) return code + def rewrite_jump_dot(self, code): + pattern = r"\n *\." + code = re.sub(pattern, '.', code) + return code + def get_line(self, bit_of_code): code = remove_comments(self.code) index = code.find(bit_of_code) diff --git a/src/outils_graph.py b/src/outils_graph.py index 0283822..acce374 100644 --- a/src/outils_graph.py +++ b/src/outils_graph.py @@ -577,34 +577,94 @@ def exist_path_dico(A, B, dico): return exists, visited +#def nr_path_succ(n, r, dico, R): +# rest_of_R = set(R)-set([r]) +# edges = remove_edges_with_node(dico["edges"], rest_of_R) +# exists, _ = exist_path(n, r, edges) +# if(exists): +# return True +# return False + + +path_exists = {} def nr_path_succ(n, r, dico, R): + try: + temp = path_exists[n] + except: + path_exists[n] = {} + try: + temp = path_exists[n][r] + except: + path_exists[n][r] = {} rest_of_R = set(R)-set([r]) - edges = remove_edges_with_node(dico["edges"], rest_of_R) - exists, _ = exist_path(n, r, edges) - if(exists): - return True - return False - + try: + temp = path_exists[n][r][str(rest_of_R)] + return temp + except: + edges = remove_edges_with_node(dico["edges"], rest_of_R) + exists, _ = exist_path(n, r, edges) + path_exists[n][r][str(rest_of_R)] = exists + return exists + + +#def nr_path_pred(r, n, dico, R): +# rest_of_R = set(R)-set([r]) +# edges = remove_edges_with_node(dico["edges"], rest_of_R) +# exists, _ = exist_path(r, n, edges) +# if(exists): +# return True +# return False + def nr_path_pred(r, n, dico, R): + try: + temp = path_exists[r] + except: + path_exists[r] = {} + try: + temp = path_exists[r][n] + except: + path_exists[r][n] = {} rest_of_R = set(R)-set([r]) - edges = remove_edges_with_node(dico["edges"], rest_of_R) - exists, _ = exist_path(r, n, edges) - if(exists): - return True - return False + try: + temp = path_exists[r][n][str(rest_of_R)] + return temp + except: + edges = remove_edges_with_node(dico["edges"], rest_of_R) + exists, _ = exist_path(r, n, edges) + path_exists[r][n][str(rest_of_R)] = exists + return exists + +##Added a dico so it knows what it's already searched +#dico_rSucc = {} +#def rSucc(n, dico, R, outputs): +# #try: +# # tab = dico_rSucc[n] +# #except: +# tab = [] +# for r in set(R).union(set(outputs)): +# if(nr_path_succ(n, r, dico, R+list(outputs))): +# tab.append(r) +# dico_rSucc[n] = tab +# return tab #Added a dico so it knows what it's already searched dico_rSucc = {} def rSucc(n, dico, R, outputs): - #try: - # tab = dico_rSucc[n] - #except: - tab = [] - for r in set(R).union(set(outputs)): - if(nr_path_succ(n, r, dico, R+list(outputs))): - tab.append(r) - dico_rSucc[n] = tab - return tab + try: + temp = dico_rSucc[n] + except: + dico_rSucc[n] = {} + union_set = set(R).union(set(outputs)) + try: + temp = dico_rSucc[n][str(union_set)] + return temp + except: + tab = [] + for r in union_set: + if(nr_path_succ(n, r, dico, R+list(outputs))): + tab.append(r) + dico_rSucc[n][str(union_set)] = tab + return tab def rSuccM(M, dico, R, outputs): tab = [] @@ -612,18 +672,37 @@ def rSuccM(M, dico, R, outputs): tab += rSucc(n, dico, R, outputs) return list(set(tab)) +#Added a dico so it knows what it's already searched +#dico_rPred = {} +#def rPred(n, dico, R, inputs): +# #try: +# # tab = dico_rPred[n] +# #except: +# tab = [] +# for r in set(R).union(set(inputs)): +# if(nr_path_pred(r, n, dico, R+list(inputs))): +# tab.append(r) +# dico_rPred[n] = tab +# return tab + #Added a dico so it knows what it's already searched dico_rPred = {} def rPred(n, dico, R, inputs): - #try: - # tab = dico_rPred[n] - #except: - tab = [] - for r in set(R).union(set(inputs)): - if(nr_path_pred(r, n, dico, R+list(inputs))): - tab.append(r) - dico_rPred[n] = tab - return tab + try: + temp = dico_rPred[n] + except: + dico_rPred[n] = {} + union_set = set(R).union(set(inputs)) + try: + temp = dico_rPred[n][str(union_set)] + return temp + except: + tab = [] + for r in union_set: + if(nr_path_pred(r, n, dico, R+list(inputs))): + tab.append(r) + dico_rPred[n][str(union_set)] = tab + return tab def rPredM(M, dico, R, inputs): tab = [] -- GitLab