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