From 19de4648363b6be2044877a530a5b719b0826764 Mon Sep 17 00:00:00 2001
From: George Marchment <georgemarchment@yahoo.fr>
Date: Tue, 25 Mar 2025 15:25:30 +0100
Subject: [PATCH] Add initialise condition for the code -> so it doesn't
 initialises every time (only one when you do the file)

---
 src/call.py                     |  2 +-
 src/code_.py                    |  7 ++++---
 src/executor.py                 |  2 +-
 src/function.py                 |  2 +-
 src/include.py                  |  2 +-
 src/main.py                     |  2 +-
 src/nextflow_building_blocks.py |  4 ++--
 src/nextflow_file.py            |  4 +++-
 src/operation.py                |  4 ++--
 src/process.py                  |  2 +-
 src/root.py                     |  2 +-
 src/subworkflow.py              | 28 ++++++++++++++--------------
 12 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/src/call.py b/src/call.py
index 6a03975..8873b57 100644
--- a/src/call.py
+++ b/src/call.py
@@ -14,7 +14,7 @@ from . import constant
 
 class Call(Executor):
     def __init__(self, code, origin, OG_code = ''):
-        self.code = Code(code = code, origin = self)
+        self.code = Code(code = code, origin = self, initialise=False)
         self.origin = origin
         self.called = []
         self.first_element_called = None
diff --git a/src/code_.py b/src/code_.py
index 7f529f7..295f564 100644
--- a/src/code_.py
+++ b/src/code_.py
@@ -4,11 +4,12 @@ import re
 from . import constant
 
 class Code:
-    def __init__(self, code, origin):
+    def __init__(self, code, origin, initialise):
         self.code = code
-        self.code_wo_comments = ""
+        self.code_wo_comments = code
         self.origin = origin
-        self.initialise()
+        if(initialise):
+            self.initialise()
         #self.check_its_nextflow()
 
 
diff --git a/src/executor.py b/src/executor.py
index 0073716..dca03da 100644
--- a/src/executor.py
+++ b/src/executor.py
@@ -19,7 +19,7 @@ from .bioflowinsighterror import BioFlowInsightError
 class Executor(Nextflow_Building_Blocks):
     def __init__(self, code, origin):
         self.origin = origin
-        self.code = Code(code = code, origin = self)
+        self.code = Code(code = code, origin = self, initialise=False)
 
         
         
diff --git a/src/function.py b/src/function.py
index 0d04135..8e1a3a4 100644
--- a/src/function.py
+++ b/src/function.py
@@ -7,7 +7,7 @@ from .nextflow_building_blocks import Nextflow_Building_Blocks
 class Function(Nextflow_Building_Blocks):
     def __init__(self, code, name, origin):
         self.origin = origin
-        self.code = Code(code, origin = self)
+        self.code = Code(code, origin = self, initialise=False)
         self.name = name
         self.alias = name
 
diff --git a/src/include.py b/src/include.py
index e2ee93f..39627e1 100644
--- a/src/include.py
+++ b/src/include.py
@@ -23,7 +23,7 @@ class Include(Nextflow_Building_Blocks):
     def __init__(self, code, file, importing, nextflow_file):
         self.nextflow_file_origin = nextflow_file
         self.importing = importing
-        self.code = Code(code = code, origin = self)
+        self.code = Code(code = code, origin = self, initialise=False)
         self.nextflow_file = None
         self.define_file(file)
         self.defines = {}
diff --git a/src/main.py b/src/main.py
index 477c0b5..7f1f38b 100644
--- a/src/main.py
+++ b/src/main.py
@@ -10,7 +10,7 @@ from . import constant
 
 class Main(Nextflow_Building_Blocks):
     def __init__(self, code, nextflow_file):
-        Nextflow_Building_Blocks.__init__(self, code)
+        Nextflow_Building_Blocks.__init__(self, code, initialise_code=False)
         self.nextflow_file = nextflow_file
         self.initialised = False
         self.root = None 
