From 8be0c11071ede34338fe1f6a8923d8dccefe2d07 Mon Sep 17 00:00:00 2001 From: George Marchment <georgemarchment@yahoo.fr> Date: Mon, 10 Mar 2025 10:07:30 +0100 Subject: [PATCH] Update smalll bug + removing ternary operator from code --- src/code_.py | 20 ++++++++++++++++++++ src/function.py | 3 +++ src/subworkflow.py | 1 - src/workflow.py | 15 +++++++++++---- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/code_.py b/src/code_.py index b43c9c5..53a0749 100644 --- a/src/code_.py +++ b/src/code_.py @@ -21,6 +21,7 @@ class Code: self.code_wo_comments = re.sub(constant.BACKSLAPSH_JUMP, ' ', self.code_wo_comments) 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) def check_its_nextflow(self): @@ -40,6 +41,25 @@ class Code: old, new = r code = code.replace(old, new) return code + + #This methods rewrite ternary operation into "normal" conditions + #variable = (condition) ? Expression2 : Expression3; + def rewrite_ternary_operation_to_normal_condition(self, code): + pattern = r"(\w+) *\= *([^?\n]+) *\? *([^:\n]+) *\: *([^\n]+)\n" + to_replace = [] + for match in re.finditer(pattern, code): + variable = match.group(1) + condition = match.group(2).strip() + exp1, exp2 = match.group(3).strip(), match.group(4).strip() + old = match.group(0) + new = f"if ({condition}) {{\n{variable} = {exp1}\n}}\n\n" + new += f"if (!({condition})) {{\n{variable} = {exp2}\n}}\n\n" + #else {{\n{variable} = {exp2}\n}}\n" + to_replace.append((old, new)) + for r in to_replace: + old, new = r + code = code.replace(old, new) + return code def get_line(self, bit_of_code): code = remove_comments(self.code) diff --git a/src/function.py b/src/function.py index 8c9ec00..0d04135 100644 --- a/src/function.py +++ b/src/function.py @@ -16,6 +16,9 @@ class Function(Nextflow_Building_Blocks): def get_alias(self): return self.alias + + def get_alias_and_id(self): + return f"{self.alias}_GG_{id(self)}" def get_type(self): return "Function" diff --git a/src/subworkflow.py b/src/subworkflow.py index 44ffdca..774a7d2 100644 --- a/src/subworkflow.py +++ b/src/subworkflow.py @@ -100,7 +100,6 @@ class Subworkflow(Main): def simplify_code(self): code = super().simplify_code() for o in self.emit: - print(o.get_code(get_OG = True), o.simplify_code(), o.OG_code) code = code.replace(o.get_code(get_OG = True), o.simplify_code(), 1) return code diff --git a/src/workflow.py b/src/workflow.py index f2995a7..36e6c96 100644 --- a/src/workflow.py +++ b/src/workflow.py @@ -749,7 +749,6 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen #Get the clusters and the code relevant_processes = self.check_relevant_processes_in_workflow(relevant_processes) - print(relevant_processes) self.generate_user_view(relevant_processes = relevant_processes, processes_2_remove = []) clusters = self.graph.get_clusters_from_user_view() broken_subworkflows = get_workflows_broken(get_subworkflow_2_executors(), get_clusters_with_calls(clusters)) @@ -767,7 +766,7 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen broken_subworkflows = get_workflows_broken(get_subworkflow_2_executors(), get_clusters_with_calls(clusters)) - + #print(code) @@ -967,8 +966,16 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen #Replace names inside subworkflow subworkflow_code = f"workflow {name} {{\n{take}\nmain:\n{body}\n{emit}\n}}" for i in range(len(new_param_names)): - pattern = fr"[\=\,\(] *({re.escape(takes_param[i].get_code())})[\s\,\)\.]" - subworkflow_code = replace_group1(subworkflow_code, pattern, new_param_names[i]) + if(takes_param[i].get_code() != new_param_names[i]): + #pattern = fr"[\=\,\(] *({re.escape(takes_param[i].get_code())})[\s\,\)\.]" + pattern = fr"({re.escape(takes_param[i].get_code())})[\s\,\)\.]" + temp = subworkflow_code + subworkflow_code = replace_group1(subworkflow_code, pattern, new_param_names[i]) + if(temp==subworkflow_code): + print(takes_param[i].get_code(), new_param_names[i]) + print(pattern) + print(f'"{subworkflow_code}"') + raise Exception("Something went wrong -> cause the paramter wasn't updated") #subworkflow_code = subworkflow_code.replace(takes_param[i].get_code(), new_param_names[i]) #TODO -> added verification of conditions -- GitLab