diff --git a/src/call.py b/src/call.py index 5f474f008d275c622d8cdefe1cd0bbc3161185df..7febe835f765d4744ab2d5016d3c8753b654d3d7 100644 --- a/src/call.py +++ b/src/call.py @@ -286,7 +286,7 @@ class Call(Executor): temp_dico['edges'] = [] temp_dico['subworkflows'] = {} sub.get_structure(temp_dico) - dico['subworkflows'][sub.get_alias()] = temp_dico + dico['subworkflows'][sub.get_printed_name()] = temp_dico param_index = 0 def add_parameter(p, param_index): @@ -413,8 +413,9 @@ class Call(Executor): #If the elements need to duplicated -> then we need to duplicate it if(self.get_duplicate_status()): temp = process - process = process.copy() + process, num = process.copy() process.set_alias(temp.get_alias()) + process.set_printed_name(f"{temp.get_alias()}_{num}") process.initialise() self.first_element_called = process self.origin.add_element_to_elements_being_called(process) @@ -422,8 +423,9 @@ class Call(Executor): if(process==None and subworkflow!=None and fun==None): if(self.get_duplicate_status()): temp = subworkflow - subworkflow = subworkflow.copy() + subworkflow, num = subworkflow.copy() subworkflow.set_alias(temp.get_alias()) + subworkflow.set_printed_name(f"{temp.get_alias()}_{num}") subworkflow.initialise() self.first_element_called = subworkflow self.origin.add_element_to_elements_being_called(subworkflow) diff --git a/src/include.py b/src/include.py index 5e419033b4aa2f0f0d5c1491d92ec8b9ad271291..bfced507d5d7453586641bf7c322cf030522f092 100644 --- a/src/include.py +++ b/src/include.py @@ -117,7 +117,7 @@ class Include(Nextflow_Building_Blocks): for match in re.finditer(pattern_as, include): found = True #if(self.get_duplicate_status()): - thing_as = self.nextflow_file.get_element_from_name(match.group(1)).copy() + thing_as, num = self.nextflow_file.get_element_from_name(match.group(1)).copy() thing_as.set_alias(match.group(3)) self.defines[match.group(3)] = thing_as #else: diff --git a/src/process.py b/src/process.py index d65edfa0a149d08937534047f0695f8ff837d5e8..5c0cdf489730afb8c857adb176bff7914ef5dc8a 100644 --- a/src/process.py +++ b/src/process.py @@ -29,6 +29,7 @@ class Process(Nextflow_Building_Blocks): self.called_by = []#List of calls self.initialised = False + self.number_times_copied = 0 def copy(self): @@ -46,17 +47,28 @@ class Process(Nextflow_Building_Blocks): process.script_code = "" process.called_by = []#List of calls process.initialised = False - return process + num = self.number_times_copied + self.number_times_copied += 1 + return process, num def add_to_emits(self, emit): self.later_emits.append(emit) def get_later_emits(self): return self.later_emits - + def set_alias(self, alias): self.alias = alias + def set_printed_name(self, name): + self.printed_name = name + + def get_alias(self): + return self.alias + + def get_printed_name(self): + return self.printed_name + def get_number_times_called(self): return self.number_times_called @@ -69,8 +81,6 @@ class Process(Nextflow_Building_Blocks): def get_call(self): return self.call - def get_alias(self): - return self.alias def get_script_code(self): return self.script_code diff --git a/src/subworkflow.py b/src/subworkflow.py index 804a50e91f34ac21c334dae30b848c60a207c60c..9a5598e36fcbdf8bd14e9b3fba8e236ffa2639f6 100644 --- a/src/subworkflow.py +++ b/src/subworkflow.py @@ -15,6 +15,7 @@ class Subworkflow(Main): Main.__init__(self, code, nextflow_file) self.name = name.replace("'", "").replace('"', '') self.alias = self.name + self.printed_name = self.name #These are the different parts of of a subworkflow -> work corresponds to the main self.take = [] self.takes_channels = [] @@ -28,10 +29,12 @@ class Subworkflow(Main): self.number_times_called = 0 self.called_by = []#List of calls + self.number_times_copied = 0 def copy(self): sub = copy.copy(self) sub.alias = self.name + sub.printed_name = self.printed_name sub.take = [] sub.takes_channels = [] sub.work = None @@ -41,7 +44,9 @@ class Subworkflow(Main): sub.later_emits = [] sub.number_times_called = 0 sub.called_by = [] - return sub + num = self.number_times_copied + self.number_times_copied+=1 + return sub, num #TODO make sure this is uptodate def get_calls_by_name(self, name): @@ -81,8 +86,14 @@ class Subworkflow(Main): def set_alias(self, alias): self.alias = alias + def set_printed_name(self, name): + self.printed_name = name + def get_alias(self): return self.alias + + def get_printed_name(self): + return self.printed_name def get_type(self): return "Subworkflow"