diff --git a/src/nextflow_building_blocks.py b/src/nextflow_building_blocks.py
index 0dc2e69..aba604f 100644
--- a/src/nextflow_building_blocks.py
+++ b/src/nextflow_building_blocks.py
@@ -11,8 +11,8 @@ from .bioflowinsighterror import BioFlowInsightError
 
 
 class Nextflow_Building_Blocks:
-    def __init__(self, code):
-        self.code = Code(code = code, origin = self)
+    def __init__(self, code, initialise_code):
+        self.code = Code(code = code, origin = self, initialise=initialise_code)
     
     #---------------------------------
     #AUXILIARY METHODS FOR ALL CLASSES
diff --git a/src/nextflow_file.py b/src/nextflow_file.py
index 824b613..c4dfcd8 100644
--- a/src/nextflow_file.py
+++ b/src/nextflow_file.py
@@ -33,7 +33,7 @@ class Nextflow_File(Nextflow_Building_Blocks):
         self.functions = []
         self.initialised = False
         contents = check_file_exists(self.get_file_address(), self)
-        Nextflow_Building_Blocks.__init__(self, contents)
+        Nextflow_Building_Blocks.__init__(self, contents, initialise_code=True)
         self.check_file_correctness()
 
     #----------------------
@@ -338,6 +338,8 @@ class Nextflow_File(Nextflow_Building_Blocks):
                     temp = code
                     code = code.replace(proecess.get_code(), "")
                     if(temp==code):
+                        print(code)
+                        print(proecess.get_code())
                         raise Exception("This souldn't happen")
                     
                 
diff --git a/src/operation.py b/src/operation.py
index 3b2b9ff..82b697b 100644
--- a/src/operation.py
+++ b/src/operation.py
@@ -18,7 +18,7 @@ from . import constant
 class Operation(Executor):
     def __init__(self, code, origin, OG_code = ''):
         self.origin = origin
-        self.code = Code(code, origin = self)
+        self.code = Code(code, origin = self, initialise=False)
         self.origins = []
         self.gives = []
         self.label = ""
@@ -33,7 +33,7 @@ class Operation(Executor):
 
     def change_code(self, code):
         self.OG_code = self.get_code()
-        self.code = Code(code, origin = self)
+        self.code = Code(code, origin = self, initialise=False)
 
     def set_as_artificial(self):
         self.artificial = True
diff --git a/src/process.py b/src/process.py
index c82cac1..f54bbd0 100644
--- a/src/process.py
+++ b/src/process.py
@@ -13,7 +13,7 @@ from . import constant
 class Process(Nextflow_Building_Blocks):
     def __init__(self, code, nextflow_file):
         self.nextflow_file = nextflow_file
-        self.code = Code(code, origin = self)
+        self.code = Code(code, origin = self, initialise=False)
         #Origin is only used in the case DSL1
         self.origin = None
         self.name = ""
diff --git a/src/root.py b/src/root.py
index 60c76ee..f5306bb 100644
--- a/src/root.py
+++ b/src/root.py
@@ -11,7 +11,7 @@ import re
 class Root(Nextflow_Building_Blocks):
     def __init__(self, code, origin, modules_defined,
                  subworkflow_inputs = []):#These channels are the inputs of the subworkflow
-        Nextflow_Building_Blocks.__init__(self, code)
+        Nextflow_Building_Blocks.__init__(self, code, initialise_code=False)
         self.origin = origin
         self.executors = []
         self.blocks = []
diff --git a/src/subworkflow.py b/src/subworkflow.py
index ad6b204..8c4c057 100644
--- a/src/subworkflow.py
+++ b/src/subworkflow.py
@@ -165,13 +165,13 @@ class Subworkflow(Main):
         #Case everything is there
         if(take_pos!=(0, 0) and main_pos!=(0, 0) and emit_pos!=(0, 0)):
             if(take_pos[0]<main_pos[0] and main_pos[0]<emit_pos[0]):
