From c902617ac20cc54c5bfef5e117a77b252ca8f57d Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Tue, 9 Mar 2021 09:21:08 +0100 Subject: [PATCH 01/35] Commit between local branch changes- See also previous commit message --- .vscode/launch.json | 16 +- .vscode/settings.json | 2 +- wfGenes_exe/clean_wfgenes.py | 2 +- wfGenes_exe/dask_wfgenes.py | 299 +++++++++++++++---------------- wfGenes_exe/dot_wfgenes.py | 51 +++--- wfGenes_exe/fireworks_wfgenes.py | 81 ++++----- wfGenes_exe/initial_wfgenes.py | 74 +++++--- wfGenes_exe/parsl_wfgenes.py | 262 +++++++++++++-------------- wfGenes_exe/pywrapper_wfgenes.py | 2 +- wfGenes_exe/wconfig_schema.json | 30 +++- wfGenes_exe/wgenerator.py | 44 ++--- 11 files changed, 449 insertions(+), 414 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 4e9cb64..6f02750 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -69,13 +69,23 @@ "console": "integratedTerminal" }, + { + "name": "Python_1: scripttask", + "type": "python", + "request": "launch", + "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", + "cwd": "${workspaceRoot}/intro_examples/script_task", + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/script_task/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/script_task/inputs", "--wms", "FireWorks"], + "console": "integratedTerminal" + }, + { "name": "Python: catalyst", "type": "python", "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/multihith", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/wconfig-orroercat-full.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs-orroercat", "--outputpath","output", "--wms", "all"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/wconfig-orroercat-full.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs-orroercat", "--wms", "all"], "console": "integratedTerminal" }, @@ -86,7 +96,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/foreach_sample", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/foreach_sample/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/foreach_sample/inputs/", "--wms", "Dask"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/foreach_sample/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/foreach_sample/inputs/", "--wms", "FireWorks"], "console": "integratedTerminal" }, @@ -116,7 +126,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/multihith", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs_slab_version_2/", "--wms", "all"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs_slab_version_2/", "--wms", "Dask"], "console": "integratedTerminal" }, diff --git a/.vscode/settings.json b/.vscode/settings.json index 16fd59d..0ff692c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,4 @@ { "python.pythonPath": "/home/mehdi/tools/anaconda3/envs/myenv/bin/python", - "jupyter.jupyterServerType": "remote" + "jupyter.jupyterServerType": "local" } \ No newline at end of file diff --git a/wfGenes_exe/clean_wfgenes.py b/wfGenes_exe/clean_wfgenes.py index a1f371a..923e430 100644 --- a/wfGenes_exe/clean_wfgenes.py +++ b/wfGenes_exe/clean_wfgenes.py @@ -22,7 +22,7 @@ from initial_wfgenes import BasewfGenes class CleanwfGenes(BasewfGenes): """"Clean up previous files for old wConfig""" def __init__(self, blueargs): - BasewfGenes.__init__(self, blueargs) + #BasewfGenes.__init__(self, blueargs) self.clean_wfgenes() diff --git a/wfGenes_exe/dask_wfgenes.py b/wfGenes_exe/dask_wfgenes.py index 0353921..e286ca8 100644 --- a/wfGenes_exe/dask_wfgenes.py +++ b/wfGenes_exe/dask_wfgenes.py @@ -16,25 +16,24 @@ import yaml from builtin_wfgenes import merge_dic from initial_wfgenes import BasewfGenes -class DaskwfGenes(BasewfGenes): +class DaskwfGenes(): """Generate Python wrapper for wConfig nodes orignized to run parallel with DASK delayed decorators""" - def __init__(self, blueargs): - BasewfGenes.__init__(self, blueargs) - self.dask_generation() + def __init__(self, wfgenes_init): + # BasewfGenes.__init__(self, blueargs) + self.dask_generation(wfgenes_init) - - def dask_generation(self): + def dask_generation(self, wfgenes_init): self.wfg_dask = "" self.indent=" " lazy_str = 'lazy_' - self.dask_path = os.path.join(self.workflow_path, 'Dask') - if not os.path.exists(self.dask_path): - os.makedirs(self.dask_path) - self.wrapper_path = os.path.join(self.dask_path, - self.interface_dict['workflow_name'] + '_dask.py') + dask_path = os.path.join(wfgenes_init.workflow_path, 'Dask') + if not os.path.exists(dask_path): + os.makedirs(dask_path) + wrapper_path = os.path.join(dask_path, + wfgenes_init.interface_dict['workflow_name'] + '_dask.py') self.wfg_dask += "import yaml\n" self.wfg_dask += "import numpy as np\n" self.wfg_dask += "from auxiliary import flat_tuple\n" @@ -46,16 +45,16 @@ class DaskwfGenes(BasewfGenes): self.wfg_dask += "from dask_jobqueue import SLURMCluster\n" self.wfg_dask += "import time\n" - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop - self.func_file = self.func[i][j][0] - self.func_module = self.func[i][j][1] - self.func_nodup_0 = self.func_nodup[i][j][0] - self.func_global_nodup_0 = self.func_global_nodup[i][j][0] + func_file = wfgenes_init.func[i][j][0] + func_module = wfgenes_init.func[i][j][1] + func_nodup_0 = wfgenes_init.func_nodup[i][j][0] + func_global_nodup_0 = wfgenes_init.func_global_nodup[i][j][0] - if self.func_file != 'BUILTIN' and self.func_nodup_0!= 'duplicate' and self.func_global_nodup_0 != 'global_duplicate': - self.wfg_dask += 'from ' + str(self.func_file) + ' import ' + str(self.func_module) + '\n' + if func_file != 'BUILTIN' and func_nodup_0 != 'duplicate' and func_global_nodup_0 != 'global_duplicate': + self.wfg_dask += 'from ' + str(func_file) + ' import ' + str(func_module) + '\n' self.wfg_dask += "\nif __name__ == '__main__':\n\n" @@ -66,105 +65,102 @@ class DaskwfGenes(BasewfGenes): self.wfg_dask += "\n"+self.indent+"#print(cluster.job_script())" self.wfg_dask += "\n"+self.indent+"dask.config.set(scheduler='threads')" - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop j loop - self.func_builtin = 'NORMALFUNCTION' - self.func_file = self.func[i][j][0] - self.func_module = self.func[i][j][1] + wfgenes_init.func_builtin = 'NORMALFUNCTION' + wfgenes_init.func_file = wfgenes_init.func[i][j][0] + wfgenes_init.func_module = wfgenes_init.func[i][j][1] self.split_array = 'NULL' # The varaiable which FOREACH iterates over self.zip_inputs = [] - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': - self.func_builtin = 'FOREACH' - self.split_array = self.func[i][j][3] - self.chunk_size = self.func[i][j][4] + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': + wfgenes_init.func_builtin = 'FOREACH' + self.split_array = wfgenes_init.func[i][j][3] + self.chunk_size = wfgenes_init.func[i][j][4] self.index_split = '' - if len(self.func[i][j]) > 5: - for elements in self.func[i][j][5]['zip_inputs']: + if len(wfgenes_init.func[i][j]) > 5: + for elements in wfgenes_init.func[i][j][5]['zip_inputs']: self.zip_inputs.append(elements) - self.len_inputs = len(self.inputs[i][j]) + self.len_inputs = len(wfgenes_init.inputs[i][j]) for k in range(self.len_inputs): - if self.inputs[i][j][k] == self.split_array and self.func_builtin == 'FOREACH': - self.index_split = self.inputs_links[i][j][k][2] - - - - - self.func_nodup_0 = self.func_nodup[i][j][0] - self.func_global_nodup_0= self.func_global_nodup[i][j][0] - self.len_inputs = len(self.inputs[i][j]) - self.len_outputs=len(self.outputs[i][j]) + if wfgenes_init.inputs[i][j][k] == self.split_array and wfgenes_init.func_builtin == 'FOREACH': + self.index_split = wfgenes_init.inputs_links[i][j][k][2] + + wfgenes_init.func_nodup_0 = wfgenes_init.func_nodup[i][j][0] + wfgenes_init.func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] + self.len_inputs = len(wfgenes_init.inputs[i][j]) + self.len_outputs=len(wfgenes_init.outputs[i][j]) for k in range(self.len_inputs): # Cache variables inside loop k loop - self.input_k = self.inputs[i][j][k] - self.inputs_nodup_k= self.inputs_nodup[i][j][k] - self.inputs_global_nodup_k= self.inputs_global_nodup[i][j][k] - self.inputs_no_locdep_k= self.inputs_no_locdep[i][j][k][0] - input_gdependent = self.inputs_links[i][j][k][0].isnumeric() + self.input_k = wfgenes_init.inputs[i][j][k] + wfgenes_init.inputs_nodup_k= wfgenes_init.inputs_nodup[i][j][k] + wfgenes_init.inputs_global_nodup_k= wfgenes_init.inputs_global_nodup[i][j][k] + wfgenes_init.inputs_no_locdep_k= wfgenes_init.inputs_no_locdep[i][j][k][0] + input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() - if self.inputs_global_nodup_k != 'global_duplicate' and self.inputs_nodup_k!= 'duplicate' and self.inputs_no_locdep_k!= 'inner_dependent' and input_gdependent == False: - # Load self.inputs + if wfgenes_init.inputs_global_nodup_k != 'global_duplicate' and wfgenes_init.inputs_nodup_k!= 'duplicate' and wfgenes_init.inputs_no_locdep_k!= 'inner_dependent' and input_gdependent == False: + # Load wfgenes_init.inputs self.wfg_dask += '\n'+ self.indent +'#Read Input #' + str(k +1) +' from subroutine #' + str(j + 1) + ' in routine #' + str(i) + '\n' self.wfg_dask += self.indent + "yaml_stream = open('" + self.input_k + ".yaml', 'r')\n" self.wfg_dask += self.indent + self.input_k + " = yaml.load(yaml_stream, Loader=yaml.Loader)\n\n" self.wfg_dask += '\n' + self.indent + 'end_memtime = time.time()' - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop j loop - self.func_builtin = 'NORMALFUNCTION' - self.func_file = self.func[i][j][0] - self.func_module = self.func[i][j][1] - self.func_nodup_0 = self.func_nodup[i][j][0] - self.func_global_nodup_0= self.func_global_nodup[i][j][0] - self.len_inputs = len(self.inputs[i][j]) - self.len_outputs=len(self.outputs[i][j]) + func_builtin = 'NORMALFUNCTION' + func_file = wfgenes_init.func[i][j][0] + func_module = wfgenes_init.func[i][j][1] + func_nodup_0 = wfgenes_init.func_nodup[i][j][0] + func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] + self.len_inputs = len(wfgenes_init.inputs[i][j]) + self.len_outputs=len(wfgenes_init.outputs[i][j]) self.split_array = 'NULL' # The varaiable which FOREACH iterates over self.zip_inputs = [] - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': - self.func_builtin = 'FOREACH' - self.split_array = self.func[i][j][3] - self.chunk_size = self.func[i][j][4] + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': + func_builtin = 'FOREACH' + self.split_array = wfgenes_init.func[i][j][3] + self.chunk_size = wfgenes_init.func[i][j][4] self.index_split = '' - if len(self.func[i][j]) > 5: - for elements in self.func[i][j][5]['zip_inputs']: + if len(wfgenes_init.func[i][j]) > 5: + for elements in wfgenes_init.func[i][j][5]['zip_inputs']: self.zip_inputs.append(elements) - self.len_inputs = len(self.inputs[i][j]) + self.len_inputs = len(wfgenes_init.inputs[i][j]) for k in range(self.len_inputs): - if self.inputs[i][j][k] == self.split_array and self.func_builtin == 'FOREACH': - self.index_split = self.inputs_links[i][j][k][2] + if wfgenes_init.inputs[i][j][k] == self.split_array and wfgenes_init.func_builtin == 'FOREACH': + self.index_split = wfgenes_init.inputs_links[i][j][k][2] # Start of computation phase func_done = [] step_simulation = 1 - self.wfgenes_scheduler(func_done) + wfgenes_init.wfgenes_scheduler(func_done) self.suffix_log = [] previously_computed = [] # Keep track of launched task to avoid repeated computation - while self.func_waiting == True: + while wfgenes_init.func_waiting == True: self.wfg_dask += '\n\n'+self.indent+'#### Start Step #'+ str(step_simulation) step_simulation = step_simulation + 1 - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop j loop - self.func_builtin = '' - self.func_file = self.func[i][j][0] - self.func_nodup_0 = self.func_nodup[i][j][0] - self.func_global_nodup_0= self.func_global_nodup[i][j][0] - self.len_inputs = len(self.inputs[i][j]) - self.len_outputs=len(self.outputs[i][j]) - self.func_module = self.func[i][j][1] + wfgenes_init.func_builtin = '' + wfgenes_init.func_file = wfgenes_init.func[i][j][0] + wfgenes_init.func_nodup_0 = wfgenes_init.func_nodup[i][j][0] + wfgenes_init.func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] + self.len_inputs = len(wfgenes_init.inputs[i][j]) + self.len_outputs=len(wfgenes_init.outputs[i][j]) + wfgenes_init.func_module = wfgenes_init.func[i][j][1] - if self.foreach_output[i][j][0] != 'null': - output_number = len(self.outputs[self.foreach_output[i][j][1]][self.foreach_output[i][j][2]]) - elif self.foreach_output[i][j][1] == 'null': + if wfgenes_init.foreach_output[i][j][0] != 'null': + output_number = len(wfgenes_init.outputs[wfgenes_init.foreach_output[i][j][1]][wfgenes_init.foreach_output[i][j][2]]) + elif wfgenes_init.foreach_output[i][j][1] == 'null': # independent function output_number = self.len_outputs @@ -172,148 +168,148 @@ class DaskwfGenes(BasewfGenes): self.zip_inputs = [] coordinate = [i,j] # Routine and subroutine indexes - if self.func_global_nodup_0 == 'global_duplicate': + if func_global_nodup_0 == 'global_duplicate': func_suffix = '_id' + str(i) else: func_suffix = '' - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': - self.func_builtin = 'FOREACH' - self.split_array = self.func[i][j][3] - self.chunk_size = self.func[i][j][4] + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': + func_builtin = 'FOREACH' + self.split_array = wfgenes_init.func[i][j][3] + self.chunk_size = wfgenes_init.func[i][j][4] self.index_split = '' - if len(self.func[i][j]) > 5: - for elements in self.func[i][j][5]['zip_inputs']: + if len(wfgenes_init.func[i][j]) > 5: + for elements in wfgenes_init.func[i][j][5]['zip_inputs']: self.zip_inputs.append(elements) for k in range(self.len_inputs): - if self.inputs[i][j][k] == self.split_array and self.func_builtin == 'FOREACH': - self.index_split = self.inputs_links[i][j][k][2] + if wfgenes_init.inputs[i][j][k] == self.split_array and wfgenes_init.func_builtin == 'FOREACH': + self.index_split = wfgenes_init.inputs_links[i][j][k][2] - if self.chunk_size == 'full' and self.foreach_output[i][j][0] == 'null' : + if self.chunk_size == 'full' and wfgenes_init.foreach_output[i][j][0] == 'null' : self.chunk_size = 'len('+self.split_array+')' self.step= '1' - elif self.chunk_size == 'full' and self.foreach_output[i][j][0] != 'null' : - self.chunk_size = 'len(lazy_'+self.foreach_output[i][j][0]+')' + elif self.chunk_size == 'full' and wfgenes_init.foreach_output[i][j][0] != 'null' : + self.chunk_size = 'len(lazy_'+wfgenes_init.foreach_output[i][j][0]+')' self.step= '1' - elif self.chunk_size != 'full' and self.foreach_output[i][j][0] == 'null' : + elif self.chunk_size != 'full' and wfgenes_init.foreach_output[i][j][0] == 'null' : self.step= ' int(len('+self.split_array+')/'+self.chunk_size+')' - elif self.chunk_size != 'full' and self.foreach_output[i][j][0] != 'null' : + elif self.chunk_size != 'full' and wfgenes_init.foreach_output[i][j][0] != 'null' : if output_number > 1 : - self.step= ' int(len(lazy_'+self.foreach_output[i][j][0]+'['+ self.index_split +'])/'+self.chunk_size+')' + self.step= ' int(len(lazy_'+wfgenes_init.foreach_output[i][j][0]+'['+ self.index_split +'])/'+self.chunk_size+')' elif output_number == 1 : - self.step= ' int(len(lazy_'+self.foreach_output[i][j][0]+')/'+self.chunk_size+')' + self.step= ' int(len(lazy_'+wfgenes_init.foreach_output[i][j][0]+')/'+self.chunk_size+')' - if self.foreach_output[i][j][0] == 'null': + if wfgenes_init.foreach_output[i][j][0] == 'null': foreach_len = 'range(0 , len('+self.split_array+'),'+self.step+')' - if self.foreach_output[i][j][0] != 'null': + if wfgenes_init.foreach_output[i][j][0] != 'null': if output_number > 1: - foreach_len = 'range(0, len('+ lazy_str +self.foreach_output[i][j][0]+'['+ self.index_split +'])'+','+self.step+ ')' + foreach_len = 'range(0, len('+ lazy_str +wfgenes_init.foreach_output[i][j][0]+'['+ self.index_split +'])'+','+self.step+ ')' elif output_number == 1: - foreach_len = 'range(0, len('+ lazy_str +self.foreach_output[i][j][0]+')'+','+self.step+ ')' + foreach_len = 'range(0, len('+ lazy_str +wfgenes_init.foreach_output[i][j][0]+')'+','+self.step+ ')' - if len(self.func_depid[i][j]) == 1 and coordinate not in func_done: - if self.func_module != 'MERGE': - self.func[i][j][1] = self.func[i][j][1] + func_suffix + if len(wfgenes_init.func_depid[i][j]) == 1 and coordinate not in func_done: + if func_module != 'MERGE': + wfgenes_init.func[i][j][1] = wfgenes_init.func[i][j][1] + func_suffix # check if func is Ready and not computed already self.wfg_dask += '\n'+self.indent+'# Call subroutine #' + str(j + 1) + ' from routine #' +str(i)+ '\n' self.wfg_dask += self.indent # Call functions - if self.func_module != 'MERGE' and self.func_builtin != 'FOREACH': - self.wfg_dask += '\n'+self.indent+lazy_str+self.func_module+ func_suffix+' = dask.delayed(nout='+str(len(self.outputs_py[i][j]))+')('+self.func_module + ')(' + if func_module != 'MERGE' and func_builtin != 'FOREACH': + self.wfg_dask += '\n'+self.indent+lazy_str+wfgenes_init.func_module+ func_suffix+' = dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+wfgenes_init.func_module + ')(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' - elif self.func_module == 'MERGE' and self.func_builtin != 'FOREACH': - self.wfg_dask += '\n'+self.indent +lazy_str+ self.outputs_py[i][j][0] + ' = dask.delayed('+self.func_module+')(' + elif func_module == 'MERGE' and func_builtin != 'FOREACH': + self.wfg_dask += '\n'+self.indent +lazy_str+ wfgenes_init.outputs_py[i][j][0] + ' = dask.delayed('+wfgenes_init.func_module+')(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' - elif self.func_builtin == 'FOREACH': + elif func_builtin == 'FOREACH': # foreach implementation part 1/2 - self.wfg_dask += '\n'+self.indent+lazy_str+self.func_module+func_suffix+'= []' - for k in range(len(self.foreach_output[i][j])): - if self.foreach_output[i][j][0] != 'null' and len(self.func[self.foreach_output[i][j][1]][self.foreach_output[i][j][2]]) == 2: + self.wfg_dask += '\n'+self.indent+lazy_str+wfgenes_init.func_module+func_suffix+'= []' + for k in range(len(wfgenes_init.foreach_output[i][j])): + if wfgenes_init.foreach_output[i][j][0] != 'null' and len(wfgenes_init.func[wfgenes_init.foreach_output[i][j][1]][wfgenes_init.foreach_output[i][j][2]]) == 2: # Check if foreach computation depends on a lazy object - compute_now = self.foreach_output[i][j][0] + func_suffix + compute_now = wfgenes_init.foreach_output[i][j][0] + func_suffix if compute_now not in previously_computed: previously_computed.append(compute_now) # Append computed lazy task- Avoid extra computation self.wfg_dask += '\n'+self.indent+lazy_str + compute_now+ '='+ lazy_str + compute_now+ '.compute()' # Compute lazy objects self.wfg_dask += '\n'+self.indent + 'for i in ' + foreach_len + ' :' - self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+self.func_module+func_suffix+ '_foreach= dask.delayed(nout='+str(len(self.outputs_py[i][j]))+')('+self.func_module + ')(' + self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+wfgenes_init.func_module+func_suffix+ '_foreach= dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+wfgenes_init.func_module + ')(' # end of foreach implementation part 1/2 - self.write_arguments(lazy_str, i , j) # write argument list - if self.func_builtin == 'FOREACH': # foreach implementation Part 2/2 - self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+self.func_module+func_suffix+'.append('+lazy_str+self.func_module+func_suffix+'_foreach)' - self.wfg_dask += '\n'+self.indent+lazy_str + self.func_module+func_suffix+'= dask.compute( *'+ lazy_str + self.func_module+func_suffix +')' - previously_computed.append(self.func_module) - if len(self.outputs[i][j]) > 1: - self.wfg_dask += '\n'+self.indent+lazy_str + self.func_module + func_suffix + '= flat_tuple( '+ lazy_str + self.func_module + func_suffix + ', ' + str(len(self.outputs[i][j])) +')' - elif len(self.outputs[i][j]) == 1: - self.wfg_dask += '\n'+self.indent+lazy_str + self.func_module + func_suffix + '= flat_list( '+ lazy_str + self.func_module + func_suffix + ')' + self.write_arguments(lazy_str, wfgenes_init ,i , j) # write argument list + if wfgenes_init.func_builtin == 'FOREACH': # foreach implementation Part 2/2 + self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+wfgenes_init.func_module+func_suffix+'.append('+lazy_str+wfgenes_init.func_module+func_suffix+'_foreach)' + self.wfg_dask += '\n'+self.indent+lazy_str + wfgenes_init.func_module+func_suffix+'= dask.compute( *'+ lazy_str + wfgenes_init.func_module+func_suffix +')' + previously_computed.append(wfgenes_init.func_module) + if len(wfgenes_init.outputs[i][j]) > 1: + self.wfg_dask += '\n'+self.indent+lazy_str + wfgenes_init.func_module + func_suffix + '= flat_tuple( '+ lazy_str + wfgenes_init.func_module + func_suffix + ', ' + str(len(wfgenes_init.outputs[i][j])) +')' + elif len(wfgenes_init.outputs[i][j]) == 1: + self.wfg_dask += '\n'+self.indent+lazy_str + wfgenes_init.func_module + func_suffix + '= flat_list( '+ lazy_str + wfgenes_init.func_module + func_suffix + ')' func_done.append([i ,j]) ## Append implemented module - self.wfgenes_scheduler(func_done) + wfgenes_init.wfgenes_scheduler(func_done) - if self.func_builtin != 'FOREACH': + if wfgenes_init.func_builtin != 'FOREACH': self.wfg_dask += "\n"+self.indent+"#task_graph = Prefered_task.visualize(filename = 'mywf_test.png')" - if self.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': - self.wfg_dask += '\n'+self.indent+'print('+lazy_str+self.func[func_done[-1][0]][func_done[-1][1]][1]+ func_suffix+'.compute())' + if wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': + self.wfg_dask += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+ func_suffix+'.compute())' else: - self.wfg_dask += '\n'+self.indent+'print('+lazy_str+self.outputs_py[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' + self.wfg_dask += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs_py[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' self.wfg_dask += "\n"+ self.indent+"end_time = time.time()" self.wfg_dask += "\n"+ self.indent+"total_time = end_time - start_time" self.wfg_dask += "\n"+ self.indent+"total_memtime = end_memtime - start_time" self.wfg_dask += "\n"+ self.indent+"print(' The total time is' , round(total_time, 2), 'seconds')" self.wfg_dask += "\n"+ self.indent+"print(' The total memory load time is' , round(total_memtime, 2), 'seconds')" - with open(self.wrapper_path, 'w') as file: + with open(wrapper_path, 'w') as file: file.write(self.wfg_dask) - def write_arguments(self, lazy_str, i , j): + def write_arguments(self, lazy_str, wfgenes_init, i, j): """ Writing argument list for a module call""" - self.len_inputs = len(self.inputs[i][j]) + self.len_inputs = len(wfgenes_init.inputs[i][j]) for k in range(self.len_inputs): # Writing arguments of each function # Cache variables inside loop k loop - inputs = self.inputs[i][j][k] - inputs_nodup_k= self.inputs_nodup[i][j][k] - inputs_no_locdep_k= self.inputs_no_locdep[i][j][k][0] - input_gdependent = self.inputs_links[i][j][k][0].isnumeric() + inputs = wfgenes_init.inputs[i][j][k] + inputs_nodup_k= wfgenes_init.inputs_nodup[i][j][k] + inputs_no_locdep_k= wfgenes_init.inputs_no_locdep[i][j][k][0] + input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() argument_key = '' func_gloab = '' func_loc = '' func_loc_dep = '' func_gloab_dep = '' slice = '' # Slice only will be set for FOREACH method - if self.func_module == 'MERGE': - argument_key = self.inputs_locname[i][j][k]+'=' # This prefix is set only for merge function + if wfgenes_init.func_module == 'MERGE': + argument_key = wfgenes_init.inputs_locname[i][j][k]+'=' # This prefix is set only for merge function - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': if inputs == self.split_array or inputs in self.zip_inputs: slice = '[i:i+'+self.step+']' if inputs_no_locdep_k== 'inner_dependent': - input_index = self.inputs_no_locdep[i][j][k][2] - func_loc = self.func[i][int(self.inputs_no_locdep[i][j][k][1])][1] + input_index = wfgenes_init.inputs_no_locdep[i][j][k][2] + func_loc = wfgenes_init.func[i][int(wfgenes_init.inputs_no_locdep[i][j][k][1])][1] func_loc_dep = func_loc - output_number = len(self.outputs_py[i][int(self.inputs_no_locdep[i][j][k][1])]) - if self.func_builtin == 'FOREACH' and inputs == self.split_array : + output_number = len(wfgenes_init.outputs_py[i][int(wfgenes_init.inputs_no_locdep[i][j][k][1])]) + if wfgenes_init.func_builtin == 'FOREACH' and inputs == self.split_array : # Rewrite the value if it is split array - func_loc_dep = self.foreach_output[i][j][0] + func_loc_dep = wfgenes_init.foreach_output[i][j][0] if input_gdependent == True: - input_index = self.inputs_links[i][j][k][2] - func_gloab = self.func[int(self.inputs_links[i][j][k][0])][int(self.inputs_links[i][j][k][1])][1] + input_index = wfgenes_init.inputs_links[i][j][k][2] + func_gloab = wfgenes_init.func[int(wfgenes_init.inputs_links[i][j][k][0])][int(wfgenes_init.inputs_links[i][j][k][1])][1] func_gloab_dep = func_gloab - output_number= len(self.outputs[int(self.inputs_links[i][j][k][0])][int(self.inputs_links[i][j][k][1])]) - if self.func_builtin == 'FOREACH' and inputs == self.split_array : + output_number= len(wfgenes_init.outputs[int(wfgenes_init.inputs_links[i][j][k][0])][int(wfgenes_init.inputs_links[i][j][k][1])]) + if wfgenes_init.func_builtin == 'FOREACH' and inputs == self.split_array : # Rewrite the value if it is split arry - func_gloab_dep = self.foreach_output[i][j][0] + func_gloab_dep = wfgenes_init.foreach_output[i][j][0] # Writing arguments - 4 different scenarios if inputs_no_locdep_k != 'inner_dependent' and input_gdependent == False : @@ -354,7 +350,6 @@ class DaskwfGenes(BasewfGenes): self.wfg_dask += slice + ')' elif (func_loc == 'MERGE' or func_gloab == 'MERGE') and (input_gdependent == True or inputs_no_locdep_k== 'inner_dependent') : - #4 Dependent to Merge function if k != self.len_inputs - 1 : self.wfg_dask += argument_key+lazy_str + inputs diff --git a/wfGenes_exe/dot_wfgenes.py b/wfGenes_exe/dot_wfgenes.py index a8a86ac..9b868d8 100644 --- a/wfGenes_exe/dot_wfgenes.py +++ b/wfGenes_exe/dot_wfgenes.py @@ -18,59 +18,58 @@ import time ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -class DotwfGenes(BasewfGenes): +class DotwfGenes(): """ DOT file generation from a wconfig file """ - def __init__(self, blueargs): - BasewfGenes.__init__(self, blueargs) - self.dot_generation() + def __init__(self, wfgenes_init): + self.dot_generation(wfgenes_init) - def dot_generation(self): - self.dot_path = os.path.join(self.workflow_path, 'DOT') + def dot_generation(self, wfgenes_init): + wfgenes_init.dot_path = os.path.join(wfgenes_init.workflow_path, 'DOT') def_color = 'none' def_edgecolor = '' - if not os.path.exists(self.dot_path): - os.makedirs(self.dot_path) + if not os.path.exists(wfgenes_init.dot_path): + os.makedirs(wfgenes_init.dot_path) dot_file = os.path.join( - self.dot_path, self.interface_dict['workflow_name'] + '.dot') + wfgenes_init.dot_path, wfgenes_init.interface_dict['workflow_name'] + '.dot') dot_string = 'digraph {\n' dot_string += ' graph[\n' - dot_string += '\tname=' + self.interface_dict['workflow_name'] + '\n' + dot_string += '\tname=' + wfgenes_init.interface_dict['workflow_name'] + '\n' dot_string += ' ]; \n' - for i in range(self.routine_number): + for i in range(wfgenes_init.routine_number): dot_string += str(i) + ' [' + '\n' dot_string += 'state=NONE \n' - dot_string += 'name="' + self.routine_name[i] + '"\n' - dot_string += 'label="' + self.routine_name[i] + '"\n' + dot_string += 'name="' + wfgenes_init.routine_name[i] + '"\n' + dot_string += 'label="' + wfgenes_init.routine_name[i] + '"\n' dot_string += ' style=filled \n' dot_string += 'color="' + def_edgecolor + '"\n' dot_string += 'fillcolor="'+def_color+'"\n' dot_string += ' ]; \n' - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): - for k in range(len(self.inputs[i][j])): - if self.inputs_nodup[i][j][k] != \ - 'duplicate' and self.inputs_no_locdep[i][j][k] != 'dependent'\ - and self.inputs_links[i][j][k][0].isnumeric(): - dot_string += self.inputs_links[i][j][k][0] + \ + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): + for k in range(len(wfgenes_init.inputs[i][j])): + if wfgenes_init.inputs_nodup[i][j][k] != \ + 'duplicate' and wfgenes_init.inputs_no_locdep[i][j][k] != 'dependent'\ + and wfgenes_init.inputs_links[i][j][k][0].isnumeric(): + dot_string += wfgenes_init.inputs_links[i][j][k][0] + \ '->' + str(i) + '[ \n' dot_string += 'label="' + \ - self.inputs_locname[i][j][k] + '"\n' + wfgenes_init.inputs_locname[i][j][k] + '"\n' dot_string += ' ]; \n' dot_string += ' } \n' with open(dot_file, 'w') as file: file.write(dot_string) - pdf_file = os.path.join( - self.dot_path, self.interface_dict['workflow_name'] + '.pdf') + self.pdf_file = os.path.join( + wfgenes_init.dot_path, wfgenes_init.interface_dict['workflow_name'] + '.pdf') self.png_file = os.path.join( - self.dot_path, self.interface_dict['workflow_name'] + '.png') + wfgenes_init.dot_path, wfgenes_init.interface_dict['workflow_name'] + '.png') - cmd = 'dot -Tpdf ' + dot_file + ' -o ' + pdf_file + cmd = 'dot -Tpdf ' + dot_file + ' -o ' + self.pdf_file os.popen(cmd) cmd = 'dot -Tpng ' + dot_file + ' -o ' + self.png_file - out = os.popen(cmd) + os.popen(cmd) diff --git a/wfGenes_exe/fireworks_wfgenes.py b/wfGenes_exe/fireworks_wfgenes.py index e7dcdfd..41bae78 100644 --- a/wfGenes_exe/fireworks_wfgenes.py +++ b/wfGenes_exe/fireworks_wfgenes.py @@ -21,30 +21,25 @@ from initial_wfgenes import BasewfGenes -class FireworkwfGenes(BasewfGenes): +class FireworkwfGenes(): """ Automatic Fireworks generation from wconfig file """ + def __init__(self, wfgenes_init): + self.firework_generation(wfgenes_init) + self.workflow_generation(wfgenes_init) - def __init__(self, blueargs): - - BasewfGenes.__init__(self, blueargs) - self.firework_generation() - self.workflow_generation() - - def firework_generation(self): - - + def firework_generation(self, wfgenes_init): self.fws = [] - for i in range(self.routine_number): + for i in range(wfgenes_init.routine_number): fw = {} fw['fw_id'] = i - fw['name'] = self.routine_name[i] + fw['name'] = wfgenes_init.routine_name[i] fw['spec'] = {} fw['spec']['_tasks'] = [] - output_subroutine_iter = iter(self.outputs_locname[i]) - input_subroutine_iter = iter(self.inputs_locname[i]) - subroutine_iter = iter(self.func[i]) + output_subroutine_iter = iter(wfgenes_init.outputs_locname[i]) + input_subroutine_iter = iter(wfgenes_init.inputs_locname[i]) + subroutine_iter = iter(wfgenes_init.func[i]) # iterate over the tasklist - for j in range(self.subroutine_number[i]): + for j in range(wfgenes_init.subroutine_number[i]): task = {} subroutine = next(subroutine_iter) @@ -68,16 +63,15 @@ class FireworkwfGenes(BasewfGenes): task['task']['_fw_name'] = 'PyTask' task['task']['func'] = str(subroutine[0]) + \ '.' + str(subroutine[1]) - - + input = next(input_subroutine_iter) if len(subroutine) <= 2: task['inputs'] = [] task['inputs'] = input if len(subroutine) > 2 : task['task']['inputs'] = input - output = next(output_subroutine_iter) + if subroutine[0] != 'BUILTIN' and len(subroutine) <= 2 : task['outputs'] = [] task['outputs'] = output @@ -91,48 +85,45 @@ class FireworkwfGenes(BasewfGenes): fw['spec']['_tasks'].append(task) # end of tasklist iterator - for j in range(self.subroutine_number[i]): - for k in range(len(self.inputs[i][j])): - if (self.inputs_no_locdep[i][j][k][0] != 'inner_dependent' and - self.inputs_nodup[i][j][k] != 'duplicate' and - self.inputs_links[i][j][k][0].isnumeric() == False): + for j in range(wfgenes_init.subroutine_number[i]): + for k in range(len(wfgenes_init.inputs[i][j])): + if (wfgenes_init.inputs_no_locdep[i][j][k][0] != 'inner_dependent' and + wfgenes_init.inputs_nodup[i][j][k] != 'duplicate' and + wfgenes_init.inputs_links[i][j][k][0].isnumeric() == False): input_string = os.path.join( - self.args_inputpath, str( - self.inputs[i][j][k]) + '.yaml') + wfgenes_init.args_inputpath, str( + wfgenes_init.inputs[i][j][k]) + '.yaml') with open(input_string, 'r') as input_stream: - fw['spec'][self.inputs[i][j] - [k]] = yaml.safe_load(input_stream) - - + fw['spec'][wfgenes_init.inputs[i][j] + [k]] = yaml.safe_load(input_stream) self.fws.append(fw) - def workflow_generation(self): - self.firework_path = os.path.join(self.workflow_path, 'FireWorks') - if not os.path.exists(self.firework_path): - os.makedirs(self.firework_path) + def workflow_generation(self, wfgenes_init): + firework_path = os.path.join(wfgenes_init.workflow_path, 'FireWorks') + if not os.path.exists(firework_path): + os.makedirs(firework_path) links = {} links_dot = {} - for M in range(self.routine_number): + for M in range(wfgenes_init.routine_number): links[str(M)] = [] links_dot[str(M)] = [] - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): - for k in range(len(self.inputs_links[i][j])): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): + for k in range(len(wfgenes_init.inputs_links[i][j])): if isinstance( - self.inputs_links[i][j][k], - list) and self.inputs_links[i][j][k][0] == str(M): + wfgenes_init.inputs_links[i][j][k], + list) and wfgenes_init.inputs_links[i][j][k][0] == str(M): links[str(M)].append(i) links_dot[str(M)] = links[str(M)] links[str(M)] = list(OrderedDict.fromkeys(links[str(M)])) metadata = {} workflow = {'fws': self.fws, 'links': links, 'metadata': metadata, - 'name': self.interface_dict['workflow_name'] + '_wfGenes'} - - #fireworks_schema.validate(workflow, 'Workflow') + 'name': wfgenes_init.interface_dict['workflow_name'] + '_wfGenes'} - pad_path = os.path.join(self.firework_path, - self.interface_dict['workflow_name'] + '.yaml') + #fireworks_schema.validate(workflow, 'Workflow' + pad_path = os.path.join(firework_path, + wfgenes_init.interface_dict['workflow_name'] + '.yaml') with open(pad_path, 'w') as output_stream: yaml.dump(workflow, output_stream) diff --git a/wfGenes_exe/initial_wfgenes.py b/wfGenes_exe/initial_wfgenes.py index af0e205..48021c2 100644 --- a/wfGenes_exe/initial_wfgenes.py +++ b/wfGenes_exe/initial_wfgenes.py @@ -106,12 +106,16 @@ class BasewfGenes(): # Start of yaml parser for i in range(self.routine_number): for j in range(len(routine_interface[i]['tasks'])): - self.func[i][j] = deepcopy( - routine_interface[i]['tasks'][j]['func']) - self.func_nodup[i][j] = deepcopy( - routine_interface[i]['tasks'][j]['func'][1]) - self.func_global_nodup[i][j]= deepcopy(routine_interface[i]['tasks'][j]['func'][1]) - self.func_no_locdep[i][j]= deepcopy(routine_interface[i]['tasks'][j]['func'][1]) + if 'func' in routine_interface[i]['tasks'][j]: + self.func[i][j] = deepcopy( + routine_interface[i]['tasks'][j]['func']) + elif 'script' in routine_interface[i]['tasks'][j]: + self.func[i][j] = 'ScriptTask' + for i in range(self.routine_number): + for j in range(len(routine_interface[i]['tasks'])): + self.func_nodup[i][j] = deepcopy(self.func[i][j]) + self.func_global_nodup[i][j]= deepcopy(self.func[i][j]) + self.func_no_locdep[i][j]= deepcopy(self.func[i][j]) #self.func_depid[i][j]= deepcopy(routine_interface[i]['tasks'][j]['func'][1]) self.func_nodup[i][:] = self.extractlist(self.func_nodup[i][:]) self.func_global_nodup[i][:] = self.extractlist(self.func_global_nodup[i][:]) @@ -125,10 +129,14 @@ class BasewfGenes(): for i in range(self.routine_number): for j in range(len(routine_interface[i]['tasks'])): - self.inputs[i][j] = deepcopy( - routine_interface[i]['tasks'][j]['inputs']) - self.inputs_py[i][j] = deepcopy( - routine_interface[i]['tasks'][j]['inputs']) + if 'inputs' in routine_interface[i]['tasks'][j]: + self.inputs[i][j] = deepcopy( + routine_interface[i]['tasks'][j]['inputs']) + self.inputs_py[i][j] = deepcopy( + routine_interface[i]['tasks'][j]['inputs']) + elif 'inputs' not in routine_interface[i]['tasks'][j]: + self.inputs[i][j] = ['NULL'] + self.inputs_py[i][j] = ['NULL'] self.pylist(self.inputs_py) for i in range(self.routine_number): @@ -145,10 +153,16 @@ class BasewfGenes(): for i in range(self.routine_number): for j in range(len(routine_interface[i]['tasks'])): - self.outputs[i][j] = deepcopy( - routine_interface[i]['tasks'][j]['outputs']) - self.outputs_py[i][j] = deepcopy( - routine_interface[i]['tasks'][j]['outputs']) + if 'outputs' in routine_interface[i]['tasks'][j]: + self.outputs[i][j] = deepcopy( + routine_interface[i]['tasks'][j]['outputs']) + self.outputs_py[i][j] = deepcopy( + routine_interface[i]['tasks'][j]['outputs']) + elif 'outputs' not in routine_interface[i]['tasks'][j]: + self.outputs[i][j] = ['NULL'] + self.outputs_py[i][j] = ['NULL'] + + self.pylist(self.outputs_py) for i in range(self.routine_number): for j in range(len(routine_interface[i]['tasks'])): @@ -156,10 +170,7 @@ class BasewfGenes(): self.outputs_locname[i][j] = deepcopy(self.outputs_py[i][j]) for i in range(self.routine_number): self.outputs_nodup[i][:] = self.duplicate_finder( - self.outputs_nodup[i][:]) - - - + self.outputs_nodup[i][:]) for i in range(self.routine_number): for j in range(len(routine_interface[i]['tasks'])): @@ -192,8 +203,7 @@ class BasewfGenes(): self.inputs_no_locdep[i][:], self.outputs_py[i][:], i, self.func_localdepid[i][:]) self.inputs_links[i], self.func_depid[i][:] = self.dependency_check( self.inputs_links[i][:], self.outputs_py[i][:], i, self.func_depid[i][:]) - - + # Global dependency analysis for i in range(self.routine_number): for j in range(self.routine_number): @@ -208,6 +218,8 @@ class BasewfGenes(): self.inputs_global_nodup[i][:] = self.global_duplication_check(self.inputs_global_nodup[i][:], self.inputs_global_nodup[j][:]) self.foreach_dependency() + self.link_generation() + self.interface_dict['workflow_name'] = self.interface_dict['workflow_name'].replace(" ","_") wf_name_split = self.interface_dict['workflow_name'].split('.') @@ -222,8 +234,6 @@ class BasewfGenes(): if not os.path.exists(self.workflow_path): os.makedirs(self.workflow_path) - - def extractlist(self, lst): """ Return list of the list """ return [[el] for el in lst] @@ -243,8 +253,6 @@ class BasewfGenes(): for i in range(len(input_py)): input_py[i]= input_py[i].replace(couple[0], couple[1]) - - def foreach_dependency(self): """ Check dependency for split variable in foreach task """ for i in range(self.routine_number): @@ -258,7 +266,6 @@ class BasewfGenes(): # Iterable variable for dpendent foreach self.foreach_output[i][j] = [self.func[k][m][1] , k , m] - def duplicate_finder(self, target_list): """ Detect duplicates in multidimensional list """ for y in range(len(target_list)): @@ -271,7 +278,6 @@ class BasewfGenes(): target_list[i + 1][j] = 'duplicate' return target_list - def dependency_check(self, input_list, output_list, id, func): """ Check dependency between different subroutine in one routine """ for y in range(len(input_list) - 1, -1, -1): @@ -285,7 +291,6 @@ class BasewfGenes(): func[y].append([id , j]) return input_list, func - def link_check(self, input_link, input_list, output_list, id, func, routine): """ Check dependency between different routines""" for y in range(len(input_list) - 1, -1, -1): @@ -329,6 +334,7 @@ class BasewfGenes(): while func in self.func_depid[i][j]: self.func_depid[i][j].remove(func) # Remove implemented function from func_depid + def wconfig_checker(self, args= 'none'): """ Check if wconfig is verified by user to proceed to code generation """ @@ -371,8 +377,20 @@ class BasewfGenes(): else: wconfig_stat = 'unchanged' - return modeling, wf_path, wconfig_stat + return modeling, wf_path, wconfig_stat + def link_generation(self): + self.links = {} + for M in range(self.routine_number): + self.links[str(M)] = [] + for i in range(self.routine_number): + for j in range(self.subroutine_number[i]): + for k in range(len(self.inputs_links[i][j])): + if isinstance( + self.inputs_links[i][j][k], + list) and self.inputs_links[i][j][k][0] == str(M): + self.links[str(M)].append(i) + self.links[str(M)] = list(OrderedDict.fromkeys(self.links[str(M)])) diff --git a/wfGenes_exe/parsl_wfgenes.py b/wfGenes_exe/parsl_wfgenes.py index 6f863c9..90000cb 100644 --- a/wfGenes_exe/parsl_wfgenes.py +++ b/wfGenes_exe/parsl_wfgenes.py @@ -17,22 +17,21 @@ from builtin_wfgenes import merge_dic from initial_wfgenes import BasewfGenes ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -class ParslwfGenes(BasewfGenes): +class ParslwfGenes(): """Generate Python wrapper for wConfig nodes orignized to run parallel with DASK delayed decorators""" + def __init__(self, wfgenes_init): + #BasewfGenes.__init__(self, blueargs) + self.parsl_generation(wfgenes_init) - def __init__(self, blueargs): - BasewfGenes.__init__(self, blueargs) - self.parsl_generation() - - def parsl_generation(self): + def parsl_generation(self, wfgenes_init): self.wfg_parsl = "" self.indent=" " lazy_str = 'parsl_' - self.parsl_path = os.path.join(self.workflow_path, 'Parsl') - if not os.path.exists(self.parsl_path): - os.makedirs(self.parsl_path) - self.wrapper_path = os.path.join(self.parsl_path, - self.interface_dict['workflow_name'] + '_parsl.py') + parsl_path = os.path.join(wfgenes_init.workflow_path, 'Parsl') + if not os.path.exists(parsl_path): + os.makedirs(parsl_path) + self.wrapper_path = os.path.join(parsl_path, + wfgenes_init.interface_dict['workflow_name'] + '_parsl.py') self.wfg_parsl += "import yaml\n" self.wfg_parsl += "import numpy as np\n" self.wfg_parsl += "from auxiliary import MERGE\n" @@ -43,146 +42,143 @@ class ParslwfGenes(BasewfGenes): parsl_import = open(parsl_import_path, 'r') self.wfg_parsl += parsl_import.read() - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop - func_file = self.func[i][j][0] - func_module = self.func[i][j][1] - func_nodup = self.func_nodup[i][j][0] - func_global_nodup= self.func_global_nodup[i][j][0] + func_file = wfgenes_init.func[i][j][0] + func_module = wfgenes_init.func[i][j][1] + func_nodup = wfgenes_init.func_nodup[i][j][0] + func_global_nodup= wfgenes_init.func_global_nodup[i][j][0] if func_file != 'BUILTIN' and func_nodup != 'duplicate' and func_global_nodup != 'global_duplicate': self.wfg_parsl += 'from ' + str(func_file) + ' import ' + str(func_module) + '\n' self.wfg_parsl += "\nif __name__ == '__main__':\n\n" self.wfg_parsl += "\n"+ self.indent+"start_time = time.time()" - parsl_config_path = os.path.join(ROOT_DIR, 'parsl_config.cfg') parsl_config = open(parsl_config_path, 'r') self.wfg_parsl += self.indent self.wfg_parsl += parsl_config.read() - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop j loop self.func_builtin = 'NORMALFUNCTION' - self.func_file = self.func[i][j][0] - self.func_module = self.func[i][j][1] - self.split_array = 'NULL' # The varaiable which FOREACH iterates over - self.zip_inputs = [] - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': + func_file = wfgenes_init.func[i][j][0] + func_module = wfgenes_init.func[i][j][1] + split_array = 'NULL' # The varaiable which FOREACH iterates over + zip_inputs = [] + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': self.func_builtin = 'FOREACH' - self.split_array = self.func[i][j][3] - self.chunk_size = str(self.func[i][j][4]) - self.index_split = '' + split_array = wfgenes_init.func[i][j][3] + chunk_size = str(wfgenes_init.func[i][j][4]) + index_split = '' - if len(self.func[i][j]) > 5: - for elements in self.func[i][j][5]['zip_inputs']: - self.zip_inputs.append(elements) + if len(wfgenes_init.func[i][j]) > 5: + for elements in wfgenes_init.func[i][j][5]['zip_inputs']: + zip_inputs.append(elements) - self.len_inputs = len(self.inputs[i][j]) - for k in range(self.len_inputs): - if self.inputs[i][j][k] == self.split_array and self.func_builtin == 'FOREACH': - self.index_split = self.inputs_links[i][j][k][2] + len_inputs = len(wfgenes_init.inputs[i][j]) + for k in range(len_inputs): + if wfgenes_init.inputs[i][j][k] == split_array and self.func_builtin == 'FOREACH': + index_split = wfgenes_init.inputs_links[i][j][k][2] - self.func_nodup_0 = self.func_nodup[i][j][0] - self.func_global_nodup_0= self.func_global_nodup[i][j][0] - self.len_inputs = len(self.inputs[i][j]) - self.len_outputs=len(self.outputs[i][j]) - for k in range(self.len_inputs): + func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] + len_inputs = len(wfgenes_init.inputs[i][j]) + len_outputs=len(wfgenes_init.outputs[i][j]) + for k in range(len_inputs): # Cache variables inside loop k loop - self.input_k = self.inputs[i][j][k] - self.inputs_nodup_k= self.inputs_nodup[i][j][k] - self.inputs_global_nodup_k= self.inputs_global_nodup[i][j][k] - self.inputs_no_locdep_k= self.inputs_no_locdep[i][j][k][0] - input_gdependent = self.inputs_links[i][j][k][0].isnumeric() + input_k = wfgenes_init.inputs[i][j][k] + inputs_nodup_k = wfgenes_init.inputs_nodup[i][j][k] + inputs_global_nodup_k = wfgenes_init.inputs_global_nodup[i][j][k] + inputs_no_locdep_k = wfgenes_init.inputs_no_locdep[i][j][k][0] + input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() - if self.inputs_global_nodup_k != 'global_duplicate' and self.inputs_nodup_k!= 'duplicate' and self.inputs_no_locdep_k!= 'inner_dependent' and input_gdependent == False: - # Load self.inputs + if inputs_global_nodup_k != 'global_duplicate' and inputs_nodup_k!= 'duplicate' and inputs_no_locdep_k!= 'inner_dependent' and input_gdependent == False: + # Load wfgenes_init.inputs self.wfg_parsl += '\n'+ self.indent +'#Read Input #' + str(k + 1) + 'from subroutine #' + str(j + 1) + ' in routine #' + str(i) + '\n' - self.wfg_parsl += self.indent+"yaml_stream = open('" + self.input_k + ".yaml', 'r')\n" - self.wfg_parsl += self.indent + self.input_k + " = yaml.load(yaml_stream, Loader=yaml.Loader)\n\n" + self.wfg_parsl += self.indent+"yaml_stream = open('" + input_k + ".yaml', 'r')\n" + self.wfg_parsl += self.indent + input_k + " = yaml.load(yaml_stream, Loader=yaml.Loader)\n\n" self.wfg_parsl += "\n"+ self.indent+"end_memtime = time.time()" # Start of computation phase func_done = [] step_simulation = 1 - self.wfgenes_scheduler(func_done) + wfgenes_init.wfgenes_scheduler(func_done) previously_computed = [] # Keep track of launched task to avoid repeated computation - while self.func_waiting == True: + while wfgenes_init.func_waiting == True: self.wfg_parsl += '\n\n'+self.indent+'#### Start Step #'+ str(step_simulation) step_simulation = step_simulation + 1 - for i in range(self.routine_number): - for j in range(self.subroutine_number[i]): + for i in range(wfgenes_init.routine_number): + for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop j loop self.func_builtin = '' - self.func_file = self.func[i][j][0] - self.func_module = self.func[i][j][1] - self.func_nodup_0 = self.func_nodup[i][j][0] - self.func_global_nodup_0= self.func_global_nodup[i][j][0] - self.len_inputs = len(self.inputs[i][j]) - self.len_outputs=len(self.outputs[i][j]) + func_file = wfgenes_init.func[i][j][0] + self.func_module = wfgenes_init.func[i][j][1] + func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] + len_inputs = len(wfgenes_init.inputs[i][j]) + len_outputs=len(wfgenes_init.outputs[i][j]) - if self.foreach_output[i][j][0] != 'null': + if wfgenes_init.foreach_output[i][j][0] != 'null': # Dependent foreach - output_number = len(self.outputs[self.foreach_output[i][j][1]][self.foreach_output[i][j][2]]) + output_number = len(wfgenes_init.outputs[wfgenes_init.foreach_output[i][j][1]][wfgenes_init.foreach_output[i][j][2]]) - elif self.foreach_output[i][j][1] == 'null': + elif wfgenes_init.foreach_output[i][j][1] == 'null': # independent foreach - output_number = self.len_outputs + output_number = len_outputs - if self.func_global_nodup_0 == 'global_duplicate': + if func_global_nodup_0 == 'global_duplicate': func_suffix = '_id' + str(i) else: func_suffix = '' self.split_array = 'NULL' # The varaiable which FOREACH iterates over self.zip_inputs = [] coordinate = [[i,j]] # Routine and subroutine indexes - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': self.func_builtin = 'FOREACH' - self.split_array = self.func[i][j][3] - self.chunk_size = str(self.func[i][j][4]) + self.split_array = wfgenes_init.func[i][j][3] + self.chunk_size = str(wfgenes_init.func[i][j][4]) self.index_split = '' - if len(self.func[i][j]) > 5: - for elements in self.func[i][j][5]['zip_inputs']: + if len(wfgenes_init.func[i][j]) > 5: + for elements in wfgenes_init.func[i][j][5]['zip_inputs']: self.zip_inputs.append(elements) - for k in range(self.len_inputs): - if self.inputs[i][j][k] == self.split_array and self.func_builtin == 'FOREACH': - self.index_split = self.inputs_links[i][j][k][2] + for k in range(len_inputs): + if wfgenes_init.inputs[i][j][k] == self.split_array and self.func_builtin == 'FOREACH': + self.index_split = wfgenes_init.inputs_links[i][j][k][2] - if self.chunk_size == 'full' and self.foreach_output[i][j][0] == 'null' : + if self.chunk_size == 'full' and wfgenes_init.foreach_output[i][j][0] == 'null' : self.chunk_size = 'len('+self.split_array+')' self.step= '1' - elif self.chunk_size == 'full' and self.foreach_output[i][j][0] != 'null' : - self.chunk_size = 'len('+ lazy_str + self.foreach_output[i][j][0]+')' + elif self.chunk_size == 'full' and wfgenes_init.foreach_output[i][j][0] != 'null' : + self.chunk_size = 'len('+ lazy_str + wfgenes_init.foreach_output[i][j][0]+')' self.step= '1' - elif self.chunk_size != 'full' and self.foreach_output[i][j][0] == 'null' : + elif self.chunk_size != 'full' and wfgenes_init.foreach_output[i][j][0] == 'null' : self.step= ' int(len('+self.split_array+')/'+self.chunk_size+')' - elif self.chunk_size != 'full' and self.foreach_output[i][j][0] != 'null' : + elif self.chunk_size != 'full' and wfgenes_init.foreach_output[i][j][0] != 'null' : if output_number > 1: - self.step = ' int(len('+ lazy_str +self.foreach_output[i][j][0]+'['+ self.index_split +'])/'+self.chunk_size+')' + self.step = ' int(len('+ lazy_str +wfgenes_init.foreach_output[i][j][0]+'['+ self.index_split +'])/'+self.chunk_size+')' elif output_number == 1: - self.step = ' int(len('+ lazy_str +self.foreach_output[i][j][0]+')/'+self.chunk_size+')' + self.step = ' int(len('+ lazy_str +wfgenes_init.foreach_output[i][j][0]+')/'+self.chunk_size+')' - if self.foreach_output[i][j][0] == 'null': + if wfgenes_init.foreach_output[i][j][0] == 'null': foreach_len = 'range(0 , len('+self.split_array+'),'+self.step+')' - elif self.foreach_output[i][j][0] != 'null': + elif wfgenes_init.foreach_output[i][j][0] != 'null': if output_number > 1: - foreach_len = 'range(0, len('+ lazy_str +self.foreach_output[i][j][0]+'['+ self.index_split +'])'+','+self.step+ ')' + foreach_len = 'range(0, len('+ lazy_str +wfgenes_init.foreach_output[i][j][0]+'['+ self.index_split +'])'+','+self.step+ ')' elif output_number == 1: - foreach_len = 'range(0, len('+ lazy_str +self.foreach_output[i][j][0]+')'+','+self.step+ ')' + foreach_len = 'range(0, len('+ lazy_str +wfgenes_init.foreach_output[i][j][0]+')'+','+self.step+ ')' - if len(self.func_depid[i][j]) == 1 and coordinate[0] not in func_done: + if len(wfgenes_init.func_depid[i][j]) == 1 and coordinate[0] not in func_done: if self.func_module != 'MERGE': - self.func[i][j][1] = self.func[i][j][1] + func_suffix + wfgenes_init.func[i][j][1] = wfgenes_init.func[i][j][1] + func_suffix # check if func is Ready and not computed already self.wfg_parsl += '\n'+self.indent+'# Call subroutine #' + str(j + 1) + ' from routine #' +str(i)+ '\n' self.wfg_parsl += self.indent @@ -193,7 +189,7 @@ class ParslwfGenes(BasewfGenes): func_waiting = False # Temporarily Set func_waiting to False input_slice = '' elif self.func_module == 'MERGE' and self.func_builtin != 'FOREACH': - self.wfg_parsl += '\n'+self.indent +lazy_str+ self.outputs[i][j][0] + ' = ' +self.func_module+'(' + self.wfg_parsl += '\n'+self.indent +lazy_str+ wfgenes_init.outputs[i][j][0] + ' = ' +self.func_module+'(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' @@ -201,33 +197,33 @@ class ParslwfGenes(BasewfGenes): # foreach implementation part 1/2 self.wfg_parsl += '\n'+self.indent+lazy_str+self.func_module+func_suffix+'= []' self.wfg_parsl += '\n'+self.indent+lazy_str+self.func_module+func_suffix+'_future= []' - for k in range(len(self.foreach_output[i][j])): - if self.foreach_output[i][j][0] != 'null' and len(self.func[self.foreach_output[i][j][1]][self.foreach_output[i][j][2]]) == 2: + for k in range(len(wfgenes_init.foreach_output[i][j])): + if wfgenes_init.foreach_output[i][j][0] != 'null' and len(wfgenes_init.func[wfgenes_init.foreach_output[i][j][1]][wfgenes_init.foreach_output[i][j][2]]) == 2: # Check if foreach computation depends on a lazy object - compute_now = self.foreach_output[i][j][0] + func_suffix + compute_now = wfgenes_init.foreach_output[i][j][0] + func_suffix if compute_now not in previously_computed: previously_computed.append(compute_now) # Append computed lazy task- Avoid extra computation self.wfg_parsl += '\n'+self.indent+lazy_str + compute_now+ '='+ lazy_str + compute_now+ '.result()' # Compute lazy objects self.wfg_parsl += '\n'+self.indent + 'for i in ' + foreach_len + ' :' self.wfg_parsl += '\n'+self.indent+self.indent+lazy_str+self.func_module+func_suffix+ '_foreach=' +self.func_module + '(' # end of foreach implementation part 1/2 - self.write_arguments(lazy_str, i , j) # write argument list + self.write_arguments(wfgenes_init, lazy_str, i, j) # write argument list if self.func_builtin == 'FOREACH': # foreach implementation Part 2/2 self.wfg_parsl += '\n'+self.indent+self.indent+lazy_str+self.func_module+func_suffix+'_future.append('+lazy_str+self.func_module+func_suffix+'_foreach)' previously_computed.append(self.func_module) self.wfg_parsl += '\n'+self.indent + 'for i in range(len('+lazy_str+self.func_module+func_suffix+'_future)):' self.wfg_parsl += '\n'+self.indent + self.indent+lazy_str+self.func_module+func_suffix+'.append('+lazy_str+self.func_module+func_suffix+'_future[i].result())' - if len(self.outputs[i][j]) > 1: - self.wfg_parsl += '\n'+self.indent+lazy_str + self.func_module + func_suffix + '= flat_tuple( '+ lazy_str + self.func_module + func_suffix + ', ' + str(len(self.outputs[i][j])) +')' - elif len(self.outputs[i][j]) == 1: + if len(wfgenes_init.outputs[i][j]) > 1: + self.wfg_parsl += '\n'+self.indent+lazy_str + self.func_module + func_suffix + '= flat_tuple( '+ lazy_str + self.func_module + func_suffix + ', ' + str(len(wfgenes_init.outputs[i][j])) +')' + elif len(wfgenes_init.outputs[i][j]) == 1: self.wfg_parsl += '\n'+self.indent+lazy_str + self.func_module + func_suffix + '= flat_list( '+ lazy_str + self.func_module + func_suffix + ')' func_done.append([i ,j]) ## Append implemented module - self.wfgenes_scheduler(func_done) + wfgenes_init.wfgenes_scheduler(func_done) - if self.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': - self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+self.func[func_done[-1][0]][func_done[-1][1]][1]+ func_suffix+'.compute())' + if wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': + self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+ func_suffix+'.compute())' else: - self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+self.outputs[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' + self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' self.wfg_parsl += "\n"+ self.indent+"end_time = time.time()" self.wfg_parsl += "\n"+ self.indent+"total_time = end_time - start_time" self.wfg_parsl += "\n"+ self.indent+"total_memtime = end_memtime - start_time" @@ -240,93 +236,93 @@ class ParslwfGenes(BasewfGenes): - def write_arguments(self, lazy_str, i , j): + def write_arguments(self, wfgenes_init, lazy_str, i , j): """ Writing argument list for a module call""" - self.len_inputs = len(self.inputs[i][j]) - for k in range(self.len_inputs): + len_inputs = len(wfgenes_init.inputs[i][j]) + for k in range(len_inputs): # Writing arguments of each function # Cache variables inside loop k loop - inputs = self.inputs_py[i][j][k] - inputs_nodup_k= self.inputs_nodup[i][j][k] - inputs_no_locdep_k= self.inputs_no_locdep[i][j][k][0] - input_gdependent = self.inputs_links[i][j][k][0].isnumeric() + inputs = wfgenes_init.inputs_py[i][j][k] + inputs_nodup_k= wfgenes_init.inputs_nodup[i][j][k] + inputs_no_locdep_k= wfgenes_init.inputs_no_locdep[i][j][k][0] + input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() argument_key = '' func_gloab = '' func_loc = '' func_loc_dep = '' func_gloab_dep = '' - self.parsl_barrier = '' + parsl_barrier = '' slice = '' # Slice only will be set for FOREACH method if self.func_module == 'MERGE': - argument_key = self.inputs_locname[i][j][k]+'=' # This prefix is set only for merge function + argument_key = wfgenes_init.inputs_locname[i][j][k]+'=' # This prefix is set only for merge function - if len(self.func[i][j]) > 2: - if self.func[i][j][2] == 'FOREACH': + if len(wfgenes_init.func[i][j]) > 2: + if wfgenes_init.func[i][j][2] == 'FOREACH': if inputs == self.split_array or inputs in self.zip_inputs: slice = '[i:i+'+self.step+']' if inputs_no_locdep_k== 'inner_dependent': - input_index = self.inputs_no_locdep[i][j][k][2] - func_loc = self.func[i][int(self.inputs_no_locdep[i][j][k][1])][1] + input_index = wfgenes_init.inputs_no_locdep[i][j][k][2] + func_loc = wfgenes_init.func[i][int(wfgenes_init.inputs_no_locdep[i][j][k][1])][1] func_loc_dep = func_loc - output_number = len(self.outputs[i][int(self.inputs_no_locdep[i][j][k][1])]) + output_number = len(wfgenes_init.outputs[i][int(wfgenes_init.inputs_no_locdep[i][j][k][1])]) if self.func_builtin == 'FOREACH' and inputs == self.split_array : # Rewrite the value if it is split array - func_loc_dep = self.foreach_output[i][j][0] + func_loc_dep = wfgenes_init.foreach_output[i][j][0] if self.func_builtin != 'FOREACH': - self.parsl_barrier = '.result()' + parsl_barrier = '.result()' if input_gdependent == True: - input_index = self.inputs_links[i][j][k][2] - func_gloab = self.func[int(self.inputs_links[i][j][k][0])][int(self.inputs_links[i][j][k][1])][1] + input_index = wfgenes_init.inputs_links[i][j][k][2] + func_gloab = wfgenes_init.func[int(wfgenes_init.inputs_links[i][j][k][0])][int(wfgenes_init.inputs_links[i][j][k][1])][1] func_gloab_dep = func_gloab - output_number= len(self.outputs[int(self.inputs_links[i][j][k][0])][int(self.inputs_links[i][j][k][1])]) + output_number= len(wfgenes_init.outputs[int(wfgenes_init.inputs_links[i][j][k][0])][int(wfgenes_init.inputs_links[i][j][k][1])]) if self.func_builtin == 'FOREACH' and inputs == self.split_array : # Rewrite the value if it is split arry - self.parsl_barrier = '' - func_gloab_dep = self.foreach_output[i][j][0] + parsl_barrier = '' + func_gloab_dep = wfgenes_init.foreach_output[i][j][0] elif self.func_builtin != 'FOREACH': - self.parsl_barrier = '.result()' + parsl_barrier = '.result()' # Writing arguments - 4 different scenarios if inputs_no_locdep_k != 'inner_dependent' and input_gdependent == False : #1 No dependency at all - self.wfg_parsl += argument_key+ inputs + self.parsl_barrier+slice - if k != self.len_inputs - 1: + self.wfg_parsl += argument_key+ inputs + parsl_barrier+slice + if k != len_inputs - 1: self.wfg_parsl += ', ' - elif k == self.len_inputs - 1: + elif k == len_inputs - 1: self.wfg_parsl += ') ' elif inputs_no_locdep_k== 'inner_dependent' and func_loc != 'MERGE' : #2 Inner-dependent for users function self.wfg_parsl += argument_key+lazy_str + func_loc_dep if output_number > 1: - self.wfg_parsl += self.parsl_barrier+'[' + input_index + '] ' + slice + self.wfg_parsl += parsl_barrier+'[' + input_index + '] ' + slice elif output_number == 1: self.wfg_parsl += slice - if k != self.len_inputs - 1: + if k != len_inputs - 1: self.wfg_parsl += ', ' - elif k == self.len_inputs - 1: + elif k == len_inputs - 1: self.wfg_parsl += ') ' elif input_gdependent == True and func_gloab != 'MERGE' : #3 Gloab dependent for users function self.wfg_parsl += argument_key+lazy_str + func_gloab_dep if output_number != 1: - self.wfg_parsl += self.parsl_barrier+'[' + input_index + ']' + slice + self.wfg_parsl += parsl_barrier+'[' + input_index + ']' + slice else: self.wfg_parsl += slice - if k != self.len_inputs - 1: + if k != len_inputs - 1: self.wfg_parsl += ', ' - elif k == self.len_inputs - 1: + elif k == len_inputs - 1: self.wfg_parsl += ') ' elif (func_loc == 'MERGE' or func_gloab == 'MERGE') and (input_gdependent == True or inputs_no_locdep_k== 'inner_dependent') : #4 Dependent to Merge function self.wfg_parsl += argument_key+lazy_str + inputs - if k != self.len_inputs - 1 : + if k != len_inputs - 1 : self.wfg_parsl += ', ' - elif k == self.len_inputs - 1: + elif k == len_inputs - 1: #self.wfg_parsl += argument_key+lazy_str + - # inputs + self.parsl_barrier) + # inputs + parsl_barrier) self.wfg_parsl += ' )' diff --git a/wfGenes_exe/pywrapper_wfgenes.py b/wfGenes_exe/pywrapper_wfgenes.py index a31838b..964c167 100644 --- a/wfGenes_exe/pywrapper_wfgenes.py +++ b/wfGenes_exe/pywrapper_wfgenes.py @@ -25,7 +25,7 @@ class PywrapperwfGens(BasewfGenes): """Generate Python wrapper for wconfig nodes""" def __init__(self, blueargs): - BasewfGenes.__init__(self, blueargs) + #BasewfGenes.__init__(self, blueargs) self.pywrapper_simstack() diff --git a/wfGenes_exe/wconfig_schema.json b/wfGenes_exe/wconfig_schema.json index e934c27..e9cdc98 100644 --- a/wfGenes_exe/wconfig_schema.json +++ b/wfGenes_exe/wconfig_schema.json @@ -28,6 +28,13 @@ "id": { "type": "integer" }, + "link": { + "type": "array", + "items": { + "$ref": "#/Number" + }, + "minItems": 0 + }, "name": { "$ref": "#/Name" }, @@ -43,6 +50,9 @@ "id", "name", "tasks" + ], + "optional": [ + "link" ] }, "Task": { @@ -57,6 +67,14 @@ "minItems": 2, "maxItems": 6 }, + "script": { + "type": "array", + "items": { + "$ref": "#/Implement" + }, + "minItems": 1, + "maxItems": 2 + }, "inputs": { "type": "array", "items": { @@ -75,15 +93,16 @@ "type": "object" } }, - "required": [ + "optional": [ "func", "inputs", - "outputs" + "outputs", + "script" ] }, "Implement": { - "type": ["object", "string", "number"], + "type": ["object", "string", "number", "array"], "minLength": 1 , "maxProperties": 1, "properties": { @@ -104,5 +123,10 @@ "Name": { "type": "string", "minLength": 1 + }, + + "Number": { + "type": "number", + "minLength": 1 } } \ No newline at end of file diff --git a/wfGenes_exe/wgenerator.py b/wfGenes_exe/wgenerator.py index de35aa9..b66a248 100644 --- a/wfGenes_exe/wgenerator.py +++ b/wfGenes_exe/wgenerator.py @@ -43,10 +43,10 @@ def wconfig_validator(BasewfGenes, args, wconfig ): i = 'null' #time.sleep(1) # Avoid extra cpu load try: - code_generation = BasewfGenes(args) + wfgenes_init = BasewfGenes(args) verified = True i = 'recent_verified' - return code_generation , verified, i + return wfgenes_init , verified, i except jsonschema.ValidationError as e: if e.message != last_error: last_error = e.message @@ -58,7 +58,6 @@ def wconfig_validator(BasewfGenes, args, wconfig ): def modified(wconfig, wconfig_stat): - #time.sleep(1) if wconfig_stat[0] == 'null' and wconfig_stat[1] == 'null': wconfig_stat[1] = os.stat(wconfig).st_mtime wconfig_stat[0] = wconfig_stat[1] @@ -111,13 +110,14 @@ def run_wfgenes(args): while True: # while user using wfGenes time.sleep(1) # Avoid extra cpu load - if modified(wconfig, wconfig_stat) == True: + if modified(wconfig, wconfig_stat) == True: + #init= BasewfGenes (args) validator = wconfig_validator(BasewfGenes, args ,wconfig) - code_generation = validator[0] + wfgenes_init = validator[0] verified = validator[1] i = validator[2] if verified == True: - model = code_generation.wconfig_checker() + model = wfgenes_init.wconfig_checker() wconfig_status = model[0] wconfig_version = model[2] if wconfig_status == 'active': @@ -125,18 +125,22 @@ def run_wfgenes(args): print('Model is verified and Graph generation is active. Remove "active" suffix to proceed with code generation or continue with modling') i = 'null' print('Press ctrl+c to exit') - graphics = DotwfGenes(args) - png = graphics.png_file - print (png, "is type of", type(png)) - return png + try: + graphics = DotwfGenes(wfgenes_init) + png = graphics.png_file + except Exception as error: + print('unexpected error:'+error.args[0]) + else: - code_generation.wconfig_checker('clean') - graphics = DotwfGenes(args) - png = graphics.png_file - #code generation phase + wfgenes_init.wconfig_checker('clean') + try: + graphics = DotwfGenes(wfgenes_init) + png = graphics.png_file + except Exception as error: + print('unexpected error:'+error.args[0]) try : if args['wms'] == 'FireWorks' or args['wms'] == 'all': - fireworks_lpad=FireworkwfGenes(args) + fireworks_lpad=FireworkwfGenes(wfgenes_init) print('wfGenes succeeded with model generation using FireWorks') except FileNotFoundError as error: print('wfGenes failed with model generation using FireWorks') @@ -147,7 +151,7 @@ def run_wfgenes(args): print('unexpected error:'+ error.args[0]) try: if args['wms'] == 'SimStack' or args['wms'] == 'all': - simstack_wrapper = PywrapperwfGens(args) + simstack_wrapper = PywrapperwfGens(wfgenes_init, args) test2=SimstackwfGenes(args) print('wfGenes succeeded with model generation using SimStack') @@ -156,20 +160,20 @@ def run_wfgenes(args): print('unexpected error:'+error.args[0]) try: if args['wms'] == 'Dask' or args['wms'] == 'all': - dask_wf = DaskwfGenes(args) + dask_wf = DaskwfGenes(wfgenes_init) print('wfGenes succeeded with model generation using DASK') except Exception as error: print('wfGenes failed with model generation using DASK') print('unexpected error:'+ error.args[0]) try: if args['wms'] == 'Parsl' or args['wms'] == 'all': - parsl_wf= ParslwfGenes(args) + parsl_wf= ParslwfGenes(wfgenes_init) print('wfGenes succeeded with model generation using PARSL') except Exception as error: print('wfGenes failed with model generation using PARSL') print('unexpected error:' + error.args[0]) - print("Outputs is saved in:", code_generation.wconfig_checker()[1] ) + print("Outputs is saved in:", wfgenes_init.wconfig_checker()[1] ) return png @@ -177,8 +181,6 @@ def run_wfgenes(args): if __name__ == '__main__': arg_dic = glue_args() png= run_wfgenes(arg_dic) - print(png) - print (png, "is type of", type(png)) -- GitLab From c5e03ab27106864f6f313e110f4b52574409a9e6 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Mon, 19 Apr 2021 23:24:57 +0200 Subject: [PATCH 02/35] add updated fireworks_wfgenes.py with args key generation --- wfGenes_exe/fireworks_wfgenes.py | 45 ++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/wfGenes_exe/fireworks_wfgenes.py b/wfGenes_exe/fireworks_wfgenes.py index 41bae78..edc5e30 100644 --- a/wfGenes_exe/fireworks_wfgenes.py +++ b/wfGenes_exe/fireworks_wfgenes.py @@ -64,22 +64,39 @@ class FireworkwfGenes(): task['task']['func'] = str(subroutine[0]) + \ '.' + str(subroutine[1]) - input = next(input_subroutine_iter) - if len(subroutine) <= 2: - task['inputs'] = [] - task['inputs'] = input - if len(subroutine) > 2 : - task['task']['inputs'] = input + inputs = next(input_subroutine_iter) + if len(inputs) > 0 and inputs[0] != 'NULL': + for input in inputs: + if input.isnumeric() == False: + if len(subroutine) == 2: # Normal task + if 'inputs' not in task: + task['inputs'] = [] + task['inputs'].append(input) + elif len(subroutine) > 2 : # Data-flow Task. E.g foreach + if 'inputs' not in task['task']: + task['task']['inputs'] = [] + task['task']['inputs'].append(input) + elif input.isnumeric() == True: + if len(subroutine) == 2: + if 'args' not in task: + task['args'] = [] + task['args'].append(int(input)) + elif len(subroutine) > 2 : + if 'inputs' not in task['task']: + task['task']['args'] = [] + task['task']['args'].append(input) + output = next(output_subroutine_iter) + if len(output) > 0 and output[0] != 'NULL': + if subroutine[0] != 'BUILTIN' and len(subroutine) <= 2 : + task['outputs'] = [] + task['outputs'] = output + elif subroutine[1] == 'MERGE' and len(subroutine) <= 2: + task['output'] = [] + task['output'] = output[0] + elif len(subroutine) > 2: + task['task']['outputs'] = output - if subroutine[0] != 'BUILTIN' and len(subroutine) <= 2 : - task['outputs'] = [] - task['outputs'] = output - elif subroutine[1] == 'MERGE' and len(subroutine) <= 2: - task['output'] = [] - task['output'] = output[0] - elif len(subroutine) > 2: - task['task']['outputs'] = output fw['spec']['_tasks'].append(task) -- GitLab From 9d0609283ff5bc0c51a3153c03f8e137a9a5426c Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Tue, 20 Apr 2021 01:53:26 +0200 Subject: [PATCH 03/35] RGG example added --- .vscode/launch.json | 23 +- intro_examples/ct-workflow/morphology.yaml | 9174 ----------------- intro_examples/ct-workflow/mywf_test.png | Bin 99794 -> 0 bytes intro_examples/ct-workflow/parameters.yaml | 25 - .../ct-workflow/reorganization_energy.yaml | 3 - intro_examples/ct-workflow/wconfig_ct.yaml | 67 - .../foreach_exascale/inputs/constant_y.yaml | 1 - .../foreach_exascale/inputs/constant_z.yaml | 1 - .../foreach_exascale/inputs/data.yaml | 1 - .../foreach_exascale/inputs/list_length.yaml | 1 - .../foreach_exascale/inputs/monitoring.db | Bin 122880 -> 0 bytes .../foreach_exascale/lib/myfunctions.py | 49 - intro_examples/foreach_exascale/wconfig.yaml | 81 - wfGenes_exe/auxiliary.py | 12 +- wfGenes_exe/dask_wfgenes.py | 59 +- wfGenes_exe/initial_wfgenes.py | 3 +- wfGenes_exe/parsl_wfgenes.py | 5 +- wfGenes_exe/wgenerator.py | 2 +- 18 files changed, 74 insertions(+), 9433 deletions(-) delete mode 100644 intro_examples/ct-workflow/morphology.yaml delete mode 100644 intro_examples/ct-workflow/mywf_test.png delete mode 100644 intro_examples/ct-workflow/parameters.yaml delete mode 100644 intro_examples/ct-workflow/reorganization_energy.yaml delete mode 100644 intro_examples/ct-workflow/wconfig_ct.yaml delete mode 100644 intro_examples/foreach_exascale/inputs/constant_y.yaml delete mode 100644 intro_examples/foreach_exascale/inputs/constant_z.yaml delete mode 100644 intro_examples/foreach_exascale/inputs/data.yaml delete mode 100644 intro_examples/foreach_exascale/inputs/list_length.yaml delete mode 100644 intro_examples/foreach_exascale/inputs/monitoring.db delete mode 100644 intro_examples/foreach_exascale/lib/myfunctions.py delete mode 100644 intro_examples/foreach_exascale/wconfig.yaml diff --git a/.vscode/launch.json b/.vscode/launch.json index 6f02750..7b28e11 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -126,12 +126,31 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/multihith", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs_slab_version_2/", "--wms", "Dask"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs_slab_version_2/", "--wms", "Parsl"], + "console": "integratedTerminal" + }, + + { + "name": "Python: RGG_generation", + "type": "python", + "request": "launch", + "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", + "cwd": "${workspaceRoot}/intro_examples/rgg", + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "Parsl"], "console": "integratedTerminal" }, - + { + "name": "Python: rgg_to_wconfig", + "type": "python", + "request": "launch", + "cwd": "${workspaceRoot}/intro_examples/rgg", + "program": "/home/mehdi/work/gitlab/workflow_generator/wfGenes_exe/wconfig_generator.py", + "console": "integratedTerminal" + }, + + { "name": "Python: wfGenes_unittest", "type": "python", diff --git a/intro_examples/ct-workflow/morphology.yaml b/intro_examples/ct-workflow/morphology.yaml deleted file mode 100644 index 8ae8bf2..0000000 --- a/intro_examples/ct-workflow/morphology.yaml +++ /dev/null @@ -1,9174 +0,0 @@ -cell: -- - 30.0 - - 0.0 - - 0.0 -- - 0.0 - - 30.0 - - 0.0 -- - 0.0 - - 0.0 - - 30.0 -masses: -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -- 78.11399999999998 -molecules: -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 15.806708550000002 - - 13.86264385 - - 0.0 - - 15.400030350000002 - - 14.42887155 - - 1.2062048000000019 - - 15.400030350000002 - - 14.42887155 - - -1.2062048 - - 14.587736750000001 - - 15.56147845 - - 1.2069538999999985 - - 14.183055650000002 - - 16.12933855 - - 0.0 - - 14.587736750000001 - - 15.56147845 - - -1.2069539000000002 - - 15.720680350000002 - - 13.99225815 - - -2.142315 - - 14.272039450000001 - - 16.00062405 - - -2.1437977000000004 - - 13.551491550000001 - - 17.00758745 - - 0.0 - - 14.272039450000001 - - 16.00062405 - - 2.1437977000000004 - - 15.720680350000002 - - 13.99225815 - - 2.142315 - - 16.448508450000002 - - 12.99241255 - - 0.0 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 8.53490450393384 - - 5.255840010257585 - - -0.15463511128350804 - - 9.02121558799974 - - 4.979086617109164 - - 1.1212332498890152 - - 9.223992462411374 - - 4.7987488069309805 - - -1.2758649732958742 - - 10.195627171711797 - - 4.244753572383368 - - 1.2765788489449739 - - 10.883546001485627 - - 3.785341265717936 - - 0.15467082298144622 - - 10.398529978433286 - - 4.064303765425197 - - -1.1220080652805946 - - 8.842985748600336 - - 5.009010634625354 - - -2.2660032656314124 - - 10.933345490752345 - - 3.7098105600018756 - - -1.9929253311082349 - - 11.795823472276629 - - 3.216524466007001 - - 0.2746358487756371 - - 10.572948486050612 - - 4.030326431504815 - - 2.2674570330954635 - - 8.482838002790368 - - 5.329304829949296 - - 1.9914325197363234 - - 7.616181339267964 - - 5.813369021810107 - - -0.27429619569814456 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 0.8059774097840579 - - 15.996579466161297 - - -0.6899463576081718 - - 1.9058720534274816 - - 16.59866783839217 - - -0.08277887572655986 - - 0.6353476158151894 - - 14.616327767049972 - - -0.6079603426055273 - - 2.834698101756766 - - 15.8215070589199 - - 0.6070929518431969 - - 2.6624226110399345 - - 14.440846652823323 - - 0.6911619766379339 - - 1.5633846191529328 - - 13.83793587744828 - - 0.08158532688822266 - - -0.2217139906660448 - - 14.150080024812953 - - -1.0746598558453508 - - 1.4305756717658615 - - 12.766226641938307 - - 0.14476005950865747 - - 3.383733420502863 - - 13.837031577827204 - - 1.2253084117279542 - - 3.6886891920793468 - - 16.28945593563805 - - 1.0781693949529834 - - 2.034837766186005 - - 17.67087257176473 - - -0.14189608785436436 - - 0.07817242079306186 - - 16.60158944994702 - - -1.212892286609551 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 12.0957681729701 - - 23.621330020513362 - - -0.3852439908500391 - - 12.5641176080048 - - 23.766633750942297 - - 0.9187754180437436 - - 12.260738727719055 - - 24.656541537808017 - - -1.302878349770785 - - 13.198145359639527 - - 24.946087010949462 - - 1.3054518477557984 - - 13.365365254162699 - - 25.98072388671343 - - 0.38646673102133167 - - 12.894578069293383 - - 25.836547465092863 - - -0.9175816532826955 - - 11.902030318844325 - - 24.541029182692988 - - -2.316651087282472 - - 13.022220775754302 - - 26.640155343272042 - - -1.63040117212374 - - 13.856167276432052 - - 26.89687656049022 - - 0.6864200541033973 - - 13.56141855194053 - - 25.0585149230923 - - 2.318162320275824 - - 12.440855173395853 - - 22.960482661555588 - - 1.6291814874142774 - - 11.616669285543015 - - 22.700653884375484 - - -0.6886073629832936 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.704047173603165 - - 21.78582506381883 - - 0.11404833160330699 - - 23.332793093260722 - - 21.308555518844077 - - 1.2620131987047092 - - 23.19802190474232 - - 21.44355976916482 - - -1.1428424429737762 - - 24.454593693358866 - - 20.488502831611417 - - 1.1538612340377732 - - 24.947136414772 - - 20.144107212546675 - - -0.10382033446292918 - - 24.319738806701206 - - 20.62359092481184 - - -1.252487916339382 - - 22.706160098038726 - - 21.80970652202104 - - -2.033773702153027 - - 24.703049550387792 - - 20.35830970179491 - - -2.2286480954668484 - - 25.818580747267866 - - 19.5087817983242 - - -0.18832321112336856 - - 24.942579490885482 - - 20.118365538641324 - - 2.0455215923526313 - - 22.945524374097655 - - 21.569928309792168 - - 2.2374398711990606 - - 21.825369736769204 - - 22.410347919160394 - - 0.1983501245535393 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 23.207516923383164 - - 8.407207689110319 - - 0.37562063985885796 - - 22.235919862841328 - - 8.53366146346504 - - 1.3660445799186114 - - 22.849013402327365 - - 8.506134841206922 - - -0.966996070194394 - - 20.906254474969998 - - 8.759909634399035 - - 1.0147305250825143 - - 20.548197752393 - - 8.861394561143932 - - -0.32857353418903673 - - 21.519728769341462 - - 8.732365917040042 - - -1.3197590338318783 - - 23.6045771076055 - - 8.413554223224956 - - -1.7353074045791295 - - 21.241830316320698 - - 8.808867910459007 - - -2.3624046321233987 - - 19.51613155702234 - - 9.035628351245341 - - -0.6018431767036332 - - 20.152174132035064 - - 8.857791202329276 - - 1.784127681227338 - - 22.515674554702358 - - 8.46244367861669 - - 2.408357071260163 - - 24.241135358839884 - - 8.245880436711264 - - 0.6491459122873497 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 24.79587763322866 - - 28.792703276177466 - - -1.2400227793341632 - - 23.864827393461727 - - 28.209470298315832 - - -0.3833339614369304 - - 26.124380027685252 - - 28.92029508558684 - - -0.8403570386954202 - - 24.261629999127106 - - 27.752916271743906 - - 0.8723435276650701 - - 25.591404007766492 - - 27.87836450507754 - - 1.2710080850250691 - - 26.522585903241694 - - 28.464182508798686 - - 0.4150366213361158 - - 26.847933143948897 - - 29.36798821230327 - - -1.5080334141496046 - - 27.554193665884238 - - 28.563694972206715 - - 0.7249924932069374 - - 25.899639317492266 - - 27.52542563549589 - - 2.246005259860308 - - 23.538272206877167 - - 27.30034023837165 - - 1.53726336285832 - - 22.834789188969967 - - 28.105507243779112 - - -0.6963243297909444 - - 24.49044140456454 - - 29.133799768912642 - - -2.2195999942605313 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 16.37007358908105 - - 1.8500138893113982 - - -0.8800960101905093 - - 17.364804196442712 - - 1.6917335792500023 - - 0.08239520970208916 - - 15.295525346112207 - - 0.9642772823806364 - - -0.9219017851615547 - - 17.285171437764586 - - 0.6488763287402167 - - 1.0036591363180507 - - 16.208656341389972 - - -0.23568712090324784 - - 0.9632567424924785 - - 15.21460748494835 - - -0.07903174672593782 - - -0.0012615659614903865 - - 14.520641752383813 - - 1.0909838417491953 - - -1.665710130158538 - - 14.380176074844107 - - -0.7666534806560399 - - -0.034284613723500265 - - 16.147055108660254 - - -1.0460687487261322 - - 1.6771763795478898 - - 18.057922374640935 - - 0.5262605718158644 - - 1.7506606855371147 - - 18.195844437902714 - - 2.3830036850027576 - - 0.11800065971006932 - - 16.425007561732716 - - 2.6676581795923098 - - -1.5855389209631883 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 7.4171983172804 - - 12.327115538720307 - - 0.07985181406843532 - - 7.744418365228216 - - 11.639548607129754 - - 1.2465178935229457 - - 7.5019357324575235 - - 11.68431398301563 - - -1.1532567442500596 - - 8.15540022463469 - - 10.309356130370267 - - 1.1809303208385005 - - 8.237664105622743 - - 9.66564602702199 - - -0.052698293991166226 - - 7.912767000737011 - - 10.354149307292149 - - -1.220334670132529 - - 7.242346075175055 - - 12.216820740809748 - - -2.058132289747431 - - 7.9786261438209385 - - 9.855549118342836 - - -2.178066560421795 - - 8.55788884477706 - - 8.633663885333785 - - -0.10430564259768299 - - 8.40959251903662 - - 9.775987248033768 - - 2.0870726174160805 - - 7.673014384092534 - - 12.137313897327658 - - 2.204057019332314 - - 7.084791475259874 - - 13.354701104647956 - - 0.13260807639616243 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.485370566459803 - - 15.706652497704885 - - -0.23893023445101333 - - 21.917411824057165 - - 15.211742927649308 - - 0.9329991023869176 - - 23.067718693692953 - - 14.831393593838616 - - -1.1531093722880315 - - 21.930602489787326 - - 13.842088530837383 - - 1.1908608547092392 - - 22.51104678406834 - - 12.966303555892562 - - 0.2748615635021231 - - 23.081623744638662 - - 13.461502985327023 - - -0.8965431743014044 - - 23.503450087376446 - - 15.21555825142088 - - -2.065417247145496 - - 23.534128546624032 - - 12.78232574292303 - - -1.6065767132316304 - - 22.522771151988273 - - 11.903313874395288 - - 0.4751359227876157 - - 21.489678697461265 - - 13.458323738470629 - - 2.1010810161677727 - - 21.460414226945616 - - 15.891088711142688 - - 1.6396761805404656 - - 22.462233705787938 - - 16.767849540845454 - - -0.4451707456210192 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 2.170788861148464 - - 8.20585367463849 - - 0.9911145491635296 - - 2.737286013652012 - - 6.961343432503052 - - 1.2579594846053346 - - 1.6054348109069991 - - 8.459522541650074 - - -0.2566666375556007 - - 2.7379398066406426 - - 5.970075389176241 - - 0.2781599732188768 - - 2.1699610126577165 - - 6.22324407550537 - - -0.96934766541205 - - 1.6053856803655837 - - 7.4691849257023115 - - -1.2374067905545842 - - 1.1607210288273635 - - 9.423921512824505 - - -0.46139637777358944 - - 1.1664917295781647 - - 7.666720204544345 - - -2.206190493142577 - - 2.171410847426828 - - 5.454705951559562 - - -1.7306238260666575 - - 3.1781401703628394 - - 5.003994166331404 - - 0.48576695641203416 - - 3.170978167091678 - - 6.763037077434844 - - 2.2286992518385635 - - 2.1578672568241255 - - 8.969712577012283 - - 1.7563349334618648 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 4.353085067187021 - - 20.929588184422258 - - -1.152261079817521 - - 4.717827346431671 - - 20.102297221945715 - - -0.09231593063213658 - - 4.262010597399107 - - 22.306476172234362 - - -0.9603863912388728 - - 4.992454762418718 - - 20.651108144817606 - - 1.1590857622723278 - - 4.90374728713498 - - 22.02899887080001 - - 1.3501818995302357 - - 4.536354933492342 - - 22.856655975790243 - - 0.2904761962151415 - - 3.9843357755570628 - - 22.94883360423877 - - -1.7850218337025656 - - 4.465269732837671 - - 23.925802199651095 - - 0.43901304375493233 - - 5.115460368348989 - - 22.455343152588615 - - 2.3215739251249743 - - 5.27539658542314 - - 20.008296843995726 - - 1.9818418045811705 - - 4.793902325701528 - - 19.03403768576156 - - -0.24326012887870926 - - 4.153977536067612 - - 20.504743393449374 - - -2.1264647144722266 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 6.106940149101431 - - 27.80539178202502 - - 1.1247950283168235 - - 7.392209252076377 - - 27.591581356683157 - - 0.6315411169297107 - - 5.2973598060963525 - - 28.785497356314206 - - 0.5547917672624548 - - 7.868036456959677 - - 28.356592169985593 - - -0.43192809762361684 - - 7.056933929961513 - - 29.33542419569606 - - -1.0037411428885537 - - 5.771886028161495 - - 29.55124963779462 - - -0.508725111616065 - - 4.297604780465321 - - 28.9472156889185 - - 0.9343797804145888 - - 5.142971840651502 - - 30.31230824572144 - - -0.9508186411708726 - - 7.4262287012130805 - - 29.930386895195454 - - -1.828262277178429 - - 8.866164970158405 - - 28.190351531569544 - - -0.814411391512142 - - 8.01822286361728 - - 26.82672656903638 - - 1.0706926876691507 - - 5.733154231698671 - - 27.20198282497927 - - 1.9405102639524245 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 16.28632015727218 - - 21.8431942036265 - - -0.7355332647238662 - - 16.39580855367249 - - 22.02565524716053 - - 0.6412932475106048 - - 17.00390429972324 - - 20.826299831724903 - - -1.3615762513016367 - - 17.2216699095888 - - 21.191293926037755 - - 1.3925681973776391 - - 17.937569993237016 - - 20.17231360475728 - - 0.7663607416011636 - - 17.830143306701263 - - 19.99119366433581 - - -0.6115451611353404 - - 16.914164038867057 - - 20.681476587714908 - - -2.4296225535186746 - - 18.387299921520636 - - 19.201900745271605 - - -1.0981488431016935 - - 18.579745456102064 - - 19.525315113040342 - - 1.3487677894380579 - - 17.30652635656436 - - 21.33352497781771 - - 2.4615675706895903 - - 15.834137961868603 - - 22.81162653971225 - - 1.1276318781897248 - - 15.634533054261095 - - 22.48170784290041 - - -1.315777637337082 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 12.719111721445003 - - 9.042299182628838 - - 0.6819239144215117 - - 12.633021467554164 - - 7.7193531415600205 - - 1.1100982092488938 - - 13.565128002478902 - - 9.378307972173307 - - -0.37272556844945776 - - 13.391679144473548 - - 6.7320989163982 - - 0.4836898218283597 - - 14.236157018675511 - - 7.0680934758730185 - - -0.5731613401528732 - - 14.324364553736467 - - 8.392084022354123 - - -1.0000548469921893 - - 13.627320872329127 - - 10.404548277163855 - - -0.7084529481138205 - - 14.981297397146033 - - 8.653529752311208 - - -1.818758284362595 - - 14.826223477883808 - - 6.302476524855436 - - -1.0588017429118937 - - 13.324656795378722 - - 5.705055703565382 - - 0.8166765971227348 - - 11.97182604146186 - - 7.458113461164698 - - 1.9251592057425078 - - 12.119673945180109 - - 9.805436453064527 - - 1.1588992659841164 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 27.93119204240037 - - 2.4275899014397995 - - 0.16651399826368274 - - 27.14988878505646 - - 3.0720482546226724 - - 1.123158988436209 - - 28.578096482359253 - - 3.1706232783438995 - - -0.818547945226949 - - 27.015855793038483 - - 4.459100167850314 - - 1.0959194814358004 - - 27.665248037475823 - - 5.202555013507655 - - 0.11177812577205411 - - 28.444950462757607 - - 4.557736410487491 - - -0.8469933276010951 - - 29.18910227411018 - - 2.6703463758023425 - - -1.557564138103565 - - 28.947261819432313 - - 5.134209932724408 - - -1.6122067147948018 - - 27.560464028763192 - - 6.278989754332452 - - 0.08935262636658145 - - 26.40889654630455 - - 4.959011733271868 - - 1.838804969507174 - - 26.65249259302847 - - 2.495269347470719 - - 1.89106074681696 - - 28.046318287987717 - - 1.3528581143802887 - - 0.19663310516502439 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 21.22799159729907 - - 0.6207681500795427 - - 0.09990019649157705 - - 21.815963929698285 - - 0.524650882863558 - - 1.3592575696869438 - - 21.71375446143655 - - 1.5414513246755435 - - -0.8260090420336432 - - 22.889953877514053 - - 1.3479529785254598 - - 1.6929327035353905 - - 23.377447474728037 - - 2.2672772520513265 - - 0.7654832572711017 - - 22.787680933205237 - - 2.3653848928792223 - - -0.4936910435728489 - - 21.26059760815034 - - 1.6117209306098474 - - -1.8055298631013623 - - 23.164343701015426 - - 3.0802687018283095 - - -1.212896332675414 - - 24.210104146375247 - - 2.907458770796552 - - 1.0244134273526617 - - 23.346001428606733 - - 1.2731009235907194 - - 2.6709959682782745 - - 21.44212969706189 - - -0.19419696865604985 - - 2.075676248239087 - - 20.404020298992428 - - -0.028024118331547054 - - -0.16344277219481051 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 9.30606204322385 - - 17.531655987972112 - - 0.5298304966482706 - - 10.25525510741557 - - 18.402655011781608 - - 1.060230547137343 - - 8.434930775790345 - - 17.973494734273054 - - -0.46356762259319306 - - 10.334476515209563 - - 19.714886036349366 - - 0.5972040355979188 - - 9.464472194141308 - - 20.156006879462165 - - -0.3985240827599209 - - 8.513021691517968 - - 19.285459233650496 - - -0.9275404719426996 - - 7.70199722730315 - - 17.295283963921467 - - -0.8790054092528473 - - 7.836235580600388 - - 19.628120777432272 - - -1.69873018615525 - - 9.52462000226675 - - 21.17476042466049 - - -0.7572967100373786 - - 11.07151296914352 - - 20.39087086419548 - - 1.0095288188930893 - - 10.935037023286128 - - 18.057506515109072 - - 1.8273805013207727 - - 9.254438301965685 - - 16.50969727702695 - - 0.8793229995743278 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 28.797464249404648 - - 24.064737487267795 - - 2.057859520573279 - - 29.603579396884676 - - 22.934584123077485 - - 2.175599609575066 - - 28.280279076448224 - - 24.4237055342541 - - 0.8150431929277016 - - 29.892046467996344 - - 22.16267884158313 - - 1.0515138348386572 - - 29.372398395335665 - - 22.520579971587438 - - -0.19140300240995933 - - 28.56792432669661 - - 23.65272505495678 - - -0.3098875401538477 - - 27.64988911504152 - - 25.297939825686413 - - 0.7251939283502944 - - 28.16629871194109 - - 23.9320027155873 - - -1.2747143653769473 - - 29.597082432696983 - - 21.922608934832432 - - -1.0644104853774214 - - 30.518211242351285 - - 21.285374998386054 - - 1.1434137308873522 - - 30.000175008428624 - - 22.653142577337846 - - 3.1416495913769187 - - 28.562369258904074 - - 24.655140950564213 - - 2.932710206752831 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 25.979869938891095 - - 11.872043823524205 - - 3.331830641538033 - - 25.739644456838224 - - 10.500590390857015 - - 3.3801854338901873 - - 26.818097086646596 - - 12.397124485640965 - - 2.350710601388878 - - 26.336351113942538 - - 9.654040794088472 - - 2.4474932074522298 - - 27.17296130984861 - - 10.179911459852708 - - 1.464379264112441 - - 27.415473504694475 - - 11.551752710159821 - - 1.4173790311205652 - - 26.999751139276896 - - 13.462537276360491 - - 2.310122664291471 - - 28.066437496985863 - - 11.959920462693379 - - 0.6559101116255852 - - 27.637424079485598 - - 9.523175248346439 - - 0.7410769574124372 - - 26.149694778550213 - - 8.589194836025822 - - 2.4856041885552993 - - 25.084334084372195 - - 10.09414292138273 - - 4.138551282541075 - - 25.505441618291506 - - 12.529959147012956 - - 4.046865481858031 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 18.45604681033914 - - 4.654980983750321 - - 2.6824472967467714 - - 18.37962205204108 - - 3.663115981717277 - - 3.6577903441955373 - - 17.316331507906437 - - 5.3759514431225055 - - 2.332902432303077 - - 17.164447325904586 - - 3.392430220996764 - - 4.284447704785549 - - 16.024807245606876 - - 4.115643765506961 - - 3.9363783740331115 - - 16.1004964370701 - - 5.106329419707743 - - 2.9587369860738852 - - 17.377420891577053 - - 6.149725524227115 - - 1.5797147075510996 - - 15.215778202210114 - - 5.666256166966763 - - 2.686807525670536 - - 15.08112421463252 - - 3.905037500564375 - - 4.421457420146222 - - 17.105573221221473 - - 2.6220196304855907 - - 5.0415416954175445 - - 19.265908884708736 - - 3.107594452040752 - - 3.932820288764085 - - 19.40201170999245 - - 4.874275075315536 - - 2.206768689735487 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 12.104741847786332 - - -0.6873697748140889 - - 3.1190109723570663 - - 12.264152153357356 - - 0.5114116672984044 - - 3.8107062771481415 - - 10.826528091990948 - - -1.1852511238742582 - - 2.875670176560196 - - 11.146164067207696 - - 1.21306711826377 - - 4.258369220708794 - - 9.867294209714094 - - 0.7160337699716709 - - 4.0125657608587195 - - 9.707647185497374 - - -0.48464936635868233 - - 3.3227524264086794 - - 10.703150034864883 - - -2.113039964934302 - - 2.3336962735649878 - - 8.715374004306536 - - -0.8717748169876749 - - 3.1337609763644863 - - 8.999285330371595 - - 1.2595099326525834 - - 4.360974412789505 - - 11.270475058639901 - - 2.143717899830839 - - 4.79560831925137 - - 13.256483922299402 - - 0.9003671674789168 - - 3.9943942444494205 - - 12.971909817872133 - - -1.2240442133218374 - - 2.7595532059235612 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 2.5788352702976027 - - 25.45809524804074 - - 3.974225248056261 - - 2.183099389051505 - - 26.356098184988753 - - 4.9631210078169605 - - 2.215943003192715 - - 25.680101784939307 - - 2.6475929379584886 - - 1.4255297352009322 - - 27.476418497084964 - - 4.626089167260687 - - 1.064719791379337 - - 27.699697277440425 - - 3.2983345313143992 - - 1.4583937465013586 - - 26.800002277032085 - - 2.3091230645929217 - - 2.528228763619337 - - 24.985678690031747 - - 1.8794756557695143 - - 1.1766740303256804 - - 26.971814915091223 - - 1.2789267882716837 - - 0.4755998445723173 - - 28.568326797161017 - - 3.0363902843760786 - - 1.1183008051025565 - - 28.173268870202563 - - 5.394333848870373 - - 2.469895910666898 - - 26.186301691840335 - - 5.992036405800396 - - 3.178558983468026 - - 24.59672756353416 - - 4.23419987583474 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 1.7661228479471642 - - 3.936075220468626 - - 4.41066682514511 - - 0.6690401923631941 - - 3.168564510945896 - - 4.7957225921845295 - - 2.355915650586433 - - 3.730671247712292 - - 3.1653216344142825 - - 0.16082175418549682 - - 2.196466605128022 - - 3.935862415016112 - - 0.7494956812180065 - - 1.9928686561501978 - - 2.68887384834897 - - 1.848744827544866 - - 2.75892243199629 - - 2.304448914966591 - - 3.204042100274445 - - 4.330655623325576 - - 2.8645721299040563 - - 2.3071984287966867 - - 2.599654395586406 - - 1.3376790680524113 - - 0.3563047744573581 - - 1.2375965019605293 - - 2.021671310354354 - - -0.6908991807679778 - - 1.6006174746304422 - - 4.235404084024534 - - 0.2080180442571622 - - 3.33230965937675 - - 5.760293012332616 - - 2.1511228701583747 - - 4.699769141195956 - - 5.072298297704561 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 17.172354447563215 - - 9.817244427723677 - - 4.5969130520042585 - - 16.28938532292331 - - 10.291321313769696 - - 5.5646669552230055 - - 17.06392514144439 - - 10.259334113671882 - - 3.2802009417469016 - - 15.29869501557394 - - 11.207888502629624 - - 5.216734279395045 - - 15.19200225958196 - - 11.652014218500435 - - 3.899791377475792 - - 16.073715853386318 - - 11.175881437238955 - - 2.930849523852344 - - 17.753225805416967 - - 9.895314205933472 - - 2.5304649271919892 - - 15.989787220446148 - - 11.518665206304998 - - 1.9082815696005189 - - 14.422422413288393 - - 12.362345841582087 - - 3.6289220580817814 - - 14.613191238152005 - - 11.575516319813364 - - 5.968481782216351 - - 16.377581908696452 - - 9.952125999898769 - - 6.587857011571073 - - 17.949676194366138 - - 9.117059342892817 - - 4.870265162051636 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 25.984460013217998 - - 18.15555933583759 - - 5.153763316934265 - - 27.124230748437185 - - 17.644618429958427 - - 5.770847628825977 - - 25.593645937094525 - - 17.673621584410487 - - 3.906393545054764 - - 27.872866848102746 - - 16.65141665008662 - - 5.1417895564539675 - - 27.48023308397675 - - 16.16756626360409 - - 3.8949146094912064 - - 26.341331484182135 - - 16.680437816623357 - - 3.276177574327392 - - 24.70555915416161 - - 18.066583101965676 - - 3.4303335679466445 - - 26.037594141845695 - - 16.306725984884586 - - 2.3075326225963986 - - 28.06166888496415 - - 15.397684237008653 - - 3.405620815114599 - - 28.757915100783453 - - 16.25517844021633 - - 5.621242182154055 - - 27.42399867629877 - - 18.015071208769797 - - 6.741751289443295 - - 25.396094545022525 - - 18.915937077081313 - - 5.6485980303446235 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 18.92466962805701 - - 24.661202358179573 - - 4.628225362474879 - - 17.531859769923255 - - 24.635130539573687 - - 4.610005990763055 - - 19.6003806483368 - - 25.863761411429834 - - 4.432783998726425 - - 16.81435891904868 - - 25.810977937353705 - - 4.397414199276174 - - 17.490588190675965 - - 27.01448975537824 - - 4.204430058310807 - - 18.884164429217975 - - 27.040371836670946 - - 4.220082145503564 - - 20.681550108857444 - - 25.88442260517342 - - 4.452676278992542 - - 19.409299427256617 - - 27.973826882958356 - - 4.068145121639681 - - 16.93423396915597 - - 27.92716498302863 - - 4.0380321863586275 - - 15.73290027717453 - - 25.79017114121848 - - 4.383123223963221 - - 17.00769364133343 - - 23.702277130175727 - - 4.767436535186144 - - 19.480537033489593 - - 23.751181358355808 - - 4.8073421807726255 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 5.33739356217615 - - 13.150244042654926 - - 4.893360484403969 - - 5.292756479462301 - - 11.876323608320945 - - 5.455557286225801 - - 4.25704044551721 - - 13.620666821548811 - - 4.150076865205592 - - 4.168102720471996 - - 11.07293311963435 - - 5.275731012405015 - - 3.086253622447292 - - 11.544785362475055 - - 4.534159982345349 - - 3.1317434666681985 - - 12.81835963770483 - - 3.969439837370742 - - 4.289873761104366 - - 14.611885957852095 - - 3.7186181912664438 - - 2.2932377805897968 - - 13.183993559128721 - - 3.3920231778055134 - - 2.2136834270013788 - - 10.921145184081444 - - 4.393133301633202 - - 4.134024396116951 - - 10.083758036497318 - - 5.712264254592933 - - 6.129387246095536 - - 11.51379462970761 - - 6.037254535739544 - - 6.204256034368079 - - 13.778520360510248 - - 5.045110113290357 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 11.374120585028592 - - 10.717412967571052 - - 5.11038948268776 - - 11.557135993232173 - - 11.280802302596001 - - 6.371352925332232 - - 11.371003996595215 - - 11.530546663892098 - - 3.9791358131116636 - - 11.737969280619092 - - 12.656642248710034 - - 6.501674099855609 - - 11.737360738352026 - - 13.469701394154914 - - 5.369462079834985 - - 11.551721688787456 - - 12.906541710948396 - - 4.107971327953732 - - 11.234558712238682 - - 11.091983521003776 - - 2.9999550105116617 - - 11.548987162695585 - - 13.537516060099994 - - 3.2293053835215715 - - 11.876305844328261 - - 14.5377601563749 - - 5.470155082225326 - - 11.879801089390883 - - 13.09364335512109 - - 7.481012509110105 - - 11.565143840382179 - - 10.648417808638808 - - 7.248721557259612 - - 11.248088434053983 - - 9.648319374226475 - - 5.0085837228802115 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.196139077107393 - - 16.72903461876332 - - 5.665654602065464 - - 21.695516603846812 - - 15.484233895003136 - - 6.040860257057709 - - 21.436043885649166 - - 17.56851681232624 - - 4.8542016257578835 - - 20.434935527174876 - - 15.07880384383969 - - 5.605910068611256 - - 19.673550287499186 - - 15.919944869356224 - - 4.796129916599978 - - 20.175301666347718 - - 17.164381181756514 - - 4.418514476240885 - - 21.822777212102885 - - 18.53712645005438 - - 4.567875423649507 - - 19.585597638233587 - - 17.816476668270926 - - 3.788268028794656 - - 18.695680124528465 - - 15.605214527451409 - - 4.457147470128023 - - 20.04676063185197 - - 14.112063516949888 - - 5.897326162592261 - - 22.28362125474439 - - 14.835275356421652 - - 6.675474884133403 - - 23.168150721109754 - - 17.04894855948962 - - 6.015022691038257 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 11.765853702166817 - - 19.63428344013474 - - 4.745798300113124 - - 10.709856046875737 - - 20.477502166894087 - - 5.084593396015735 - - 13.042342842590806 - - 20.15957852658892 - - 4.557194130826517 - - 10.929735349548826 - - 21.845494935719657 - - 5.235817469417854 - - 12.2074900667815 - - 22.370492053961538 - - 5.049563580809333 - - 13.263670710100204 - - 21.527373852493557 - - 4.708090668813793 - - 13.862928303793568 - - 19.503746358066444 - - 4.299757424629912 - - 14.254958966485324 - - 21.934795429218322 - - 4.561307834677289 - - 12.378431668537187 - - 23.432348272735663 - - 5.1654716573180135 - - 10.109411023105947 - - 22.499843726872125 - - 5.498658881277614 - - 9.720247517112629 - - 20.068403855267885 - - 5.2364601775984285 - - 11.5976007923661 - - 18.571156037981225 - - 4.6425475748197345 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 5.859377009019717 - - 18.548905400448582 - - 5.376568919230535 - - 6.404286228110081 - - 18.520983535028666 - - 6.6584524157025715 - - 6.5534435245488005 - - 17.97582749309067 - - 4.31318546521916 - - 7.642341589153133 - - 17.91953595247329 - - 6.877768562190305 - - 8.335427402169817 - - 17.343970548561984 - - 5.814130407454472 - - 7.791591518062527 - - 17.374041347472858 - - 4.531045109898408 - - 6.1273713759930635 - - 17.992762537845156 - - 3.319240940314545 - - 8.330227627928009 - - 16.92941069859303 - - 3.7049914336456022 - - 9.296982178501542 - - 16.878238967493765 - - 5.983543657436167 - - 8.06512913964182 - - 17.898321010380695 - - 7.873253651083592 - - 5.862456235943783 - - 18.96100272888435 - - 7.484620291337577 - - 4.8923990588315185 - - 19.003055391211483 - - 5.209502893720883 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 5.937263499260839 - - 24.906787567890774 - - 6.317478069138584 - - 5.977175042234502 - - 23.534311453100866 - - 6.081581122964555 - - 6.685024402269645 - - 25.771386708858756 - - 5.521078079488627 - - 6.763613070567326 - - 23.026002662092754 - - 5.049225930089916 - - 7.509699296295787 - - 23.89145922489417 - - 4.2509090229179325 - - 7.4719020325304335 - - 25.264467228417214 - - 4.488374792467898 - - 6.649261472708494 - - 26.837264431823364 - - 5.701010518644514 - - 8.05251543627411 - - 25.936193032071436 - - 3.870424576897612 - - 8.121310236105945 - - 23.497365706835282 - - 3.450398748100349 - - 6.7944489537084545 - - 21.96022080246277 - - 4.866611240594103 - - 5.392065097977033 - - 22.864042076433165 - - 6.696508196637614 - - 5.315939601659873 - - 25.301801064823238 - - 7.109393834009339 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 26.13746643426176 - - 5.112220286531924 - - 5.262465576442505 - - 25.122471780085455 - - 5.9667251639818115 - - 5.687363508366694 - - 27.470897723173046 - - 5.48352975464475 - - 5.420646683998767 - - 25.440078476996813 - - 7.191841225383158 - - 6.271175520792687 - - 26.774310331176444 - - 7.562029035818888 - - 6.431662114910725 - - 27.789962883749915 - - 6.708345732941524 - - 6.004293054924133 - - 28.258543813806586 - - 4.81731985709174 - - 5.095795951483488 - - 28.825478749797984 - - 6.9963011135724 - - 6.1266798955302 - - 27.02136230326793 - - 8.513358392395492 - - 6.8834719434462155 - - 24.65160202885349 - - 7.855088284032467 - - 6.600717898555281 - - 24.08755384239734 - - 5.675513070511158 - - 5.5695060988778415 - - 25.890712595238963 - - 4.155749887191897 - - 4.822594521184785 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 24.293900772834036 - - 23.397542045046894 - - 5.745779994679684 - - 23.842185356142135 - - 24.504434363076115 - - 6.461093607549129 - - 24.942748974022713 - - 23.57535663472383 - - 4.525817302767422 - - 24.03974218237185 - - 25.7890210779447 - - 5.9576771635660615 - - 24.69121661276269 - - 25.966828469156404 - - 4.738277638893429 - - 25.140989292977835 - - 24.85936635626068 - - 4.021198977080759 - - 25.298265492596624 - - 22.716024160311534 - - 3.973634639561548 - - 25.64464603322202 - - 24.99689587537213 - - 3.073778548651719 - - 24.843602934420247 - - 26.96354132284361 - - 4.346440633205596 - - 23.68860527404409 - - 26.648153354336607 - - 6.5133610234151424 - - 23.343577576382206 - - 24.366139591468023 - - 7.410838219648793 - - 24.1530042423621 - - 22.401999231027794 - - 6.143589371511864 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 28.745354204677433 - - 21.93875729769563 - - 5.956132757831846 - - 29.89511525405589 - - 21.365218865596702 - - 6.494680975156175 - - 28.652950740899037 - - 23.322983301600747 - - 5.828418404135018 - - 30.95286206435049 - - 22.174954644708826 - - 6.904704751316369 - - 30.861223854416426 - - 23.559733497077108 - - 6.774475833221773 - - 29.70992611881598 - - 24.13393492841884 - - 6.238028405377427 - - 27.762450400448525 - - 23.76738890784093 - - 5.405024036076804 - - 29.637597965915432 - - 25.208703004626212 - - 6.138871108678761 - - 31.68132483564808 - - 24.188746004714538 - - 7.093806365082682 - - 31.845307159517784 - - 21.729152189501562 - - 7.3230250494948175 - - 29.968632691385874 - - 20.290244630419714 - - 6.588358988679538 - - 27.930855990117042 - - 21.309309448621306 - - 5.625077338130934 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 5.931124673730359 - - 5.306022983223326 - - 4.435143088320173 - - 5.944752905448749 - - 4.366459365310202 - - 5.46371757047487 - - 6.152293418800972 - - 6.651809645035144 - - 4.719525987311774 - - 6.180336185940603 - - 4.771701453444136 - - 6.776310124025637 - - 6.404124362565519 - - 6.117902333810871 - - 7.060267241029504 - - 6.3880055900073645 - - 7.058471024399338 - - 6.031656369003379 - - 6.1472423005154795 - - 7.380034794244955 - - 3.9198931913572723 - - 6.559448069930681 - - 8.103579355555928 - - 6.251987939709715 - - 6.585666715034573 - - 6.4331571251814985 - - 8.079017030495928 - - 6.1905846106065985 - - 4.041807529271798 - - 7.574645753991671 - - 5.77863395567871 - - 3.321072183161884 - - 5.241636224948291 - - 5.762429826287847 - - 4.9891985138790265 - - 3.4151558672184805 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 4.8709908233657915 - - 29.40822531545784 - - 8.778016142632294 - - 3.518463752954916 - - 29.6963391076457 - - 8.60892459138717 - - 5.75002735087464 - - 29.54234758712624 - - 7.705525123698678 - - 3.0446110332875276 - - 30.119377380648306 - - 7.3683110079865335 - - 3.924724159696266 - - 30.25594849966009 - - 6.296061588882316 - - 5.277560518820366 - - 29.96529022541738 - - 6.464350494162888 - - 6.800890610945946 - - 29.324009269695075 - - 7.838809698489746 - - 5.960464528090465 - - 30.06904984083597 - - 5.631844635230891 - - 3.55725579831458 - - 30.582936133162594 - - 5.3326092373464915 - - 1.9942882132357846 - - 30.342740235293952 - - 7.237463930570964 - - 2.8374573952288555 - - 29.597510373555416 - - 9.44331851044363 - - 5.240487145206918 - - 29.09375448570951 - - 9.744344343878112 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 23.25848181862086 - - 3.279817386630695 - - 7.199870422082627 - - 22.685286873661184 - - 4.364694061711751 - - 7.859734908991358 - - 22.53888247397607 - - 2.0959846653205942 - - 7.052738313799358 - - 21.392647122760344 - - 4.266794160368338 - - 8.371709446822434 - - 20.67190175460052 - - 3.0831014864675717 - - 8.22215219817083 - - 21.246151800260296 - - 1.9966758073813917 - - 7.564211675421007 - - 22.98220356601392 - - 1.2559879892552173 - - 6.5354163795484626 - - 20.687904079566874 - - 1.0771726091755136 - - 7.449916882648757 - - 19.669116907180502 - - 3.006114026908856 - - 8.620511111232311 - - 20.948109821837864 - - 5.109368456805823 - - 8.88419856075221 - - 23.242229343984143 - - 5.285395077114359 - - 7.968706075318823 - - 24.25596398684061 - - 3.3610857484894674 - - 6.790438615081604 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 21.184620766325494 - - 21.844921010114803 - - 8.055962582476695 - - 21.943298213739695 - - 20.689296041353888 - - 8.22879327566223 - - 19.86739712015759 - - 21.75217631892536 - - 7.611832787959498 - - 21.38529621483717 - - 19.440979429379784 - - 7.958683577262375 - - 20.06655334780868 - - 19.348253467357765 - - 7.516768710774494 - - 19.308105906099232 - - 20.504519796859643 - - 7.341339933149277 - - 19.27705577817522 - - 22.64923615837977 - - 7.483260883998794 - - 18.28535538554158 - - 20.433050166981435 - - 6.996284265858899 - - 19.63340331017289 - - 18.37974150693469 - - 7.3056763845909405 - - 21.974871452671135 - - 18.543984318103135 - - 8.09281320897701 - - 22.96402009078394 - - 20.76147683107024 - - 8.579031442375676 - - 21.613465744399548 - - 22.812104398770558 - - 8.279251419252585 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 1.230746198066964 - - 8.481561579475953 - - 8.248872408257903 - - 0.8238045977006987 - - 9.687415624694827 - - 8.815657677708508 - - 2.5866223558452006 - - 8.226761792884748 - - 8.054944845319639 - - 1.7719041565121874 - - 10.63819429494575 - - 9.189485165270254 - - 3.1285740706310463 - - 10.38199511515235 - - 8.997708401838539 - - 3.535816692908793 - - 9.176633340410403 - - 8.428299900685175 - - 2.9023081006882827 - - 7.288132168979436 - - 7.620126573240552 - - 4.588478714725361 - - 8.978413119430455 - - 8.277298706501796 - - 3.864775447569334 - - 11.120136350674398 - - 9.286411349132417 - - 1.4554082316454253 - - 11.574445173962681 - - 9.629319872754609 - - -0.22859547848777062 - - 9.882368747787783 - - 8.971212650430063 - - 0.4956037897696213 - - 7.738462767349894 - - 7.972142536217812 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 9.045853901474352 - - 7.501529682070056 - - 9.194733847160101 - - 9.458851532388078 - - 6.381941981748277 - - 9.913682610489879 - - 9.583816688059613 - - 7.756580406695315 - - 7.935179896643045 - - 10.408740043137689 - - 5.516773100453777 - - 9.373484065818676 - - 10.944973424797757 - - 5.770762632996103 - - 8.112170195147794 - - 10.533782807021456 - - 6.892265229219706 - - 7.3937526249903724 - - 9.258673517267814 - - 8.622774002372624 - - 7.37505440766877 - - 10.951367040193533 - - 7.090867855067804 - - 6.415810727924182 - - 11.683245491526728 - - 5.10035139198548 - - 7.693007379318014 - - 10.729265442431046 - - 4.6477116897689426 - - 9.93221985462356 - - 9.036725530099744 - - 6.1813075803020014 - - 10.88903150460519 - - 8.29847435603206 - - 8.164599755752652 - - 9.608220871842533 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 9.713600638953995 - - 27.26482259962711 - - 8.471212342913507 - - 9.203931679875298 - - 26.00043311400488 - - 8.758419179435855 - - 10.933551382232125 - - 27.389196910263834 - - 7.810014792271982 - - 9.912970401434313 - - 24.860385442709283 - - 8.3840193367772 - - 11.132315140233764 - - 24.98503898507662 - - 7.720220041107345 - - 11.643664264762005 - - 26.250011715190993 - - 7.4350259536763 - - 11.326036582696695 - - 28.370943763820648 - - 7.582246328583123 - - 12.590985305237648 - - 26.347114470215125 - - 6.921855562807965 - - 11.68369390193251 - - 24.100558000520692 - - 7.430618259575274 - - 9.516917999430836 - - 23.878853166443818 - - 8.607462471246581 - - 8.254095372833694 - - 25.904389566571147 - - 9.26668743235503 - - 9.156315664807018 - - 28.148757887391387 - - 8.749243801160212 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 26.647851362568254 - - 12.54466117062557 - - 7.425663611448108 - - 26.332803425405906 - - 11.47699787520478 - - 8.263381267371955 - - 27.460661307470247 - - 13.576553057180236 - - 7.889851196457276 - - 26.83080734902707 - - 11.440119238356893 - - 9.564631397777921 - - 27.646106773081534 - - 12.4713928156785 - - 10.02802244263008 - - 27.95936567461431 - - 13.540978325595212 - - 9.190869350190523 - - 27.709573294022825 - - 14.402338810948418 - - 7.237263499724062 - - 28.59025390158832 - - 14.34256807922606 - - 9.550902488616313 - - 28.03178222071387 - - 12.443952928703313 - - 11.038317372072177 - - 26.58570282245449 - - 10.611011406476905 - - 10.214780552198654 - - 25.706408608710127 - - 10.67336296897387 - - 7.900682409905466 - - 26.272874486871224 - - 12.565697945554584 - - 6.411681647144609 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 16.06111137000935 - - 28.452820042221767 - - 8.930767914421919 - - 16.049264692791038 - - 29.200245227749317 - - 10.106415070002013 - - 15.734851815311135 - - 29.057567868584936 - - 7.718841449811663 - - 15.712291429178944 - - 30.552205768929458 - - 10.070756152717687 - - 15.38837010824809 - - 31.157674393855864 - - 8.857721806678562 - - 15.397683289098097 - - 30.409439801586974 - - 7.681699756634818 - - 15.749717594746578 - - 28.47824003001091 - - 6.805655677825196 - - 15.144201860658537 - - 30.87848931795148 - - 6.740461388600689 - - 15.125435981648442 - - 32.206613262566144 - - 8.82966405306037 - - 15.703010450702115 - - 31.132070960487372 - - 10.983915597657678 - - 16.308139699863684 - - 28.73164628962639 - - 11.046175015949274 - - 16.33640313163546 - - 27.407479510657065 - - 8.95698329518441 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 26.795469138051715 - - -0.2819833277212286 - - 8.237265977785968 - - 25.59717484686058 - - -0.5150865684295843 - - 8.908596490287499 - - 27.374515676403227 - - 0.9847952974210248 - - 8.267399139774168 - - 24.978081075195526 - - 0.5175142708412774 - - 9.610791799515656 - - 25.558920597458098 - - 1.7842275724701944 - - 9.642923768776527 - - 26.75652570238133 - - 2.018327621548941 - - 8.969196240559391 - - 28.307697836132082 - - 1.1637751753156227 - - 7.750787825364362 - - 27.206414705025544 - - 3.0018241407680644 - - 8.992096694894546 - - 25.078149344307583 - - 2.586370445384199 - - 10.186633393794665 - - 24.0475322478428 - - 0.33607177907770885 - - 10.13170201339151 - - 25.151000135010634 - - -1.5001334904762436 - - 8.889604966504045 - - 27.282623459953875 - - -1.0870068082808335 - - 7.704511353648883 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 14.7135974516212 - - 18.096398969395047 - - 8.568549488887278 - - 15.390998020310771 - - 19.01095442108816 - - 9.372071599014326 - - 13.504503180701107 - - 17.55437420121287 - - 8.998934410615307 - - 14.859610461325296 - - 19.384519313702384 - - 10.605236785370543 - - 13.64859987318239 - - 18.844018650702388 - - 11.034517569120249 - - 12.971944035195376 - - 17.927034500972955 - - 10.231867864294095 - - 12.976203733031387 - - 16.8487439050465 - - 8.372248230116938 - - 12.033206772196387 - - 17.50570870339474 - - 10.56570445931827 - - 13.236397131326619 - - 19.132569544538462 - - 11.992130029373879 - - 15.386089548170304 - - 20.094500693970584 - - 11.228884249578005 - - 16.326767577843125 - - 19.43574542729391 - - 9.034969349917693 - - 15.11918928081293 - - 17.817749153724932 - - 7.605710366572641 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.348537674114247 - - 9.25981061865173 - - 8.806226949694116 - - 22.90612424888723 - - 10.03287012622359 - - 9.822301354219325 - - 21.276551358945635 - - 9.753049593279874 - - 8.065624735179084 - - 22.39302139176838 - - 11.299186825975434 - - 10.097596318985202 - - 21.322113256431198 - - 11.793520176230405 - - 9.35479088881606 - - 20.76243647380977 - - 11.019192513619442 - - 8.339828735578608 - - 20.84772058293395 - - 9.154816722578817 - - 7.2731781514514555 - - 19.929912814465744 - - 11.401632950779174 - - 7.764647357678913 - - 20.922606852747876 - - 12.7757273876256 - - 9.568935629725837 - - 22.826166098683437 - - 11.898960282702836 - - 10.886803143779455 - - 23.74197075149175 - - 9.651800091434021 - - 10.393174582504619 - - 22.75613819971685 - - 8.283318479941524 - - 8.58366338190876 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 3.388131222458828 - - 16.662596698517067 - - 8.704792306088525 - - 2.794595964671254 - - 17.09130192674322 - - 9.890059664619995 - - 4.016274568560416 - - 15.420220936949297 - - 8.651225619026741 - - 2.82799214499208 - - 16.27803701820165 - - 11.021476796960771 - - 3.4542999232563383 - - 15.033957500452063 - - 10.966939442825536 - - 4.050429458714076 - - 14.605918222249558 - - 9.781873387339491 - - 4.471943572433654 - - 15.085456074347302 - - 7.729245014144057 - - 4.538489896503517 - - 13.641439110708681 - - 9.73983767286725 - - 3.4817002273928725 - - 14.402937600071908 - - 11.845152088724841 - - 2.367190477734171 - - 16.61146508178253 - - 11.941627599109058 - - 2.302145874488157 - - 18.053427906867263 - - 9.929512131622873 - - 3.349547145806467 - - 17.287795531266106 - - 7.823402882679199 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 16.148602860314696 - - 11.25199200321591 - - 10.702761875527253 - - 16.496669726560555 - - 12.27394011552866 - - 11.583331292727152 - - 15.683006479906062 - - 11.561902306889001 - - 9.42678907002817 - - 16.380327003904334 - - 13.605525627447795 - - 11.18840821286049 - - 15.91687817182707 - - 13.915316227053355 - - 9.91082668237538 - - 15.566158440791089 - - 12.893045615691012 - - 9.030526693734382 - - 15.418312884811126 - - 10.768058408575506 - - 8.74158898543262 - - 15.20436460224357 - - 13.133168566468289 - - 8.039751171366092 - - 15.825094645370115 - - 14.948657691868725 - - 9.604272373770247 - - 16.650494974757784 - - 14.398679213146812 - - 11.872591379741126 - - 16.86344308016155 - - 12.032693798864011 - - 12.571778313000681 - - 16.252521249045024 - - 10.218903598475872 - - 11.004654147066418 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 18.381501800458985 - - 25.110932886224642 - - 10.121408286529075 - - 19.151883096265504 - - 25.412117929871737 - - 11.242448524299487 - - 18.918613106071245 - - 25.268578439398127 - - 8.845637809094484 - - 20.45929953914334 - - 25.86993275054886 - - 11.088540504559061 - - 20.99734793779204 - - 26.025160534341857 - - 9.81206964376955 - - 20.225884679230727 - - 25.726304116480136 - - 8.690241276866995 - - 18.322046378064197 - - 25.02921611503098 - - 7.9758310450301195 - - 20.642398378823717 - - 25.848767667141132 - - 7.699429001188119 - - 22.01155950078265 - - 26.381747149806387 - - 9.692006185849555 - - 21.05699104870654 - - 26.103881582735312 - - 11.959300375097289 - - 18.736352306081574 - - 25.28415358794932 - - 12.232756193516016 - - 17.372130681258458 - - 24.7422814295298 - - 10.241723183114448 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 27.36589004168459 - - 20.92783232487171 - - 11.078235830194458 - - 27.384374965758376 - - 19.69297393274505 - - 11.722994734841716 - - 26.93509517016221 - - 21.015787727364724 - - 9.756263586920085 - - 26.971459880159024 - - 18.546212292316785 - - 11.046933557280006 - - 26.538065908613085 - - 18.634833911098077 - - 9.725084293291614 - - 26.521901064370866 - - 19.869847605648328 - - 9.078980992976259 - - 26.915564158652387 - - 21.975529177535684 - - 9.258001729543118 - - 26.187711967890344 - - 19.93862961396514 - - 8.052444762758089 - - 26.218770601467636 - - 17.7449078888444 - - 9.199464160010312 - - 26.986220639432297 - - 17.587581789885906 - - 11.547932188635315 - - 27.713520563155665 - - 19.626107392428676 - - 12.751071595588858 - - 27.672853706187507 - - 21.819270149252397 - - 11.607689832991742 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 2.6554691951423908 - - 24.090294225251196 - - 10.559967334596188 - - 2.2857593251338972 - - 23.23344458828556 - - 11.594401623372297 - - 3.744815611295273 - - 23.774410231252734 - - 9.750972480412294 - - 3.004109200422159 - - 22.06049258042232 - - 11.819738898589481 - - 4.092430439625726 - - 21.743374196563394 - - 11.008590075307623 - - 4.464071617170945 - - 22.601794184051517 - - 9.975164914578448 - - 4.027927819649174 - - 24.4371108278321 - - 8.944482934988468 - - 5.309980869208454 - - 22.357083372608024 - - 9.346878272268507 - - 4.651150397226745 - - 20.83381713264538 - - 11.183896376435603 - - 2.7167881456814897 - - 21.39562069133529 - - 12.62322003180273 - - 1.4365286080991908 - - 23.476313116354564 - - 12.218558700895183 - - 2.0891499214235143 - - 24.99300229805665 - - 10.376636369819124 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 7.780852467880442 - - 13.23191062483587 - - 9.97157439465241 - - 8.754396604228052 - - 12.7792217254581 - - 10.859389443583721 - - 8.06920105521325 - - 14.277433460840564 - - 9.097121378349394 - - 10.016353573907809 - - 13.370752589825736 - - 10.87264413545263 - - 10.305449892089072 - - 14.41511403852684 - - 9.995887563834602 - - 9.330732491861 - - 14.869894772849408 - - 9.109281633346832 - - 7.31488742221811 - - 14.624704436970623 - - 8.404182851264235 - - 9.554059454343085 - - 15.681834871954022 - - 8.430261536354408 - - 11.284293417071018 - - 14.875486721153978 - - 10.006689853019457 - - 10.771863132481466 - - 13.019050846864808 - - 11.562355045709367 - - 8.5318488392077 - - 11.963762054809749 - - 11.534110132412904 - - 6.806610820875351 - - 12.763214541941805 - - 9.951906597107472 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 2.2836215273346303 - - 4.130371736912732 - - 12.17008583590891 - - 1.3335952929086916 - - 4.925293752248476 - - 11.532527893771409 - - 3.301107753761411 - - 3.5332017470863812 - - 11.429112983215806 - - 1.4009690023884058 - - 5.124172938590773 - - 10.154657182786469 - - 2.4205583780338227 - - 4.528664027717279 - - 9.413862849158246 - - 3.3697033648488968 - - 3.7312163902590063 - - 10.051178047557329 - - 4.041680293902225 - - 2.9208027311646574 - - 11.925368711838749 - - 4.159805243360156 - - 3.2671241525855916 - - 9.476245559929996 - - 2.472529947393727 - - 4.681578137167078 - - 8.344231803484336 - - 0.6629291835920323 - - 5.7413007093816555 - - 9.660045730012895 - - 0.547222754376856 - - 5.3932680903133114 - - 12.10904176147918 - - 2.2391668639731095 - - 3.9879827971611865 - - 13.241047459815924 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 17.240713014535718 - - 7.198061043518017 - - 12.362979605113543 - - 15.906394927915551 - - 7.107033366774007 - - 11.972799913265725 - - 18.246083636457485 - - 6.7375233472808835 - - 11.515591896289061 - - 15.576896215326437 - - 6.556641056027526 - - 10.735416081808143 - - 16.583112393920697 - - 6.098256224617434 - - 9.886662907520865 - - 17.91803796137209 - - 6.186901556469656 - - 10.277924120906272 - - 19.282121632378978 - - 6.813618286124749 - - 11.816565020326621 - - 18.699026486118495 - - 5.829235067887666 - - 9.620412481477013 - - 16.327858104750934 - - 5.669744401397047 - - 8.92675811641875 - - 14.54067852390829 - - 6.485968261053794 - - 10.433012046008782 - - 15.126649679655849 - - 7.469897267447331 - - 12.628602572232698 - - 17.4966318729273 - - 7.638122867768592 - - 13.316950650741504 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 10.827538039201853 - - 3.0029212960021443 - - 13.677341528898332 - - 9.680558970912266 - - 2.4427999964136493 - - 13.11909952689703 - - 12.06234303430062 - - 2.8211321887843446 - - 13.0583582248249 - - 9.767475250362677 - - 1.7018282923900208 - - 11.941803328872847 - - 11.002654597525028 - - 1.522212991965022 - - 11.321287473482146 - - 12.150738494104052 - - 2.0803954437372547 - - 11.881024304094439 - - 12.951612253727925 - - 3.260946793085515 - - 13.489070842850138 - - 13.109791746862872 - - 1.939330519267264 - - 11.400912343941291 - - 11.07088770090179 - - 0.9460679718370266 - - 10.4082729598268 - - 8.87662736467122 - - 1.266917605771767 - - 11.508868359103259 - - 8.721375625787283 - - 2.588998935890265 - - 13.59695219313879 - - 10.757444799432816 - - 3.5895871186697383 - - 14.582946176298144 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 24.776032074886604 - - 20.928317620138184 - - 13.651855014185555 - - 25.494497579189993 - - 22.03898361742633 - - 14.089072749118145 - - 24.0520307215112 - - 20.992154108994445 - - 12.463293728787674 - - 25.490174359459353 - - 23.21308848260026 - - 13.338020874061938 - - 24.76778788050719 - - 23.275912801415956 - - 12.147566976346084 - - 24.046811673872163 - - 22.165608852410642 - - 11.711232181854745 - - 23.499046020201774 - - 20.127813910826614 - - 12.121425432432895 - - 23.484301125089846 - - 22.214749659114624 - - 10.788542086291674 - - 24.7629819107034 - - 24.187359697199195 - - 11.564955783884622 - - 26.048009321092728 - - 24.075288344144234 - - 13.678052494882913 - - 26.06098109640785 - - 21.9870658043328 - - 15.008937388892752 - - 24.79124846404088 - - 20.013175338264798 - - 14.227609035073275 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 30.31195139390274 - - 29.650715289613068 - - 13.205321453803514 - - 29.542755863972662 - - 29.02315505971566 - - 14.182786225921811 - - 29.95598513944191 - - 29.540136139146192 - - 11.862938772407212 - - 28.41732895678287 - - 28.285899357677415 - - 13.8187970089597 - - 28.059906240260883 - - 28.177508752604822 - - 12.475863622286903 - - 28.8308148636718 - - 28.803201502425047 - - 11.497508840130898 - - 30.550218499118106 - - 30.03222286516678 - - 11.104989329221272 - - 28.55496911022308 - - 28.717445434194556 - - 10.455038233403283 - - 27.187304541655504 - - 27.60429661993871 - - 12.192687935979992 - - 27.82053332425735 - - 27.798610714728436 - - 14.578122170057698 - - 29.816290665903633 - - 29.11402363301299 - - 15.225221645803106 - - 31.176774389891975 - - 30.234304610197206 - - 13.489424107166771 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 15.620386737356936 - - 23.71432569170366 - - 12.640090999093154 - - 15.366826461882752 - - 24.651175873344044 - - 13.63956581618832 - - 14.597778006082976 - - 23.321696814294153 - - 11.779251331389592 - - 14.091585387797085 - - 25.196317864897782 - - 13.778130803429079 - - 13.069224434497073 - - 24.80523757253496 - - 12.915110590057846 - - 13.32205932305541 - - 23.866013147748095 - - 11.91666099112663 - - 14.7965626374086 - - 22.59860722210768 - - 10.999907952561015 - - 12.52831450632991 - - 23.56064899128199 - - 11.248146334075466 - - 12.078945848481847 - - 25.22700404632912 - - 13.023072187040023 - - 13.895150644547993 - - 25.923543044588126 - - 14.554498550372564 - - 16.16245344018662 - - 24.959867043315878 - - 14.303973419305622 - - 16.613368543008544 - - 23.302351326893877 - - 12.524013940532264 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 6.886657723170023 - - 20.82132062993934 - - 13.550971613865352 - - 6.371756098756949 - - 19.533930512175857 - - 13.68674343718406 - - 7.498804552987358 - - 21.203436153597746 - - 12.359252279680737 - - 6.46777792840144 - - 18.628760332195903 - - 12.631249904666614 - - 7.078016909699079 - - 19.0121018940274 - - 11.438091392451312 - - 7.595526323468647 - - 20.29930280142347 - - 11.302934323627518 - - 7.893307016751835 - - 22.204780411751123 - - 12.252352921167121 - - 8.071139574247663 - - 20.596409876081545 - - 10.377888718969766 - - 7.154026923009601 - - 18.309539317328333 - - 10.619053758115426 - - 6.068027097852525 - - 17.62918378461079 - - 12.737249658526595 - - 5.891579939206947 - - 19.239606522372863 - - 14.610082072209073 - - 6.799235309784204 - - 21.52762983908066 - - 14.365031961664984 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.33930172250313 - - 6.261959325329144 - - 13.11156941641334 - - 21.98318189059088 - - 5.885013816504506 - - 14.404636210837086 - - 23.17072291472057 - - 5.441671108523992 - - 12.352097870766023 - - 22.457182937902445 - - 4.68788918835345 - - 14.938336009882498 - - 23.286965879050307 - - 3.8660935350289862 - - 14.177361780784395 - - 23.64546147110288 - - 4.2442711473428005 - - 12.884522963832364 - - 23.44228537812833 - - 5.732018462896751 - - 11.34626377292471 - - 24.291197065715636 - - 3.6078035407870486 - - 12.294502221416991 - - 23.656241205034217 - - 2.9375191865813193 - - 14.591583648609458 - - 22.18057064789267 - - 4.395760177736593 - - 15.942495474806599 - - 21.33311871828052 - - 6.519430130838443 - - 14.991733989930427 - - 21.959806253051024 - - 7.183853948703595 - - 12.692877263157152 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 3.240364548682649 - - 9.613652086973012 - - 13.392329627430366 - - 3.144162306083608 - - 10.183662572519994 - - 14.659911640962816 - - 4.486027411272182 - - 9.478549788162008 - - 12.78322997403463 - - 4.292896120427614 - - 10.617774424457098 - - 15.319136464122401 - - 5.539377579337367 - - 10.480176056124915 - - 14.71059701246708 - - 5.635594575931403 - - 9.912223737690862 - - 13.441289305035095 - - 4.560757399378128 - - 9.030789014141575 - - 11.801560116990059 - - 6.602555012060567 - - 9.807315176626762 - - 12.967821610676287 - - 6.431125240924551 - - 10.818177883830522 - - 15.22121939278494 - - 4.217647137200909 - - 11.060517920760464 - - 16.303263354228303 - - 2.1774989818838053 - - 10.283125014314908 - - 15.134694992000716 - - 2.3504218820880305 - - 9.264074903159498 - - 12.887346984291836 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 6.197353450410304 - - 27.43296549674991 - - 12.948664168974139 - - 6.802446651442262 - - 27.94991565984325 - - 14.092148201695297 - - 4.823345364641932 - - 27.203263541500426 - - 12.932239244521664 - - 6.034276550367343 - - 28.238176723226015 - - 15.218842525294813 - - 4.6591761466959944 - - 28.010665853070254 - - 15.201312939495638 - - 4.053946164848506 - - 27.491060904936173 - - 14.058213219636562 - - 4.35323319645274 - - 26.80726284295384 - - 12.04233588674922 - - 2.9871454753022335 - - 27.31230759046881 - - 14.045041652697943 - - 4.062706310644006 - - 28.23293693380656 - - 16.075963523505305 - - 6.504618450629128 - - 28.639338534138965 - - 16.10655737092277 - - 7.8682734062343975 - - 28.133375981375778 - - 14.10242581309293 - - 6.791561653254516 - - 27.22286537326921 - - 12.070037867907669 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 23.09742966508694 - - 16.563059095646445 - - 15.142986725089534 - - 22.088569158033682 - - 15.680474307610885 - - 15.52269128837796 - - 23.814670759640194 - - 16.33652125368923 - - 13.970307397826115 - - 21.795883394849746 - - 14.572058586868605 - - 14.72999369299862 - - 22.511910881209438 - - 14.346990587237304 - - 13.555422010676162 - - 23.523056972550002 - - 15.228512963565123 - - 13.1766457117945 - - 24.593936540669663 - - 17.025095865645852 - - 13.673053572974489 - - 24.080415422397856 - - 15.052922637738623 - - 12.266310858740729 - - 22.286081520833193 - - 13.486127444474638 - - 12.940515438760672 - - 21.012600865955736 - - 13.88692501105468 - - 15.025375500236182 - - 21.52824375562549 - - 15.859904669849062 - - 16.430209981643706 - - 23.314486752583 - - 17.430526797650188 - - 15.750930500358077 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 18.129397368681026 - - 1.0900630376395724 - - 14.341877362483222 - - 19.484788919605755 - - 0.799313094733261 - - 14.480834911855007 - - 17.725879571123762 - - 2.16324126015013 - - 13.550427505619766 - - 20.436823762955306 - - 1.5804637275589113 - - 13.828107411619373 - - 20.032745630780123 - - 2.652599522462606 - - 13.034246401757782 - - 18.676822063495315 - - 2.945238945307782 - - 12.897122186270819 - - 16.673272844747114 - - 2.3850565766151868 - - 13.438324717644871 - - 18.363008143712207 - - 3.7785625119577357 - - 12.282888838233406 - - 20.77129199326544 - - 3.2600354883943137 - - 12.52851410052289 - - 21.489132178191422 - - 1.3544417789065146 - - 13.936509564622552 - - 19.797234779646725 - - -0.0373875785523583 - - 15.09080176174953 - - 17.390594723231516 - - 0.47507757353189173 - - 14.837026993557268 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 10.942386492322589 - - 9.8658550047348 - - 13.931266156488807 - - 10.793700422544424 - - 9.782330225975855 - - 15.313961730406929 - - 12.071905563837912 - - 10.474790279125576 - - 13.388757645190262 - - 11.774237709233514 - - 10.306500374752964 - - 16.154445001045172 - - 12.90548630742654 - - 10.913444098508107 - - 15.611429782220705 - - 13.05323666553366 - - 10.999390472473733 - - 14.228045289364214 - - 12.189562598064006 - - 10.534316655834898 - - 12.315275729703755 - - 13.92997612422072 - - 11.472321039138357 - - 13.80631723774743 - - 13.666168168618228 - - 11.321647678704707 - - 16.26329425120843 - - 11.65821162615774 - - 10.24160609812316 - - 17.22799827393473 - - 9.91936930479394 - - 9.304452905696081 - - 15.734590252263224 - - 10.188238904007228 - - 9.446414484572742 - - 13.27969828418078 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 26.465727315371957 - - 7.5567321902194635 - - 14.167976221312559 - - 26.98357161277746 - - 7.104535788501232 - - 15.379705021029418 - - 26.758777060701092 - - 6.875175026390412 - - 12.988767730272318 - - 27.793477427335528 - - 5.970711081456724 - - 15.413080894349065 - - 28.084470512118166 - - 5.287473614750203 - - 14.233471132058344 - - 27.56854326911685 - - 5.741207877409927 - - 13.020658738729463 - - 26.351877985808144 - - 7.223344033691783 - - 12.049107432446746 - - 27.795986916103892 - - 5.212485766612665 - - 12.104737199609211 - - 28.7141215741741 - - 4.40821171577095 - - 14.258618613348654 - - 28.195516120194153 - - 5.620130533308521 - - 16.354169687997 - - 26.75113086627379 - - 7.630706863852498 - - 16.295600915185574 - - 25.825892617783335 - - 8.428094410171315 - - 14.14454400968076 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 21.23119231547561 - - 23.069207553543404 - - 14.528536857990535 - - 20.87424955249776 - - 22.908016259740304 - - 15.865526093887892 - - 20.833821677798262 - - 22.125394169849248 - - 13.583950250411718 - - 20.119417396140516 - - 21.804139831453988 - - 16.25834296022932 - - 19.719782542612016 - - 20.86128530138473 - - 15.312675512567326 - - 20.078964414161614 - - 21.0210317028674 - - 13.975350169594309 - - 21.106361464320006 - - 22.25396428704329 - - 12.545229027064957 - - 19.77086294197979 - - 20.288346825778085 - - 13.241567979466268 - - 19.13508101280346 - - 20.00363311968574 - - 15.617226327746856 - - 19.84271573579778 - - 21.679307495373866 - - 17.296631469198505 - - 21.17816456308636 - - 23.643962936115948 - - 16.597487941236622 - - 21.804677867111234 - - 23.93313925294412 - - 14.22203079283771 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 27.539508583755367 - - 14.264390505248336 - - 15.550886441124511 - - 28.30101061260461 - - 14.304962875876837 - - 16.716819341829197 - - 28.16889275516879 - - 14.283292807559128 - - 14.30812771398269 - - 29.691483108496655 - - 14.363472381499557 - - 16.640775146791587 - - 30.321097628743964 - - 14.379802915414288 - - 15.397276665831422 - - 29.559283200743174 - - 14.341788855228291 - - 14.230587627950104 - - 27.577511980348635 - - 14.2460460305807 - - 13.403345172771031 - - 30.047496413264533 - - 14.356681234276225 - - 13.265385045591897 - - 31.400195669480652 - - 14.426583482428773 - - 15.337666769102203 - - 30.282310566632052 - - 14.39519562471668 - - 17.546372463140383 - - 27.812163730824686 - - 14.284533783579242 - - 17.681371760552793 - - 26.461509885029432 - - 14.204654561207041 - - 15.610552592956141 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 18.016316187193354 - - 16.85368232089282 - - 13.804811775907892 - - 17.97331491902208 - - 16.420624439122466 - - 15.12827040696434 - - 16.95690374768338 - - 17.590134251801267 - - 13.279250340280894 - - 16.8720324535025 - - 16.724353331276504 - - 15.926734892642552 - - 15.813320773225707 - - 17.46338422628703 - - 15.40144210108735 - - 15.854990051374093 - - 17.894589454943848 - - 14.07656651272743 - - 16.99333378997376 - - 17.93094160913072 - - 12.253446661542883 - - 15.032536877069619 - - 18.46624766512053 - - 13.667949802791119 - - 14.957724815470462 - - 17.69823388371882 - - 16.02030843418124 - - 16.83901280169719 - - 16.387668267535442 - - 16.9542283569884 - - 18.79856031413157 - - 15.853799805061476 - - 15.537452349595977 - - 18.87725508864987 - - 16.62995527380581 - - 13.190043491511014 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 12.516660484568227 - - 29.58267455560012 - - 15.623925591484856 - - 13.064478783006297 - - 29.51732921928567 - - 16.903205109441718 - - 13.29513391236726 - - 29.253724880269438 - - 14.516359693013694 - - 14.389947115234149 - - 29.122349776877037 - - 17.075671871500568 - - 15.16789022758033 - - 28.790819572100943 - - 15.967582597178014 - - 14.620745490383392 - - 28.858581729334396 - - 14.687344131422828 - - 12.867688689404488 - - 29.299152713462632 - - 13.523899676972102 - - 15.224862702039353 - - 28.60349037338017 - - 13.827018179516488 - - 16.19708675469962 - - 28.485511429520383 - - 16.100758381011335 - - 14.814917445796604 - - 29.071996530620645 - - 18.069178146044507 - - 12.458026960768581 - - 29.767334841024685 - - 17.76312566769523 - - 11.484168890467359 - - 29.875450323503827 - - 15.491815467046397 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 9.485086923947044 - - 18.93044278115919 - - 15.612397806254759 - - 8.866226434960467 - - 17.766663413151086 - - 16.06357433923883 - - 10.61800560700494 - - 18.847859019795976 - - 14.805796190782143 - - 9.37900521918996 - - 16.520401997164218 - - 15.707891551988869 - - 10.511033229723443 - - 16.437991857272603 - - 14.89876192405211 - - 11.131872314096105 - - 17.60226906824776 - - 14.449332274480955 - - 11.09472334734789 - - 19.751578405400018 - - 14.451139373239656 - - 12.011707707138434 - - 17.538676673186668 - - 13.823204781660579 - - 10.91023759861884 - - 15.470999783358137 - - 14.62352285778163 - - 8.89825619381595 - - 15.617058839485946 - - 16.058664217547175 - - 7.983425168996703 - - 17.831289606972554 - - 16.6850527137528 - - 9.078543215916913 - - 19.896858819507628 - - 15.876919792909412 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.683563914860308 - - 10.58463763680731 - - 17.612278690895742 - - 23.90185856664977 - - 10.618309639247842 - - 18.287227076936045 - - 22.66092897897774 - - 10.52225204603242 - - 16.22068726957739 - - 25.09748015469176 - - 10.588685465881627 - - 17.571523737388365 - - 25.074605092880486 - - 10.523694975153614 - - 16.17932311597761 - - 23.85577990157873 - - 10.492568217172314 - - 15.50370052859598 - - 21.71490020242513 - - 10.490401535260686 - - 15.697461611757028 - - 23.837673583422244 - - 10.444364069726165 - - 14.423173587591316 - - 26.002261425806246 - - 10.502054235936582 - - 15.623283774609675 - - 26.043187933815517 - - 10.615088019260071 - - 18.096051763813072 - - 23.918889168157655 - - 10.661007408168253 - - 19.367799540607546 - - 21.756408161386997 - - 10.59328949523012 - - 18.16862119447323 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 1.2343844997512647 - - 18.991578718814377 - - 17.640678068061092 - - 2.435441545917412 - - 19.670792052945973 - - 17.448162601830294 - - 0.5800247792793192 - - 18.414311841205123 - - 16.554626828761258 - - 2.9830004376185304 - - 19.77228298114035 - - 16.170469878483765 - - 2.329426913225509 - - 19.19244817645564 - - 15.084374647814212 - - 1.1264313851498007 - - 18.51502244641736 - - 15.276379185016797 - - -0.349447136960255 - - 17.88226181083577 - - 16.705473480064846 - - 0.6178384607391771 - - 18.066823920369316 - - 14.433383771439175 - - 2.7532628363166247 - - 19.272085988347136 - - 14.092298404789183 - - 3.915485922314672 - - 20.299976522668317 - - 16.02147224130194 - - 2.9459195954721507 - - 20.113869913220704 - - 18.292463591265193 - - 0.8173171225388496 - - 18.900931563150777 - - 18.63418072189497 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 4.892394818493776 - - 5.115237575074732 - - 16.15715166167461 - - 5.644048126840267 - - 5.908191679876711 - - 17.021542821899565 - - 5.243319748325522 - - 5.027249551234537 - - 14.811774098524085 - - 6.7469184317058275 - - 6.61243621411919 - - 16.541608899036515 - - 7.099362716982769 - - 6.522243683974064 - - 15.196016859867113 - - 6.345941185313634 - - 5.730946986221099 - - 14.330467823510986 - - 4.662848290858135 - - 4.407044268448749 - - 14.142335315382647 - - 6.61787564391198 - - 5.662483743616311 - - 13.285693023152579 - - 7.9544276086871735 - - 7.069693177371288 - - 14.822710784489715 - - 7.330093483025735 - - 7.228189425782552 - - 17.213133128435107 - - 5.374573543665797 - - 5.971667072405471 - - 18.067059112384733 - - 4.045410801932759 - - 4.5579071043369055 - - 16.53293144987113 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 14.962741179960306 - - 21.709138835505605 - - 17.417496078508833 - - 13.935047800712589 - - 21.352495485362752 - - 18.28788841831593 - - 14.667522807459923 - - 22.078175631858965 - - 16.10692790339506 - - 12.6122973805269 - - 21.365566665747135 - - 17.84882086790788 - - 12.31693005055299 - - 21.737285236348626 - - 16.53826638706838 - - 13.345227282684661 - - 22.09169748778181 - - 15.666505891852614 - - 15.465206150465502 - - 22.360424749762814 - - 15.433290976083661 - - 13.116536908363308 - - 22.378091639415725 - - 14.648729368529473 - - 11.29059825095516 - - 21.74629282857059 - - 16.196570260112477 - - 11.81470306159664 - - 21.088334353593087 - - 18.52496840826648 - - 14.164272682052912 - - 21.071559489865795 - - 19.30684911937964 - - 15.987430424889272 - - 21.712524627626152 - - 17.762764256709957 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 28.212126840473314 - - 0.5374730601863911 - - 17.470900678829704 - - 27.13626752832997 - - -0.34027878715530724 - - 17.58495952814996 - - 27.9883881618265 - - 1.8730672910494732 - - 17.143700372735402 - - 25.83679182077411 - - 0.11692675262135876 - - 17.372955227370234 - - 25.61296137618907 - - 1.4538390002771586 - - 17.048093446393754 - - 26.689441654259355 - - 2.3316474046523914 - - 16.93142203289256 - - 28.823479974968794 - - 2.5553486264259315 - - 17.06085211914349 - - 26.516256796210232 - - 3.368731806513302 - - 16.677152693049173 - - 24.604713369896697 - - 1.8089150307972321 - - 16.882107564109827 - - 25.00177579413463 - - -0.5650663608952697 - - 17.46140621490688 - - 27.310046422930935 - - -1.375728835319592 - - 17.844563233153266 - - 29.218828888120903 - - 0.18549094719062198 - - 17.649420163852724 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 30.63920624985674 - - 23.49920356586184 - - 16.327310545773663 - - 30.591279012248176 - - 23.76598800720545 - - 17.69386095753964 - - 29.932109121430354 - - 22.418678625968454 - - 15.804423855002973 - - 29.835971863330307 - - 22.95351683489912 - - 18.53767465062841 - - 29.12653622315932 - - 21.873997130836756 - - 18.013930549381705 - - 29.17639260242441 - - 21.605370722240156 - - 16.647064134312004 - - 29.96509158090494 - - 22.21539055123703 - - 14.74266300333128 - - 28.627719967642896 - - 20.766358388209582 - - 16.240607996442776 - - 28.541253888263725 - - 21.24227702764716 - - 18.668582092147247 - - 29.799268029667275 - - 23.160942419614777 - - 19.598720080487517 - - 31.135829373232898 - - 24.608318433023552 - - 18.09845253950361 - - 31.21386737199762 - - 24.13826552744047 - - 15.671129144709322 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 20.75208813995208 - - 5.982844411593925 - - 18.267711218697546 - - 21.44597408417865 - - 4.936263391382127 - - 18.871135986736448 - - 19.439830197111608 - - 5.792251383129724 - - 17.84041228925996 - - 20.82812731157349 - - 3.6995447720815156 - - 19.048371045164387 - - 19.51431449284036 - - 3.509833069144704 - - 18.623077088358336 - - 18.820737531283505 - - 4.556064365597417 - - 18.017007228263918 - - 18.899687446764087 - - 6.606742090321037 - - 17.377162154613877 - - 17.80187474903762 - - 4.408506857166056 - - 17.684839557523986 - - 19.03476081486552 - - 2.549778086805755 - - 18.75915443249386 - - 21.367410759973232 - - 2.8871523675005215 - - 19.5167532524335 - - 22.46275745064903 - - 5.086439804556005 - - 19.207808855704226 - - 21.22705914437208 - - 6.946245716104198 - - 18.143332367730604 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 16.333250817765528 - - 11.057808663792336 - - 18.336663495540787 - - 16.92638340462091 - - 10.156741488771857 - - 19.218254481574803 - - 16.933992518862862 - - 11.327341460257841 - - 17.10890437163344 - - 18.11933829429769 - - 9.524356983336812 - - 18.87246796916965 - - 18.718890382118285 - - 9.79225502074008 - - 17.64294060544818 - - 18.126952134094935 - - 10.695683942842274 - - 16.761807870934962 - - 16.470160012207455 - - 12.022641276720124 - - 16.422487908324992 - - 18.593138617560072 - - 10.905481787893413 - - 15.808474258986134 - - 19.645492551078576 - - 9.302752921444032 - - 17.374630229161927 - - 18.579614876309055 - - 8.824964842104677 - - 19.55743953767433 - - 16.456645624288218 - - 9.943563264500316 - - 20.168860316044665 - - 15.400401816941324 - - 11.537349709684964 - - 18.59942337471794 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 10.317289208722489 - - 24.747460120111352 - - 18.27556505053705 - - 9.343099053770969 - - 23.751594513371018 - - 18.263893655898574 - - 10.146348725985781 - - 25.89664213238584 - - 17.506740597119972 - - 8.197686315902304 - - 23.90461286353389 - - 17.484640880400775 - - 8.025670626772184 - - 25.055622073159526 - - 16.717465538875455 - - 9.00143483734194 - - 26.050992640380784 - - 16.72701760018355 - - 10.900268246136848 - - 26.671990054961366 - - 17.520558925405368 - - 8.869280783409527 - - 26.943374687220974 - - 16.130042276295168 - - 7.137511011533403 - - 25.174290175228066 - - 16.111425340398185 - - 7.441658542294359 - - 23.130963932401848 - - 17.47573662766695 - - 9.473633381534354 - - 22.862216051467318 - - 18.865322563485137 - - 11.198986764279821 - - 24.634621540540397 - - 18.891265060789067 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 13.295105216884066 - - 4.424663057010446 - - 16.854236375409016 - - 13.052824719700713 - - 4.475711951135663 - - 18.22523059758457 - - 12.651364264620799 - - 5.317769233630656 - - 16.00048586746915 - - 12.167961209048123 - - 5.419885460277646 - - 18.743084627046024 - - 11.525934383039091 - - 6.315029624718193 - - 17.888983882316673 - - 11.766251431442798 - - 6.262465693029773 - - 16.516958244099072 - - 12.84412806986879 - - 5.281431823436533 - - 14.93687329791654 - - 11.266476297046236 - - 6.9555610512631905 - - 15.853607968408106 - - 10.838029893841773 - - 7.047143776313554 - - 18.290220253469634 - - 11.979995261853265 - - 5.458965725592942 - - 19.807665053497274 - - 13.557153548481146 - - 3.785871577657158 - - 18.888195665807313 - - 13.99246073174194 - - 3.7013302976735316 - - 16.454618267326993 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 19.781049065036896 - - 27.743854450982717 - - 19.710533265044575 - - 19.200934602007976 - - 26.541053750518447 - - 19.313458119898343 - - 20.756019190405052 - - 28.34180000705271 - - 18.91503005778434 - - 19.59449089937817 - - 25.9363351923542 - - 18.120961264602116 - - 20.568161373300967 - - 26.536069141232076 - - 17.323932656979576 - - 21.150541255665708 - - 27.73819978221027 - - 17.72228576319643 - - 21.201977282690194 - - 29.278442720185463 - - 19.220925134508867 - - 21.907783243622415 - - 28.202762332901383 - - 17.10506930441084 - - 20.874964649118112 - - 26.066467807785322 - - 16.398978236300955 - - 19.143918629660433 - - 25.002281218051102 - - 17.813198772288484 - - 18.44002422132626 - - 26.080175131988838 - - 19.928564843692385 - - 19.465173999159344 - - 28.21977621527998 - - 20.62864602727193 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - -0.22888865865347813 - - 9.462676027838496 - - 19.276204274701886 - - 0.1457978910382503 - - 8.772238975800816 - - 20.42678571588682 - - 0.06442038910925657 - - 8.933738605589102 - - 18.021164039494163 - - 0.8127460122462883 - - 7.552791919533616 - - 20.32310869693995 - - 1.1038488599250609 - - 7.022527572922169 - - 19.06730279737566 - - 0.7313179717299048 - - 7.714391846860658 - - 17.91599303611133 - - -0.23170676915933203 - - 9.467379799264316 - - 17.128255436863267 - - 0.9590421943025011 - - 7.304222833263178 - - 16.941265890924914 - - 1.6226754759551842 - - 6.076776397931168 - - 18.98625959740249 - - 1.1036750969962412 - - 7.017188214522662 - - 21.216797058534855 - - -0.08717389792136992 - - 9.180543700295141 - - 21.40082954837495 - - -0.7588505048831178 - - 10.401714923591122 - - 19.35717353395664 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 8.15039735826108 - - 14.080788961231798 - - 19.740019361146132 - - 8.295269782687944 - - 13.396884865536023 - - 20.945099505649726 - - 8.238818108746354 - - 13.39007468538781 - - 18.533360110912454 - - 8.527559414653322 - - 12.022599335192234 - - 20.944292258191773 - - 8.613452208951058 - - 11.331293670560378 - - 19.73694454169496 - - 8.471072682031027 - - 12.015784925657812 - - 18.531055079677984 - - 8.120623013871453 - - 13.92051314206042 - - 17.59825853710675 - - 8.539879581756354 - - 11.479959768536485 - - 17.593853414948782 - - 8.795082108540178 - - 10.264896284813723 - - 19.735704377202207 - - 8.640211605602659 - - 11.492063557659462 - - 21.880257653629606 - - 8.220885645772913 - - 13.932608559923302 - - 21.881698199622253 - - 7.956053918656162 - - 15.14447964295274 - - 19.74156475503442 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 13.013971285323192 - - 16.835302094187004 - - 19.005009969532896 - - 13.142428061934543 - - 15.62675664269287 - - 19.686073648171714 - - 11.935492226023912 - - 17.674771430194944 - - 19.275389589143725 - - 12.193627554135583 - - 15.257611384651701 - - 20.637981846763118 - - 11.116039475284149 - - 16.09885159496533 - - 20.910173770712355 - - 10.985942164223278 - - 17.306898068831117 - - 20.22704273699365 - - 11.839303528960869 - - 18.61549286572811 - - 18.750469685359025 - - 10.148591837889693 - - 17.958956651049142 - - 20.4364561682008 - - 10.378619711054185 - - 15.812210600658943 - - 21.647902294266984 - - 12.29368881401911 - - 14.319003144801336 - - 21.166368320076558 - - 13.982916906480906 - - 14.978056835389395 - - 19.479877013133336 - - 13.75796285015289 - - 17.127741874143034 - - 18.276885561412122 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 22.81066039108305 - - 17.47167450754523 - - 20.669337015114973 - - 21.592268395105297 - - 17.351186494476078 - - 21.334118610068963 - - 22.862341702739325 - - 18.079140908415305 - - 19.416642080190666 - - 20.4257222564504 - - 17.83860944482516 - - 20.74742548965445 - - 20.478050472560497 - - 18.44864178533556 - - 19.495190725752504 - - 21.69658432890674 - - 18.56701594671121 - - 18.828758132423676 - - 23.80931162695476 - - 18.177513937022024 - - 18.903494245763035 - - 21.737201479671832 - - 19.03840258488679 - - 17.855960705803756 - - 19.572756719465577 - - 18.825900720386294 - - 19.038777251705426 - - 19.479889756374742 - - 17.744603224854593 - - 21.263907494406382 - - 21.553561112577768 - - 16.884609398507322 - - 22.309084019660656 - - 23.71745498232871 - - 17.10612870912622 - - 21.131191392257296 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 4.749523099410379 - - 30.60139701044487 - - 20.314716647855164 - - 5.891374789866028 - - 30.311519528808134 - - 21.05840794724564 - - 4.046400863484052 - - 29.573242540250064 - - 19.690658563290942 - - 6.3299857660946 - - 28.99407926559152 - - 21.179202848077324 - - 5.624893895431397 - - 27.96525315203194 - - 20.55684291638427 - - 4.483866039291128 - - 28.255343778367116 - - 19.810604038665588 - - 3.156805495079235 - - 29.798171892303102 - - 19.118140566018102 - - 3.937700796370763 - - 27.457395333236917 - - 19.325658933354553 - - 5.965642575797764 - - 26.9427238476964 - - 20.649138644149254 - - 7.216788112171239 - - 28.769541089939025 - - 21.756571149504335 - - 6.433624918362082 - - 31.10941013869607 - - 21.54737150713765 - - 4.401640957023735 - - 31.62194981636138 - - 20.233110199065155 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 24.694083671295452 - - 23.624507728472377 - - 19.769138749214918 - - 24.653206561919422 - - 24.353278894840237 - - 20.955794822028547 - - 24.445932424192286 - - 24.259431219357907 - - 18.55413911735142 - - 24.365272916868452 - - 25.716711377713036 - - 20.928119483288967 - - 24.119532660093903 - - 26.352289824853237 - - 19.712133724192398 - - 24.157870053856378 - - 25.622805419181507 - - 18.52497225719825 - - 24.483380837718155 - - 23.69439155645119 - - 17.632684948241383 - - 23.965029659557704 - - 26.115294522354702 - - 17.581331957927663 - - 23.894667454487635 - - 27.41018820348094 - - 19.69020195352632 - - 24.333419687295052 - - 26.282090766947128 - - 21.849814371427183 - - 24.85151607840441 - - 23.861072440908725 - - 21.89821518072378 - - 24.931496247913113 - - 22.569796678961858 - - 19.789863074146737 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 19.40204456138902 - - 13.089314848122708 - - 19.70924745289018 - - 18.841511862159336 - - 13.107904901628157 - - 20.9845468252536 - - 20.773594067066455 - - 13.27452225273193 - - 19.54961926960328 - - 19.651774988042895 - - 13.310638899892906 - - 22.100339116166374 - - 21.024384096268623 - - 13.493381068528041 - - 21.940592008484515 - - 21.5850570909936 - - 13.477359726839016 - - 20.664520414806855 - - 21.20905312796272 - - 13.254338864541843 - - 18.559812203944468 - - 22.64993185285782 - - 13.621352830468101 - - 20.540030750669718 - - 21.653524591905033 - - 13.652127358113512 - - 22.806141657582266 - - 19.216026278041006 - - 13.325222443591544 - - 23.090339283242105 - - 17.77752252154697 - - 12.958413288279937 - - 21.10835688423674 - - 18.775066110821268 - - 12.917827707889355 - - 18.84512951510741 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 6.549579994894826 - - 21.67633602035049 - - 21.253724244501957 - - 6.989401302916658 - - 20.35554464363615 - - 21.19896712302379 - - 5.210002314273787 - - 21.973836820743283 - - 21.012983933184596 - - 6.090329019705652 - - 19.332014854081677 - - 20.904559848766343 - - 4.7495833449752345 - - 19.629625757289883 - - 20.666235723722945 - - 4.309824955222933 - - 20.951312053445285 - - 20.718461156147264 - - 4.867941384646175 - - 22.998736308172102 - - 21.061205828564567 - - 3.2698347256541647 - - 21.18285207026891 - - 20.531379644939175 - - 4.051629891144989 - - 18.835768957652846 - - 20.43635162093092 - - 6.432375165913486 - - 18.306648089642852 - - 20.861929096090364 - - 8.028294538898626 - - 20.124521576644536 - - 21.391526664081354 - - 7.244602415804462 - - 22.468411329822402 - - 21.49614983246161 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 1.317769232726366 - - 28.09276730624235 - - 23.22438973062109 - - 0.2744016840023539 - - 28.975818187943098 - - 22.955064119616942 - - 1.7836990511226203 - - 27.241233559869634 - - 22.225024597517454 - - -0.30266979879517775 - - 29.008523710971463 - - 21.68678233066597 - - 0.16536397854834728 - - 28.158243160705798 - - 20.686313954504136 - - 1.2075649005738969 - - 27.272861838515546 - - 20.956289425686556 - - 2.5974943295752277 - - 26.55988706317698 - - 22.43300100559416 - - 1.5695432930692317 - - 26.61130763393935 - - 20.180720198216086 - - -0.28306519602950353 - - 28.182253078011463 - - 19.702175172614904 - - -1.112943316375929 - - 29.694199143009158 - - 21.478225438110655 - - -0.08313701017922215 - - 29.640646373280205 - - 23.729608860899138 - - 1.7745626279901003 - - 28.077793230857875 - - 24.204351565719534 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 26.127691598812042 - - 2.5200209435832757 - - 22.194650535726268 - - 26.76658405962225 - - 3.1829015906378597 - - 23.24027793467197 - - 26.166124521118306 - - 3.0516657959462354 - - 20.90748013225028 - - 27.4446518254545 - - 4.376554039870249 - - 22.99936762135982 - - 27.48513344385373 - - 4.906975616934495 - - 21.710964038723198 - - 26.84381937827013 - - 4.245236742656164 - - 20.66512106095459 - - 25.67478804293919 - - 2.5337238827580015 - - 20.09503036157085 - - 26.87317306316443 - - 4.6577554383411 - - 19.665542832040703 - - 28.010105352769653 - - 5.834080709378238 - - 21.523680870301504 - - 27.94037473371641 - - 4.891001894347225 - - 23.81164353019467 - - 26.74125161216896 - - 2.7668090201283615 - - 24.23826352072841 - - 25.613867294860558 - - 1.586716590058705 - - 22.37941307386795 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 3.8245148588275644 - - 15.155532893997178 - - 22.64473209417044 - - 4.077411559818867 - - 13.913173925355501 - - 23.222242646289516 - - 3.7485078116476167 - - 15.275738257128577 - - 21.258837226007994 - - 4.253405343751638 - - 12.790823687402312 - - 22.414792353662893 - - 4.174787262359114 - - 12.91085338760671 - - 21.028292562483166 - - 3.9242973335862756 - - 14.154234224513758 - - 20.45016758240521 - - 3.5465212877214456 - - 16.239379164890217 - - 20.811235131347853 - - 3.8654193145657683 - - 14.248132580375817 - - 19.374106977017338 - - 4.312654240063738 - - 12.040341523428223 - - 20.401079573504855 - - 4.449982648131433 - - 11.826435800063589 - - 22.863683559838975 - - 4.130680323785216 - - 13.81935728599997 - - 24.298398242413576 - - 3.6739529820273287 - - 16.023241134689346 - - 23.27212603535014 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 28.419010309211636 - - 16.45732097115223 - - 23.14198830664449 - - 27.964790902891238 - - 15.186205792786932 - - 22.79719573074287 - - 29.519266504315176 - - 17.004495031216315 - - 22.48550689847298 - - 28.609535825616135 - - 14.462341458998681 - - 21.795724685445435 - - 29.70878311973576 - - 15.011033755900483 - - 21.137270623049474 - - 30.16497681672599 - - 16.281759925622566 - - 21.48384228231241 - - 29.867987935351433 - - 17.993626549298426 - - 22.74963223534204 - - 31.0193923432568 - - 16.70696539892642 - - 20.974564006395788 - - 30.210401568555085 - - 14.449103861851441 - - 20.360863469077962 - - 28.256610086844997 - - 13.475304998238533 - - 21.528531128509606 - - 27.1071164829542 - - 14.764201239578357 - - 23.30321622100042 - - 27.909739450178424 - - 17.024203656370805 - - 23.909123783909525 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 15.394715294496365 - - 23.892428317994778 - - 21.8395555304635 - - 14.365949392632388 - - 23.702984075595506 - - 22.759709096086834 - - 15.203721123377333 - - 24.73476668988532 - - 20.746432353513658 - - 13.146685302323869 - - 24.356060872680448 - - 22.587937099321373 - - 12.956680005017823 - - 25.200785374643402 - - 21.49555067255953 - - 13.984977321831966 - - 25.388484264022683 - - 20.573410033745123 - - 16.00462567081189 - - 24.88592492583074 - - 20.035480116223333 - - 13.837090337964625 - - 26.042247110846972 - - 19.724343764870948 - - 12.010108201601833 - - 25.706843434087045 - - 21.361009213484813 - - 12.3481117586255 - - 24.20845139438615 - - 23.302557058493942 - - 14.51667690344597 - - 23.05339750483865 - - 23.611218634894172 - - 16.34520129826482 - - 23.396667728037496 - - 21.981003122260535 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 13.595370686980445 - - 10.507143012564775 - - 22.818430576413874 - - 13.121847423936593 - - 9.626325706613944 - - 23.78841386443455 - - 13.40001992998885 - - 10.225214624168313 - - 21.46813969971191 - - 12.452297710124066 - - 8.464277469472833 - - 23.408984135801987 - - 12.254716982223288 - - 8.183669700126755 - - 22.057987933609233 - - 12.73064297209993 - - 9.063538320291055 - - 21.087268990760922 - - 13.762829807672045 - - 10.9121630629595 - - 20.715663238152178 - - 12.579417086718014 - - 8.844961991491576 - - 20.038677044909686 - - 11.736322450706334 - - 7.281233878820897 - - 21.762909908542376 - - 12.085018806527067 - - 7.780551798455913 - - 24.162519378899574 - - 13.268773464749732 - - 9.84848904059573 - - 24.83665342754437 - - 14.102206224908127 - - 11.415530351904051 - - 23.113658973356596 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 8.835564390295653 - - 6.157931923014905 - - 21.909894819786384 - - 8.131524111178406 - - 6.891461821509425 - - 22.862361175906486 - - 8.72223154876951 - - 4.76974422611023 - - 21.877932790131176 - - 7.313524010516067 - - 6.237769997728893 - - 23.782243058823127 - - 7.198292258819968 - - 4.849047623669222 - - 23.74845824298014 - - 7.904598300354402 - - 4.114734733347855 - - 22.79720330480937 - - 9.264569129267107 - - 4.201214402181289 - - 21.13470080872366 - - 7.81711675410737 - - 3.0368163863579123 - - 22.772124127913273 - - 6.564621822213902 - - 4.3410788899307935 - - 24.463037759951956 - - 6.767247572621188 - - 6.807762498549076 - - 24.521756785020774 - - 8.215426061553408 - - 7.969552440951837 - - 22.883123379478008 - - 9.458885554302997 - - 6.666654305440675 - - 21.187480886324913 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 14.489312743406863 - - -0.20463449007344958 - - 22.86094421555347 - - 15.030713205133235 - - 1.0697681100057614 - - 23.01493947229663 - - 13.171771214358678 - - -0.35353786604152737 - - 22.43334266035956 - - 14.255721369090242 - - 2.1952919681459067 - - 22.740706829266276 - - 12.938312113094593 - - 2.046032677183045 - - 22.310446304848014 - - 12.395624903184027 - - 0.7711020638414474 - - 22.158748823134147 - - 12.753740905739955 - - -1.3431922500996376 - - 22.308503358477896 - - 11.372574599435753 - - 0.6549602088087162 - - 21.82698219682099 - - 12.335941603626296 - - 2.9192673119323143 - - 22.098773480051744 - - 14.67648747082867 - - 3.1846136124814866 - - 22.860658988488552 - - 16.055368714687653 - - 1.1847115868571936 - - 23.341465235403735 - - 15.095414329474341 - - -1.0776534460715153 - - 23.06016368491888 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 25.932779558505285 - - 10.816269272417198 - - 21.659385353700742 - - 25.97425408008734 - - 9.81392000138607 - - 22.626084267048885 - - 25.522010976369078 - - 12.10129245207776 - - 22.007114538283297 - - 25.606132180869814 - - 10.096015733545963 - - 23.940438902941736 - - 25.19761560945573 - - 11.382411708315141 - - 24.288676192117048 - - 25.153608216630186 - - 12.384808731314575 - - 23.32108476994909 - - 25.495420935124553 - - 12.880468005741198 - - 21.257495690879175 - - 24.83450708968378 - - 13.382687418116067 - - 23.590533366222942 - - 24.91049412336632 - - 11.601569589112925 - - 25.30834546117935 - - 25.63828247309469 - - 9.317321570760626 - - 24.690633349987962 - - 26.298640408917226 - - 8.817913859294793 - - 22.356834820088782 - - 26.23204560683708 - - 10.600399751717362 - - 20.642994774499815 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 20.01037695980274 - - 5.696536900364351 - - 23.18567845056414 - - 19.731947925752376 - - 5.768655425998935 - - 24.548839181147166 - - 19.29913154102289 - - 6.489397491396941 - - 22.287662290577195 - - 18.74340879639233 - - 6.633792521532095 - - 25.01461599394049 - - 18.03366834695514 - - 7.428843540199872 - - 24.116210754228224 - - 18.31032361588803 - - 7.354982195728532 - - 22.752034824753224 - - 19.519579534050226 - - 6.437188995680441 - - 21.23010522571079 - - 17.758181473176773 - - 7.970234497297721 - - 22.05432886341913 - - 17.26539061492502 - - 8.099479322888063 - - 24.4770310920764 - - 18.527429589338624 - - 6.689253703577205 - - 26.07313712657399 - - 20.288295620449272 - - 5.157094157860918 - - 25.24613398825709 - - 20.787119520091164 - - 5.03565722932506 - - 22.826347568808504 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 14.870545302121545 - - 14.690781862382813 - - 23.84515984731368 - - 16.2434235449345 - - 14.50133781018318 - - 23.987452741171968 - - 14.342435771631603 - - 15.979977690027624 - - 23.84748964011074 - - 17.088585511937485 - - 15.600282803303934 - - 24.131122485049566 - - 16.560264620192928 - - 16.89018457238878 - - 24.13086939920386 - - 15.18641715143996 - - 17.079840975907608 - - 23.991072461469873 - - 13.277211061136164 - - 16.1267606943866 - - 23.731295596008394 - - 14.775844078271843 - - 18.08064853617182 - - 23.993054312214024 - - 17.215612641221774 - - 17.743402389532612 - - 24.243708535153697 - - 18.154485264358044 - - 15.452649730712919 - - 24.241811881525575 - - 16.653515500948863 - - 13.500579473594785 - - 23.979881118839987 - - 14.216945433082952 - - 13.838595887585761 - - 23.719478095688277 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 27.820879502153122 - - 22.8384888593753 - - 23.159233406877416 - - 27.605710244601365 - - 22.247936055803613 - - 24.402567860250212 - - 28.69456199765621 - - 23.917491238133152 - - 23.0436317207653 - - 28.26437113767335 - - 22.735092536294292 - - 25.530160089352968 - - 29.140416772507205 - - 23.81304497167517 - - 25.413832124789757 - - 29.35389910993095 - - 24.40568457719634 - - 24.17037999777793 - - 28.865590104229458 - - 24.3719603266286 - - 22.077217097289598 - - 30.032007883267838 - - 25.24366718962257 - - 24.080138202472547 - - 29.650844685073434 - - 24.192413160349794 - - 26.28889638886128 - - 28.096782717657536 - - 22.276353048689668 - - 26.495386566825456 - - 26.931703385037423 - - 21.406698448685233 - - 24.490795020093927 - - 27.32054252599156 - - 22.451111425321614 - - 22.282414576667215 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 19.874713166953395 - - 28.19981423562214 - - 24.383329374615005 - - 19.978770020346694 - - 29.52922417302547 - - 24.786779961107 - - 20.831366968521813 - - 27.655242274909746 - - 23.529405566716363 - - 21.039355898091255 - - 30.31409566388014 - - 24.337609411703166 - - 21.997798205000585 - - 29.768305518428086 - - 23.485276692603296 - - 21.892482342064994 - - 28.438949950266522 - - 23.079454139008245 - - 20.75324409617516 - - 26.621532905626275 - - 23.221036069561602 - - 22.63490767546233 - - 28.015710098974985 - - 22.41623275708991 - - 22.820408465031438 - - 30.377405679331186 - - 23.135271411443412 - - 21.119580115395546 - - 31.346353521238036 - - 24.650974597558086 - - 19.238964571645177 - - 29.949872777977788 - - 25.45423231096189 - - 19.059586200703407 - - 27.58735086451824 - - 24.743421411583103 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 2.1108432946665494 - - 2.350059730176364 - - 23.023625291884937 - - 3.06687194708749 - - 2.4240346844384395 - - 24.034302247216214 - - 1.3440468232129084 - - 3.4696739212543197 - - 22.708318741606202 - - 3.2572251275717767 - - 3.6171416720222815 - - 24.729198805372537 - - 2.491683341232679 - - 4.737943112803286 - - 24.411835439014045 - - 1.5333300624232988 - - 4.663430291391022 - - 23.402391812537097 - - 0.6059456168411805 - - 3.4133278545225663 - - 21.91978737252818 - - 0.9375227899002943 - - 5.5324289121812384 - - 23.157350918198034 - - 2.638062248763978 - - 5.663815290773117 - - 24.951769016643148 - - 3.9995140355532204 - - 3.674005706672824 - - 25.514032295659533 - - 3.6658191186323927 - - 1.5561899774230816 - - 24.274838814721832 - - 1.973458691592273 - - 1.4283084689048846 - - 22.475255243174885 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 11.383051033383422 - - 19.78571807835346 - - 24.79584929300722 - - 10.54954646445817 - - 20.117578772230317 - - 25.861714950388993 - - 11.410420336886522 - - 20.589186986111017 - - 23.658035766264714 - - 9.744129424657539 - - 21.252877395978178 - - 25.79086108250318 - - 9.77356194228761 - - 22.058030767225638 - - 24.653393993630175 - - 10.605537933175745 - - 21.72477849686531 - - 23.585813328069097 - - 12.061867702491913 - - 20.334248485702002 - - 22.83318870107105 - - 10.626975234093395 - - 22.348193777698995 - - 22.702023885623948 - - 9.147650422384809 - - 22.93853308282398 - - 24.597315617771578 - - 9.096937028556496 - - 21.510000624912212 - - 26.618641002769806 - - 10.532887706713963 - - 19.49663504665763 - - 26.74709699536502 - - 12.018181625973478 - - 18.912756539573394 - - 24.8571429248676 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 4.005821052156678 - - 17.717771434540747 - - 26.369601956704777 - - 5.230453539508024 - - 17.053932742650225 - - 26.392502791150378 - - 3.760289111645779 - - 18.69107794078727 - - 25.403517334514405 - - 6.2093113680364 - - 17.36211564165579 - - 25.449380054721754 - - 5.962488291935284 - - 18.33416382113511 - - 24.481304485115047 - - 4.738233910999583 - - 19.00027757050716 - - 24.459780399729446 - - 2.8073136255670237 - - 19.202109339683943 - - 25.382669735653458 - - 4.547189619408288 - - 19.75626259589649 - - 23.70999465109017 - - 6.722362632822109 - - 18.57471217680172 - - 23.749920989671022 - - 7.160124934433474 - - 16.84655098611659 - - 25.46772662767461 - - 5.418441774182997 - - 16.294410153652713 - - 27.139186024208346 - - 3.2415448863144847 - - 17.468247818284073 - - 27.092671479223497 -- cell: - __ase_objtype__: cell - array: - __ndarray__: - - - 3 - - 3 - - float64 - - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - - 0.0 - - 0.0 - - 0.0 - - 30.0 - numbers: - __ndarray__: - - - 12 - - int64 - - - 6 - - 6 - - 6 - - 6 - - 6 - - 6 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - pbc: - __ndarray__: - - - 3 - - bool - - - true - - true - - true - positions: - __ndarray__: - - - 12 - - 3 - - float64 - - - 27.859837109592092 - - 9.74146071501483 - - 26.84687914745861 - - 28.27158594348215 - - 10.990900047063777 - - 26.388299558439606 - - 28.362352316875512 - - 8.583788281961336 - - 26.256791026630477 - - 29.18621351035836 - - 11.083374607107878 - - 25.34067142148731 - - 29.690803587202296 - - 9.92494613347731 - - 24.75211222444167 - - 29.27703625319272 - - 8.67476793216655 - - 25.209081217775385 - - 28.046706878125406 - - 7.614039567496272 - - 26.616937355076587 - - 29.666752498875457 - - 7.775580045298096 - - 24.75107211220532 - - 30.399658889725316 - - 9.996148654993762 - - 23.93807985175941 - - 29.50543267779862 - - 12.053759559813004 - - 24.98480330613092 - - 27.88549862956248 - - 11.889260194255039 - - 26.85050689511048 - - 27.161132359507988 - - 9.670197049062132 - - 27.66903654678345 -pbc: -- true -- true -- true -positions: -- - 14.99447630641371 - - 14.995615879632336 - - 0.0 -- - 9.709459251408582 - - 4.5210910973673935 - - -3.126828294768345e-17 -- - 1.7344440496549078 - - 15.218687875314952 - - 0.00011248697532099228 -- - 12.73005198068912 - - 24.801179619793487 - - 0.0007428117668992224 -- - 23.82586075208845 - - 20.965448891519483 - - 0.005126026725165409 -- - 21.87783498959024 - - 8.633748826337927 - - 0.023524196339821585 -- - 25.193509721789948 - - 28.33604873287048 - - 0.015645245134845703 -- - 16.289649082877155 - - 0.8068906222973807 - - 0.04119253639318692 -- - 7.827932223294568 - - 10.996609632467703 - - 0.013530404797280963 -- - 22.498690101327472 - - 14.336598217452352 - - 0.018209215270435473 -- - 2.170859296108355 - - 7.214778633230433 - - 0.010748752744983858 -- - 4.627875019474465 - - 21.479212363278226 - - 0.09903847727870237 -- - 6.582111230471296 - - 28.570739747201927 - - 0.0609333018317504 -- - 17.112324068211322 - - 21.008139276030885 - - 0.015298037541800294 -- - 13.478005395946566 - - 8.055333084839763 - - 0.05476751441673226 -- - 27.7977877028281 - - 3.814955491184125 - - 0.13882212170936498 -- - 22.3023179258114 - - 1.444359512749881 - - 0.4328672288693839 -- - 9.384904654256419 - - 18.84392413753628 - - 0.06606009679997249 -- - 29.085361542614045 - - 23.293003315107082 - - 0.9331869666570085 -- - 26.576817000337925 - - 11.025955339641294 - - 2.398484338860854 -- - 17.240370170173378 - - 4.384954327828286 - - 3.308995578284021 -- - 10.986089869465888 - - 0.014022032462726508 - - 3.566240355934606 -- - 1.8213544225392395 - - 26.578553258780303 - - 3.6363740250315932 -- - 1.2581715995866003 - - 2.964147924093717 - - 3.5500335133910634 -- - 16.18188364701247 - - 10.73417113216987 - - 4.248258711173336 -- - 26.73261483186756 - - 17.161996362719343 - - 4.524125466078466 -- - 18.207672753072178 - - 25.837695775264027 - - 4.415797590586741 -- - 4.212101135527822 - - 12.347345034900053 - - 4.7133133368992475 -- - 11.555189568966355 - - 12.093556173954804 - - 5.239968555188071 -- - 20.935133000643386 - - 16.324284028973555 - - 5.230467891978732 -- - 11.986551193771122 - - 21.002396980231804 - - 4.897141605393219 -- - 7.097590963649606 - - 17.946946525552967 - - 5.5952434558017865 -- - 6.723865948402319 - - 24.399101043573722 - - 5.28458997380496 -- - 26.45586545276487 - - 6.337301933641224 - - 5.8465407945289 -- - 24.492067133598194 - - 24.68209413109756 - - 5.241793021499993 -- - 29.803018114506617 - - 22.749237452547185 - - 6.365786037920136 -- - 6.167074406230672 - - 5.712015746151 - - 5.747714776889535 -- - 4.397787237403971 - - 29.83154467242366 - - 7.53695775331237 -- - 21.96545767626676 - - 3.1812818887372565 - - 7.7114622128638715 -- - 20.62578697737552 - - 20.5966838787142 - - 7.785859458520234 -- - 2.1795846025696366 - - 9.431956795770308 - - 8.622772732456843 -- - 9.995767344566717 - - 6.636484214801642 - - 8.653709238069888 -- - 10.423184213380885 - - 26.124990856552106 - - 8.096216895164353 -- - 27.146511154951195 - - 12.508298526717436 - - 8.726956432852674 -- - 15.724229917100649 - - 29.805051366023285 - - 8.894323833056262 -- - 26.17694545233511 - - 0.7512101875312719 - - 8.939609517443136 -- - 14.181395075492324 - - 18.46977863830948 - - 9.801714153939992 -- - 21.835000395554722 - - 10.526382954893391 - - 9.080855458861427 -- - 3.4216866845873835 - - 15.848549318536667 - - 9.83596326202702 -- - 16.032231937386932 - - 12.583600177412263 - - 10.30700397458169 -- - 19.689178020065004 - - 25.56854124853497 - - 9.966733373013623 -- - 26.952512069490698 - - 19.781306527821883 - - 10.401520168890137 -- - 3.374247328803292 - - 22.917161494717053 - - 10.784610225805501 -- - 9.042915885244373 - - 13.823844535535995 - - 9.984104892063797 -- - 2.3517703599958177 - - 4.329067034219377 - - 10.791962926700311 -- - 16.911895325346528 - - 6.647688846553557 - - 11.125111999294884 -- - 10.915172010605572 - - 2.2621469959276093 - - 12.499665613862483 -- - 24.771470576738345 - - 22.10223310663974 - - 12.900024939809095 -- - 29.186293813128643 - - 28.91369781472664 - - 12.840565247539296 -- - 14.344732885998003 - - 24.259350485941003 - - 12.777938968356734 -- - 6.9828160478332055 - - 19.91658245903563 - - 12.494775961460833 -- - 22.81354991163767 - - 5.064347362360788 - - 13.644637028173934 -- - 4.389757519107218 - - 10.047388718137547 - - 14.051203797340726 -- - 5.42838526677607 - - 27.721292426913823 - - 14.075119827822263 -- - 22.805050153397794 - - 15.454781982307606 - - 14.349524124430765 -- - 19.081051409097928 - - 1.8716246487358685 - - 13.688529925915825 -- - 11.923628637058947 - - 10.390106969491134 - - 14.771308160374781 -- - 27.275502584648137 - - 6.422473285788676 - - 14.200650193195377 -- - 20.475985520968006 - - 21.965017159502175 - - 14.920676002538805 -- - 28.93021151727579 - - 14.322641820649173 - - 15.474081673028833 -- - 16.914628675012857 - - 17.15805376778251 - - 14.60292798628972 -- - 13.842371419061143 - - 29.187289049080633 - - 15.795703520365969 -- - 9.998353286885466 - - 17.684282118134128 - - 15.256043937108755 -- - 23.87902453769089 - - 10.554715694920445 - - 16.895811375447444 -- - 1.781602150079333 - - 19.092475007277486 - - 16.362507649222422 -- - 5.995501745836908 - - 5.81913496068434 - - 15.676495428145918 -- - 13.639947933948317 - - 21.722688321867686 - - 16.977744697413993 -- - 26.912651591131695 - - 0.9955105208534384 - - 17.25897475208965 -- - 29.883344237506623 - - 22.68631676413765 - - 17.170657747890967 -- - 20.133414901825407 - - 4.746237619022306 - - 18.444894464073702 -- - 17.52629560169194 - - 10.425472957636508 - - 17.99004766249672 -- - 9.171789966938364 - - 24.901289965645546 - - 17.496132755115987 -- - 12.410149503335578 - - 5.369444884384346 - - 17.371525000039746 -- - 20.174975453203814 - - 27.139714558176188 - - 18.51756057965907 -- - 0.437928593336856 - - 8.24292482618725 - - 19.171760050501437 -- - 8.382454037563965 - - 12.706200247551859 - - 19.73846911436812 -- - 12.06475873760502 - - 16.466843976203894 - - 19.957155437409078 -- - 21.644329947870443 - - 17.959647743695683 - - 20.08205322044092 -- - 5.187495460603268 - - 29.283451342257894 - - 20.43532454141418 -- - 24.406287738241296 - - 24.988219905325376 - - 19.740688141650164 -- - 20.21309669845821 - - 13.291879323353253 - - 20.824823045031085 -- - 5.649734652701942 - - 20.65308934384448 - - 20.959460015273198 -- - 0.7412321781440607 - - 28.125122670850747 - - 21.955569415318312 -- - 26.805919816666496 - - 3.713721252180878 - - 21.952921565161276 -- - 4.000181359147248 - - 14.03334796606943 - - 21.836530939972025 -- - 29.06419885795495 - - 15.733991741612481 - - 22.140053478567154 -- - 14.175571984190722 - - 24.54615083209438 - - 21.66726710674697 -- - 12.925553635724821 - - 9.345192813339983 - - 22.438215256076685 -- - 8.017391867645314 - - 5.503479210550535 - - 22.82947744673105 -- - 13.713680088524795 - - 0.920653435798035 - - 22.586229989458648 -- - 25.564696771794694 - - 11.099192459250215 - - 22.973849643793884 -- - 19.021697365154182 - - 6.562250177450378 - - 23.65086660438254 -- - 15.715303711356139 - - 15.790403933211255 - - 23.988552207029464 -- - 28.480200661499147 - - 23.326089244059325 - - 24.286570229280144 -- - 20.93590525664752 - - 28.984176401131826 - - 23.933891748755723 -- - 2.3008773874361603 - - 3.5437886535412746 - - 23.718064013845147 -- - 10.577943391128958 - - 20.921519142976408 - - 24.724403765258497 -- - 4.984308743041049 - - 18.026336558888023 - - 25.425834909031067 -- - 28.774862049740506 - - 9.833203025934797 - - 25.79918666168623 - diff --git a/intro_examples/ct-workflow/mywf_test.png b/intro_examples/ct-workflow/mywf_test.png deleted file mode 100644 index 6a137ce210497c816231e12797d748b9b76d0ba6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99794 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%0Dpg(*4%%erimO3Vt@4^QB`2o+`57Rg^ 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�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 baYY5HW|J%_`DRK5mAc$kyEzH&P8I(@g0Ydx diff --git a/intro_examples/foreach_exascale/lib/myfunctions.py b/intro_examples/foreach_exascale/lib/myfunctions.py deleted file mode 100644 index 58ba0a5..0000000 --- a/intro_examples/foreach_exascale/lib/myfunctions.py +++ /dev/null @@ -1,49 +0,0 @@ -from parsl import python_app -import time -import yaml - - -#@python_app -def data_generator(list_length): - # Generate and initialize list - data = [0 for i in range(list_length)] - for i in range(list_length): - data[i]= i +1 - with open('data.yaml', 'w') as outfile: - yaml.dump(data, outfile, default_flow_style=False) - return data - - -#@python_app -def plus_minus(x, y): - """ x - a list, y - a number """ - return_list_x = [] - return_list_y = [] - for i in x: - return_list_x.append(i + y ) - return_list_y.append(i - y ) - time.sleep(1) - return return_list_x, return_list_y - -#@python_app -def sum_square(x, y, z): - """ x, y - lists of same length, z - a number """ - return_list = [] - for i, j in zip(x, y): - return_list.append(z*(i**2+j**2)) - time.sleep(1) - return return_list - -#@python_app -def average_list(x): - """ x, y - lists of same length, z - a number """ - total_sum = 0 - for i in x: - total_sum = total_sum + i - return [total_sum / len(x)] - -if __name__ == '__main__': - data = [1, 2, 3, 4] - datax, datay = plus_minus(data, 1) - results = sum_square(datax, datay, 2) - print(results) diff --git a/intro_examples/foreach_exascale/wconfig.yaml b/intro_examples/foreach_exascale/wconfig.yaml deleted file mode 100644 index 6aead9b..0000000 --- a/intro_examples/foreach_exascale/wconfig.yaml +++ /dev/null @@ -1,81 +0,0 @@ -workflow_name: foreach_sample.active -nodes: -- name: plus_minus - id: 1 - tasks: - - func: - - myfunctions - - plus_minus - - FOREACH - - data - - '1' - inputs: - - data - - constant_y - outputs: - - datax - - datay - kwargs: {} -- name: sum_square - id: 2 - tasks: - - func: - - myfunctions - - sum_square - - FOREACH - - datax - - '1' - - zip_inputs: - - datay - inputs: - - datax - - datay - - constant_z - outputs: - - results - kwargs: {} -- name: plus_minus_1 - id: 3 - tasks: - - func: - - myfunctions - - plus_minus - - FOREACH - - data - - '1' - inputs: - - data - - constant_y - outputs: - - datax_id3 - - datay_id3 - kwargs: {} -- name: sum_square_1 - id: 4 - tasks: - - func: - - myfunctions - - sum_square - - FOREACH - - datax - - '1' - - zip_inputs: - - datay - inputs: - - datax_id3 - - datay_id3 - - constant_z - outputs: - - results - kwargs: {} -- name: data_generator - id: 5 - tasks: - - func: - - myfunctions - - data_generator - inputs: - - list_length - outputs: - - data - kwargs: {} diff --git a/wfGenes_exe/auxiliary.py b/wfGenes_exe/auxiliary.py index 27cd80f..8471115 100644 --- a/wfGenes_exe/auxiliary.py +++ b/wfGenes_exe/auxiliary.py @@ -1,6 +1,6 @@ import numpy as np - +import time def printrun(*args): result = [] @@ -42,3 +42,13 @@ def flat_list(lazy_list): for item in list: flat_list.append(item) return flat_list + + + +def weighted_sleep(sleep_time): + time.sleep(sleep_time) + dummy_output = 'Null' + return dummy_output + +def barriers(*inputs): + pass diff --git a/wfGenes_exe/dask_wfgenes.py b/wfGenes_exe/dask_wfgenes.py index e286ca8..c689329 100644 --- a/wfGenes_exe/dask_wfgenes.py +++ b/wfGenes_exe/dask_wfgenes.py @@ -15,6 +15,7 @@ import json import yaml from builtin_wfgenes import merge_dic from initial_wfgenes import BasewfGenes +import shutil class DaskwfGenes(): """Generate Python wrapper for wConfig nodes orignized to run parallel with DASK delayed decorators""" @@ -30,7 +31,10 @@ class DaskwfGenes(): self.indent=" " lazy_str = 'lazy_' dask_path = os.path.join(wfgenes_init.workflow_path, 'Dask') - if not os.path.exists(dask_path): + if os.path.exists(dask_path): + shutil.rmtree(dask_path) + os.makedirs(dask_path) + else: os.makedirs(dask_path) wrapper_path = os.path.join(dask_path, wfgenes_init.interface_dict['workflow_name'] + '_dask.py') @@ -70,7 +74,7 @@ class DaskwfGenes(): # Cache variables inside loop j loop wfgenes_init.func_builtin = 'NORMALFUNCTION' wfgenes_init.func_file = wfgenes_init.func[i][j][0] - wfgenes_init.func_module = wfgenes_init.func[i][j][1] + func_module = wfgenes_init.func[i][j][1] self.split_array = 'NULL' # The varaiable which FOREACH iterates over self.zip_inputs = [] if len(wfgenes_init.func[i][j]) > 2: @@ -96,6 +100,7 @@ class DaskwfGenes(): for k in range(self.len_inputs): # Cache variables inside loop k loop self.input_k = wfgenes_init.inputs[i][j][k] + inputs = wfgenes_init.inputs_py[i][j][k] wfgenes_init.inputs_nodup_k= wfgenes_init.inputs_nodup[i][j][k] wfgenes_init.inputs_global_nodup_k= wfgenes_init.inputs_global_nodup[i][j][k] wfgenes_init.inputs_no_locdep_k= wfgenes_init.inputs_no_locdep[i][j][k][0] @@ -105,7 +110,7 @@ class DaskwfGenes(): # Load wfgenes_init.inputs self.wfg_dask += '\n'+ self.indent +'#Read Input #' + str(k +1) +' from subroutine #' + str(j + 1) + ' in routine #' + str(i) + '\n' self.wfg_dask += self.indent + "yaml_stream = open('" + self.input_k + ".yaml', 'r')\n" - self.wfg_dask += self.indent + self.input_k + " = yaml.load(yaml_stream, Loader=yaml.Loader)\n\n" + self.wfg_dask += self.indent + inputs + " = yaml.load(yaml_stream, Loader=yaml.Loader)\n\n" self.wfg_dask += '\n' + self.indent + 'end_memtime = time.time()' for i in range(wfgenes_init.routine_number): @@ -142,7 +147,7 @@ class DaskwfGenes(): func_done = [] step_simulation = 1 wfgenes_init.wfgenes_scheduler(func_done) - self.suffix_log = [] + #self.suffix_log = [] previously_computed = [] # Keep track of launched task to avoid repeated computation while wfgenes_init.func_waiting == True: self.wfg_dask += '\n\n'+self.indent+'#### Start Step #'+ str(step_simulation) @@ -153,10 +158,10 @@ class DaskwfGenes(): wfgenes_init.func_builtin = '' wfgenes_init.func_file = wfgenes_init.func[i][j][0] wfgenes_init.func_nodup_0 = wfgenes_init.func_nodup[i][j][0] - wfgenes_init.func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] + func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] self.len_inputs = len(wfgenes_init.inputs[i][j]) self.len_outputs=len(wfgenes_init.outputs[i][j]) - wfgenes_init.func_module = wfgenes_init.func[i][j][1] + func_module = wfgenes_init.func[i][j][1] if wfgenes_init.foreach_output[i][j][0] != 'null': output_number = len(wfgenes_init.outputs[wfgenes_init.foreach_output[i][j][1]][wfgenes_init.foreach_output[i][j][2]]) @@ -220,18 +225,18 @@ class DaskwfGenes(): self.wfg_dask += self.indent # Call functions if func_module != 'MERGE' and func_builtin != 'FOREACH': - self.wfg_dask += '\n'+self.indent+lazy_str+wfgenes_init.func_module+ func_suffix+' = dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+wfgenes_init.func_module + ')(' + self.wfg_dask += '\n'+self.indent+lazy_str+func_module+ func_suffix+' = dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+func_module + ')(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' elif func_module == 'MERGE' and func_builtin != 'FOREACH': - self.wfg_dask += '\n'+self.indent +lazy_str+ wfgenes_init.outputs_py[i][j][0] + ' = dask.delayed('+wfgenes_init.func_module+')(' + self.wfg_dask += '\n'+self.indent +lazy_str+ wfgenes_init.outputs_py[i][j][0] + ' = dask.delayed('+func_module+')(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' elif func_builtin == 'FOREACH': # foreach implementation part 1/2 - self.wfg_dask += '\n'+self.indent+lazy_str+wfgenes_init.func_module+func_suffix+'= []' + self.wfg_dask += '\n'+self.indent+lazy_str+func_module+func_suffix+'= []' for k in range(len(wfgenes_init.foreach_output[i][j])): if wfgenes_init.foreach_output[i][j][0] != 'null' and len(wfgenes_init.func[wfgenes_init.foreach_output[i][j][1]][wfgenes_init.foreach_output[i][j][2]]) == 2: # Check if foreach computation depends on a lazy object @@ -240,26 +245,26 @@ class DaskwfGenes(): previously_computed.append(compute_now) # Append computed lazy task- Avoid extra computation self.wfg_dask += '\n'+self.indent+lazy_str + compute_now+ '='+ lazy_str + compute_now+ '.compute()' # Compute lazy objects self.wfg_dask += '\n'+self.indent + 'for i in ' + foreach_len + ' :' - self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+wfgenes_init.func_module+func_suffix+ '_foreach= dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+wfgenes_init.func_module + ')(' + self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+func_module+func_suffix+ '_foreach= dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+func_module + ')(' # end of foreach implementation part 1/2 - self.write_arguments(lazy_str, wfgenes_init ,i , j) # write argument list + self.write_arguments(lazy_str, wfgenes_init, func_module, i , j) # write argument list if wfgenes_init.func_builtin == 'FOREACH': # foreach implementation Part 2/2 - self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+wfgenes_init.func_module+func_suffix+'.append('+lazy_str+wfgenes_init.func_module+func_suffix+'_foreach)' - self.wfg_dask += '\n'+self.indent+lazy_str + wfgenes_init.func_module+func_suffix+'= dask.compute( *'+ lazy_str + wfgenes_init.func_module+func_suffix +')' - previously_computed.append(wfgenes_init.func_module) + self.wfg_dask += '\n'+self.indent+self.indent+lazy_str+func_module+func_suffix+'.append('+lazy_str+func_module+func_suffix+'_foreach)' + self.wfg_dask += '\n'+self.indent+lazy_str + func_module+func_suffix+'= dask.compute( *'+ lazy_str + func_module+func_suffix +')' + previously_computed.append(func_module) if len(wfgenes_init.outputs[i][j]) > 1: - self.wfg_dask += '\n'+self.indent+lazy_str + wfgenes_init.func_module + func_suffix + '= flat_tuple( '+ lazy_str + wfgenes_init.func_module + func_suffix + ', ' + str(len(wfgenes_init.outputs[i][j])) +')' + self.wfg_dask += '\n'+self.indent+lazy_str + func_module + func_suffix + '= flat_tuple( '+ lazy_str + func_module + func_suffix + ', ' + str(len(wfgenes_init.outputs[i][j])) +')' elif len(wfgenes_init.outputs[i][j]) == 1: - self.wfg_dask += '\n'+self.indent+lazy_str + wfgenes_init.func_module + func_suffix + '= flat_list( '+ lazy_str + wfgenes_init.func_module + func_suffix + ')' + self.wfg_dask += '\n'+self.indent+lazy_str + func_module + func_suffix + '= flat_list( '+ lazy_str + func_module + func_suffix + ')' func_done.append([i ,j]) ## Append implemented module wfgenes_init.wfgenes_scheduler(func_done) if wfgenes_init.func_builtin != 'FOREACH': self.wfg_dask += "\n"+self.indent+"#task_graph = Prefered_task.visualize(filename = 'mywf_test.png')" if wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': - self.wfg_dask += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+ func_suffix+'.compute())' + self.wfg_dask += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+'.compute())' else: - self.wfg_dask += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs_py[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' + self.wfg_dask += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs_py[func_done[-1][0]][func_done[-1][1]][0]+'.compute())' self.wfg_dask += "\n"+ self.indent+"end_time = time.time()" self.wfg_dask += "\n"+ self.indent+"total_time = end_time - start_time" self.wfg_dask += "\n"+ self.indent+"total_memtime = end_memtime - start_time" @@ -271,23 +276,29 @@ class DaskwfGenes(): - def write_arguments(self, lazy_str, wfgenes_init, i, j): + def write_arguments(self, lazy_str, wfgenes_init, func_module, i, j): """ Writing argument list for a module call""" self.len_inputs = len(wfgenes_init.inputs[i][j]) + len_inputs = len(wfgenes_init.inputs[i][j]) + if len_inputs == 0 : + self.wfg_dask += ')' for k in range(self.len_inputs): # Writing arguments of each function # Cache variables inside loop k loop - inputs = wfgenes_init.inputs[i][j][k] + inputs = wfgenes_init.inputs_py[i][j][k] inputs_nodup_k= wfgenes_init.inputs_nodup[i][j][k] inputs_no_locdep_k= wfgenes_init.inputs_no_locdep[i][j][k][0] - input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() + if len(wfgenes_init.inputs_links[i][j][k]) == 3: + input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() + else: + input_gdependent = False argument_key = '' func_gloab = '' func_loc = '' func_loc_dep = '' func_gloab_dep = '' slice = '' # Slice only will be set for FOREACH method - if wfgenes_init.func_module == 'MERGE': + if func_module == 'MERGE': argument_key = wfgenes_init.inputs_locname[i][j][k]+'=' # This prefix is set only for merge function if len(wfgenes_init.func[i][j]) > 2: @@ -310,7 +321,7 @@ class DaskwfGenes(): if wfgenes_init.func_builtin == 'FOREACH' and inputs == self.split_array : # Rewrite the value if it is split arry func_gloab_dep = wfgenes_init.foreach_output[i][j][0] - + # Writing arguments - 4 different scenarios if inputs_no_locdep_k != 'inner_dependent' and input_gdependent == False : #1 No dependency at all @@ -355,7 +366,7 @@ class DaskwfGenes(): self.wfg_dask += argument_key+lazy_str + inputs self.wfg_dask += ', ' elif k == self.len_inputs - 1: - self.wfg_dask += argument_key+lazy_str + inputs + #self.wfg_dask += argument_key+lazy_str + inputs self.wfg_dask += ' )' diff --git a/wfGenes_exe/initial_wfgenes.py b/wfGenes_exe/initial_wfgenes.py index 48021c2..d3ba0a1 100644 --- a/wfGenes_exe/initial_wfgenes.py +++ b/wfGenes_exe/initial_wfgenes.py @@ -43,7 +43,8 @@ class BasewfGenes(): validate(self.interface_dict , schema=schema) for k, v in self.interface_dict.items(): - routine_interface = deepcopy(v) + if k == 'nodes': + routine_interface = deepcopy(v) self.routine_number = len(self.interface_dict['nodes']) self.subroutine_number = [0 for y in range(self.routine_number)] self.routine_name = [0 for y in range(self.routine_number)] diff --git a/wfGenes_exe/parsl_wfgenes.py b/wfGenes_exe/parsl_wfgenes.py index 90000cb..db1a660 100644 --- a/wfGenes_exe/parsl_wfgenes.py +++ b/wfGenes_exe/parsl_wfgenes.py @@ -245,7 +245,10 @@ class ParslwfGenes(): inputs = wfgenes_init.inputs_py[i][j][k] inputs_nodup_k= wfgenes_init.inputs_nodup[i][j][k] inputs_no_locdep_k= wfgenes_init.inputs_no_locdep[i][j][k][0] - input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() + if len(wfgenes_init.inputs_links[i][j][k]) == 3: + input_gdependent = wfgenes_init.inputs_links[i][j][k][0].isnumeric() + else: + input_gdependent = False argument_key = '' func_gloab = '' func_loc = '' diff --git a/wfGenes_exe/wgenerator.py b/wfGenes_exe/wgenerator.py index b66a248..e5f9589 100644 --- a/wfGenes_exe/wgenerator.py +++ b/wfGenes_exe/wgenerator.py @@ -132,7 +132,7 @@ def run_wfgenes(args): print('unexpected error:'+error.args[0]) else: - wfgenes_init.wconfig_checker('clean') + #wfgenes_init.wconfig_checker('clean') try: graphics = DotwfGenes(wfgenes_init) png = graphics.png_file -- GitLab From cbab33166555ba46904b813c256db8151622f217 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Tue, 20 Apr 2021 14:45:37 +0200 Subject: [PATCH 04/35] 1.Update with rgg_to_wconfig.py and 2.corrected schema and 3.updated auxuliary and .vscode folder --- .vscode/launch.json | 5 ++-- wfGenes_exe/auxiliary.py | 6 +++-- wfGenes_exe/rgg_to_wconfig.py | 47 +++++++++++++++++++++++++++++++++ wfGenes_exe/wconfig_schema.json | 2 +- 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 wfGenes_exe/rgg_to_wconfig.py diff --git a/.vscode/launch.json b/.vscode/launch.json index 7b28e11..7918e31 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -136,7 +136,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/rgg", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "Parsl"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "FireWorks"], "console": "integratedTerminal" }, @@ -146,7 +146,7 @@ "type": "python", "request": "launch", "cwd": "${workspaceRoot}/intro_examples/rgg", - "program": "/home/mehdi/work/gitlab/workflow_generator/wfGenes_exe/wconfig_generator.py", + "program": "/home/mehdi/work/gitlab/workflow_generator/wfGenes_exe/rgg_to_wconfig.py", "console": "integratedTerminal" }, @@ -155,7 +155,6 @@ "name": "Python: wfGenes_unittest", "type": "python", "request": "launch", - "program": "${workspaceRoot}/test/wfgenes_test.py", "cwd": "${workspaceRoot}/wfGenes_exe", "args": ["-v"], "console": "integratedTerminal" diff --git a/wfGenes_exe/auxiliary.py b/wfGenes_exe/auxiliary.py index 8471115..e901bb0 100644 --- a/wfGenes_exe/auxiliary.py +++ b/wfGenes_exe/auxiliary.py @@ -45,8 +45,10 @@ def flat_list(lazy_list): -def weighted_sleep(sleep_time): - time.sleep(sleep_time) +def weighted_sleep(argument_list): + for argument in argument_list: + if argument.isnumderic() == True: + time.sleep(int(argument)) dummy_output = 'Null' return dummy_output diff --git a/wfGenes_exe/rgg_to_wconfig.py b/wfGenes_exe/rgg_to_wconfig.py new file mode 100644 index 0000000..61b9c72 --- /dev/null +++ b/wfGenes_exe/rgg_to_wconfig.py @@ -0,0 +1,47 @@ +import os +import os.path +from copy import deepcopy +from collections import OrderedDict +import shutil +import argparse +import json +import yaml +from pathlib import Path +ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) +wconfig = {} +dag_file = 'rdag.yaml' +with open(dag_file) as input_stream: + random_dag = yaml.load(input_stream, Loader=yaml.Loader) +graph_edges = random_dag['graph']['edges'] +graph_nodes = random_dag['graph']['nodes'] +wconfig = {} +nodes_wconfig = [] + +for node_graph in graph_nodes: + node = {} + node['tasks']= [] + node['name'] = 'node_id'+ node_graph['id'] + node['id'] = int(node_graph['id']) + task = {} + for edge in graph_edges: + task['func'] = [] + task['inputs'] = [] + task['outputs'] = [] + task['func'].append('auxiliary') + task['func'].append('weighted_sleep') + task['inputs'].append(str(edge['weight'])) + for edge in graph_edges: + if edge['source'] == node_graph['id']: + task['outputs'].append('link_'+ edge['source']+'_to_'+ edge['target'] ) + elif edge['target'] == node_graph['id']: + task['inputs'].append('link_' + edge['source']+'_to_'+ edge['target']) + node['tasks'].append(task) + nodes_wconfig.append(node) + +workflow_name = str('node_') + str(len(graph_nodes))+ '_' + str(len(graph_edges)) +wconfig = {'workflow_name': workflow_name, 'nodes': nodes_wconfig } +noalias_dumper = yaml.dumper.SafeDumper +noalias_dumper.ignore_aliases = lambda self, data: True +with open('wconfig.yaml', 'w') as output_stream: + yaml.dump(wconfig, output_stream) + diff --git a/wfGenes_exe/wconfig_schema.json b/wfGenes_exe/wconfig_schema.json index e9cdc98..c13f731 100644 --- a/wfGenes_exe/wconfig_schema.json +++ b/wfGenes_exe/wconfig_schema.json @@ -87,7 +87,7 @@ "items": { "$ref": "#/Name" }, - "minItems": 1 + "minItems": 0 }, "kwargs": { "type": "object" -- GitLab From f91b83926e6fb9ffeaf675c02e72653e1ab778fa Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Tue, 20 Apr 2021 14:51:55 +0200 Subject: [PATCH 05/35] Add Rgg graph generation exampleto intro_example folder --- intro_examples/rgg/rdag.yaml | 19 ++++ intro_examples/rgg/wconfig.yaml | 46 ++++++++ .../wfGenes_output/node_4_4/DOT/node_4_4.dot | 61 ++++++++++ .../wfGenes_output/node_4_4/DOT/node_4_4.pdf | Bin 0 -> 7274 bytes .../wfGenes_output/node_4_4/DOT/node_4_4.png | Bin 0 -> 34703 bytes .../node_4_4/Dask/node_4_4_dask.py | 49 +++++++++ .../node_4_4/FireWorks/node_4_4.yaml | 58 ++++++++++ .../node_4_4/Parsl/node_4_4_parsl.py | 104 ++++++++++++++++++ 8 files changed, 337 insertions(+) create mode 100644 intro_examples/rgg/rdag.yaml create mode 100644 intro_examples/rgg/wconfig.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.png create mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py create mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py diff --git a/intro_examples/rgg/rdag.yaml b/intro_examples/rgg/rdag.yaml new file mode 100644 index 0000000..eb778e8 --- /dev/null +++ b/intro_examples/rgg/rdag.yaml @@ -0,0 +1,19 @@ +graph: + edges: + - source: '1' + target: '4' + weight: '1' + - source: '1' + target: '2' + weight: '1' + - source: '2' + target: '3' + weight: '1' + - source: '3' + target: '4' + weight: '1' + nodes: + - id: '1' + - id: '2' + - id: '3' + - id: '4' diff --git a/intro_examples/rgg/wconfig.yaml b/intro_examples/rgg/wconfig.yaml new file mode 100644 index 0000000..f33f1f0 --- /dev/null +++ b/intro_examples/rgg/wconfig.yaml @@ -0,0 +1,46 @@ +nodes: +- id: 1 + name: node_id1 + tasks: + - func: + - auxiliary + - weighted_sleep + inputs: + - '1' + outputs: + - link_1_to_4 + - link_1_to_2 +- id: 2 + name: node_id2 + tasks: + - func: + - auxiliary + - weighted_sleep + inputs: + - '1' + - link_1_to_2 + outputs: + - link_2_to_3 +- id: 3 + name: node_id3 + tasks: + - func: + - auxiliary + - weighted_sleep + inputs: + - '1' + - link_2_to_3 + outputs: + - link_3_to_4 +- id: 4 + name: node_id4 + tasks: + - func: + - auxiliary + - weighted_sleep + inputs: + - '1' + - link_1_to_4 + - link_3_to_4 + outputs: [] +workflow_name: node_4_4 diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot new file mode 100644 index 0000000..adc2d3e --- /dev/null +++ b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot @@ -0,0 +1,61 @@ +digraph { + graph[ + name=node_4_4 + ]; +0 [ +state=NONE +name="node_id1" +label="node_id1" + style=filled +color="" +fillcolor="none" + ]; +1 [ +state=NONE +name="node_id2" +label="node_id2" + style=filled +color="" +fillcolor="none" + ]; +2 [ +state=NONE +name="node_id3" +label="node_id3" + style=filled +color="" +fillcolor="none" + ]; +3 [ +state=NONE +name="node_id4" +label="node_id4" + style=filled +color="" +fillcolor="none" + ]; +1->0[ +label="1" + ]; +1->1[ +label="1" + ]; +0->1[ +label="link_1_to_2" + ]; +1->2[ +label="1" + ]; +1->2[ +label="link_2_to_3" + ]; +1->3[ +label="1" + ]; +0->3[ +label="link_1_to_4" + ]; +2->3[ +label="link_3_to_4" + ]; + } diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.pdf b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..220af3b165e74b1fb599ec9a55e602bd340263aa GIT binary patch literal 7274 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 literal 0 HcmV?d00001 diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.png b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f4ef02ad9194ebb318431941638a9c35880891 GIT binary patch literal 34703 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 literal 0 HcmV?d00001 diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py b/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py new file mode 100644 index 0000000..c96c056 --- /dev/null +++ b/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py @@ -0,0 +1,49 @@ +import yaml +import numpy as np +from auxiliary import flat_tuple +from auxiliary import flat_list +from auxiliary import MERGE +import dask +from dask.distributed import Client +from distributed.client import * +from dask_jobqueue import SLURMCluster +import time +from auxiliary import weighted_sleep + +if __name__ == '__main__': + + + start_time = time.time() + #cluster = SLURMCluster(cores=40, memory='150GB', walltime='01:50:00', queue='single', processes=4) + #client = Client(cluster) + #cluster.scale(1) + #print(cluster.job_script()) + dask.config.set(scheduler='threads') + end_memtime = time.time() + + #### Start Step #1 + # Call subroutine #1 from routine #0 + + lazy_weighted_sleep = dask.delayed(nout=2)(weighted_sleep)(1) + + #### Start Step #2 + # Call subroutine #1 from routine #1 + + lazy_weighted_sleep_id1 = dask.delayed(nout=1)(weighted_sleep)(1, lazy_weighted_sleep[1] ) + + #### Start Step #3 + # Call subroutine #1 from routine #2 + + lazy_weighted_sleep_id2 = dask.delayed(nout=1)(weighted_sleep)(1, lazy_weighted_sleep_id1) + + #### Start Step #4 + # Call subroutine #1 from routine #3 + + lazy_weighted_sleep_id3 = dask.delayed(nout=0)(weighted_sleep)(1, lazy_weighted_sleep[0],lazy_weighted_sleep_id2) + #task_graph = Prefered_task.visualize(filename = 'mywf_test.png') + print(lazy_weighted_sleep_id3.compute()) + end_time = time.time() + total_time = end_time - start_time + total_memtime = end_memtime - start_time + print(' The total time is' , round(total_time, 2), 'seconds') + print(' The total memory load time is' , round(total_memtime, 2), 'seconds') \ No newline at end of file diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml b/intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml new file mode 100644 index 0000000..50fd244 --- /dev/null +++ b/intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml @@ -0,0 +1,58 @@ +fws: +- fw_id: 0 + name: node_id1 + spec: + _tasks: + - _fw_name: PyTask + args: + - 1 + func: auxiliary.weighted_sleep + outputs: + - link_1_to_4 + - link_1_to_2 +- fw_id: 1 + name: node_id2 + spec: + _tasks: + - _fw_name: PyTask + args: + - 1 + func: auxiliary.weighted_sleep + inputs: + - link_1_to_2 + outputs: + - link_2_to_3 +- fw_id: 2 + name: node_id3 + spec: + _tasks: + - _fw_name: PyTask + args: + - 1 + func: auxiliary.weighted_sleep + inputs: + - link_2_to_3 + outputs: + - link_3_to_4 +- fw_id: 3 + name: node_id4 + spec: + _tasks: + - _fw_name: PyTask + args: + - 1 + func: auxiliary.weighted_sleep + inputs: + - link_1_to_4 + - link_3_to_4 +links: + '0': + - 1 + - 3 + '1': + - 2 + '2': + - 3 + '3': [] +metadata: {} +name: node_4_4_wfGenes diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py b/intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py new file mode 100644 index 0000000..8d8b34b --- /dev/null +++ b/intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py @@ -0,0 +1,104 @@ +import yaml +import numpy as np +from auxiliary import MERGE +from auxiliary import flat_tuple +from auxiliary import flat_list +import time +from parsl.addresses import address_by_hostname +from parsl.providers import LocalProvider +from parsl.channels import LocalChannel +from parsl.config import Config +from parsl.executors import HighThroughputExecutor +from parsl.monitoring.monitoring import MonitoringHub +import parsl + +from parsl.providers import SlurmProvider +from parsl.launchers import SrunLauncher + +from parsl.data_provider.files import File +from parsl.data_provider.file_noop import NoOpFileStaging +from auxiliary import weighted_sleep + +if __name__ == '__main__': + + + start_time = time.time() + + config_slurm = Config( + executors=[ + HighThroughputExecutor( + label="frontera_htex", + address=address_by_hostname(), + max_workers=56, + provider=SlurmProvider( + channel=LocalChannel(), + nodes_per_block=1, + init_blocks=1, + partition='single', + walltime = '00:30:00', + launcher=SrunLauncher(), + ), + ) + ], + + monitoring=MonitoringHub( + hub_address=address_by_hostname(), + monitoring_debug=False, + workflow_name = 'slab_1_slurm', + resource_monitoring_interval=1, + ), + strategy = None + ) + + config_local = Config( + executors=[ + HighThroughputExecutor( + label = "frontera_htex", + cores_per_worker = 2, + max_workers = 40, + storage_access=[NoOpFileStaging()], + provider = LocalProvider( + parallelism = 1, + ), + + ) + ], + + monitoring=MonitoringHub( + hub_address=address_by_hostname(), + workflow_name = 'slab_1_local', + monitoring_debug=False, + resource_monitoring_interval=1, + ), + strategy = None + ) + + parsl.load(config_local) + end_memtime = time.time() + + #### Start Step #1 + # Call subroutine #1 from routine #0 + + parsl_weighted_sleep = weighted_sleep(1) + + #### Start Step #2 + # Call subroutine #1 from routine #1 + + parsl_weighted_sleep_id1 = weighted_sleep(1, parsl_weighted_sleep.result()[1]) + + #### Start Step #3 + # Call subroutine #1 from routine #2 + + parsl_weighted_sleep_id2 = weighted_sleep(1, parsl_weighted_sleep_id1) + + #### Start Step #4 + # Call subroutine #1 from routine #3 + + parsl_weighted_sleep_id3 = weighted_sleep(1, parsl_weighted_sleep.result()[0], parsl_weighted_sleep_id2) + print(parsl_weighted_sleep_id3.compute()) + end_time = time.time() + total_time = end_time - start_time + total_memtime = end_memtime - start_time + print(' The total time is' , round(total_time, 2), 'seconds') + print(' The total memory load time is' , round(total_memtime, 2), 'seconds') + print('PARSL based workflow') \ No newline at end of file -- GitLab From 481b4b5eed73c9637d0392a6280d70dc19f3122f Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Tue, 20 Apr 2021 14:56:19 +0200 Subject: [PATCH 06/35] delete generated dot --- .vscode/launch.json | 2 +- .../wfGenes_output/node_4_4/DOT/node_4_4.dot | 61 ------------------ .../wfGenes_output/node_4_4/DOT/node_4_4.pdf | Bin 7274 -> 0 bytes .../wfGenes_output/node_4_4/DOT/node_4_4.png | Bin 34703 -> 0 bytes 4 files changed, 1 insertion(+), 62 deletions(-) delete mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot delete mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.pdf delete mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.png diff --git a/.vscode/launch.json b/.vscode/launch.json index 7918e31..5acc7fa 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -136,7 +136,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/rgg", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "FireWorks"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "Parsl"], "console": "integratedTerminal" }, diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot deleted file mode 100644 index adc2d3e..0000000 --- a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.dot +++ /dev/null @@ -1,61 +0,0 @@ -digraph { - graph[ - name=node_4_4 - ]; -0 [ -state=NONE -name="node_id1" -label="node_id1" - style=filled -color="" -fillcolor="none" - ]; -1 [ -state=NONE -name="node_id2" -label="node_id2" - style=filled -color="" -fillcolor="none" - ]; -2 [ -state=NONE -name="node_id3" -label="node_id3" - style=filled -color="" -fillcolor="none" - ]; -3 [ -state=NONE -name="node_id4" -label="node_id4" - style=filled -color="" -fillcolor="none" - ]; -1->0[ -label="1" - ]; -1->1[ -label="1" - ]; -0->1[ -label="link_1_to_2" - ]; -1->2[ -label="1" - ]; -1->2[ -label="link_2_to_3" - ]; -1->3[ -label="1" - ]; -0->3[ -label="link_1_to_4" - ]; -2->3[ -label="link_3_to_4" - ]; - } diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.pdf b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.pdf deleted file mode 100644 index 220af3b165e74b1fb599ec9a55e602bd340263aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7274 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 diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.png b/intro_examples/rgg/wfGenes_output/node_4_4/DOT/node_4_4.png deleted file mode 100644 index b4f4ef02ad9194ebb318431941638a9c35880891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34703 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 -- GitLab From 4ac15a3c630ae76189c2de702512793f333e3e53 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Thu, 22 Apr 2021 18:11:13 +0200 Subject: [PATCH 07/35] update 1.dask update with kwargs support 2. small corrections --- .gitignore | 3 +- .vscode/launch.json | 26 +++-- .../foreach_sample/lib/myfunctions.py | 2 +- .../foreach_sample/wconfig_simple.yaml | 2 +- .../FireWorks/foreach_sample.yaml | 66 +++++++++++++ wfGenes_exe/auxiliary.py | 22 +++-- wfGenes_exe/dask_wfgenes.py | 99 +++++++++---------- wfGenes_exe/fireworks_wfgenes.py | 36 +++---- wfGenes_exe/initial_wfgenes.py | 12 ++- wfGenes_exe/rgg_to_wconfig.py | 3 +- 10 files changed, 170 insertions(+), 101 deletions(-) create mode 100644 intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml diff --git a/.gitignore b/.gitignore index ba0430d..4fd3413 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -__pycache__/ \ No newline at end of file +__pycache__/ +.ip* \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 5acc7fa..4e763b3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -16,6 +16,16 @@ "console": "integratedTerminal" }, + { + "name": "Python: run_rgg", + "type": "python", + "request": "launch", + "program": "${workspaceRoot}/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py", + "cwd": "", + "args": [], + "console": "integratedTerminal" + }, + { @@ -43,8 +53,8 @@ "name": "Python: run_foreach", "type": "python", "request": "launch", - "program": "${workspaceRoot}/intro_examples/foreach_sample/output/foreach_sample/DASK/foreach_sample_dask.py", - "cwd": "${workspaceRoot}/intro_examples/foreach_sample/input", + "program": "${workspaceRoot}/intro_examples/foreach_sample/wfGenes_output/foreach_sample/Dask/foreach_sample_dask.py", + "cwd": "${workspaceRoot}/intro_examples/foreach_sample/inputs", "args": [], "console": "integratedTerminal" }, @@ -53,8 +63,8 @@ "name": "Python: run_simple_test", "type": "python", "request": "launch", - "program": "${workspaceRoot}/intro_examples/foreach_sample/output/simple_test/DASK/simple_test_dask.py", - "cwd": "${workspaceRoot}/intro_examples/foreach_sample/input", + "program": "${workspaceRoot}/intro_examples/foreach_sample/wfGenes_output/simple_test/Dask/simple_test_dask.py", + "cwd": "${workspaceRoot}/intro_examples/foreach_sample/inputs", "args": [], "console": "integratedTerminal" }, @@ -106,7 +116,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/parallel_path", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/parallel_path/iwconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/parallel_path/inputs/","--outputpath","output", "--wms", "all"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/parallel_path/iwconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/parallel_path/inputs/","--outputpath", "output", "--wms", "all"], "console": "integratedTerminal" }, @@ -116,7 +126,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/foreach_sample", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/foreach_sample/input/wconfig_simple.yaml", "--inputpath","${workspaceRoot}/intro_examples/foreach_sample/input/","--outputpath","output", "--wms", "all"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/foreach_sample/wconfig_simple.yaml", "--inputpath","${workspaceRoot}/intro_examples/foreach_sample/inputs/", "--wms", "FireWorks"], "console": "integratedTerminal" }, @@ -126,7 +136,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/multihith", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs_slab_version_2/", "--wms", "Parsl"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.yaml", "--inputpath","${workspaceRoot}/intro_examples/multihith/inputs/inputs_slab_version_2/", "--wms", "Dask"], "console": "integratedTerminal" }, @@ -136,7 +146,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/rgg", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "Parsl"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "Dask"], "console": "integratedTerminal" }, diff --git a/intro_examples/foreach_sample/lib/myfunctions.py b/intro_examples/foreach_sample/lib/myfunctions.py index 58ba0a5..fe94d75 100644 --- a/intro_examples/foreach_sample/lib/myfunctions.py +++ b/intro_examples/foreach_sample/lib/myfunctions.py @@ -1,4 +1,4 @@ -from parsl import python_app +#from parsl import python_app import time import yaml diff --git a/intro_examples/foreach_sample/wconfig_simple.yaml b/intro_examples/foreach_sample/wconfig_simple.yaml index ca1ce53..db52d12 100644 --- a/intro_examples/foreach_sample/wconfig_simple.yaml +++ b/intro_examples/foreach_sample/wconfig_simple.yaml @@ -1,4 +1,4 @@ -workflow_name: simple_test.genes +workflow_name: simple_test nodes: - name: plus_minus id: 1 diff --git a/intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml b/intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml new file mode 100644 index 0000000..3d699fa --- /dev/null +++ b/intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml @@ -0,0 +1,66 @@ +fws: +- fw_id: 0 + name: plus_minus + spec: + _tasks: + - _fw_name: ForeachTask + number of chunks: 7 + split: data + task: + _fw_name: PyTask + func: myfunctions.plus_minus + inputs: + - data + - constant_y + outputs: + - datax + - datay + constant_y: 1 +- fw_id: 1 + name: sum_square + spec: + _tasks: + - _fw_name: ForeachTask + number of chunks: 7 + split: datax + task: + _fw_name: PyTask + func: myfunctions.sum_square + inputs: + - datax + - datay + - constant_z + outputs: + - results + constant_z: 2 +- fw_id: 2 + name: average + spec: + _tasks: + - _fw_name: PyTask + func: myfunctions.average_list + inputs: + - results + outputs: + - midpoint +- fw_id: 3 + name: data_generator + spec: + _tasks: + - _fw_name: PyTask + func: myfunctions.data_generator + inputs: + - list_length + outputs: + - data + list_length: 20 +links: + '0': + - 1 + '1': + - 2 + '2': [] + '3': + - 0 +metadata: {} +name: foreach_sample_wfGenes diff --git a/wfGenes_exe/auxiliary.py b/wfGenes_exe/auxiliary.py index e901bb0..0293a08 100644 --- a/wfGenes_exe/auxiliary.py +++ b/wfGenes_exe/auxiliary.py @@ -45,12 +45,16 @@ def flat_list(lazy_list): -def weighted_sleep(argument_list): - for argument in argument_list: - if argument.isnumderic() == True: - time.sleep(int(argument)) - dummy_output = 'Null' - return dummy_output - -def barriers(*inputs): - pass +def weighted_sleep(*args, **kwargs): + if 'len_output' in kwargs: + output_number = kwargs['len_output'] + else: + output_number = 1 + if 'sleep_time' in kwargs: + sleep_time = kwargs['sleep_time'] + else: + sleep_time = 1 + print('Sleeping for', sleep_time, "seconds.") + time.sleep(int(sleep_time)) + output_list = ['Null' for y in range(int(output_number))] + return output_list diff --git a/wfGenes_exe/dask_wfgenes.py b/wfGenes_exe/dask_wfgenes.py index c689329..bc0ac2d 100644 --- a/wfGenes_exe/dask_wfgenes.py +++ b/wfGenes_exe/dask_wfgenes.py @@ -52,13 +52,13 @@ class DaskwfGenes(): for i in range(wfgenes_init.routine_number): for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop - func_file = wfgenes_init.func[i][j][0] + wfgenes_init.func_file = wfgenes_init.func[i][j][0] func_module = wfgenes_init.func[i][j][1] func_nodup_0 = wfgenes_init.func_nodup[i][j][0] func_global_nodup_0 = wfgenes_init.func_global_nodup[i][j][0] - if func_file != 'BUILTIN' and func_nodup_0 != 'duplicate' and func_global_nodup_0 != 'global_duplicate': - self.wfg_dask += 'from ' + str(func_file) + ' import ' + str(func_module) + '\n' + if wfgenes_init.func_file != 'BUILTIN' and func_nodup_0 != 'duplicate' and func_global_nodup_0 != 'global_duplicate': + self.wfg_dask += 'from ' + str(wfgenes_init.func_file) + ' import ' + str(func_module) + '\n' self.wfg_dask += "\nif __name__ == '__main__':\n\n" @@ -116,8 +116,8 @@ class DaskwfGenes(): for i in range(wfgenes_init.routine_number): for j in range(wfgenes_init.subroutine_number[i]): # Cache variables inside loop j loop - func_builtin = 'NORMALFUNCTION' - func_file = wfgenes_init.func[i][j][0] + wfgenes_init.func_builtin = 'NORMALFUNCTION' + wfgenes_init.func_file = wfgenes_init.func[i][j][0] func_module = wfgenes_init.func[i][j][1] func_nodup_0 = wfgenes_init.func_nodup[i][j][0] func_global_nodup_0= wfgenes_init.func_global_nodup[i][j][0] @@ -128,7 +128,7 @@ class DaskwfGenes(): if len(wfgenes_init.func[i][j]) > 2: if wfgenes_init.func[i][j][2] == 'FOREACH': - func_builtin = 'FOREACH' + wfgenes_init.func_builtin = 'FOREACH' self.split_array = wfgenes_init.func[i][j][3] self.chunk_size = wfgenes_init.func[i][j][4] self.index_split = '' @@ -180,7 +180,7 @@ class DaskwfGenes(): if len(wfgenes_init.func[i][j]) > 2: if wfgenes_init.func[i][j][2] == 'FOREACH': - func_builtin = 'FOREACH' + wfgenes_init.func_builtin = 'FOREACH' self.split_array = wfgenes_init.func[i][j][3] self.chunk_size = wfgenes_init.func[i][j][4] self.index_split = '' @@ -224,17 +224,17 @@ class DaskwfGenes(): self.wfg_dask += '\n'+self.indent+'# Call subroutine #' + str(j + 1) + ' from routine #' +str(i)+ '\n' self.wfg_dask += self.indent # Call functions - if func_module != 'MERGE' and func_builtin != 'FOREACH': + if func_module != 'MERGE' and wfgenes_init.func_builtin != 'FOREACH': self.wfg_dask += '\n'+self.indent+lazy_str+func_module+ func_suffix+' = dask.delayed(nout='+str(len(wfgenes_init.outputs_py[i][j]))+')('+func_module + ')(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' - elif func_module == 'MERGE' and func_builtin != 'FOREACH': + elif func_module == 'MERGE' and wfgenes_init.func_builtin != 'FOREACH': self.wfg_dask += '\n'+self.indent +lazy_str+ wfgenes_init.outputs_py[i][j][0] + ' = dask.delayed('+func_module+')(' func_done.append([i ,j]) # Append implemented module func_waiting = False # Temporarily Set func_waiting to False input_slice = '' - elif func_builtin == 'FOREACH': + elif wfgenes_init.func_builtin == 'FOREACH': # foreach implementation part 1/2 self.wfg_dask += '\n'+self.indent+lazy_str+func_module+func_suffix+'= []' for k in range(len(wfgenes_init.foreach_output[i][j])): @@ -280,8 +280,16 @@ class DaskwfGenes(): """ Writing argument list for a module call""" self.len_inputs = len(wfgenes_init.inputs[i][j]) len_inputs = len(wfgenes_init.inputs[i][j]) - if len_inputs == 0 : - self.wfg_dask += ')' + if bool(wfgenes_init.kwargs[i][j]) and wfgenes_init.kwargs[i][j] != 'null': + kwargs = wfgenes_init.kwargs[i][j] + last_key = list(kwargs)[-1] + kwargs_string = '' + for key, value in kwargs.items(): + kwargs_string += key + " = '" + str(value) + "'" + if key != last_key: + kwargs_string += ', ' + else: + kwargs_string += ')' for k in range(self.len_inputs): # Writing arguments of each function # Cache variables inside loop k loop @@ -321,57 +329,40 @@ class DaskwfGenes(): if wfgenes_init.func_builtin == 'FOREACH' and inputs == self.split_array : # Rewrite the value if it is split arry func_gloab_dep = wfgenes_init.foreach_output[i][j][0] - + # Writing arguments - 4 different scenarios if inputs_no_locdep_k != 'inner_dependent' and input_gdependent == False : #1 No dependency at all - if k != self.len_inputs - 1: - self.wfg_dask += argument_key+ inputs + slice + ', ' - elif k == self.len_inputs - 1: - self.wfg_dask += argument_key+ inputs + slice + ')' + self.wfg_dask += argument_key+ inputs + slice + ', ' + elif inputs_no_locdep_k== 'inner_dependent' and func_loc != 'MERGE' : - #2 Inner-dependent for users function - if k != self.len_inputs - 1: - self.wfg_dask += argument_key+lazy_str + func_loc_dep - if output_number > 1: - self.wfg_dask += '[' + input_index +'] ' + slice + ', ' - else: - self.wfg_dask += slice+ ', ' - - elif k == self.len_inputs - 1: - self.wfg_dask += argument_key+lazy_str + func_loc_dep - if output_number > 1: - self.wfg_dask += '[' + input_index + ']'+ slice+ ')' - else: - self.wfg_dask += slice+ ' )' + #2 Inner-dependent for users function + self.wfg_dask += argument_key+lazy_str + func_loc_dep + if output_number > 1: + self.wfg_dask += '[' + input_index +'] ' + slice + ', ' + else: + self.wfg_dask += slice+ ', ' + elif input_gdependent == True and func_gloab != 'MERGE' : #3 Gloab dependent for users function - if k != self.len_inputs - 1: - self.wfg_dask += argument_key+lazy_str + func_gloab_dep - if output_number != 1: - self.wfg_dask += '[' + input_index + ']' + slice + ',' - else: - self.wfg_dask += slice +', ' - - elif k == self.len_inputs - 1: - self.wfg_dask += argument_key+lazy_str + func_gloab_dep - if output_number > 1: - self.wfg_dask += '[' + input_index + '] ' + slice+ ')' - else: - self.wfg_dask += slice + ')' - + self.wfg_dask += argument_key+lazy_str + func_gloab_dep + if output_number != 1: + self.wfg_dask += '[' + input_index + '] ' + slice +', ' + else: + self.wfg_dask += slice + ', ' + elif (func_loc == 'MERGE' or func_gloab == 'MERGE') and (input_gdependent == True or inputs_no_locdep_k== 'inner_dependent') : #4 Dependent to Merge function - if k != self.len_inputs - 1 : - self.wfg_dask += argument_key+lazy_str + inputs - self.wfg_dask += ', ' - elif k == self.len_inputs - 1: - #self.wfg_dask += argument_key+lazy_str + inputs - self.wfg_dask += ' )' - - + self.wfg_dask += argument_key+lazy_str + inputs + ', ' + + - + if not bool(wfgenes_init.kwargs[i][j]) or wfgenes_init.kwargs[i][j] == 'null' : + if len_inputs !=0: + self.wfg_dask = self.wfg_dask[:-2] + self.wfg_dask += ')' + elif bool(wfgenes_init.kwargs[i][j]) and wfgenes_init.kwargs[i][j] != 'null' : + self.wfg_dask += kwargs_string diff --git a/wfGenes_exe/fireworks_wfgenes.py b/wfGenes_exe/fireworks_wfgenes.py index edc5e30..5b8d58d 100644 --- a/wfGenes_exe/fireworks_wfgenes.py +++ b/wfGenes_exe/fireworks_wfgenes.py @@ -37,6 +37,7 @@ class FireworkwfGenes(): fw['spec']['_tasks'] = [] output_subroutine_iter = iter(wfgenes_init.outputs_locname[i]) input_subroutine_iter = iter(wfgenes_init.inputs_locname[i]) + kwargs_subroutine_iter = iter(wfgenes_init.kwargs[i]) subroutine_iter = iter(wfgenes_init.func[i]) # iterate over the tasklist for j in range(wfgenes_init.subroutine_number[i]): @@ -65,27 +66,20 @@ class FireworkwfGenes(): '.' + str(subroutine[1]) inputs = next(input_subroutine_iter) - if len(inputs) > 0 and inputs[0] != 'NULL': - for input in inputs: - if input.isnumeric() == False: - if len(subroutine) == 2: # Normal task - if 'inputs' not in task: - task['inputs'] = [] - task['inputs'].append(input) - elif len(subroutine) > 2 : # Data-flow Task. E.g foreach - if 'inputs' not in task['task']: - task['task']['inputs'] = [] - task['task']['inputs'].append(input) - elif input.isnumeric() == True: - if len(subroutine) == 2: - if 'args' not in task: - task['args'] = [] - task['args'].append(int(input)) - elif len(subroutine) > 2 : - if 'inputs' not in task['task']: - task['task']['args'] = [] - task['task']['args'].append(input) - + if inputs: + if len(subroutine) == 2: # Normal task + task['inputs'] = [] + task['inputs'] = inputs + elif len(subroutine) > 2 : # Data-flow Task. E.g foreach + task['task']['inputs'] = [] + task['task']['inputs'] = inputs + + kwargs = next(kwargs_subroutine_iter) + if bool(kwargs): # Check if the dictionary is not empty + task['kwargs'] = {} + task['kwargs'] = kwargs + + output = next(output_subroutine_iter) if len(output) > 0 and output[0] != 'NULL': if subroutine[0] != 'BUILTIN' and len(subroutine) <= 2 : diff --git a/wfGenes_exe/initial_wfgenes.py b/wfGenes_exe/initial_wfgenes.py index d3ba0a1..f137cfc 100644 --- a/wfGenes_exe/initial_wfgenes.py +++ b/wfGenes_exe/initial_wfgenes.py @@ -95,11 +95,11 @@ class BasewfGenes(): for y in range(self.routine_number)] self.foreach_output = [[['null' for k in range(3)] for x in range(self.subroutine_number[y])] for y in range(self.routine_number)] - kwargs = [['null' for x in range(self.subroutine_number[y])] + self.kwargs = [['null' for x in range(self.subroutine_number[y])] for y in range(self.routine_number)] - kwargs_nodup = [['null' for x in range(self.subroutine_number[y])] + self.kwargs_nodup = [['null' for x in range(self.subroutine_number[y])] for y in range(self.routine_number)] - + self.firstround_scheduling = True @@ -188,9 +188,11 @@ class BasewfGenes(): for i in range(self.routine_number): for j in range(len(routine_interface[i]['tasks'])): if 'kwargs' in routine_interface[i]['tasks'][j]: - kwargs[i][j] = deepcopy(routine_interface[i]['tasks'][j]['kwargs']) - kwargs_nodup[i][j] = deepcopy( + self.kwargs[i][j] = deepcopy(routine_interface[i]['tasks'][j]['kwargs']) + self.kwargs_nodup[i][j] = deepcopy( routine_interface[i]['tasks'][j]['kwargs']) + + for i in range(self.routine_number): diff --git a/wfGenes_exe/rgg_to_wconfig.py b/wfGenes_exe/rgg_to_wconfig.py index 61b9c72..d882a91 100644 --- a/wfGenes_exe/rgg_to_wconfig.py +++ b/wfGenes_exe/rgg_to_wconfig.py @@ -29,12 +29,13 @@ for node_graph in graph_nodes: task['outputs'] = [] task['func'].append('auxiliary') task['func'].append('weighted_sleep') - task['inputs'].append(str(edge['weight'])) for edge in graph_edges: if edge['source'] == node_graph['id']: task['outputs'].append('link_'+ edge['source']+'_to_'+ edge['target'] ) elif edge['target'] == node_graph['id']: task['inputs'].append('link_' + edge['source']+'_to_'+ edge['target']) + task['kwargs'] = {} + task['kwargs'] = { 'len_output' : len(task['outputs']), 'sleep_time': 1 } node['tasks'].append(task) nodes_wconfig.append(node) -- GitLab From ba811c1c451b8d460253c9f88182cc658b637403 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Thu, 22 Apr 2021 18:14:20 +0200 Subject: [PATCH 08/35] update rgg in intro_examples with kwargs --- intro_examples/rgg/wconfig.yaml | 18 ++- .../node_4_4/Dask/node_4_4_dask.py | 49 --------- .../node_4_4/FireWorks/node_4_4.yaml | 58 ---------- .../node_4_4/Parsl/node_4_4_parsl.py | 104 ------------------ 4 files changed, 13 insertions(+), 216 deletions(-) delete mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py delete mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml delete mode 100644 intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py diff --git a/intro_examples/rgg/wconfig.yaml b/intro_examples/rgg/wconfig.yaml index f33f1f0..9da28c6 100644 --- a/intro_examples/rgg/wconfig.yaml +++ b/intro_examples/rgg/wconfig.yaml @@ -5,8 +5,10 @@ nodes: - func: - auxiliary - weighted_sleep - inputs: - - '1' + inputs: [] + kwargs: + len_output: 2 + sleep_time: 1 outputs: - link_1_to_4 - link_1_to_2 @@ -17,8 +19,10 @@ nodes: - auxiliary - weighted_sleep inputs: - - '1' - link_1_to_2 + kwargs: + len_output: 1 + sleep_time: 1 outputs: - link_2_to_3 - id: 3 @@ -28,8 +32,10 @@ nodes: - auxiliary - weighted_sleep inputs: - - '1' - link_2_to_3 + kwargs: + len_output: 1 + sleep_time: 1 outputs: - link_3_to_4 - id: 4 @@ -39,8 +45,10 @@ nodes: - auxiliary - weighted_sleep inputs: - - '1' - link_1_to_4 - link_3_to_4 + kwargs: + len_output: 0 + sleep_time: 1 outputs: [] workflow_name: node_4_4 diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py b/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py deleted file mode 100644 index c96c056..0000000 --- a/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py +++ /dev/null @@ -1,49 +0,0 @@ -import yaml -import numpy as np -from auxiliary import flat_tuple -from auxiliary import flat_list -from auxiliary import MERGE -import dask -from dask.distributed import Client -from distributed.client import * -from dask_jobqueue import SLURMCluster -import time -from auxiliary import weighted_sleep - -if __name__ == '__main__': - - - start_time = time.time() - #cluster = SLURMCluster(cores=40, memory='150GB', walltime='01:50:00', queue='single', processes=4) - #client = Client(cluster) - #cluster.scale(1) - #print(cluster.job_script()) - dask.config.set(scheduler='threads') - end_memtime = time.time() - - #### Start Step #1 - # Call subroutine #1 from routine #0 - - lazy_weighted_sleep = dask.delayed(nout=2)(weighted_sleep)(1) - - #### Start Step #2 - # Call subroutine #1 from routine #1 - - lazy_weighted_sleep_id1 = dask.delayed(nout=1)(weighted_sleep)(1, lazy_weighted_sleep[1] ) - - #### Start Step #3 - # Call subroutine #1 from routine #2 - - lazy_weighted_sleep_id2 = dask.delayed(nout=1)(weighted_sleep)(1, lazy_weighted_sleep_id1) - - #### Start Step #4 - # Call subroutine #1 from routine #3 - - lazy_weighted_sleep_id3 = dask.delayed(nout=0)(weighted_sleep)(1, lazy_weighted_sleep[0],lazy_weighted_sleep_id2) - #task_graph = Prefered_task.visualize(filename = 'mywf_test.png') - print(lazy_weighted_sleep_id3.compute()) - end_time = time.time() - total_time = end_time - start_time - total_memtime = end_memtime - start_time - print(' The total time is' , round(total_time, 2), 'seconds') - print(' The total memory load time is' , round(total_memtime, 2), 'seconds') \ No newline at end of file diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml b/intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml deleted file mode 100644 index 50fd244..0000000 --- a/intro_examples/rgg/wfGenes_output/node_4_4/FireWorks/node_4_4.yaml +++ /dev/null @@ -1,58 +0,0 @@ -fws: -- fw_id: 0 - name: node_id1 - spec: - _tasks: - - _fw_name: PyTask - args: - - 1 - func: auxiliary.weighted_sleep - outputs: - - link_1_to_4 - - link_1_to_2 -- fw_id: 1 - name: node_id2 - spec: - _tasks: - - _fw_name: PyTask - args: - - 1 - func: auxiliary.weighted_sleep - inputs: - - link_1_to_2 - outputs: - - link_2_to_3 -- fw_id: 2 - name: node_id3 - spec: - _tasks: - - _fw_name: PyTask - args: - - 1 - func: auxiliary.weighted_sleep - inputs: - - link_2_to_3 - outputs: - - link_3_to_4 -- fw_id: 3 - name: node_id4 - spec: - _tasks: - - _fw_name: PyTask - args: - - 1 - func: auxiliary.weighted_sleep - inputs: - - link_1_to_4 - - link_3_to_4 -links: - '0': - - 1 - - 3 - '1': - - 2 - '2': - - 3 - '3': [] -metadata: {} -name: node_4_4_wfGenes diff --git a/intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py b/intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py deleted file mode 100644 index 8d8b34b..0000000 --- a/intro_examples/rgg/wfGenes_output/node_4_4/Parsl/node_4_4_parsl.py +++ /dev/null @@ -1,104 +0,0 @@ -import yaml -import numpy as np -from auxiliary import MERGE -from auxiliary import flat_tuple -from auxiliary import flat_list -import time -from parsl.addresses import address_by_hostname -from parsl.providers import LocalProvider -from parsl.channels import LocalChannel -from parsl.config import Config -from parsl.executors import HighThroughputExecutor -from parsl.monitoring.monitoring import MonitoringHub -import parsl - -from parsl.providers import SlurmProvider -from parsl.launchers import SrunLauncher - -from parsl.data_provider.files import File -from parsl.data_provider.file_noop import NoOpFileStaging -from auxiliary import weighted_sleep - -if __name__ == '__main__': - - - start_time = time.time() - - config_slurm = Config( - executors=[ - HighThroughputExecutor( - label="frontera_htex", - address=address_by_hostname(), - max_workers=56, - provider=SlurmProvider( - channel=LocalChannel(), - nodes_per_block=1, - init_blocks=1, - partition='single', - walltime = '00:30:00', - launcher=SrunLauncher(), - ), - ) - ], - - monitoring=MonitoringHub( - hub_address=address_by_hostname(), - monitoring_debug=False, - workflow_name = 'slab_1_slurm', - resource_monitoring_interval=1, - ), - strategy = None - ) - - config_local = Config( - executors=[ - HighThroughputExecutor( - label = "frontera_htex", - cores_per_worker = 2, - max_workers = 40, - storage_access=[NoOpFileStaging()], - provider = LocalProvider( - parallelism = 1, - ), - - ) - ], - - monitoring=MonitoringHub( - hub_address=address_by_hostname(), - workflow_name = 'slab_1_local', - monitoring_debug=False, - resource_monitoring_interval=1, - ), - strategy = None - ) - - parsl.load(config_local) - end_memtime = time.time() - - #### Start Step #1 - # Call subroutine #1 from routine #0 - - parsl_weighted_sleep = weighted_sleep(1) - - #### Start Step #2 - # Call subroutine #1 from routine #1 - - parsl_weighted_sleep_id1 = weighted_sleep(1, parsl_weighted_sleep.result()[1]) - - #### Start Step #3 - # Call subroutine #1 from routine #2 - - parsl_weighted_sleep_id2 = weighted_sleep(1, parsl_weighted_sleep_id1) - - #### Start Step #4 - # Call subroutine #1 from routine #3 - - parsl_weighted_sleep_id3 = weighted_sleep(1, parsl_weighted_sleep.result()[0], parsl_weighted_sleep_id2) - print(parsl_weighted_sleep_id3.compute()) - end_time = time.time() - total_time = end_time - start_time - total_memtime = end_memtime - start_time - print(' The total time is' , round(total_time, 2), 'seconds') - print(' The total memory load time is' , round(total_memtime, 2), 'seconds') - print('PARSL based workflow') \ No newline at end of file -- GitLab From 99c9082b2a7a9c3cbe004c7a5f0d03aa45f9c197 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 13:50:24 +0200 Subject: [PATCH 09/35] update parsl_wfgenes.py with keyword support --- wfGenes_exe/auxiliary.py | 14 ---------- wfGenes_exe/dask_wfgenes.py | 5 +--- wfGenes_exe/parsl_wfgenes.py | 53 ++++++++++++++++++------------------ wfGenes_exe/setenv.sh | 1 + 4 files changed, 28 insertions(+), 45 deletions(-) diff --git a/wfGenes_exe/auxiliary.py b/wfGenes_exe/auxiliary.py index 0293a08..0d80f8b 100644 --- a/wfGenes_exe/auxiliary.py +++ b/wfGenes_exe/auxiliary.py @@ -44,17 +44,3 @@ def flat_list(lazy_list): return flat_list - -def weighted_sleep(*args, **kwargs): - if 'len_output' in kwargs: - output_number = kwargs['len_output'] - else: - output_number = 1 - if 'sleep_time' in kwargs: - sleep_time = kwargs['sleep_time'] - else: - sleep_time = 1 - print('Sleeping for', sleep_time, "seconds.") - time.sleep(int(sleep_time)) - output_list = ['Null' for y in range(int(output_number))] - return output_list diff --git a/wfGenes_exe/dask_wfgenes.py b/wfGenes_exe/dask_wfgenes.py index bc0ac2d..9938075 100644 --- a/wfGenes_exe/dask_wfgenes.py +++ b/wfGenes_exe/dask_wfgenes.py @@ -278,7 +278,6 @@ class DaskwfGenes(): def write_arguments(self, lazy_str, wfgenes_init, func_module, i, j): """ Writing argument list for a module call""" - self.len_inputs = len(wfgenes_init.inputs[i][j]) len_inputs = len(wfgenes_init.inputs[i][j]) if bool(wfgenes_init.kwargs[i][j]) and wfgenes_init.kwargs[i][j] != 'null': kwargs = wfgenes_init.kwargs[i][j] @@ -354,9 +353,7 @@ class DaskwfGenes(): elif (func_loc == 'MERGE' or func_gloab == 'MERGE') and (input_gdependent == True or inputs_no_locdep_k== 'inner_dependent') : #4 Dependent to Merge function self.wfg_dask += argument_key+lazy_str + inputs + ', ' - - - + if not bool(wfgenes_init.kwargs[i][j]) or wfgenes_init.kwargs[i][j] == 'null' : if len_inputs !=0: self.wfg_dask = self.wfg_dask[:-2] diff --git a/wfGenes_exe/parsl_wfgenes.py b/wfGenes_exe/parsl_wfgenes.py index db1a660..f57a8dc 100644 --- a/wfGenes_exe/parsl_wfgenes.py +++ b/wfGenes_exe/parsl_wfgenes.py @@ -221,7 +221,7 @@ class ParslwfGenes(): wfgenes_init.wfgenes_scheduler(func_done) if wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': - self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+ func_suffix+'.compute())' + self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+'.compute())' else: self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' self.wfg_parsl += "\n"+ self.indent+"end_time = time.time()" @@ -239,6 +239,16 @@ class ParslwfGenes(): def write_arguments(self, wfgenes_init, lazy_str, i , j): """ Writing argument list for a module call""" len_inputs = len(wfgenes_init.inputs[i][j]) + if bool(wfgenes_init.kwargs[i][j]) and wfgenes_init.kwargs[i][j] != 'null': + kwargs = wfgenes_init.kwargs[i][j] + last_key = list(kwargs)[-1] + kwargs_string = '' + for key, value in kwargs.items(): + kwargs_string += key + " = '" + str(value) + "'" + if key != last_key: + kwargs_string += ', ' + else: + kwargs_string += ')' for k in range(len_inputs): # Writing arguments of each function # Cache variables inside loop k loop @@ -290,45 +300,34 @@ class ParslwfGenes(): # Writing arguments - 4 different scenarios if inputs_no_locdep_k != 'inner_dependent' and input_gdependent == False : #1 No dependency at all - self.wfg_parsl += argument_key+ inputs + parsl_barrier+slice - if k != len_inputs - 1: - self.wfg_parsl += ', ' - elif k == len_inputs - 1: - self.wfg_parsl += ') ' + self.wfg_parsl += argument_key+ inputs + parsl_barrier+slice+', ' elif inputs_no_locdep_k== 'inner_dependent' and func_loc != 'MERGE' : #2 Inner-dependent for users function self.wfg_parsl += argument_key+lazy_str + func_loc_dep if output_number > 1: - self.wfg_parsl += parsl_barrier+'[' + input_index + '] ' + slice + self.wfg_parsl += parsl_barrier+'[' + input_index + '] ' + slice + ', ' elif output_number == 1: - self.wfg_parsl += slice - if k != len_inputs - 1: - self.wfg_parsl += ', ' - elif k == len_inputs - 1: - self.wfg_parsl += ') ' + self.wfg_parsl += slice + ', ' elif input_gdependent == True and func_gloab != 'MERGE' : #3 Gloab dependent for users function self.wfg_parsl += argument_key+lazy_str + func_gloab_dep if output_number != 1: - self.wfg_parsl += parsl_barrier+'[' + input_index + ']' + slice + self.wfg_parsl += parsl_barrier+'[' + input_index + ']' + slice + ', ' else: - self.wfg_parsl += slice - if k != len_inputs - 1: - self.wfg_parsl += ', ' - elif k == len_inputs - 1: - self.wfg_parsl += ') ' - + self.wfg_parsl += slice + ', ' + elif (func_loc == 'MERGE' or func_gloab == 'MERGE') and (input_gdependent == True or inputs_no_locdep_k== 'inner_dependent') : #4 Dependent to Merge function - self.wfg_parsl += argument_key+lazy_str + inputs - if k != len_inputs - 1 : - self.wfg_parsl += ', ' - elif k == len_inputs - 1: - #self.wfg_parsl += argument_key+lazy_str + - # inputs + parsl_barrier) - self.wfg_parsl += ' )' - + self.wfg_parsl += argument_key+lazy_str + inputs + ', ' + + if not bool(wfgenes_init.kwargs[i][j]) or wfgenes_init.kwargs[i][j] == 'null' : + if len_inputs !=0: + self.wfg_dask = self.wfg_dask[:-2] + self.wfg_parsl += ')' + elif bool(wfgenes_init.kwargs[i][j]) and wfgenes_init.kwargs[i][j] != 'null' : + self.wfg_parsl += kwargs_string + diff --git a/wfGenes_exe/setenv.sh b/wfGenes_exe/setenv.sh index 0d0c642..1921326 100644 --- a/wfGenes_exe/setenv.sh +++ b/wfGenes_exe/setenv.sh @@ -8,6 +8,7 @@ conda activate myenv export PYTHONPATH=/home/mehdi/work/gitlab/workflow_generator/intro_examples/multihith/lib:$PYTHONPATH export PYTHONPATH=/home/mehdi/work/gitlab/workflow_generator/wfGenes_exe/:$PYTHONPATH export PYTHONPATH=/home/mehdi/work/gitlab/workflow_generator/intro_examples/foreach_sample/lib:$PYTHONPATH +export PYTHONPATH=/home/mehdi/work/gitlab/workflow_generator/intro_examples/rgg/lib:$PYTHONPATH #unset I_MPI_HYDRA_BOOTSTRAP I_MPI_HYDRA_RMK I_MPI_HYDRA_BRANCH_COUNT #export I_MPI_HYDRA_BOOTSTRAP=ssh -- GitLab From 2d2dedd43b30f9d99c3eb5c57f2dd26ffe394e42 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 13:55:12 +0200 Subject: [PATCH 10/35] update rgg in intro_examples --- intro_examples/rgg/lib/my_function.py | 17 +++++++++++++++++ intro_examples/rgg/wconfig.yaml | 8 ++++---- wfGenes_exe/rgg_to_wconfig.py | 2 +- 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 intro_examples/rgg/lib/my_function.py diff --git a/intro_examples/rgg/lib/my_function.py b/intro_examples/rgg/lib/my_function.py new file mode 100644 index 0000000..bbbe44c --- /dev/null +++ b/intro_examples/rgg/lib/my_function.py @@ -0,0 +1,17 @@ +#from parsl import python_app +import time + +#@python_app +def weighted_sleep(*args, **kwargs): + if 'len_output' in kwargs: + output_number = kwargs['len_output'] + else: + output_number = 1 + if 'sleep_time' in kwargs: + sleep_time = kwargs['sleep_time'] + else: + sleep_time = 1 + print('Sleeping for', sleep_time, "seconds.") + time.sleep(int(sleep_time)) + output_list = ['Null' for y in range(int(output_number))] + return output_list diff --git a/intro_examples/rgg/wconfig.yaml b/intro_examples/rgg/wconfig.yaml index 9da28c6..9ca357a 100644 --- a/intro_examples/rgg/wconfig.yaml +++ b/intro_examples/rgg/wconfig.yaml @@ -3,7 +3,7 @@ nodes: name: node_id1 tasks: - func: - - auxiliary + - my_function - weighted_sleep inputs: [] kwargs: @@ -16,7 +16,7 @@ nodes: name: node_id2 tasks: - func: - - auxiliary + - my_function - weighted_sleep inputs: - link_1_to_2 @@ -29,7 +29,7 @@ nodes: name: node_id3 tasks: - func: - - auxiliary + - my_function - weighted_sleep inputs: - link_2_to_3 @@ -42,7 +42,7 @@ nodes: name: node_id4 tasks: - func: - - auxiliary + - my_function - weighted_sleep inputs: - link_1_to_4 diff --git a/wfGenes_exe/rgg_to_wconfig.py b/wfGenes_exe/rgg_to_wconfig.py index d882a91..0632266 100644 --- a/wfGenes_exe/rgg_to_wconfig.py +++ b/wfGenes_exe/rgg_to_wconfig.py @@ -27,7 +27,7 @@ for node_graph in graph_nodes: task['func'] = [] task['inputs'] = [] task['outputs'] = [] - task['func'].append('auxiliary') + task['func'].append('my_function') task['func'].append('weighted_sleep') for edge in graph_edges: if edge['source'] == node_graph['id']: -- GitLab From 6edb9b502d15713a6afbf5a5e7b476dbd85d5db3 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 14:03:39 +0200 Subject: [PATCH 11/35] delete remote __pycache__ --- .../lib/__pycache__/myfunctions.cpython-37.pyc | Bin 1037 -> 0 bytes .../lib/__pycache__/myfunctions.cpython-38.pyc | Bin 1089 -> 0 bytes .../lib/__pycache__/parallel_path.cpython-38.pyc | Bin 1192 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 intro_examples/foreach_sample/lib/__pycache__/myfunctions.cpython-37.pyc delete mode 100644 intro_examples/foreach_sample/lib/__pycache__/myfunctions.cpython-38.pyc delete mode 100644 intro_examples/parallel_path/lib/__pycache__/parallel_path.cpython-38.pyc diff --git a/intro_examples/foreach_sample/lib/__pycache__/myfunctions.cpython-37.pyc b/intro_examples/foreach_sample/lib/__pycache__/myfunctions.cpython-37.pyc deleted file mode 100644 index da81c8f98ac1d8dbd3bb4f68d7733dcd82cf74bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037 zcma)4&2G~`5Z+xoi5pTbRBBZr18yo9H-}8V;x%694Q};K&k#fyyf$a2%rm{3pu!aJIybz!Xo&ipQo^@R zh|>%i6hy%ryBKiPeNbOWk8;Y{r8Oll$((B6*!VpL`DVFqkL^P{u;WPO2lhnUX_1@> zX@{_dmUZnr;He!@eKIAVS~EJOS7eubW#{Gz`A#IpJFH^uhZT(+TG5IAbp6pCWQlNx zQSPcRbo0TpqbE<@i%bsP*Ka<&dvUDoUYuR{eUSh`oDHct zP%x!)hSUO)M)|-VFZshgm7Vo$6(qurMcU5?2X=WQv)BL!*UaL-Ml*Z&l+EajT|om5 zPg90^m+Y(%ap*$hpy@U?m{jyLl3xA;N(0L3?SPqmbzTHg+{6l`8f7$c42cO#&~Bln z+fb=(ja+?M1no6y+hA9g?uS*9 diff --git a/intro_examples/foreach_sample/lib/__pycache__/myfunctions.cpython-38.pyc b/intro_examples/foreach_sample/lib/__pycache__/myfunctions.cpython-38.pyc deleted file mode 100644 index 2697aabfd654795ceee6ce4f45b623df81700d1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcmZ9K&2G~`5Xbk!P8`RHP^lCs7azD73Vs2EDuFn{0dX-!#?5XLQ-5{Wrb*-0x$JD6Nm&JUN0%L4MI$BaMinuBA208xtB$6>h(gr2pTk9&%P^MVqA^k&JXFh0_ekO}~y*TyP_vm706)Fm> zj<3^7;m|46uTWdiQz%b4;5xdFh6kY4z!bk3w0k$iimRJE)>loU7nbLLlgdnql%btc7<^$cA1yEk!O{`h?6W4viYYUzM2-+HrVYz>U^u zP?vR*#h}6{{9m4ze1{Itr5TpTaE8XmVWS-CQgsY*=frWIq(vMXGzvSpLy0@26L^tb zB}!+?z%#6{vF2rW-xt6vbrRX=m-}ti^_A33R_o5L6iyieI&cP}^C~YzlgZck UK#j~i>TqZ144l3L7;&8b0Q$G^o&W#< diff --git a/intro_examples/parallel_path/lib/__pycache__/parallel_path.cpython-38.pyc b/intro_examples/parallel_path/lib/__pycache__/parallel_path.cpython-38.pyc deleted file mode 100644 index 25c80bc852b1644095fbe6c52af89b17a489af29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmZ8h&2G~`5T04vsT*ho5wuVc65M=AxPUlR6%rN4N`QdMq6D|QO$_Uwt~V;J>{EM1 zh&O1Dyby=Ia_TE^V#X8(PIwO9v>lCqwNuPcpb#Yd04p6tkl zFCM~McmyxtC2YgNT8&gmIG>i=^Ju@~wAVtZj_)dm@V0xr1d<3&E$ zKT0y~@bEdo-;-)TnP@v~i>vIBR*~-lljI}i{GwF3^V{RToMdI>$5;5qp;r0Gj-Aif znSgGN7mA79PqmtXVLIe@%k!nNuewSCL=UgFpSx%n=Q;BE%0=2O`R~cFaE21kY0RvU zL^YB7purk8VP}QN$1~6RwKyT-SAkC*tj&mSBX}H^8?W}xf^%s6*{?No+S$5b;*Ud{ zRG<2~7#Ys)u=`GOf`1>MO zp}~V*JL~?IxlVBoOpjFLnH!|cO%|(D$8EOnuvlZk>87G3^H!QyHp%Vq{~kDON-Oo? zQx737qq#@kXdw=0v@2~G;Az4owz%!K$M)DincAFfx^O)!co!3%lXs EZ=S;hng9R* -- GitLab From cb97b24f5ae9b9738834058da889a51a7deb9cf9 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 14:07:44 +0200 Subject: [PATCH 12/35] delete wfgenes_output in foreach_sample --- .../FireWorks/foreach_sample.yaml | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml diff --git a/intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml b/intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml deleted file mode 100644 index 3d699fa..0000000 --- a/intro_examples/foreach_sample/wfGenes_output/foreach_sample/FireWorks/foreach_sample.yaml +++ /dev/null @@ -1,66 +0,0 @@ -fws: -- fw_id: 0 - name: plus_minus - spec: - _tasks: - - _fw_name: ForeachTask - number of chunks: 7 - split: data - task: - _fw_name: PyTask - func: myfunctions.plus_minus - inputs: - - data - - constant_y - outputs: - - datax - - datay - constant_y: 1 -- fw_id: 1 - name: sum_square - spec: - _tasks: - - _fw_name: ForeachTask - number of chunks: 7 - split: datax - task: - _fw_name: PyTask - func: myfunctions.sum_square - inputs: - - datax - - datay - - constant_z - outputs: - - results - constant_z: 2 -- fw_id: 2 - name: average - spec: - _tasks: - - _fw_name: PyTask - func: myfunctions.average_list - inputs: - - results - outputs: - - midpoint -- fw_id: 3 - name: data_generator - spec: - _tasks: - - _fw_name: PyTask - func: myfunctions.data_generator - inputs: - - list_length - outputs: - - data - list_length: 20 -links: - '0': - - 1 - '1': - - 2 - '2': [] - '3': - - 0 -metadata: {} -name: foreach_sample_wfGenes -- GitLab From b7b883102d4e4ff851bd479ba970b645ff2b453b Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 16:34:08 +0200 Subject: [PATCH 13/35] replace .compute with .result for last function call --- wfGenes_exe/parsl_wfgenes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wfGenes_exe/parsl_wfgenes.py b/wfGenes_exe/parsl_wfgenes.py index f57a8dc..8214617 100644 --- a/wfGenes_exe/parsl_wfgenes.py +++ b/wfGenes_exe/parsl_wfgenes.py @@ -221,9 +221,9 @@ class ParslwfGenes(): wfgenes_init.wfgenes_scheduler(func_done) if wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1] != 'MERGE': - self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+'.compute())' + self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.func[func_done[-1][0]][func_done[-1][1]][1]+'.result())' else: - self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.compute())' + self.wfg_parsl += '\n'+self.indent+'print('+lazy_str+wfgenes_init.outputs[func_done[-1][0]][func_done[-1][1]][0]+ func_suffix+'.result())' self.wfg_parsl += "\n"+ self.indent+"end_time = time.time()" self.wfg_parsl += "\n"+ self.indent+"total_time = end_time - start_time" self.wfg_parsl += "\n"+ self.indent+"total_memtime = end_memtime - start_time" -- GitLab From b4f36bdea2e8ef045fc8a72a63f78f4935e1ae63 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 16:36:41 +0200 Subject: [PATCH 14/35] update rgg to wconfig --- wfGenes_exe/rgg_to_wconfig.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wfGenes_exe/rgg_to_wconfig.py b/wfGenes_exe/rgg_to_wconfig.py index 0632266..e0db2ff 100644 --- a/wfGenes_exe/rgg_to_wconfig.py +++ b/wfGenes_exe/rgg_to_wconfig.py @@ -9,7 +9,7 @@ import yaml from pathlib import Path ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) wconfig = {} -dag_file = 'rdag.yaml' +dag_file = 'rdag_80.yaml' with open(dag_file) as input_stream: random_dag = yaml.load(input_stream, Loader=yaml.Loader) graph_edges = random_dag['graph']['edges'] @@ -35,7 +35,7 @@ for node_graph in graph_nodes: elif edge['target'] == node_graph['id']: task['inputs'].append('link_' + edge['source']+'_to_'+ edge['target']) task['kwargs'] = {} - task['kwargs'] = { 'len_output' : len(task['outputs']), 'sleep_time': 1 } + task['kwargs'] = { 'len_output' : len(task['outputs']), 'sleep_time': 1, 'id': int(node_graph['id'])} node['tasks'].append(task) nodes_wconfig.append(node) -- GitLab From d6efeec748b4325d7349b5a7a36e425aa9b3ef2c Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 16:38:04 +0200 Subject: [PATCH 15/35] update with passing id as kwargs --- intro_examples/rgg/lib/my_function.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/intro_examples/rgg/lib/my_function.py b/intro_examples/rgg/lib/my_function.py index bbbe44c..2999753 100644 --- a/intro_examples/rgg/lib/my_function.py +++ b/intro_examples/rgg/lib/my_function.py @@ -11,7 +11,8 @@ def weighted_sleep(*args, **kwargs): sleep_time = kwargs['sleep_time'] else: sleep_time = 1 - print('Sleeping for', sleep_time, "seconds.") + id = kwargs['id'] + print('Node', id,' is Sleeping for', sleep_time, "seconds.") time.sleep(int(sleep_time)) output_list = ['Null' for y in range(int(output_number))] return output_list -- GitLab From cb42d2a38b2721833522bee5d0033c02e8cdd74e Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Fri, 23 Apr 2021 16:39:55 +0200 Subject: [PATCH 16/35] add rdag with 10 to 100 nodes --- intro_examples/rgg/rdag_10.yaml | 58 ++++ intro_examples/rgg/rdag_100.yaml | 550 +++++++++++++++++++++++++++++++ intro_examples/rgg/rdag_20.yaml | 95 ++++++ intro_examples/rgg/rdag_40.yaml | 223 +++++++++++++ intro_examples/rgg/rdag_80.yaml | 446 +++++++++++++++++++++++++ 5 files changed, 1372 insertions(+) create mode 100644 intro_examples/rgg/rdag_10.yaml create mode 100644 intro_examples/rgg/rdag_100.yaml create mode 100644 intro_examples/rgg/rdag_20.yaml create mode 100644 intro_examples/rgg/rdag_40.yaml create mode 100644 intro_examples/rgg/rdag_80.yaml diff --git a/intro_examples/rgg/rdag_10.yaml b/intro_examples/rgg/rdag_10.yaml new file mode 100644 index 0000000..8bbc8b3 --- /dev/null +++ b/intro_examples/rgg/rdag_10.yaml @@ -0,0 +1,58 @@ +graph: + edges: + - source: '1' + target: '7' + weight: '2' + - source: '1' + target: '8' + weight: '1' + - source: '1' + target: '9' + weight: '1' + - source: '2' + target: '4' + weight: '2' + - source: '2' + target: '6' + weight: '1' + - source: '3' + target: '8' + weight: '1' + - source: '3' + target: '4' + weight: '1' + - source: '3' + target: '7' + weight: '1' + - source: '3' + target: '9' + weight: '1' + - source: '4' + target: '10' + weight: '1' + - source: '5' + target: '6' + weight: '2' + - source: '5' + target: '10' + weight: '2' + - source: '6' + target: '7' + weight: '1' + - source: '6' + target: '10' + weight: '1' + - source: '10' + target: '9' + weight: '1' + nodes: + - id: '1' + - id: '2' + - id: '3' + - id: '4' + - id: '5' + - id: '6' + - id: '7' + - id: '8' + - id: '9' + - id: '10' diff --git a/intro_examples/rgg/rdag_100.yaml b/intro_examples/rgg/rdag_100.yaml new file mode 100644 index 0000000..0810121 --- /dev/null +++ b/intro_examples/rgg/rdag_100.yaml @@ -0,0 +1,550 @@ +graph: + edges: + - source: '1' + target: '81' + weight: '1' + - source: '2' + target: '40' + weight: '1' + - source: '2' + target: '73' + weight: '1' + - source: '2' + target: '19' + weight: '1' + - source: '2' + target: '46' + weight: '1' + - source: '3' + target: '7' + weight: '1' + - source: '3' + target: '100' + weight: '1' + - source: '3' + target: '35' + weight: '1' + - source: '3' + target: '8' + weight: '1' + - source: '4' + target: '71' + weight: '1' + - source: '4' + target: '83' + weight: '1' + - source: '5' + target: '95' + weight: '1' + - source: '5' + target: '72' + weight: '1' + - source: '5' + target: '86' + weight: '1' + - source: '5' + target: '13' + weight: '1' + - source: '6' + target: '10' + weight: '1' + - source: '6' + target: '62' + weight: '1' + - source: '6' + target: '59' + weight: '1' + - source: '6' + target: '78' + weight: '1' + - source: '7' + target: '69' + weight: '1' + - source: '7' + target: '11' + weight: '1' + - source: '9' + target: '77' + weight: '1' + - source: '9' + target: '70' + weight: '1' + - source: '9' + target: '16' + weight: '1' + - source: '9' + target: '92' + weight: '1' + - source: '10' + target: '66' + weight: '1' + - source: '10' + target: '12' + weight: '1' + - source: '11' + target: '56' + weight: '1' + - source: '11' + target: '54' + weight: '1' + - source: '12' + target: '32' + weight: '1' + - source: '12' + target: '60' + weight: '1' + - source: '13' + target: '98' + weight: '1' + - source: '13' + target: '58' + weight: '1' + - source: '13' + target: '50' + weight: '1' + - source: '14' + target: '22' + weight: '1' + - source: '14' + target: '90' + weight: '1' + - source: '14' + target: '74' + weight: '1' + - source: '15' + target: '64' + weight: '1' + - source: '15' + target: '38' + weight: '1' + - source: '15' + target: '27' + weight: '1' + - source: '16' + target: '76' + weight: '1' + - source: '16' + target: '55' + weight: '1' + - source: '17' + target: '33' + weight: '1' + - source: '17' + target: '89' + weight: '1' + - source: '17' + target: '61' + weight: '1' + - source: '17' + target: '87' + weight: '1' + - source: '18' + target: '79' + weight: '1' + - source: '18' + target: '52' + weight: '1' + - source: '18' + target: '31' + weight: '1' + - source: '19' + target: '41' + weight: '1' + - source: '20' + target: '28' + weight: '1' + - source: '20' + target: '75' + weight: '1' + - source: '20' + target: '84' + weight: '1' + - source: '20' + target: '25' + weight: '1' + - source: '21' + target: '85' + weight: '1' + - source: '21' + target: '26' + weight: '1' + - source: '22' + target: '97' + weight: '1' + - source: '22' + target: '36' + weight: '1' + - source: '22' + target: '63' + weight: '1' + - source: '23' + target: '94' + weight: '1' + - source: '24' + target: '88' + weight: '1' + - source: '25' + target: '29' + weight: '1' + - source: '25' + target: '65' + weight: '1' + - source: '26' + target: '57' + weight: '1' + - source: '26' + target: '67' + weight: '1' + - source: '28' + target: '93' + weight: '1' + - source: '29' + target: '34' + weight: '1' + - source: '30' + target: '96' + weight: '1' + - source: '30' + target: '42' + weight: '1' + - source: '30' + target: '43' + weight: '1' + - source: '33' + target: '53' + weight: '1' + - source: '33' + target: '91' + weight: '1' + - source: '33' + target: '68' + weight: '1' + - source: '34' + target: '45' + weight: '1' + - source: '34' + target: '99' + weight: '1' + - source: '34' + target: '39' + weight: '1' + - source: '36' + target: '49' + weight: '1' + - source: '36' + target: '80' + weight: '1' + - source: '37' + target: '51' + weight: '1' + - source: '37' + target: '48' + weight: '1' + - source: '38' + target: '47' + weight: '1' + - source: '38' + target: '82' + weight: '1' + - source: '39' + target: '66' + weight: '1' + - source: '39' + target: '90' + weight: '1' + - source: '40' + target: '44' + weight: '1' + - source: '41' + target: '54' + weight: '1' + - source: '41' + target: '69' + weight: '1' + - source: '42' + target: '59' + weight: '1' + - source: '42' + target: '43' + weight: '1' + - source: '42' + target: '8' + weight: '1' + - source: '43' + target: '84' + weight: '1' + - source: '43' + target: '56' + weight: '1' + - source: '44' + target: '81' + weight: '1' + - source: '46' + target: '60' + weight: '1' + - source: '46' + target: '55' + weight: '1' + - source: '46' + target: '45' + weight: '1' + - source: '47' + target: '98' + weight: '1' + - source: '47' + target: '50' + weight: '1' + - source: '48' + target: '85' + weight: '1' + - source: '48' + target: '97' + weight: '1' + - source: '48' + target: '88' + weight: '1' + - source: '50' + target: '72' + weight: '1' + - source: '51' + target: '64' + weight: '1' + - source: '51' + target: '76' + weight: '1' + - source: '51' + target: '58' + weight: '1' + - source: '52' + target: '100' + weight: '1' + - source: '56' + target: '77' + weight: '1' + - source: '56' + target: '71' + weight: '1' + - source: '57' + target: '80' + weight: '1' + - source: '57' + target: '24' + weight: '1' + - source: '57' + target: '65' + weight: '1' + - source: '59' + target: '70' + weight: '1' + - source: '59' + target: '78' + weight: '1' + - source: '61' + target: '89' + weight: '1' + - source: '61' + target: '68' + weight: '1' + - source: '63' + target: '67' + weight: '1' + - source: '63' + target: '31' + weight: '1' + - source: '64' + target: '79' + weight: '1' + - source: '65' + target: '95' + weight: '1' + - source: '65' + target: '75' + weight: '1' + - source: '66' + target: '91' + weight: '1' + - source: '66' + target: '93' + weight: '1' + - source: '67' + target: '87' + weight: '1' + - source: '70' + target: '23' + weight: '1' + - source: '70' + target: '49' + weight: '1' + - source: '71' + target: '35' + weight: '1' + - source: '73' + target: '27' + weight: '1' + - source: '73' + target: '74' + weight: '1' + - source: '73' + target: '83' + weight: '1' + - source: '75' + target: '96' + weight: '1' + - source: '81' + target: '1' + weight: '1' + - source: '83' + target: '32' + weight: '1' + - source: '83' + target: '86' + weight: '1' + - source: '84' + target: '82' + weight: '1' + - source: '84' + target: '92' + weight: '1' + - source: '86' + target: '99' + weight: '1' + - source: '87' + target: '62' + weight: '1' + - source: '88' + target: '94' + weight: '1' + - source: '91' + target: '28' + weight: '1' + - source: '91' + target: '90' + weight: '1' + - source: '93' + target: '62' + weight: '1' + - source: '93' + target: '55' + weight: '1' + - source: '94' + target: '24' + weight: '1' + - source: '94' + target: '49' + weight: '1' + - source: '95' + target: '4' + weight: '1' + - source: '95' + target: '99' + weight: '1' + - source: '96' + target: '53' + weight: '1' + - source: '98' + target: '69' + weight: '1' + - source: '100' + target: '35' + weight: '1' + nodes: + - id: '1' + - id: '2' + - id: '3' + - id: '4' + - id: '5' + - id: '6' + - id: '7' + - id: '8' + - id: '9' + - id: '10' + - id: '11' + - id: '12' + - id: '13' + - id: '14' + - id: '15' + - id: '16' + - id: '17' + - id: '18' + - id: '19' + - id: '20' + - id: '21' + - id: '22' + - id: '23' + - id: '24' + - id: '25' + - id: '26' + - id: '27' + - id: '28' + - id: '29' + - id: '30' + - id: '31' + - id: '32' + - id: '33' + - id: '34' + - id: '35' + - id: '36' + - id: '37' + - id: '38' + - id: '39' + - id: '40' + - id: '41' + - id: '42' + - id: '43' + - id: '44' + - id: '45' + - id: '46' + - id: '47' + - id: '48' + - id: '49' + - id: '50' + - id: '51' + - id: '52' + - id: '53' + - id: '54' + - id: '55' + - id: '56' + - id: '57' + - id: '58' + - id: '59' + - id: '60' + - id: '61' + - id: '62' + - id: '63' + - id: '64' + - id: '65' + - id: '66' + - id: '67' + - id: '68' + - id: '69' + - id: '70' + - id: '71' + - id: '72' + - id: '73' + - id: '74' + - id: '75' + - id: '76' + - id: '77' + - id: '78' + - id: '79' + - id: '80' + - id: '81' + - id: '82' + - id: '83' + - id: '84' + - id: '85' + - id: '86' + - id: '87' + - id: '88' + - id: '89' + - id: '90' + - id: '91' + - id: '92' + - id: '93' + - id: '94' + - id: '95' + - id: '96' + - id: '97' + - id: '98' + - id: '99' + - id: '100' diff --git a/intro_examples/rgg/rdag_20.yaml b/intro_examples/rgg/rdag_20.yaml new file mode 100644 index 0000000..487441f --- /dev/null +++ b/intro_examples/rgg/rdag_20.yaml @@ -0,0 +1,95 @@ +graph: + edges: + - source: '1' + target: '13' + weight: '1' + - source: '2' + target: '3' + weight: '1' + - source: '2' + target: '16' + weight: '1' + - source: '4' + target: '10' + weight: '1' + - source: '4' + target: '17' + weight: '1' + - source: '4' + target: '15' + weight: '1' + - source: '5' + target: '8' + weight: '1' + - source: '6' + target: '19' + weight: '1' + - source: '6' + target: '12' + weight: '1' + - source: '6' + target: '20' + weight: '1' + - source: '7' + target: '11' + weight: '1' + - source: '7' + target: '18' + weight: '1' + - source: '7' + target: '14' + weight: '1' + - source: '8' + target: '9' + weight: '1' + - source: '9' + target: '11' + weight: '1' + - source: '10' + target: '16' + weight: '1' + - source: '10' + target: '12' + weight: '1' + - source: '11' + target: '14' + weight: '1' + - source: '13' + target: '19' + weight: '1' + - source: '15' + target: '1' + weight: '1' + - source: '15' + target: '17' + weight: '1' + - source: '15' + target: '18' + weight: '1' + - source: '19' + target: '3' + weight: '1' + - source: '20' + target: '5' + weight: '1' + nodes: + - id: '1' + - id: '2' + - id: '3' + - id: '4' + - id: '5' + - id: '6' + - id: '7' + - id: '8' + - id: '9' + - id: '10' + - id: '11' + - id: '12' + - id: '13' + - id: '14' + - id: '15' + - id: '16' + - id: '17' + - id: '18' + - id: '19' + - id: '20' diff --git a/intro_examples/rgg/rdag_40.yaml b/intro_examples/rgg/rdag_40.yaml new file mode 100644 index 0000000..94c9e14 --- /dev/null +++ b/intro_examples/rgg/rdag_40.yaml @@ -0,0 +1,223 @@ +graph: + edges: + - source: '1' + target: '40' + weight: '1' + - source: '2' + target: '23' + weight: '1' + - source: '2' + target: '34' + weight: '1' + - source: '3' + target: '37' + weight: '1' + - source: '3' + target: '14' + weight: '1' + - source: '3' + target: '20' + weight: '1' + - source: '4' + target: '22' + weight: '1' + - source: '4' + target: '15' + weight: '1' + - source: '5' + target: '9' + weight: '1' + - source: '5' + target: '35' + weight: '1' + - source: '5' + target: '12' + weight: '1' + - source: '5' + target: '18' + weight: '1' + - source: '6' + target: '7' + weight: '1' + - source: '6' + target: '8' + weight: '1' + - source: '6' + target: '25' + weight: '1' + - source: '6' + target: '29' + weight: '1' + - source: '7' + target: '28' + weight: '1' + - source: '7' + target: '17' + weight: '1' + - source: '7' + target: '26' + weight: '1' + - source: '8' + target: '21' + weight: '1' + - source: '8' + target: '30' + weight: '1' + - source: '10' + target: '31' + weight: '1' + - source: '10' + target: '36' + weight: '1' + - source: '11' + target: '39' + weight: '1' + - source: '11' + target: '27' + weight: '1' + - source: '11' + target: '13' + weight: '1' + - source: '15' + target: '16' + weight: '1' + - source: '15' + target: '19' + weight: '1' + - source: '15' + target: '32' + weight: '1' + - source: '16' + target: '38' + weight: '1' + - source: '16' + target: '24' + weight: '1' + - source: '16' + target: '33' + weight: '1' + - source: '17' + target: '31' + weight: '1' + - source: '17' + target: '28' + weight: '1' + - source: '17' + target: '34' + weight: '1' + - source: '18' + target: '21' + weight: '1' + - source: '18' + target: '36' + weight: '1' + - source: '18' + target: '26' + weight: '1' + - source: '19' + target: '29' + weight: '1' + - source: '20' + target: '9' + weight: '1' + - source: '20' + target: '14' + weight: '1' + - source: '20' + target: '30' + weight: '1' + - source: '21' + target: '25' + weight: '1' + - source: '23' + target: '40' + weight: '1' + - source: '24' + target: '35' + weight: '1' + - source: '24' + target: '12' + weight: '1' + - source: '24' + target: '22' + weight: '1' + - source: '27' + target: '39' + weight: '1' + - source: '27' + target: '32' + weight: '1' + - source: '31' + target: '1' + weight: '1' + - source: '31' + target: '37' + weight: '1' + - source: '33' + target: '38' + weight: '1' + - source: '33' + target: '13' + weight: '1' + - source: '34' + target: '38' + weight: '1' + - source: '34' + target: '36' + weight: '1' + - source: '36' + target: '39' + weight: '1' + - source: '37' + target: '2' + weight: '1' + - source: '37' + target: '40' + weight: '1' + - source: '38' + target: '13' + weight: '1' + - source: '40' + target: '25' + weight: '1' + nodes: + - id: '1' + - id: '2' + - id: '3' + - id: '4' + - id: '5' + - id: '6' + - id: '7' + - id: '8' + - id: '9' + - id: '10' + - id: '11' + - id: '12' + - id: '13' + - id: '14' + - id: '15' + - id: '16' + - id: '17' + - id: '18' + - id: '19' + - id: '20' + - id: '21' + - id: '22' + - id: '23' + - id: '24' + - id: '25' + - id: '26' + - id: '27' + - id: '28' + - id: '29' + - id: '30' + - id: '31' + - id: '32' + - id: '33' + - id: '34' + - id: '35' + - id: '36' + - id: '37' + - id: '38' + - id: '39' + - id: '40' diff --git a/intro_examples/rgg/rdag_80.yaml b/intro_examples/rgg/rdag_80.yaml new file mode 100644 index 0000000..fd81b64 --- /dev/null +++ b/intro_examples/rgg/rdag_80.yaml @@ -0,0 +1,446 @@ +graph: + edges: + - source: '1' + target: '30' + weight: '1' + - source: '1' + target: '8' + weight: '1' + - source: '2' + target: '46' + weight: '1' + - source: '2' + target: '45' + weight: '1' + - source: '2' + target: '62' + weight: '1' + - source: '2' + target: '67' + weight: '1' + - source: '3' + target: '38' + weight: '1' + - source: '4' + target: '35' + weight: '1' + - source: '4' + target: '13' + weight: '1' + - source: '4' + target: '74' + weight: '1' + - source: '5' + target: '76' + weight: '1' + - source: '5' + target: '68' + weight: '1' + - source: '5' + target: '32' + weight: '1' + - source: '6' + target: '63' + weight: '1' + - source: '7' + target: '72' + weight: '1' + - source: '7' + target: '31' + weight: '1' + - source: '7' + target: '59' + weight: '1' + - source: '8' + target: '40' + weight: '1' + - source: '8' + target: '54' + weight: '1' + - source: '8' + target: '47' + weight: '1' + - source: '9' + target: '21' + weight: '1' + - source: '10' + target: '73' + weight: '1' + - source: '11' + target: '29' + weight: '1' + - source: '11' + target: '43' + weight: '1' + - source: '11' + target: '39' + weight: '1' + - source: '12' + target: '36' + weight: '1' + - source: '13' + target: '20' + weight: '1' + - source: '13' + target: '77' + weight: '1' + - source: '13' + target: '27' + weight: '1' + - source: '14' + target: '26' + weight: '1' + - source: '14' + target: '50' + weight: '1' + - source: '14' + target: '79' + weight: '1' + - source: '15' + target: '24' + weight: '1' + - source: '15' + target: '66' + weight: '1' + - source: '15' + target: '78' + weight: '1' + - source: '16' + target: '37' + weight: '1' + - source: '16' + target: '44' + weight: '1' + - source: '16' + target: '49' + weight: '1' + - source: '16' + target: '52' + weight: '1' + - source: '17' + target: '48' + weight: '1' + - source: '17' + target: '42' + weight: '1' + - source: '18' + target: '70' + weight: '1' + - source: '19' + target: '33' + weight: '1' + - source: '19' + target: '80' + weight: '1' + - source: '19' + target: '53' + weight: '1' + - source: '22' + target: '51' + weight: '1' + - source: '23' + target: '64' + weight: '1' + - source: '23' + target: '69' + weight: '1' + - source: '23' + target: '71' + weight: '1' + - source: '24' + target: '55' + weight: '1' + - source: '24' + target: '65' + weight: '1' + - source: '25' + target: '58' + weight: '1' + - source: '25' + target: '56' + weight: '1' + - source: '25' + target: '60' + weight: '1' + - source: '26' + target: '34' + weight: '1' + - source: '26' + target: '57' + weight: '1' + - source: '27' + target: '41' + weight: '1' + - source: '27' + target: '61' + weight: '1' + - source: '27' + target: '75' + weight: '1' + - source: '28' + target: '38' + weight: '1' + - source: '28' + target: '76' + weight: '1' + - source: '28' + target: '29' + weight: '1' + - source: '30' + target: '46' + weight: '1' + - source: '30' + target: '70' + weight: '1' + - source: '31' + target: '9' + weight: '1' + - source: '31' + target: '41' + weight: '1' + - source: '32' + target: '56' + weight: '1' + - source: '32' + target: '21' + weight: '1' + - source: '32' + target: '71' + weight: '1' + - source: '33' + target: '80' + weight: '1' + - source: '33' + target: '55' + weight: '1' + - source: '34' + target: '39' + weight: '1' + - source: '34' + target: '59' + weight: '1' + - source: '35' + target: '48' + weight: '1' + - source: '35' + target: '49' + weight: '1' + - source: '36' + target: '53' + weight: '1' + - source: '37' + target: '75' + weight: '1' + - source: '38' + target: '12' + weight: '1' + - source: '38' + target: '58' + weight: '1' + - source: '39' + target: '61' + weight: '1' + - source: '40' + target: '60' + weight: '1' + - source: '40' + target: '10' + weight: '1' + - source: '41' + target: '52' + weight: '1' + - source: '41' + target: '68' + weight: '1' + - source: '42' + target: '6' + weight: '1' + - source: '42' + target: '69' + weight: '1' + - source: '42' + target: '79' + weight: '1' + - source: '43' + target: '47' + weight: '1' + - source: '43' + target: '51' + weight: '1' + - source: '45' + target: '50' + weight: '1' + - source: '45' + target: '63' + weight: '1' + - source: '45' + target: '67' + weight: '1' + - source: '47' + target: '44' + weight: '1' + - source: '49' + target: '65' + weight: '1' + - source: '50' + target: '18' + weight: '1' + - source: '50' + target: '78' + weight: '1' + - source: '52' + target: '74' + weight: '1' + - source: '53' + target: '20' + weight: '1' + - source: '53' + target: '62' + weight: '1' + - source: '54' + target: '3' + weight: '1' + - source: '56' + target: '64' + weight: '1' + - source: '57' + target: '22' + weight: '1' + - source: '60' + target: '73' + weight: '1' + - source: '60' + target: '72' + weight: '1' + - source: '63' + target: '77' + weight: '1' + - source: '66' + target: '71' + weight: '1' + - source: '66' + target: '55' + weight: '1' + - source: '67' + target: '20' + weight: '1' + - source: '67' + target: '36' + weight: '1' + - source: '68' + target: '46' + weight: '1' + - source: '68' + target: '79' + weight: '1' + - source: '69' + target: '62' + weight: '1' + - source: '71' + target: '18' + weight: '1' + - source: '72' + target: '29' + weight: '1' + - source: '72' + target: '70' + weight: '1' + - source: '73' + target: '22' + weight: '1' + - source: '74' + target: '77' + weight: '1' + - source: '74' + target: '59' + weight: '1' + - source: '76' + target: '78' + weight: '1' + - source: '80' + target: '75' + weight: '1' + - source: '80' + target: '37' + weight: '1' + nodes: + - id: '1' + - id: '2' + - id: '3' + - id: '4' + - id: '5' + - id: '6' + - id: '7' + - id: '8' + - id: '9' + - id: '10' + - id: '11' + - id: '12' + - id: '13' + - id: '14' + - id: '15' + - id: '16' + - id: '17' + - id: '18' + - id: '19' + - id: '20' + - id: '21' + - id: '22' + - id: '23' + - id: '24' + - id: '25' + - id: '26' + - id: '27' + - id: '28' + - id: '29' + - id: '30' + - id: '31' + - id: '32' + - id: '33' + - id: '34' + - id: '35' + - id: '36' + - id: '37' + - id: '38' + - id: '39' + - id: '40' + - id: '41' + - id: '42' + - id: '43' + - id: '44' + - id: '45' + - id: '46' + - id: '47' + - id: '48' + - id: '49' + - id: '50' + - id: '51' + - id: '52' + - id: '53' + - id: '54' + - id: '55' + - id: '56' + - id: '57' + - id: '58' + - id: '59' + - id: '60' + - id: '61' + - id: '62' + - id: '63' + - id: '64' + - id: '65' + - id: '66' + - id: '67' + - id: '68' + - id: '69' + - id: '70' + - id: '71' + - id: '72' + - id: '73' + - id: '74' + - id: '75' + - id: '76' + - id: '77' + - id: '78' + - id: '79' + - id: '80' -- GitLab From e27e1395e5ee24b6eb46b8724f00a81e86867d54 Mon Sep 17 00:00:00 2001 From: "mehdi.roozmeh" Date: Sat, 24 Apr 2021 02:30:43 +0200 Subject: [PATCH 17/35] Update rgg_to_wconfig.py to add final node for all nodes with no output. This helps to have completely sparse graph to analyze scaling and parallelism --- wfGenes_exe/rgg_to_wconfig.py | 43 +++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/wfGenes_exe/rgg_to_wconfig.py b/wfGenes_exe/rgg_to_wconfig.py index e0db2ff..ece1164 100644 --- a/wfGenes_exe/rgg_to_wconfig.py +++ b/wfGenes_exe/rgg_to_wconfig.py @@ -9,35 +9,50 @@ import yaml from pathlib import Path ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) wconfig = {} -dag_file = 'rdag_80.yaml' +dag_file = 'test.yaml' with open(dag_file) as input_stream: random_dag = yaml.load(input_stream, Loader=yaml.Loader) graph_edges = random_dag['graph']['edges'] graph_nodes = random_dag['graph']['nodes'] +num_nodes = len(random_dag['graph']['nodes']) +num_nodes +=1 # Last node- target node only for nodes without target +graph_nodes.append({'id': str(num_nodes)}) wconfig = {} nodes_wconfig = [] - +no_output_nodes = [] for node_graph in graph_nodes: node = {} node['tasks']= [] node['name'] = 'node_id'+ node_graph['id'] node['id'] = int(node_graph['id']) task = {} + task['func'] = [] + task['inputs'] = [] + task['outputs'] = [] + task['func'].append('my_function') + task['func'].append('weighted_sleep') for edge in graph_edges: - task['func'] = [] - task['inputs'] = [] - task['outputs'] = [] - task['func'].append('my_function') - task['func'].append('weighted_sleep') - for edge in graph_edges: - if edge['source'] == node_graph['id']: - task['outputs'].append('link_'+ edge['source']+'_to_'+ edge['target'] ) - elif edge['target'] == node_graph['id']: - task['inputs'].append('link_' + edge['source']+'_to_'+ edge['target']) + if edge['source'] == node_graph['id']: + task['outputs'].append('link_'+ edge['source']+'_to_'+ edge['target']) + elif edge['target'] == node_graph['id']: + task['inputs'].append('link_' + edge['source']+'_to_'+ edge['target']) + if (len(graph_edges) == 0 or len(task['outputs']) == 0) and node_graph['id'] != str(num_nodes): + task['outputs'].append('link_'+ node_graph['id']+'_to_'+ str(num_nodes)) + no_output_nodes.append(node_graph['id']) + if node_graph['id'] == str(num_nodes): + for source in no_output_nodes: + task['inputs'].append('link_' + str(source)+ '_to_' + node_graph['id']) + + + + task['kwargs'] = {} task['kwargs'] = { 'len_output' : len(task['outputs']), 'sleep_time': 1, 'id': int(node_graph['id'])} - node['tasks'].append(task) - nodes_wconfig.append(node) + node['tasks'].append(task) + + + nodes_wconfig.append(node) + workflow_name = str('node_') + str(len(graph_nodes))+ '_' + str(len(graph_edges)) wconfig = {'workflow_name': workflow_name, 'nodes': nodes_wconfig } -- GitLab From 3374328e95c7e029c437a484f754a6106ae27c46 Mon Sep 17 00:00:00 2001 From: "th7356@kit.edu" Date: Tue, 27 Apr 2021 14:58:19 +0200 Subject: [PATCH 18/35] Add blueglue executable and readme- no edit --- Blueglue_readme.md | 38 ++++ wfGenes_exe/blueglue.ipynb | 362 +++++++++++++++++++++++++++++++++++++ 2 files changed, 400 insertions(+) create mode 100644 Blueglue_readme.md create mode 100644 wfGenes_exe/blueglue.ipynb diff --git a/Blueglue_readme.md b/Blueglue_readme.md new file mode 100644 index 0000000..94d391d --- /dev/null +++ b/Blueglue_readme.md @@ -0,0 +1,38 @@ +### Table of Content + + + + +[ 1. Blueglue](#Blueglue) +[ 2. How it works](#How-it-works) +[ 3. Get Started](#Get-Started) +[ 4. References](#References) + +### 1. Blueglue: + + +Blueglue is a user interface for WGenerator [1] (workflow generator). Its purpose is to present a simple and intuitive interface to generate and visualize workflow graphs. Blueglue runs on the web-based interactive development environment JupyterLab, which doesn't require any software installation from the user side. With this interface it is possible to upload a configuration file and visualize the results on a Jupyter notebook. + +### 2. How it works: + + +JupyterLab is a powerful tool that can interpret many file formats such as python, html and markdown [2]. It provides a series built in widgets written in python for user interfaces, like buttons and clickable links. The workflow graphs are generated by the WGenerator [1] system, which is written in python. Blueglue is mainly written in python as well, but also uses features from markdown and HTML, the code was developed on a Jupyter notebook, which also permits to run the graphic interfaces. Blueglue uses ipywidgets [3] to obtain the inputs from the user and a IPython display module to present the results. + +### 3. Get Started: + + + +drawing + +To get started with Blueglue, in the field "upload a configuration file", choose the path for a configuration file, in the json or yaml format. Then select an input path in the following field, it is possible to add multiple input paths by pressing the plus button. Choose a model for the workflow, one or multiple options are possible. To generate the workflow graph, press the button "generate graph". To visualize a preview of the configuration file, press the button "WConfig preview" . The button "edit WConfig" opens the configuration file for edition. It is possible to alter the workflow graph by editing the configuration file. + +![fig1](../jupyter/interface_images/bluglue_interface_2.jpg) + +### 4. References: + + + +[1] https://git.scc.kit.edu/th7356/wfgenes +[2] https://jupyter.org +[3] https://ipywidgets.readthedocs.io/en/latest/index.html + diff --git a/wfGenes_exe/blueglue.ipynb b/wfGenes_exe/blueglue.ipynb new file mode 100644 index 0000000..4c5006b --- /dev/null +++ b/wfGenes_exe/blueglue.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "behavioral-collection", + "metadata": {}, + "source": [ + "# Jupyter Lab Test for WGenes" + ] + }, + { + "cell_type": "markdown", + "id": "necessary-shipping", + "metadata": { + "tags": [] + }, + "source": [ + "## Welcome to BlueGlue!" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "conceptual-pension", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], + "source": [ + "from notebook import notebookapp\n", + "servers = list(notebookapp.list_running_servers())\n", + "print(servers)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "boxed-alarm", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "abdb4a9d82e647f3b21f766409a788ab", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "FileChooser(path='..', filename='', title='HTML(value='Upload a configuration file')', show_hidden='Fal…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "11a4b0b824a843f9aa0849cd908768c5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "FileChooser(path='..', filename='', title='HTML(value='Select the input path')', show_hidden='False', u…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "edd263e088e0441e9e2bcd3661efbcdf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(icon='plus', style=ButtonStyle(), tooltip='Press for adding additional input paths')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e1e4da54dabe42ffb999cdf4b7880b0f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "23118b38011c4b5a813881cde2d1287d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "SelectMultiple(description='Choose a model:', index=(0,), options=('FireWorks', 'SimStack', 'Dask', 'Par…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3039823a299045b1b0acfcc0f2341361", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Generate Graph', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4fdbd55b23fd43b390de478d6f898c98", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import os\n", + "import ipywidgets as widgets\n", + "import wgenerator\n", + "import json, yaml\n", + "from ipywidgets import Button, HBox, VBox\n", + "from IPython.display import HTML, display, clear_output, Markdown as md, JSON, FileLink\n", + "from ipyfilechooser import FileChooser\n", + "\n", + "# Getting the arguments with FileChooser and SelectMultiple\n", + "config = FileChooser('')\n", + "inputp = FileChooser('')\n", + "\n", + "style = {'description_width': 'initial'}\n", + "model = widgets.SelectMultiple(\n", + " options=['FireWorks', 'SimStack', 'Dask', 'Parsl'],\n", + " value=['FireWorks'],\n", + " #rows=10,\n", + " description='Choose a model:',\n", + " disabled=False,\n", + " style=style\n", + ")\n", + "\n", + "# Set default paths for file chooser\n", + "config.default_path= '../'\n", + "inputp.default_path = '../'\n", + "\n", + "# Show folder icons for file chooser\n", + "config.use_dir_icons = True\n", + "inputp.use_dir_icons = True\n", + "\n", + "# Set multiple file filter patterns for config file\n", + "config.filter_pattern = ['*.txt','*.yaml','*.json']\n", + "\n", + "# Set titles for choosers\n", + "config.title = 'Upload a configuration file'\n", + "inputp.title = 'Select the input path'\n", + "\n", + "#Button for runing wgenerator\n", + "button = widgets.Button(description='Generate Graph', style=style)\n", + "output = widgets.Output()\n", + "\n", + "#Button for displaying Wconfig file \n", + "dis_wconfig = widgets.Button(description='Preview WConfig')\n", + "output2 = widgets.Output()\n", + "\n", + "#Button for editing Wconfig file\n", + "edit_wconfig = widgets.Button(description='Edit WConfig')\n", + "output4 = widgets.Output()\n", + "\n", + "#Button for adding another input path\n", + "plus_input = widgets.Button(tooltip='Press for adding additional input paths', icon='plus', style=style)\n", + "output3 = widgets.Output()\n", + "\n", + "#Display buttons\n", + "display(config)\n", + "display(inputp)\n", + "display(plus_input, output3)\n", + "display(model)\n", + "display(button, output)\n", + "\n", + "#Prepare args to wgenerator\n", + "def prepare_args(config, input):\n", + " args = {'workflowconfig' : config.selected, 'inputpath': inputp.selected_path , 'wms':'all'}\n", + " return args\n", + "\n", + "#Run wgenerator\n", + "def run_wgenerator(args):\n", + " png=wgenerator.run_wfgenes(args)\n", + " return png\n", + " \n", + "#Display graph\n", + "def display_graph(graph):\n", + " #Get the path from output variable\n", + " file = open(graph, \"rb\") \n", + " image = file.read()\n", + " graph = widgets.Image(\n", + " value=image,\n", + " format='png',\n", + " height=100,\n", + " )\n", + " display(graph)\n", + " \n", + " \n", + "#Define event when generate graph button is clicked\n", + "def on_button_clicked(b):\n", + " with output:\n", + " #Clear cell output\n", + " for i in range(10):\n", + " clear_output(wait=True) \n", + " args = prepare_args(config, inputp)\n", + " png = run_wgenerator(args)\n", + " path_split = config.selected.split('wfgenes')\n", + " suffix_path = len(path_split) - 1\n", + " config_path = '..' + path_split[suffix_path]\n", + " path = FileLink(config_path)\n", + " display_graph(png)\n", + " #display(dis_wconfig, output2)\n", + " #print('Change the graph by editing the WConfig file:')\n", + " #display(path)\n", + " display(HBox([dis_wconfig, edit_wconfig]), output2, output4, path)\n", + "\n", + "#Define event when WConfig preview button is clicked\n", + "def on_button_clicked_2(b_2):\n", + " with output2:\n", + " #Clear cell output\n", + " for i in range(10):\n", + " clear_output(wait=True) \n", + " config_file = open(config.selected, \"r\")\n", + " config_content = config_file.read()\n", + " config_split = config.selected.split('.')\n", + " suffix_dot = len(config_split) - 1\n", + " if config_split[suffix_dot] == 'json': \n", + " config_dic = json.loads(config_content)\n", + " elif config_split[suffix_dot] == 'yaml':\n", + " config_dic = yaml.load(config_content, Loader=yaml.Loader)\n", + " display(JSON(config_dic))\n", + " \n", + "#Define even when plus input button in clicked\n", + "inputpath = []\n", + "def on_button_clicked_3(b3):\n", + " inputpath.append(FileChooser(''))\n", + " inputpath[len(inputpath)-1].default_path = '../'\n", + " inputpath[len(inputpath)-1].use_dir_icons = True\n", + " with output3:\n", + " display(inputpath[len(inputpath)-1])\n", + "\n", + "button.on_click(on_button_clicked)\n", + "dis_wconfig.on_click(on_button_clicked_2)\n", + "plus_input.on_click(on_button_clicked_3)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "positive-rider", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9567a39ad664483ba776ce6eefa9d5f4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(icon='plus', style=ButtonStyle(), tooltip='Click me'), Output(), Button(button_style='in…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "button1 = widgets.Button(tooltip='Click me', icon='plus')\n", + "output1 = widgets.Output()\n", + "\n", + "button2 = widgets.Button(description='Test2', button_style='info', style=style) # 'success', 'info', 'warning', 'danger' or ''\n", + "output2 = widgets.Output()\n", + "\n", + "HBox([button1, output1, button2, output2])" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "controlling-tract", + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m import ../work/wfgenes/intro_examples/multihith/workflow_version_1.json\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "source": [ + "import ../work/wfgenes/intro_examples/multihith/workflow_version_1.json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "standard-joseph", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab From aeaba883e52228955cbe5a12eceb93ba59a328e1 Mon Sep 17 00:00:00 2001 From: "th7356@kit.edu" Date: Mon, 3 May 2021 09:19:12 +0200 Subject: [PATCH 19/35] update tmp 1. Add width calculator for sequntial step of model in dask and parsk generator --- .vscode/launch cluster.json | 117 - .vscode/launch.json | 22 +- .vscode/settings.json | 2 +- blueglue.ipynb | 285 - .../rgg/cmd_parsl.slurm.1619568970.48925.sh | 1 + intro_examples/rgg/lib/my_function.py | 4 +- intro_examples/rgg/logfile.log | 150 + intro_examples/rgg/monitoring.db | Bin 0 -> 15073280 bytes intro_examples/rgg/monitoring_1.db | Bin 0 -> 2981888 bytes intro_examples/rgg/rdag_10.json | 153 + intro_examples/rgg/rdag_10.yaml | 52 +- intro_examples/rgg/rdag_1000.yaml | 4318 ++ intro_examples/rgg/rdag_160.yaml | 163 + intro_examples/rgg/rdag_200.yaml | 701 + intro_examples/rgg/rdag_2000.json | 42393 ++++++++++++++ intro_examples/rgg/rdag_2000.yaml | 23816 ++++++++ intro_examples/rgg/rdag_4.json | 40 + intro_examples/rgg/rdag_4.yaml | 19 + intro_examples/rgg/rdag_500.json | 4468 ++ intro_examples/rgg/rdag_500.yaml | 2279 + intro_examples/rgg/wconfig.yaml | 7432 ++- .../node_1001_1105/DOT/node_1001_1105.dot | 12306 ++++ .../node_1001_1105/DOT/node_1001_1105.pdf | Bin 0 -> 285555 bytes .../node_1001_1105/DOT/node_1001_1105.png | Bin 0 -> 4177611 bytes .../Dask/node_1001_1105_dask.py | 3074 + .../FireWorks/node_1001_1105.yaml | 17127 ++++++ .../Parsl/node_1001_1105_parsl.py | 3153 + .../node_11_23/DOT/node_11_23.dot | 162 + .../node_11_23/DOT/node_11_23.pdf | Bin 0 -> 8346 bytes .../node_11_23/DOT/node_11_23.png | Bin 0 -> 144485 bytes .../node_11_23/FireWorks/node_11_23.yaml | 213 + .../node_11_34/DOT/node_11_34.dot | 198 + .../node_11_34/DOT/node_11_34.pdf | Bin 0 -> 9881 bytes .../node_11_34/DOT/node_11_34.png | Bin 0 -> 234501 bytes .../node_11_34/FireWorks/node_11_34.yaml | 250 + .../node_11_39/DOT/node_11_39.dot | 210 + .../node_11_39/DOT/node_11_39.pdf | Bin 0 -> 10901 bytes .../node_11_39/DOT/node_11_39.png | Bin 0 -> 324621 bytes .../node_11_39/FireWorks/node_11_39.yaml | 262 + .../node_2001_2296/DOT/node_2001_2296.dot | 24641 ++++++++ .../node_2001_2296/DOT/node_2001_2296.pdf | Bin 0 -> 594170 bytes .../node_2001_2296/DOT/node_2001_2296.png | Bin 0 -> 3542487 bytes .../FireWorks/node_2001_2296.yaml | 34284 +++++++++++ .../node_2001_3567/DOT/node_2001_3567.dot | 27620 +++++++++ .../node_2001_3567/DOT/node_2001_3567.pdf | Bin 0 -> 1027215 bytes .../node_2001_3567/DOT/node_2001_3567.png | Bin 0 -> 11781042 bytes .../node_2001_3877/DOT/node_2001_3877.dot | 28634 +++++++++ .../FireWorks/node_2001_3877.yaml | 38421 ++++++++++++ .../node_2001_7271/DOT/node_2001_7271.dot | 38495 ++++++++++++ .../FireWorks/node_2001_7271.yaml | 48392 ++++++++++++++++ .../node_501_592/DOT/node_501_592.dot | 6182 ++ .../node_501_592/DOT/node_501_592.pdf | Bin 0 -> 142607 bytes .../node_501_592/DOT/node_501_592.png | Bin 0 -> 4370193 bytes .../node_501_592/Dask/node_501_592_dask.py | 1573 + .../node_501_592/FireWorks/node_501_592.yaml | 8599 +++ .../node_501_592/Parsl/node_501_592_parsl.py | 1675 + .../wfGenes_output/node_5_4/DOT/node_5_4.dot | 63 + .../wfGenes_output/node_5_4/DOT/node_5_4.pdf | Bin 0 -> 5751 bytes .../wfGenes_output/node_5_4/DOT/node_5_4.png | Bin 0 -> 36037 bytes .../node_5_4/FireWorks/node_5_4.yaml | 85 + wfGenes_exe/dask_wfgenes.py | 20 +- wfGenes_exe/parsl_wfgenes.py | 14 +- wfGenes_exe/rgg_to_wconfig.py | 2 +- wfGenes_exe/setenv_cluster.sh | 21 + 64 files changed, 381645 insertions(+), 446 deletions(-) delete mode 100644 .vscode/launch cluster.json delete mode 100644 blueglue.ipynb create mode 100755 intro_examples/rgg/cmd_parsl.slurm.1619568970.48925.sh create mode 100644 intro_examples/rgg/logfile.log create mode 100644 intro_examples/rgg/monitoring.db create mode 100644 intro_examples/rgg/monitoring_1.db create mode 100644 intro_examples/rgg/rdag_10.json create mode 100644 intro_examples/rgg/rdag_1000.yaml create mode 100644 intro_examples/rgg/rdag_160.yaml create mode 100644 intro_examples/rgg/rdag_200.yaml create mode 100644 intro_examples/rgg/rdag_2000.json create mode 100644 intro_examples/rgg/rdag_2000.yaml create mode 100644 intro_examples/rgg/rdag_4.json create mode 100644 intro_examples/rgg/rdag_4.yaml create mode 100644 intro_examples/rgg/rdag_500.json create mode 100644 intro_examples/rgg/rdag_500.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_1001_1105/DOT/node_1001_1105.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_1001_1105/DOT/node_1001_1105.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_1001_1105/DOT/node_1001_1105.png create mode 100644 intro_examples/rgg/wfGenes_output/node_1001_1105/Dask/node_1001_1105_dask.py create mode 100644 intro_examples/rgg/wfGenes_output/node_1001_1105/FireWorks/node_1001_1105.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_1001_1105/Parsl/node_1001_1105_parsl.py create mode 100644 intro_examples/rgg/wfGenes_output/node_11_23/DOT/node_11_23.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_11_23/DOT/node_11_23.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_11_23/DOT/node_11_23.png create mode 100644 intro_examples/rgg/wfGenes_output/node_11_23/FireWorks/node_11_23.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_11_34/DOT/node_11_34.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_11_34/DOT/node_11_34.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_11_34/DOT/node_11_34.png create mode 100644 intro_examples/rgg/wfGenes_output/node_11_34/FireWorks/node_11_34.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_11_39/DOT/node_11_39.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_11_39/DOT/node_11_39.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_11_39/DOT/node_11_39.png create mode 100644 intro_examples/rgg/wfGenes_output/node_11_39/FireWorks/node_11_39.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_2296/DOT/node_2001_2296.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_2296/DOT/node_2001_2296.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_2296/DOT/node_2001_2296.png create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_2296/FireWorks/node_2001_2296.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_3567/DOT/node_2001_3567.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_3567/DOT/node_2001_3567.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_3567/DOT/node_2001_3567.png create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_3877/DOT/node_2001_3877.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_3877/FireWorks/node_2001_3877.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_7271/DOT/node_2001_7271.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_2001_7271/FireWorks/node_2001_7271.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_501_592/DOT/node_501_592.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_501_592/DOT/node_501_592.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_501_592/DOT/node_501_592.png create mode 100644 intro_examples/rgg/wfGenes_output/node_501_592/Dask/node_501_592_dask.py create mode 100644 intro_examples/rgg/wfGenes_output/node_501_592/FireWorks/node_501_592.yaml create mode 100644 intro_examples/rgg/wfGenes_output/node_501_592/Parsl/node_501_592_parsl.py create mode 100644 intro_examples/rgg/wfGenes_output/node_5_4/DOT/node_5_4.dot create mode 100644 intro_examples/rgg/wfGenes_output/node_5_4/DOT/node_5_4.pdf create mode 100644 intro_examples/rgg/wfGenes_output/node_5_4/DOT/node_5_4.png create mode 100644 intro_examples/rgg/wfGenes_output/node_5_4/FireWorks/node_5_4.yaml create mode 100644 wfGenes_exe/setenv_cluster.sh diff --git a/.vscode/launch cluster.json b/.vscode/launch cluster.json deleted file mode 100644 index fc1b0d1..0000000 --- a/.vscode/launch cluster.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - - { - "name": "Python: run_coffee", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/intro_examples/coffee-wf/output/wfgenes_coffee/DASK/wfgenes_coffee_DASK.py", - "cwd": "${workspaceRoot}/intro_examples/coffee-wf/", - "args": [], - "console": "integratedTerminal" - }, - - { - "name": "Python: run_multihith", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/intro_examples/multihith/output/energy_slab_ver_2/DASK/energy_slab_ver_2_DASK.py", - "cwd": "${workspaceRoot}/intro_examples/multihith/runtime_input/adsorption_slab_version_2", - "args": [], - "console": "integratedTerminal" - }, - - - - { - "name": "Python: run_foreach", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/intro_examples/foreach_sample/output/foreach_sample/PARSL/foreach_sample_parsl.py", - "cwd": "${workspaceRoot}/intro_examples/foreach_sample/input", - "args": [], - "console": "integratedTerminal" - }, - - { - "name": "Python: run_simple_test", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/intro_examples/foreach_sample/output/simple_test/DASK/simple_test_DASK.py", - "cwd": "${workspaceRoot}/intro_examples/foreach_sample/input", - "args": [], - "console": "integratedTerminal" - }, - - { - "name": "Python: run_multihith", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/intro_examples/multihith/output/energy_slab_ver_2/DASK/energy_slab_ver_2_DASK.py", - "cwd": "${workspaceRoot}/intro_examples/multihith/runtime_input/adsorption_slab_version_2", - "args": [], - "console": "integratedTerminal" - }, - - - { - "name": "Python: foreach_generation", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", - "cwd": "${workspaceRoot}/intro_examples/foreach_sample", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/foreach_sample/input/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/foreach_sample/input/","--outputpath","output", "--wms", "all"], - "console": "integratedTerminal" - }, - - { - "name": "Python: simple_test_generation", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", - "cwd": "${workspaceRoot}/intro_examples/foreach_sample", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/foreach_sample/input/wconfig_simple.yaml", "--inputpath","${workspaceRoot}/intro_examples/foreach_sample/input/","--outputpath","output", "--wms", "all"], - "console": "integratedTerminal" - }, - - { - "name": "Python: slab_ver_2_generation", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", - "cwd": "${workspaceRoot}/intro_examples/multihith", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/multihith/workflow_version_2.json", "--inputpath","${workspaceRoot}/intro_examples/multihith/runtime_input/adsorption_slab_version_2/","--outputpath","output", "--wms", "all"], - "console": "integratedTerminal" - }, - - { - "name": "Python: coffee_example_generation", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", - "cwd": "${workspaceRoot}/intro_examples/coffee-wf", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/coffee-wf/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/coffee-wf/","--outputpath","output", "--wms", "all"], - "console": "integratedTerminal" - } - - { - "name": "Python: wfGenes_unittest", - "type": "python", - "request": "launch", - "program": "${workspaceRoot}/test/wfgenes_test.py", - "cwd": "${workspaceRoot}/wfGenes_exe", - "args": ["-v"], - "console": "integratedTerminal" - } - - - - - - ] -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 4e763b3..97dfcc0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,6 +6,19 @@ "configurations": [ + + { + "name": "Python: RUN_THIS", + "type": "python", + "request": "launch", + "program": "${file}", + "cwd": "", + "args": [], + "console": "integratedTerminal" + }, + + + { "name": "Python: blueglue", "type": "python", @@ -20,7 +33,7 @@ "name": "Python: run_rgg", "type": "python", "request": "launch", - "program": "${workspaceRoot}/intro_examples/rgg/wfGenes_output/node_4_4/Dask/node_4_4_dask.py", + "program": "${workspaceRoot}/intro_examples/rgg/wfGenes_output/node_501_592/Parsl/node_501_592_parsl.py", "cwd": "", "args": [], "console": "integratedTerminal" @@ -146,7 +159,7 @@ "request": "launch", "program": "${workspaceRoot}/wfGenes_exe/wgenerator.py", "cwd": "${workspaceRoot}/intro_examples/rgg", - "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "Dask"], + "args": ["--workflowconfig", "${workspaceRoot}/intro_examples/rgg/wconfig.yaml", "--inputpath","${workspaceRoot}/intro_examples/rgg/", "--wms", "FireWorks"], "console": "integratedTerminal" }, @@ -156,7 +169,7 @@ "type": "python", "request": "launch", "cwd": "${workspaceRoot}/intro_examples/rgg", - "program": "/home/mehdi/work/gitlab/workflow_generator/wfGenes_exe/rgg_to_wconfig.py", + "program": "/home/kit/scc/th7356/work/GITLAB/workflow_generator/wfGenes_exe/rgg_to_wconfig.py", "console": "integratedTerminal" }, @@ -169,9 +182,6 @@ "args": ["-v"], "console": "integratedTerminal" } - - - ] diff --git a/.vscode/settings.json b/.vscode/settings.json index 0ff692c..6c11140 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,4 @@ { - "python.pythonPath": "/home/mehdi/tools/anaconda3/envs/myenv/bin/python", + "python.pythonPath": "/home/kit/scc/th7356/software/anaconda3/envs/myenv/bin/python", "jupyter.jupyterServerType": "local" } \ No newline at end of file diff --git a/blueglue.ipynb b/blueglue.ipynb deleted file mode 100644 index d955ac9..0000000 --- a/blueglue.ipynb +++ /dev/null @@ -1,285 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Jupyter Lab Test for WGenes" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## Welcome to Blue Glue!" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f9121b99d8b747c082e1c0e9d70ef5b1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FileChooser(path='.', filename='', title='HTML(value='Upload a configuration file')', show_hidden='Fals…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6ec93edf49fc44e5ba9b81fad65ee9a5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FileChooser(path='.', filename='', title='HTML(value='Select the input path')', show_hidden='False', us…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f91438743d234358867f905557de2dfe", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FileChooser(path='.', filename='', title='HTML(value='Select the output path')', show_hidden='False', u…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8a6d10f023ee436ca5f112924d7bc0b3", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "SelectMultiple(description='Choose a model:', index=(0,), options=('all', 'FireWorks', 'SimStack', 'DASK…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "535913a021284dbfac026ac05c79d7b2", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(description='Generate Graph', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a57a4090e8a14fafb7302ae0aa579e3a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output()" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import os\n", - "import ipywidgets as widgets\n", - "from IPython.display import HTML, display, clear_output, Markdown as md\n", - "from ipyfilechooser import FileChooser\n", - "import wgenerator\n", - "# Getting the arguments with FileChooser and SelectMultiple\n", - "config = FileChooser('')\n", - "inputp = FileChooser('')\n", - "outputp = FileChooser('')\n", - "\n", - "style = {'description_width': 'initial'}\n", - "model = widgets.SelectMultiple(\n", - " options=['all', 'FireWorks', 'SimStack', 'DASK', 'PARSL'],\n", - " value=['all'],\n", - " #rows=10,\n", - " description='Choose a model:',\n", - " disabled=False,\n", - " style=style\n", - ")\n", - "\n", - "# Set default paths for file chooser\n", - "config.default_path = './'\n", - "inputp.default_path = './'\n", - "outputp.default_path = './'\n", - "\n", - "# Show folder icons for file chooser\n", - "config.use_dir_icons = True\n", - "inputp.use_dir_icons = True\n", - "outputp.use_dir_icons = True\n", - "\n", - "# Set multiple file filter patterns for config file\n", - "config.filter_pattern = ['*.txt','*.yaml','*.json']\n", - "\n", - "# Set titles for choosers\n", - "config.title = 'Upload a configuration file'\n", - "inputp.title = 'Select the input path'\n", - "outputp.title = 'Select the output path'\n", - "\n", - "#Button for runing wgenerator\n", - "button = widgets.Button(description='Generate Graph', style=style)\n", - "output = widgets.Output()\n", - "\n", - "#Display buttons\n", - "display(config)\n", - "display(inputp)\n", - "display(outputp)\n", - "display(model)\n", - "display(button, output)\n", - "\n", - "#Prepare args to wgenerator\n", - "def prepare_args(model, config, input, outputp):\n", - " models = ''\n", - " for item in model.value:\n", - " models = models + ' ' + item\n", - "\n", - " #args = '--workflowconfig ' + config.selected + ' --inputath ' + inputp.selected_path + ' --outputpath ' + outputp.selected_path \\\n", - " # + ' --wms ' + models #model.value[0] = 'all'\n", - " \n", - " args = {'workflowconfig' : config.selected, 'inputpath': inputp.selected_path , 'outputpath':outputp.selected_path, 'wms':'all'}\n", - " \n", - " \n", - " #print(args)\n", - " return args\n", - "\n", - "#Run wgenerator\n", - "def run_wgenerator(args):\n", - " #s=!python wfGenes_exe/wgenerator.py $args\n", - " png=wgenerator.run_wfgenes(args)\n", - " return png\n", - " \n", - "#Display graph\n", - "def display_graph(graph_png):\n", - " #Get the path from output variable\n", - " file = open(graph_png, \"rb\") \n", - " image = file.read()\n", - " graph = widgets.Image(\n", - " value=image,\n", - " format='png',\n", - " height=100,\n", - " )\n", - " display(graph_png)\n", - " \n", - "#Define event when generate graph button is clicked\n", - "def on_button_clicked(b):\n", - " with output:\n", - " \n", - " #Clear cell output\n", - " for i in range(10):\n", - " clear_output(wait=True)\n", - " \n", - " args = prepare_args(model, config, inputp, outputp)\n", - "\n", - " png = run_wgenerator(args)\n", - " print(png)\n", - " #display_graph(png)\n", - " \n", - "\n", - "button.on_click(on_button_clicked)\n", - "\n", - "#Create branch in the GIT repository, named blueglue" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Edit the [WConfig](intro_examples/foreach_sample/input/wconfig.yaml) file for altering the graph " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/intro_examples/rgg/cmd_parsl.slurm.1619568970.48925.sh b/intro_examples/rgg/cmd_parsl.slurm.1619568970.48925.sh new file mode 100755 index 0000000..dd2e466 --- /dev/null +++ b/intro_examples/rgg/cmd_parsl.slurm.1619568970.48925.sh @@ -0,0 +1 @@ +process_worker_pool.py --max_workers=80 -a uc2n994.localdomain -p 0 -c 1.0 -m None --poll 10 --task_port=54353 --result_port=54442 --logdir=/pfs/data5/home/kit/scc/th7356/work/GITLAB/workflow_generator/intro_examples/rgg/runinfo/064/frontera_htex --block_id=0 --hb_period=30 --hb_threshold=120 diff --git a/intro_examples/rgg/lib/my_function.py b/intro_examples/rgg/lib/my_function.py index 2999753..dc35f89 100644 --- a/intro_examples/rgg/lib/my_function.py +++ b/intro_examples/rgg/lib/my_function.py @@ -1,6 +1,7 @@ #from parsl import python_app import time + #@python_app def weighted_sleep(*args, **kwargs): if 'len_output' in kwargs: @@ -8,7 +9,8 @@ def weighted_sleep(*args, **kwargs): else: output_number = 1 if 'sleep_time' in kwargs: - sleep_time = kwargs['sleep_time'] + #sleep_time = kwargs['sleep_time'] + sleep_time = 60 else: sleep_time = 1 id = kwargs['id'] diff --git a/intro_examples/rgg/logfile.log b/intro_examples/rgg/logfile.log new file mode 100644 index 0000000..d53b907 --- /dev/null +++ b/intro_examples/rgg/logfile.log @@ -0,0 +1,150 @@ +2021-04-27 22:19:57 +Filename : rdag_1000.yaml +Vertices : 1000 +Total Edges : 393 +Max Edge : 1 +Min Edge : 0 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- +2021-04-27 22:26:40 +Filename : rdag_1000_coupled.yaml +Vertices : 1000 +Total Edges : 1105 +Max Edge : 3 +Min Edge : 0 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- +2021-04-28 00:13:23 +Filename : rdag_500.yaml +Vertices : 500 +Total Edges : 592 +Max Edge : 3 +Min Edge : 1 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- +2021-04-28 22:11:10 +Filename : rdag_2000.yaml +Vertices : 2000 +Total Edges : 3877 +Max Edge : 5 +Min Edge : 2 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 02 seconds +------------------------------- +2021-04-28 22:36:06 +Filename : rdag_2000.yaml +Vertices : 2000 +Total Edges : 2296 +Max Edge : 3 +Min Edge : 1 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 01 seconds +------------------------------- +2021-04-28 23:00:59 +Filename : rdag_2000.yaml +Vertices : 2000 +Total Edges : 7277 +Max Edge : 10 +Min Edge : 1 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 03 seconds +------------------------------- +2021-04-28 23:20:44 +Filename : rdag_10.yaml +Vertices : 10 +Total Edges : 39 +Max Edge : 9 +Min Edge : 5 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- +2021-04-28 23:27:15 +Filename : rdag_4.yaml +Vertices : 4 +Total Edges : 4 +Max Edge : 3 +Min Edge : 1 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- +2021-04-28 23:45:07 +Filename : rdag_10.yaml +Vertices : 10 +Total Edges : 34 +Max Edge : 9 +Min Edge : 1 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- +2021-04-29 00:12:41 +Filename : rdag_10.yaml +Vertices : 10 +Total Edges : 23 +Max Edge : 5 +Min Edge : 4 +Directed : True +Signed : False +Multigraph : False +Self Loop : False +Weighted : True +Max Weight : 1 +Min Weight : 1 +Elapsed Time : 00 days, 00 hour, 00 minutes, 00 seconds +------------------------------- diff --git a/intro_examples/rgg/monitoring.db b/intro_examples/rgg/monitoring.db new file mode 100644 index 0000000000000000000000000000000000000000..7e20aa2b90ab1241fa0b8baae836a83a6f57768c GIT binary patch literal 15073280 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%0DSw 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�E?T%A)+P&^RyS)cJO4`f) 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

Li;H%N*iiuE>;fTP5-zB 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�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