"
+ ]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "execution_count": 21
+ "source": [
+ "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n",
+ "delayed_object_lst[-1].draw()"
+ ]
},
{
- "id": "1c2760b6-96b4-4f44-ac49-a229d4a0cf67",
"cell_type": "code",
- "source": "delayed_object_lst[-1].pull()",
+ "execution_count": 22,
+ "id": "1c2760b6-96b4-4f44-ac49-a229d4a0cf67",
"metadata": {
"trusted": true
},
@@ -346,18 +772,50 @@
{
"name": "stdout",
"output_type": "stream",
- "text": "The job generate_mesh_0b48cf5155cd6802c17d20bb58104132 was saved and received the ID: 1\nThe job convert_to_xdmf_29ad6ec6927268429dc9aef8166fde43 was saved and received the ID: 2\nThe job poisson_a0224b23ceb2119d105a5d98ef37f93e was saved and received the ID: 3\nThe job plot_over_line_82b37a42e0747f11d9a7f6318f63ac6b was saved and received the ID: 4\nThe job substitute_macros_874fc185ecec04b4cb9537c58b7efb7b was saved and received the ID: 5\nThe job compile_paper_3cee534ffe692833d37faf1fd2170cb6 was saved and received the ID: 6\n"
+ "text": [
+ "The job generate_mesh_0b48cf5155cd6802c17d20bb58104132 was saved and received the ID: 1\n",
+ "The job convert_to_xdmf_29ad6ec6927268429dc9aef8166fde43 was saved and received the ID: 2\n",
+ "The job poisson_a0224b23ceb2119d105a5d98ef37f93e was saved and received the ID: 3\n",
+ "The job plot_over_line_82b37a42e0747f11d9a7f6318f63ac6b was saved and received the ID: 4\n",
+ "The job substitute_macros_874fc185ecec04b4cb9537c58b7efb7b was saved and received the ID: 5\n",
+ "The job compile_paper_3cee534ffe692833d37faf1fd2170cb6 was saved and received the ID: 6\n"
+ ]
},
{
- "execution_count": 22,
- "output_type": "execute_result",
"data": {
- "text/plain": "'/home/jovyan/postprocessing/paper.pdf'"
+ "text/plain": [
+ "'/home/jovyan/postprocessing/paper.pdf'"
+ ]
},
- "metadata": {}
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
- "execution_count": 22
+ "source": [
+ "delayed_object_lst[-1].pull()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "ADIS",
+ "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.10.12"
}
- ]
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
}
diff --git a/example_workflows/quantum_espresso/aiida.ipynb b/example_workflows/quantum_espresso/aiida.ipynb
index 8e4abce..925b7e4 100644
--- a/example_workflows/quantum_espresso/aiida.ipynb
+++ b/example_workflows/quantum_espresso/aiida.ipynb
@@ -1,59 +1,54 @@
{
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "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.12.8"
- }
- },
- "nbformat_minor": 4,
- "nbformat": 4,
"cells": [
{
"cell_type": "markdown",
- "source": "# Aiida",
- "metadata": {}
+ "metadata": {},
+ "source": [
+ "# Aiida"
+ ]
},
{
"cell_type": "markdown",
- "source": "## Define workflow with aiida",
- "metadata": {}
+ "metadata": {},
+ "source": [
+ "## Define workflow with aiida"
+ ]
},
{
"cell_type": "code",
- "source": "from python_workflow_definition.aiida import write_workflow_json\nfrom python_workflow_definition.shared import get_dict, get_list\n\nfrom aiida import load_profile, orm\n\nload_profile()\n\nworkflow_json_filename = \"aiida_qe.json\"",
+ "execution_count": 15,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 1
+ "source": [
+ "from rich.pretty import pprint\n",
+ "from python_workflow_definition.aiida import AiidaPwdConverter\n",
+ "from python_workflow_definition.shared import get_dict, get_list\n",
+ "\n",
+ "from aiida import load_profile, orm\n",
+ "\n",
+ "load_profile()\n",
+ "\n",
+ "workflow_json_filename = \"aiida_qe.json\""
+ ]
},
{
"cell_type": "code",
- "source": "from aiida_workgraph import task, WorkGraph",
+ "execution_count": 2,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 2
+ "source": [
+ "from aiida_workgraph import task, WorkGraph"
+ ]
},
{
- "metadata": {},
"cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
"outputs": [],
- "execution_count": null,
"source": [
"from workflow import (\n",
" generate_structures,\n",
@@ -64,136 +59,499 @@
]
},
{
- "metadata": {},
"cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
"outputs": [],
- "execution_count": null,
- "source": "calculate_qe = task(outputs=[\"energy\", \"volume\", \"structure\"])(_calculate_qe)"
+ "source": [
+ "calculate_qe = task(outputs=[\"energy\", \"volume\", \"structure\"])(_calculate_qe)"
+ ]
},
{
- "metadata": {},
"cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
"outputs": [],
- "execution_count": null,
- "source": "wg = WorkGraph(\"wg-qe\")"
+ "source": [
+ "wg = WorkGraph(\"wg-qe\")"
+ ]
},
{
"cell_type": "markdown",
- "source": "### Prepare the inputs",
- "metadata": {}
+ "metadata": {},
+ "source": [
+ "### Prepare the inputs"
+ ]
},
{
"cell_type": "code",
- "source": "element = orm.Str(\"Al\")\na = orm.Float(4.04)\ncubic = orm.Bool(True)\nrelax_workdir = orm.Str(\"mini\")\npseudopotentials = orm.Dict({\"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"})\nkpts = orm.List([3, 3, 3])\ncalc_type_relax = orm.Str(\"vc-relax\")\ncalc_type_scf = orm.Str(\"scf\")\nsmearing = orm.Float(0.02)\nstrain_lst = orm.List([0.9, 0.95, 1.0, 1.05, 1.1])",
+ "execution_count": 6,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 6
+ "source": [
+ "element = orm.Str(\"Al\")\n",
+ "a = orm.Float(4.04)\n",
+ "cubic = orm.Bool(True)\n",
+ "relax_workdir = orm.Str(\"mini\")\n",
+ "pseudopotentials = orm.Dict({\"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"})\n",
+ "kpts = orm.List([3, 3, 3])\n",
+ "calc_type_relax = orm.Str(\"vc-relax\")\n",
+ "calc_type_scf = orm.Str(\"scf\")\n",
+ "smearing = orm.Float(0.02)\n",
+ "strain_lst = orm.List([0.9, 0.95, 1.0, 1.05, 1.1])"
+ ]
},
{
"cell_type": "markdown",
- "source": "### Actual tasks to construct the EOS workflow",
- "metadata": {}
+ "metadata": {},
+ "source": [
+ "### Actual tasks to construct the EOS workflow"
+ ]
},
{
"cell_type": "code",
- "source": "get_bulk_structure_task = wg.add_task(\n get_bulk_structure,\n name=\"get_bulk_structure\",\n element=element,\n a=a,\n cubic=cubic,\n)",
+ "execution_count": 7,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 7
+ "source": [
+ "get_bulk_structure_task = wg.add_task(\n",
+ " get_bulk_structure,\n",
+ " name=\"get_bulk_structure\",\n",
+ " element=element,\n",
+ " a=a,\n",
+ " cubic=cubic,\n",
+ ")"
+ ]
},
{
"cell_type": "code",
- "source": "relax_prepare_input_dict_task = wg.add_task(\n get_dict,\n name=\"relax_get_dict\",\n structure=get_bulk_structure_task.outputs.result,\n calculation=calc_type_relax,\n kpts=kpts,\n pseudopotentials=pseudopotentials,\n smearing=smearing,\n)\n\nrelax_task = wg.add_task(\n calculate_qe,\n name=\"mini\",\n input_dict=relax_prepare_input_dict_task.outputs.result,\n working_directory=relax_workdir,\n)",
+ "execution_count": 8,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 8
+ "source": [
+ "relax_prepare_input_dict_task = wg.add_task(\n",
+ " get_dict,\n",
+ " name=\"relax_get_dict\",\n",
+ " structure=get_bulk_structure_task.outputs.result,\n",
+ " calculation=calc_type_relax,\n",
+ " kpts=kpts,\n",
+ " pseudopotentials=pseudopotentials,\n",
+ " smearing=smearing,\n",
+ ")\n",
+ "\n",
+ "relax_task = wg.add_task(\n",
+ " calculate_qe,\n",
+ " name=\"mini\",\n",
+ " input_dict=relax_prepare_input_dict_task.outputs.result,\n",
+ " working_directory=relax_workdir,\n",
+ ")"
+ ]
},
{
"cell_type": "code",
- "source": "generate_structures_task = wg.add_task(\n generate_structures,\n name=\"generate_structures\",\n structure=relax_task.outputs.structure,\n strain_lst=strain_lst,\n)",
+ "execution_count": 9,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 9
+ "source": [
+ "generate_structures_task = wg.add_task(\n",
+ " generate_structures,\n",
+ " name=\"generate_structures\",\n",
+ " structure=relax_task.outputs.structure,\n",
+ " strain_lst=strain_lst,\n",
+ ")"
+ ]
},
{
"cell_type": "code",
- "source": "get_volumes_task = wg.add_task(get_list, name=\"get_volumes\")",
+ "execution_count": 10,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 10
+ "source": [
+ "get_volumes_task = wg.add_task(get_list, name=\"get_volumes\")"
+ ]
},
{
"cell_type": "code",
- "source": "get_energies_task = wg.add_task(get_list, name=\"get_energies\")",
+ "execution_count": 11,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 11
+ "source": [
+ "get_energies_task = wg.add_task(get_list, name=\"get_energies\")"
+ ]
},
{
"cell_type": "code",
- "source": "strain_dir_tasks, scf_qe_tasks, scf_get_dict_tasks = [], [], []\n\nfor i, strain in enumerate(strain_lst):\n\n structure_key = f\"s_{i}\"\n strain_dir = orm.Str(f\"strain_{i}\")\n generate_structures_task.add_output(\"workgraph.any\", structure_key)\n\n scf_prepare_input_dict_task = wg.add_task(\n get_dict,\n name=f\"get_dict_{i}\",\n structure=generate_structures_task.outputs[structure_key],\n calculation=calc_type_scf,\n kpts=kpts,\n pseudopotentials=pseudopotentials,\n smearing=smearing,\n )\n\n scf_qe_task = wg.add_task(\n calculate_qe,\n name=f\"qe_{i}\",\n input_dict=scf_prepare_input_dict_task.outputs.result,\n working_directory=strain_dir,\n )\n\n # collect energy and volume\n get_energies_task.set({f\"{i}\": scf_qe_task.outputs.energy})\n get_volumes_task.set({f\"{i}\": scf_qe_task.outputs.volume})",
+ "execution_count": 12,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 12
+ "source": [
+ "strain_dir_tasks, scf_qe_tasks, scf_get_dict_tasks = [], [], []\n",
+ "\n",
+ "for i, strain in enumerate(strain_lst):\n",
+ "\n",
+ " structure_key = f\"s_{i}\"\n",
+ " strain_dir = orm.Str(f\"strain_{i}\")\n",
+ " generate_structures_task.add_output(\"workgraph.any\", structure_key)\n",
+ "\n",
+ " scf_prepare_input_dict_task = wg.add_task(\n",
+ " get_dict,\n",
+ " name=f\"get_dict_{i}\",\n",
+ " structure=generate_structures_task.outputs[structure_key],\n",
+ " calculation=calc_type_scf,\n",
+ " kpts=kpts,\n",
+ " pseudopotentials=pseudopotentials,\n",
+ " smearing=smearing,\n",
+ " )\n",
+ "\n",
+ " scf_qe_task = wg.add_task(\n",
+ " calculate_qe,\n",
+ " name=f\"qe_{i}\",\n",
+ " input_dict=scf_prepare_input_dict_task.outputs.result,\n",
+ " working_directory=strain_dir,\n",
+ " )\n",
+ "\n",
+ " # collect energy and volume\n",
+ " get_energies_task.set({f\"{i}\": scf_qe_task.outputs.energy})\n",
+ " get_volumes_task.set({f\"{i}\": scf_qe_task.outputs.volume})"
+ ]
},
{
"cell_type": "code",
- "source": "plot_energy_volume_curve_task = wg.add_task(\n plot_energy_volume_curve,\n name=\"plot_energy_volume_curve\",\n volume_lst=get_volumes_task.outputs.result,\n energy_lst=get_energies_task.outputs.result,\n)",
+ "execution_count": 13,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 13
+ "source": [
+ "plot_energy_volume_curve_task = wg.add_task(\n",
+ " plot_energy_volume_curve,\n",
+ " name=\"plot_energy_volume_curve\",\n",
+ " volume_lst=get_volumes_task.outputs.result,\n",
+ " energy_lst=get_energies_task.outputs.result,\n",
+ ")"
+ ]
},
{
"cell_type": "code",
- "source": "wg",
+ "execution_count": 14,
"metadata": {
"trusted": true
},
"outputs": [
{
- "execution_count": 14,
- "output_type": "execute_result",
"data": {
- "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'wg-qe',…",
"application/vnd.jupyter.widget-view+json": {
+ "model_id": "079f79168dac4f2fb2669a950175258a",
"version_major": 2,
- "version_minor": 1,
- "model_id": "a44258c4d19f490bb7e35a61d721b97c"
- }
+ "version_minor": 1
+ },
+ "text/plain": [
+ "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'wg-qe',…"
+ ]
},
- "metadata": {}
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
- "execution_count": 14
+ "source": [
+ "wg"
+ ]
},
{
"cell_type": "code",
- "source": "_ = write_workflow_json(wg=wg, file_name=workflow_json_filename)\n",
+ "execution_count": 16,
"metadata": {
"trusted": true
},
- "outputs": [],
- "execution_count": 15
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "{\n",
+ "│ 'nodes': [\n",
+ "│ │ {'id': 0, 'type': 'function', 'value': 'workflow.get_bulk_structure', 'name': 'get_bulk_structure'},\n",
+ "│ │ {'id': 1, 'type': 'function', 'value': 'python_workflow_definition.shared.get_dict', 'name': 'get_dict'},\n",
+ "│ │ {'id': 2, 'type': 'function', 'value': 'workflow.calculate_qe', 'name': 'calculate_qe'},\n",
+ "│ │ {'id': 3, 'type': 'function', 'value': 'workflow.generate_structures', 'name': 'generate_structures'},\n",
+ "│ │ {'id': 4, 'type': 'function', 'value': 'python_workflow_definition.shared.get_list', 'name': 'get_list'},\n",
+ "│ │ {'id': 5, 'type': 'function', 'value': 'python_workflow_definition.shared.get_list', 'name': 'get_list'},\n",
+ "│ │ {'id': 6, 'type': 'function', 'value': 'python_workflow_definition.shared.get_dict', 'name': 'get_dict'},\n",
+ "│ │ {'id': 7, 'type': 'function', 'value': 'workflow.calculate_qe', 'name': 'calculate_qe'},\n",
+ "│ │ {'id': 8, 'type': 'function', 'value': 'python_workflow_definition.shared.get_dict', 'name': 'get_dict'},\n",
+ "│ │ {'id': 9, 'type': 'function', 'value': 'workflow.calculate_qe', 'name': 'calculate_qe'},\n",
+ "│ │ {'id': 10, 'type': 'function', 'value': 'python_workflow_definition.shared.get_dict', 'name': 'get_dict'},\n",
+ "│ │ {'id': 11, 'type': 'function', 'value': 'workflow.calculate_qe', 'name': 'calculate_qe'},\n",
+ "│ │ {'id': 12, 'type': 'function', 'value': 'python_workflow_definition.shared.get_dict', 'name': 'get_dict'},\n",
+ "│ │ {'id': 13, 'type': 'function', 'value': 'workflow.calculate_qe', 'name': 'calculate_qe'},\n",
+ "│ │ {'id': 14, 'type': 'function', 'value': 'python_workflow_definition.shared.get_dict', 'name': 'get_dict'},\n",
+ "│ │ {'id': 15, 'type': 'function', 'value': 'workflow.calculate_qe', 'name': 'calculate_qe'},\n",
+ "│ │ {\n",
+ "│ │ │ 'id': 16,\n",
+ "│ │ │ 'type': 'function',\n",
+ "│ │ │ 'value': 'workflow.plot_energy_volume_curve',\n",
+ "│ │ │ 'name': 'plot_energy_volume_curve'\n",
+ "│ │ },\n",
+ "│ │ {'id': 17, 'type': 'input', 'name': 'element', 'value': 'Al'},\n",
+ "│ │ {'id': 18, 'type': 'input', 'name': 'a', 'value': 4.04},\n",
+ "│ │ {'id': 19, 'type': 'input', 'name': 'cubic', 'value': True},\n",
+ "│ │ {'id': 20, 'type': 'input', 'name': 'calculation', 'value': 'vc-relax'},\n",
+ "│ │ {'id': 21, 'type': 'input', 'name': 'kpts', 'value': [3, 3, 3]},\n",
+ "│ │ {\n",
+ "│ │ │ 'id': 22,\n",
+ "│ │ │ 'type': 'input',\n",
+ "│ │ │ 'name': 'pseudopotentials',\n",
+ "│ │ │ 'value': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF', 'node_type': 'data.core.dict.Dict.'}\n",
+ "│ │ },\n",
+ "│ │ {'id': 23, 'type': 'input', 'name': 'smearing', 'value': 0.02},\n",
+ "│ │ {'id': 24, 'type': 'input', 'name': 'working_directory', 'value': 'mini'},\n",
+ "│ │ {'id': 25, 'type': 'input', 'name': 'strain_lst', 'value': [0.9, 0.95, 1.0, 1.05, 1.1]},\n",
+ "│ │ {'id': 26, 'type': 'input', 'name': 'calculation', 'value': 'scf'},\n",
+ "│ │ {'id': 27, 'type': 'input', 'name': 'working_directory', 'value': 'strain_0'},\n",
+ "│ │ {'id': 28, 'type': 'input', 'name': 'working_directory', 'value': 'strain_1'},\n",
+ "│ │ {'id': 29, 'type': 'input', 'name': 'working_directory', 'value': 'strain_2'},\n",
+ "│ │ {'id': 30, 'type': 'input', 'name': 'working_directory', 'value': 'strain_3'},\n",
+ "│ │ {'id': 31, 'type': 'input', 'name': 'working_directory', 'value': 'strain_4'},\n",
+ "│ │ {'id': 32, 'type': 'output', 'name': 'energy', 'value': None},\n",
+ "│ │ {'id': 33, 'type': 'output', 'name': 'volume', 'value': None},\n",
+ "│ │ {'id': 34, 'type': 'output', 'name': 'result', 'value': None},\n",
+ "│ │ {'id': 35, 'type': 'output', 'name': 'structure', 'value': None},\n",
+ "│ │ {'id': 36, 'type': 'output', 'name': 'structure', 'value': None},\n",
+ "│ │ {'id': 37, 'type': 'output', 'name': 'structure', 'value': None},\n",
+ "│ │ {'id': 38, 'type': 'output', 'name': 'structure', 'value': None},\n",
+ "│ │ {'id': 39, 'type': 'output', 'name': 'structure', 'value': None},\n",
+ "│ │ {'id': 40, 'type': 'output', 'name': 'result', 'value': None}\n",
+ "│ ],\n",
+ "│ 'edges': [\n",
+ "│ │ {'target': 0, 'targetPort': 'element', 'source': 17, 'sourcePort': None},\n",
+ "│ │ {'target': 0, 'targetPort': 'a', 'source': 18, 'sourcePort': None},\n",
+ "│ │ {'target': 0, 'targetPort': 'cubic', 'source': 19, 'sourcePort': None},\n",
+ "│ │ {'target': 1, 'targetPort': 'calculation', 'source': 20, 'sourcePort': None},\n",
+ "│ │ {'target': 1, 'targetPort': 'kpts', 'source': 21, 'sourcePort': None},\n",
+ "│ │ {'target': 1, 'targetPort': 'pseudopotentials', 'source': 22, 'sourcePort': None},\n",
+ "│ │ {'target': 1, 'targetPort': 'smearing', 'source': 23, 'sourcePort': None},\n",
+ "│ │ {'target': 2, 'targetPort': 'working_directory', 'source': 24, 'sourcePort': None},\n",
+ "│ │ {'target': 3, 'targetPort': 'strain_lst', 'source': 25, 'sourcePort': None},\n",
+ "│ │ {'target': 6, 'targetPort': 'calculation', 'source': 26, 'sourcePort': None},\n",
+ "│ │ {'target': 6, 'targetPort': 'kpts', 'source': 21, 'sourcePort': None},\n",
+ "│ │ {'target': 6, 'targetPort': 'pseudopotentials', 'source': 22, 'sourcePort': None},\n",
+ "│ │ {'target': 6, 'targetPort': 'smearing', 'source': 23, 'sourcePort': None},\n",
+ "│ │ {'target': 7, 'targetPort': 'working_directory', 'source': 27, 'sourcePort': None},\n",
+ "│ │ {'target': 8, 'targetPort': 'calculation', 'source': 26, 'sourcePort': None},\n",
+ "│ │ {'target': 8, 'targetPort': 'kpts', 'source': 21, 'sourcePort': None},\n",
+ "│ │ {'target': 8, 'targetPort': 'pseudopotentials', 'source': 22, 'sourcePort': None},\n",
+ "│ │ {'target': 8, 'targetPort': 'smearing', 'source': 23, 'sourcePort': None},\n",
+ "│ │ {'target': 9, 'targetPort': 'working_directory', 'source': 28, 'sourcePort': None},\n",
+ "│ │ {'target': 10, 'targetPort': 'calculation', 'source': 26, 'sourcePort': None},\n",
+ "│ │ {'target': 10, 'targetPort': 'kpts', 'source': 21, 'sourcePort': None},\n",
+ "│ │ {'target': 10, 'targetPort': 'pseudopotentials', 'source': 22, 'sourcePort': None},\n",
+ "│ │ {'target': 10, 'targetPort': 'smearing', 'source': 23, 'sourcePort': None},\n",
+ "│ │ {'target': 11, 'targetPort': 'working_directory', 'source': 29, 'sourcePort': None},\n",
+ "│ │ {'target': 12, 'targetPort': 'calculation', 'source': 26, 'sourcePort': None},\n",
+ "│ │ {'target': 12, 'targetPort': 'kpts', 'source': 21, 'sourcePort': None},\n",
+ "│ │ {'target': 12, 'targetPort': 'pseudopotentials', 'source': 22, 'sourcePort': None},\n",
+ "│ │ {'target': 12, 'targetPort': 'smearing', 'source': 23, 'sourcePort': None},\n",
+ "│ │ {'target': 13, 'targetPort': 'working_directory', 'source': 30, 'sourcePort': None},\n",
+ "│ │ {'target': 14, 'targetPort': 'calculation', 'source': 26, 'sourcePort': None},\n",
+ "│ │ {'target': 14, 'targetPort': 'kpts', 'source': 21, 'sourcePort': None},\n",
+ "│ │ {'target': 14, 'targetPort': 'pseudopotentials', 'source': 22, 'sourcePort': None},\n",
+ "│ │ {'target': 14, 'targetPort': 'smearing', 'source': 23, 'sourcePort': None},\n",
+ "│ │ {'target': 15, 'targetPort': 'working_directory', 'source': 31, 'sourcePort': None},\n",
+ "│ │ {'target': 1, 'targetPort': 'structure', 'source': 0, 'sourcePort': None},\n",
+ "│ │ {'target': 2, 'targetPort': 'input_dict', 'source': 1, 'sourcePort': None},\n",
+ "│ │ {'target': 3, 'targetPort': 'structure', 'source': 2, 'sourcePort': 'structure'},\n",
+ "│ │ {'target': 6, 'targetPort': 'structure', 'source': 3, 'sourcePort': 's_0'},\n",
+ "│ │ {'target': 7, 'targetPort': 'input_dict', 'source': 6, 'sourcePort': None},\n",
+ "│ │ {'target': 5, 'targetPort': '0', 'source': 7, 'sourcePort': 'energy'},\n",
+ "│ │ {'target': 4, 'targetPort': '0', 'source': 7, 'sourcePort': 'volume'},\n",
+ "│ │ {'target': 8, 'targetPort': 'structure', 'source': 3, 'sourcePort': 's_1'},\n",
+ "│ │ {'target': 9, 'targetPort': 'input_dict', 'source': 8, 'sourcePort': None},\n",
+ "│ │ {'target': 5, 'targetPort': '1', 'source': 9, 'sourcePort': 'energy'},\n",
+ "│ │ {'target': 4, 'targetPort': '1', 'source': 9, 'sourcePort': 'volume'},\n",
+ "│ │ {'target': 10, 'targetPort': 'structure', 'source': 3, 'sourcePort': 's_2'},\n",
+ "│ │ {'target': 11, 'targetPort': 'input_dict', 'source': 10, 'sourcePort': None},\n",
+ "│ │ {'target': 5, 'targetPort': '2', 'source': 11, 'sourcePort': 'energy'},\n",
+ "│ │ {'target': 4, 'targetPort': '2', 'source': 11, 'sourcePort': 'volume'},\n",
+ "│ │ {'target': 12, 'targetPort': 'structure', 'source': 3, 'sourcePort': 's_3'},\n",
+ "│ │ {'target': 13, 'targetPort': 'input_dict', 'source': 12, 'sourcePort': None},\n",
+ "│ │ {'target': 5, 'targetPort': '3', 'source': 13, 'sourcePort': 'energy'},\n",
+ "│ │ {'target': 4, 'targetPort': '3', 'source': 13, 'sourcePort': 'volume'},\n",
+ "│ │ {'target': 14, 'targetPort': 'structure', 'source': 3, 'sourcePort': 's_4'},\n",
+ "│ │ {'target': 15, 'targetPort': 'input_dict', 'source': 14, 'sourcePort': None},\n",
+ "│ │ {'target': 5, 'targetPort': '4', 'source': 15, 'sourcePort': 'energy'},\n",
+ "│ │ {'target': 4, 'targetPort': '4', 'source': 15, 'sourcePort': 'volume'},\n",
+ "│ │ {'target': 16, 'targetPort': 'volume_lst', 'source': 4, 'sourcePort': None},\n",
+ "│ │ {'target': 16, 'targetPort': 'energy_lst', 'source': 5, 'sourcePort': None},\n",
+ "│ │ {'target': 32, 'targetPort': None, 'source': 2, 'sourcePort': 'energy'},\n",
+ "│ │ {'target': 33, 'targetPort': None, 'source': 2, 'sourcePort': 'volume'},\n",
+ "│ │ {'target': 34, 'targetPort': None, 'source': 3, 'sourcePort': None},\n",
+ "│ │ {'target': 35, 'targetPort': None, 'source': 7, 'sourcePort': 'structure'},\n",
+ "│ │ {'target': 36, 'targetPort': None, 'source': 9, 'sourcePort': 'structure'},\n",
+ "│ │ {'target': 37, 'targetPort': None, 'source': 11, 'sourcePort': 'structure'},\n",
+ "│ │ {'target': 38, 'targetPort': None, 'source': 13, 'sourcePort': 'structure'},\n",
+ "│ │ {'target': 39, 'targetPort': None, 'source': 15, 'sourcePort': 'structure'},\n",
+ "│ │ {'target': 40, 'targetPort': None, 'source': 16, 'sourcePort': None}\n",
+ "│ ]\n",
+ "}\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m{\u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[32m'nodes'\u001b[0m: \u001b[1m[\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m0\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.get_bulk_structure'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_bulk_structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_dict'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_dict'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m2\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.calculate_qe'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculate_qe'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.generate_structures'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'generate_structures'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_list'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_list'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_list'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_list'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_dict'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_dict'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m7\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.calculate_qe'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculate_qe'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_dict'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_dict'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m9\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.calculate_qe'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculate_qe'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_dict'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_dict'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m11\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.calculate_qe'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculate_qe'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_dict'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_dict'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m13\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.calculate_qe'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculate_qe'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'python_workflow_definition.shared.get_dict'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'get_dict'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m15\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'workflow.calculate_qe'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculate_qe'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m16\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'function'\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'value'\u001b[0m: \u001b[32m'workflow.plot_energy_volume_curve'\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'name'\u001b[0m: \u001b[32m'plot_energy_volume_curve'\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m17\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'element'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'Al'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m18\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'a'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[1;36m4.04\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m19\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'cubic'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;92mTrue\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m20\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'vc-relax'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m3\u001b[0m, \u001b[1;36m3\u001b[0m, \u001b[1;36m3\u001b[0m\u001b[1m]\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m22\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'name'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'value'\u001b[0m: \u001b[1m{\u001b[0m\u001b[32m'Al'\u001b[0m: \u001b[32m'Al.pbe-n-kjpaw_psl.1.0.0.UPF'\u001b[0m, \u001b[32m'node_type'\u001b[0m: \u001b[32m'data.core.dict.Dict.'\u001b[0m\u001b[1m}\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[1;36m0.02\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m24\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'mini'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m25\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'strain_lst'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m0.9\u001b[0m, \u001b[1;36m0.95\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.05\u001b[0m, \u001b[1;36m1.1\u001b[0m\u001b[1m]\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m26\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'scf'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m27\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'strain_0'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m28\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'strain_1'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m29\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'strain_2'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m30\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'strain_3'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m31\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'input'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[32m'strain_4'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m32\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'energy'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m33\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'volume'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m34\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'result'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m35\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m36\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m37\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m38\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m39\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'id'\u001b[0m: \u001b[1;36m40\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'output'\u001b[0m, \u001b[32m'name'\u001b[0m: \u001b[32m'result'\u001b[0m, \u001b[32m'value'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[32m'edges'\u001b[0m: \u001b[1m[\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m0\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'element'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m17\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m0\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'a'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m18\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m0\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'cubic'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m19\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m20\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m22\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m2\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m24\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'strain_lst'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m25\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m26\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m22\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m7\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m27\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m26\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m22\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m9\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m28\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m26\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m22\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m11\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m29\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m26\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m22\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m13\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m30\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'calculation'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m26\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'kpts'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m21\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'pseudopotentials'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m22\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'smearing'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m23\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m15\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'working_directory'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m31\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m0\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m2\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'input_dict'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m1\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m2\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m's_0'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m7\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'input_dict'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m6\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'0'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m7\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'energy'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'0'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m7\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'volume'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m's_1'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m9\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'input_dict'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m8\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'1'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m9\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'energy'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'1'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m9\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'volume'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m's_2'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m11\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'input_dict'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m10\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'2'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m11\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'energy'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'2'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m11\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'volume'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m's_3'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m13\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'input_dict'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m12\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'3'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m13\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'energy'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'3'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m13\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'volume'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'structure'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m's_4'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m15\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'input_dict'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m14\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'4'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m15\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'energy'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'4'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m15\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'volume'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m16\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'volume_lst'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m4\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m16\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[32m'energy_lst'\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m5\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m32\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m2\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'energy'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m33\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m2\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'volume'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m34\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m3\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m35\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m7\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m36\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m9\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m37\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m11\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m38\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m13\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m39\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m15\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[32m'structure'\u001b[0m\u001b[1m}\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\u001b[32m'target'\u001b[0m: \u001b[1;36m40\u001b[0m, \u001b[32m'targetPort'\u001b[0m: \u001b[3;35mNone\u001b[0m, \u001b[32m'source'\u001b[0m: \u001b[1;36m16\u001b[0m, \u001b[32m'sourcePort'\u001b[0m: \u001b[3;35mNone\u001b[0m\u001b[1m}\u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m]\u001b[0m\n",
+ "\u001b[1m}\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "aiida_converter = AiidaPwdConverter()\n",
+ "model = aiida_converter.workgraph_to_model(wg=wg)\n",
+ "pprint(model.model_dump())\n",
+ "# _ = write_workflow_json(wg=wg, file_name=workflow_json_filename)\n"
+ ]
},
{
"cell_type": "code",
- "source": "!cat {workflow_json_filename}",
+ "execution_count": 16,
"metadata": {
"trusted": true
},
@@ -201,19 +559,524 @@
{
"name": "stdout",
"output_type": "stream",
- "text": "{\n \"nodes\": [\n {\n \"id\": 0,\n \"function\": \"quantum_espresso_workflow.get_bulk_structure\"\n },\n {\n \"id\": 1,\n \"function\": \"python_workflow_definition.shared.get_dict\"\n },\n {\n \"id\": 2,\n \"function\": \"quantum_espresso_workflow.calculate_qe\"\n },\n {\n \"id\": 3,\n \"function\": \"quantum_espresso_workflow.generate_structures\"\n },\n {\n \"id\": 4,\n \"function\": \"python_workflow_definition.shared.get_list\"\n },\n {\n \"id\": 5,\n \"function\": \"python_workflow_definition.shared.get_list\"\n },\n {\n \"id\": 6,\n \"function\": \"python_workflow_definition.shared.get_dict\"\n },\n {\n \"id\": 7,\n \"function\": \"quantum_espresso_workflow.calculate_qe\"\n },\n {\n \"id\": 8,\n \"function\": \"python_workflow_definition.shared.get_dict\"\n },\n {\n \"id\": 9,\n \"function\": \"quantum_espresso_workflow.calculate_qe\"\n },\n {\n \"id\": 10,\n \"function\": \"python_workflow_definition.shared.get_dict\"\n },\n {\n \"id\": 11,\n \"function\": \"quantum_espresso_workflow.calculate_qe\"\n },\n {\n \"id\": 12,\n \"function\": \"python_workflow_definition.shared.get_dict\"\n },\n {\n \"id\": 13,\n \"function\": \"quantum_espresso_workflow.calculate_qe\"\n },\n {\n \"id\": 14,\n \"function\": \"python_workflow_definition.shared.get_dict\"\n },\n {\n \"id\": 15,\n \"function\": \"quantum_espresso_workflow.calculate_qe\"\n },\n {\n \"id\": 16,\n \"function\": \"quantum_espresso_workflow.plot_energy_volume_curve\"\n },\n {\n \"id\": 17,\n \"value\": \"Al\"\n },\n {\n \"id\": 18,\n \"value\": 4.04\n },\n {\n \"id\": 19,\n \"value\": true\n },\n {\n \"id\": 20,\n \"value\": \"vc-relax\"\n },\n {\n \"id\": 21,\n \"value\": [\n 3,\n 3,\n 3\n ]\n },\n {\n \"id\": 22,\n \"value\": {\n \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n }\n },\n {\n \"id\": 23,\n \"value\": 0.02\n },\n {\n \"id\": 24,\n \"value\": \"mini\"\n },\n {\n \"id\": 25,\n \"value\": [\n 0.9,\n 0.95,\n 1.0,\n 1.05,\n 1.1\n ]\n },\n {\n \"id\": 26,\n \"value\": \"scf\"\n },\n {\n \"id\": 27,\n \"value\": \"strain_0\"\n },\n {\n \"id\": 28,\n \"value\": \"strain_1\"\n },\n {\n \"id\": 29,\n \"value\": \"strain_2\"\n },\n {\n \"id\": 30,\n \"value\": \"strain_3\"\n },\n {\n \"id\": 31,\n \"value\": \"strain_4\"\n }\n ],\n \"edges\": [\n {\n \"target\": 1,\n \"targetPort\": \"structure\",\n \"source\": 0,\n \"sourcePort\": null\n },\n {\n \"target\": 2,\n \"targetPort\": \"input_dict\",\n \"source\": 1,\n \"sourcePort\": null\n },\n {\n \"target\": 3,\n \"targetPort\": \"structure\",\n \"source\": 2,\n \"sourcePort\": \"structure\"\n },\n {\n \"target\": 6,\n \"targetPort\": \"structure\",\n \"source\": 3,\n \"sourcePort\": \"s_0\"\n },\n {\n \"target\": 7,\n \"targetPort\": \"input_dict\",\n \"source\": 6,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"0\",\n \"source\": 7,\n \"sourcePort\": \"energy\"\n },\n {\n \"target\": 4,\n \"targetPort\": \"0\",\n \"source\": 7,\n \"sourcePort\": \"volume\"\n },\n {\n \"target\": 8,\n \"targetPort\": \"structure\",\n \"source\": 3,\n \"sourcePort\": \"s_1\"\n },\n {\n \"target\": 9,\n \"targetPort\": \"input_dict\",\n \"source\": 8,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"1\",\n \"source\": 9,\n \"sourcePort\": \"energy\"\n },\n {\n \"target\": 4,\n \"targetPort\": \"1\",\n \"source\": 9,\n \"sourcePort\": \"volume\"\n },\n {\n \"target\": 10,\n \"targetPort\": \"structure\",\n \"source\": 3,\n \"sourcePort\": \"s_2\"\n },\n {\n \"target\": 11,\n \"targetPort\": \"input_dict\",\n \"source\": 10,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"2\",\n \"source\": 11,\n \"sourcePort\": \"energy\"\n },\n {\n \"target\": 4,\n \"targetPort\": \"2\",\n \"source\": 11,\n \"sourcePort\": \"volume\"\n },\n {\n \"target\": 12,\n \"targetPort\": \"structure\",\n \"source\": 3,\n \"sourcePort\": \"s_3\"\n },\n {\n \"target\": 13,\n \"targetPort\": \"input_dict\",\n \"source\": 12,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"3\",\n \"source\": 13,\n \"sourcePort\": \"energy\"\n },\n {\n \"target\": 4,\n \"targetPort\": \"3\",\n \"source\": 13,\n \"sourcePort\": \"volume\"\n },\n {\n \"target\": 14,\n \"targetPort\": \"structure\",\n \"source\": 3,\n \"sourcePort\": \"s_4\"\n },\n {\n \"target\": 15,\n \"targetPort\": \"input_dict\",\n \"source\": 14,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"4\",\n \"source\": 15,\n \"sourcePort\": \"energy\"\n },\n {\n \"target\": 4,\n \"targetPort\": \"4\",\n \"source\": 15,\n \"sourcePort\": \"volume\"\n },\n {\n \"target\": 16,\n \"targetPort\": \"volume_lst\",\n \"source\": 4,\n \"sourcePort\": null\n },\n {\n \"target\": 16,\n \"targetPort\": \"energy_lst\",\n \"source\": 5,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"element\",\n \"source\": 17,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"a\",\n \"source\": 18,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"cubic\",\n \"source\": 19,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"calculation\",\n \"source\": 20,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"kpts\",\n \"source\": 21,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"pseudopotentials\",\n \"source\": 22,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"smearing\",\n \"source\": 23,\n \"sourcePort\": null\n },\n {\n \"target\": 2,\n \"targetPort\": \"working_directory\",\n \"source\": 24,\n \"sourcePort\": null\n },\n {\n \"target\": 3,\n \"targetPort\": \"strain_lst\",\n \"source\": 25,\n \"sourcePort\": null\n },\n {\n \"target\": 6,\n \"targetPort\": \"calculation\",\n \"source\": 26,\n \"sourcePort\": null\n },\n {\n \"target\": 6,\n \"targetPort\": \"kpts\",\n \"source\": 21,\n \"sourcePort\": null\n },\n {\n \"target\": 6,\n \"targetPort\": \"pseudopotentials\",\n \"source\": 22,\n \"sourcePort\": null\n },\n {\n \"target\": 6,\n \"targetPort\": \"smearing\",\n \"source\": 23,\n \"sourcePort\": null\n },\n {\n \"target\": 7,\n \"targetPort\": \"working_directory\",\n \"source\": 27,\n \"sourcePort\": null\n },\n {\n \"target\": 8,\n \"targetPort\": \"calculation\",\n \"source\": 26,\n \"sourcePort\": null\n },\n {\n \"target\": 8,\n \"targetPort\": \"kpts\",\n \"source\": 21,\n \"sourcePort\": null\n },\n {\n \"target\": 8,\n \"targetPort\": \"pseudopotentials\",\n \"source\": 22,\n \"sourcePort\": null\n },\n {\n \"target\": 8,\n \"targetPort\": \"smearing\",\n \"source\": 23,\n \"sourcePort\": null\n },\n {\n \"target\": 9,\n \"targetPort\": \"working_directory\",\n \"source\": 28,\n \"sourcePort\": null\n },\n {\n \"target\": 10,\n \"targetPort\": \"calculation\",\n \"source\": 26,\n \"sourcePort\": null\n },\n {\n \"target\": 10,\n \"targetPort\": \"kpts\",\n \"source\": 21,\n \"sourcePort\": null\n },\n {\n \"target\": 10,\n \"targetPort\": \"pseudopotentials\",\n \"source\": 22,\n \"sourcePort\": null\n },\n {\n \"target\": 10,\n \"targetPort\": \"smearing\",\n \"source\": 23,\n \"sourcePort\": null\n },\n {\n \"target\": 11,\n \"targetPort\": \"working_directory\",\n \"source\": 29,\n \"sourcePort\": null\n },\n {\n \"target\": 12,\n \"targetPort\": \"calculation\",\n \"source\": 26,\n \"sourcePort\": null\n },\n {\n \"target\": 12,\n \"targetPort\": \"kpts\",\n \"source\": 21,\n \"sourcePort\": null\n },\n {\n \"target\": 12,\n \"targetPort\": \"pseudopotentials\",\n \"source\": 22,\n \"sourcePort\": null\n },\n {\n \"target\": 12,\n \"targetPort\": \"smearing\",\n \"source\": 23,\n \"sourcePort\": null\n },\n {\n \"target\": 13,\n \"targetPort\": \"working_directory\",\n \"source\": 30,\n \"sourcePort\": null\n },\n {\n \"target\": 14,\n \"targetPort\": \"calculation\",\n \"source\": 26,\n \"sourcePort\": null\n },\n {\n \"target\": 14,\n \"targetPort\": \"kpts\",\n \"source\": 21,\n \"sourcePort\": null\n },\n {\n \"target\": 14,\n \"targetPort\": \"pseudopotentials\",\n \"source\": 22,\n \"sourcePort\": null\n },\n {\n \"target\": 14,\n \"targetPort\": \"smearing\",\n \"source\": 23,\n \"sourcePort\": null\n },\n {\n \"target\": 15,\n \"targetPort\": \"working_directory\",\n \"source\": 31,\n \"sourcePort\": null\n }\n ]\n}"
+ "text": [
+ "{\n",
+ " \"nodes\": [\n",
+ " {\n",
+ " \"id\": 0,\n",
+ " \"function\": \"quantum_espresso_workflow.get_bulk_structure\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 1,\n",
+ " \"function\": \"python_workflow_definition.shared.get_dict\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 2,\n",
+ " \"function\": \"quantum_espresso_workflow.calculate_qe\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 3,\n",
+ " \"function\": \"quantum_espresso_workflow.generate_structures\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 4,\n",
+ " \"function\": \"python_workflow_definition.shared.get_list\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 5,\n",
+ " \"function\": \"python_workflow_definition.shared.get_list\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 6,\n",
+ " \"function\": \"python_workflow_definition.shared.get_dict\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 7,\n",
+ " \"function\": \"quantum_espresso_workflow.calculate_qe\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 8,\n",
+ " \"function\": \"python_workflow_definition.shared.get_dict\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 9,\n",
+ " \"function\": \"quantum_espresso_workflow.calculate_qe\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 10,\n",
+ " \"function\": \"python_workflow_definition.shared.get_dict\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 11,\n",
+ " \"function\": \"quantum_espresso_workflow.calculate_qe\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 12,\n",
+ " \"function\": \"python_workflow_definition.shared.get_dict\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 13,\n",
+ " \"function\": \"quantum_espresso_workflow.calculate_qe\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 14,\n",
+ " \"function\": \"python_workflow_definition.shared.get_dict\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 15,\n",
+ " \"function\": \"quantum_espresso_workflow.calculate_qe\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 16,\n",
+ " \"function\": \"quantum_espresso_workflow.plot_energy_volume_curve\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 17,\n",
+ " \"value\": \"Al\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 18,\n",
+ " \"value\": 4.04\n",
+ " },\n",
+ " {\n",
+ " \"id\": 19,\n",
+ " \"value\": true\n",
+ " },\n",
+ " {\n",
+ " \"id\": 20,\n",
+ " \"value\": \"vc-relax\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 21,\n",
+ " \"value\": [\n",
+ " 3,\n",
+ " 3,\n",
+ " 3\n",
+ " ]\n",
+ " },\n",
+ " {\n",
+ " \"id\": 22,\n",
+ " \"value\": {\n",
+ " \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n",
+ " }\n",
+ " },\n",
+ " {\n",
+ " \"id\": 23,\n",
+ " \"value\": 0.02\n",
+ " },\n",
+ " {\n",
+ " \"id\": 24,\n",
+ " \"value\": \"mini\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 25,\n",
+ " \"value\": [\n",
+ " 0.9,\n",
+ " 0.95,\n",
+ " 1.0,\n",
+ " 1.05,\n",
+ " 1.1\n",
+ " ]\n",
+ " },\n",
+ " {\n",
+ " \"id\": 26,\n",
+ " \"value\": \"scf\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 27,\n",
+ " \"value\": \"strain_0\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 28,\n",
+ " \"value\": \"strain_1\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 29,\n",
+ " \"value\": \"strain_2\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 30,\n",
+ " \"value\": \"strain_3\"\n",
+ " },\n",
+ " {\n",
+ " \"id\": 31,\n",
+ " \"value\": \"strain_4\"\n",
+ " }\n",
+ " ],\n",
+ " \"edges\": [\n",
+ " {\n",
+ " \"target\": 1,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 0,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 2,\n",
+ " \"targetPort\": \"input_dict\",\n",
+ " \"source\": 1,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 3,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 2,\n",
+ " \"sourcePort\": \"structure\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 6,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 3,\n",
+ " \"sourcePort\": \"s_0\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 7,\n",
+ " \"targetPort\": \"input_dict\",\n",
+ " \"source\": 6,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 5,\n",
+ " \"targetPort\": \"0\",\n",
+ " \"source\": 7,\n",
+ " \"sourcePort\": \"energy\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 4,\n",
+ " \"targetPort\": \"0\",\n",
+ " \"source\": 7,\n",
+ " \"sourcePort\": \"volume\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 8,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 3,\n",
+ " \"sourcePort\": \"s_1\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 9,\n",
+ " \"targetPort\": \"input_dict\",\n",
+ " \"source\": 8,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 5,\n",
+ " \"targetPort\": \"1\",\n",
+ " \"source\": 9,\n",
+ " \"sourcePort\": \"energy\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 4,\n",
+ " \"targetPort\": \"1\",\n",
+ " \"source\": 9,\n",
+ " \"sourcePort\": \"volume\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 10,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 3,\n",
+ " \"sourcePort\": \"s_2\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 11,\n",
+ " \"targetPort\": \"input_dict\",\n",
+ " \"source\": 10,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 5,\n",
+ " \"targetPort\": \"2\",\n",
+ " \"source\": 11,\n",
+ " \"sourcePort\": \"energy\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 4,\n",
+ " \"targetPort\": \"2\",\n",
+ " \"source\": 11,\n",
+ " \"sourcePort\": \"volume\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 12,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 3,\n",
+ " \"sourcePort\": \"s_3\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 13,\n",
+ " \"targetPort\": \"input_dict\",\n",
+ " \"source\": 12,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 5,\n",
+ " \"targetPort\": \"3\",\n",
+ " \"source\": 13,\n",
+ " \"sourcePort\": \"energy\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 4,\n",
+ " \"targetPort\": \"3\",\n",
+ " \"source\": 13,\n",
+ " \"sourcePort\": \"volume\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 14,\n",
+ " \"targetPort\": \"structure\",\n",
+ " \"source\": 3,\n",
+ " \"sourcePort\": \"s_4\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 15,\n",
+ " \"targetPort\": \"input_dict\",\n",
+ " \"source\": 14,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 5,\n",
+ " \"targetPort\": \"4\",\n",
+ " \"source\": 15,\n",
+ " \"sourcePort\": \"energy\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 4,\n",
+ " \"targetPort\": \"4\",\n",
+ " \"source\": 15,\n",
+ " \"sourcePort\": \"volume\"\n",
+ " },\n",
+ " {\n",
+ " \"target\": 16,\n",
+ " \"targetPort\": \"volume_lst\",\n",
+ " \"source\": 4,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 16,\n",
+ " \"targetPort\": \"energy_lst\",\n",
+ " \"source\": 5,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 0,\n",
+ " \"targetPort\": \"element\",\n",
+ " \"source\": 17,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 0,\n",
+ " \"targetPort\": \"a\",\n",
+ " \"source\": 18,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 0,\n",
+ " \"targetPort\": \"cubic\",\n",
+ " \"source\": 19,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 1,\n",
+ " \"targetPort\": \"calculation\",\n",
+ " \"source\": 20,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 1,\n",
+ " \"targetPort\": \"kpts\",\n",
+ " \"source\": 21,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 1,\n",
+ " \"targetPort\": \"pseudopotentials\",\n",
+ " \"source\": 22,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 1,\n",
+ " \"targetPort\": \"smearing\",\n",
+ " \"source\": 23,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 2,\n",
+ " \"targetPort\": \"working_directory\",\n",
+ " \"source\": 24,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 3,\n",
+ " \"targetPort\": \"strain_lst\",\n",
+ " \"source\": 25,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 6,\n",
+ " \"targetPort\": \"calculation\",\n",
+ " \"source\": 26,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 6,\n",
+ " \"targetPort\": \"kpts\",\n",
+ " \"source\": 21,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 6,\n",
+ " \"targetPort\": \"pseudopotentials\",\n",
+ " \"source\": 22,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 6,\n",
+ " \"targetPort\": \"smearing\",\n",
+ " \"source\": 23,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 7,\n",
+ " \"targetPort\": \"working_directory\",\n",
+ " \"source\": 27,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 8,\n",
+ " \"targetPort\": \"calculation\",\n",
+ " \"source\": 26,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 8,\n",
+ " \"targetPort\": \"kpts\",\n",
+ " \"source\": 21,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 8,\n",
+ " \"targetPort\": \"pseudopotentials\",\n",
+ " \"source\": 22,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 8,\n",
+ " \"targetPort\": \"smearing\",\n",
+ " \"source\": 23,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 9,\n",
+ " \"targetPort\": \"working_directory\",\n",
+ " \"source\": 28,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 10,\n",
+ " \"targetPort\": \"calculation\",\n",
+ " \"source\": 26,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 10,\n",
+ " \"targetPort\": \"kpts\",\n",
+ " \"source\": 21,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 10,\n",
+ " \"targetPort\": \"pseudopotentials\",\n",
+ " \"source\": 22,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 10,\n",
+ " \"targetPort\": \"smearing\",\n",
+ " \"source\": 23,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 11,\n",
+ " \"targetPort\": \"working_directory\",\n",
+ " \"source\": 29,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 12,\n",
+ " \"targetPort\": \"calculation\",\n",
+ " \"source\": 26,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 12,\n",
+ " \"targetPort\": \"kpts\",\n",
+ " \"source\": 21,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 12,\n",
+ " \"targetPort\": \"pseudopotentials\",\n",
+ " \"source\": 22,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 12,\n",
+ " \"targetPort\": \"smearing\",\n",
+ " \"source\": 23,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 13,\n",
+ " \"targetPort\": \"working_directory\",\n",
+ " \"source\": 30,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 14,\n",
+ " \"targetPort\": \"calculation\",\n",
+ " \"source\": 26,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 14,\n",
+ " \"targetPort\": \"kpts\",\n",
+ " \"source\": 21,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 14,\n",
+ " \"targetPort\": \"pseudopotentials\",\n",
+ " \"source\": 22,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 14,\n",
+ " \"targetPort\": \"smearing\",\n",
+ " \"source\": 23,\n",
+ " \"sourcePort\": null\n",
+ " },\n",
+ " {\n",
+ " \"target\": 15,\n",
+ " \"targetPort\": \"working_directory\",\n",
+ " \"source\": 31,\n",
+ " \"sourcePort\": null\n",
+ " }\n",
+ " ]\n",
+ "}"
+ ]
}
],
- "execution_count": 16
+ "source": [
+ "!cat {workflow_json_filename}"
+ ]
},
{
"cell_type": "markdown",
- "source": "## Load Workflow with jobflow",
- "metadata": {}
+ "metadata": {},
+ "source": [
+ "## Load Workflow with jobflow"
+ ]
},
{
"cell_type": "code",
- "source": "from python_workflow_definition.jobflow import load_workflow_json",
+ "execution_count": 17,
"metadata": {
"trusted": true
},
@@ -221,41 +1084,54 @@
{
"name": "stderr",
"output_type": "stream",
- "text": "/srv/conda/envs/notebook/lib/python3.12/site-packages/paramiko/pkey.py:82: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.\n \"cipher\": algorithms.TripleDES,\n/srv/conda/envs/notebook/lib/python3.12/site-packages/paramiko/transport.py:253: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.\n \"class\": algorithms.TripleDES,\n"
+ "text": [
+ "/srv/conda/envs/notebook/lib/python3.12/site-packages/paramiko/pkey.py:82: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.\n",
+ " \"cipher\": algorithms.TripleDES,\n",
+ "/srv/conda/envs/notebook/lib/python3.12/site-packages/paramiko/transport.py:253: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.\n",
+ " \"class\": algorithms.TripleDES,\n"
+ ]
}
],
- "execution_count": 17
+ "source": [
+ "from python_workflow_definition.jobflow import load_workflow_json"
+ ]
},
{
"cell_type": "code",
- "source": "from jobflow.managers.local import run_locally",
+ "execution_count": 18,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 18
+ "source": [
+ "from jobflow.managers.local import run_locally"
+ ]
},
{
"cell_type": "code",
- "source": "flow = load_workflow_json(file_name=workflow_json_filename)",
+ "execution_count": 19,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 19
+ "source": [
+ "flow = load_workflow_json(file_name=workflow_json_filename)"
+ ]
},
{
"cell_type": "code",
- "source": "flow[0].function_kwargs[\"a\"] = 4.05",
+ "execution_count": 20,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 20
+ "source": [
+ "flow[0].function_kwargs[\"a\"] = 4.05"
+ ]
},
{
"cell_type": "code",
- "source": "result = run_locally(flow)\nresult",
+ "execution_count": 21,
"metadata": {
"trusted": true
},
@@ -263,141 +1139,952 @@
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:31:18,763 INFO Started executing jobs locally\n2025-04-23 09:31:19,023 INFO Starting job - get_bulk_structure (ceb203d4-4b50-4fbf-bd60-36680543382b)\n2025-04-23 09:31:19,030 INFO Finished job - get_bulk_structure (ceb203d4-4b50-4fbf-bd60-36680543382b)\n2025-04-23 09:31:19,031 INFO Starting job - get_dict (27f28719-6394-4a85-b93f-c8ece2feceaf)\n2025-04-23 09:31:19,034 INFO Finished job - get_dict (27f28719-6394-4a85-b93f-c8ece2feceaf)\n2025-04-23 09:31:19,035 INFO Starting job - calculate_qe (ae0b4b06-5734-41ea-a7cc-e8393ef01e55)\n"
+ "text": [
+ "2025-04-23 09:31:18,763 INFO Started executing jobs locally\n",
+ "2025-04-23 09:31:19,023 INFO Starting job - get_bulk_structure (ceb203d4-4b50-4fbf-bd60-36680543382b)\n",
+ "2025-04-23 09:31:19,030 INFO Finished job - get_bulk_structure (ceb203d4-4b50-4fbf-bd60-36680543382b)\n",
+ "2025-04-23 09:31:19,031 INFO Starting job - get_dict (27f28719-6394-4a85-b93f-c8ece2feceaf)\n",
+ "2025-04-23 09:31:19,034 INFO Finished job - get_dict (27f28719-6394-4a85-b93f-c8ece2feceaf)\n",
+ "2025-04-23 09:31:19,035 INFO Starting job - calculate_qe (ae0b4b06-5734-41ea-a7cc-e8393ef01e55)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01795] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01795] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:32:12,183 INFO Finished job - calculate_qe (ae0b4b06-5734-41ea-a7cc-e8393ef01e55)\n2025-04-23 09:32:12,184 INFO Starting job - generate_structures (e9deb2a2-2e2a-4077-a221-a6afc9701377)\n2025-04-23 09:32:12,189 INFO Finished job - generate_structures (e9deb2a2-2e2a-4077-a221-a6afc9701377)\n2025-04-23 09:32:12,189 INFO Starting job - get_dict (9f4a0c82-798c-4178-9a46-c5430a2853c1)\n2025-04-23 09:32:12,190 INFO Finished job - get_dict (9f4a0c82-798c-4178-9a46-c5430a2853c1)\n2025-04-23 09:32:12,191 INFO Starting job - get_dict (8e10ca3a-91ba-4647-bca8-3c905020fb39)\n2025-04-23 09:32:12,192 INFO Finished job - get_dict (8e10ca3a-91ba-4647-bca8-3c905020fb39)\n2025-04-23 09:32:12,193 INFO Starting job - get_dict (765da827-3180-44d3-940e-e9d5a7e2ae45)\n2025-04-23 09:32:12,194 INFO Finished job - get_dict (765da827-3180-44d3-940e-e9d5a7e2ae45)\n2025-04-23 09:32:12,195 INFO Starting job - get_dict (5f8ce3d7-f65e-481d-8cb0-291d204df659)\n2025-04-23 09:32:12,196 INFO Finished job - get_dict (5f8ce3d7-f65e-481d-8cb0-291d204df659)\n2025-04-23 09:32:12,196 INFO Starting job - get_dict (12912688-d0c2-4053-80b2-a758b50ce86a)\n2025-04-23 09:32:12,208 INFO Finished job - get_dict (12912688-d0c2-4053-80b2-a758b50ce86a)\n2025-04-23 09:32:12,209 INFO Starting job - calculate_qe (282ce127-dc4e-4e2d-9769-c22bdcdf2e3f)\n"
+ "text": [
+ "2025-04-23 09:32:12,183 INFO Finished job - calculate_qe (ae0b4b06-5734-41ea-a7cc-e8393ef01e55)\n",
+ "2025-04-23 09:32:12,184 INFO Starting job - generate_structures (e9deb2a2-2e2a-4077-a221-a6afc9701377)\n",
+ "2025-04-23 09:32:12,189 INFO Finished job - generate_structures (e9deb2a2-2e2a-4077-a221-a6afc9701377)\n",
+ "2025-04-23 09:32:12,189 INFO Starting job - get_dict (9f4a0c82-798c-4178-9a46-c5430a2853c1)\n",
+ "2025-04-23 09:32:12,190 INFO Finished job - get_dict (9f4a0c82-798c-4178-9a46-c5430a2853c1)\n",
+ "2025-04-23 09:32:12,191 INFO Starting job - get_dict (8e10ca3a-91ba-4647-bca8-3c905020fb39)\n",
+ "2025-04-23 09:32:12,192 INFO Finished job - get_dict (8e10ca3a-91ba-4647-bca8-3c905020fb39)\n",
+ "2025-04-23 09:32:12,193 INFO Starting job - get_dict (765da827-3180-44d3-940e-e9d5a7e2ae45)\n",
+ "2025-04-23 09:32:12,194 INFO Finished job - get_dict (765da827-3180-44d3-940e-e9d5a7e2ae45)\n",
+ "2025-04-23 09:32:12,195 INFO Starting job - get_dict (5f8ce3d7-f65e-481d-8cb0-291d204df659)\n",
+ "2025-04-23 09:32:12,196 INFO Finished job - get_dict (5f8ce3d7-f65e-481d-8cb0-291d204df659)\n",
+ "2025-04-23 09:32:12,196 INFO Starting job - get_dict (12912688-d0c2-4053-80b2-a758b50ce86a)\n",
+ "2025-04-23 09:32:12,208 INFO Finished job - get_dict (12912688-d0c2-4053-80b2-a758b50ce86a)\n",
+ "2025-04-23 09:32:12,209 INFO Starting job - calculate_qe (282ce127-dc4e-4e2d-9769-c22bdcdf2e3f)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01814] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01814] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:32:23,091 INFO Finished job - calculate_qe (282ce127-dc4e-4e2d-9769-c22bdcdf2e3f)\n2025-04-23 09:32:23,092 INFO Starting job - calculate_qe (76b1d287-fd0f-4fed-a0b7-cc817dffe2d8)\n"
+ "text": [
+ "2025-04-23 09:32:23,091 INFO Finished job - calculate_qe (282ce127-dc4e-4e2d-9769-c22bdcdf2e3f)\n",
+ "2025-04-23 09:32:23,092 INFO Starting job - calculate_qe (76b1d287-fd0f-4fed-a0b7-cc817dffe2d8)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01825] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ "text": [
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n",
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01825] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:32:34,038 INFO Finished job - calculate_qe (76b1d287-fd0f-4fed-a0b7-cc817dffe2d8)\n2025-04-23 09:32:34,038 INFO Starting job - calculate_qe (2c6bfb73-15c3-4be7-95ab-f9afbeaf53bc)\n"
+ "text": [
+ "2025-04-23 09:32:34,038 INFO Finished job - calculate_qe (76b1d287-fd0f-4fed-a0b7-cc817dffe2d8)\n",
+ "2025-04-23 09:32:34,038 INFO Starting job - calculate_qe (2c6bfb73-15c3-4be7-95ab-f9afbeaf53bc)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01836] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ "text": [
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n",
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01836] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:32:46,472 INFO Finished job - calculate_qe (2c6bfb73-15c3-4be7-95ab-f9afbeaf53bc)\n2025-04-23 09:32:46,473 INFO Starting job - calculate_qe (4f947882-06db-4296-8456-b12cff2e66e3)\n"
+ "text": [
+ "2025-04-23 09:32:46,472 INFO Finished job - calculate_qe (2c6bfb73-15c3-4be7-95ab-f9afbeaf53bc)\n",
+ "2025-04-23 09:32:46,473 INFO Starting job - calculate_qe (4f947882-06db-4296-8456-b12cff2e66e3)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01847] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n",
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01847] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:33:00,409 INFO Finished job - calculate_qe (4f947882-06db-4296-8456-b12cff2e66e3)\n2025-04-23 09:33:00,410 INFO Starting job - calculate_qe (d7bd31df-d3a7-49a1-9ae8-7766d4c519ec)\n"
+ "text": [
+ "2025-04-23 09:33:00,409 INFO Finished job - calculate_qe (4f947882-06db-4296-8456-b12cff2e66e3)\n",
+ "2025-04-23 09:33:00,410 INFO Starting job - calculate_qe (d7bd31df-d3a7-49a1-9ae8-7766d4c519ec)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01858] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01858] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:33:14,798 INFO Finished job - calculate_qe (d7bd31df-d3a7-49a1-9ae8-7766d4c519ec)\n2025-04-23 09:33:14,800 INFO Starting job - get_list (daa806da-16e9-4733-afe1-2ae60dc6292f)\n2025-04-23 09:33:14,804 INFO Finished job - get_list (daa806da-16e9-4733-afe1-2ae60dc6292f)\n2025-04-23 09:33:14,805 INFO Starting job - get_list (407d4cb0-b4f3-41f5-ba66-077754af69eb)\n2025-04-23 09:33:14,808 INFO Finished job - get_list (407d4cb0-b4f3-41f5-ba66-077754af69eb)\n2025-04-23 09:33:14,810 INFO Starting job - plot_energy_volume_curve (e363e583-bcc3-4cd8-b943-f6e4487b11f0)\n"
+ "text": [
+ "2025-04-23 09:33:14,798 INFO Finished job - calculate_qe (d7bd31df-d3a7-49a1-9ae8-7766d4c519ec)\n",
+ "2025-04-23 09:33:14,800 INFO Starting job - get_list (daa806da-16e9-4733-afe1-2ae60dc6292f)\n",
+ "2025-04-23 09:33:14,804 INFO Finished job - get_list (daa806da-16e9-4733-afe1-2ae60dc6292f)\n",
+ "2025-04-23 09:33:14,805 INFO Starting job - get_list (407d4cb0-b4f3-41f5-ba66-077754af69eb)\n",
+ "2025-04-23 09:33:14,808 INFO Finished job - get_list (407d4cb0-b4f3-41f5-ba66-077754af69eb)\n",
+ "2025-04-23 09:33:14,810 INFO Starting job - plot_energy_volume_curve (e363e583-bcc3-4cd8-b943-f6e4487b11f0)\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "2025-04-23 09:33:14,912 INFO Finished job - plot_energy_volume_curve (e363e583-bcc3-4cd8-b943-f6e4487b11f0)\n2025-04-23 09:33:14,913 INFO Finished executing jobs locally\n"
+ "text": [
+ "2025-04-23 09:33:14,912 INFO Finished job - plot_energy_volume_curve (e363e583-bcc3-4cd8-b943-f6e4487b11f0)\n",
+ "2025-04-23 09:33:14,913 INFO Finished executing jobs locally\n"
+ ]
},
{
- "execution_count": 21,
- "output_type": "execute_result",
"data": {
- "text/plain": "{'ceb203d4-4b50-4fbf-bd60-36680543382b': {1: Response(output='{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.05, 0.0, 0.0], [0.0, 4.05, 0.0], [0.0, 0.0, 4.05]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.025, 2.025], [2.025, 0.0, 2.025], [2.025, 2.025, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '27f28719-6394-4a85-b93f-c8ece2feceaf': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.05, 0.0, 0.0], [0.0, 4.05, 0.0], [0.0, 0.0, 4.05]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.025, 2.025], [2.025, 0.0, 2.025], [2.025, 2.025, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'vc-relax', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n 'ae0b4b06-5734-41ea-a7cc-e8393ef01e55': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637215946818, 0.0, 0.0], [0.0, 4.045637215946818, 0.0], [0.0, 0.0, 4.045637215946818]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.022818607973409, 2.022818607973409], [2.022818607973409, 0.0, 2.022818607973409], [2.022818607973409, 2.022818607973409, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.93652622536, 'volume': 66.21567448236135}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n 'e9deb2a2-2e2a-4077-a221-a6afc9701377': {1: Response(output={'s_0': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.906019785962126, 0.0, 0.0], [0.0, 3.906019785962126, 0.0], [0.0, 0.0, 3.906019785962126]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.953009892981063, 1.953009892981063], [1.953009892981063, 0.0, 1.953009892981063], [1.953009892981063, 1.953009892981063, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_1': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.9770538443180263, 0.0, 0.0], [0.0, 3.9770538443180263, 0.0], [0.0, 0.0, 3.9770538443180263]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9885269221590132, 1.9885269221590132], [1.9885269221590132, 0.0, 1.9885269221590132], [1.9885269221590132, 1.9885269221590132, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_2': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637215946818, 0.0, 0.0], [0.0, 4.045637215946818, 0.0], [0.0, 0.0, 4.045637215946818]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.022818607973409, 2.022818607973409], [2.022818607973409, 0.0, 2.022818607973409], [2.022818607973409, 2.022818607973409, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_3': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.111970927282933, 0.0, 0.0], [0.0, 4.111970927282933, 0.0], [0.0, 0.0, 4.111970927282933]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0559854636414663, 2.0559854636414663], [2.0559854636414663, 0.0, 2.0559854636414663], [2.0559854636414663, 2.0559854636414663, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_4': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.176230852372157, 0.0, 0.0], [0.0, 4.176230852372157, 0.0], [0.0, 0.0, 4.176230852372157]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0881154261860786, 2.0881154261860786], [2.0881154261860786, 0.0, 2.0881154261860786], [2.0881154261860786, 2.0881154261860786, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '9f4a0c82-798c-4178-9a46-c5430a2853c1': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.906019785962126, 0.0, 0.0], [0.0, 3.906019785962126, 0.0], [0.0, 0.0, 3.906019785962126]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.953009892981063, 1.953009892981063], [1.953009892981063, 0.0, 1.953009892981063], [1.953009892981063, 1.953009892981063, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '8e10ca3a-91ba-4647-bca8-3c905020fb39': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.9770538443180263, 0.0, 0.0], [0.0, 3.9770538443180263, 0.0], [0.0, 0.0, 3.9770538443180263]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9885269221590132, 1.9885269221590132], [1.9885269221590132, 0.0, 1.9885269221590132], [1.9885269221590132, 1.9885269221590132, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '765da827-3180-44d3-940e-e9d5a7e2ae45': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637215946818, 0.0, 0.0], [0.0, 4.045637215946818, 0.0], [0.0, 0.0, 4.045637215946818]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.022818607973409, 2.022818607973409], [2.022818607973409, 0.0, 2.022818607973409], [2.022818607973409, 2.022818607973409, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '5f8ce3d7-f65e-481d-8cb0-291d204df659': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.111970927282933, 0.0, 0.0], [0.0, 4.111970927282933, 0.0], [0.0, 0.0, 4.111970927282933]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0559854636414663, 2.0559854636414663], [2.0559854636414663, 0.0, 2.0559854636414663], [2.0559854636414663, 2.0559854636414663, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '12912688-d0c2-4053-80b2-a758b50ce86a': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.176230852372157, 0.0, 0.0], [0.0, 4.176230852372157, 0.0], [0.0, 0.0, 4.176230852372157]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0881154261860786, 2.0881154261860786], [2.0881154261860786, 0.0, 2.0881154261860786], [2.0881154261860786, 2.0881154261860786, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '282ce127-dc4e-4e2d-9769-c22bdcdf2e3f': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.906019768889166, 0.0, 0.0], [0.0, 3.906019768889166, 0.0], [0.0, 0.0, 3.906019768889166]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9530098844635175, 1.9530098844635175], [1.9530098844635175, 0.0, 1.9530098844635175], [1.9530098844635175, 1.9530098844635175, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.8457446150626, 'volume': 59.594106252679225}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '76b1d287-fd0f-4fed-a0b7-cc817dffe2d8': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.9770538269345797, 0.0, 0.0], [0.0, 3.9770538269345797, 0.0], [0.0, 0.0, 3.9770538269345797]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9885269135082753, 1.9885269135082753], [1.9885269135082753, 0.0, 1.9885269135082753], [1.9885269135082753, 1.9885269135082753, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.9161488594607, 'volume': 62.90488993338357}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '2c6bfb73-15c3-4be7-95ab-f9afbeaf53bc': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637198263596, 0.0, 0.0], [0.0, 4.045637198263596, 0.0], [0.0, 0.0, 4.045637198263596]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0228185991583882, 2.0228185991583882], [2.0228185991583882, 0.0, 2.0228185991583882], [2.0228185991583882, 2.0228185991583882, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.9365241668372, 'volume': 66.21567361408789}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '4f947882-06db-4296-8456-b12cff2e66e3': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.111970909309766, 0.0, 0.0], [0.0, 4.111970909309766, 0.0], [0.0, 0.0, 4.111970909309766]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0559854546134178, 2.0559854546134178], [2.0559854546134178, 0.0, 2.0559854546134178], [2.0559854546134178, 2.0559854546134178, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.9192860025842, 'volume': 69.52645729479204}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n 'd7bd31df-d3a7-49a1-9ae8-7766d4c519ec': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.17623083411812, 0.0, 0.0], [0.0, 4.17623083411812, 0.0], [0.0, 0.0, 4.17623083411812]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.08811541707298, 2.08811541707298], [2.08811541707298, 0.0, 2.08811541707298], [2.08811541707298, 2.08811541707298, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.87379046934, 'volume': 72.83724097549673}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n 'daa806da-16e9-4733-afe1-2ae60dc6292f': {1: Response(output=[59.594106252679225, 62.90488993338357, 66.21567361408789, 69.52645729479204, 72.83724097549673], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n '407d4cb0-b4f3-41f5-ba66-077754af69eb': {1: Response(output=[-1074.8457446150626, -1074.9161488594607, -1074.9365241668372, -1074.9192860025842, -1074.87379046934], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n 'e363e583-bcc3-4cd8-b943-f6e4487b11f0': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))}}"
+ "text/plain": [
+ "{'ceb203d4-4b50-4fbf-bd60-36680543382b': {1: Response(output='{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.05, 0.0, 0.0], [0.0, 4.05, 0.0], [0.0, 0.0, 4.05]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.025, 2.025], [2.025, 0.0, 2.025], [2.025, 2.025, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '27f28719-6394-4a85-b93f-c8ece2feceaf': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.05, 0.0, 0.0], [0.0, 4.05, 0.0], [0.0, 0.0, 4.05]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.025, 2.025], [2.025, 0.0, 2.025], [2.025, 2.025, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'vc-relax', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " 'ae0b4b06-5734-41ea-a7cc-e8393ef01e55': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637215946818, 0.0, 0.0], [0.0, 4.045637215946818, 0.0], [0.0, 0.0, 4.045637215946818]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.022818607973409, 2.022818607973409], [2.022818607973409, 0.0, 2.022818607973409], [2.022818607973409, 2.022818607973409, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.93652622536, 'volume': 66.21567448236135}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " 'e9deb2a2-2e2a-4077-a221-a6afc9701377': {1: Response(output={'s_0': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.906019785962126, 0.0, 0.0], [0.0, 3.906019785962126, 0.0], [0.0, 0.0, 3.906019785962126]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.953009892981063, 1.953009892981063], [1.953009892981063, 0.0, 1.953009892981063], [1.953009892981063, 1.953009892981063, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_1': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.9770538443180263, 0.0, 0.0], [0.0, 3.9770538443180263, 0.0], [0.0, 0.0, 3.9770538443180263]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9885269221590132, 1.9885269221590132], [1.9885269221590132, 0.0, 1.9885269221590132], [1.9885269221590132, 1.9885269221590132, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_2': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637215946818, 0.0, 0.0], [0.0, 4.045637215946818, 0.0], [0.0, 0.0, 4.045637215946818]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.022818607973409, 2.022818607973409], [2.022818607973409, 0.0, 2.022818607973409], [2.022818607973409, 2.022818607973409, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_3': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.111970927282933, 0.0, 0.0], [0.0, 4.111970927282933, 0.0], [0.0, 0.0, 4.111970927282933]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0559854636414663, 2.0559854636414663], [2.0559854636414663, 0.0, 2.0559854636414663], [2.0559854636414663, 2.0559854636414663, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 's_4': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.176230852372157, 0.0, 0.0], [0.0, 4.176230852372157, 0.0], [0.0, 0.0, 4.176230852372157]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0881154261860786, 2.0881154261860786], [2.0881154261860786, 0.0, 2.0881154261860786], [2.0881154261860786, 2.0881154261860786, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '9f4a0c82-798c-4178-9a46-c5430a2853c1': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.906019785962126, 0.0, 0.0], [0.0, 3.906019785962126, 0.0], [0.0, 0.0, 3.906019785962126]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.953009892981063, 1.953009892981063], [1.953009892981063, 0.0, 1.953009892981063], [1.953009892981063, 1.953009892981063, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '8e10ca3a-91ba-4647-bca8-3c905020fb39': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.9770538443180263, 0.0, 0.0], [0.0, 3.9770538443180263, 0.0], [0.0, 0.0, 3.9770538443180263]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9885269221590132, 1.9885269221590132], [1.9885269221590132, 0.0, 1.9885269221590132], [1.9885269221590132, 1.9885269221590132, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '765da827-3180-44d3-940e-e9d5a7e2ae45': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637215946818, 0.0, 0.0], [0.0, 4.045637215946818, 0.0], [0.0, 0.0, 4.045637215946818]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.022818607973409, 2.022818607973409], [2.022818607973409, 0.0, 2.022818607973409], [2.022818607973409, 2.022818607973409, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '5f8ce3d7-f65e-481d-8cb0-291d204df659': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.111970927282933, 0.0, 0.0], [0.0, 4.111970927282933, 0.0], [0.0, 0.0, 4.111970927282933]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0559854636414663, 2.0559854636414663], [2.0559854636414663, 0.0, 2.0559854636414663], [2.0559854636414663, 2.0559854636414663, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '12912688-d0c2-4053-80b2-a758b50ce86a': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.176230852372157, 0.0, 0.0], [0.0, 4.176230852372157, 0.0], [0.0, 0.0, 4.176230852372157]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0881154261860786, 2.0881154261860786], [2.0881154261860786, 0.0, 2.0881154261860786], [2.0881154261860786, 2.0881154261860786, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'calculation': 'scf', 'kpts': [3, 3, 3], 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '282ce127-dc4e-4e2d-9769-c22bdcdf2e3f': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.906019768889166, 0.0, 0.0], [0.0, 3.906019768889166, 0.0], [0.0, 0.0, 3.906019768889166]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9530098844635175, 1.9530098844635175], [1.9530098844635175, 0.0, 1.9530098844635175], [1.9530098844635175, 1.9530098844635175, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.8457446150626, 'volume': 59.594106252679225}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '76b1d287-fd0f-4fed-a0b7-cc817dffe2d8': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[3.9770538269345797, 0.0, 0.0], [0.0, 3.9770538269345797, 0.0], [0.0, 0.0, 3.9770538269345797]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 1.9885269135082753, 1.9885269135082753], [1.9885269135082753, 0.0, 1.9885269135082753], [1.9885269135082753, 1.9885269135082753, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.9161488594607, 'volume': 62.90488993338357}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '2c6bfb73-15c3-4be7-95ab-f9afbeaf53bc': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.045637198263596, 0.0, 0.0], [0.0, 4.045637198263596, 0.0], [0.0, 0.0, 4.045637198263596]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0228185991583882, 2.0228185991583882], [2.0228185991583882, 0.0, 2.0228185991583882], [2.0228185991583882, 2.0228185991583882, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.9365241668372, 'volume': 66.21567361408789}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '4f947882-06db-4296-8456-b12cff2e66e3': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.111970909309766, 0.0, 0.0], [0.0, 4.111970909309766, 0.0], [0.0, 0.0, 4.111970909309766]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.0559854546134178, 2.0559854546134178], [2.0559854546134178, 0.0, 2.0559854546134178], [2.0559854546134178, 2.0559854546134178, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.9192860025842, 'volume': 69.52645729479204}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " 'd7bd31df-d3a7-49a1-9ae8-7766d4c519ec': {1: Response(output={'structure': '{\"immutable_id\": null, \"last_modified\": null, \"elements\": [\"Al\"], \"nelements\": 1, \"elements_ratios\": [1.0], \"chemical_formula_descriptive\": \"Al4\", \"chemical_formula_reduced\": \"Al\", \"chemical_formula_hill\": null, \"chemical_formula_anonymous\": \"A\", \"dimension_types\": [1, 1, 1], \"nperiodic_dimensions\": 3, \"lattice_vectors\": [[4.17623083411812, 0.0, 0.0], [0.0, 4.17623083411812, 0.0], [0.0, 0.0, 4.17623083411812]], \"space_group_symmetry_operations_xyz\": null, \"space_group_symbol_hall\": null, \"space_group_symbol_hermann_mauguin\": null, \"space_group_symbol_hermann_mauguin_extended\": null, \"space_group_it_number\": null, \"cartesian_site_positions\": [[0.0, 0.0, 0.0], [0.0, 2.08811541707298, 2.08811541707298], [2.08811541707298, 0.0, 2.08811541707298], [2.08811541707298, 2.08811541707298, 0.0]], \"nsites\": 4, \"species\": [{\"name\": \"Al\", \"chemical_symbols\": [\"Al\"], \"concentration\": [1.0], \"mass\": null, \"original_name\": null, \"attached\": null, \"nattached\": null}], \"species_at_sites\": [\"Al\", \"Al\", \"Al\", \"Al\"], \"assemblies\": null, \"structure_features\": []}', 'energy': -1074.87379046934, 'volume': 72.83724097549673}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " 'daa806da-16e9-4733-afe1-2ae60dc6292f': {1: Response(output=[59.594106252679225, 62.90488993338357, 66.21567361408789, 69.52645729479204, 72.83724097549673], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " '407d4cb0-b4f3-41f5-ba66-077754af69eb': {1: Response(output=[-1074.8457446150626, -1074.9161488594607, -1074.9365241668372, -1074.9192860025842, -1074.87379046934], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))},\n",
+ " 'e363e583-bcc3-4cd8-b943-f6e4487b11f0': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan'))}}"
+ ]
},
- "metadata": {}
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
},
{
- "output_type": "display_data",
"data": {
- "text/plain": "",
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHACAYAAACyIiyEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW/BJREFUeJzt3XlcVXXCx/HPZReUi8omgqC5AO5LKmZp5ZpLWpltmFZOzYwtVlb2tDht2t6UbdOUtttoWrZRmtrkgjuuCLjgwubKIsh6z/MHwkQiKsI9XPi+X6/7eh4u51y+98Rcvv5+5/yOxTAMAxERERGplJPZAURERETqMpUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgsmeT555+nX79+eHp64uPjc177GIbBjBkzCAoKolGjRgwcOJAdO3aUfz85ORmLxVLpY/78+We8XkFBAd26dcNisRAXF3dB+d999126dOmCt7c33t7eREVF8dNPP13Qa4iIiDgClSWTFBYWMm7cOP7617+e9z4vvfQSr732GrNnz2b9+vUEBgYyePBgcnJyAAgJCSEtLa3C4x//+AdeXl4MHz78jNd75JFHCAoKqlb+4OBgZs2axYYNG9iwYQNXXXUV1157bYXyJiIiUi8YYqo5c+YYVqv1nNvZbDYjMDDQmDVrVvlz+fn5htVqNd57772z7tetWzfjjjvuOOP5H3/80QgPDzd27NhhAMbmzZsrfH/Hjh3G8OHDDS8vL8Pf39+47bbbjCNHjlSZsWnTpsa///3vc74XERERR6KRJQexb98+0tPTGTJkSPlz7u7uDBgwgNWrV1e6z8aNG4mLi+POO++s8HxGRgaTJ0/m008/xdPT84z90tLSGDBgAN26dWPDhg3ExMSQkZHBjTfeWOnPKSkpYd68eeTm5hIVFXUR71JERKTucTE7gJyf9PR0AAICAio8HxAQwP79+yvd58MPPyQiIoJ+/fqVP2cYBhMnTuSee+6hV69eJCcnn7Hfu+++S48ePXjhhRfKn/voo48ICQkhMTGR9u3bA7Bt2zaioqLIz8+ncePGLFq0iMjIyIt9qyIiInWKRpZq0IwZM856gnXZY8OGDRf1MywWS4WvDcM44zmAU6dO8cUXX5wxqvTWW2+RnZ3N9OnTz/ozNm7cyPLly2ncuHH5Izw8HIA9e/aUb9ehQwfi4uKIjY3lr3/9K7fffjs7d+68mLcnIiJS52hkqQZNmTKFm266qcptwsLCqvXagYGBQOkIU4sWLcqfP3z48BmjTQALFiwgLy+PCRMmVHh+2bJlxMbG4u7uXuH5Xr16ceutt/Lxxx9js9kYNWoUL7744hmv+8ef7ebmRtu2bcv3X79+Pf/85z95//33q/UeRURE6iKVpRrk6+uLr69vrbx269atCQwMZMmSJXTv3h0ovaLut99+q7TUfPjhh4wePRo/P78Kz7/55ps899xz5V+npqYydOhQvvrqK/r06QNAjx49+PrrrwkLC8PF5fx/RQzDoKCgoDpvT0REpM5SWTLJgQMHOH78OAcOHKCkpKR8naO2bdvSuHFjAMLDw5k5cyZjx47FYrHwwAMP8MILL9CuXTvatWvHCy+8gKenJ7fcckuF1969ezf//e9/+fHHH8/4ua1atarwddnPuuSSSwgODgbg73//Ox988AE333wz06ZNw9fXl927dzNv3jw++OADnJ2defzxxxk+fDghISHk5OQwb948VqxYQUxMTE0fKhEREVOpLJnkqaee4uOPPy7/umy0aPny5QwcOBCAhIQEsrKyyrd55JFHOHXqFH/72984ceIEffr04ZdffqFJkyYVXvujjz6iZcuWFa6cuxBBQUGsWrWKRx99lKFDh1JQUEBoaCjDhg3Dyan0NLeMjAyio6NJS0vDarXSpUsXYmJiGDx4cLV+poiISF1lMQzDMDuEiIiISF2lq+FEREREqqCyJCIiIlIFnbNUA2w2G6mpqTRp0qTSNY9ERESk7jEMg5ycHIKCgsrPya2MylINSE1NJSQkxOwYIiIiUg0HDx4svyK8MipLNaDsarSDBw/i7e1tchoRERE5H9nZ2YSEhJxxVfmfqSzVgLKpN29vb5UlERERB3OuU2h0greIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgs1WGGYbBu33HyCovNjiIiItJgqSzVYX/9bBM3vr+GRZtTzI4iIiLSYKks1WG9wpoCMHdVMoZhmJxGRESkYVJZqsNuvDQELzdnkg6fZNXuY2bHERERaZBUluowbw9XbugZDMCcVftMTiMiItIwqSzVcbf3CwNgWcJhko/mmhtGRESkAVJZquPa+DVmYAc/DAPmrk42O46IiEiDo7LkACZd1hqABRsPkZNfZHIaERGRhkVlyQFc0c6XS/y8OFlQzIKNh8yOIyIi0qCoLDkAi8XCxNPnLn28OhmbTcsIiIiI2IvKkoO4rkcwTTxcSD6Wx/KEw2bHERERaTBUlhyEl7sLN10aAuhEbxEREXtSWXIgE6LCcLLA70lHScrIMTuOiIhIg6Cy5EBCmnkyKCIAgDkaXRIREbELlSUHU7aMwMJNh8jMKzQ5jYiISP2nsuRg+rZpRnhgE/KLbHy1/qDZcUREROo9lSUHY7FYuOP06NIna/ZTXGIzOZGIiEj9prLkgEZ3C6KppyspmadYsjPD7DgiIiL1msqSA/JwdeaWPq0AmLMq2dwwIiIi9ZzKkoOK7huGi5OFdcnH2Z6SZXYcERGRektlyUEFWj0Y3rkFoEUqRUREapPKkgMru1/c4rhUjp4sMDeMiIhIPaWy5MB6tPKha7CVwhIbX6w9YHYcERGRekllyYFZLJbyRSo/i91PYbGWERAREalpKksO7prOLfBr4s7hnAJ+2p5mdhwREZF6R2XJwbm5OHFbn1AAPtIyAiIiIjVOZakeuKVPK9ycndhyMJPNB06YHUdERKReUVmqB/yauDOqaxCgRSpFRERqmspSPTHpsjAAftyWRnpWvrlhRERE6hGVpXqiU0srl4Y1pdhm8FnsfrPjiIiI1BsqS/VI2TICX6w7QH5RiclpRERE6geVpXpkSGQALX0acTy3kMVbUs2OIyIiUi+oLNUjLs5OREeVLiMwZ1UyhmGYnEhERMTxqSzVMzddGoKHqxPxadms3Xfc7DgiIiIOT2WpnvHxdGNs92AA5moZARERkYumslQPlS0j8MvOdA4ezzM3jIiIiINTWaqH2gc0oX9bX2wGfKplBERERC6KylI9NbFfGADz1h0gr7DY3DAiIiIOTGWpnroq3J/Q5p5k5xezcFOK2XFEREQclspSPeXkZOH2qDAA5q7WMgIiIiLVpbJUj43rFYyXmzO7D5/k96SjZscRERFxSCpL9VgTD1fG9QoBYM6qfSanERERcUwqS/Xc7f3CsFhgecIR9h3NNTuOiIiIw1FZquda+3pxZQd/AD5enWxuGBEREQekstQAlC0jMH/DQbLzi8wNIyIi4mBUlhqAy9v50ta/MbmFJczfcMjsOCIiIg5FZakBsFgs5aNLH69OpsSmZQRERETOl8pSA3Fdj5Z4e7hw4Hgey3cdNjuOiIiIw1BZaiA83Vy4qXcrAOas1jICIiIi50tlqQGZEBWKkwVW7T5GYkaO2XFEREQcgsOUpRMnThAdHY3VasVqtRIdHU1mZmaV+5w8eZIpU6YQHBxMo0aNiIiI4N133z1juzVr1nDVVVfh5eWFj48PAwcO5NSpU7X0TswT3NSTIZGBAMxZlWxuGBEREQfhMGXplltuIS4ujpiYGGJiYoiLiyM6OrrKfaZOnUpMTAyfffYZ8fHxTJ06lXvvvZdvv/22fJs1a9YwbNgwhgwZwrp161i/fj1TpkzByclhDs0FmXRZGACLNh8iM6/Q3DAiIiIOwGI4wB1W4+PjiYyMJDY2lj59+gAQGxtLVFQUu3btokOHDpXu16lTJ8aPH8+TTz5Z/lzPnj255pprePbZZwHo27cvgwcPLv+6OrKzs7FarWRlZeHt7V3t17EHwzC45s2VxKdl8+iwcP468BKzI4mIiJjifP9+O8TwyZo1a7BareVFCUpLjtVqZfXq1Wfdr3///ixevJiUlBQMw2D58uUkJiYydOhQAA4fPszatWvx9/enX79+BAQEMGDAAFauXFnr78ksFoulfHTp0zXJFJfYzA0kIiJSxzlEWUpPT8ff3/+M5/39/UlPTz/rfm+++SaRkZEEBwfj5ubGsGHDeOedd+jfvz8Ae/fuBWDGjBlMnjyZmJgYevTowdVXX01SUtJZX7egoIDs7OwKD0cyumsQzb3cSM3K55edGWbHERERqdNMLUszZszAYrFU+diwYQNQOiLyZ4ZhVPp8mTfffJPY2FgWL17Mxo0befXVV/nb3/7G0qVLAbDZSkdV7r77biZNmkT37t15/fXX6dChAx999NFZX3fmzJnlJ5pbrVZCQkIu5jDYnYerM7f0Ob2MwCotIyAiIlIVFzN/+JQpU7jpppuq3CYsLIytW7eSkXHmCMiRI0cICAiodL9Tp07x+OOPs2jRIkaMGAFAly5diIuL45VXXmHQoEG0aNECgMjIyAr7RkREcODAgbNmmj59Og8++GD519nZ2Q5XmG7rG8q7K/awPvkE21Oy6NTSanYkERGROsnUsuTr64uvr+85t4uKiiIrK4t169bRu3dvANauXUtWVhb9+vWrdJ+ioiKKiorOuKrN2dm5fEQpLCyMoKAgEhISKmyTmJjI8OHDz5rH3d0dd3f3c+auywK8PbimcwsWb0llzqpkXr2xq9mRRERE6iSHOGcpIiKCYcOGMXnyZGJjY4mNjWXy5MmMHDmywpVw4eHhLFq0CABvb28GDBjAtGnTWLFiBfv27WPu3Ll88sknjB07Fiid2ps2bRpvvvkmCxYsYPfu3Tz55JPs2rWLO++805T3ak9lJ3p/tyWVIzkF5oYRERGpo0wdWboQn3/+Offddx9DhgwBYPTo0cyePbvCNgkJCWRlZZV/PW/ePKZPn86tt97K8ePHCQ0N5fnnn+eee+4p3+aBBx4gPz+fqVOncvz4cbp27cqSJUu45JL6f0l991ZN6RbiQ9zBTL5Ye4D7B7UzO5KIiEid4xDrLNV1jrTO0p99G5fC/fPi8GvizqpHr8LNxSEGG0VERC5avVpnSWrP8E4t8G/izpGcAn7clmZ2HBERkTpHZamBc3NxIrpvKFC6jIAGGkVERCpSWRJu6dMKNxcnthzKYtOBTLPjiIiI1CkqS0Lzxu6M7hoEaJFKERGRP1NZEuB/ywj8tD2dtKxT5oYRERGpQ1SWBICOQVZ6t25Gic3gs9j9ZscRERGpM1SWpNwdp0eXvlh7gPyiEnPDiIiI1BEqS1JuUEQALX0acSKviG/jUsyOIyIiUieoLEk5F2cnJkSVLSOQrGUEREREUFmSP7np0lY0cnVmV3oOsXuPmx1HRETEdCpLUoHV05XrerQEtIyAiIgIqCxJJSb2CwNgaXwGB4/nmRtGRETEZCpLcoZ2AU24vJ0vNgM+WZNsdhwRERFTqSxJpcoWqZy3/iC5BcXmhhERETGRypJUamB7f8Kae5KTX8zCTYfMjiMiImIalSWplJOThdtPn7s0d3UyNpuWERARkYZJZUnO6oaewTR2d2HPkVx+333U7DgiIiKmUFmSs2ri4cq4XsGAlhEQEZGGS2VJqnR7VBgWC6xIOMKeIyfNjiMiImJ3KktSpTBfL67q4A/AJ6uTzQ0jIiJiApUlOadJl7UGYMHGQ2TnF5mcRkRExL5UluScLmvbnHb+jcktLOE/6w+aHUdERMSuVJbknCwWCxNPL1L58ZpkSrSMgIiINCAqS3JerusejLWRKwePn2LZrsNmxxEREbEblSU5L43cnLmpdwigZQRERKRhUVmS8zYhKgwnC6zec4xd6dlmxxEREbELlSU5by19GjG0YyAAc1clmxtGRETETlSW5IKULSOwaHMKJ3ILTU4jIiJS+1SW5IJcGtaUjkHeFBTb+HL9AbPjiIiI1DqVJbkgFoulfHTp0zX7KSqxmZxIRESkdqksyQUb2aUFzb3cSMvK5+cd6WbHERERqVUqS3LBPFydubVPK0AneouISP2nsiTVclvfUFydLWzYf4Jth7LMjiMiIlJrVJakWvy9PRjRuQWgRSpFRKR+U1mSapt4+kTv77amcjgn3+Q0IiIitUNlSaqtW4gP3Vv5UFRi8MVaLSMgIiL1k8qSXJSyZQQ+iz1AQXGJyWlERERqnsqSXJThnQIJ8Hbn6MkCftiaZnYcERGRGqeyJBfF1dmJ6L6hAMxZlYxhGCYnEhERqVkqS3LRbu7dCjcXJ7alZLHpwAmz44iIiNQolSW5aM0buzOmWxAAH2mRShERqWdUlqRGTOxXeqJ3zPZ0UjNPmZxGRESk5qgsSY2IDPKmT+tmlNgMPovdb3YcERGRGqOyJDWmbBmBL9cdIL9IywiIiMjFO3g8jzmr9mGzmXcBkcqS1JjBkQEEN23EibwivtmcYnYcERFxcDabwbQFW/jHdzt54cd403KoLEmNcXaycHtUGKBlBERE5OJ9tnY/sXuP08jVmeioUNNyqCxJjbqxVwiNXJ1JyMhhzd5jZscREREHdeBYHjN/3AXAY8PDCW3uZVoWlSWpUVZPV67v2RIoHV0SERG5UDabwcMLtnCqqIS+bZqVL35sFpUlqXFlywgsjc/gwLE8k9OIiIij+WRNMuv2HcfTzZmXru+Kk5PF1DwqS1Lj2vo35or2fhgGfLwm2ew4IiLiQJKP5jIrpnT6bfrwcFo19zQ5kcqS1JJJ/cIA+M/6g+QWFJsbRkREHILNZvDIgq3kF9mIatOcW/uYO/1WRmVJasWA9n608fUip6CYrzcdMjuOiIg4gLmrk1mXfBwvN2deuqGL6dNvZVSWpFY4OVm4/fTo0txVyaYuJiYiInXfvqO5vPTz6em3ayIIaWb+9FsZlSWpNdf3DKaJuwt7j+byW9IRs+OIiEgdVWIzmDZ/C/lFNvq39eXWPq3MjlSBypLUmsbuLozrFQKUji6JiIhUZs6qfWzYf4LG7i7Mur4zFkvdmH4ro7IktWpivzAsFvgt8Qi7D580O46IiNQxe46c5OWfEwB4/JoIgpvWnem3MipLUqtaNffk6vAAAD5enWxuGBERqVPKpt8Kim1c3s6Xm3uHmB2pUipLUusmXRYGwNebDpF1qsjcMCIiUmd8tHIfmw5knp5+61Lnpt/KqCxJret3SXM6BDQhr7CE+RsOmh1HRETqgN2HT/LyL6XTb0+MiKClTyOTE52dypLUOovFwsTTo0tzVydTomUEREQatBKbwcPzt1BYbOOK9n6Mv7RuTr+VUVkSuxjTrSU+nq4cOnGKpfEZZscRERETffD7XuIOZtLE3YUX6+DVb3+msiR20cjNmZsuLV03Q8sIiIg0XLsP5/DakkQAnhwVSQtr3Z1+K6OyJHYzISoUZycLa/YeIz4t2+w4IiJiZ8UlNh6av5XCYhtXdvBjXM9gsyOdF4cpSydOnCA6Ohqr1YrVaiU6OprMzMwq9zl58iRTpkwhODiYRo0aERERwbvvvlthm/T0dKKjowkMDMTLy4sePXqwYMGCWnwnDVeQTyOGdQwENLokItIQ/ev3vWw5mEkTDxdmXld3r377M4cpS7fccgtxcXHExMQQExNDXFwc0dHRVe4zdepUYmJi+Oyzz4iPj2fq1Knce++9fPvtt+XbREdHk5CQwOLFi9m2bRvXXXcd48ePZ/PmzbX9lhqksmUEvolL4XhuoblhRETEbhIzcnhjSRIAT4/qSKDVw+RE588hylJ8fDwxMTH8+9//JioqiqioKD744AO+//57EhISzrrfmjVruP322xk4cCBhYWH85S9/oWvXrmzYsKHCNvfeey+9e/emTZs2PPHEE/j4+LBp0yZ7vLUGp2doUzq19Kag2MaX6w6YHUdEROyguMRWevVbiY2rwv25vkdLsyNdEIcoS2vWrMFqtdKnT5/y5/r27YvVamX16tVn3a9///4sXryYlJQUDMNg+fLlJCYmMnTo0ArbfPXVVxw/fhybzca8efMoKChg4MCBtfmWGiyLxcKkfq0B+HTNfopKbCYnEhGR2vb+f/ey9VAW3h4uzLyu7l/99mcOUZbS09Px9/c/43l/f3/S09PPut+bb75JZGQkwcHBuLm5MWzYMN555x369+9fvs1XX31FcXExzZs3x93dnbvvvptFixZxySWXnPV1CwoKyM7OrvCQ8zeyawt8G7uTnp1PzPaz//cTERHHtys9mzeWll79NmN0RwK8HWf6rYypZWnGjBlYLJYqH2VTZpW1UMMwqmynb775JrGxsSxevJiNGzfy6quv8re//Y2lS5eWb/PEE09w4sQJli5dyoYNG3jwwQcZN24c27ZtO+vrzpw5s/xEc6vVSkhI3V5Mq65xd3Hm1j6lywjMWbXP5DQiIlJbik5PvxWVGAyK8Gdsd8eafitjMQzDtOWUjx49ytGjR6vcJiwsjC+++IIHH3zwjKvffHx8eP3115k0adIZ+506dQqr1cqiRYsYMWJE+fN33XUXhw4dIiYmhj179tC2bVu2b99Ox44dy7cZNGgQbdu25b333qs0U0FBAQUFBeVfZ2dnExISQlZWFt7e3ufz1hu8wzn5XDZrGUUlBt/+/TK6hviYHUlERGrYW78m8eqSRKyNXFky9Qr869ioUnZ2Nlar9Zx/v13smOkMvr6++Pr6nnO7qKgosrKyWLduHb179wZg7dq1ZGVl0a9fv0r3KSoqoqioCCenioNnzs7O2Gyl58nk5eUBVLlNZdzd3XF3dz9nbjk7/yYejOwSxKLNKcxdnczr47uZHUlERGpQfFo2by4rvfrtH6M71rmidCEc4pyliIgIhg0bxuTJk4mNjSU2NpbJkyczcuRIOnToUL5deHg4ixYtAsDb25sBAwYwbdo0VqxYwb59+5g7dy6ffPIJY8eOLd++bdu23H333axbt449e/bw6quvsmTJEsaMGWPGW21QypYR+H5rKoez880NIyIiNeaP02+DIwO4tluQ2ZEuikOUJYDPP/+czp07M2TIEIYMGUKXLl349NNPK2yTkJBAVlZW+dfz5s3j0ksv5dZbbyUyMpJZs2bx/PPPc8899wDg6urKjz/+iJ+fH6NGjaJLly588sknfPzxx1xzzTV2fX8NUZdgH3qGNqWoxOCztVpGQESkvnhn+R52pGbj4+nK82M7OdzVb39m6jlL9cX5znnKmb7bksq9X27Gt7Ebqx67CncXZ7MjiYjIRdiRmsW1s1dRbDP4503duLZb3T2p+3z/fjvMyJLUT8M6BRLo7cHRk4V8vyXN7DgiInIRCottPDx/K8U2g6EdAxjd1bGn38qoLImpXJ2diI4KBWDO6n1ooFNExHG9vXw38WnZNPV05bkxjrf45NmoLInpbu7dCncXJ7anZLNh/wmz44iISDVsT8ni7eW7AXjm2k74Nak/V42rLInpmnm5Meb0nPbcVcnmhhERkQtWOv22hWKbwfBOgYzs0sLsSDVKZUnqhEn9wwCI2ZFOauYpc8OIiMgFmb0siV3pOTTzcuPZMY5/9dufqSxJnRAe6E1Um+aU2Aw+WbPf7DgiInKeth3K4u0VewB49tpO+DauP9NvZVSWpM4oW6Tyy3UHOFVYYm4YERE5p4LiEh6ev4USm8GILi0YUc+m38qoLEmdcXVEACHNGpF1qohv4lLMjiMiIufw1q+7ScjIobmXG8+M7njuHRyUypLUGc5OFm6PCgNgziotIyAiUpdtPZTJu7+VTr89N6YTzevh9FsZlSWpU8b1CsHTzZnEjJOs3nPM7DgiIlKJP06/jeoaxPDO9XP6rYzKktQp1kau3NAzGIA5WkZARKRO+ufSJBIzTuLb2I1/1OPptzIqS1Ln3N4vDIBfd2Ww/1iuuWFERKSCuIOZvFc+/daZZl5uJieqfSpLUudc4teYAe39MAz4eLWWERARqSvyi0qn32wGXNstiGGdAs2OZBfVKku5ufrXvtSusmUE5m84yMmCYnPDiIgIAK8vTWT34ZP4NnZnxqj6P/1WplplKSAggDvuuIOVK1fWdB4RAK5o50cbXy9yCor5euMhs+OIiDR4mw6c4IP/7gXghbGdaNoApt/KVKssffnll2RlZXH11VfTvn17Zs2aRWpqak1nkwbMycnCxNOjS3NXJ2OzaRkBERGz5BeVMO309NvY7i0Z0rFhTL+VqVZZGjVqFF9//TWpqan89a9/5csvvyQ0NJSRI0eycOFCios1bSIX7/oewTTxcGHf0Vx+SzxidhwRkQbrtSWJ7DmSi18Td54eFWl2HLu7qBO8mzdvztSpU9myZQuvvfYaS5cu5YYbbiAoKIinnnqKvLy8msopDZCXuwvje4UA8NGqfSanERFpmDbuP8EHv5dOv80c2xkfz4Yz/VbmospSeno6L730EhERETz22GPccMMN/Prrr7z++ussWrSIMWPG1FBMaagmRIVhscDvSUfZfTjH7DgiIg1K2fSbYcB1PVoyKDLA7EimcKnOTgsXLmTOnDn8/PPPREZG8ve//53bbrsNHx+f8m26detG9+7dayqnNFCtmnsyKCKAJTszmLs6mefGdDY7kohIg/HKzwnsPZpLgLc7T49sOFe//Vm1RpYmTZpEUFAQq1atIi4ujilTplQoSgBt2rTh//7v/2oiozRwZcsIfL0xhay8InPDiIg0EBuSj/Ph6VMgZl7XGaunq8mJzFOtkaW0tDQ8PT2r3KZRo0Y8/fTT1Qol8kdRbZoTHtiEXek5fLXhAH+54hKzI4mI1GunCksXnzQMuKFnMFeFN8zptzLVGlkqLi4mOzv7jEdOTg6FhYU1nVEaOIvFwsTTt0D5ePV+SrSMgIhIrXr55wSSj+UR6O3BkyMb3tVvf1atsuTj40PTpk3PePj4+NCoUSNCQ0N5+umnsdlsNZ1XGqgx3VvS1NOVlMxTLNmZYXYcEZF6a92+48xZfXr67frOWBs13Om3MtUqS3PnziUoKIjHH3+cb775hkWLFvH444/TsmVL3n33Xf7yl7/w5ptvMmvWrJrOKw2Uh6szN/duBcAcLSMgIlIr8gqLmbagdPrtxl7BXNnB3+xIdUK1zln6+OOPefXVV7nxxhvLnxs9ejSdO3fm/fff59dff6VVq1Y8//zzPP744zUWVhq26KhQ3v/vXtbuO86O1Cw6BlnNjiQiUq+8FJPA/mN5tLB68ISm38pVa2RpzZo1lS4L0L17d9asWQNA//79OXDgwMWlE/mDFtZG5Xe4/nh1srlhRETqmdi9x5h7+rN11vVd8PbQ9FuZapWl4OBgPvzwwzOe//DDDwkJKV1x+dixYzRt2vTi0on8yR2nlxH4Ji6VYycLzA0jIlJP5BUW88iCrQDcdGkIA9r7mZyobqnWNNwrr7zCuHHj+Omnn7j00kuxWCysX7+eXbt2sWDBAgDWr1/P+PHjazSsSI9WTekSbGXroSy+XHeAKVe1MzuSiIjDe/GnXRw4nkeQ1YP/GxFhdpw6x2IYRrWuw96/fz/vvfceCQkJGIZBeHg4d999N2FhYTUcse7Lzs7GarWSlZWFt7e32XHqvUWbDzH1qy0EeLuz8tGrcHW+qLv2iIg0aKv3HOWWD9YC8Omdvbm8XcMZVTrfv98XPLJUVFTEkCFDeP/995k5c+ZFhRSpjms6t+D5H3aRkV3AT9vTGd01yOxIIiIOKbfgf9Nvt/Rp1aCK0oW44H+Su7q6sn37diwWS23kETkndxdnbuurZQRERC7WrJ92cejEKVr6NOLxazT9djbVmr+YMGFCpSd4i9jLrX1CcXN2YvOBTOIOZpodR0TE4azefZRPY/cD8NINXWjsXq3TmBuEah2ZwsJC/v3vf7NkyRJ69eqFl5dXhe+/9tprNRJO5Gz8mrgzsmsLFm5KYe6qfbxx05lLWYiISOVOFhQz7fT02219W3FZW1+TE9Vt1SpL27dvp0ePHgAkJiZW+J6m58ReJvVrzcJNKfywLY3Hr4nA39vD7EgiIg5h5o/xpGSeIrhpI6YP1/TbuVSrLC1fvrymc4hcsM7BVnqFNmXD/hN8FrufB4d0MDuSiEidtzLpKJ+vLV00+qUbuuCl6bdzuqhrrnfv3s3PP//MqVOnAKjmKgQi1TbpstYAfL72APlFJSanERGp23Lyi3j069LptwlRofS7RNNv56NaZenYsWNcffXVtG/fnmuuuYa0tDQA7rrrLh566KEaDShSlaEdA2hh9eBYbiHfb00zO46ISJ32wunpt5BmjXh0WLjZcRxGtcrS1KlTcXV15cCBA3h6epY/P378eGJiYmosnMi5uDg7ER0VCpQuI6DRTRGRyv038QhfrjsIwMs3dNX02wWoVln65ZdfePHFFwkODq7wfLt27di/f3+NBBM5Xzdf2goPVyd2pGazPvmE2XFEROqc7PwiHjs9/TaxXxh92zQ3OZFjqVZZys3NrTCiVObo0aO4u7tfdCiRC9HUy42x3VsCWqRSRKQyz38fT2pWPqHNPXlkmC6GuVDVKktXXHEFn3zySfnXFosFm83Gyy+/zJVXXllj4UTO18R+pSd6/7wjnZTMUyanERGpO1YkHOarDQexWEqn3zzdNP12oap1xF5++WUGDhzIhg0bKCws5JFHHmHHjh0cP36cVatW1XRGkXPqENiEfpc0Z/WeY3yyJlnrhoiIAFmninjs621A6fRb79bNTE7kmKo1shQZGcnWrVvp3bs3gwcPJjc3l+uuu47NmzdzySWX1HRGkfNStozAvHUHySssNjmNiIj5nvt+J+nZ+YQ19+SRobr6rbqqPRYXGBjIP/7xj5rMInJRrgr3p1UzTw4cz2PR5hRu7RNqdiQREdMs33WY+RsPlU6/jetKIzdnsyM5rGqXpczMTNatW8fhw4ex2WwVvjdhwoSLDiZyoZydLEyICuW5H+KZuyqZW3q30u13RKRBysor4rGFpVe/3XFZay4N0/TbxahWWfruu++49dZbyc3NpUmTJhX+IFksFpUlMc2Nl4bw+pJEkg6fZNXuY/Rvp9VpRaTheeb7nWRkF9Da14uHdSuoi1atc5Yeeugh7rjjDnJycsjMzOTEiRPlj+PHj9d0RpHz5u3hyg09S9f/0jICItIQ/RqfwdebSqffXhnXRdNvNaBaZSklJYX77ruv0rWWRMx2e78wAJYlHCb5aK65YURE7Cgrr4jpC0uvfrurf2t6hmr6rSZUqywNHTqUDRs21HQWkRrRxq8xAzv4YRjw8Zpks+OIiNjNP77bweGcAtr4efGQpt9qTLXOWRoxYgTTpk1j586ddO7cGVdX1wrfHz16dI2EE6muSZe1ZkXCEeZvOMSDg9vTxMP13DuJiDiwJTszWLg5BScLvDKuKx6umn6rKdUqS5MnTwbgmWeeOeN7FouFkpKSi0slcpGuaOfLJX5e7DmSy4KNh8rXYBIRqY8y8wp5fFHp9Nvky9vQo1VTkxPVL9WahrPZbGd9qChJXWCxWJh4uiB9vDoZm80wOZGISO2ZsXgHR3IKuMTPi6mD25sdp965oLJ0zTXXkJWVVf71888/T2ZmZvnXx44dIzIyssbCiVyM67q3pImHC8nH8liReNjsOCIiteLnHel8E5eKkwVevbGbpt9qwQWVpZ9//pmCgoLyr1988cUKSwUUFxeTkJBQc+lELoKXuws3XRoCwJxVyeaGERGpBSdyC/m/RdsB+MsVl9AtxMfcQPXUBZUlwzCq/FqkrpkQFYaTBX5POkpSRo7ZcUREatTTi3dw9GQB7fwb88CgdmbHqbeqdc6SiKMIaebJ4MgAAOauTjY3jIhIDYrZnsbiLak4O1l09Vstu6CyZLFYzrjXlu69JXXdxH6lJ3ov3JRCVl6RyWlERC7e8dxCnvimdPrtngFt6Krpt1p1QUsHGIbBxIkTcXd3ByA/P5977rkHLy8vgArnM4nUFX3bNCM8sAm70nOYt/4Adw+4xOxIIiIX5alvt3P0ZCEdAppw39WafqttFzSydPvtt+Pv74/VasVqtXLbbbcRFBRU/rW/v79uoit1jsVi4Y7Tywh8smY/xSU2kxOJiFTfj9vS+H5rWvn0m7uLpt9q2wWNLM2ZM6e2cojUqtHdgpgVs4uUzFMsjc9gWKcWZkcSEblgx04W8OTp6be/DbyEzsFWkxM1DDrBWxoED1dnbu5duozAR1pGQEQc1FPf7uBYbiHhgU249ypNv9mLypI0GNF9w3BxsrBu33F2pGadewcRkTrk+62p/LDtf9Nvbi76E24vDnOkT5w4QXR0dPn5UdHR0RVWD69MRkYGEydOJCgoCE9PT4YNG0ZSUlKFbQoKCrj33nvx9fXFy8uL0aNHc+jQoVp8J2KWQKsHwzuXTr9pkUoRcSRHcv43/fb3K9vSqaWm3+zJYcrSLbfcQlxcHDExMcTExBAXF0d0dPRZtzcMgzFjxrB3716+/fZbNm/eTGhoKIMGDSI3N7d8uwceeIBFixYxb948Vq5cycmTJxk5cqTucVdPTbosDIDFcakcPamrN0Wk7jMMgye/2c6JvCIiWngz5cq2ZkdqcCyGAyzDHR8fT2RkJLGxsfTp0weA2NhYoqKi2LVrFx06dDhjn8TERDp06MD27dvp2LEjACUlJfj7+/Piiy9y1113kZWVhZ+fH59++injx48HIDU1lZCQEH788UeGDh16Xvmys7OxWq1kZWXh7e1dQ+9aaoNhGIx5exVbDmXx0OD23KtLbkWkjlu8JZX7vtyMi5OFb6dcRscgjSrVlPP9++0QI0tr1qzBarWWFyWAvn37YrVaWb16daX7lK355OHhUf6cs7Mzbm5urFy5EoCNGzdSVFTEkCFDyrcJCgqiU6dOZ31dcWwWi4VJp5cR+DR2P4XFWkZAROquwzn5PPVt6fTblKvaqiiZxCHKUnp6Ov7+/mc87+/vT3p6eqX7hIeHExoayvTp0zlx4gSFhYXMmjWL9PR00tLSyl/Xzc2Npk2bVtg3ICDgrK8LpUUsOzu7wkMcxzWdW+DfxJ3DOQX8tD3N7DgiIpUyDIMnFm0nM6+IyBbe/F3Tb6YxtSzNmDGj/BYqZ3ts2LABqPy2KoZhnPV2K66urnz99dckJibSrFkzPD09WbFiBcOHD8fZueoFvKp6XYCZM2eWn2hutVoJCQm5gHctZnNzceK2vqGATvQWkbpr8ZZUftmZgatz6dVvrs4OMb5RL13QopQ1bcqUKdx0001VbhMWFsbWrVvJyMg443tHjhwhICDgrPv27NmTuLg4srKyKCwsxM/Pjz59+tCrVy8AAgMDKSws5MSJExVGlw4fPky/fv3O+rrTp0/nwQcfLP86OztbhcnB3Ny7FbOX7SbuYCabD5yge6um595JRMRODmfn89S3OwC496p2RAbpfFgzmVqWfH198fX1Ped2UVFRZGVlsW7dOnr37g3A2rVrycrKqrLUlLFaS+d4k5KS2LBhA88++yxQWqZcXV1ZsmQJN954IwBpaWls376dl1566ayv5+7uXn5/PHFMfk3cGdU1iK83HWLOqmSVJRGpMwzD4PFF28k6VUSnlt78daDuZ2k2hxjTi4iIYNiwYUyePJnY2FhiY2OZPHkyI0eOrHAlXHh4OIsWLSr/ev78+axYsaJ8+YDBgwczZsyY8hO6rVYrd955Jw899BC//vormzdv5rbbbqNz584MGjTI7u9T7KtsGYEft6WRnpVvbhgRkdO+iUthabym3+oSh/kv8Pnnn9O5c2eGDBnCkCFD6NKlC59++mmFbRISEsjK+t/KzGlpaURHRxMeHs59991HdHQ0X375ZYV9Xn/9dcaMGcONN97IZZddhqenJ9999905z2sSx9eppZXeYc0othl8vna/2XFERMjIzmfG4p0A3H91O8IDNf1WFzjEOkt1ndZZclw/bkvjb59vormXG6seuwoPV5VkETGHYRjc9fEGft11mM4trSz6Wz9cNKpUq+rVOksitWVIZAAtfRpxLLeQxVtSzY4jIg3Ywk0p/LrrMG7OTrx6Y1cVpTpE/yWkQXNxdiI66n/LCGigVUTMkJ6Vz4zvSq9+u39QO9oHNDE5kfyRypI0eDddGoKHqxPxadms23fc7Dgi0sAYhsH0hVvJyS+ma7CVu69oY3Yk+ROVJWnwfDzdGNs9GNAilSJifws2HmJ5whHcnJ14ZZym3+oi/RcR4X/LCPyyM52Dx/PMDSMiDUZa1ime+a706repg9vTTtNvdZLKkgjQPqAJ/dv6YjNKb7ArIlLbDMPgsa+3kVNQTLcQHyZf3trsSHIWKksip03sFwbAvHUHyCssNjeMiNR78zcc4rfEI7i5aPqtrtN/GZHTrgr3J7S5J9n5xSzclGJ2HBGpx1IzT/Hs96XTbw8Nbk9b/8YmJ5KqqCyJnObkZOH2qDAA5q7WMgIiUjsMw+DRr7eSU1BM91Y+3HW5rn6r61SWRP5gXK9gvNyc2X34JCt3HzU7jojUQ/PWH+T3pKO4n55+c3aymB1JzkFlSeQPmni4Mq5XCKBlBESk5qVknuL5H+IBmDa0A5f4afrNEagsifzJ7f3CsFhg2a7D7Duaa3YcEaknDMPg0QVbOVlQTK/Qpky6TFe/OQqVJZE/ae3rxZUd/AH4eHWyuWFEpN74Yt0BVu4unX576YYumn5zICpLIpUoW6Ry/oaD5OQXmRtGRBzeweN5vHB6+u2RYeG00fSbQ1FZEqlE/7a+tPVvTG5hCfM3HDI7jog4MJut9Oq33MISLg1ryqTTa7qJ41BZEqmExWIpX6Ty4zXJlNi0jICIVM/n6w6wes8xPFydePmGrjhp+s3hqCyJnMV1PVri7eHC/mN5LN912Ow4IuKADh7PY+aPpdNvjw4LJ8zXy+REUh0qSyJn4enmws29WwGli1SKiFwIm81g2oIt5BWW0Lt1s/JFb8XxqCyJVCE6KhQnC6zcfZTEjByz44iIA/ls7X5i9x6nkaszL9/QRdNvDkxlSaQKwU09GRIZCGiRShE5fweO5THzx10APDY8nNDmmn5zZCpLIudQtozAos2HyMwrNDeMiNR5NpvBwwu2cKqohL5tmhHdN9TsSHKRVJZEzqF362ZEtvAmv8jGvPUHzY4jInXcJ2uSWbfvOJ5uzrx0va5+qw9UlkTOwWKxMPH06NInq5MpLrGZG0hE6qzko7m8GJMAwPTh4bRq7mlyIqkJKksi52F01yCae7mRmpXPLzszzI4jInWQzWbwyIKtnCoqIapNc27to+m3+kJlSeQ8eLg6c0uf0mUE5qzaZ3IaEamL5q5OZl3ycbzcnHlJV7/VKypLIufptr6huDhZWJ98gu0pWWbHEZE6ZN/RXF76ufTqt+nXRBDSTNNv9YnKksh5CvD24JrOLQAtIyAi/1NiM5g2fwv5RTb6t/Xl1tOj0FJ/qCyJXICyZQS+25LKkZwCc8OISJ0wZ9U+Nuw/QWN3F2Zd3xmLRdNv9Y3KksgF6N6qKd1CfCgssfHF2gNmxxERk+05cpKXfy69+u3xayIIbqrpt/pIZUnkApWNLn22dj+FxVpGQKShKpt+Kyi2cXk7X27uHWJ2JKklKksiF2h4pxb4N3HnSE4BP25LMzuOiJjko5X72HQg8/T0WxdNv9VjKksiF8jNxan89gVzVu3DMAyTE4mIve0+fJKXfymdfntiRAQtfRqZnEhqk8qSSDXc0qcVbi5ObDmUxeaDmWbHERE7KrEZTFuwhcJiG1e092P8pZp+q+9UlkSqoXljd67tGgRoGQGRhubfv+9l84FMmri78KKufmsQVJZEqqnsfnE/bUsjPSvf3DAiYhe7D+fw6pJEAJ4cFUkLq6bfGgKVJZFq6hhkpXfrZhTbDD6NTTY7jojUsuISGw/N30phsY0rO/gxrmew2ZHETlSWRC7CHadHl75Ye4D8ohJzw4hIrfrX73vZcjCTJh4uzLxOV781JCpLIhdhUEQALX0acSKviMVxqWbHEZFakpiRwxtLkgB4elRHAq0eJicSe1JZErkILs5OTIgqXUbgIy0jIFIvFZfYeHj+FgpLbFwV7s/1PVqaHUnsTGVJ5CLddGkrGrk6sys9h9i9x82OIyI17P3/7mXroSy8PVyYeZ2ufmuIVJZELpLV05XrTv9Lc+7qfSanEZGalJCewxtLS69+mzG6IwHemn5riFSWRGrAxH5hACzZmcHB43nmhhGRGlF0evqtqMRgUIQ/Y7tr+q2hUlkSqQHtAppweTtfbAZ8sibZ7DgiUgPeW7GHbSlZWBu58sJYTb81ZCpLIjVk0ullBOatP0huQbG5YUTkosSnZfPmstKr3/4xuiP+mn5r0FSWRGrIwPb+hDX3JCe/mIWbU8yOIyLV9Mfpt8GRAVzbLcjsSGIylSWRGuLkZOH20+cuzV21D5tNywiIOKJ3lu9hR2o2Pp6uPD+2k6bfRGVJpCbd0DOYxu4u7DmSy++7j5odR0Qu0I7ULN764/RbE02/icqSSI1q4uHKuF6l94uas0rLCIg4ksJiGw/P30qxzWBoxwBGd9X0m5RSWRKpYbdHhWGxwIqEI+w9ctLsOCJynt5evpv4tGyaerry3Bhd/Sb/o7IkUsPCfL24qoM/AB+vTjY3jIicl+0pWby9fDcAz1zbCb8m7iYnkrpEZUmkFky6rDUACzYeIju/yOQ0IlKV0um3LRTbDIZ3CmRklxZmR5I6RmVJpBZc1rY57QMak1tYwn/WHzQ7johUYfayJHal59DMy41nx+jqNzmTypJILbBYLEzsVzq69PGaZPKLSkxOJCKV2Z6Sxdsr9gDw7LWd8G2s6Tc5k8qSSC0Z270lPp6uHDx+ilFvrWTLwUyzI4nIHxQUl/DQf7ZQYjMY0aUFIzT9JmehsiRSSxq5OTP75h74NnYn6fBJrnt3NS/F7KKgWKNMInXBW7/uJiEjh+ZebjwzuqPZcaQOU1kSqUX92/myZOoVjO4aRInN4J0Vexj11kq2Hso0O5pIg7b1UCbv/lY6/fbcmE401/SbVEFlSaSWNfVy482bu/PebT3wbexGYsZJxr6zmld+TtAok4gJCopLeHh+6fTbqK5BDO+s6TepmsqSiJ0M69SCX6YOYGSXFpTYDGYv383ot1axPSXL7GgiDco/lyaRmHES38Zu/EPTb3IeVJZE7KiZlxuzb+nBu7f2oLmXGwkZOVz79ipe+yWBwmKb2fFE6r24g5m8Vz791plmXm4mJxJHoLIkYoLhnVvwy9QrGNG5dJTpzWW7GT17pUaZRGpRflHp9JvNgGu7BTGsU6DZkcRBqCyJmKR5Y3fevrUHb9/Sg2ZebuxKz2HM26t4bUmiRplEasEbS5PYffgkvo3dmTFK029y/lSWREw2okvpKNPwToEU2wze/DWJa99exc7UbLOjidQbmw6c4F//LZ1+e2FsJ5pq+k0ugMqSSB3g29idd27twVs3d6eppyvxadmMnr2SN5YmUlSiUSaRi5FfVMK009NvY7u3ZEhHTb/JhXGYsnTixAmio6OxWq1YrVaio6PJzMyscp+MjAwmTpxIUFAQnp6eDBs2jKSkpPLvHz9+nHvvvZcOHTrg6elJq1atuO+++8jK0nkjYn8Wi4VRXYP4ZeoAhnUsHWV6Y2kSY95eRXyaRplEquu1JYnsOZKLXxN3nh4VaXYccUAOU5ZuueUW4uLiiImJISYmhri4OKKjo8+6vWEYjBkzhr179/Ltt9+yefNmQkNDGTRoELm5uQCkpqaSmprKK6+8wrZt25g7dy4xMTHceeed9npbImfwa+LOu7f14M2bu+Pj6cqO1NJRpjd/TdIok8gFKCy28e/f9/Lv3/cCMHNsZ3w8Nf0mF85iGIZhdohziY+PJzIyktjYWPr06QNAbGwsUVFR7Nq1iw4dOpyxT2JiIh06dGD79u107Fh6Il9JSQn+/v68+OKL3HXXXZX+rPnz53PbbbeRm5uLi4vLeeXLzs7GarWSlZWFt7d3Nd+lyJkO5+TzxKLt/LIzA4BOLb15ZVxXwgP1eyZyNoZhsGRnBjN/2sW+o6X/OL6xVzAv3dDV5GRS15zv32+HGFlas2YNVqu1vCgB9O3bF6vVyurVqyvdp6CgAAAPD4/y55ydnXFzc2PlypVn/VllB+x8i5JIbfJv4sH70T35503dsDZyZXtKNqPeWsnsZUkUa5RJ5Aw7UrO45YO1/OXTjew7motvY3dmXdeZmdd1MTuaODCHaATp6en4+/uf8by/vz/p6emV7hMeHk5oaCjTp0/n/fffx8vLi9dee4309HTS0tIq3efYsWM8++yz3H333VXmKSgoKC9jUNpMRWqLxWLh2m4tiWrTnMcXbWdpfAav/JLIzzsyeGVcVzoENjE7oojpDmfn8+ovifxn40EMA9xcnLirf2v+dmVbGrs7xJ86qcNMHVmaMWMGFoulyseGDRuA0j8Yf2YYRqXPA7i6uvL111+TmJhIs2bN8PT0ZMWKFQwfPhxnZ+czts/OzmbEiBFERkby9NNPV5l75syZ5SeaW61WQkJCqvHuRS6Mv7cHH0zoyevju2Jt5Mq2lCxGvbWSt5fv1iiTNFj5RSXMXpbEwFdW8NWG0qI0sksLfn1wAI8MC1dRkhph6jlLR48e5ejRo1VuExYWxhdffMGDDz54xtVvPj4+vP7660yaNKnK18jKyqKwsBA/Pz/69OlDr169ePvtt8u/n5OTw9ChQ/H09OT777+vMHVXmcpGlkJCQnTOktjN4ex8Hl+0jaXxhwHoGmzllXFdaRegUSZpGAzDYPGWVF6KSSAl8xQAXUN8eGpkBD1Dm5mcThzF+Z6z5FAneK9du5bevXsDsHbtWvr27XvWE7wrk5SURHh4OD/99BNDhgwBSg/U0KFDcXd358cff8TT0/OC8+kEbzGDYRgs3JTCP77bQXZ+MW7OTkwd3J7Jl7fGxdkhTkcUqZZNB07w7Pc72XwgE4AgqwePDg9nVJcgnJwqn20QqUy9KksAw4cPJzU1lffffx+Av/zlL4SGhvLdd9+VbxMeHs7MmTMZO3YsUHplm5+fH61atWLbtm3cf//99OzZk6+//hooHVEaPHgweXl5LFq0CC8vr/LX8vPzq3S6rjIqS2Km9KzSUaZlu06PMoX48Oq4LrT11yiT1C8pmad48addLN6SCoCnmzN/HXAJd13ehkZu5/d5LfJH5/v322Emcz///HPuu+++8hGh0aNHM3v27ArbJCQkVFhQMi0tjQcffJCMjAxatGjBhAkTePLJJ8u/v3HjRtauXQtA27ZtK7zWvn37CAsLq6V3I1JzAq0efHh7LxZsPMQz3+9ky8FMrnlzJQ8Obs/ky9vgrH9pi4PLLSjm3RV7+OD3vRQU27BY4IYewTw8tAMB3lWfNiFSExxmZKku08iS1BXpWfk8tnArKxKOANC9lQ8v39CVtv6NTU4mcuFKbAYLNh7klV8SOZJTep5on9bNeHJkJJ1aWk1OJ/VBvZuGq8tUlqQuMQyD+RsO8ez3O8kpKMbNxYmHh7Tnzv4aZRLHsXrPUZ77Pp6dp2/1E9rck8eviWBIZMBZr4IWuVAqS3aksiR1UWrmKR5buI3/JpaOMvVo5cPL47pyiZ9GmaTu2nc0lxd+jGfJ6VXrm3i4cP/V7ZgQFYabiy5ckJqlsmRHKktSVxmGwX82HOTZ7+M5WVCMu4sT04Z2YNJlrTXKJHVKVl4Rby5L4pM1yRSVGDg7Wbi1TyseGNSeZl66n5vUDpUlO1JZkrouJfMUj329ld+TStc16xXalJdu6EIbjTKJyYpKbHweu583fk0iM68IgIEd/Pi/ayK0bpjUOpUlO1JZEkdgGAbz1h/k+R80yiTmMwyD5QmHef6HePYcKb3ZbTv/xjwxMpIB7f1MTicNhcqSHaksiSNJyTzFowu2snJ36SjTpWFNefmGroT5ep1jT5GakZCew3M/7Cwf6Wzm5caDg9tz06UhWlBV7EplyY5UlsTRGIbBF+sO8MIP8eQWluDh6sQjQ8OZ2C9MKyBLrTl6soDXliQyb90BbAa4OTsx6bIw/n5VW7w9XM2OJw2QypIdqSyJozp4PI/HFm5l1e5jAPRu3YyXb+hCaHONMknNKSguYc6qZN5etpucgmIAhncK5LHh4fpdE1OpLNmRypI4MsMw+HztAV74MZ68whIauTrz6LAOTIjSKJNcHMMw+Gl7OjN/iufg8dKb3XZuaeWJERH0adPc5HQiKkt2pbIk9cHB43k8smAra/aWjjL1ad2Ml2/oSqvmF35zaZGthzJ59vudrE8+AUCAtzvThoZzXfeWKuFSZ6gs2ZHKktQXNpvB52v388KPuzhVVIKnmzOPDQ/ntj6h+gMn5yUt6xQvxySwcHMKAB6uTvzliku4Z0AbPN0c5nak0kCoLNmRypLUNweO5TFtwRbW7jsOQN82paNMIc00yiSVyyss5v3f9vL+f/eQX2QD4LruLZk2rAMtrI1MTidSOZUlO1JZkvrIZjP4NHY/s3763yjT9GsiuLV3K40ySTmbzWDR5hRe/jmB9Ox8oHTR0ydHRtI1xMfccCLnoLJkRypLUp/tP5bLtPlbWZdcOsrU75LmvHh9F40yCev2Hee5H3ay9VAWAMFNGzF9eATXdA7UzW7FIags2ZHKktR3NpvBx2uSeTFmF/lFNrzcnHl8RAS39G6lP4oN0IFjecyKiefHbekANHZ34e9XtmXSZWF4uDqbnE7k/Kks2ZHKkjQUyUdzmbZgS/kVTv3b+jLr+s4EN9UoU0OQnV/E28t2M2dVMoUlNpwscFPvVjw4uD2+jd3NjidywVSW7EhlSRoSm81gzupkXv65dJSpsbsLj18Twc29QzTKVE8Vl9iYt/4gry9J5FhuIQCXt/Pl/0ZEEB6ozzxxXCpLdqSyJA3RvqO5TJu/hQ37S0eZLm/ny6zru9DSR1c+1Sf/TTzCcz/sJDHjJABt/Lx4YkQEV3bwVzkWh6eyZEcqS9JQldgM5qzax8s/J1BQXDrK9MSICMZfqlEmR7f7cA7P/xDP8oQjAPh4uvLA1e24tW8orrrZrdQTKkt2pLIkDd2eIyeZNn8Lmw5kAnBFez9mXdeZII0yOZzjuYW8sTSRz9ceoMRm4OJkYUJUGPdf3Q6rp252K/WLypIdqSyJlI4yfbhyL6/8kkhhsY0m7i48OTKScb2CNcrkAAqLbXyyJpk3f00iO7/0ZreDIwOYPjycNn6NTU4nUjtUluxIZUnkf3YfPsm0BVvYfHqUaWAHP2Ze11mrONdRhmHwy84MZv4YT/KxPAAiWnjz5IgI+rX1NTmdSO1SWbIjlSWRikpsBv/+fS+vLjk9yuRxepSpp0aZ6pIdqVk8+/1OYveWLjjq29idaUPbc0PPEJy1Srs0ACpLdqSyJFK53YdzeGj+VrYczATgyg5+zLyuC4FWD3ODNXCHs/N55ZcE5m88hGGAm4sTky9vzV8HtqWxu252Kw2HypIdqSyJnF1xiY0Pft/H60sSKSyx4e3hwlOjOnJ9j5YaZbKz/KIS/v37Xt5ZsYe8whIARnUN4tFhHbSwqDRIKkt2pLIkcm5JGTk8PH8LW07fR+zqcH9euK4zAd4aZapthmGweEsqL/60i9Ss0pvddgvx4cmRkfQMbWpyOhHzqCzZkcqSyPkpLrHx/n/38s+lSeWjTDNGd2Rsd40y1ZaN+0/w7Pc7iTs9FRpk9eDR4eGM7hqkYy4NnsqSHaksiVyYhPTSUaZtKaWjTIMiAnhhbCf8NcpUYw6dyOPFmAS+25IKgKebM38beAl3Xd5GN7sVOU1lyY5UlkQuXNko0xtLEykqMbA2cuUfoztybTeNeFyMkwXFvLtiN//+fR8FxTYsFhjXM5iHh3RQGRX5E5UlO1JZEqm+XenZPDx/C9tTsoHShRCfH9sJ/yb6w34hSmwG8zcc5JVfEjl6sgCAvm2a8cSISDq1tJqcTqRuUlmyI5UlkYtTVGLjvRV7eHNZEkUlBj6epaNMOq/m/KzefZRnf4gnPq20cIY19+TxayIYHBmg4ydSBZUlO1JZEqkZ8WnZPPSfLew8/Ud/aMcAnhvTGb8m7iYnq5v2HjnJCz/uYml8BgDeHi7cd3U7JkSF4eaim92KnIvKkh2pLInUnKISG+8s38Nby5Iothk09XTlH9d2YlSXFholOS0rr4h//prEJ2uSKbYZODtZuK1PK+4f1J5mXm5mxxNxGCpLdqSyJFLzdqaWnstUNso0vFMgz47phG/jhjvKVFRi4/PY/bzxaxKZeUVA6aro/zcigrb+TUxOJ+J4VJbsSGVJpHYUFtt4e/lu3l6+m2KbQTMvN565tiMjuwSZHc2uDMNgecJhnv8hnj1HcgFoH9CYJ0ZEckV7P5PTiTgulSU7UlkSqV3bU7J4eP4WdqXnAHBN50CevbYTzRvAKNOu9Gye+z6elbuPAtDcy40Hh7RnfK8QXJx1XpLIxVBZsiOVJZHaV1hsY/ayJN5esYcSm0FzLzeeHdOJazq3MDtarTh6soBXf0nkq/UHsBng5uzEpP5h/P3Ktnh7uJodT6ReUFmyI5UlEfv58yjTiC4tePbaTvXmxOb8ohLmrErm7eW7OVlQDJSOpD02LIJWzXWzW5GapLJkRypLIvZVUFzCW7/u5t3f/jfK9NyYTgx34FEmwzD4cVs6M3+K59CJUwB0CbbyxIhIerduZnI6kfpJZcmOVJZEzLH1UCYPz99CYsZJAEZ1DeKZ0R1p6mCjTFsOZvLcDztZn3wCgEBvDx4Z1oEx3Vri5KTlEkRqi8qSHaksiZinoLiEN39N4t0Ve7AZ4NvYjefGdGZYp0Czo51TWtYpXo5JYOHmFAAauTpz94A2/OWKNni6uZicTqT+U1myI5UlEfNtOVg6ypR0uHSU6dpuQcwYVTdHmfIKi3nvt7386797yC+yAXBdj5Y8MjScQKvuiSdiLypLdqSyJFI35BeV8M9fk3j/t7JRJndeGNuJIR3rxiiTzWawcHMKL/+8i4zs0pvdXhrWlCdHRtIl2MfccCINkMqSHaksidQtcQczeeg/ceULOI7t3pKnR0Xi42neKNO6fcd59vudbEvJAiCkWSOmD49geKdA3cZFxCQqS3aksiRS9+QXlfD60kQ++O9ebAb4NXFn5tjODIoMsGuOA8fymPlTPD9tTwegibsLU65qy+39wvBwdbZrFhGpSGXJjlSWROquTQdOMG3+lvJRpuu6t+TpUR2xetbuwo7Z+UXMXrabuauSKSyx4WSBm3u3Yurg9g36/nYidYnKkh2pLInUbflFJby+JJF//b4Xw4AAb3dmXteZq8JrfpSpuMTGl+sP8vqSRI7nFgJweTtfnhgRSYdA3exWpC5RWbIjlSURx7Bxf+ko096jpaNM1/cI5qlRkVgb1cwo02+JR3j+h53l6z5d4ufFEyMiGdjBT+clidRBKkt2pLIk4jjyi0p49ZcE/r1yX/ko06zrunBluH+1X3P34Rye+yGeFQlHAPDxdGXqoPbc0qcVrrrZrUidpbJkRypLIo5nQ/Jxpi3Yyr7To0zjegbzxMgLG2U6nlvIG0sT+XztAUpsBq7OFiZEhXHfVe1q/ZwoEbl4Kkt2pLIk4phOFZbwyi8JfLSqdJQp0NuDWdd3ZmCHqkeZCottfLImmX/+mkROfunNbodEBjD9mgha+3rZI7qI1ACVJTtSWRJxbOuTjzNt/haSj+UBML5XCP83MgJvj4qjQ4Zh8POODGb+FM/+09tGtvDmiZER9LvE1+65ReTiqCzZkcqSiOM7VVjCSz/vYu7qZAwDWlg9ePH6LlzR3g+A7SlZPPfDTmL3HgdK122aNqQD1/cMxlk3uxVxSCpLdqSyJFJ/rN17jGkLtnLgeOnI0U2XhlBiM1iw6RCGAe4uTky+vA33DLyExu662a2II1NZsiOVJZH6Ja+wmJdiEpi7OrnC89d2C+KRYeG09GlkTjARqVHn+/db/ywSEfkTTzcXZozuyLBOgTz97Q6snq48NjycHq2amh1NREygkaUaoJElERERx3O+f7+1WpqIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoOU5ZOnDhBdHQ0VqsVq9VKdHQ0mZmZVe6TkZHBxIkTCQoKwtPTk2HDhpGUlFTptoZhMHz4cCwWC998803NvwERERFxSA5Tlm655Rbi4uKIiYkhJiaGuLg4oqOjz7q9YRiMGTOGvXv38u2337J582ZCQ0MZNGgQubm5Z2z/xhtvYLHo/k4iIiJSkUOs4B0fH09MTAyxsbH06dMHgA8++ICoqCgSEhLo0KHDGfskJSURGxvL9u3b6dixIwDvvPMO/v7+fPnll9x1113l227ZsoXXXnuN9evX06JFC/u8KREREXEIDjGytGbNGqxWa3lRAujbty9Wq5XVq1dXuk9BQQEAHh4e5c85Ozvj5ubGypUry5/Ly8vj5ptvZvbs2QQGBtbSOxARERFH5RBlKT09HX9//zOe9/f3Jz09vdJ9wsPDCQ0NZfr06Zw4cYLCwkJmzZpFeno6aWlp5dtNnTqVfv36ce211553noKCArKzsys8REREpH4ytSzNmDEDi8VS5WPDhg0AlZ5PZBjGWc8zcnV15euvvyYxMZFmzZrh6enJihUrGD58OM7OzgAsXryYZcuW8cYbb1xQ7pkzZ5afaG61WgkJCbmwNy4iIiIOw9RzlqZMmcJNN91U5TZhYWFs3bqVjIyMM7535MgRAgICzrpvz549iYuLIysri8LCQvz8/OjTpw+9evUCYNmyZezZswcfH58K+11//fVcfvnlrFixotLXnT59Og8++GD519nZ2SpMIiIi9ZTFMAzD7BDnEh8fT2RkJGvXrqV3794ArF27lr59+7Jr165KT/CuTFJSEuHh4fz0008MGTKE9PR0jh49WmGbzp07889//pNRo0bRunXr83rd871rsYiIiNQd5/v32yGuhouIiGDYsGFMnjyZ999/H4C//OUvjBw5skJRCg8PZ+bMmYwdOxaA+fPn4+fnR6tWrdi2bRv3338/Y8aMYciQIQAEBgZWelJ3q1atzrsoQel0IKBzl0RERBxI2d/tc40bOURZAvj888+57777yovO6NGjmT17doVtEhISyMrKKv86LS2NBx98kIyMDFq0aMGECRN48sknazxbTk4OgKbiREREHFBOTg5Wq/Ws33eIabi6zmazkZqaSpMmTerEwpZl51AdPHhQ04LoePyZjseZdEwq0vGoSMejovp0PAzDICcnh6CgIJyczn7Nm8OMLNVlTk5OBAcHmx3jDN7e3g7/i1yTdDwq0vE4k45JRToeFel4VFRfjkdVI0plHGKdJRERERGzqCyJiIiIVEFlqR5yd3fn6aefxt3d3ewodYKOR0U6HmfSMalIx6MiHY+KGuLx0AneIiIiIlXQyJKIiIhIFVSWRERERKqg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WRIRERGpgsqSiIiISBVUlkRERESqoLIkIiIiUgWVJREREZEqqCyJiIiIVEFlSUQatLCwMN544w2zY4hIHaayJCIOa9SoUQwaNKjS761ZswaLxcKmTZvsnEpE6huVJRFxWHfeeSfLli1j//79Z3zvo48+olu3bvTo0cOEZCJSn6gsiYjDGjlyJP7+/sydO7fC83l5eXz11VfceeedfP3113Ts2BF3d3fCwsJ49dVXz/p6ycnJWCwW4uLiyp/LzMzEYrGwYsUKAFasWIHFYuHnn3+me/fuNGrUiKuuuorDhw/z008/ERERgbe3NzfffDN5eXnlr2MYBi+99BJt2rShUaNGdO3alQULFtTk4RCRWqKyJCIOy8XFhQkTJjB37lz+eE/w+fPnU1hYSFRUFDfeeCM33XQT27ZtY8aMGTz55JNnlKvqmDFjBrNnz2b16tUcPHiQG2+8kTfeeIMvvviCH374gSVLlvDWW2+Vb//EE08wZ84c3n33XXbs2MHUqVO57bbb+O233y46i4jULovxx08YEREHs2vXLiIiIli2bBlXXnklAAMGDKBly5ZYLBaOHDnCL7/8Ur79I488wg8//MCOHTuA0hO8H3jgAR544AGSk5Np3bo1mzdvplu3bkDpyFLTpk1Zvnw5AwcOZMWKFVx55ZUsXbqUq6++GoBZs2Yxffp09uzZQ5s2bQC45557SE5OJiYmhtzcXHx9fVm2bBlRUVHlWe666y7y8vL44osv7HGoRKSaNLIkIg4tPDycfv368dFHHwGwZ88efv/9d+644w7i4+O57LLLKmx/2WWXkZSURElJyUX93C5dupT//wEBAXh6epYXpbLnDh8+DMDOnTvJz89n8ODBNG7cuPzxySefsGfPnovKISK1z8XsACIiF+vOO+9kypQpvP3228yZM4fQ0FCuvvpqDMPAYrFU2LaqwXQnJ6cztikqKqp0W1dX1/L/32KxVPi67DmbzQZQ/n9/+OEHWrZsWWE7d3f3c709ETGZRpZExOHdeOONODs788UXX/Dxxx8zadIkLBYLkZGRrFy5ssK2q1evpn379jg7O5/xOn5+fgCkpaWVP/fHk72rKzIyEnd3dw4cOEDbtm0rPEJCQi769UWkdmlkSUQcXuPGjRk/fjyPP/44WVlZTJw4EYCHHnqISy+9lGeffZbx48ezZs0aZs+ezTvvvFPp6zRq1Ii+ffsya9YswsLCOHr0KE888cRF52vSpAkPP/wwU6dOxWaz0b9/f7Kzs1m9ejWNGzfm9ttvv+ifISK1RyNLIlIv3HnnnZw4cYJBgwbRqlUrAHr06MF//vMf5s2bR6dOnXjqqad45plnystUZT766COKioro1asX999/P88991yN5Hv22Wd56qmnmDlzJhEREQwdOpTvvvuO1q1b18jri0jt0dVwIiIiIlXQyJKIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKvw/FsCLm/9axZsAAAAASUVORK5CYII="
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHACAYAAACyIiyEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW/BJREFUeJzt3XlcVXXCx/HPZReUi8omgqC5AO5LKmZp5ZpLWpltmFZOzYwtVlb2tDht2t6UbdOUtttoWrZRmtrkgjuuCLjgwubKIsh6z/MHwkQiKsI9XPi+X6/7eh4u51y+98Rcvv5+5/yOxTAMAxERERGplJPZAURERETqMpUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgsmeT555+nX79+eHp64uPjc177GIbBjBkzCAoKolGjRgwcOJAdO3aUfz85ORmLxVLpY/78+We8XkFBAd26dcNisRAXF3dB+d999126dOmCt7c33t7eREVF8dNPP13Qa4iIiDgClSWTFBYWMm7cOP7617+e9z4vvfQSr732GrNnz2b9+vUEBgYyePBgcnJyAAgJCSEtLa3C4x//+AdeXl4MHz78jNd75JFHCAoKqlb+4OBgZs2axYYNG9iwYQNXXXUV1157bYXyJiIiUi8YYqo5c+YYVqv1nNvZbDYjMDDQmDVrVvlz+fn5htVqNd57772z7tetWzfjjjvuOOP5H3/80QgPDzd27NhhAMbmzZsrfH/Hjh3G8OHDDS8vL8Pf39+47bbbjCNHjlSZsWnTpsa///3vc74XERERR6KRJQexb98+0tPTGTJkSPlz7u7uDBgwgNWrV1e6z8aNG4mLi+POO++s8HxGRgaTJ0/m008/xdPT84z90tLSGDBgAN26dWPDhg3ExMSQkZHBjTfeWOnPKSkpYd68eeTm5hIVFXUR71JERKTucTE7gJyf9PR0AAICAio8HxAQwP79+yvd58MPPyQiIoJ+/fqVP2cYBhMnTuSee+6hV69eJCcnn7Hfu+++S48ePXjhhRfKn/voo48ICQkhMTGR9u3bA7Bt2zaioqLIz8+ncePGLFq0iMjIyIt9qyIiInWKRpZq0IwZM856gnXZY8OGDRf1MywWS4WvDcM44zmAU6dO8cUXX5wxqvTWW2+RnZ3N9OnTz/ozNm7cyPLly2ncuHH5Izw8HIA9e/aUb9ehQwfi4uKIjY3lr3/9K7fffjs7d+68mLcnIiJS52hkqQZNmTKFm266qcptwsLCqvXagYGBQOkIU4sWLcqfP3z48BmjTQALFiwgLy+PCRMmVHh+2bJlxMbG4u7uXuH5Xr16ceutt/Lxxx9js9kYNWoUL7744hmv+8ef7ebmRtu2bcv3X79+Pf/85z95//33q/UeRURE6iKVpRrk6+uLr69vrbx269atCQwMZMmSJXTv3h0ovaLut99+q7TUfPjhh4wePRo/P78Kz7/55ps899xz5V+npqYydOhQvvrqK/r06QNAjx49+PrrrwkLC8PF5fx/RQzDoKCgoDpvT0REpM5SWTLJgQMHOH78OAcOHKCkpKR8naO2bdvSuHFjAMLDw5k5cyZjx47FYrHwwAMP8MILL9CuXTvatWvHCy+8gKenJ7fcckuF1969ezf//e9/+fHHH8/4ua1atarwddnPuuSSSwgODgbg73//Ox988AE333wz06ZNw9fXl927dzNv3jw++OADnJ2defzxxxk+fDghISHk5OQwb948VqxYQUxMTE0fKhEREVOpLJnkqaee4uOPPy7/umy0aPny5QwcOBCAhIQEsrKyyrd55JFHOHXqFH/72984ceIEffr04ZdffqFJkyYVXvujjz6iZcuWFa6cuxBBQUGsWrWKRx99lKFDh1JQUEBoaCjDhg3Dyan0NLeMjAyio6NJS0vDarXSpUsXYmJiGDx4cLV+poiISF1lMQzDMDuEiIiISF2lq+FEREREqqCyJCIiIlIFnbNUA2w2G6mpqTRp0qTSNY9ERESk7jEMg5ycHIKCgsrPya2MylINSE1NJSQkxOwYIiIiUg0HDx4svyK8MipLNaDsarSDBw/i7e1tchoRERE5H9nZ2YSEhJxxVfmfqSzVgLKpN29vb5UlERERB3OuU2h0greIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgs1WGGYbBu33HyCovNjiIiItJgqSzVYX/9bBM3vr+GRZtTzI4iIiLSYKks1WG9wpoCMHdVMoZhmJxGRESkYVJZqsNuvDQELzdnkg6fZNXu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Z2z/xhtvYLHo/k4iIiJSkUOs4B0fH09MTAyxsbH06dMHgA8++ICoqCgSEhLo0KHDGfskJSURGxvL9u3b6dixIwDvvPMO/v7+fPnll9x1113l227ZsoXXXnuN9evX06JFC/u8KREREXEIDjGytGbNGqxWa3lRAujbty9Wq5XVq1dXuk9BQQEAHh4e5c85Ozvj5ubGypUry5/Ly8vj5ptvZvbs2QQGBtbSOxARERFH5RBlKT09HX9//zOe9/f3Jz09vdJ9wsPDCQ0NZfr06Zw4cYLCwkJmzZpFeno6aWlp5dtNnTqVfv36ce211553noKCArKzsys8REREpH4ytSzNmDEDi8VS5WPDhg0AlZ5PZBjGWc8zcnV15euvvyYxMZFmzZrh6enJihUrGD58OM7OzgAsXryYZcuW8cYbb1xQ7pkzZ5afaG61WgkJCbmwNy4iIiIOw9RzlqZMmcJNN91U5TZhYWFs3bqVjIyMM7535MgRAgICzrpvz549iYuLIysri8LCQvz8/OjTpw+9evUCYNmyZezZswcfH58K+11//fVcfvnlrFixotLXnT59Og8++GD519nZ2SpMIiIi9ZTFMAzD7BDnEh8fT2RkJGvXrqV3794ArF27lr59+7Jr165KT/CuTFJSEuHh4fz0008MGTKE9PR0jh49WmGbzp07889//pNRo0bRunXr83rd871rsYiIiNQd5/v32yGuhouIiGDYsGFMnjyZ999/H4C//OUvjBw5skJRCg8PZ+bMmYwdOxaA+fPn4+fnR6tWrdi2bRv3338/Y8aMYciQIQAEBgZWelJ3q1atzrsoQel0IKBzl0RERBxI2d/tc40bOURZAvj888+57777yovO6NGjmT17doVtEhISyMrKKv86LS2NBx98kIyMDFq0aMGECRN48sknazxbTk4OgKbiREREHFBOTg5Wq/Ws33eIabi6zmazkZqaSpMmTerEwpZl51AdPHhQ04LoePyZjseZdEwq0vGoSMejovp0PAzDICcnh6CgIJyczn7Nm8OMLNVlTk5OBAcHmx3jDN7e3g7/i1yTdDwq0vE4k45JRToeFel4VFRfjkdVI0plHGKdJRERERGzqCyJiIiIVEFlqR5yd3fn6aefxt3d3ewodYKOR0U6HmfSMalIx6MiHY+KGuLx0AneIiIiIlXQyJKIiIhIFVSWRERERKqg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WRIRERGpgsqSiIiISBVUlkRERESqoLIkIiIiUgWVJREREZEqqCyJiIiIVEFlSUQatLCwMN544w2zY4hIHaayJCIOa9SoUQwaNKjS761ZswaLxcKmTZvsnEpE6huVJRFxWHfeeSfLli1j//79Z3zvo48+olu3bvTo0cOEZCJSn6gsiYjDGjlyJP7+/sydO7fC83l5eXz11VfceeedfP3113Ts2BF3d3fCwsJ49dVXz/p6ycnJWCwW4uLiyp/LzMzEYrGwYsUKAFasWIHFYuHnn3+me/fuNGrUiKuuuorDhw/z008/ERERgbe3NzfffDN5eXnlr2MYBi+99BJt2rShUaNGdO3alQULFtTk4RCRWqKyJCIOy8XFhQkTJjB37lz+eE/w+fPnU1hYSFRUFDfeeCM33XQT27ZtY8aMGTz55JNnlKvqmDFjBrNnz2b16tUcPHiQG2+8kTfeeIMvvviCH374gSVLlvDWW2+Vb//EE08wZ84c3n33XXbs2MHUqVO57bbb+O233y46i4jULovxx08YEREHs2vXLiIiIli2bBlXXnklAAMGDKBly5ZYLBaOHDnCL7/8Ur79I488wg8//MCOHTuA0hO8H3jgAR544AGSk5Np3bo1mzdvplu3bkDpyFLTpk1Zvnw5AwcOZMWKFVx55ZUsXbqUq6++GoBZs2Yxffp09uzZQ5s2bQC45557SE5OJiYmhtzcXHx9fVm2bBlRUVHlWe666y7y8vL44osv7HGoRKSaNLIkIg4tPDycfv368dFHHwGwZ88efv/9d+644w7i4+O57LLLKmx/2WWXkZSURElJyUX93C5dupT//wEBAXh6epYXpbLnDh8+DMDOnTvJz89n8ODBNG7cuPzxySefsGfPnovKISK1z8XsACIiF+vOO+9kypQpvP3228yZM4fQ0FCuvvpqDMPAYrFU2LaqwXQnJ6cztikqKqp0W1dX1/L/32KxVPi67DmbzQZQ/n9/+OEHWrZsWWE7d3f3c709ETGZRpZExOHdeOONODs788UXX/Dxxx8zadIkLBYLkZGRrFy5ssK2q1evpn379jg7O5/xOn5+fgCkpaWVP/fHk72rKzIyEnd3dw4cOEDbtm0rPEJCQi769UWkdmlkSUQcXuPGjRk/fjyPP/44WVlZTJw4EYCHHnqISy+9lGeffZbx48ezZs0aZs+ezTvvvFPp6zRq1Ii+ffsya9YswsLCOHr0KE888cRF52vSpAkPP/wwU6dOxWaz0b9/f7Kzs1m9ejWNGzfm9ttvv+ifISK1RyNLIlIv3HnnnZw4cYJBgwbRqlUrAHr06MF//vMf5s2bR6dOnXjqqad45plnystUZT766COKioro1asX999/P88991yN5Hv22Wd56qmnmDlzJhEREQwdOpTvvvuO1q1b18jri0jt0dVwIiIiIlXQyJKIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKvw/FsCLm/9axZsAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "execution_count": 21
+ "source": [
+ "result = run_locally(flow)\n",
+ "result"
+ ]
},
{
"cell_type": "markdown",
- "source": "## Load Workflow with pyiron_base",
- "metadata": {}
+ "metadata": {},
+ "source": [
+ "## Load Workflow with pyiron_base"
+ ]
},
{
"cell_type": "code",
- "source": "from python_workflow_definition.pyiron_base import load_workflow_json",
+ "execution_count": 22,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 22
+ "source": [
+ "from python_workflow_definition.pyiron_base import load_workflow_json"
+ ]
},
{
"cell_type": "code",
- "source": "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\ndelayed_object_lst[-1].draw()",
+ "execution_count": 23,
"metadata": {
"trusted": true
},
"outputs": [
{
- "output_type": "display_data",
"data": {
- "text/plain": "",
- "image/svg+xml": ""
+ "image/svg+xml": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "execution_count": 23
+ "source": [
+ "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n",
+ "delayed_object_lst[-1].draw()"
+ ]
},
{
"cell_type": "code",
- "source": "delayed_object_lst[0].input['a'] = 4.05",
+ "execution_count": 24,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": 24
+ "source": [
+ "delayed_object_lst[0].input['a'] = 4.05"
+ ]
},
{
"cell_type": "code",
- "source": "delayed_object_lst[-1].pull()",
+ "execution_count": 25,
"metadata": {
"trusted": true
},
@@ -405,87 +2092,154 @@
{
"name": "stdout",
"output_type": "stream",
- "text": "The job get_bulk_structure_f1e730ed97e30e5439e855d2ac41396f was saved and received the ID: 1\nThe job get_dict_20400c1655d51731f9f5ffb50c2b401f was saved and received the ID: 2\nThe job calculate_qe_22b5d0934d89d8f08761e744e4612c30 was saved and received the ID: 3\n"
+ "text": [
+ "The job get_bulk_structure_f1e730ed97e30e5439e855d2ac41396f was saved and received the ID: 1\n",
+ "The job get_dict_20400c1655d51731f9f5ffb50c2b401f was saved and received the ID: 2\n",
+ "The job calculate_qe_22b5d0934d89d8f08761e744e4612c30 was saved and received the ID: 3\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01892] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01892] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "The job generate_structures_6bbb6b6ae566b035388bec7f6f658394 was saved and received the ID: 4\nThe job get_dict_7fbef1423a72155d480420469f6f0f78 was saved and received the ID: 5\nThe job calculate_qe_35d4282b6beff7c2fc7a850e02ff3f07 was saved and received the ID: 6\n"
+ "text": [
+ "The job generate_structures_6bbb6b6ae566b035388bec7f6f658394 was saved and received the ID: 4\n",
+ "The job get_dict_7fbef1423a72155d480420469f6f0f78 was saved and received the ID: 5\n",
+ "The job calculate_qe_35d4282b6beff7c2fc7a850e02ff3f07 was saved and received the ID: 6\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01908] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01908] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "The job get_dict_bcd13fb93bbd4d7a7a99c460c0591b51 was saved and received the ID: 7\nThe job calculate_qe_3159d3281f1fccbf1a91388144a7957f was saved and received the ID: 8\n"
+ "text": [
+ "The job get_dict_bcd13fb93bbd4d7a7a99c460c0591b51 was saved and received the ID: 7\n",
+ "The job calculate_qe_3159d3281f1fccbf1a91388144a7957f was saved and received the ID: 8\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01919] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01919] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "The job get_dict_5b1eeb4af2f8eb4018b7326f4af63eca was saved and received the ID: 9\nThe job calculate_qe_4d1c131dceca1e8897f7cda47cb24f9e was saved and received the ID: 10\n"
+ "text": [
+ "The job get_dict_5b1eeb4af2f8eb4018b7326f4af63eca was saved and received the ID: 9\n",
+ "The job calculate_qe_4d1c131dceca1e8897f7cda47cb24f9e was saved and received the ID: 10\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01930] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01930] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "The job get_dict_566acb6c9830b82fd09efc4e8227e6e6 was saved and received the ID: 11\nThe job calculate_qe_e463d009aee35caa551669d8efc7c8cd was saved and received the ID: 12\n"
+ "text": [
+ "The job get_dict_566acb6c9830b82fd09efc4e8227e6e6 was saved and received the ID: 11\n",
+ "The job calculate_qe_e463d009aee35caa551669d8efc7c8cd was saved and received the ID: 12\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01941] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01941] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "The job get_dict_75499df774616aa1b379a3fa72da90fb was saved and received the ID: 13\nThe job calculate_qe_6ef5649cee1f8db43ecd79d266f477b5 was saved and received the ID: 14\n"
+ "text": [
+ "The job get_dict_75499df774616aa1b379a3fa72da90fb was saved and received the ID: 13\n",
+ "The job calculate_qe_6ef5649cee1f8db43ecd79d266f477b5 was saved and received the ID: 14\n"
+ ]
},
{
"name": "stderr",
"output_type": "stream",
- "text": "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01953] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\nNote: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ "text": [
+ "[jupyter-pyiron-dev-pyth-flow-definition-5x990k36:01953] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)\n",
+ "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n"
+ ]
},
{
"name": "stdout",
"output_type": "stream",
- "text": "The job get_list_5d2e404624b12c3bb1f93528d1b1dddb was saved and received the ID: 15\nThe job get_list_8628ae553e40ba9aab5dde25ea2d7ba2 was saved and received the ID: 16\nThe job plot_energy_volume_curve_d715578098aa2e6221fb76f20377b5cf was saved and received the ID: 17\n"
+ "text": [
+ "The job get_list_5d2e404624b12c3bb1f93528d1b1dddb was saved and received the ID: 15\n",
+ "The job get_list_8628ae553e40ba9aab5dde25ea2d7ba2 was saved and received the ID: 16\n",
+ "The job plot_energy_volume_curve_d715578098aa2e6221fb76f20377b5cf was saved and received the ID: 17\n"
+ ]
},
{
- "output_type": "display_data",
"data": {
- "text/plain": "",
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHACAYAAACyIiyEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW/BJREFUeJzt3XlcVXXCx/HPZReUi8omgqC5AO5LKmZp5ZpLWpltmFZOzYwtVlb2tDht2t6UbdOUtttoWrZRmtrkgjuuCLjgwubKIsh6z/MHwkQiKsI9XPi+X6/7eh4u51y+98Rcvv5+5/yOxTAMAxERERGplJPZAURERETqMpUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgsmeT555+nX79+eHp64uPjc177GIbBjBkzCAoKolGjRgwcOJAdO3aUfz85ORmLxVLpY/78+We8XkFBAd26dcNisRAXF3dB+d999126dOmCt7c33t7eREVF8dNPP13Qa4iIiDgClSWTFBYWMm7cOP7617+e9z4vvfQSr732GrNnz2b9+vUEBgYyePBgcnJyAAgJCSEtLa3C4x//+AdeXl4MHz78jNd75JFHCAoKqlb+4OBgZs2axYYNG9iwYQNXXXUV1157bYXyJiIiUi8YYqo5c+YYVqv1nNvZbDYjMDDQmDVrVvlz+fn5htVqNd57772z7tetWzfjjjvuOOP5H3/80QgPDzd27NhhAMbmzZsrfH/Hjh3G8OHDDS8vL8Pf39+47bbbjCNHjlSZsWnTpsa///3vc74XERERR6KRJQexb98+0tPTGTJkSPlz7u7uDBgwgNWrV1e6z8aNG4mLi+POO++s8HxGRgaTJ0/m008/xdPT84z90tLSGDBgAN26dWPDhg3ExMSQkZHBjTfeWOnPKSkpYd68eeTm5hIVFXUR71JERKTucTE7gJyf9PR0AAICAio8HxAQwP79+yvd58MPPyQiIoJ+/fqVP2cYBhMnTuSee+6hV69eJCcnn7Hfu+++S48ePXjhhRfKn/voo48ICQkhMTGR9u3bA7Bt2zaioqLIz8+ncePGLFq0iMjIyIt9qyIiInWKRpZq0IwZM856gnXZY8OGDRf1MywWS4WvDcM44zmAU6dO8cUXX5wxqvTWW2+RnZ3N9OnTz/ozNm7cyPLly2ncuHH5Izw8HIA9e/aUb9ehQwfi4uKIjY3lr3/9K7fffjs7d+68mLcnIiJS52hkqQZNmTKFm266qcptwsLCqvXagYGBQOkIU4sWLcqfP3z48BmjTQALFiwgLy+PCRMmVHh+2bJlxMbG4u7uXuH5Xr16ceutt/Lxxx9js9kYNWoUL7744hmv+8ef7ebmRtu2bcv3X79+Pf/85z95//33q/UeRURE6iKVpRrk6+uLr69vrbx269atCQwMZMmSJXTv3h0ovaLut99+q7TUfPjhh4wePRo/P78Kz7/55ps899xz5V+npqYydOhQvvrqK/r06QNAjx49+PrrrwkLC8PF5fx/RQzDoKCgoDpvT0REpM5SWTLJgQMHOH78OAcOHKCkpKR8naO2bdvSuHFjAMLDw5k5cyZjx47FYrHwwAMP8MILL9CuXTvatWvHCy+8gKenJ7fcckuF1969ezf//e9/+fHHH8/4ua1atarwddnPuuSSSwgODgbg73//Ox988AE333wz06ZNw9fXl927dzNv3jw++OADnJ2defzxxxk+fDghISHk5OQwb948VqxYQUxMTE0fKhEREVOpLJnkqaee4uOPPy7/umy0aPny5QwcOBCAhIQEsrKyyrd55JFHOHXqFH/72984ceIEffr04ZdffqFJkyYVXvujjz6iZcuWFa6cuxBBQUGsWrWKRx99lKFDh1JQUEBoaCjDhg3Dyan0NLeMjAyio6NJS0vDarXSpUsXYmJiGDx4cLV+poiISF1lMQzDMDuEiIiISF2lq+FEREREqqCyJCIiIlIFnbNUA2w2G6mpqTRp0qTSNY9ERESk7jEMg5ycHIKCgsrPya2MylINSE1NJSQkxOwYIiIiUg0HDx4svyK8MipLNaDsarSDBw/i7e1tchoRERE5H9nZ2YSEhJxxVfmfqSzVgLKpN29vb5UlERERB3OuU2h0greIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgs1WGGYbBu33HyCovNjiIiItJgqSzVYX/9bBM3vr+GRZtTzI4iIiLSYKks1WG9wpoCMHdVMoZhmJxGRESkYVJZqsNuvDQELzdnkg6fZNXu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Z2z/xhtvYLHo/k4iIiJSkUOs4B0fH09MTAyxsbH06dMHgA8++ICoqCgSEhLo0KHDGfskJSURGxvL9u3b6dixIwDvvPMO/v7+fPnll9x1113l227ZsoXXXnuN9evX06JFC/u8KREREXEIDjGytGbNGqxWa3lRAujbty9Wq5XVq1dXuk9BQQEAHh4e5c85Ozvj5ubGypUry5/Ly8vj5ptvZvbs2QQGBtbSOxARERFH5RBlKT09HX9//zOe9/f3Jz09vdJ9wsPDCQ0NZfr06Zw4cYLCwkJmzZpFeno6aWlp5dtNnTqVfv36ce211553noKCArKzsys8REREpH4ytSzNmDEDi8VS5WPDhg0AlZ5PZBjGWc8zcnV15euvvyYxMZFmzZrh6enJihUrGD58OM7OzgAsXryYZcuW8cYbb1xQ7pkzZ5afaG61WgkJCbmwNy4iIiIOw9RzlqZMmcJNN91U5TZhYWFs3bqVjIyMM7535MgRAgICzrpvz549iYuLIysri8LCQvz8/OjTpw+9evUCYNmyZezZswcfH58K+11//fVcfvnlrFixotLXnT59Og8++GD519nZ2SpMIiIi9ZTFMAzD7BDnEh8fT2RkJGvXrqV3794ArF27lr59+7Jr165KT/CuTFJSEuHh4fz0008MGTKE9PR0jh49WmGbzp07889//pNRo0bRunXr83rd871rsYiIiNQd5/v32yGuhouIiGDYsGFMnjyZ999/H4C//OUvjBw5skJRCg8PZ+bMmYwdOxaA+fPn4+fnR6tWrdi2bRv3338/Y8aMYciQIQAEBgZWelJ3q1atzrsoQel0IKBzl0RERBxI2d/tc40bOURZAvj888+57777yovO6NGjmT17doVtEhISyMrKKv86LS2NBx98kIyMDFq0aMGECRN48sknazxbTk4OgKbiREREHFBOTg5Wq/Ws33eIabi6zmazkZqaSpMmTerEwpZl51AdPHhQ04LoePyZjseZdEwq0vGoSMejovp0PAzDICcnh6CgIJyczn7Nm8OMLNVlTk5OBAcHmx3jDN7e3g7/i1yTdDwq0vE4k45JRToeFel4VFRfjkdVI0plHGKdJRERERGzqCyJiIiIVEFlqR5yd3fn6aefxt3d3ewodYKOR0U6HmfSMalIx6MiHY+KGuLx0AneIiIiIlXQyJKIiIhIFVSWRERERKqg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WRIRERGpgsqSiIiISBVUlkRERESqoLIkIiIiUgWVJREREZEqqCyJiIiIVEFlSUQatLCwMN544w2zY4hIHaayJCIOa9SoUQwaNKjS761ZswaLxcKmTZvsnEpE6huVJRFxWHfeeSfLli1j//79Z3zvo48+olu3bvTo0cOEZCJSn6gsiYjDGjlyJP7+/sydO7fC83l5eXz11VfceeedfP3113Ts2BF3d3fCwsJ49dVXz/p6ycnJWCwW4uLiyp/LzMzEYrGwYsUKAFasWIHFYuHnn3+me/fuNGrUiKuuuorDhw/z008/ERERgbe3NzfffDN5eXnlr2MYBi+99BJt2rShUaNGdO3alQULFtTk4RCRWqKyJCIOy8XFhQkTJjB37lz+eE/w+fPnU1hYSFRUFDfeeCM33XQT27ZtY8aMGTz55JNnlKvqmDFjBrNnz2b16tUcPHiQG2+8kTfeeIMvvviCH374gSVLlvDWW2+Vb//EE08wZ84c3n33XXbs2MHUqVO57bbb+O233y46i4jULovxx08YEREHs2vXLiIiIli2bBlXXnklAAMGDKBly5ZYLBaOHDnCL7/8Ur79I488wg8//MCOHTuA0hO8H3jgAR544AGSk5Np3bo1mzdvplu3bkDpyFLTpk1Zvnw5AwcOZMWKFVx55ZUsXbqUq6++GoBZs2Yxffp09uzZQ5s2bQC45557SE5OJiYmhtzcXHx9fVm2bBlRUVHlWe666y7y8vL44osv7HGoRKSaNLIkIg4tPDycfv368dFHHwGwZ88efv/9d+644w7i4+O57LLLKmx/2WWXkZSURElJyUX93C5dupT//wEBAXh6epYXpbLnDh8+DMDOnTvJz89n8ODBNG7cuPzxySefsGfPnovKISK1z8XsACIiF+vOO+9kypQpvP3228yZM4fQ0FCuvvpqDMPAYrFU2LaqwXQnJ6cztikqKqp0W1dX1/L/32KxVPi67DmbzQZQ/n9/+OEHWrZsWWE7d3f3c709ETGZRpZExOHdeOONODs788UXX/Dxxx8zadIkLBYLkZGRrFy5ssK2q1evpn379jg7O5/xOn5+fgCkpaWVP/fHk72rKzIyEnd3dw4cOEDbtm0rPEJCQi769UWkdmlkSUQcXuPGjRk/fjyPP/44WVlZTJw4EYCHHnqISy+9lGeffZbx48ezZs0aZs+ezTvvvFPp6zRq1Ii+ffsya9YswsLCOHr0KE888cRF52vSpAkPP/wwU6dOxWaz0b9/f7Kzs1m9ejWNGzfm9ttvv+ifISK1RyNLIlIv3HnnnZw4cYJBgwbRqlUrAHr06MF//vMf5s2bR6dOnXjqqad45plnystUZT766COKioro1asX999/P88991yN5Hv22Wd56qmnmDlzJhEREQwdOpTvvvuO1q1b18jri0jt0dVwIiIiIlXQyJKIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKvw/FsCLm/9axZsAAAAASUVORK5CYII="
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHACAYAAACyIiyEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW/BJREFUeJzt3XlcVXXCx/HPZReUi8omgqC5AO5LKmZp5ZpLWpltmFZOzYwtVlb2tDht2t6UbdOUtttoWrZRmtrkgjuuCLjgwubKIsh6z/MHwkQiKsI9XPi+X6/7eh4u51y+98Rcvv5+5/yOxTAMAxERERGplJPZAURERETqMpUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgsmeT555+nX79+eHp64uPjc177GIbBjBkzCAoKolGjRgwcOJAdO3aUfz85ORmLxVLpY/78+We8XkFBAd26dcNisRAXF3dB+d999126dOmCt7c33t7eREVF8dNPP13Qa4iIiDgClSWTFBYWMm7cOP7617+e9z4vvfQSr732GrNnz2b9+vUEBgYyePBgcnJyAAgJCSEtLa3C4x//+AdeXl4MHz78jNd75JFHCAoKqlb+4OBgZs2axYYNG9iwYQNXXXUV1157bYXyJiIiUi8YYqo5c+YYVqv1nNvZbDYjMDDQmDVrVvlz+fn5htVqNd57772z7tetWzfjjjvuOOP5H3/80QgPDzd27NhhAMbmzZsrfH/Hjh3G8OHDDS8vL8Pf39+47bbbjCNHjlSZsWnTpsa///3vc74XERERR6KRJQexb98+0tPTGTJkSPlz7u7uDBgwgNWrV1e6z8aNG4mLi+POO++s8HxGRgaTJ0/m008/xdPT84z90tLSGDBgAN26dWPDhg3ExMSQkZHBjTfeWOnPKSkpYd68eeTm5hIVFXUR71JERKTucTE7gJyf9PR0AAICAio8HxAQwP79+yvd58MPPyQiIoJ+/fqVP2cYBhMnTuSee+6hV69eJCcnn7Hfu+++S48ePXjhhRfKn/voo48ICQkhMTGR9u3bA7Bt2zaioqLIz8+ncePGLFq0iMjIyIt9qyIiInWKRpZq0IwZM856gnXZY8OGDRf1MywWS4WvDcM44zmAU6dO8cUXX5wxqvTWW2+RnZ3N9OnTz/ozNm7cyPLly2ncuHH5Izw8HIA9e/aUb9ehQwfi4uKIjY3lr3/9K7fffjs7d+68mLcnIiJS52hkqQZNmTKFm266qcptwsLCqvXagYGBQOkIU4sWLcqfP3z48BmjTQALFiwgLy+PCRMmVHh+2bJlxMbG4u7uXuH5Xr16ceutt/Lxxx9js9kYNWoUL7744hmv+8ef7ebmRtu2bcv3X79+Pf/85z95//33q/UeRURE6iKVpRrk6+uLr69vrbx269atCQwMZMmSJXTv3h0ovaLut99+q7TUfPjhh4wePRo/P78Kz7/55ps899xz5V+npqYydOhQvvrqK/r06QNAjx49+PrrrwkLC8PF5fx/RQzDoKCgoDpvT0REpM5SWTLJgQMHOH78OAcOHKCkpKR8naO2bdvSuHFjAMLDw5k5cyZjx47FYrHwwAMP8MILL9CuXTvatWvHCy+8gKenJ7fcckuF1969ezf//e9/+fHHH8/4ua1atarwddnPuuSSSwgODgbg73//Ox988AE333wz06ZNw9fXl927dzNv3jw++OADnJ2defzxxxk+fDghISHk5OQwb948VqxYQUxMTE0fKhEREVOpLJnkqaee4uOPPy7/umy0aPny5QwcOBCAhIQEsrKyyrd55JFHOHXqFH/72984ceIEffr04ZdffqFJkyYVXvujjz6iZcuWFa6cuxBBQUGsWrWKRx99lKFDh1JQUEBoaCjDhg3Dyan0NLeMjAyio6NJS0vDarXSpUsXYmJiGDx4cLV+poiISF1lMQzDMDuEiIiISF2lq+FEREREqqCyJCIiIlIFnbNUA2w2G6mpqTRp0qTSNY9ERESk7jEMg5ycHIKCgsrPya2MylINSE1NJSQkxOwYIiIiUg0HDx4svyK8MipLNaDsarSDBw/i7e1tchoRERE5H9nZ2YSEhJxxVfmfqSzVgLKpN29vb5UlERERB3OuU2h0greIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKqgs1WGGYbBu33HyCovNjiIiItJgqSzVYX/9bBM3vr+GRZtTzI4iIiLSYKks1WG9wpoCMHdVMoZhmJxGRESkYVJZqsNuvDQELzdnkg6fZNXu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Z2z/xhtvYLHo/k4iIiJSkUOs4B0fH09MTAyxsbH06dMHgA8++ICoqCgSEhLo0KHDGfskJSURGxvL9u3b6dixIwDvvPMO/v7+fPnll9x1113l227ZsoXXXnuN9evX06JFC/u8KREREXEIDjGytGbNGqxWa3lRAujbty9Wq5XVq1dXuk9BQQEAHh4e5c85Ozvj5ubGypUry5/Ly8vj5ptvZvbs2QQGBtbSOxARERFH5RBlKT09HX9//zOe9/f3Jz09vdJ9wsPDCQ0NZfr06Zw4cYLCwkJmzZpFeno6aWlp5dtNnTqVfv36ce211553noKCArKzsys8REREpH4ytSzNmDEDi8VS5WPDhg0AlZ5PZBjGWc8zcnV15euvvyYxMZFmzZrh6enJihUrGD58OM7OzgAsXryYZcuW8cYbb1xQ7pkzZ5afaG61WgkJCbmwNy4iIiIOw9RzlqZMmcJNN91U5TZhYWFs3bqVjIyMM7535MgRAgICzrpvz549iYuLIysri8LCQvz8/OjTpw+9evUCYNmyZezZswcfH58K+11//fVcfvnlrFixotLXnT59Og8++GD519nZ2SpMIiIi9ZTFMAzD7BDnEh8fT2RkJGvXrqV3794ArF27lr59+7Jr165KT/CuTFJSEuHh4fz0008MGTKE9PR0jh49WmGbzp07889//pNRo0bRunXr83rd871rsYiIiNQd5/v32yGuhouIiGDYsGFMnjyZ999/H4C//OUvjBw5skJRCg8PZ+bMmYwdOxaA+fPn4+fnR6tWrdi2bRv3338/Y8aMYciQIQAEBgZWelJ3q1atzrsoQel0IKBzl0RERBxI2d/tc40bOURZAvj888+57777yovO6NGjmT17doVtEhISyMrKKv86LS2NBx98kIyMDFq0aMGECRN48sknazxbTk4OgKbiREREHFBOTg5Wq/Ws33eIabi6zmazkZqaSpMmTerEwpZl51AdPHhQ04LoePyZjseZdEwq0vGoSMejovp0PAzDICcnh6CgIJyczn7Nm8OMLNVlTk5OBAcHmx3jDN7e3g7/i1yTdDwq0vE4k45JRToeFel4VFRfjkdVI0plHGKdJRERERGzqCyJiIiIVEFlqR5yd3fn6aefxt3d3ewodYKOR0U6HmfSMalIx6MiHY+KGuLx0AneIiIiIlXQyJKIiIhIFVSWRERERKqgsiQiIiJSBZUlB5aSksJtt91G8+bN8fT0pFu3bmzcuLH8+4ZhMGPGDIKCgmjUqBEDBw5kx44dJiauXVUdj6KiIh599FE6d+6Ml5cXQUFBTJgwgdTUVJNT165z/Y780d13343FYuGNN96wb0g7Op/jER8fz+jRo7FarTRp0oS+ffty4MABkxLXrnMdj5MnTzJlyhSCg4Np1KgRERERvPvuuyYmrj1hYWFYLJYzHn//+9+Bhvd5WtXxaIifpypLDurEiRNcdtlluLq68tNPP7Fz505effVVfHx8yrd56aWXeO2115g9ezbr168nMDCQwYMHl9+epT451/HIy8tj06ZNPPnkk2zatImFCxeSmJjI6NGjzQ1ei87nd6TMN998w9q1awkKCrJ/UDs5n+OxZ88e+vfvT3h4OCtWrGDLli08+eSTeHh4mBe8lpzP8Zg6dSoxMTF89tlnxMfHM3XqVO69916+/fZb84LXkvXr15OWllb+WLJkCQDjxo0DGtbnKVR9PBri5ymGOKRHH33U6N+//1m/b7PZjMDAQGPWrFnlz+Xn5xtWq9V477337BHRrs51PCqzbt06AzD2799fS6nMdb7H5NChQ0bLli2N7du3G6Ghocbrr79e++FMcD7HY/z48cZtt91mp0TmOp/j0bFjR+OZZ56p8FyPHj2MJ554ojaj1Qn333+/cckllxg2m63BfZ5W5o/HozL1/fNUI0sOavHixfTq1Ytx48bh7+9P9+7d+eCDD8q/v2/fPtLT08tvPAyla2MMGDCA1atXmxG5Vp3reFQmKysLi8VS6UhLfXA+x8RmsxEdHc20adPo2LGjSUnt41zHw2az8cMPP9C+fXuGDh2Kv78/ffr04ZtvvjEvdC06n9+P/v37s3jxYlJSUjAMg+XLl5OYmMjQoUNNSm0fhYWFfPbZZ9xxxx1YLJYG93n6Z38+HpWp75+nGllyUO7u7oa7u7sxffp0Y9OmTcZ7771neHh4GB9//LFhGIaxatUqAzBSUlIq7Dd58mRjyJAhZkSuVec6Hn926tQpo2fPnsatt95q56T2cz7H5IUXXjAGDx5c/q/F+jyydK7jkZaWZgCGp6en8dprrxmbN282Zs6caVgsFmPFihUmp6955/P7UVBQYEyYMMEADBcXF8PNzc345JNPTExtH1999ZXh7Oxc/vnZ0D5P/+zPx+PPGsLnqcqSg3J1dTWioqIqPHfvvfcaffv2NQzjf//jTk1NrbDNXXfdZQwdOtRuOe3lXMfjjwoLC41rr73W6N69u5GVlWWviHZ3rmOyYcMGIyAgoMIHYH0uS+c6HikpKQZg3HzzzRW2GTVqlHHTTTfZLae9nM//Zl5++WWjffv2xuLFi40tW7YYb731ltG4cWNjyZIl9o5rV0OGDDFGjhxZ/nVD+zz9sz8fjz9qKJ+nmoZzUC1atCAyMrLCcxEREeVX7QQGBgKQnp5eYZvDhw8TEBBgn5B2dK7jUaaoqIgbb7yRffv2sWTJknpxx+yzOdcx+f333zl8+DCtWrXCxcUFFxcX9u/fz0MPPURYWJgJiWvXuY6Hr68vLi4u5/V7VB+c63icOnWKxx9/nNdee41Ro0bRpUsXpkyZwvjx43nllVfMiGwX+/fvZ+nSpdx1113lzzW0z9M/qux4lGlIn6cqSw7qsssuIyEhocJziYmJhIaGAtC6dWsCAwPLr2CA0nnn3377jX79+tk1qz2c63jA//6HnZSUxNKlS2nevLm9Y9rVuY5JdHQ0W7duJS4urvwRFBTEtGnT+Pnnn82IXKvOdTzc3Ny49NJLz/l7VF+c63gUFRVRVFSEk1PFPxPOzs7YbDa75bS3OXPm4O/vz4gRI8qfa2ifp39U2fGAhvd5qmk4B7Vu3TrDxcXFeP75542kpCTj888/Nzw9PY3PPvusfJtZs2YZVqvVWLhwobFt2zbj5ptvNlq0aGFkZ2ebmLx2nOt4FBUVGaNHjzaCg4ONuLg4Iy0trfxRUFBgcvracT6/I39Wn6fhzud4LFy40HB1dTX+9a9/GUlJScZbb71lODs7G7///ruJyWvH+RyPAQMGGB07djSWL19u7N2715gzZ47h4eFhvPPOOyYmrz0lJSVGq1atjEcfffSM7zWkz9MyZzseDfHzVGXJgX333XdGp06dDHd3dyM8PNz417/+VeH7NpvNePrpp43AwEDD3d3duOKKK4xt27aZlLb2VXU89u3bZwCVPpYvX25e6Fp2rt+RP6vPZckwzu94fPjhh0bbtm0NDw8Po2vXrsY333xjQlL7ONfxSEtLMyZOnGgEBQUZHh4eRocOHYxXX331rJePO7qff/7ZAIyEhIQzvtfQPk8N4+zHoyF+nloMwzDMGNESERERcQQ6Z0lERESkCipLIiIiIlVQWRIRERGpgsqSiIiISBVUlkRERESqoLIkIiIiUgWVJREREZEqqCyJiIiIVEFlSUQatLCwMN544w2zY4hIHaayJCIOa9SoUQwaNKjS761ZswaLxcKmTZvsnEpE6huVJRFxWHfeeSfLli1j//79Z3zvo48+olu3bvTo0cOEZCJSn6gsiYjDGjlyJP7+/sydO7fC83l5eXz11VfceeedfP3113Ts2BF3d3fCwsJ49dVXz/p6ycnJWCwW4uLiyp/LzMzEYrGwYsUKAFasWIHFYuHnn3+me/fuNGrUiKuuuorDhw/z008/ERERgbe3NzfffDN5eXnlr2MYBi+99BJt2rShUaNGdO3alQULFtTk4RCRWqKyJCIOy8XFhQkTJjB37lz+eE/w+fPnU1hYSFRUFDfeeCM33XQT27ZtY8aMGTz55JNnlKvqmDFjBrNnz2b16tUcPHiQG2+8kTfeeIMvvviCH374gSVLlvDWW2+Vb//EE08wZ84c3n33XXbs2MHUqVO57bbb+O233y46i4jULovxx08YEREHs2vXLiIiIli2bBlXXnklAAMGDKBly5ZYLBaOHDnCL7/8Ur79I488wg8//MCOHTuA0hO8H3jgAR544AGSk5Np3bo1mzdvplu3bkDpyFLTpk1Zvnw5AwcOZMWKFVx55ZUsXbqUq6++GoBZs2Yxffp09uzZQ5s2bQC45557SE5OJiYmhtzcXHx9fVm2bBlRUVHlWe666y7y8vL44osv7HGoRKSaNLIkIg4tPDycfv368dFHHwGwZ88efv/9d+644w7i4+O57LLLKmx/2WWXkZSURElJyUX93C5dupT//wEBAXh6epYXpbLnDh8+DMDOnTvJz89n8ODBNG7cuPzxySefsGfPnovKISK1z8XsACIiF+vOO+9kypQpvP3228yZM4fQ0FCuvvpqDMPAYrFU2LaqwXQnJ6cztikqKqp0W1dX1/L/32KxVPi67DmbzQZQ/n9/+OEHWrZsWWE7d3f3c709ETGZRpZExOHdeOONODs788UXX/Dxxx8zadIkLBYLkZGRrFy5ssK2q1evpn379jg7O5/xOn5+fgCkpaWVP/fHk72rKzIyEnd3dw4cOEDbtm0rPEJCQi769UWkdmlkSUQcXuPGjRk/fjyPP/44WVlZTJw4EYCHHnqISy+9lGeffZbx48ezZs0aZs+ezTvvvFPp6zRq1Ii+ffsya9YswsLCOHr0KE888cRF52vSpAkPP/wwU6dOxWaz0b9/f7Kzs1m9ejWNGzfm9ttvv+ifISK1RyNLIlIv3HnnnZw4cYJBgwbRqlUrAHr06MF//vMf5s2bR6dOnXjqqad45plnystUZT766COKioro1asX999/P88991yN5Hv22Wd56qmnmDlzJhEREQwdOpTvvvuO1q1b18jri0jt0dVwIiIiIlXQyJKIiIhIFVSWRERERKqgsiQiIiJSBZUlERERkSqoLImIiIhUQWVJREREpAoqSyIiIiJVUFkSERERqYLKkoiIiEgVVJZEREREqqCyJCIiIlIFlSURERGRKvw/FsCLm/9axZsAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "execution_count": 25
+ "source": [
+ "delayed_object_lst[-1].pull()"
+ ]
},
{
"cell_type": "code",
- "source": "",
+ "execution_count": null,
"metadata": {
"trusted": true
},
"outputs": [],
- "execution_count": null
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "ADIS",
+ "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.10.12"
}
- ]
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
}
diff --git a/python_workflow_definition/pyproject.toml b/python_workflow_definition/pyproject.toml
index 3f12642..736a71d 100644
--- a/python_workflow_definition/pyproject.toml
+++ b/python_workflow_definition/pyproject.toml
@@ -20,6 +20,8 @@ dependencies = [
"numpy>=1.21,<2",
"jobflow>=0.1.18,<=0.1.19",
"pyiron_base>=0.11.10,<=0.11.11",
+ "pydantic",
+ "rich",
]
[project.optional-dependencies]
diff --git a/python_workflow_definition/src/python_workflow_definition/aiida.py b/python_workflow_definition/src/python_workflow_definition/aiida.py
index c3fbf12..ca605a1 100644
--- a/python_workflow_definition/src/python_workflow_definition/aiida.py
+++ b/python_workflow_definition/src/python_workflow_definition/aiida.py
@@ -1,138 +1,631 @@
from importlib import import_module
-import json
-import traceback
+from typing import Dict, Any, Union, List, Tuple, Optional
+import logging
+
from aiida import orm
-from aiida_pythonjob.data.serializer import general_serializer
-from aiida_workgraph import WorkGraph, task
+from aiida_workgraph import WorkGraph
+from aiida_workgraph.task import Task
from aiida_workgraph.socket import TaskSocketNamespace
-
-from python_workflow_definition.shared import (
- convert_nodes_list_to_dict,
- NODES_LABEL,
- EDGES_LABEL,
- SOURCE_LABEL,
- SOURCE_PORT_LABEL,
- TARGET_LABEL,
- TARGET_PORT_LABEL,
+from aiida_pythonjob.data.serializer import general_serializer
+from python_workflow_definition.models import (
+ PwdWorkflow,
+ PwdNode,
+ PwdEdge,
+ PwdFunctionNode,
+ PwdInputNode,
+ PwdOutputNode,
+ INTERNAL_DEFAULT_HANDLE,
)
-def load_workflow_json(file_name: str) -> WorkGraph:
- with open(file_name) as f:
- data = json.load(f)
-
- wg = WorkGraph()
- task_name_mapping = {}
-
- for id, identifier in convert_nodes_list_to_dict(
- nodes_list=data[NODES_LABEL]
- ).items():
- if isinstance(identifier, str) and "." in identifier:
- p, m = identifier.rsplit(".", 1)
- mod = import_module(p)
- func = getattr(mod, m)
- wg.add_task(func)
- # Remove the default result output, because we will add the outputs later from the data in the link
- del wg.tasks[-1].outputs["result"]
- task_name_mapping[id] = wg.tasks[-1]
- else:
- # data task
- data_node = general_serializer(identifier)
- task_name_mapping[id] = data_node
-
- # add links
- for link in data[EDGES_LABEL]:
- to_task = task_name_mapping[str(link[TARGET_LABEL])]
- # if the input is not exit, it means we pass the data into to the kwargs
- # in this case, we add the input socket
- if link[TARGET_PORT_LABEL] not in to_task.inputs:
- to_socket = to_task.add_input("workgraph.any", name=link[TARGET_PORT_LABEL])
- else:
- to_socket = to_task.inputs[link[TARGET_PORT_LABEL]]
- from_task = task_name_mapping[str(link[SOURCE_LABEL])]
- if isinstance(from_task, orm.Data):
- to_socket.value = from_task
- else:
+# --- Constants ---
+AIIDA_WG_DEFAULT_HANDLE = "result"
+ANY_SOCKET_TYPE = "workgraph.any"
+
+
+class AiidaPwdConverter:
+ """
+ Provides methods to convert between AiiDA WorkGraph instances
+ and PWD workflows as Pydantic models.
+ """
+
+ def __init__(self):
+ """Initializes the converter and sets up logger."""
+ self.logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}")
+ self._reset_state()
+
+ def model_to_workgraph(self, workflow_model: PwdWorkflow) -> WorkGraph:
+ """
+ Converts a PWD Workflow Pydantic model into an AiiDA WorkGraph.
+ """
+ self.logger.info("Starting model to WorkGraph conversion...")
+ self._reset_state()
+ self.workflow_model = workflow_model
+ # Create WG instance, potentially using name from model (if we add that?)
+ self.wg = WorkGraph(f"wg_{getattr(workflow_model, 'name', 'from_model')}")
+
+ # Call internal helper methods
+ self._m2w_create_nodes()
+ self._m2w_link_nodes()
+ self._m2w_create_group_io()
+
+ self.logger.info("Finished model to WorkGraph conversion.")
+ return self.wg
+
+ def workgraph_to_model(self, wg: WorkGraph) -> PwdWorkflow:
+ """
+ Converts an AiiDA WorkGraph into a PWD Workflow Pydantic model.
+ """
+ self.logger.info(
+ f"Starting WorkGraph to model conversion for WG '{wg.name}'..."
+ )
+ self._reset_state()
+ self.wg = wg
+ self.wg_protected_outputs = ("_wait", "_outputs", "exit_code")
+ self.wg_protected_inputs = (
+ "_wait",
+ "metadata",
+ "function_data",
+ "process_label",
+ "function_inputs",
+ "deserializers",
+ "serializers",
+ "handler_overrides",
+ "metadata_overrides",
+ "name",
+ "ctx",
+ )
+
+ # Call internal helper methods
+ self._w2m_create_function_nodes()
+ self._w2m_create_input_nodes()
+ self._w2m_create_link_edges()
+ self._w2m_create_output_nodes()
+ self._w2m_adjust_node_names()
+
+ # Assemble final Workflow model from instance attributes
+ # TODO: Ensure Workflow model accepts 'name' field if needed
+ workflow_model = PwdWorkflow(
+ nodes=self._pydantic_nodes, edges=self._pydantic_edges
+ )
+
+ self.logger.info(
+ f"Finished WorkGraph to model conversion. Model has {len(self._pydantic_nodes)} nodes, {len(self._pydantic_edges)} edges."
+ )
+ return workflow_model
+
+ @staticmethod
+ def _extract_aiida_value(data_node: orm.Data) -> Any:
+ logger_ext = logging.getLogger(f"{__name__}._extract_aiida_value")
+ node_info = (
+ f"PK {getattr(data_node, 'pk', 'Unstored')} (Type: {type(data_node)})"
+ )
+ logger_ext.debug(f"Extracting Python value from {node_info}")
+ if isinstance(data_node, (orm.Str, orm.Int, orm.Float, orm.Bool)):
+ return data_node.value
+ elif isinstance(data_node, orm.List):
+ return data_node.get_list()
+ elif isinstance(data_node, orm.Dict):
+ return data_node.get_dict()
+ elif isinstance(data_node, orm.ArrayData):
try:
- if link[SOURCE_PORT_LABEL] is None:
- link[SOURCE_PORT_LABEL] = "result"
- # because we are not define the outputs explicitly during the pythonjob creation
- # we add it here, and assume the output exit
- if link[SOURCE_PORT_LABEL] not in from_task.outputs:
- # if str(link["sourcePort"]) not in from_task.outputs:
- from_socket = from_task.add_output(
- "workgraph.any",
- name=link[SOURCE_PORT_LABEL],
- # name=str(link["sourcePort"]),
- metadata={"is_function_output": True},
- )
+ array_names = data_node.get_arraynames()
+ if array_names:
+ return data_node.get_array(array_names[0]).tolist()
else:
- from_socket = from_task.outputs[link[SOURCE_PORT_LABEL]]
-
- wg.add_link(from_socket, to_socket)
+ logger_ext.warning(f"No arrays in {node_info}")
+ return []
except Exception as e:
- traceback.print_exc()
- print("Failed to link", link, "with error:", e)
- return wg
-
-
-def write_workflow_json(wg: WorkGraph, file_name: str) -> dict:
- data = {NODES_LABEL: [], EDGES_LABEL: []}
- node_name_mapping = {}
- data_node_name_mapping = {}
- i = 0
- for node in wg.tasks:
- executor = node.get_executor()
- node_name_mapping[node.name] = i
-
- callable_name = executor["callable_name"]
- callable_name = f"{executor['module_path']}.{callable_name}"
- data[NODES_LABEL].append({"id": i, "function": callable_name})
- i += 1
-
- for link in wg.links:
- link_data = link.to_dict()
- # if the from socket is the default result, we set it to None
- if link_data["from_socket"] == "result":
- link_data["from_socket"] = None
- link_data[TARGET_LABEL] = node_name_mapping[link_data.pop("to_node")]
- link_data[TARGET_PORT_LABEL] = link_data.pop("to_socket")
- link_data[SOURCE_LABEL] = node_name_mapping[link_data.pop("from_node")]
- link_data[SOURCE_PORT_LABEL] = link_data.pop("from_socket")
- data[EDGES_LABEL].append(link_data)
-
- for node in wg.tasks:
- for input in node.inputs:
- # assume namespace is not used as input
- if isinstance(input, TaskSocketNamespace):
+ logger_ext.warning(f"Array extraction failed for {node_info}: {e}")
+ return []
+ elif isinstance(data_node, orm.SinglefileData):
+ return data_node.filename
+ else:
+ if hasattr(data_node, "value"):
+ logger_ext.warning(
+ f"Attempting basic '.value' access for unhandled {node_info}."
+ )
+ try:
+ return data_node.value
+ except Exception:
+ pass
+ logger_ext.warning(
+ f"Unhandled AiiDA type: {node_info}. Returning placeholder."
+ )
+ return f""
+
+ def _reset_state(self) -> None:
+ """Resets internal state variables before starting a new conversion."""
+ self.logger.debug("Resetting internal converter state.")
+ # Inputs for conversion
+ self.workflow_model: Optional[PwdWorkflow] = None
+ self.wg: Optional[WorkGraph] = None
+ # Intermediate state for model -> workgraph
+ self._node_map: Dict[int, Union[Task, orm.Data, PwdNode]] = {}
+ # Intermediate state for workgraph -> model
+ self._pydantic_nodes: List[PwdNode] = []
+ self._pydantic_edges: List[PwdEdge] = []
+ self._aiida_task_name_to_pydantic_id: Dict[str, int] = {}
+ self._aiida_data_map_key_to_pydantic_id: Dict[int, int] = {}
+ self._static_input_to_node_id: Dict[Tuple[str, str], int] = {}
+ self._workflow_output_to_node_id: Dict[Tuple[str, str], int] = {}
+ self._current_id: int = 0
+
+ def _m2w_create_nodes(self):
+ self.logger.info(
+ f"Starting model to WorkGraph conversion for model '{getattr(self.workflow_model, 'name', 'Unnamed')}'..."
+ )
+
+ self.logger.debug(
+ f"Processing {len(self.workflow_model.nodes)} nodes from model."
+ )
+ for node in self.workflow_model.nodes:
+ if not isinstance(node, PwdFunctionNode):
+ node_info = f"node {node.id} (name: {getattr(node, 'name')}, type: {node.type})"
+ else:
+ node_info = f"node {node.id} (name: {getattr(node, 'value')}, type: {node.type})"
+ self.logger.debug(f"Processing {node_info}.")
+
+ if isinstance(node, PwdFunctionNode):
+ try:
+ p, m = node.value.rsplit(".", 1)
+ mod = import_module(p)
+ func = getattr(mod, m)
+ task_name = f"{m}_{node.id}"
+ self.logger.debug(
+ f"Adding task '{task_name}' for function '{node.value}' from {node_info}."
+ )
+ aiida_task = self.wg.add_task(func, name=task_name)
+ if "result" in aiida_task.outputs:
+ self.logger.debug(
+ f"Removing default 'result' output from task '{task_name}'."
+ )
+ del aiida_task.outputs["result"]
+ self._node_map[node.id] = aiida_task
+ except (ImportError, AttributeError, ValueError) as e:
+ self.logger.error(
+ f"Failed processing FunctionNode {node.id} ('{node.value}'): {e}",
+ exc_info=True,
+ )
+ raise AttributeError(
+ f"Failed processing FunctionNode {node.id}: {e}"
+ ) from e
+ except Exception as e:
+ self.logger.error(
+ f"Unexpected error creating task for {node_info}: {e}",
+ exc_info=True,
+ )
+ raise RuntimeError(
+ f"Error creating task for node {node.id}: {e}"
+ ) from e
+ elif isinstance(node, PwdInputNode):
+ try:
+ self.logger.debug(f"Serializing value for {node_info}.")
+ data_node = general_serializer(node.value)
+ if not isinstance(data_node, orm.Data):
+ self.logger.debug(
+ f"Value for {node_info} not an AiiDA node, wrapping with to_aiida_type."
+ )
+ data_node = orm.to_aiida_type(node.value) # Pass original value
+ self.logger.info(
+ f"Created AiiDA Data node (PK: {getattr(data_node, 'pk', 'Unstored')}) for {node_info}."
+ )
+ self._node_map[node.id] = data_node
+ except Exception as e:
+ self.logger.warning(
+ f"Could not serialize value for {node_info} (value: {node.value}). Error: {e}",
+ exc_info=True,
+ )
+ self._node_map[node.id] = None
+ elif isinstance(node, PwdOutputNode):
+ self.logger.debug(f"OutputNode {node_info} defines an endpoint.")
+ self._node_map[node.id] = node
+ else:
+ self.logger.warning(
+ f"Unsupported node type: {type(node)} for node ID {node.id}. Skipping."
+ )
+
+ def _m2w_link_nodes(self):
+ self.logger.debug(
+ f"Processing {len(self.workflow_model.edges)} edges from model."
+ )
+ for edge_idx, edge in enumerate(self.workflow_model.edges):
+ edge_info = f"edge {edge_idx} (source: {edge.source}:{edge.sourcePort or 'default'} -> target: {edge.target}:{edge.targetPort or 'default'})"
+ self.logger.debug(f"Processing {edge_info}.")
+ source_obj = self._node_map.get(edge.source)
+ target_obj = self._node_map.get(edge.target)
+ if source_obj is None:
+ self.logger.warning(
+ f"Source obj missing for ID {edge.source}. Skipping {edge_info}."
+ )
+ continue
+ if target_obj is None:
+ self.logger.warning(
+ f"Target obj missing for ID {edge.target}. Skipping {edge_info}."
+ )
+ continue
+
+ # Case 1: Connection *to* an OutputNode model
+ if isinstance(target_obj, PwdOutputNode):
+ if not isinstance(source_obj, Task):
+ self.logger.error(
+ f"Cannot connect non-Task source ID {edge.source} to OutputNode {target_obj.id}. Skipping."
+ )
+ continue
+ # This is None or a specific string
+ model_source_handle = edge.sourcePort
+
+ aiida_source_socket_name = (
+ AIIDA_WG_DEFAULT_HANDLE
+ if model_source_handle == INTERNAL_DEFAULT_HANDLE
+ else model_source_handle
+ )
+ if aiida_source_socket_name not in source_obj.outputs:
+ self.logger.info(
+ f"Adding inferred output socket '{aiida_source_socket_name}' to task '{source_obj.name}'."
+ )
+ source_obj.add_output(
+ ANY_SOCKET_TYPE, name=aiida_source_socket_name
+ )
continue
- if isinstance(input.value, orm.Data):
- if input.value.uuid not in data_node_name_mapping:
- if isinstance(input.value, orm.List):
- raw_value = input.value.get_list()
- elif isinstance(input.value, orm.Dict):
- raw_value = input.value.get_dict()
- # unknow reason, there is a key "node_type" in the dict
- raw_value.pop("node_type", None)
+
+ # Case 2: Connection *to* a Task
+ if isinstance(target_obj, Task):
+ to_task_obj = target_obj
+ # ... (check targetPort, ensure target input socket exists) ...
+ target_port_name = edge.targetPort
+ if not target_port_name:
+ self.logger.error(...)
+ raise ValueError(...)
+ if target_port_name not in to_task_obj.inputs:
+ self.logger.info(
+ f"Adding inferred input socket '{target_port_name}' to task '{to_task_obj.name}'."
+ )
+ to_socket = to_task_obj.add_input(
+ ANY_SOCKET_TYPE, name=target_port_name
+ )
+ else:
+ to_socket = to_task_obj.inputs[target_port_name]
+
+ # Handle the source of the connection
+ if isinstance(source_obj, orm.Data):
+ # ... (handle static input linking - no handle mapping needed here) ...
+ if edge.sourcePort != INTERNAL_DEFAULT_HANDLE:
+ self.logger.warning(
+ f"Ignoring non-default sourcePort '{edge.sourcePort}' for Data node source {edge.source}."
+ )
+ elif isinstance(source_obj, Task):
+ from_task_obj = source_obj
+ # --- MAP MODEL HANDLE TO AIIDA HANDLE ---
+ model_source_handle = (
+ edge.sourcePort
+ ) # This is None or a specific string
+ aiida_source_socket_name = (
+ AIIDA_WG_DEFAULT_HANDLE
+ if model_source_handle == INTERNAL_DEFAULT_HANDLE
+ else model_source_handle
+ )
+
+ # Ensure output socket exists on source task using the AiiDA name
+ if aiida_source_socket_name not in from_task_obj.outputs:
+ self.logger.info(
+ f"Adding inferred output socket '{aiida_source_socket_name}' to task '{from_task_obj.name}'."
+ )
+ from_socket = from_task_obj.add_output(
+ ANY_SOCKET_TYPE, name=aiida_source_socket_name
+ )
else:
- raw_value = input.value.value
- data[NODES_LABEL].append({"id": i, "value": raw_value})
- input_node_name = i
- data_node_name_mapping[input.value.uuid] = input_node_name
- i += 1
+ from_socket = from_task_obj.outputs[aiida_source_socket_name]
+
+ self.logger.info(
+ f"Linking task output '{from_task_obj.name}.{from_socket._name}' to task input '{to_task_obj.name}.{to_socket._name}'."
+ ) # Log uses AiiDA names
+ self.wg.add_link(from_socket, to_socket)
+
else:
- input_node_name = data_node_name_mapping[input.value.uuid]
- data[EDGES_LABEL].append(
- {
- TARGET_LABEL: node_name_mapping[node.name],
- TARGET_PORT_LABEL: input._name,
- SOURCE_LABEL: input_node_name,
- SOURCE_PORT_LABEL: None,
+ self.logger.error(
+ f"Unexpected source type {type(source_obj)} for edge {edge_info}. Skipping."
+ )
+ else:
+ self.logger.error(
+ f"Unexpected target type {type(target_obj)} for edge {edge_info}. Skipping."
+ )
+
+ def _m2w_create_group_io(self):
+ self.logger.debug(
+ "Creating group_inputs and group_outputs from model definition."
+ )
+ group_inputs = []
+ group_outputs = []
+ pydantic_nodes_by_id = {node.id: node for node in self.workflow_model.nodes}
+ for edge in self.workflow_model.edges:
+ source_node_model = pydantic_nodes_by_id.get(edge.source)
+ target_node_model = pydantic_nodes_by_id.get(edge.target)
+ if isinstance(source_node_model, PwdInputNode):
+ target_task_obj = self._node_map.get(edge.target)
+ if isinstance(target_task_obj, Task) and edge.targetPort:
+ input_entry = {
+ "name": source_node_model.name,
+ "to": f"{target_task_obj.name}.{edge.targetPort}",
+ }
+ if not any(
+ gi["name"] == input_entry["name"] for gi in group_inputs
+ ):
+ group_inputs.append(input_entry)
+ self.logger.debug(f"Added group input: {input_entry}")
+ else:
+ self.logger.warning(
+ f"Duplicate group input name '{input_entry['name']}'. Skipping."
+ )
+
+ elif isinstance(target_node_model, PwdOutputNode):
+ source_task_obj = self._node_map.get(edge.source)
+ if isinstance(source_task_obj, Task):
+ model_source_handle = edge.sourcePort
+ aiida_source_socket_name = (
+ AIIDA_WG_DEFAULT_HANDLE
+ if model_source_handle == INTERNAL_DEFAULT_HANDLE
+ else model_source_handle
+ )
+ output_entry = {
+ "name": target_node_model.name,
+ "from": f"{source_task_obj.name}.{aiida_source_socket_name}",
}
+ if not any(
+ go["name"] == output_entry["name"] for go in group_outputs
+ ):
+ group_outputs.append(output_entry)
+ self.logger.debug(f"Added group output: {output_entry}")
+ else:
+ self.logger.warning(
+ f"Duplicate group output name '{output_entry['name']}'. Skipping."
+ )
+
+ self.wg.group_inputs = group_inputs
+ self.wg.group_outputs = group_outputs
+ self.logger.info(
+ f"Assigned {len(self.wg.group_inputs)} group inputs and {len(self.wg.group_outputs)} group outputs."
+ )
+ self.logger.info("Finished model to WorkGraph conversion.")
+ import ipdb; ipdb.set_trace()
+ pass
+
+ def _w2m_create_function_nodes(self):
+ self.logger.debug(f"Processing {len(self.wg.tasks)} tasks.")
+ for task in self.wg.tasks:
+ if not isinstance(task, Task):
+ self.logger.warning(f"Skipping non-Task item: {task}.")
+ continue
+ try:
+ executor_info = task.get_executor()
+ idf = f"{executor_info.get('module_path', '?')}.{executor_info.get('callable_name', '?')}"
+ node = PwdFunctionNode(id=self._current_id, type="function", value=idf)
+ self._pydantic_nodes.append(node)
+ self._aiida_task_name_to_pydantic_id[task.name] = self._current_id
+ self.logger.info(
+ f"Created FunctionNode ID {self._current_id} for task '{task.name}' ({idf})."
+ )
+ self._current_id += 1
+ except Exception as e:
+ self.logger.error(
+ f"Error processing task '{task.name}': {e}", exc_info=True
+ )
+
+ def _w2m_create_input_nodes(self):
+ self.logger.debug("Processing static inputs.")
+ for task in self.wg.tasks:
+ task_name = task.name
+ target_task_id = self._aiida_task_name_to_pydantic_id.get(task_name)
+ if target_task_id is None:
+ continue
+ for input_socket in task.inputs:
+ if isinstance(input_socket, TaskSocketNamespace):
+ continue
+ input_name = input_socket._name
+ socket_info = f"'{task_name}.{input_name}'"
+ if input_name in self.wg_protected_inputs:
+ continue
+ input_value = input_socket.value
+ if isinstance(input_value, orm.Data):
+ data_node = input_value
+ assignment_key = (task_name, input_name)
+ try:
+ data_pk = data_node.pk
+ map_key = data_pk if data_pk is not None else id(data_node)
+ if map_key in self._aiida_data_map_key_to_pydantic_id:
+ input_node_id = self._aiida_data_map_key_to_pydantic_id[
+ map_key
+ ]
+ self._static_input_to_node_id[assignment_key] = (
+ input_node_id # Still map this connection
+ )
+ self.logger.debug(
+ f"Reusing InputNode ID {input_node_id} for {socket_info}."
+ )
+ else:
+ raw_value = AiidaPwdConverter._extract_aiida_value(
+ data_node
+ )
+ input_node = PwdInputNode(
+ id=self._current_id,
+ type="input",
+ name=input_name,
+ value=raw_value,
+ )
+ self._pydantic_nodes.append(input_node)
+ input_node_id = self._current_id
+ self._aiida_data_map_key_to_pydantic_id[map_key] = (
+ input_node_id
+ )
+ self._static_input_to_node_id[assignment_key] = (
+ input_node_id
+ )
+ self.logger.info(
+ f"Created InputNode ID {input_node_id} (default name: {input_name}) for {socket_info}."
+ )
+ self._current_id += 1
+ edge = PwdEdge(
+ source=input_node_id,
+ sourcePort=None,
+ target=target_task_id,
+ targetPort=input_name,
+ )
+ self._pydantic_edges.append(edge)
+ self.logger.debug(
+ f"Created edge from InputNode {input_node_id} to {socket_info}."
+ )
+ except Exception as e:
+ self.logger.error(
+ f"Error processing static {socket_info}: {e}", exc_info=True
+ )
+
+ def _w2m_create_link_edges(self):
+ self.logger.debug(f"Processing {len(self.wg.links)} links.")
+ for link in self.wg.links:
+ if not isinstance(link.from_node, Task) or not isinstance(
+ link.to_node, Task
+ ):
+ continue
+ try:
+ from_task_name = link.from_node.name
+ to_task_name = link.to_node.name
+ source_id = self._aiida_task_name_to_pydantic_id.get(from_task_name)
+ target_id = self._aiida_task_name_to_pydantic_id.get(to_task_name)
+ if source_id is None or target_id is None:
+ continue
+
+ aiida_from_socket_name = link.from_socket._name
+ aiida_to_socket_name = link.to_socket._name
+
+ # --- MAP AIIDA HANDLE TO MODEL HANDLE ---
+ model_source_handle = (
+ None
+ if aiida_from_socket_name == AIIDA_WG_DEFAULT_HANDLE
+ else aiida_from_socket_name
)
- with open(file_name, "w") as f:
- # json.dump({"nodes": data[], "edges": edges_new_lst}, f)
- json.dump(data, f, indent=2)
- return data
+ model_target_handle = aiida_to_socket_name
+
+ self.logger.debug(
+ f"Mapping link to Pydantic Edge: source={source_id}, sourcePort='{model_source_handle}', target={target_id}, targetPort='{model_target_handle}'."
+ )
+
+ edge = PwdEdge(
+ source=source_id,
+ sourcePort=model_source_handle,
+ target=target_id,
+ targetPort=model_target_handle,
+ )
+ self._pydantic_edges.append(edge)
+ except Exception as e:
+ self.logger.error(f"Error processing link {link}: {e}", exc_info=True)
+
+ def _w2m_create_output_nodes(self):
+ self.logger.debug("Identifying workflow outputs.")
+ all_link_sources = set(
+ (link.from_node.name, link.from_socket._name)
+ for link in self.wg.links
+ if isinstance(link.from_node, Task)
+ )
+ for task in self.wg.tasks:
+ task_name = task.name
+ source_task_id = self._aiida_task_name_to_pydantic_id.get(task_name)
+ if source_task_id is None:
+ continue
+ for output_socket in task.outputs:
+ if isinstance(output_socket, TaskSocketNamespace):
+ continue
+ output_name = output_socket._name
+ if output_name in self.wg_protected_outputs:
+ continue
+ output_key = (task_name, output_name)
+ if output_key not in all_link_sources:
+ try:
+ value = None
+ if output_socket.value is not None:
+ aiida_value_node = output_socket.value
+ if isinstance(aiida_value_node, orm.Data):
+ # Use the existing helper to get a JSON-friendly value
+ value = self._extract_aiida_value(aiida_value_node)
+ else:
+ self.warning(
+ f" Value for output '{task_name}' is not an AiiDA Data node (type: {type(aiida_value_node)}). Skipping value embedding."
+ )
+
+ output_node = PwdOutputNode(
+ id=self._current_id,
+ type="output",
+ name=output_name,
+ value=value,
+ )
+ self._pydantic_nodes.append(output_node)
+ output_node_id = self._current_id
+ self._workflow_output_to_node_id[output_key] = output_node_id
+ self.logger.info(
+ f"Created OutputNode ID {output_node_id} (default name: {output_name}) for output '{task_name}.{output_name}'."
+ )
+ self._current_id += 1
+ ps_port = None if output_name == "result" else output_name
+ edge = PwdEdge(
+ source=source_task_id,
+ sourcePort=ps_port,
+ target=output_node_id,
+ targetPort=None,
+ )
+ self._pydantic_edges.append(edge)
+ self.logger.debug(
+ f"Created edge from '{task_name}.{output_name}' to OutputNode {output_node_id}."
+ )
+ except Exception as e:
+ self.logger.error(
+ f"Error creating OutputNode/Edge for '{task_name}.{output_name}': {e}",
+ exc_info=True,
+ )
+
+ def _w2m_adjust_node_names(self):
+ self.logger.debug("Attempting to override I/O node names from group lists.")
+ pydantic_nodes_dict = {node.id: node for node in self._pydantic_nodes}
+ # Process group_inputs
+ if hasattr(self.wg, "group_inputs") and isinstance(self.wg.group_inputs, list):
+ for entry in self.wg.group_inputs:
+ if isinstance(entry, dict) and "name" in entry and "to" in entry:
+ try:
+ tn, sn = entry["to"].split(".", 1)
+ key = (tn, sn)
+ if key in self._static_input_to_node_id:
+ node_id = self._static_input_to_node_id[key]
+ if node_id in pydantic_nodes_dict and isinstance(
+ pydantic_nodes_dict[node_id], PwdInputNode
+ ):
+ pydantic_nodes_dict[node_id].name = entry["name"]
+ self.logger.info(
+ f"Overrode InputNode ID {node_id} name to '{entry['name']}' from group_inputs."
+ )
+ except Exception as e:
+ self.logger.warning(
+ f"Failed processing group_input entry {entry}: {e}"
+ )
+
+ # Process group_outputs
+ if hasattr(self.wg, "group_outputs") and isinstance(
+ self.wg.group_outputs, list
+ ):
+ for entry in self.wg.group_outputs:
+ if isinstance(entry, dict) and "name" in entry and "from" in entry:
+ try:
+ tn, sn = entry["from"].split(".", 1)
+ key = (tn, sn)
+ if key in self._workflow_output_to_node_id:
+ node_id = self._workflow_output_to_node_id[key]
+ if node_id in pydantic_nodes_dict and isinstance(
+ pydantic_nodes_dict[node_id], PwdOutputNode
+ ):
+ pydantic_nodes_dict[node_id].name = entry["name"]
+ self.logger.info(
+ f"Overrode OutputNode ID {node_id} name to '{entry['name']}' from group_outputs."
+ )
+ except Exception as e:
+ self.logger.warning(
+ f"Failed processing group_output entry {entry}: {e}"
+ )
diff --git a/python_workflow_definition/src/python_workflow_definition/models.py b/python_workflow_definition/src/python_workflow_definition/models.py
new file mode 100644
index 0000000..0f56fc0
--- /dev/null
+++ b/python_workflow_definition/src/python_workflow_definition/models.py
@@ -0,0 +1,246 @@
+from pathlib import Path
+from typing import List, Union, Optional, Literal, Any, Annotated, Type, TypeVar
+from pydantic import BaseModel, Field, field_validator, field_serializer
+from pydantic import ValidationError
+import json
+import logging
+
+logger = logging.getLogger(__name__)
+
+INTERNAL_DEFAULT_HANDLE = "__result__"
+T = TypeVar("T", bound="PwdWorkflow")
+
+__all__ = ("PwdInputNode", "PwdOutputNode", "PwdFunctionNode", "PwdEdge", "PwdWorkflow")
+
+# TODO: Check if validation _enforces_ this:
+# at the end of page 4, we discuss when sourcePort can be null. Let’s extend to also e.g. say links from functions to outputs, and for inputs to functions, MUST be null (to be validated). And sourcePort can be null only if we want to pass the whole output, and this is equivalent to passing the string `__result__`
+
+
+class PwdBaseNode(BaseModel):
+ """Base model for all node types, containing common fields."""
+
+ id: int
+ # The 'type' field will be overridden in subclasses with Literal types
+ # to enable discriminated unions.
+ type: str
+
+
+class PwdInputNode(PwdBaseNode):
+ """Model for input nodes."""
+
+ type: Literal["input"]
+ name: str
+ value: Optional[Any] = None
+
+
+class PwdOutputNode(PwdBaseNode):
+ """Model for output nodes."""
+
+ type: Literal["output"]
+ name: str
+ value: Optional[Any] = None
+
+
+class PwdFunctionNode(PwdBaseNode):
+ """
+ Model for function execution nodes.
+ The 'name' attribute is computed automatically from 'value'.
+ """
+
+ type: Literal["function"]
+ value: str # Expected format: 'module.function'
+
+ @field_validator("value")
+ @classmethod
+ def check_value_format(cls, v: str):
+ if not v or "." not in v or v.startswith(".") or v.endswith("."):
+ msg = (
+ "FunctionNode 'value' must be a non-empty string ",
+ "in 'module.function' format with at least one period.",
+ )
+ raise ValueError(msg)
+ return v
+
+
+# Discriminated Union for Nodes
+PwdNode = Annotated[
+ Union[PwdInputNode, PwdOutputNode, PwdFunctionNode], Field(discriminator="type")
+]
+
+
+class PwdEdge(BaseModel):
+ """Model for edges connecting nodes."""
+
+ target: int
+ targetPort: Optional[str] = None
+ source: int
+ sourcePort: Optional[str] = None
+
+ @field_validator("sourcePort", mode="before")
+ @classmethod
+ def handle_default_source(cls, v: Any) -> Optional[str]:
+ """
+ Transforms incoming None/null for sourcePort to INTERNAL_DEFAULT_HANDLE.
+ Runs before standard validation.
+ """
+ # Allow not specifying the sourcePort -> null gets resolved to __result__
+ if v is None:
+ return INTERNAL_DEFAULT_HANDLE
+ elif v == INTERNAL_DEFAULT_HANDLE:
+ # Disallow explicit use of the internal reserved handle name
+ msg = (
+ f"Explicit use of reserved sourcePort '{INTERNAL_DEFAULT_HANDLE}' "
+ f"is not allowed. Use null/None for default output."
+ )
+ raise ValueError(msg)
+ return v
+
+ @field_serializer("sourcePort")
+ def serialize_source_handle(self, v: Optional[str]) -> Optional[str]:
+ """
+ SERIALIZATION (Output): Converts internal INTERNAL_DEFAULT_HANDLE ("__result__")
+ back to None.
+ """
+ if v == INTERNAL_DEFAULT_HANDLE:
+ return None # Map "__result__" back to None for JSON output
+ return v # Keep other handle names as they are
+
+
+class PwdWorkflow(BaseModel):
+ """The main workflow model."""
+
+ nodes: List[PwdNode]
+ edges: List[PwdEdge]
+
+ def dump_json(
+ self,
+ *,
+ indent: Optional[int] = 2,
+ **kwargs,
+ ) -> str:
+ """
+ Dumps the workflow model to a JSON string.
+
+ Args:
+ indent: JSON indentation level.
+ exclude_computed_function_names: If True (default), excludes the computed
+ 'name' field from FunctionNode objects
+ in the output.
+ **kwargs: Additional keyword arguments passed to Pydantic's model_dump.
+
+ Returns:
+ JSON string representation of the workflow.
+ """
+
+ # Dump the model to a dictionary first, using mode='json' for compatible types
+ # Pass any extra kwargs (like custom 'exclude' rules for other fields)
+ workflow_dict = self.model_dump(mode="json", **kwargs)
+
+ # Dump the dictionary to a JSON string
+ try:
+ json_string = json.dumps(workflow_dict, indent=indent)
+ logger.info("Successfully dumped workflow model to JSON string.")
+ return json_string
+ except TypeError as e:
+ logger.error(
+ f"Error serializing workflow dictionary to JSON: {e}", exc_info=True
+ )
+ raise # Re-raise after logging
+
+ def dump_json_file(
+ self,
+ file_name: Union[str, Path],
+ *,
+ indent: Optional[int] = 2,
+ **kwargs,
+ ) -> None:
+ """
+ Dumps the workflow model to a JSON file.
+
+ Args:
+ file_path: Path to the output JSON file.
+ indent: JSON indentation level.
+ exclude_computed_function_names: If True, excludes the computed 'name' field
+ from FunctionNode objects.
+ **kwargs: Additional keyword arguments passed to Pydantic's model_dump.
+ """
+ logger.info(f"Dumping workflow model to JSON file: {file_name}")
+ # Pass kwargs to dump_json, which passes them to model_dump
+ json_string = self.dump_json(
+ indent=indent,
+ **kwargs,
+ )
+ try:
+ with open(file_name, "w", encoding="utf-8") as f:
+ f.write(json_string)
+ logger.info(f"Successfully wrote workflow model to {file_name}.")
+ except IOError as e:
+ logger.error(
+ f"Error writing workflow model to file {file_name}: {e}", exc_info=True
+ )
+ raise
+
+ @classmethod
+ def load_json_str(cls: Type[T], json_data: Union[str, bytes]) -> T:
+ """
+ Loads and validates workflow data from a JSON string or bytes.
+
+ Args:
+ json_data: The JSON data as a string or bytes.
+
+ Returns:
+ An instance of PwdWorkflow.
+
+ Raises:
+ pydantic.ValidationError: If validation fails.
+ json.JSONDecodeError: If json_data is not valid JSON.
+ """
+ logger.info("Loading workflow model from JSON data...")
+ try:
+ # Pydantic v2 method handles bytes or str directly
+ instance = cls.model_validate_json(json_data)
+ # Pydantic v1 equivalent: instance = cls.parse_raw(json_data)
+ logger.info(
+ "Successfully loaded and validated workflow model from JSON data."
+ )
+ return instance
+ except ValidationError: # Catch validation errors specifically
+ logger.error("Workflow model validation failed.", exc_info=True)
+ raise
+ except json.JSONDecodeError: # Catch JSON parsing errors specifically
+ logger.error("Invalid JSON format encountered.", exc_info=True)
+ raise
+ except Exception as e: # Catch any other unexpected errors
+ logger.error(
+ f"An unexpected error occurred during JSON loading: {e}", exc_info=True
+ )
+ raise
+
+ @classmethod
+ def load_json_file(cls: Type[T], file_name: Union[str, Path]) -> T:
+ """
+ Loads and validates workflow data from a JSON file.
+
+ Args:
+ file_path: The path to the JSON file.
+
+ Returns:
+ An instance of PwdWorkflow.
+
+ Raises:
+ FileNotFoundError: If the file is not found.
+ pydantic.ValidationError: If validation fails.
+ json.JSONDecodeError: If the file is not valid JSON.
+ IOError: If there are other file reading issues.
+ """
+ logger.info(f"Loading workflow model from JSON file: {file_name}")
+ try:
+ file_content = Path(file_name).read_text(encoding="utf-8")
+ # Delegate validation to the string loading method
+ return cls.load_json_str(file_content)
+ except FileNotFoundError:
+ logger.error(f"JSON file not found: {file_name}", exc_info=True)
+ raise
+ except IOError as e:
+ logger.error(f"Error reading JSON file {file_name}: {e}", exc_info=True)
+ raise