-                self.take = Code(code[take_pos[1]:main_pos[0]].strip(), origin = self)
-                self.work = Code(code[main_pos[1]:emit_pos[0]].strip(), origin = self)
-                self.emit = Code(code[emit_pos[1]:code.rfind('}')].strip(), origin = self)
+                self.take = Code(code[take_pos[1]:main_pos[0]].strip(), origin = self, initialise=False)
+                self.work = Code(code[main_pos[1]:emit_pos[0]].strip(), origin = self, initialise=False)
+                self.emit = Code(code[emit_pos[1]:code.rfind('}')].strip(), origin = self, initialise=False)
             elif(take_pos[0]<emit_pos[0] and emit_pos[0]<main_pos[0]):
-                self.take = Code(code[take_pos[1]:emit_pos[0]].strip(), origin = self)
-                self.emit = Code(code[emit_pos[1]:main_pos[0]].strip(), origin = self)
-                self.work = Code(code[main_pos[1]:code.rfind('}')].strip(), origin = self)
+                self.take = Code(code[take_pos[1]:emit_pos[0]].strip(), origin = self, initialise=False)
+                self.emit = Code(code[emit_pos[1]:main_pos[0]].strip(), origin = self, initialise=False)
+                self.work = Code(code[main_pos[1]:code.rfind('}')].strip(), origin = self, initialise=False)
             else:
                 raise Exception('You need to add a case')
         #Case nothing is there
@@ -179,33 +179,33 @@ class Subworkflow(Main):
             #raise Exception(f"Subworkflow {code} doesn't have anything defined")
             firt_curly  = code.find("{")
             last_curly = code.rfind('}')
-            self.work = Code(code[firt_curly+1:last_curly], origin = self)
+            self.work = Code(code[firt_curly+1:last_curly], origin = self, initialise=False)
         #Case there is an input but no output
         if(take_pos!=(0, 0) and main_pos!=(0, 0) and emit_pos==(0, 0)):
             if(take_pos[0]<main_pos[0]):
-                self.take = Code(code[take_pos[1]:main_pos[0]].strip(), origin = self)
-                self.work = Code(code[main_pos[1]:code.rfind('}')].strip(), origin = self)
+                self.take = Code(code[take_pos[1]:main_pos[0]].strip(), origin = self, initialise=False)
+                self.work = Code(code[main_pos[1]:code.rfind('}')].strip(), origin = self, initialise=False)
             else:
                 raise Exception('You need to add a case')
         #Case there is no input but an output
         if(take_pos==(0, 0) and main_pos!=(0, 0) and emit_pos!=(0, 0)):
             if(main_pos[0]<emit_pos[0]):
-                self.work = Code(code[main_pos[1]:emit_pos[0]].strip(), origin = self)
-                self.emit = Code(code[emit_pos[1]:code.rfind('}')].strip(), origin = self)
+                self.work = Code(code[main_pos[1]:emit_pos[0]].strip(), origin = self, initialise=False)
+                self.emit = Code(code[emit_pos[1]:code.rfind('}')].strip(), origin = self, initialise=False)
             else:
                 raise Exception('You need to add a case')
         #Case there is a main but no input and no output
         if(take_pos==(0, 0) and main_pos!=(0, 0) and emit_pos==(0, 0)):
-            self.work = Code(code[main_pos[1]:code.rfind('}')].strip(), origin = self)
+            self.work = Code(code[main_pos[1]:code.rfind('}')].strip(), origin = self, initialise=False)
         if( main_pos==(0, 0) and (take_pos!=(0, 0) or emit_pos!=(0, 0))):
             if(take_pos!=(0, 0) and emit_pos!=(0, 0)):
                 raise Exception("TODO")
             elif(take_pos!=(0, 0) and emit_pos==(0, 0)):
                 raise Exception("TODO")
             elif(take_pos==(0, 0) and emit_pos!=(0, 0)):
-                self.emit = Code(code[emit_pos[1]:code.rfind('}')].strip(), origin = self)
+                self.emit = Code(code[emit_pos[1]:code.rfind('}')].strip(), origin = self, initialise=False)
                 firt_curly  = code.find("{")
-                self.work = Code(code[firt_curly+1:emit_pos[0]].strip(), origin = self)
+                self.work = Code(code[firt_curly+1:emit_pos[0]].strip(), origin = self, initialise=False)
             else:
                 raise Exception("Not possible!")
     
-- 
GitLab