diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..dd96f92d --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: b68fb79aa115891308404ffb3376dfbf +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/adis_tools/src/adis_tools/__init__.py b/.nojekyll similarity index 100% rename from adis_tools/src/adis_tools/__init__.py rename to .nojekyll diff --git a/README.html b/README.html new file mode 100644 index 00000000..8d509dc2 --- /dev/null +++ b/README.html @@ -0,0 +1,661 @@ + + + + + + + + + + + Python Workflow Definition — Python Workflow Definition + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

Python Workflow Definition

+ +
+ +
+
+ + + + +
+ +
+

Python Workflow Definition#

+

Pipeline +codecov +Binder +DOI

+
+

Definition#

+

In the Python Workflow Definition (PWD) each node represents a Python function, with the edges defining the connection +between input and output of the different Python functions.

+

Published in: J. Janssen, J. George, J. Geiger, M. Bercx, X. Wang, C. Ertural, J. Schaarschmidt, A.M. Ganose, G. Pizzi, T. Hickel and J. Neugebauer. A python workflow definition for computational materials design. Digital Discovery, 2025

+
+
+

Format#

+

Each workflow consists of three files, a Python module which defines the individual Pythons, a JSON file which defines +the connections between the different Python functions and a conda environment file to define the software dependencies. +The files are not intended to be human readable, but rather interact as a machine readable exchange format between the +different workflow engines to enable interoperability.

+
+
+

Installation#

+

The Python Workflow Definition can either be installed via pypi or via conda. For the pypi installation use:

+
pip install python-workflow-definition
+
+
+

For the conda installation via the conda-forge community channel use:

+
conda install conda-forge::python-workflow-definition
+
+
+
+
+

Examples#

+
+

Simple Example#

+

As a first example we define two Python functions which add multiple inputs:

+
def get_sum(x, y):
+    return x + y
+
+
+def get_prod_and_div(x: float, y: float) -> dict:
+    return {"prod": x * y, "div": x / y}
+
+
+

These two Python functions are combined in the following example workflow:

+
def combined_workflow(x=1, y=2):
+    tmp_dict = get_prod_and_div(x=x, y=y)
+    return get_sum(x=tmp_dict["prod"], y=tmp_dict["div"])
+
+
+

For the workflow representation of these Python functions the Python functions are stored in the example_workflows/arithmetic/workflow.py +Python module. The connection of the Python functions are stored in the example_workflows/arithmetic/workflow.json +JSON file:

+
{
+  "nodes": [
+    {"id": 0, "type": "function", "value": "workflow.get_prod_and_div"},
+    {"id": 1, "type": "function", "value": "workflow.get_sum"},
+    {"id": 2, "type": "input", "value": 1, "name": "x"},
+    {"id": 3, "type": "input", "value": 2, "name": "y"},
+    {"id": 4, "type": "output", "name": "result"}
+  ],
+  "edges": [
+    {"target": 0, "targetPort": "x", "source": 2, "sourcePort": null},
+    {"target": 0, "targetPort": "y", "source": 3, "sourcePort": null},
+    {"target": 1, "targetPort": "x", "source": 0, "sourcePort": "prod"},
+    {"target": 1, "targetPort": "y", "source": 0, "sourcePort": "div"},
+    {"target": 4, "targetPort": null, "source": 1, "sourcePort": null}
+  ]
+}
+
+
+

The abbreviations in the definition of the edges are:

+
    +
  • target - target node

  • +
  • targetPort - target port - for a node with multiple input parameters the target port specifies which input parameter to use.

  • +
  • source - source node

  • +
  • sourcePort - source port - for a node with multiple output parameters the source port specifies which output parameter to use.

  • +
+

As the workflow does not require any additional resources, as it is only using built-in functionality of the Python standard +library.

+

The corresponding Jupyter notebooks demonstrate this functionality:

+
+ + + + + + + + + + + + + + + + + + + +

Example

Explanation

example_workflows/arithmetic/aiida.ipynb

Define Workflow with aiida and execute it with jobflow and pyiron_base.

example_workflows/arithmetic/jobflow.ipynb

Define Workflow with jobflow and execute it with aiida and pyiron_base.

example_workflows/arithmetic/pyiron_base.ipynb

Define Workflow with pyiron_base and execute it with aiida and jobflow.

example_workflows/arithmetic/universal_workflow.ipynb

Execute workflow defined in the Python Workflow Definition with aiida, executorlib, jobflow, pyiron_base and pure Python.

+
+
+
+

Quantum Espresso Workflow#

+

The second workflow example is the calculation of an energy volume curve with Quantum Espresso. In the first step the +initial structure is relaxed, afterward it is strained and the total energy is calculated.

+ +
+ + + + + + + + + + + + + + + + + + + +

Example

Explanation

example_workflows/quantum_espresso/aiida.ipynb

Define Workflow with aiida and execute it with jobflow and pyiron_base.

example_workflows/quantum_espresso/jobflow.ipynb

Define Workflow with jobflow and execute it with aiida and pyiron_base.

example_workflows/quantum_espresso/pyiron_base.ipynb

Define Workflow with pyiron_base and execute it with aiida and jobflow.

example_workflows/quantum_espresso/universal_workflow.ipynb

Execute workflow defined in the Python Workflow Definition with aiida, executorlib, jobflow, pyiron_base and pure Python.

+
+
+
+

NFDI4Ing Scientific Workflow Requirements#

+

To demonstrate the compatibility of the Python Workflow Definition to file based workflows, the workflow benchmark developed as part of NFDI4Ing +is implemented for all three simulation codes based on a shared workflow definition.

+ +

Additional source files provided with the workflow benchmark:

+ +
+ + + + + + + + + + + + + + + + + + + +

Example

Explanation

example_workflows/nfdi/aiida.ipynb

Define Workflow with aiida and execute it with jobflow and pyiron_base.

example_workflows/nfdi/jobflow.ipynb

Define Workflow with jobflow and execute it with aiida and pyiron_base.

example_workflows/nfdi/pyiron_base.ipynb

Define Workflow with pyiron_base and execute it with aiida and jobflow.

example_workflows/nfdi/universal_workflow.ipynb

Execute workflow defined in the Python Workflow Definition with aiida, executorlib, jobflow, pyiron_base and pure Python.

+
+
+
+
+
+
+ + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/_downloads/074c18a527b229dcf1aceecb3ceb2862/workflow.json b/_downloads/074c18a527b229dcf1aceecb3ceb2862/workflow.json new file mode 100644 index 00000000..e653d594 --- /dev/null +++ b/_downloads/074c18a527b229dcf1aceecb3ceb2862/workflow.json @@ -0,0 +1,100 @@ +{ + "version": "0.1.0", + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.get_bulk_structure"}, + {"id": 1, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 2, "type": "function", "value": "workflow.generate_structures"}, + {"id": 3, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 4, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 5, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 6, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 7, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 8, "type": "function", "value": "workflow.plot_energy_volume_curve"}, + {"id": 9, "type": "input", "value": "Al", "name": "element"}, + {"id": 10, "type": "input", "value": 4.05, "name": "a"}, + {"id": 11, "type": "input", "value": true, "name": "cubic"}, + {"id": 12, "type": "input", "value": "mini", "name": "working_directory_0"}, + {"id": 13, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 14, "type": "input", "value": {"Al": "Al.pbe-n-kjpaw_psl.1.0.0.UPF"}, "name": "pseudopotentials"}, + {"id": 15, "type": "input", "value": [3, 3, 3], "name": "kpts"}, + {"id": 16, "type": "input", "value": "vc-relax", "name": "calculation_0"}, + {"id": 17, "type": "input", "value": 0.02, "name": "smearing"}, + {"id": 18, "type": "input", "value": [0.9, 0.95, 1.0, 1.05, 1.1], "name": "strain_lst"}, + {"id": 19, "type": "input", "value": "strain_0", "name": "working_directory_1"}, + {"id": 20, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 21, "type": "input", "value": "scf", "name": "calculation_1"}, + {"id": 22, "type": "input", "value": "strain_1", "name": "working_directory_2"}, + {"id": 23, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 24, "type": "input", "value": "strain_2", "name": "working_directory_3"}, + {"id": 25, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 26, "type": "input", "value": "strain_3", "name": "working_directory_4"}, + {"id": 27, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 28, "type": "input", "value": "strain_4", "name": "working_directory_5"}, + {"id": 29, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 30, "type": "function", "value": "python_workflow_definition.shared.get_list"}, + {"id": 31, "type": "function", "value": "python_workflow_definition.shared.get_list"}, + {"id": 32, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "element", "source": 9, "sourcePort": null}, + {"target": 0, "targetPort": "a", "source": 10, "sourcePort": null}, + {"target": 0, "targetPort": "cubic", "source": 11, "sourcePort": null}, + {"target": 1, "targetPort": "working_directory", "source": 12, "sourcePort": null}, + {"target": 13, "targetPort": "structure", "source": 0, "sourcePort": null}, + {"target": 13, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 13, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 13, "targetPort": "calculation", "source": 16, "sourcePort": null}, + {"target": 13, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 1, "targetPort": "input_dict", "source": 13, "sourcePort": null}, + {"target": 2, "targetPort": "structure", "source": 1, "sourcePort": "structure"}, + {"target": 2, "targetPort": "strain_lst", "source": 18, "sourcePort": null}, + {"target": 3, "targetPort": "working_directory", "source": 19, "sourcePort": null}, + {"target": 20, "targetPort": "structure", "source": 2, "sourcePort": "s_0"}, + {"target": 20, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 20, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 20, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 20, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 3, "targetPort": "input_dict", "source": 20, "sourcePort": null}, + {"target": 4, "targetPort": "working_directory", "source": 22, "sourcePort": null}, + {"target": 23, "targetPort": "structure", "source": 2, "sourcePort": "s_1"}, + {"target": 23, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 23, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 23, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 23, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 4, "targetPort": "input_dict", "source": 23, "sourcePort": null}, + {"target": 5, "targetPort": "working_directory", "source": 24, "sourcePort": null}, + {"target": 25, "targetPort": "structure", "source": 2, "sourcePort": "s_2"}, + {"target": 25, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 25, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 25, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 25, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 5, "targetPort": "input_dict", "source": 25, "sourcePort": null}, + {"target": 6, "targetPort": "working_directory", "source": 26, "sourcePort": null}, + {"target": 27, "targetPort": "structure", "source": 2, "sourcePort": "s_3"}, + {"target": 27, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 27, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 27, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 27, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 6, "targetPort": "input_dict", "source": 27, "sourcePort": null}, + {"target": 7, "targetPort": "working_directory", "source": 28, "sourcePort": null}, + {"target": 29, "targetPort": "structure", "source": 2, "sourcePort": "s_4"}, + {"target": 29, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 29, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 29, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 29, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 7, "targetPort": "input_dict", "source": 29, "sourcePort": null}, + {"target": 30, "targetPort": "0", "source": 3, "sourcePort": "volume"}, + {"target": 30, "targetPort": "1", "source": 4, "sourcePort": "volume"}, + {"target": 30, "targetPort": "2", "source": 5, "sourcePort": "volume"}, + {"target": 30, "targetPort": "3", "source": 6, "sourcePort": "volume"}, + {"target": 30, "targetPort": "4", "source": 7, "sourcePort": "volume"}, + {"target": 8, "targetPort": "volume_lst", "source": 30, "sourcePort": null}, + {"target": 31, "targetPort": "0", "source": 3, "sourcePort": "energy"}, + {"target": 31, "targetPort": "1", "source": 4, "sourcePort": "energy"}, + {"target": 31, "targetPort": "2", "source": 5, "sourcePort": "energy"}, + {"target": 31, "targetPort": "3", "source": 6, "sourcePort": "energy"}, + {"target": 31, "targetPort": "4", "source": 7, "sourcePort": "energy"}, + {"target": 8, "targetPort": "energy_lst", "source": 31, "sourcePort": null}, + {"target": 32, "targetPort": null, "source": 8, "sourcePort": null} + ] +} \ No newline at end of file diff --git a/quantum_espresso_workflow.py b/_downloads/0d09bdc32538ec374fdfcc8b206a84a1/workflow.py similarity index 63% rename from quantum_espresso_workflow.py rename to _downloads/0d09bdc32538ec374fdfcc8b206a84a1/workflow.py index f7c7359c..dcb6a1d4 100644 --- a/quantum_espresso_workflow.py +++ b/_downloads/0d09bdc32538ec374fdfcc8b206a84a1/workflow.py @@ -1,11 +1,13 @@ +import json import os import subprocess -from ase.atoms import Atoms from ase.build import bulk from ase.io import write -from adis_tools.parsers import parse_pw +from qe_xml_parser.parsers import parse_pw import matplotlib.pyplot as plt +from optimade.adapters.structures.ase import from_ase_atoms, get_ase_atoms +from optimade.models.structures import StructureResourceAttributes, StructureResource def write_input(input_dict, working_directory="."): @@ -13,7 +15,7 @@ def write_input(input_dict, working_directory="."): os.makedirs(working_directory, exist_ok=True) write( filename=filename, - images=Atoms(**input_dict["structure"]), + images=json_to_ase(atoms_json=input_dict["structure"]), Crystal=True, kpts=input_dict["kpts"], input_data={ @@ -30,7 +32,7 @@ def write_input(input_dict, working_directory="."): def collect_output(working_directory="."): output = parse_pw(os.path.join(working_directory, "pwscf.xml")) return { - "structure": output["ase_structure"].todict(), + "structure": ase_to_json(atoms=output["ase_structure"]), "energy": output["energy"], "volume": output["ase_structure"].get_volume(), } @@ -52,12 +54,12 @@ def calculate_qe(working_directory, input_dict): def generate_structures(structure, strain_lst): structure_lst = [] for strain in strain_lst: - structure_strain = Atoms(**structure) + structure_strain = json_to_ase(atoms_json=structure) structure_strain.set_cell( structure_strain.cell * strain ** (1 / 3), scale_atoms=True ) structure_lst.append(structure_strain) - return {str(i): s.todict() for i, s in enumerate(structure_lst)} + return {f"s_{i}": ase_to_json(atoms=s) for i, s in enumerate(structure_lst)} def plot_energy_volume_curve(volume_lst, energy_lst): @@ -67,9 +69,20 @@ def plot_energy_volume_curve(volume_lst, energy_lst): plt.savefig("evcurve.png") -def get_bulk_structure(name, a, cubic): - return bulk( - name=name, +def get_bulk_structure(element, a, cubic): + ase_atoms = bulk( + name=element, a=a, cubic=cubic, - ).todict() + ) + return ase_to_json(atoms=ase_atoms) + + +def ase_to_json(atoms): + struct_opt = from_ase_atoms(atoms=atoms) + return json.dumps(struct_opt.model_dump(mode="json")) + + +def json_to_ase(atoms_json): + structure_restore = StructureResourceAttributes.model_validate_json(atoms_json) + return get_ase_atoms(optimade_structure=StructureResource(id="ase", attributes=structure_restore)) diff --git a/_downloads/2b431daa5d8516cd4586feb00ce63187/preprocessing.yaml b/_downloads/2b431daa5d8516cd4586feb00ce63187/preprocessing.yaml new file mode 100644 index 00000000..d9a2660e --- /dev/null +++ b/_downloads/2b431daa5d8516cd4586feb00ce63187/preprocessing.yaml @@ -0,0 +1,5 @@ +channels: + - conda-forge +dependencies: + - gmsh=4.6.0=hd134328_0 + - meshio=5.0.5=pyhd8ed1ab_0 diff --git a/_downloads/331c5bde05983f9e76ce2cf65cfde073/paper.tex b/_downloads/331c5bde05983f9e76ce2cf65cfde073/paper.tex new file mode 100644 index 00000000..e8b0cfe3 --- /dev/null +++ b/_downloads/331c5bde05983f9e76ce2cf65cfde073/paper.tex @@ -0,0 +1,22 @@ +\documentclass[12pt]{article} +\usepackage{graphicx} +\usepackage{pgfplots} + +\input{macros} + +\title{An exemplary workflow} + +\begin{document} +\maketitle + +\begin{figure}[h] + \centering% + \begin{tikzpicture} + \begin{axis}[] + \addplot[color=red,smooth,thick] table[col sep=comma,header=true,x index=2,y index=0] {\plotDataPath}; + \end{axis} + \end{tikzpicture} + \caption{Solution of the poisson equation over the line $L = \{(x, y)\in\Omega = {(0, \domainSize{})}^2 | x = y\}$ using \numDofs{} DoFs in the finite element model.}% +\end{figure} + +\end{document} diff --git a/_downloads/4437283df7255c07a78686ad14ce4902/postprocessing.py b/_downloads/4437283df7255c07a78686ad14ce4902/postprocessing.py new file mode 100644 index 00000000..0ed43af1 --- /dev/null +++ b/_downloads/4437283df7255c07a78686ad14ce4902/postprocessing.py @@ -0,0 +1,54 @@ +""" +$ pvbatch postprocessing.py -h +""" + +import sys +import argparse +from paraview.simple import ( + PlotOverLine, + PVDReader, + SaveData, + UpdatePipeline, +) + + +def main(args): + pvd_file = args.pvd + source = PVDReader(registrationName="poisson.pvd", FileName=[pvd_file]) + source.PointArrays = [args.field] + UpdatePipeline() + + (xmin, xmax, ymin, ymax, zmin, zmax) = source.GetDataInformation().GetBounds() + # init the 'Line' selected for 'Source' + plotOverLine1 = PlotOverLine( + registrationName="PlotOverLine1", Input=source, Source="Line" + ) + plotOverLine1.Source.Point1 = [xmin, ymin, zmin] + plotOverLine1.Source.Point2 = [xmax, ymax, zmax] + UpdatePipeline() + + # save data + SaveData( + args.csv, + proxy=plotOverLine1, + ChooseArraysToWrite=1, + PointDataArrays=["arc_length", args.field, "vtkValidPointMask"], + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + prog=f"pvbatch {__file__}", + description="Plots the solution over a line and writes the data to file.", + usage="%(prog)s [options] pvd csv", + ) + parser.add_argument("pvd", type=str, help="The source pvd filepath.") + parser.add_argument("csv", type=str, help="The target csv filepath.") + parser.add_argument( + "--field", + type=str, + default="u", + help="Field variable to plot (default: u)", + ) + args = parser.parse_args(sys.argv[1:]) + main(args) diff --git a/_downloads/4fce43a14fb0221048f87bf1c5f7507a/workflow.json b/_downloads/4fce43a14fb0221048f87bf1c5f7507a/workflow.json new file mode 100644 index 00000000..b9135dce --- /dev/null +++ b/_downloads/4fce43a14fb0221048f87bf1c5f7507a/workflow.json @@ -0,0 +1,33 @@ +{ + "version": "0.1.0", + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.generate_mesh"}, + {"id": 1, "type": "function", "value": "workflow.convert_to_xdmf"}, + {"id": 2, "type": "function", "value": "workflow.poisson"}, + {"id": 3, "type": "function", "value": "workflow.plot_over_line"}, + {"id": 4, "type": "function", "value": "workflow.substitute_macros"}, + {"id": 5, "type": "function", "value": "workflow.compile_paper"}, + {"id": 6, "type": "input", "value": 2.0, "name": "domain_size"}, + {"id": 7, "type": "input", "value": "source", "name": "source_directory"}, + {"id": 8, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "domain_size", "source": 6, "sourcePort": null}, + {"target": 0, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 1, "targetPort": "gmsh_output_file", "source": 0, "sourcePort": null}, + {"target": 2, "targetPort": "meshio_output_xdmf", "source": 1, "sourcePort": "xdmf_file"}, + {"target": 2, "targetPort": "meshio_output_h5", "source": 1, "sourcePort": "h5_file"}, + {"target": 2, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 3, "targetPort": "poisson_output_pvd_file", "source": 2, "sourcePort": "pvd_file"}, + {"target": 3, "targetPort": "poisson_output_vtu_file", "source": 2, "sourcePort": "vtu_file"}, + {"target": 3, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 4, "targetPort": "pvbatch_output_file", "source": 3, "sourcePort": null}, + {"target": 4, "targetPort": "ndofs", "source": 2, "sourcePort": "numdofs"}, + {"target": 4, "targetPort": "domain_size", "source": 6, "sourcePort": null}, + {"target": 4, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 5, "targetPort": "macros_tex", "source": 4, "sourcePort": null}, + {"target": 5, "targetPort": "plot_file", "source": 3, "sourcePort": null}, + {"target": 5, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 8, "targetPort": null, "source": 5, "sourcePort": null} + ] +} \ No newline at end of file diff --git a/_downloads/56e68093fdf308cb11075a58fe57fb60/poisson.py b/_downloads/56e68093fdf308cb11075a58fe57fb60/poisson.py new file mode 100644 index 00000000..d66939df --- /dev/null +++ b/_downloads/56e68093fdf308cb11075a58fe57fb60/poisson.py @@ -0,0 +1,108 @@ +""" +solution of the poisson equation on the unit square +""" + +from argparse import ArgumentParser +import dolfin as df + + +def boundary_expression(): + """Defines the function to be used for the boundary conditions""" + return "1.0 + x[0] * x[0] + 2.0 * x[1] * x[1]" + + +def solve_poisson( + meshfile: str, degree: int, bc_expression: str = boundary_expression() +): + """solves the poisson equation + + Parameters + ---------- + meshfile : str + FilePath to the mesh in xdmf format. + degree : int + Degree of the finite element space. + + Returns + ------- + solution : df.Function + """ + mesh = df.Mesh() + with df.XDMFFile(meshfile) as instream: + instream.read(mesh) + func_space = df.FunctionSpace(mesh, "CG", degree) + boundary_data = df.Expression(bc_expression, degree=2) + + def boundary(_, on_boundary): + return on_boundary + + boundary_conditions = df.DirichletBC(func_space, boundary_data, boundary) + trial_function = df.TrialFunction(func_space) + test_function = df.TestFunction(func_space) + source = df.Constant(-6.0) + lhs = df.dot(df.grad(trial_function), df.grad(test_function)) * df.dx + rhs = source * test_function * df.dx + + solution = df.Function(func_space) + df.solve(lhs == rhs, solution, boundary_conditions) + return solution + + +def solve_and_write_output( + mesh: str, degree: int, outputfile: str, numdofs=None, return_dofs=False +): + """solves the poisson equation and writes the solution + and the number of degrees of freedom to the given file + + Parameters + ---------- + meshfile : str + FilePath to the mesh in xdmf format. + degree : int + Degree of the finite element space. + outputfile : str + FilePath to the output file into which the solution is written. + numdofs : optional, str + FilePath to which the number of degrees of freedom is written. + return_dofs : optional, bool + If True, return number of degrees of freedom. + """ + discrete_solution = solve_poisson(mesh, degree) + discrete_solution.rename("u", discrete_solution.name()) + resultFile = df.File(outputfile) + resultFile << discrete_solution + + dofs = discrete_solution.function_space().dim() + print(f"Number of dofs used: {dofs}") + + if numdofs is not None: + with open(numdofs, "w") as handle: + handle.write("{}\n".format(dofs)) + if return_dofs: + return dofs + + +if __name__ == "__main__": + PARSER = ArgumentParser(description="run script for the poisson problem") + PARSER.add_argument("-m", "--mesh", required=True, help="mesh file to be used") + PARSER.add_argument( + "-d", "--degree", required=True, help="polynomial order to be used" + ) + PARSER.add_argument( + "-o", + "--outputfile", + required=True, + help="file name for the output to be written", + ) + PARSER.add_argument( + "-n", + "--num-dofs", + required=False, + default=None, + help="file name for the number of DoFs to be written", + ) + ARGS = vars(PARSER.parse_args()) + + solve_and_write_output( + ARGS["mesh"], int(ARGS["degree"]), ARGS["outputfile"], ARGS["num_dofs"] + ) diff --git a/_downloads/7849111caddeecc1f84b6e10d30bdd5e/workflow.py b/_downloads/7849111caddeecc1f84b6e10d30bdd5e/workflow.py new file mode 100644 index 00000000..03b16a7a --- /dev/null +++ b/_downloads/7849111caddeecc1f84b6e10d30bdd5e/workflow.py @@ -0,0 +1,135 @@ +import os +from conda_subprocess import check_output +import shutil + + +def generate_mesh(domain_size: float, source_directory: str) -> str: + stage_name = "preprocessing" + gmsh_output_file_name = "square.msh" + source_file_name ="unit_square.geo" + os.makedirs(stage_name, exist_ok=True) + _copy_file_from_source(stage_name=stage_name, source_file_name=source_file_name, source_directory=source_directory) + _ = check_output( + [ + "gmsh", "-2", "-setnumber", "domain_size", str(domain_size), + source_file_name, "-o", gmsh_output_file_name + ], + prefix_name=stage_name, + cwd=stage_name, + universal_newlines=True, + ).split("\n") + return os.path.abspath(os.path.join(stage_name, gmsh_output_file_name)) + + +def convert_to_xdmf(gmsh_output_file : str) -> dict: + stage_name = "preprocessing" + meshio_output_file_name = "square.xdmf" + os.makedirs(stage_name, exist_ok=True) + _copy_file(stage_name=stage_name, source_file=gmsh_output_file) + _ = check_output( + ["meshio", "convert", os.path.basename(gmsh_output_file), meshio_output_file_name], + prefix_name=stage_name, + cwd=stage_name, + universal_newlines=True, + ).split("\n") + return { + "xdmf_file": os.path.abspath(os.path.join(stage_name, meshio_output_file_name)), + "h5_file": os.path.join(os.path.abspath(stage_name), "square.h5"), + } + + +def poisson(meshio_output_xdmf: str, meshio_output_h5: str, source_directory: str) -> dict: + stage_name = "processing" + poisson_output_pvd_file_name = "poisson.pvd" + poisson_output_numdofs_file_name = "numdofs.txt" + source_file_name = "poisson.py" + os.makedirs(stage_name, exist_ok=True) + _copy_file_from_source(stage_name=stage_name, source_file_name=source_file_name, source_directory=source_directory) + _copy_file(stage_name=stage_name, source_file=meshio_output_xdmf) + _copy_file(stage_name=stage_name, source_file=meshio_output_h5) + _ = check_output( + [ + "python", "poisson.py", "--mesh", os.path.basename(meshio_output_xdmf), "--degree", "2", + "--outputfile", poisson_output_pvd_file_name, "--num-dofs", poisson_output_numdofs_file_name + ], + prefix_name=stage_name, + cwd=stage_name, + universal_newlines=True, + ).split("\n") + return { + "numdofs": _poisson_collect_output(numdofs_file=os.path.join(stage_name, poisson_output_numdofs_file_name)), + "pvd_file": os.path.abspath(os.path.join(stage_name, poisson_output_pvd_file_name)), + "vtu_file": os.path.abspath(os.path.join(stage_name, "poisson000000.vtu")), + } + + +def plot_over_line(poisson_output_pvd_file: str, poisson_output_vtu_file: str, source_directory: str) -> str: + stage_name = "postprocessing" + pvbatch_output_file_name = "plotoverline.csv" + source_file_name = "postprocessing.py" + os.makedirs(stage_name, exist_ok=True) + _copy_file_from_source(stage_name=stage_name, source_file_name=source_file_name, source_directory=source_directory) + _copy_file(stage_name=stage_name, source_file=poisson_output_pvd_file) + _copy_file(stage_name=stage_name, source_file=poisson_output_vtu_file) + _ = check_output( + ["pvbatch", source_file_name, os.path.basename(poisson_output_pvd_file), pvbatch_output_file_name], + prefix_name=stage_name, + cwd=stage_name, + universal_newlines=True, + ).split("\n") + return os.path.abspath(os.path.join("postprocessing", pvbatch_output_file_name)) + + +def substitute_macros(pvbatch_output_file: str, ndofs: int, domain_size: float, source_directory: str) -> str: + stage_name = "postprocessing" + source_file_name = "prepare_paper_macros.py" + template_file_name = "macros.tex.template" + macros_output_file_name = "macros.tex" + os.makedirs(stage_name, exist_ok=True) + _copy_file_from_source(stage_name=stage_name, source_file_name=source_file_name, source_directory=source_directory) + _copy_file_from_source(stage_name=stage_name, source_file_name=template_file_name, source_directory=source_directory) + _copy_file(stage_name=stage_name, source_file=pvbatch_output_file) + _ = check_output( + [ + "python", "prepare_paper_macros.py", "--macro-template-file", template_file_name, + "--plot-data-path", os.path.basename(pvbatch_output_file), "--domain-size", str(domain_size), + "--num-dofs", str(ndofs), "--output-macro-file", macros_output_file_name, + ], + prefix_name=stage_name, + cwd=stage_name, + universal_newlines=True, + ).split("\n") + return os.path.abspath(os.path.join(stage_name, macros_output_file_name)) + + +def compile_paper(macros_tex: str, plot_file: str, source_directory: str) -> str: + stage_name = "postprocessing" + paper_output = "paper.pdf" + source_file_name = "paper.tex" + os.makedirs(stage_name, exist_ok=True) + _copy_file_from_source(stage_name=stage_name, source_file_name=source_file_name, source_directory=source_directory) + _copy_file(stage_name=stage_name, source_file=macros_tex) + _copy_file(stage_name=stage_name, source_file=plot_file) + _ = check_output( + ["tectonic", source_file_name], + prefix_name=stage_name, + universal_newlines=True, + cwd=stage_name, + ).split("\n") + return os.path.abspath(os.path.join(stage_name, paper_output)) + + +def _poisson_collect_output(numdofs_file: str) -> int: + with open(os.path.join(numdofs_file), "r") as f: + return int(f.read()) + + +def _copy_file(stage_name: str, source_file: str): + input_file = os.path.join(os.path.abspath(stage_name), os.path.basename(source_file)) + if input_file != source_file: + shutil.copyfile(source_file, input_file) + + +def _copy_file_from_source(stage_name: str, source_file_name: str, source_directory: str): + source_file = os.path.join(source_directory, source_file_name) + shutil.copyfile(source_file, os.path.join(stage_name, source_file_name)) diff --git a/_downloads/b2eedcb0ddeefda5c51d1584979258ad/processing.yaml b/_downloads/b2eedcb0ddeefda5c51d1584979258ad/processing.yaml new file mode 100644 index 00000000..367874a7 --- /dev/null +++ b/_downloads/b2eedcb0ddeefda5c51d1584979258ad/processing.yaml @@ -0,0 +1,5 @@ +channels: + - conda-forge +dependencies: + - fenics=2019.1.0=py39hf3d152e_26 + - sympy=1.13.3 \ No newline at end of file diff --git a/_downloads/b85b54c725e4538522e7eabb629474c5/workflow.json b/_downloads/b85b54c725e4538522e7eabb629474c5/workflow.json new file mode 100644 index 00000000..9ffb9213 --- /dev/null +++ b/_downloads/b85b54c725e4538522e7eabb629474c5/workflow.json @@ -0,0 +1,19 @@ +{ + "version": "0.1.0", + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.get_prod_and_div"}, + {"id": 1, "type": "function", "value": "workflow.get_sum"}, + {"id": 2, "type": "function", "value": "workflow.get_square"}, + {"id": 3, "type": "input", "value": 1, "name": "x"}, + {"id": 4, "type": "input", "value": 2, "name": "y"}, + {"id": 5, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "x", "source": 3, "sourcePort": null}, + {"target": 0, "targetPort": "y", "source": 4, "sourcePort": null}, + {"target": 1, "targetPort": "x", "source": 0, "sourcePort": "prod"}, + {"target": 1, "targetPort": "y", "source": 0, "sourcePort": "div"}, + {"target": 2, "targetPort": "x", "source": 1, "sourcePort": null}, + {"target": 5, "targetPort": null, "source": 2, "sourcePort": null} + ] +} diff --git a/_downloads/c16ba0969d10490ef2a46641272562b4/prepare_paper_macros.py b/_downloads/c16ba0969d10490ef2a46641272562b4/prepare_paper_macros.py new file mode 100644 index 00000000..663407d5 --- /dev/null +++ b/_downloads/c16ba0969d10490ef2a46641272562b4/prepare_paper_macros.py @@ -0,0 +1,43 @@ +""" +places the correct values into the paper macros template file +""" + +import string +import argparse + +PARSER = argparse.ArgumentParser( + description="Place computed values in the paper macros template file" +) +PARSER.add_argument( + "-f", "--macro-template-file", + required=False, default="macros.tex.template", + help="The macro template file" +) +PARSER.add_argument( + "-o", "--output-macro-file", + required=False, default="macros.tex", + help="The macro file to be written" +) +PARSER.add_argument( + "-s", "--domain-size", + required=True, help="The computed domain size", +) +PARSER.add_argument( + "-n", "--num-dofs", + required=True, help="The computed number of dofs", +) +PARSER.add_argument( + "-p", "--plot-data-path", + required=True, help="The path to the data for the plot over line" +) +ARGS = vars(PARSER.parse_args()) + + +with open(ARGS["output_macro_file"], "w") as out_file: + with open(ARGS["macro_template_file"], "r") as in_file: + raw = string.Template(in_file.read()) + out_file.write(raw.substitute({ + "DOMAINSIZE": ARGS["domain_size"], + "NUMDOFS": ARGS["num_dofs"], + "PLOTDATAPATH": ARGS["plot_data_path"] + })) diff --git a/_downloads/cdcd3d8b8608feb76c8d22665a4ae8ae/unit_square.geo b/_downloads/cdcd3d8b8608feb76c8d22665a4ae8ae/unit_square.geo new file mode 100644 index 00000000..b8f55b7a --- /dev/null +++ b/_downloads/cdcd3d8b8608feb76c8d22665a4ae8ae/unit_square.geo @@ -0,0 +1,9 @@ +DefineConstant[ domain_size = 1.0 ]; +DefineConstant[ mesh_size = domain_size/4.0 ]; + +SetFactory("OpenCASCADE"); +Rectangle(1) = {0, 0, 0, domain_size, domain_size, 0}; +Physical Surface(1) = {1}; + +Printf("Used domain size: %f", domain_size); +Printf("Used mesh size: %f", mesh_size); diff --git a/_downloads/cdf93d425e6df529ed97c8b502821274/postprocessing.yaml b/_downloads/cdf93d425e6df529ed97c8b502821274/postprocessing.yaml new file mode 100644 index 00000000..acd99eda --- /dev/null +++ b/_downloads/cdf93d425e6df529ed97c8b502821274/postprocessing.yaml @@ -0,0 +1,5 @@ +channels: + - conda-forge +dependencies: + - paraview=5.9.1=hfc1cbd4_3_egl + - tectonic=0.8.0=ha1fef3e_1 diff --git a/_downloads/d4b6ab1210e71ac0cfa700589f3eda0c/workflow.py b/_downloads/d4b6ab1210e71ac0cfa700589f3eda0c/workflow.py new file mode 100644 index 00000000..1a2e4c3f --- /dev/null +++ b/_downloads/d4b6ab1210e71ac0cfa700589f3eda0c/workflow.py @@ -0,0 +1,10 @@ +def get_prod_and_div(x, y): + return {"prod": x * y, "div": x / y} + + +def get_sum(x, y): + return x + y + + +def get_square(x): + return x ** 2 diff --git a/_downloads/d87a46985e2e587030c68d49ffa4528b/environment.yml b/_downloads/d87a46985e2e587030c68d49ffa4528b/environment.yml new file mode 100644 index 00000000..7ebaa8fe --- /dev/null +++ b/_downloads/d87a46985e2e587030c68d49ffa4528b/environment.yml @@ -0,0 +1,9 @@ +channels: +- conda-forge +dependencies: +- ase=3.29.0 +- matplotlib=3.11.1 +- xmlschema=4.3.2 +- optimade=1.5.0 +- qe=7.5 +- qe-tools=2.0.0 diff --git a/_downloads/f2b741fba3a65a1b1eecdff88867e31c/macros.tex.template b/_downloads/f2b741fba3a65a1b1eecdff88867e31c/macros.tex.template new file mode 100644 index 00000000..0c120029 --- /dev/null +++ b/_downloads/f2b741fba3a65a1b1eecdff88867e31c/macros.tex.template @@ -0,0 +1,3 @@ +\newcommand{\domainSize}{${DOMAINSIZE}} +\newcommand{\numDofs}{${NUMDOFS}} +\newcommand{\plotDataPath}{${PLOTDATAPATH}} diff --git a/_images/00ce3c223068484bcf4dba9a7a1500c5d8596f449dda925e4b421eda3e431098.png b/_images/00ce3c223068484bcf4dba9a7a1500c5d8596f449dda925e4b421eda3e431098.png new file mode 100644 index 00000000..29aaa734 Binary files /dev/null and b/_images/00ce3c223068484bcf4dba9a7a1500c5d8596f449dda925e4b421eda3e431098.png differ diff --git a/_images/04cec04e2d5df9d8f8bedbbd24400ff0f7fb4b622345c65caa2aa64f56777b33.svg b/_images/04cec04e2d5df9d8f8bedbbd24400ff0f7fb4b622345c65caa2aa64f56777b33.svg new file mode 100644 index 00000000..d5d25232 --- /dev/null +++ b/_images/04cec04e2d5df9d8f8bedbbd24400ff0f7fb4b622345c65caa2aa64f56777b33.svg @@ -0,0 +1,233 @@ + + + + + +create_function_job_724cfd00ffeb70f8b463a938195e0447 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38aa0> + + + +macros_tex_b52804e5fa845b3657fa99b738e02cf7 + +macros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38830> + + + +macros_tex_b52804e5fa845b3657fa99b738e02cf7->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + +pvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38500> + + + +pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + +poisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07a10> + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +plot_file_554a54a50a86b23416c0daf6ab0938df + +plot_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38500> + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +plot_file_554a54a50a86b23416c0daf6ab0938df->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1 + +meshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07da0> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + +poisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf381a0> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +ndofs_e826761b60042b070e0c0a24b472ee26 + +ndofs=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38590> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +ndofs_e826761b60042b070e0c0a24b472ee26->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + +gmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07b00> + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe + +meshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07d70> + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20 + +domain_size=2.0 + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696 + +source_directory=/home/jovyan/example_workflows/nfdi/source + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + + + + + \ No newline at end of file diff --git a/_images/05ad2bdf84da2c44b7193062b764cf41b32c0c6abf90a3c6cdbebbd4977ca4a5.svg b/_images/05ad2bdf84da2c44b7193062b764cf41b32c0c6abf90a3c6cdbebbd4977ca4a5.svg new file mode 100644 index 00000000..1a5b94c0 --- /dev/null +++ b/_images/05ad2bdf84da2c44b7193062b764cf41b32c0c6abf90a3c6cdbebbd4977ca4a5.svg @@ -0,0 +1,622 @@ + + + + + +0 + +workflow.get_bulk_structure + + + +13 + +python_workflow_definition.shared.get_dict + + + +0->13 + + +structure + + + +1 + +workflow.calculate_qe + + + +13->1 + + +input_dict + + + +2 + +workflow.generate_structures + + + +1->2 + + +structure=result[structure] + + + +20 + +python_workflow_definition.shared.get_dict + + + +2->20 + + +structure=result[s_0] + + + +23 + +python_workflow_definition.shared.get_dict + + + +2->23 + + +structure=result[s_1] + + + +25 + +python_workflow_definition.shared.get_dict + + + +2->25 + + +structure=result[s_2] + + + +27 + +python_workflow_definition.shared.get_dict + + + +2->27 + + +structure=result[s_3] + + + +29 + +python_workflow_definition.shared.get_dict + + + +2->29 + + +structure=result[s_4] + + + +3 + +workflow.calculate_qe + + + +20->3 + + +input_dict + + + +4 + +workflow.calculate_qe + + + +23->4 + + +input_dict + + + +5 + +workflow.calculate_qe + + + +25->5 + + +input_dict + + + +6 + +workflow.calculate_qe + + + +27->6 + + +input_dict + + + +7 + +workflow.calculate_qe + + + +29->7 + + +input_dict + + + +30 + +python_workflow_definition.shared.get_list + + + +3->30 + + +0=result[volume] + + + +31 + +python_workflow_definition.shared.get_list + + + +3->31 + + +0=result[energy] + + + +8 + +workflow.plot_energy_volume_curve + + + +30->8 + + +volume_lst + + + +31->8 + + +energy_lst + + + +4->30 + + +1=result[volume] + + + +4->31 + + +1=result[energy] + + + +5->30 + + +2=result[volume] + + + +5->31 + + +2=result[energy] + + + +6->30 + + +3=result[volume] + + + +6->31 + + +3=result[energy] + + + +7->30 + + +4=result[volume] + + + +7->31 + + +4=result[energy] + + + +32 + +result + + + +8->32 + + + + + +9 + +Al + + + +9->0 + + +element + + + +10 + +4.05 + + + +10->0 + + +a + + + +11 + +True + + + +11->0 + + +cubic + + + +12 + +mini + + + +12->1 + + +working_directory + + + +14 + +{'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'} + + + +14->13 + + +pseudopotentials + + + +14->20 + + +pseudopotentials + + + +14->23 + + +pseudopotentials + + + +14->25 + + +pseudopotentials + + + +14->27 + + +pseudopotentials + + + +14->29 + + +pseudopotentials + + + +15 + +[3, 3, 3] + + + +15->13 + + +kpts + + + +15->20 + + +kpts + + + +15->23 + + +kpts + + + +15->25 + + +kpts + + + +15->27 + + +kpts + + + +15->29 + + +kpts + + + +16 + +vc-relax + + + +16->13 + + +calculation + + + +17 + +0.02 + + + +17->13 + + +smearing + + + +17->20 + + +smearing + + + +17->23 + + +smearing + + + +17->25 + + +smearing + + + +17->27 + + +smearing + + + +17->29 + + +smearing + + + +18 + +[0.9, 0.95, 1.0, 1.05, 1.1] + + + +18->2 + + +strain_lst + + + +19 + +strain_0 + + + +19->3 + + +working_directory + + + +21 + +scf + + + +21->20 + + +calculation + + + +21->23 + + +calculation + + + +21->25 + + +calculation + + + +21->27 + + +calculation + + + +21->29 + + +calculation + + + +22 + +strain_1 + + + +22->4 + + +working_directory + + + +24 + +strain_2 + + + +24->5 + + +working_directory + + + +26 + +strain_3 + + + +26->6 + + +working_directory + + + +28 + +strain_4 + + + +28->7 + + +working_directory + + + \ No newline at end of file diff --git a/_images/1a62cfdce2d14f80e1edef0854a4fc9341fa9017334c56d5a805e0d8d39e1f40.svg b/_images/1a62cfdce2d14f80e1edef0854a4fc9341fa9017334c56d5a805e0d8d39e1f40.svg new file mode 100644 index 00000000..ed1dc6dd --- /dev/null +++ b/_images/1a62cfdce2d14f80e1edef0854a4fc9341fa9017334c56d5a805e0d8d39e1f40.svg @@ -0,0 +1,713 @@ + + + + + +create_function_job_5b061420d63d9ec78dec4ea199d17802 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a9f0> + + + +volume_lst_bab5e4fda3f1e5f52078772393f532bd + +volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a780> + + + +volume_lst_bab5e4fda3f1e5f52078772393f532bd->create_function_job_5b061420d63d9ec78dec4ea199d17802 + + + + + +0_660e411be80b9601df04a305c0b8d42c + +0=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a1e0> + + + +0_660e411be80b9601df04a305c0b8d42c->volume_lst_bab5e4fda3f1e5f52078772393f532bd + + + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add + +working_directory=strain_0 + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_660e411be80b9601df04a305c0b8d42c + + + + + +0_e6ee3581c44e7854efead20f04471309 + +0=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939bb0> + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_e6ee3581c44e7854efead20f04471309 + + + + + +energy_lst_66d2789b6d3a5694711b89056d28c94e + +energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a150> + + + +0_e6ee3581c44e7854efead20f04471309->energy_lst_66d2789b6d3a5694711b89056d28c94e + + + + + +input_dict_1ae09ae858f19c8e60799472df8fb722 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938ef0> + + + +input_dict_1ae09ae858f19c8e60799472df8fb722->0_660e411be80b9601df04a305c0b8d42c + + + + + +input_dict_1ae09ae858f19c8e60799472df8fb722->0_e6ee3581c44e7854efead20f04471309 + + + + + +structure_5a1787d961459460ccaffe1e1d4ecccb + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938920> + + + +structure_5a1787d961459460ccaffe1e1d4ecccb->input_dict_1ae09ae858f19c8e60799472df8fb722 + + + + + +structure_d174185e21e45d75662c968cd22e343f + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7917b60> + + + +structure_d174185e21e45d75662c968cd22e343f->structure_5a1787d961459460ccaffe1e1d4ecccb + + + + + +structure_f767dff1064c80db5f7485234890502b + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938e90> + + + +structure_d174185e21e45d75662c968cd22e343f->structure_f767dff1064c80db5f7485234890502b + + + + + +structure_ddec29d78e450302309468a205f853e0 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938b60> + + + +structure_d174185e21e45d75662c968cd22e343f->structure_ddec29d78e450302309468a205f853e0 + + + + + +structure_7058e2b0f9750c91bc4bfb196ef657c4 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938830> + + + +structure_d174185e21e45d75662c968cd22e343f->structure_7058e2b0f9750c91bc4bfb196ef657c4 + + + + + +structure_bd3567f1c4dea198450a9c5754169c6e + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938500> + + + +structure_d174185e21e45d75662c968cd22e343f->structure_bd3567f1c4dea198450a9c5754169c6e + + + + + +input_dict_6ac5729accfaa2fc17b16aea0993239d + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938c20> + + + +structure_f767dff1064c80db5f7485234890502b->input_dict_6ac5729accfaa2fc17b16aea0993239d + + + + + +input_dict_6f5f227e76a59bc3328c1589d19e76a8 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c798e210> + + + +structure_ddec29d78e450302309468a205f853e0->input_dict_6f5f227e76a59bc3328c1589d19e76a8 + + + + + +input_dict_6a9cf74e8db96e54fdfb0259b080fde5 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938ad0> + + + +structure_7058e2b0f9750c91bc4bfb196ef657c4->input_dict_6a9cf74e8db96e54fdfb0259b080fde5 + + + + + +input_dict_5c935f1e934238da77888607adb78f21 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c79387a0> + + + +structure_bd3567f1c4dea198450a9c5754169c6e->input_dict_5c935f1e934238da77888607adb78f21 + + + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7 + +working_directory=mini + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_d174185e21e45d75662c968cd22e343f + + + + + +input_dict_e4882b06f1d1d2787261039e2cadf144 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7917b30> + + + +input_dict_e4882b06f1d1d2787261039e2cadf144->structure_d174185e21e45d75662c968cd22e343f + + + + + +structure_f05da6b1fa437561d105bdc15c0397dc + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7917cb0> + + + +structure_f05da6b1fa437561d105bdc15c0397dc->input_dict_e4882b06f1d1d2787261039e2cadf144 + + + + + +element_467734216d9bd2497ffd28d5cd6daba0 + +element=Al + + + +element_467734216d9bd2497ffd28d5cd6daba0->structure_f05da6b1fa437561d105bdc15c0397dc + + + + + +a_457b6d376c6fce696df148a385afa46d + +a=4.04 + + + +a_457b6d376c6fce696df148a385afa46d->structure_f05da6b1fa437561d105bdc15c0397dc + + + + + +cubic_bad787c53fa02a5559fe570238fdb23a + +cubic=True + + + +cubic_bad787c53fa02a5559fe570238fdb23a->structure_f05da6b1fa437561d105bdc15c0397dc + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10 + +pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'} + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_1ae09ae858f19c8e60799472df8fb722 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e4882b06f1d1d2787261039e2cadf144 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_6ac5729accfaa2fc17b16aea0993239d + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_6f5f227e76a59bc3328c1589d19e76a8 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_6a9cf74e8db96e54fdfb0259b080fde5 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_5c935f1e934238da77888607adb78f21 + + + + + +1_3f102cbfb29758610dc0341d9bfc5314 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a1b0> + + + +input_dict_6ac5729accfaa2fc17b16aea0993239d->1_3f102cbfb29758610dc0341d9bfc5314 + + + + + +1_1aafcac616c31f340be5f72208a8c4a6 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939b80> + + + +input_dict_6ac5729accfaa2fc17b16aea0993239d->1_1aafcac616c31f340be5f72208a8c4a6 + + + + + +2_306ec52f73bd4cc0aa3c9ca487ebbd04 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939fd0> + + + +input_dict_6f5f227e76a59bc3328c1589d19e76a8->2_306ec52f73bd4cc0aa3c9ca487ebbd04 + + + + + +2_1d6711e273989bd3e65c553533c25350 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c79396d0> + + + +input_dict_6f5f227e76a59bc3328c1589d19e76a8->2_1d6711e273989bd3e65c553533c25350 + + + + + +3_7da5e0a20fb71fd839016cb73b56e605 + +3=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a330> + + + +input_dict_6a9cf74e8db96e54fdfb0259b080fde5->3_7da5e0a20fb71fd839016cb73b56e605 + + + + + +3_a0c6deb5c976cd0c5a3056ba4168a962 + +3=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939d00> + + + +input_dict_6a9cf74e8db96e54fdfb0259b080fde5->3_a0c6deb5c976cd0c5a3056ba4168a962 + + + + + +4_f1a7b8e82b6bf6190263e6e6d63b9ebf + +4=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a3f0> + + + +input_dict_5c935f1e934238da77888607adb78f21->4_f1a7b8e82b6bf6190263e6e6d63b9ebf + + + + + +4_b415c675207adb05d16e428662ace723 + +4=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939dc0> + + + +input_dict_5c935f1e934238da77888607adb78f21->4_b415c675207adb05d16e428662ace723 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa + +kpts=[3, 3, 3] + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_1ae09ae858f19c8e60799472df8fb722 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e4882b06f1d1d2787261039e2cadf144 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_6ac5729accfaa2fc17b16aea0993239d + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_6f5f227e76a59bc3328c1589d19e76a8 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_6a9cf74e8db96e54fdfb0259b080fde5 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_5c935f1e934238da77888607adb78f21 + + + + + +calculation_77b75a01e65d83962d14fa8a882d6c34 + +calculation=vc-relax + + + +calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_e4882b06f1d1d2787261039e2cadf144 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9 + +smearing=0.02 + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_1ae09ae858f19c8e60799472df8fb722 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e4882b06f1d1d2787261039e2cadf144 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_6ac5729accfaa2fc17b16aea0993239d + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_6f5f227e76a59bc3328c1589d19e76a8 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_6a9cf74e8db96e54fdfb0259b080fde5 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_5c935f1e934238da77888607adb78f21 + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86 + +strain_lst=[0.9, 0.9500000000000001, 1.0, 1.05, 1.1] + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_5a1787d961459460ccaffe1e1d4ecccb + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_f767dff1064c80db5f7485234890502b + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_ddec29d78e450302309468a205f853e0 + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_7058e2b0f9750c91bc4bfb196ef657c4 + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_bd3567f1c4dea198450a9c5754169c6e + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83 + +calculation=scf + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_1ae09ae858f19c8e60799472df8fb722 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_6ac5729accfaa2fc17b16aea0993239d + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_6f5f227e76a59bc3328c1589d19e76a8 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_6a9cf74e8db96e54fdfb0259b080fde5 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_5c935f1e934238da77888607adb78f21 + + + + + +1_3f102cbfb29758610dc0341d9bfc5314->volume_lst_bab5e4fda3f1e5f52078772393f532bd + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd + +working_directory=strain_1 + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_3f102cbfb29758610dc0341d9bfc5314 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_1aafcac616c31f340be5f72208a8c4a6 + + + + + +1_1aafcac616c31f340be5f72208a8c4a6->energy_lst_66d2789b6d3a5694711b89056d28c94e + + + + + +2_306ec52f73bd4cc0aa3c9ca487ebbd04->volume_lst_bab5e4fda3f1e5f52078772393f532bd + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992 + +working_directory=strain_2 + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_306ec52f73bd4cc0aa3c9ca487ebbd04 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_1d6711e273989bd3e65c553533c25350 + + + + + +2_1d6711e273989bd3e65c553533c25350->energy_lst_66d2789b6d3a5694711b89056d28c94e + + + + + +3_7da5e0a20fb71fd839016cb73b56e605->volume_lst_bab5e4fda3f1e5f52078772393f532bd + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f + +working_directory=strain_3 + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_7da5e0a20fb71fd839016cb73b56e605 + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_a0c6deb5c976cd0c5a3056ba4168a962 + + + + + +3_a0c6deb5c976cd0c5a3056ba4168a962->energy_lst_66d2789b6d3a5694711b89056d28c94e + + + + + +4_f1a7b8e82b6bf6190263e6e6d63b9ebf->volume_lst_bab5e4fda3f1e5f52078772393f532bd + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7 + +working_directory=strain_4 + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_f1a7b8e82b6bf6190263e6e6d63b9ebf + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_b415c675207adb05d16e428662ace723 + + + + + +4_b415c675207adb05d16e428662ace723->energy_lst_66d2789b6d3a5694711b89056d28c94e + + + + + +energy_lst_66d2789b6d3a5694711b89056d28c94e->create_function_job_5b061420d63d9ec78dec4ea199d17802 + + + + + \ No newline at end of file diff --git a/_images/3601f1e7b83f34c799cf6d96b9136f2d94fa110c23a3f807087dd336c0d571c9.svg b/_images/3601f1e7b83f34c799cf6d96b9136f2d94fa110c23a3f807087dd336c0d571c9.svg new file mode 100644 index 00000000..1cfd77e6 --- /dev/null +++ b/_images/3601f1e7b83f34c799cf6d96b9136f2d94fa110c23a3f807087dd336c0d571c9.svg @@ -0,0 +1,3823 @@ + + + + + + +clustermy_workflow + +my_workflow: Workflow + +clustermy_workflowInputs + + + + + + + +Inputs + + +clustermy_workflowOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowstructure + + + + + + + +structure: get_bulk_structure + + +clustermy_workflowstructureInputs + + + + + + + +Inputs + + +clustermy_workflowstructureOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinput_dict_0 + + + + + + + +input_dict_0: InputsToDict7245513302159894572 + + +clustermy_workflowinput_dict_0Inputs + + + + + + + +Inputs + + +clustermy_workflowinput_dict_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowcalc_mini + + + + + + + +calc_mini: calculate_qe + + +clustermy_workflowcalc_miniInputs + + + + + + + +Inputs + + +clustermy_workflowcalc_miniOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_7861940023574593993 + + + + + + + +injected_GetItem_7861940023574593993: GetItem + + +clustermy_workflowinjected_GetItem_7861940023574593993Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowstructure_lst + + + + + + + +structure_lst: generate_structures + + +clustermy_workflowstructure_lstInputs + + + + + + + +Inputs + + +clustermy_workflowstructure_lstOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_3639661277350423571 + + + + + + + +injected_GetItem_3639661277350423571: GetItem + + +clustermy_workflowinjected_GetItem_3639661277350423571Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinput_dict_1 + + + + + + + +input_dict_1: InputsToDict7245513302159894572 + + +clustermy_workflowinput_dict_1Inputs + + + + + + + +Inputs + + +clustermy_workflowinput_dict_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowcalc_strain_0 + + + + + + + +calc_strain_0: calculate_qe + + +clustermy_workflowcalc_strain_0Inputs + + + + + + + +Inputs + + +clustermy_workflowcalc_strain_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m7252158415225576841 + + + + + + + +injected_GetItem_m7252158415225576841: GetItem + + +clustermy_workflowinjected_GetItem_m7252158415225576841Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinput_dict_2 + + + + + + + +input_dict_2: InputsToDict7245513302159894572 + + +clustermy_workflowinput_dict_2Inputs + + + + + + + +Inputs + + +clustermy_workflowinput_dict_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowcalc_strain_1 + + + + + + + +calc_strain_1: calculate_qe + + +clustermy_workflowcalc_strain_1Inputs + + + + + + + +Inputs + + +clustermy_workflowcalc_strain_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m6988710272709122235 + + + + + + + +injected_GetItem_m6988710272709122235: GetItem + + +clustermy_workflowinjected_GetItem_m6988710272709122235Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinput_dict_3 + + + + + + + +input_dict_3: InputsToDict7245513302159894572 + + +clustermy_workflowinput_dict_3Inputs + + + + + + + +Inputs + + +clustermy_workflowinput_dict_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowcalc_strain_2 + + + + + + + +calc_strain_2: calculate_qe + + +clustermy_workflowcalc_strain_2Inputs + + + + + + + +Inputs + + +clustermy_workflowcalc_strain_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m7506669112781170504 + + + + + + + +injected_GetItem_m7506669112781170504: GetItem + + +clustermy_workflowinjected_GetItem_m7506669112781170504Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinput_dict_4 + + + + + + + +input_dict_4: InputsToDict7245513302159894572 + + +clustermy_workflowinput_dict_4Inputs + + + + + + + +Inputs + + +clustermy_workflowinput_dict_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowcalc_strain_3 + + + + + + + +calc_strain_3: calculate_qe + + +clustermy_workflowcalc_strain_3Inputs + + + + + + + +Inputs + + +clustermy_workflowcalc_strain_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_2957691736869688386 + + + + + + + +injected_GetItem_2957691736869688386: GetItem + + +clustermy_workflowinjected_GetItem_2957691736869688386Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinput_dict_5 + + + + + + + +input_dict_5: InputsToDict7245513302159894572 + + +clustermy_workflowinput_dict_5Inputs + + + + + + + +Inputs + + +clustermy_workflowinput_dict_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowcalc_strain_4 + + + + + + + +calc_strain_4: calculate_qe + + +clustermy_workflowcalc_strain_4Inputs + + + + + + + +Inputs + + +clustermy_workflowcalc_strain_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_8710029016672139677 + + + + + + + +injected_GetItem_8710029016672139677: GetItem + + +clustermy_workflowinjected_GetItem_8710029016672139677Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m1919156955132558363 + + + + + + + +injected_GetItem_m1919156955132558363: GetItem + + +clustermy_workflowinjected_GetItem_m1919156955132558363Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_4142543244691876020 + + + + + + + +injected_GetItem_4142543244691876020: GetItem + + +clustermy_workflowinjected_GetItem_4142543244691876020Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m2782610468716623353 + + + + + + + +injected_GetItem_m2782610468716623353: GetItem + + +clustermy_workflowinjected_GetItem_m2782610468716623353Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_6927899509448106427 + + + + + + + +injected_GetItem_6927899509448106427: GetItem + + +clustermy_workflowinjected_GetItem_6927899509448106427Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowvolume_dict + + + + + + + +volume_dict: InputsToDictm7167683884169246426 + + +clustermy_workflowvolume_dictInputs + + + + + + + +Inputs + + +clustermy_workflowvolume_dictOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_7833741598610549781 + + + + + + + +injected_GetItem_7833741598610549781: GetItem + + +clustermy_workflowinjected_GetItem_7833741598610549781Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m3668946170913939128 + + + + + + + +injected_GetItem_m3668946170913939128: GetItem + + +clustermy_workflowinjected_GetItem_m3668946170913939128Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m6511681505733114611 + + + + + + + +injected_GetItem_m6511681505733114611: GetItem + + +clustermy_workflowinjected_GetItem_m6511681505733114611Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m2724299995569513242 + + + + + + + +injected_GetItem_m2724299995569513242: GetItem + + +clustermy_workflowinjected_GetItem_m2724299995569513242Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m447248367025958054 + + + + + + + +injected_GetItem_m447248367025958054: GetItem + + +clustermy_workflowinjected_GetItem_m447248367025958054Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowenergy_dict + + + + + + + +energy_dict: InputsToDictm7167683884169246426 + + +clustermy_workflowenergy_dictInputs + + + + + + + +Inputs + + +clustermy_workflowenergy_dictOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowvolume_lst + + + + + + + +volume_lst: get_values_from_dict + + +clustermy_workflowvolume_lstInputs + + + + + + + +Inputs + + +clustermy_workflowvolume_lstOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowenergy_lst + + + + + + + +energy_lst: get_values_from_dict + + +clustermy_workflowenergy_lstInputs + + + + + + + +Inputs + + +clustermy_workflowenergy_lstOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowplot + + + + + + + +plot: plot_energy_volume_curve + + +clustermy_workflowplotInputs + + + + + + + +Inputs + + +clustermy_workflowplotOutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clustermy_workflowInputsrun + +run + + + +clustermy_workflowOutputsWithInjectionran + +ran + + + + +clustermy_workflowInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowInputsstructure__element + +structure__element + + + +clustermy_workflowstructureInputselement + +element + + + +clustermy_workflowInputsstructure__element->clustermy_workflowstructureInputselement + + + + + + +clustermy_workflowInputsstructure__a + +structure__a + + + +clustermy_workflowstructureInputsa + +a + + + +clustermy_workflowInputsstructure__a->clustermy_workflowstructureInputsa + + + + + + +clustermy_workflowInputsstructure__cubic + +structure__cubic + + + +clustermy_workflowstructureInputscubic + +cubic + + + +clustermy_workflowInputsstructure__cubic->clustermy_workflowstructureInputscubic + + + + + + +clustermy_workflowInputsinput_dict_0__pseudopotentials + +input_dict_0__pseudopotentials + + + +clustermy_workflowinput_dict_0Inputspseudopotentials + +pseudopotentials + + + +clustermy_workflowInputsinput_dict_0__pseudopotentials->clustermy_workflowinput_dict_0Inputspseudopotentials + + + + + + +clustermy_workflowInputsinput_dict_0__kpts + +input_dict_0__kpts + + + +clustermy_workflowinput_dict_0Inputskpts + +kpts + + + +clustermy_workflowInputsinput_dict_0__kpts->clustermy_workflowinput_dict_0Inputskpts + + + + + + +clustermy_workflowInputsinput_dict_0__calculation + +input_dict_0__calculation + + + +clustermy_workflowinput_dict_0Inputscalculation + +calculation + + + +clustermy_workflowInputsinput_dict_0__calculation->clustermy_workflowinput_dict_0Inputscalculation + + + + + + +clustermy_workflowInputsinput_dict_0__smearing + +input_dict_0__smearing + + + +clustermy_workflowinput_dict_0Inputssmearing + +smearing + + + +clustermy_workflowInputsinput_dict_0__smearing->clustermy_workflowinput_dict_0Inputssmearing + + + + + + +clustermy_workflowInputscalc_mini__working_directory + +calc_mini__working_directory + + + +clustermy_workflowcalc_miniInputsworking_directory + +working_directory + + + +clustermy_workflowInputscalc_mini__working_directory->clustermy_workflowcalc_miniInputsworking_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_7861940023574593993__item + +injected_GetItem_7861940023574593993__item + + + +clustermy_workflowinjected_GetItem_7861940023574593993Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_7861940023574593993__item->clustermy_workflowinjected_GetItem_7861940023574593993Inputsitem + + + + + + +clustermy_workflowInputsstructure_lst__strain_lst + +structure_lst__strain_lst + + + +clustermy_workflowstructure_lstInputsstrain_lst + +strain_lst + + + +clustermy_workflowInputsstructure_lst__strain_lst->clustermy_workflowstructure_lstInputsstrain_lst + + + + + + +clustermy_workflowInputsinjected_GetItem_3639661277350423571__item + +injected_GetItem_3639661277350423571__item + + + +clustermy_workflowinjected_GetItem_3639661277350423571Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_3639661277350423571__item->clustermy_workflowinjected_GetItem_3639661277350423571Inputsitem + + + + + + +clustermy_workflowInputsinput_dict_1__pseudopotentials + +input_dict_1__pseudopotentials + + + +clustermy_workflowinput_dict_1Inputspseudopotentials + +pseudopotentials + + + +clustermy_workflowInputsinput_dict_1__pseudopotentials->clustermy_workflowinput_dict_1Inputspseudopotentials + + + + + + +clustermy_workflowInputsinput_dict_1__kpts + +input_dict_1__kpts + + + +clustermy_workflowinput_dict_1Inputskpts + +kpts + + + +clustermy_workflowInputsinput_dict_1__kpts->clustermy_workflowinput_dict_1Inputskpts + + + + + + +clustermy_workflowInputsinput_dict_1__calculation + +input_dict_1__calculation + + + +clustermy_workflowinput_dict_1Inputscalculation + +calculation + + + +clustermy_workflowInputsinput_dict_1__calculation->clustermy_workflowinput_dict_1Inputscalculation + + + + + + +clustermy_workflowInputsinput_dict_1__smearing + +input_dict_1__smearing + + + +clustermy_workflowinput_dict_1Inputssmearing + +smearing + + + +clustermy_workflowInputsinput_dict_1__smearing->clustermy_workflowinput_dict_1Inputssmearing + + + + + + +clustermy_workflowInputscalc_strain_0__working_directory + +calc_strain_0__working_directory + + + +clustermy_workflowcalc_strain_0Inputsworking_directory + +working_directory + + + +clustermy_workflowInputscalc_strain_0__working_directory->clustermy_workflowcalc_strain_0Inputsworking_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_m7252158415225576841__item + +injected_GetItem_m7252158415225576841__item + + + +clustermy_workflowinjected_GetItem_m7252158415225576841Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m7252158415225576841__item->clustermy_workflowinjected_GetItem_m7252158415225576841Inputsitem + + + + + + +clustermy_workflowInputsinput_dict_2__pseudopotentials + +input_dict_2__pseudopotentials + + + +clustermy_workflowinput_dict_2Inputspseudopotentials + +pseudopotentials + + + +clustermy_workflowInputsinput_dict_2__pseudopotentials->clustermy_workflowinput_dict_2Inputspseudopotentials + + + + + + +clustermy_workflowInputsinput_dict_2__kpts + +input_dict_2__kpts + + + +clustermy_workflowinput_dict_2Inputskpts + +kpts + + + +clustermy_workflowInputsinput_dict_2__kpts->clustermy_workflowinput_dict_2Inputskpts + + + + + + +clustermy_workflowInputsinput_dict_2__calculation + +input_dict_2__calculation + + + +clustermy_workflowinput_dict_2Inputscalculation + +calculation + + + +clustermy_workflowInputsinput_dict_2__calculation->clustermy_workflowinput_dict_2Inputscalculation + + + + + + +clustermy_workflowInputsinput_dict_2__smearing + +input_dict_2__smearing + + + +clustermy_workflowinput_dict_2Inputssmearing + +smearing + + + +clustermy_workflowInputsinput_dict_2__smearing->clustermy_workflowinput_dict_2Inputssmearing + + + + + + +clustermy_workflowInputscalc_strain_1__working_directory + +calc_strain_1__working_directory + + + +clustermy_workflowcalc_strain_1Inputsworking_directory + +working_directory + + + +clustermy_workflowInputscalc_strain_1__working_directory->clustermy_workflowcalc_strain_1Inputsworking_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_m6988710272709122235__item + +injected_GetItem_m6988710272709122235__item + + + +clustermy_workflowinjected_GetItem_m6988710272709122235Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m6988710272709122235__item->clustermy_workflowinjected_GetItem_m6988710272709122235Inputsitem + + + + + + +clustermy_workflowInputsinput_dict_3__pseudopotentials + +input_dict_3__pseudopotentials + + + +clustermy_workflowinput_dict_3Inputspseudopotentials + +pseudopotentials + + + +clustermy_workflowInputsinput_dict_3__pseudopotentials->clustermy_workflowinput_dict_3Inputspseudopotentials + + + + + + +clustermy_workflowInputsinput_dict_3__kpts + +input_dict_3__kpts + + + +clustermy_workflowinput_dict_3Inputskpts + +kpts + + + +clustermy_workflowInputsinput_dict_3__kpts->clustermy_workflowinput_dict_3Inputskpts + + + + + + +clustermy_workflowInputsinput_dict_3__calculation + +input_dict_3__calculation + + + +clustermy_workflowinput_dict_3Inputscalculation + +calculation + + + +clustermy_workflowInputsinput_dict_3__calculation->clustermy_workflowinput_dict_3Inputscalculation + + + + + + +clustermy_workflowInputsinput_dict_3__smearing + +input_dict_3__smearing + + + +clustermy_workflowinput_dict_3Inputssmearing + +smearing + + + +clustermy_workflowInputsinput_dict_3__smearing->clustermy_workflowinput_dict_3Inputssmearing + + + + + + +clustermy_workflowInputscalc_strain_2__working_directory + +calc_strain_2__working_directory + + + +clustermy_workflowcalc_strain_2Inputsworking_directory + +working_directory + + + +clustermy_workflowInputscalc_strain_2__working_directory->clustermy_workflowcalc_strain_2Inputsworking_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_m7506669112781170504__item + +injected_GetItem_m7506669112781170504__item + + + +clustermy_workflowinjected_GetItem_m7506669112781170504Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m7506669112781170504__item->clustermy_workflowinjected_GetItem_m7506669112781170504Inputsitem + + + + + + +clustermy_workflowInputsinput_dict_4__pseudopotentials + +input_dict_4__pseudopotentials + + + +clustermy_workflowinput_dict_4Inputspseudopotentials + +pseudopotentials + + + +clustermy_workflowInputsinput_dict_4__pseudopotentials->clustermy_workflowinput_dict_4Inputspseudopotentials + + + + + + +clustermy_workflowInputsinput_dict_4__kpts + +input_dict_4__kpts + + + +clustermy_workflowinput_dict_4Inputskpts + +kpts + + + +clustermy_workflowInputsinput_dict_4__kpts->clustermy_workflowinput_dict_4Inputskpts + + + + + + +clustermy_workflowInputsinput_dict_4__calculation + +input_dict_4__calculation + + + +clustermy_workflowinput_dict_4Inputscalculation + +calculation + + + +clustermy_workflowInputsinput_dict_4__calculation->clustermy_workflowinput_dict_4Inputscalculation + + + + + + +clustermy_workflowInputsinput_dict_4__smearing + +input_dict_4__smearing + + + +clustermy_workflowinput_dict_4Inputssmearing + +smearing + + + +clustermy_workflowInputsinput_dict_4__smearing->clustermy_workflowinput_dict_4Inputssmearing + + + + + + +clustermy_workflowInputscalc_strain_3__working_directory + +calc_strain_3__working_directory + + + +clustermy_workflowcalc_strain_3Inputsworking_directory + +working_directory + + + +clustermy_workflowInputscalc_strain_3__working_directory->clustermy_workflowcalc_strain_3Inputsworking_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_2957691736869688386__item + +injected_GetItem_2957691736869688386__item + + + +clustermy_workflowinjected_GetItem_2957691736869688386Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_2957691736869688386__item->clustermy_workflowinjected_GetItem_2957691736869688386Inputsitem + + + + + + +clustermy_workflowInputsinput_dict_5__pseudopotentials + +input_dict_5__pseudopotentials + + + +clustermy_workflowinput_dict_5Inputspseudopotentials + +pseudopotentials + + + +clustermy_workflowInputsinput_dict_5__pseudopotentials->clustermy_workflowinput_dict_5Inputspseudopotentials + + + + + + +clustermy_workflowInputsinput_dict_5__kpts + +input_dict_5__kpts + + + +clustermy_workflowinput_dict_5Inputskpts + +kpts + + + +clustermy_workflowInputsinput_dict_5__kpts->clustermy_workflowinput_dict_5Inputskpts + + + + + + +clustermy_workflowInputsinput_dict_5__calculation + +input_dict_5__calculation + + + +clustermy_workflowinput_dict_5Inputscalculation + +calculation + + + +clustermy_workflowInputsinput_dict_5__calculation->clustermy_workflowinput_dict_5Inputscalculation + + + + + + +clustermy_workflowInputsinput_dict_5__smearing + +input_dict_5__smearing + + + +clustermy_workflowinput_dict_5Inputssmearing + +smearing + + + +clustermy_workflowInputsinput_dict_5__smearing->clustermy_workflowinput_dict_5Inputssmearing + + + + + + +clustermy_workflowInputscalc_strain_4__working_directory + +calc_strain_4__working_directory + + + +clustermy_workflowcalc_strain_4Inputsworking_directory + +working_directory + + + +clustermy_workflowInputscalc_strain_4__working_directory->clustermy_workflowcalc_strain_4Inputsworking_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_8710029016672139677__item + +injected_GetItem_8710029016672139677__item + + + +clustermy_workflowinjected_GetItem_8710029016672139677Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_8710029016672139677__item->clustermy_workflowinjected_GetItem_8710029016672139677Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m1919156955132558363__item + +injected_GetItem_m1919156955132558363__item + + + +clustermy_workflowinjected_GetItem_m1919156955132558363Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m1919156955132558363__item->clustermy_workflowinjected_GetItem_m1919156955132558363Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_4142543244691876020__item + +injected_GetItem_4142543244691876020__item + + + +clustermy_workflowinjected_GetItem_4142543244691876020Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_4142543244691876020__item->clustermy_workflowinjected_GetItem_4142543244691876020Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m2782610468716623353__item + +injected_GetItem_m2782610468716623353__item + + + +clustermy_workflowinjected_GetItem_m2782610468716623353Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m2782610468716623353__item->clustermy_workflowinjected_GetItem_m2782610468716623353Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_6927899509448106427__item + +injected_GetItem_6927899509448106427__item + + + +clustermy_workflowinjected_GetItem_6927899509448106427Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_6927899509448106427__item->clustermy_workflowinjected_GetItem_6927899509448106427Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_7833741598610549781__item + +injected_GetItem_7833741598610549781__item + + + +clustermy_workflowinjected_GetItem_7833741598610549781Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_7833741598610549781__item->clustermy_workflowinjected_GetItem_7833741598610549781Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m3668946170913939128__item + +injected_GetItem_m3668946170913939128__item + + + +clustermy_workflowinjected_GetItem_m3668946170913939128Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m3668946170913939128__item->clustermy_workflowinjected_GetItem_m3668946170913939128Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m6511681505733114611__item + +injected_GetItem_m6511681505733114611__item + + + +clustermy_workflowinjected_GetItem_m6511681505733114611Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m6511681505733114611__item->clustermy_workflowinjected_GetItem_m6511681505733114611Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m2724299995569513242__item + +injected_GetItem_m2724299995569513242__item + + + +clustermy_workflowinjected_GetItem_m2724299995569513242Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m2724299995569513242__item->clustermy_workflowinjected_GetItem_m2724299995569513242Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m447248367025958054__item + +injected_GetItem_m447248367025958054__item + + + +clustermy_workflowinjected_GetItem_m447248367025958054Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m447248367025958054__item->clustermy_workflowinjected_GetItem_m447248367025958054Inputsitem + + + + + + +clustermy_workflowOutputsWithInjectionfailed + +failed + + + +clustermy_workflowOutputsWithInjectionplot__plot_energy_volume_curve + +plot__plot_energy_volume_curve + + + +clustermy_workflowstructureInputsrun + +run + + + +clustermy_workflowstructureOutputsWithInjectionran + +ran + + + + +clustermy_workflowstructureInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowstructureOutputsWithInjectionfailed + +failed + + + +clustermy_workflowstructureOutputsWithInjectionget_bulk_structure + +get_bulk_structure + + + +clustermy_workflowinput_dict_0Inputsstructure + +structure + + + +clustermy_workflowstructureOutputsWithInjectionget_bulk_structure->clustermy_workflowinput_dict_0Inputsstructure + + + + + + +clustermy_workflowinput_dict_0Inputsrun + +run + + + +clustermy_workflowinput_dict_0OutputsWithInjectionran + +ran + + + + +clustermy_workflowinput_dict_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinput_dict_0OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinput_dict_0OutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowcalc_miniInputsinput_dict + +input_dict + + + +clustermy_workflowinput_dict_0OutputsWithInjectiondict->clustermy_workflowcalc_miniInputsinput_dict + + + + + + +clustermy_workflowcalc_miniInputsrun + +run + + + +clustermy_workflowcalc_miniOutputsWithInjectionran + +ran + + + + +clustermy_workflowcalc_miniInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowcalc_miniOutputsWithInjectionfailed + +failed + + + +clustermy_workflowcalc_miniOutputsWithInjectioncalculate_qe + +calculate_qe + + + +clustermy_workflowinjected_GetItem_7861940023574593993Inputsobj + +obj + + + +clustermy_workflowcalc_miniOutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_7861940023574593993Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_7861940023574593993Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_7861940023574593993Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowstructure_lstInputsstructure + +structure + + + +clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectiongetitem->clustermy_workflowstructure_lstInputsstructure + + + + + + +clustermy_workflowstructure_lstInputsrun + +run + + + +clustermy_workflowstructure_lstOutputsWithInjectionran + +ran + + + + +clustermy_workflowstructure_lstInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowstructure_lstOutputsWithInjectionfailed + +failed + + + +clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures + +generate_structures + + + +clustermy_workflowinjected_GetItem_3639661277350423571Inputsobj + +obj + + + +clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_3639661277350423571Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m7252158415225576841Inputsobj + +obj + + + +clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_m7252158415225576841Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m6988710272709122235Inputsobj + +obj + + + +clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_m6988710272709122235Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m7506669112781170504Inputsobj + +obj + + + +clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_m7506669112781170504Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_2957691736869688386Inputsobj + +obj + + + +clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_2957691736869688386Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_3639661277350423571Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_3639661277350423571Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowinput_dict_1Inputsstructure + +structure + + + +clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectiongetitem->clustermy_workflowinput_dict_1Inputsstructure + + + + + + +clustermy_workflowinput_dict_1Inputsrun + +run + + + +clustermy_workflowinput_dict_1OutputsWithInjectionran + +ran + + + + +clustermy_workflowinput_dict_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinput_dict_1OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinput_dict_1OutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowcalc_strain_0Inputsinput_dict + +input_dict + + + +clustermy_workflowinput_dict_1OutputsWithInjectiondict->clustermy_workflowcalc_strain_0Inputsinput_dict + + + + + + +clustermy_workflowcalc_strain_0Inputsrun + +run + + + +clustermy_workflowcalc_strain_0OutputsWithInjectionran + +ran + + + + +clustermy_workflowcalc_strain_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowcalc_strain_0OutputsWithInjectionfailed + +failed + + + +clustermy_workflowcalc_strain_0OutputsWithInjectioncalculate_qe + +calculate_qe + + + +clustermy_workflowinjected_GetItem_8710029016672139677Inputsobj + +obj + + + +clustermy_workflowcalc_strain_0OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_8710029016672139677Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_7833741598610549781Inputsobj + +obj + + + +clustermy_workflowcalc_strain_0OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_7833741598610549781Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m7252158415225576841Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m7252158415225576841Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowinput_dict_2Inputsstructure + +structure + + + +clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectiongetitem->clustermy_workflowinput_dict_2Inputsstructure + + + + + + +clustermy_workflowinput_dict_2Inputsrun + +run + + + +clustermy_workflowinput_dict_2OutputsWithInjectionran + +ran + + + + +clustermy_workflowinput_dict_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinput_dict_2OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinput_dict_2OutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowcalc_strain_1Inputsinput_dict + +input_dict + + + +clustermy_workflowinput_dict_2OutputsWithInjectiondict->clustermy_workflowcalc_strain_1Inputsinput_dict + + + + + + +clustermy_workflowcalc_strain_1Inputsrun + +run + + + +clustermy_workflowcalc_strain_1OutputsWithInjectionran + +ran + + + + +clustermy_workflowcalc_strain_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowcalc_strain_1OutputsWithInjectionfailed + +failed + + + +clustermy_workflowcalc_strain_1OutputsWithInjectioncalculate_qe + +calculate_qe + + + +clustermy_workflowinjected_GetItem_m1919156955132558363Inputsobj + +obj + + + +clustermy_workflowcalc_strain_1OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m1919156955132558363Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m3668946170913939128Inputsobj + +obj + + + +clustermy_workflowcalc_strain_1OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m3668946170913939128Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m6988710272709122235Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m6988710272709122235Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowinput_dict_3Inputsstructure + +structure + + + +clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectiongetitem->clustermy_workflowinput_dict_3Inputsstructure + + + + + + +clustermy_workflowinput_dict_3Inputsrun + +run + + + +clustermy_workflowinput_dict_3OutputsWithInjectionran + +ran + + + + +clustermy_workflowinput_dict_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinput_dict_3OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinput_dict_3OutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowcalc_strain_2Inputsinput_dict + +input_dict + + + +clustermy_workflowinput_dict_3OutputsWithInjectiondict->clustermy_workflowcalc_strain_2Inputsinput_dict + + + + + + +clustermy_workflowcalc_strain_2Inputsrun + +run + + + +clustermy_workflowcalc_strain_2OutputsWithInjectionran + +ran + + + + +clustermy_workflowcalc_strain_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowcalc_strain_2OutputsWithInjectionfailed + +failed + + + +clustermy_workflowcalc_strain_2OutputsWithInjectioncalculate_qe + +calculate_qe + + + +clustermy_workflowinjected_GetItem_4142543244691876020Inputsobj + +obj + + + +clustermy_workflowcalc_strain_2OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_4142543244691876020Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m6511681505733114611Inputsobj + +obj + + + +clustermy_workflowcalc_strain_2OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m6511681505733114611Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m7506669112781170504Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m7506669112781170504Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowinput_dict_4Inputsstructure + +structure + + + +clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectiongetitem->clustermy_workflowinput_dict_4Inputsstructure + + + + + + +clustermy_workflowinput_dict_4Inputsrun + +run + + + +clustermy_workflowinput_dict_4OutputsWithInjectionran + +ran + + + + +clustermy_workflowinput_dict_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinput_dict_4OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinput_dict_4OutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowcalc_strain_3Inputsinput_dict + +input_dict + + + +clustermy_workflowinput_dict_4OutputsWithInjectiondict->clustermy_workflowcalc_strain_3Inputsinput_dict + + + + + + +clustermy_workflowcalc_strain_3Inputsrun + +run + + + +clustermy_workflowcalc_strain_3OutputsWithInjectionran + +ran + + + + +clustermy_workflowcalc_strain_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowcalc_strain_3OutputsWithInjectionfailed + +failed + + + +clustermy_workflowcalc_strain_3OutputsWithInjectioncalculate_qe + +calculate_qe + + + +clustermy_workflowinjected_GetItem_m2782610468716623353Inputsobj + +obj + + + +clustermy_workflowcalc_strain_3OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m2782610468716623353Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m2724299995569513242Inputsobj + +obj + + + +clustermy_workflowcalc_strain_3OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m2724299995569513242Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_2957691736869688386Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_2957691736869688386Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowinput_dict_5Inputsstructure + +structure + + + +clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectiongetitem->clustermy_workflowinput_dict_5Inputsstructure + + + + + + +clustermy_workflowinput_dict_5Inputsrun + +run + + + +clustermy_workflowinput_dict_5OutputsWithInjectionran + +ran + + + + +clustermy_workflowinput_dict_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinput_dict_5OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinput_dict_5OutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowcalc_strain_4Inputsinput_dict + +input_dict + + + +clustermy_workflowinput_dict_5OutputsWithInjectiondict->clustermy_workflowcalc_strain_4Inputsinput_dict + + + + + + +clustermy_workflowcalc_strain_4Inputsrun + +run + + + +clustermy_workflowcalc_strain_4OutputsWithInjectionran + +ran + + + + +clustermy_workflowcalc_strain_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowcalc_strain_4OutputsWithInjectionfailed + +failed + + + +clustermy_workflowcalc_strain_4OutputsWithInjectioncalculate_qe + +calculate_qe + + + +clustermy_workflowinjected_GetItem_6927899509448106427Inputsobj + +obj + + + +clustermy_workflowcalc_strain_4OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_6927899509448106427Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m447248367025958054Inputsobj + +obj + + + +clustermy_workflowcalc_strain_4OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m447248367025958054Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_8710029016672139677Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_8710029016672139677Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowvolume_dictInputss_0 + +s_0 + + + +clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_0 + + + + + + +clustermy_workflowinjected_GetItem_m1919156955132558363Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m1919156955132558363Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowvolume_dictInputss_1 + +s_1 + + + +clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_1 + + + + + + +clustermy_workflowinjected_GetItem_4142543244691876020Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_4142543244691876020Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowvolume_dictInputss_2 + +s_2 + + + +clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_2 + + + + + + +clustermy_workflowinjected_GetItem_m2782610468716623353Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m2782610468716623353Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowvolume_dictInputss_3 + +s_3 + + + +clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_3 + + + + + + +clustermy_workflowinjected_GetItem_6927899509448106427Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_6927899509448106427Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowvolume_dictInputss_4 + +s_4 + + + +clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_4 + + + + + + +clustermy_workflowvolume_dictInputsrun + +run + + + +clustermy_workflowvolume_dictOutputsWithInjectionran + +ran + + + + +clustermy_workflowvolume_dictInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowvolume_dictOutputsWithInjectionfailed + +failed + + + +clustermy_workflowvolume_dictOutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowvolume_lstInputsinput_dict + +input_dict + + + +clustermy_workflowvolume_dictOutputsWithInjectiondict->clustermy_workflowvolume_lstInputsinput_dict + + + + + + +clustermy_workflowinjected_GetItem_7833741598610549781Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_7833741598610549781Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowenergy_dictInputss_0 + +s_0 + + + +clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_0 + + + + + + +clustermy_workflowinjected_GetItem_m3668946170913939128Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m3668946170913939128Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowenergy_dictInputss_1 + +s_1 + + + +clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_1 + + + + + + +clustermy_workflowinjected_GetItem_m6511681505733114611Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m6511681505733114611Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowenergy_dictInputss_2 + +s_2 + + + +clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_2 + + + + + + +clustermy_workflowinjected_GetItem_m2724299995569513242Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m2724299995569513242Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowenergy_dictInputss_3 + +s_3 + + + +clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_3 + + + + + + +clustermy_workflowinjected_GetItem_m447248367025958054Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m447248367025958054Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowenergy_dictInputss_4 + +s_4 + + + +clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_4 + + + + + + +clustermy_workflowenergy_dictInputsrun + +run + + + +clustermy_workflowenergy_dictOutputsWithInjectionran + +ran + + + + +clustermy_workflowenergy_dictInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowenergy_dictOutputsWithInjectionfailed + +failed + + + +clustermy_workflowenergy_dictOutputsWithInjectiondict + +dict: dict + + + +clustermy_workflowenergy_lstInputsinput_dict + +input_dict + + + +clustermy_workflowenergy_dictOutputsWithInjectiondict->clustermy_workflowenergy_lstInputsinput_dict + + + + + + +clustermy_workflowvolume_lstInputsrun + +run + + + +clustermy_workflowvolume_lstOutputsWithInjectionran + +ran + + + + +clustermy_workflowvolume_lstInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowvolume_lstOutputsWithInjectionfailed + +failed + + + +clustermy_workflowvolume_lstOutputsWithInjectionoutput_dict + +output_dict + + + +clustermy_workflowplotInputsvolume_lst + +volume_lst + + + +clustermy_workflowvolume_lstOutputsWithInjectionoutput_dict->clustermy_workflowplotInputsvolume_lst + + + + + + +clustermy_workflowenergy_lstInputsrun + +run + + + +clustermy_workflowenergy_lstOutputsWithInjectionran + +ran + + + + +clustermy_workflowenergy_lstInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowenergy_lstOutputsWithInjectionfailed + +failed + + + +clustermy_workflowenergy_lstOutputsWithInjectionoutput_dict + +output_dict + + + +clustermy_workflowplotInputsenergy_lst + +energy_lst + + + +clustermy_workflowenergy_lstOutputsWithInjectionoutput_dict->clustermy_workflowplotInputsenergy_lst + + + + + + +clustermy_workflowplotInputsrun + +run + + + +clustermy_workflowplotOutputsWithInjectionran + +ran + + + + +clustermy_workflowplotInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowplotOutputsWithInjectionfailed + +failed + + + +clustermy_workflowplotOutputsWithInjectionplot_energy_volume_curve + +plot_energy_volume_curve + + + +clustermy_workflowplotOutputsWithInjectionplot_energy_volume_curve->clustermy_workflowOutputsWithInjectionplot__plot_energy_volume_curve + + + + + + \ No newline at end of file diff --git a/_images/5cb28d7df624dc3428158f29c1d8c586fb023f6e510bd31e1df3c30f46af37ec.svg b/_images/5cb28d7df624dc3428158f29c1d8c586fb023f6e510bd31e1df3c30f46af37ec.svg new file mode 100644 index 00000000..5fb12c99 --- /dev/null +++ b/_images/5cb28d7df624dc3428158f29c1d8c586fb023f6e510bd31e1df3c30f46af37ec.svg @@ -0,0 +1,233 @@ + + + + + +create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d9280> + + + +plot_file_5007b1d67345934b2ffcdeaaad6ea2ab + +plot_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8da0> + + + +plot_file_5007b1d67345934b2ffcdeaaad6ea2ab->create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920 + + + + + +poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793 + +poisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8a40> + + + +poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793->plot_file_5007b1d67345934b2ffcdeaaad6ea2ab + + + + + +pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab + +pvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8da0> + + + +poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793->pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab + + + + + +macros_tex_02d82cedf90ad323f7eef57ddf383160 + +macros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d9070> + + + +pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab->macros_tex_02d82cedf90ad323f7eef57ddf383160 + + + + + +meshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88 + +meshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x76dba3cb2600> + + + +meshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88->poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793 + + + + + +poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513 + +poisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8a10> + + + +meshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88->poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513 + + + + + +ndofs_ac7427db28c0527371c0e9b27a57024b + +ndofs=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8e30> + + + +meshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88->ndofs_ac7427db28c0527371c0e9b27a57024b + + + + + +poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513->plot_file_5007b1d67345934b2ffcdeaaad6ea2ab + + + + + +poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513->pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab + + + + + +ndofs_ac7427db28c0527371c0e9b27a57024b->macros_tex_02d82cedf90ad323f7eef57ddf383160 + + + + + +gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18 + +gmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba89319d0> + + + +gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18->meshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88 + + + + + +meshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173 + +meshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8710> + + + +gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18->meshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173 + + + + + +meshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173->poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793 + + + + + +meshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173->poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513 + + + + + +meshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173->ndofs_ac7427db28c0527371c0e9b27a57024b + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20 + +domain_size=2.0 + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_02d82cedf90ad323f7eef57ddf383160 + + + + + +macros_tex_02d82cedf90ad323f7eef57ddf383160->create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696 + +source_directory=/home/jovyan/example_workflows/nfdi/source + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_5007b1d67345934b2ffcdeaaad6ea2ab + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_ac7427db28c0527371c0e9b27a57024b + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_02d82cedf90ad323f7eef57ddf383160 + + + + + \ No newline at end of file diff --git a/_images/6175952e7ed6a2491ac40ba7c45663eaebf5908199416d2679edb41d8a96534b.svg b/_images/6175952e7ed6a2491ac40ba7c45663eaebf5908199416d2679edb41d8a96534b.svg new file mode 100644 index 00000000..db6f7e9f --- /dev/null +++ b/_images/6175952e7ed6a2491ac40ba7c45663eaebf5908199416d2679edb41d8a96534b.svg @@ -0,0 +1,233 @@ + + + + + +create_function_job_724cfd00ffeb70f8b463a938195e0447 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9b80> + + + +macros_tex_b52804e5fa845b3657fa99b738e02cf7 + +macros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9910> + + + +macros_tex_b52804e5fa845b3657fa99b738e02cf7->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + +pvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b95e0> + + + +pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + +poisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9280> + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +plot_file_554a54a50a86b23416c0daf6ab0938df + +plot_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b95e0> + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +plot_file_554a54a50a86b23416c0daf6ab0938df->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1 + +meshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b8e90> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + +poisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9250> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +ndofs_e826761b60042b070e0c0a24b472ee26 + +ndofs=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9670> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +ndofs_e826761b60042b070e0c0a24b472ee26->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + +gmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b8b90> + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe + +meshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b8e60> + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20 + +domain_size=2.0 + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696 + +source_directory=/home/jovyan/example_workflows/nfdi/source + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + + + + + \ No newline at end of file diff --git a/_images/6534520ceea0db4bf2288324459b379bb92a6841c33467c83ed39847d899e091.svg b/_images/6534520ceea0db4bf2288324459b379bb92a6841c33467c83ed39847d899e091.svg new file mode 100644 index 00000000..9f87e782 --- /dev/null +++ b/_images/6534520ceea0db4bf2288324459b379bb92a6841c33467c83ed39847d899e091.svg @@ -0,0 +1,713 @@ + + + + + +create_function_job_2dd37919a07881ec35b48b79261ff390 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a510> + + + +volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d + +volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678470> + + + +volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d->create_function_job_2dd37919a07881ec35b48b79261ff390 + + + + + +0_a9794c804499521a0ab9ea2cff0500a5 + +0=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679790> + + + +0_a9794c804499521a0ab9ea2cff0500a5->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d + + + + + +input_dict_199d8ddb39100dfde98b937df71f9e62 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679640> + + + +input_dict_199d8ddb39100dfde98b937df71f9e62->0_a9794c804499521a0ab9ea2cff0500a5 + + + + + +0_114ef2e3771735da6b268f82effc2ec4 + +0=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a300> + + + +input_dict_199d8ddb39100dfde98b937df71f9e62->0_114ef2e3771735da6b268f82effc2ec4 + + + + + +energy_lst_63ae189fad790382f5cf0940678c54d6 + +energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679700> + + + +0_114ef2e3771735da6b268f82effc2ec4->energy_lst_63ae189fad790382f5cf0940678c54d6 + + + + + +structure_d0527c0703fcb9fb054aa650b4594053 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679370> + + + +structure_d0527c0703fcb9fb054aa650b4594053->input_dict_199d8ddb39100dfde98b937df71f9e62 + + + + + +structure_0be62b07a99e8ffab057f3214c0826d1 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678650> + + + +structure_0be62b07a99e8ffab057f3214c0826d1->structure_d0527c0703fcb9fb054aa650b4594053 + + + + + +structure_fe302a8bff25da05cd1653eb33e11409 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679040> + + + +structure_0be62b07a99e8ffab057f3214c0826d1->structure_fe302a8bff25da05cd1653eb33e11409 + + + + + +structure_467af4337e84ea49bfbf05893ab4d2b6 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678cb0> + + + +structure_0be62b07a99e8ffab057f3214c0826d1->structure_467af4337e84ea49bfbf05893ab4d2b6 + + + + + +structure_bac337a65cedef9d7d93433033561948 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e395200aa0> + + + +structure_0be62b07a99e8ffab057f3214c0826d1->structure_bac337a65cedef9d7d93433033561948 + + + + + +structure_297df784365c490600edb61686e8375e + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678980> + + + +structure_0be62b07a99e8ffab057f3214c0826d1->structure_297df784365c490600edb61686e8375e + + + + + +input_dict_61544c190a92e7e3c48a8e27d7493f93 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e3886792e0> + + + +structure_fe302a8bff25da05cd1653eb33e11409->input_dict_61544c190a92e7e3c48a8e27d7493f93 + + + + + +input_dict_c8599abc416e76a13e7fdd654083464d + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678fb0> + + + +structure_467af4337e84ea49bfbf05893ab4d2b6->input_dict_c8599abc416e76a13e7fdd654083464d + + + + + +input_dict_39ff3b093c7af4b691297d26a0944f04 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678140> + + + +structure_bac337a65cedef9d7d93433033561948->input_dict_39ff3b093c7af4b691297d26a0944f04 + + + + + +input_dict_9db8363b46b99584f513f7a9614dd22d + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e38b8bf4a0> + + + +structure_297df784365c490600edb61686e8375e->input_dict_9db8363b46b99584f513f7a9614dd22d + + + + + +input_dict_4bf0a304f408347d8c495fe72b1f5351 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388657ce0> + + + +input_dict_4bf0a304f408347d8c495fe72b1f5351->structure_0be62b07a99e8ffab057f3214c0826d1 + + + + + +structure_85578fbee37b882dfe6c61e46c6e3e6f + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388657e00> + + + +structure_85578fbee37b882dfe6c61e46c6e3e6f->input_dict_4bf0a304f408347d8c495fe72b1f5351 + + + + + +element_467734216d9bd2497ffd28d5cd6daba0 + +element=Al + + + +element_467734216d9bd2497ffd28d5cd6daba0->structure_85578fbee37b882dfe6c61e46c6e3e6f + + + + + +a_457b6d376c6fce696df148a385afa46d + +a=4.04 + + + +a_457b6d376c6fce696df148a385afa46d->structure_85578fbee37b882dfe6c61e46c6e3e6f + + + + + +cubic_bad787c53fa02a5559fe570238fdb23a + +cubic=True + + + +cubic_bad787c53fa02a5559fe570238fdb23a->structure_85578fbee37b882dfe6c61e46c6e3e6f + + + + + +calculation_77b75a01e65d83962d14fa8a882d6c34 + +calculation=vc-relax + + + +calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_4bf0a304f408347d8c495fe72b1f5351 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa + +kpts=[3, 3, 3] + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_199d8ddb39100dfde98b937df71f9e62 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_4bf0a304f408347d8c495fe72b1f5351 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_61544c190a92e7e3c48a8e27d7493f93 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_c8599abc416e76a13e7fdd654083464d + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_39ff3b093c7af4b691297d26a0944f04 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_9db8363b46b99584f513f7a9614dd22d + + + + + +1_bd319eedb0f799b5a7b32d898fc37aac + +1=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679730> + + + +input_dict_61544c190a92e7e3c48a8e27d7493f93->1_bd319eedb0f799b5a7b32d898fc37aac + + + + + +1_1c531d3dedfcb8ccd1735fb8647a93a1 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a2d0> + + + +input_dict_61544c190a92e7e3c48a8e27d7493f93->1_1c531d3dedfcb8ccd1735fb8647a93a1 + + + + + +2_10b8d86df31efb98fd394e77e3844197 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679c10> + + + +input_dict_c8599abc416e76a13e7fdd654083464d->2_10b8d86df31efb98fd394e77e3844197 + + + + + +2_9e637dbd1c8b2498c7b16c988ec96697 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a1e0> + + + +input_dict_c8599abc416e76a13e7fdd654083464d->2_9e637dbd1c8b2498c7b16c988ec96697 + + + + + +3_3377c152644227fb254585b855a83939 + +3=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679070> + + + +input_dict_39ff3b093c7af4b691297d26a0944f04->3_3377c152644227fb254585b855a83939 + + + + + +3_90324db5f7de99a93f4026efbf85ef5d + +3=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679cd0> + + + +input_dict_39ff3b093c7af4b691297d26a0944f04->3_90324db5f7de99a93f4026efbf85ef5d + + + + + +4_81ac7aa8786b3edc4893de089ff4984c + +4=<pyiron_base.project.delayed.DelayedObject object at 0x76e3886790d0> + + + +input_dict_9db8363b46b99584f513f7a9614dd22d->4_81ac7aa8786b3edc4893de089ff4984c + + + + + +4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a + +4=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a180> + + + +input_dict_9db8363b46b99584f513f7a9614dd22d->4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10 + +pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'} + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_199d8ddb39100dfde98b937df71f9e62 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_4bf0a304f408347d8c495fe72b1f5351 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_61544c190a92e7e3c48a8e27d7493f93 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_c8599abc416e76a13e7fdd654083464d + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_39ff3b093c7af4b691297d26a0944f04 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_9db8363b46b99584f513f7a9614dd22d + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9 + +smearing=0.02 + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_199d8ddb39100dfde98b937df71f9e62 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_4bf0a304f408347d8c495fe72b1f5351 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_61544c190a92e7e3c48a8e27d7493f93 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_c8599abc416e76a13e7fdd654083464d + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_39ff3b093c7af4b691297d26a0944f04 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_9db8363b46b99584f513f7a9614dd22d + + + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7 + +working_directory=mini + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_0be62b07a99e8ffab057f3214c0826d1 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781 + +strain_lst=[0.9, 0.95, 1.0, 1.05, 1.1] + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_d0527c0703fcb9fb054aa650b4594053 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_fe302a8bff25da05cd1653eb33e11409 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_467af4337e84ea49bfbf05893ab4d2b6 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_bac337a65cedef9d7d93433033561948 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_297df784365c490600edb61686e8375e + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83 + +calculation=scf + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_199d8ddb39100dfde98b937df71f9e62 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_61544c190a92e7e3c48a8e27d7493f93 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_c8599abc416e76a13e7fdd654083464d + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_39ff3b093c7af4b691297d26a0944f04 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_9db8363b46b99584f513f7a9614dd22d + + + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add + +working_directory=strain_0 + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_a9794c804499521a0ab9ea2cff0500a5 + + + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_114ef2e3771735da6b268f82effc2ec4 + + + + + +1_bd319eedb0f799b5a7b32d898fc37aac->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d + + + + + +1_1c531d3dedfcb8ccd1735fb8647a93a1->energy_lst_63ae189fad790382f5cf0940678c54d6 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd + +working_directory=strain_1 + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_bd319eedb0f799b5a7b32d898fc37aac + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_1c531d3dedfcb8ccd1735fb8647a93a1 + + + + + +2_10b8d86df31efb98fd394e77e3844197->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d + + + + + +2_9e637dbd1c8b2498c7b16c988ec96697->energy_lst_63ae189fad790382f5cf0940678c54d6 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992 + +working_directory=strain_2 + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_10b8d86df31efb98fd394e77e3844197 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_9e637dbd1c8b2498c7b16c988ec96697 + + + + + +3_3377c152644227fb254585b855a83939->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d + + + + + +3_90324db5f7de99a93f4026efbf85ef5d->energy_lst_63ae189fad790382f5cf0940678c54d6 + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f + +working_directory=strain_3 + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_3377c152644227fb254585b855a83939 + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_90324db5f7de99a93f4026efbf85ef5d + + + + + +4_81ac7aa8786b3edc4893de089ff4984c->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d + + + + + +4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a->energy_lst_63ae189fad790382f5cf0940678c54d6 + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7 + +working_directory=strain_4 + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_81ac7aa8786b3edc4893de089ff4984c + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a + + + + + +energy_lst_63ae189fad790382f5cf0940678c54d6->create_function_job_2dd37919a07881ec35b48b79261ff390 + + + + + \ No newline at end of file diff --git a/_images/6820c70f3be39acc6a5503c0a857f2f769f7964f9cf2f9e328f064c89a9bdd4a.svg b/_images/6820c70f3be39acc6a5503c0a857f2f769f7964f9cf2f9e328f064c89a9bdd4a.svg new file mode 100644 index 00000000..6da8c3ba --- /dev/null +++ b/_images/6820c70f3be39acc6a5503c0a857f2f769f7964f9cf2f9e328f064c89a9bdd4a.svg @@ -0,0 +1,3669 @@ + + + + + + +clusterexecutorlib_qe + +executorlib_qe: Workflow + +clusterexecutorlib_qeInputs + + + + + + + +Inputs + + +clusterexecutorlib_qeOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_bulk_structure + + + + + + + +get_bulk_structure: get_bulk_structure + + +clusterexecutorlib_qeget_bulk_structureInputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_bulk_structureOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qecalculate_qe_0 + + + + + + + +calculate_qe_0: calculate_qe + + +clusterexecutorlib_qecalculate_qe_0Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qecalculate_qe_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qegenerate_structures + + + + + + + +generate_structures: generate_structures + + +clusterexecutorlib_qegenerate_structuresInputs + + + + + + + +Inputs + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qecalculate_qe_1 + + + + + + + +calculate_qe_1: calculate_qe + + +clusterexecutorlib_qecalculate_qe_1Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qecalculate_qe_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qecalculate_qe_2 + + + + + + + +calculate_qe_2: calculate_qe + + +clusterexecutorlib_qecalculate_qe_2Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qecalculate_qe_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qecalculate_qe_3 + + + + + + + +calculate_qe_3: calculate_qe + + +clusterexecutorlib_qecalculate_qe_3Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qecalculate_qe_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qecalculate_qe_4 + + + + + + + +calculate_qe_4: calculate_qe + + +clusterexecutorlib_qecalculate_qe_4Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qecalculate_qe_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qecalculate_qe_5 + + + + + + + +calculate_qe_5: calculate_qe + + +clusterexecutorlib_qecalculate_qe_5Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qecalculate_qe_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeplot_energy_volume_curve + + + + + + + +plot_energy_volume_curve: plot_energy_volume_curve + + +clusterexecutorlib_qeplot_energy_volume_curveInputs + + + + + + + +Inputs + + +clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_dict_0 + + + + + + + +get_dict_0: get_dict + + +clusterexecutorlib_qeget_dict_0Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_dict_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_dict_1 + + + + + + + +get_dict_1: get_dict + + +clusterexecutorlib_qeget_dict_1Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_dict_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_dict_2 + + + + + + + +get_dict_2: get_dict + + +clusterexecutorlib_qeget_dict_2Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_dict_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_dict_3 + + + + + + + +get_dict_3: get_dict + + +clusterexecutorlib_qeget_dict_3Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_dict_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_dict_4 + + + + + + + +get_dict_4: get_dict + + +clusterexecutorlib_qeget_dict_4Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_dict_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_dict_5 + + + + + + + +get_dict_5: get_dict + + +clusterexecutorlib_qeget_dict_5Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_dict_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_list_0 + + + + + + + +get_list_0: get_list + + +clusterexecutorlib_qeget_list_0Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_list_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeget_list_1 + + + + + + + +get_list_1: get_list + + +clusterexecutorlib_qeget_list_1Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeget_list_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414 + + + + + + + +injected_GetItem_m6720263453336892414: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622 + + + + + + + +injected_GetItem_m5192631277149654622: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366 + + + + + + + +injected_GetItem_m849577779288197366: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040 + + + + + + + +injected_GetItem_5951870909743653040: GetItem + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173 + + + + + + + +injected_GetItem_m7836207314751032173: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553 + + + + + + + +injected_GetItem_6433507487520335553: GetItem + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904 + + + + + + + +injected_GetItem_m7869024876371549904: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509 + + + + + + + +injected_GetItem_m4218471151653974509: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947 + + + + + + + +injected_GetItem_m1085943981688640947: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721 + + + + + + + +injected_GetItem_m7250078437459878721: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885 + + + + + + + +injected_GetItem_559636883763074885: GetItem + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243 + + + + + + + +injected_GetItem_3038824414599959243: GetItem + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857 + + + + + + + +injected_GetItem_m1872070586173770857: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813 + + + + + + + +injected_GetItem_6632549865328393813: GetItem + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434 + + + + + + + +injected_GetItem_8220875466878116434: GetItem + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284 + + + + + + + +injected_GetItem_m4760082579177574284: GetItem + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputs + + + + + + + +Inputs + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clusterexecutorlib_qeInputsrun + +run + + + +clusterexecutorlib_qeOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeInputsget_bulk_structure__element + +get_bulk_structure__element + + + +clusterexecutorlib_qeget_bulk_structureInputselement + +element + + + +clusterexecutorlib_qeInputsget_bulk_structure__element->clusterexecutorlib_qeget_bulk_structureInputselement + + + + + + +clusterexecutorlib_qeInputsget_bulk_structure__a + +get_bulk_structure__a + + + +clusterexecutorlib_qeget_bulk_structureInputsa + +a + + + +clusterexecutorlib_qeInputsget_bulk_structure__a->clusterexecutorlib_qeget_bulk_structureInputsa + + + + + + +clusterexecutorlib_qeInputsget_bulk_structure__cubic + +get_bulk_structure__cubic + + + +clusterexecutorlib_qeget_bulk_structureInputscubic + +cubic + + + +clusterexecutorlib_qeInputsget_bulk_structure__cubic->clusterexecutorlib_qeget_bulk_structureInputscubic + + + + + + +clusterexecutorlib_qeInputscalculate_qe_0__working_directory + +calculate_qe_0__working_directory + + + +clusterexecutorlib_qecalculate_qe_0Inputsworking_directory + +working_directory + + + +clusterexecutorlib_qeInputscalculate_qe_0__working_directory->clusterexecutorlib_qecalculate_qe_0Inputsworking_directory + + + + + + +clusterexecutorlib_qeInputsgenerate_structures__strain_lst + +generate_structures__strain_lst + + + +clusterexecutorlib_qegenerate_structuresInputsstrain_lst + +strain_lst + + + +clusterexecutorlib_qeInputsgenerate_structures__strain_lst->clusterexecutorlib_qegenerate_structuresInputsstrain_lst + + + + + + +clusterexecutorlib_qeInputscalculate_qe_1__working_directory + +calculate_qe_1__working_directory + + + +clusterexecutorlib_qecalculate_qe_1Inputsworking_directory + +working_directory + + + +clusterexecutorlib_qeInputscalculate_qe_1__working_directory->clusterexecutorlib_qecalculate_qe_1Inputsworking_directory + + + + + + +clusterexecutorlib_qeInputscalculate_qe_2__working_directory + +calculate_qe_2__working_directory + + + +clusterexecutorlib_qecalculate_qe_2Inputsworking_directory + +working_directory + + + +clusterexecutorlib_qeInputscalculate_qe_2__working_directory->clusterexecutorlib_qecalculate_qe_2Inputsworking_directory + + + + + + +clusterexecutorlib_qeInputscalculate_qe_3__working_directory + +calculate_qe_3__working_directory + + + +clusterexecutorlib_qecalculate_qe_3Inputsworking_directory + +working_directory + + + +clusterexecutorlib_qeInputscalculate_qe_3__working_directory->clusterexecutorlib_qecalculate_qe_3Inputsworking_directory + + + + + + +clusterexecutorlib_qeInputscalculate_qe_4__working_directory + +calculate_qe_4__working_directory + + + +clusterexecutorlib_qecalculate_qe_4Inputsworking_directory + +working_directory + + + +clusterexecutorlib_qeInputscalculate_qe_4__working_directory->clusterexecutorlib_qecalculate_qe_4Inputsworking_directory + + + + + + +clusterexecutorlib_qeInputscalculate_qe_5__working_directory + +calculate_qe_5__working_directory + + + +clusterexecutorlib_qecalculate_qe_5Inputsworking_directory + +working_directory + + + +clusterexecutorlib_qeInputscalculate_qe_5__working_directory->clusterexecutorlib_qecalculate_qe_5Inputsworking_directory + + + + + + +clusterexecutorlib_qeInputsget_dict_0__pseudopotentials + +get_dict_0__pseudopotentials + + + +clusterexecutorlib_qeget_dict_0Inputspseudopotentials + +pseudopotentials + + + +clusterexecutorlib_qeInputsget_dict_0__pseudopotentials->clusterexecutorlib_qeget_dict_0Inputspseudopotentials + + + + + + +clusterexecutorlib_qeInputsget_dict_0__kpts + +get_dict_0__kpts + + + +clusterexecutorlib_qeget_dict_0Inputskpts + +kpts + + + +clusterexecutorlib_qeInputsget_dict_0__kpts->clusterexecutorlib_qeget_dict_0Inputskpts + + + + + + +clusterexecutorlib_qeInputsget_dict_0__calculation + +get_dict_0__calculation + + + +clusterexecutorlib_qeget_dict_0Inputscalculation + +calculation + + + +clusterexecutorlib_qeInputsget_dict_0__calculation->clusterexecutorlib_qeget_dict_0Inputscalculation + + + + + + +clusterexecutorlib_qeInputsget_dict_0__smearing + +get_dict_0__smearing + + + +clusterexecutorlib_qeget_dict_0Inputssmearing + +smearing + + + +clusterexecutorlib_qeInputsget_dict_0__smearing->clusterexecutorlib_qeget_dict_0Inputssmearing + + + + + + +clusterexecutorlib_qeInputsget_dict_1__pseudopotentials + +get_dict_1__pseudopotentials + + + +clusterexecutorlib_qeget_dict_1Inputspseudopotentials + +pseudopotentials + + + +clusterexecutorlib_qeInputsget_dict_1__pseudopotentials->clusterexecutorlib_qeget_dict_1Inputspseudopotentials + + + + + + +clusterexecutorlib_qeInputsget_dict_1__kpts + +get_dict_1__kpts + + + +clusterexecutorlib_qeget_dict_1Inputskpts + +kpts + + + +clusterexecutorlib_qeInputsget_dict_1__kpts->clusterexecutorlib_qeget_dict_1Inputskpts + + + + + + +clusterexecutorlib_qeInputsget_dict_1__calculation + +get_dict_1__calculation + + + +clusterexecutorlib_qeget_dict_1Inputscalculation + +calculation + + + +clusterexecutorlib_qeInputsget_dict_1__calculation->clusterexecutorlib_qeget_dict_1Inputscalculation + + + + + + +clusterexecutorlib_qeInputsget_dict_1__smearing + +get_dict_1__smearing + + + +clusterexecutorlib_qeget_dict_1Inputssmearing + +smearing + + + +clusterexecutorlib_qeInputsget_dict_1__smearing->clusterexecutorlib_qeget_dict_1Inputssmearing + + + + + + +clusterexecutorlib_qeInputsget_dict_2__pseudopotentials + +get_dict_2__pseudopotentials + + + +clusterexecutorlib_qeget_dict_2Inputspseudopotentials + +pseudopotentials + + + +clusterexecutorlib_qeInputsget_dict_2__pseudopotentials->clusterexecutorlib_qeget_dict_2Inputspseudopotentials + + + + + + +clusterexecutorlib_qeInputsget_dict_2__kpts + +get_dict_2__kpts + + + +clusterexecutorlib_qeget_dict_2Inputskpts + +kpts + + + +clusterexecutorlib_qeInputsget_dict_2__kpts->clusterexecutorlib_qeget_dict_2Inputskpts + + + + + + +clusterexecutorlib_qeInputsget_dict_2__calculation + +get_dict_2__calculation + + + +clusterexecutorlib_qeget_dict_2Inputscalculation + +calculation + + + +clusterexecutorlib_qeInputsget_dict_2__calculation->clusterexecutorlib_qeget_dict_2Inputscalculation + + + + + + +clusterexecutorlib_qeInputsget_dict_2__smearing + +get_dict_2__smearing + + + +clusterexecutorlib_qeget_dict_2Inputssmearing + +smearing + + + +clusterexecutorlib_qeInputsget_dict_2__smearing->clusterexecutorlib_qeget_dict_2Inputssmearing + + + + + + +clusterexecutorlib_qeInputsget_dict_3__pseudopotentials + +get_dict_3__pseudopotentials + + + +clusterexecutorlib_qeget_dict_3Inputspseudopotentials + +pseudopotentials + + + +clusterexecutorlib_qeInputsget_dict_3__pseudopotentials->clusterexecutorlib_qeget_dict_3Inputspseudopotentials + + + + + + +clusterexecutorlib_qeInputsget_dict_3__kpts + +get_dict_3__kpts + + + +clusterexecutorlib_qeget_dict_3Inputskpts + +kpts + + + +clusterexecutorlib_qeInputsget_dict_3__kpts->clusterexecutorlib_qeget_dict_3Inputskpts + + + + + + +clusterexecutorlib_qeInputsget_dict_3__calculation + +get_dict_3__calculation + + + +clusterexecutorlib_qeget_dict_3Inputscalculation + +calculation + + + +clusterexecutorlib_qeInputsget_dict_3__calculation->clusterexecutorlib_qeget_dict_3Inputscalculation + + + + + + +clusterexecutorlib_qeInputsget_dict_3__smearing + +get_dict_3__smearing + + + +clusterexecutorlib_qeget_dict_3Inputssmearing + +smearing + + + +clusterexecutorlib_qeInputsget_dict_3__smearing->clusterexecutorlib_qeget_dict_3Inputssmearing + + + + + + +clusterexecutorlib_qeInputsget_dict_4__pseudopotentials + +get_dict_4__pseudopotentials + + + +clusterexecutorlib_qeget_dict_4Inputspseudopotentials + +pseudopotentials + + + +clusterexecutorlib_qeInputsget_dict_4__pseudopotentials->clusterexecutorlib_qeget_dict_4Inputspseudopotentials + + + + + + +clusterexecutorlib_qeInputsget_dict_4__kpts + +get_dict_4__kpts + + + +clusterexecutorlib_qeget_dict_4Inputskpts + +kpts + + + +clusterexecutorlib_qeInputsget_dict_4__kpts->clusterexecutorlib_qeget_dict_4Inputskpts + + + + + + +clusterexecutorlib_qeInputsget_dict_4__calculation + +get_dict_4__calculation + + + +clusterexecutorlib_qeget_dict_4Inputscalculation + +calculation + + + +clusterexecutorlib_qeInputsget_dict_4__calculation->clusterexecutorlib_qeget_dict_4Inputscalculation + + + + + + +clusterexecutorlib_qeInputsget_dict_4__smearing + +get_dict_4__smearing + + + +clusterexecutorlib_qeget_dict_4Inputssmearing + +smearing + + + +clusterexecutorlib_qeInputsget_dict_4__smearing->clusterexecutorlib_qeget_dict_4Inputssmearing + + + + + + +clusterexecutorlib_qeInputsget_dict_5__pseudopotentials + +get_dict_5__pseudopotentials + + + +clusterexecutorlib_qeget_dict_5Inputspseudopotentials + +pseudopotentials + + + +clusterexecutorlib_qeInputsget_dict_5__pseudopotentials->clusterexecutorlib_qeget_dict_5Inputspseudopotentials + + + + + + +clusterexecutorlib_qeInputsget_dict_5__kpts + +get_dict_5__kpts + + + +clusterexecutorlib_qeget_dict_5Inputskpts + +kpts + + + +clusterexecutorlib_qeInputsget_dict_5__kpts->clusterexecutorlib_qeget_dict_5Inputskpts + + + + + + +clusterexecutorlib_qeInputsget_dict_5__calculation + +get_dict_5__calculation + + + +clusterexecutorlib_qeget_dict_5Inputscalculation + +calculation + + + +clusterexecutorlib_qeInputsget_dict_5__calculation->clusterexecutorlib_qeget_dict_5Inputscalculation + + + + + + +clusterexecutorlib_qeInputsget_dict_5__smearing + +get_dict_5__smearing + + + +clusterexecutorlib_qeget_dict_5Inputssmearing + +smearing + + + +clusterexecutorlib_qeInputsget_dict_5__smearing->clusterexecutorlib_qeget_dict_5Inputssmearing + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m6720263453336892414__item + +injected_GetItem_m6720263453336892414__item + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m6720263453336892414__item->clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m5192631277149654622__item + +injected_GetItem_m5192631277149654622__item + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m5192631277149654622__item->clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m849577779288197366__item + +injected_GetItem_m849577779288197366__item + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m849577779288197366__item->clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_5951870909743653040__item + +injected_GetItem_5951870909743653040__item + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_5951870909743653040__item->clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m7836207314751032173__item + +injected_GetItem_m7836207314751032173__item + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m7836207314751032173__item->clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_6433507487520335553__item + +injected_GetItem_6433507487520335553__item + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_6433507487520335553__item->clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m7869024876371549904__item + +injected_GetItem_m7869024876371549904__item + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m7869024876371549904__item->clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m4218471151653974509__item + +injected_GetItem_m4218471151653974509__item + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m4218471151653974509__item->clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m1085943981688640947__item + +injected_GetItem_m1085943981688640947__item + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m1085943981688640947__item->clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m7250078437459878721__item + +injected_GetItem_m7250078437459878721__item + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m7250078437459878721__item->clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_559636883763074885__item + +injected_GetItem_559636883763074885__item + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_559636883763074885__item->clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_3038824414599959243__item + +injected_GetItem_3038824414599959243__item + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_3038824414599959243__item->clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m1872070586173770857__item + +injected_GetItem_m1872070586173770857__item + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m1872070586173770857__item->clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_6632549865328393813__item + +injected_GetItem_6632549865328393813__item + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_6632549865328393813__item->clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_8220875466878116434__item + +injected_GetItem_8220875466878116434__item + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_8220875466878116434__item->clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsitem + + + + + + +clusterexecutorlib_qeInputsinjected_GetItem_m4760082579177574284__item + +injected_GetItem_m4760082579177574284__item + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsitem + +item + + + +clusterexecutorlib_qeInputsinjected_GetItem_m4760082579177574284__item->clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsitem + + + + + + +clusterexecutorlib_qeOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + +plot_energy_volume_curve__plot_energy_volume_curve + + + +clusterexecutorlib_qeget_bulk_structureInputsrun + +run + + + +clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_bulk_structureInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionget_bulk_structure + +get_bulk_structure + + + +clusterexecutorlib_qeget_dict_0Inputsstructure + +structure + + + +clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusterexecutorlib_qeget_dict_0Inputsstructure + + + + + + +clusterexecutorlib_qecalculate_qe_0Inputsrun + +run + + + +clusterexecutorlib_qecalculate_qe_0OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qecalculate_qe_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qecalculate_qe_0Inputsinput_dict + +input_dict + + + +clusterexecutorlib_qecalculate_qe_0OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0 + +calculate_qe_0 + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsobj + + + + + + +clusterexecutorlib_qegenerate_structuresInputsrun + +run + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qegenerate_structuresInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qegenerate_structuresInputsstructure + +structure + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures + +generate_structures + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsobj + +obj + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsobj + +obj + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsobj + +obj + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsobj + +obj + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsobj + +obj + + + +clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsobj + + + + + + +clusterexecutorlib_qecalculate_qe_1Inputsrun + +run + + + +clusterexecutorlib_qecalculate_qe_1OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qecalculate_qe_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qecalculate_qe_1Inputsinput_dict + +input_dict + + + +clusterexecutorlib_qecalculate_qe_1OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1 + +calculate_qe_1 + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsobj + + + + + + +clusterexecutorlib_qecalculate_qe_2Inputsrun + +run + + + +clusterexecutorlib_qecalculate_qe_2OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qecalculate_qe_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qecalculate_qe_2Inputsinput_dict + +input_dict + + + +clusterexecutorlib_qecalculate_qe_2OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2 + +calculate_qe_2 + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsobj + + + + + + +clusterexecutorlib_qecalculate_qe_3Inputsrun + +run + + + +clusterexecutorlib_qecalculate_qe_3OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qecalculate_qe_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qecalculate_qe_3Inputsinput_dict + +input_dict + + + +clusterexecutorlib_qecalculate_qe_3OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3 + +calculate_qe_3 + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsobj + + + + + + +clusterexecutorlib_qecalculate_qe_4Inputsrun + +run + + + +clusterexecutorlib_qecalculate_qe_4OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qecalculate_qe_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qecalculate_qe_4Inputsinput_dict + +input_dict + + + +clusterexecutorlib_qecalculate_qe_4OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4 + +calculate_qe_4 + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsobj + + + + + + +clusterexecutorlib_qecalculate_qe_5Inputsrun + +run + + + +clusterexecutorlib_qecalculate_qe_5OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qecalculate_qe_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qecalculate_qe_5Inputsinput_dict + +input_dict + + + +clusterexecutorlib_qecalculate_qe_5OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5 + +calculate_qe_5 + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsobj + + + + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsobj + +obj + + + +clusterexecutorlib_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsobj + + + + + + +clusterexecutorlib_qeplot_energy_volume_curveInputsrun + +run + + + +clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeplot_energy_volume_curveInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeplot_energy_volume_curveInputsvolume_lst + +volume_lst + + + +clusterexecutorlib_qeplot_energy_volume_curveInputsenergy_lst + +energy_lst + + + +clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve + +plot_energy_volume_curve + + + +clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusterexecutorlib_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + + + + + + +clusterexecutorlib_qeget_dict_0Inputsrun + +run + + + +clusterexecutorlib_qeget_dict_0OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_dict_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_dict_0OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_dict_0OutputsWithInjectionget_dict_0 + +get_dict_0 + + + +clusterexecutorlib_qeget_dict_0OutputsWithInjectionget_dict_0->clusterexecutorlib_qecalculate_qe_0Inputsinput_dict + + + + + + +clusterexecutorlib_qeget_dict_1Inputsrun + +run + + + +clusterexecutorlib_qeget_dict_1OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_dict_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_dict_1Inputsstructure + +structure + + + +clusterexecutorlib_qeget_dict_1OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_dict_1OutputsWithInjectionget_dict_1 + +get_dict_1 + + + +clusterexecutorlib_qeget_dict_1OutputsWithInjectionget_dict_1->clusterexecutorlib_qecalculate_qe_1Inputsinput_dict + + + + + + +clusterexecutorlib_qeget_dict_2Inputsrun + +run + + + +clusterexecutorlib_qeget_dict_2OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_dict_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_dict_2Inputsstructure + +structure + + + +clusterexecutorlib_qeget_dict_2OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_dict_2OutputsWithInjectionget_dict_2 + +get_dict_2 + + + +clusterexecutorlib_qeget_dict_2OutputsWithInjectionget_dict_2->clusterexecutorlib_qecalculate_qe_2Inputsinput_dict + + + + + + +clusterexecutorlib_qeget_dict_3Inputsrun + +run + + + +clusterexecutorlib_qeget_dict_3OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_dict_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_dict_3Inputsstructure + +structure + + + +clusterexecutorlib_qeget_dict_3OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_dict_3OutputsWithInjectionget_dict_3 + +get_dict_3 + + + +clusterexecutorlib_qeget_dict_3OutputsWithInjectionget_dict_3->clusterexecutorlib_qecalculate_qe_3Inputsinput_dict + + + + + + +clusterexecutorlib_qeget_dict_4Inputsrun + +run + + + +clusterexecutorlib_qeget_dict_4OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_dict_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_dict_4Inputsstructure + +structure + + + +clusterexecutorlib_qeget_dict_4OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_dict_4OutputsWithInjectionget_dict_4 + +get_dict_4 + + + +clusterexecutorlib_qeget_dict_4OutputsWithInjectionget_dict_4->clusterexecutorlib_qecalculate_qe_4Inputsinput_dict + + + + + + +clusterexecutorlib_qeget_dict_5Inputsrun + +run + + + +clusterexecutorlib_qeget_dict_5OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_dict_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_dict_5Inputsstructure + +structure + + + +clusterexecutorlib_qeget_dict_5OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_dict_5OutputsWithInjectionget_dict_5 + +get_dict_5 + + + +clusterexecutorlib_qeget_dict_5OutputsWithInjectionget_dict_5->clusterexecutorlib_qecalculate_qe_5Inputsinput_dict + + + + + + +clusterexecutorlib_qeget_list_0Inputsrun + +run + + + +clusterexecutorlib_qeget_list_0OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_list_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_list_0Inputss_0 + +s_0 + + + +clusterexecutorlib_qeget_list_0Inputss_1 + +s_1 + + + +clusterexecutorlib_qeget_list_0Inputss_2 + +s_2 + + + +clusterexecutorlib_qeget_list_0Inputss_3 + +s_3 + + + +clusterexecutorlib_qeget_list_0Inputss_4 + +s_4 + + + +clusterexecutorlib_qeget_list_0OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_list_0OutputsWithInjectionget_list_0 + +get_list_0 + + + +clusterexecutorlib_qeget_list_0OutputsWithInjectionget_list_0->clusterexecutorlib_qeplot_energy_volume_curveInputsvolume_lst + + + + + + +clusterexecutorlib_qeget_list_1Inputsrun + +run + + + +clusterexecutorlib_qeget_list_1OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeget_list_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeget_list_1Inputss_0 + +s_0 + + + +clusterexecutorlib_qeget_list_1Inputss_1 + +s_1 + + + +clusterexecutorlib_qeget_list_1Inputss_2 + +s_2 + + + +clusterexecutorlib_qeget_list_1Inputss_3 + +s_3 + + + +clusterexecutorlib_qeget_list_1Inputss_4 + +s_4 + + + +clusterexecutorlib_qeget_list_1OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeget_list_1OutputsWithInjectionget_list_1 + +get_list_1 + + + +clusterexecutorlib_qeget_list_1OutputsWithInjectionget_list_1->clusterexecutorlib_qeplot_energy_volume_curveInputsenergy_lst + + + + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectiongetitem->clusterexecutorlib_qegenerate_structuresInputsstructure + + + + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_1Inputsstructure + + + + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_2Inputsstructure + + + + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_3Inputsstructure + + + + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_4Inputsstructure + + + + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_5Inputsstructure + + + + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_0 + + + + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_1 + + + + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_2 + + + + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_3 + + + + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_4 + + + + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_0 + + + + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_1 + + + + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_2 + + + + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_3 + + + + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsrun + +run + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_4 + + + + + + \ No newline at end of file diff --git a/_images/6f6da46da690bd26d047e41549ff941040f4095fd3ec6ca52ef33a03ec716c52.svg b/_images/6f6da46da690bd26d047e41549ff941040f4095fd3ec6ca52ef33a03ec716c52.svg new file mode 100644 index 00000000..140f22f2 --- /dev/null +++ b/_images/6f6da46da690bd26d047e41549ff941040f4095fd3ec6ca52ef33a03ec716c52.svg @@ -0,0 +1,233 @@ + + + + + +create_function_job_724cfd00ffeb70f8b463a938195e0447 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7cace97128d0> + + + +macros_tex_b52804e5fa845b3657fa99b738e02cf7 + +macros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9712660> + + + +macros_tex_b52804e5fa845b3657fa99b738e02cf7->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + +pvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9712330> + + + +pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + +poisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711fd0> + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +plot_file_554a54a50a86b23416c0daf6ab0938df + +plot_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9712330> + + + +poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +plot_file_554a54a50a86b23416c0daf6ab0938df->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1 + +meshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711d60> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + +poisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711fa0> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +ndofs_e826761b60042b070e0c0a24b472ee26 + +ndofs=<pyiron_base.project.delayed.DelayedObject object at 0x7cace97123c0> + + + +meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +ndofs_e826761b60042b070e0c0a24b472ee26->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + +gmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace97119a0> + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe + +meshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711d30> + + + +gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20 + +domain_size=2.0 + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696 + +source_directory=/home/jovyan/example_workflows/nfdi/source + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_724cfd00ffeb70f8b463a938195e0447 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_b52804e5fa845b3657fa99b738e02cf7 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_554a54a50a86b23416c0daf6ab0938df + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_e826761b60042b070e0c0a24b472ee26 + + + + + +source_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4 + + + + + \ No newline at end of file diff --git a/_images/7045e8f7374529d60f580172b8cb8d91556299a803d83722150f13ea82b95d70.svg b/_images/7045e8f7374529d60f580172b8cb8d91556299a803d83722150f13ea82b95d70.svg new file mode 100644 index 00000000..a369a199 --- /dev/null +++ b/_images/7045e8f7374529d60f580172b8cb8d91556299a803d83722150f13ea82b95d70.svg @@ -0,0 +1,83 @@ + + + + + +create_function_job_25906340bd0c28c44fd73d69e7a3d8bc + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x749611736a50> + + + +x_1a7fff02f6473a13e5e8742988186611 + +x=<pyiron_base.project.delayed.DelayedObject object at 0x7496117367e0> + + + +x_1a7fff02f6473a13e5e8742988186611->create_function_job_25906340bd0c28c44fd73d69e7a3d8bc + + + + + +x_e4655695917c433de56d1c64232473f9 + +x=<pyiron_base.project.delayed.DelayedObject object at 0x74961213ea50> + + + +x_e4655695917c433de56d1c64232473f9->x_1a7fff02f6473a13e5e8742988186611 + + + + + +x_1d847da32ecaabf6731c38f798c3d4ce + +x=1 + + + +x_1d847da32ecaabf6731c38f798c3d4ce->x_e4655695917c433de56d1c64232473f9 + + + + + +y_3b83397feef07a74d9a046a1b7f57749 + +y=<pyiron_base.project.delayed.DelayedObject object at 0x74961eca0a10> + + + +x_1d847da32ecaabf6731c38f798c3d4ce->y_3b83397feef07a74d9a046a1b7f57749 + + + + + +y_3b83397feef07a74d9a046a1b7f57749->x_1a7fff02f6473a13e5e8742988186611 + + + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6 + +y=2 + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6->x_e4655695917c433de56d1c64232473f9 + + + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6->y_3b83397feef07a74d9a046a1b7f57749 + + + + + \ No newline at end of file diff --git a/_images/716c714c3727df7a3690e0f361d25a2bfab01c3532c7a71e88a04222fb8abd27.svg b/_images/716c714c3727df7a3690e0f361d25a2bfab01c3532c7a71e88a04222fb8abd27.svg new file mode 100644 index 00000000..dfc0d575 --- /dev/null +++ b/_images/716c714c3727df7a3690e0f361d25a2bfab01c3532c7a71e88a04222fb8abd27.svg @@ -0,0 +1,74 @@ + + + + + +0 + +workflow.get_prod_and_div + + + +1 + +workflow.get_sum + + + +0->1 + + + + + +2 + +workflow.get_square + + + +1->2 + + +x + + + +5 + +result + + + +2->5 + + + + + +3 + +1 + + + +3->0 + + +x + + + +4 + +2 + + + +4->0 + + +y + + + \ No newline at end of file diff --git a/_images/768145f15460ab99c2562ce483593c6d58faf502f57b3b81effc41c09e25efc8.svg b/_images/768145f15460ab99c2562ce483593c6d58faf502f57b3b81effc41c09e25efc8.svg new file mode 100644 index 00000000..cdf6d49f --- /dev/null +++ b/_images/768145f15460ab99c2562ce483593c6d58faf502f57b3b81effc41c09e25efc8.svg @@ -0,0 +1,535 @@ + + + + + + +clustermy_workflow + +my_workflow: Workflow + +clustermy_workflowInputs + + + + + + + +Inputs + + +clustermy_workflowOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowprod_and_div + + + + + + + +prod_and_div: get_prod_and_div + + +clustermy_workflowprod_and_divInputs + + + + + + + +Inputs + + +clustermy_workflowprod_and_divOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m277194796397263432 + + + + + + + +injected_GetItem_m277194796397263432: GetItem + + +clustermy_workflowinjected_GetItem_m277194796397263432Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m7247062725966739531 + + + + + + + +injected_GetItem_m7247062725966739531: GetItem + + +clustermy_workflowinjected_GetItem_m7247062725966739531Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowtmp_sum + + + + + + + +tmp_sum: get_sum + + +clustermy_workflowtmp_sumInputs + + + + + + + +Inputs + + +clustermy_workflowtmp_sumOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowsquare_result + + + + + + + +square_result: get_square + + +clustermy_workflowsquare_resultInputs + + + + + + + +Inputs + + +clustermy_workflowsquare_resultOutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clustermy_workflowInputsrun + +run + + + +clustermy_workflowOutputsWithInjectionran + +ran + + + + +clustermy_workflowInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowInputsprod_and_div__x + +prod_and_div__x + + + +clustermy_workflowprod_and_divInputsx + +x + + + +clustermy_workflowInputsprod_and_div__x->clustermy_workflowprod_and_divInputsx + + + + + + +clustermy_workflowInputsprod_and_div__y + +prod_and_div__y + + + +clustermy_workflowprod_and_divInputsy + +y + + + +clustermy_workflowInputsprod_and_div__y->clustermy_workflowprod_and_divInputsy + + + + + + +clustermy_workflowInputsinjected_GetItem_m277194796397263432__item + +injected_GetItem_m277194796397263432__item + + + +clustermy_workflowinjected_GetItem_m277194796397263432Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m277194796397263432__item->clustermy_workflowinjected_GetItem_m277194796397263432Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m7247062725966739531__item + +injected_GetItem_m7247062725966739531__item + + + +clustermy_workflowinjected_GetItem_m7247062725966739531Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m7247062725966739531__item->clustermy_workflowinjected_GetItem_m7247062725966739531Inputsitem + + + + + + +clustermy_workflowOutputsWithInjectionfailed + +failed + + + +clustermy_workflowOutputsWithInjectionsquare_result__get_square + +square_result__get_square + + + +clustermy_workflowprod_and_divInputsrun + +run + + + +clustermy_workflowprod_and_divOutputsWithInjectionran + +ran + + + + +clustermy_workflowprod_and_divInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowprod_and_divOutputsWithInjectionfailed + +failed + + + +clustermy_workflowprod_and_divOutputsWithInjectionget_prod_and_div + +get_prod_and_div + + + +clustermy_workflowinjected_GetItem_m277194796397263432Inputsobj + +obj + + + +clustermy_workflowprod_and_divOutputsWithInjectionget_prod_and_div->clustermy_workflowinjected_GetItem_m277194796397263432Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m7247062725966739531Inputsobj + +obj + + + +clustermy_workflowprod_and_divOutputsWithInjectionget_prod_and_div->clustermy_workflowinjected_GetItem_m7247062725966739531Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m277194796397263432Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m277194796397263432Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowtmp_sumInputsx + +x + + + +clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectiongetitem->clustermy_workflowtmp_sumInputsx + + + + + + +clustermy_workflowinjected_GetItem_m7247062725966739531Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m7247062725966739531Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowtmp_sumInputsy + +y + + + +clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectiongetitem->clustermy_workflowtmp_sumInputsy + + + + + + +clustermy_workflowtmp_sumInputsrun + +run + + + +clustermy_workflowtmp_sumOutputsWithInjectionran + +ran + + + + +clustermy_workflowtmp_sumInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowtmp_sumOutputsWithInjectionfailed + +failed + + + +clustermy_workflowtmp_sumOutputsWithInjectionget_sum + +get_sum + + + +clustermy_workflowsquare_resultInputsx + +x + + + +clustermy_workflowtmp_sumOutputsWithInjectionget_sum->clustermy_workflowsquare_resultInputsx + + + + + + +clustermy_workflowsquare_resultInputsrun + +run + + + +clustermy_workflowsquare_resultOutputsWithInjectionran + +ran + + + + +clustermy_workflowsquare_resultInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowsquare_resultOutputsWithInjectionfailed + +failed + + + +clustermy_workflowsquare_resultOutputsWithInjectionget_square + +get_square + + + +clustermy_workflowsquare_resultOutputsWithInjectionget_square->clustermy_workflowOutputsWithInjectionsquare_result__get_square + + + + + + \ No newline at end of file diff --git a/_images/841b2f82f5e9b5556144ca874180b09bffcdd834029ff513d9c8e068d505f17e.svg b/_images/841b2f82f5e9b5556144ca874180b09bffcdd834029ff513d9c8e068d505f17e.svg new file mode 100644 index 00000000..20745639 --- /dev/null +++ b/_images/841b2f82f5e9b5556144ca874180b09bffcdd834029ff513d9c8e068d505f17e.svg @@ -0,0 +1,3669 @@ + + + + + + +clusteraiida_qe + +aiida_qe: Workflow + +clusteraiida_qeInputs + + + + + + + +Inputs + + +clusteraiida_qeOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_bulk_structure + + + + + + + +get_bulk_structure: get_bulk_structure + + +clusteraiida_qeget_bulk_structureInputs + + + + + + + +Inputs + + +clusteraiida_qeget_bulk_structureOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_dict_0 + + + + + + + +get_dict_0: get_dict + + +clusteraiida_qeget_dict_0Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_dict_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qecalculate_qe_0 + + + + + + + +calculate_qe_0: calculate_qe + + +clusteraiida_qecalculate_qe_0Inputs + + + + + + + +Inputs + + +clusteraiida_qecalculate_qe_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qegenerate_structures + + + + + + + +generate_structures: generate_structures + + +clusteraiida_qegenerate_structuresInputs + + + + + + + +Inputs + + +clusteraiida_qegenerate_structuresOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_list_0 + + + + + + + +get_list_0: get_list + + +clusteraiida_qeget_list_0Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_list_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_list_1 + + + + + + + +get_list_1: get_list + + +clusteraiida_qeget_list_1Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_list_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_dict_1 + + + + + + + +get_dict_1: get_dict + + +clusteraiida_qeget_dict_1Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_dict_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qecalculate_qe_1 + + + + + + + +calculate_qe_1: calculate_qe + + +clusteraiida_qecalculate_qe_1Inputs + + + + + + + +Inputs + + +clusteraiida_qecalculate_qe_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_dict_2 + + + + + + + +get_dict_2: get_dict + + +clusteraiida_qeget_dict_2Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_dict_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qecalculate_qe_2 + + + + + + + +calculate_qe_2: calculate_qe + + +clusteraiida_qecalculate_qe_2Inputs + + + + + + + +Inputs + + +clusteraiida_qecalculate_qe_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_dict_3 + + + + + + + +get_dict_3: get_dict + + +clusteraiida_qeget_dict_3Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_dict_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qecalculate_qe_3 + + + + + + + +calculate_qe_3: calculate_qe + + +clusteraiida_qecalculate_qe_3Inputs + + + + + + + +Inputs + + +clusteraiida_qecalculate_qe_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_dict_4 + + + + + + + +get_dict_4: get_dict + + +clusteraiida_qeget_dict_4Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_dict_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qecalculate_qe_4 + + + + + + + +calculate_qe_4: calculate_qe + + +clusteraiida_qecalculate_qe_4Inputs + + + + + + + +Inputs + + +clusteraiida_qecalculate_qe_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeget_dict_5 + + + + + + + +get_dict_5: get_dict + + +clusteraiida_qeget_dict_5Inputs + + + + + + + +Inputs + + +clusteraiida_qeget_dict_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qecalculate_qe_5 + + + + + + + +calculate_qe_5: calculate_qe + + +clusteraiida_qecalculate_qe_5Inputs + + + + + + + +Inputs + + +clusteraiida_qecalculate_qe_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeplot_energy_volume_curve + + + + + + + +plot_energy_volume_curve: plot_energy_volume_curve + + +clusteraiida_qeplot_energy_volume_curveInputs + + + + + + + +Inputs + + +clusteraiida_qeplot_energy_volume_curveOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_2859163708959743150 + + + + + + + +injected_GetItem_2859163708959743150: GetItem + + +clusteraiida_qeinjected_GetItem_2859163708959743150Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_2095185757530090309 + + + + + + + +injected_GetItem_2095185757530090309: GetItem + + +clusteraiida_qeinjected_GetItem_2095185757530090309Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m6396244699285524644 + + + + + + + +injected_GetItem_m6396244699285524644: GetItem + + +clusteraiida_qeinjected_GetItem_m6396244699285524644Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m3217087382920924098 + + + + + + + +injected_GetItem_m3217087382920924098: GetItem + + +clusteraiida_qeinjected_GetItem_m3217087382920924098Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m1410919064082391699 + + + + + + + +injected_GetItem_m1410919064082391699: GetItem + + +clusteraiida_qeinjected_GetItem_m1410919064082391699Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m9115075428129331383 + + + + + + + +injected_GetItem_m9115075428129331383: GetItem + + +clusteraiida_qeinjected_GetItem_m9115075428129331383Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m7237000809964411643 + + + + + + + +injected_GetItem_m7237000809964411643: GetItem + + +clusteraiida_qeinjected_GetItem_m7237000809964411643Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m5860620980043280550 + + + + + + + +injected_GetItem_m5860620980043280550: GetItem + + +clusteraiida_qeinjected_GetItem_m5860620980043280550Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m6458391072898921223 + + + + + + + +injected_GetItem_m6458391072898921223: GetItem + + +clusteraiida_qeinjected_GetItem_m6458391072898921223Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_1684197267152821370 + + + + + + + +injected_GetItem_1684197267152821370: GetItem + + +clusteraiida_qeinjected_GetItem_1684197267152821370Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_3919628805879474670 + + + + + + + +injected_GetItem_3919628805879474670: GetItem + + +clusteraiida_qeinjected_GetItem_3919628805879474670Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m740119179149754946 + + + + + + + +injected_GetItem_m740119179149754946: GetItem + + +clusteraiida_qeinjected_GetItem_m740119179149754946Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_2084798752545049754 + + + + + + + +injected_GetItem_2084798752545049754: GetItem + + +clusteraiida_qeinjected_GetItem_2084798752545049754Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_2761976441505203068 + + + + + + + +injected_GetItem_2761976441505203068: GetItem + + +clusteraiida_qeinjected_GetItem_2761976441505203068Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m4556998621263697855 + + + + + + + +injected_GetItem_m4556998621263697855: GetItem + + +clusteraiida_qeinjected_GetItem_m4556998621263697855Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusteraiida_qeinjected_GetItem_m9206283876700615862 + + + + + + + +injected_GetItem_m9206283876700615862: GetItem + + +clusteraiida_qeinjected_GetItem_m9206283876700615862Inputs + + + + + + + +Inputs + + +clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clusteraiida_qeInputsrun + +run + + + +clusteraiida_qeOutputsWithInjectionran + +ran + + + + +clusteraiida_qeInputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeInputsget_bulk_structure__element + +get_bulk_structure__element + + + +clusteraiida_qeget_bulk_structureInputselement + +element + + + +clusteraiida_qeInputsget_bulk_structure__element->clusteraiida_qeget_bulk_structureInputselement + + + + + + +clusteraiida_qeInputsget_bulk_structure__a + +get_bulk_structure__a + + + +clusteraiida_qeget_bulk_structureInputsa + +a + + + +clusteraiida_qeInputsget_bulk_structure__a->clusteraiida_qeget_bulk_structureInputsa + + + + + + +clusteraiida_qeInputsget_bulk_structure__cubic + +get_bulk_structure__cubic + + + +clusteraiida_qeget_bulk_structureInputscubic + +cubic + + + +clusteraiida_qeInputsget_bulk_structure__cubic->clusteraiida_qeget_bulk_structureInputscubic + + + + + + +clusteraiida_qeInputsget_dict_0__calculation + +get_dict_0__calculation + + + +clusteraiida_qeget_dict_0Inputscalculation + +calculation + + + +clusteraiida_qeInputsget_dict_0__calculation->clusteraiida_qeget_dict_0Inputscalculation + + + + + + +clusteraiida_qeInputsget_dict_0__kpts + +get_dict_0__kpts + + + +clusteraiida_qeget_dict_0Inputskpts + +kpts + + + +clusteraiida_qeInputsget_dict_0__kpts->clusteraiida_qeget_dict_0Inputskpts + + + + + + +clusteraiida_qeInputsget_dict_0__pseudopotentials + +get_dict_0__pseudopotentials + + + +clusteraiida_qeget_dict_0Inputspseudopotentials + +pseudopotentials + + + +clusteraiida_qeInputsget_dict_0__pseudopotentials->clusteraiida_qeget_dict_0Inputspseudopotentials + + + + + + +clusteraiida_qeInputsget_dict_0__smearing + +get_dict_0__smearing + + + +clusteraiida_qeget_dict_0Inputssmearing + +smearing + + + +clusteraiida_qeInputsget_dict_0__smearing->clusteraiida_qeget_dict_0Inputssmearing + + + + + + +clusteraiida_qeInputscalculate_qe_0__working_directory + +calculate_qe_0__working_directory + + + +clusteraiida_qecalculate_qe_0Inputsworking_directory + +working_directory + + + +clusteraiida_qeInputscalculate_qe_0__working_directory->clusteraiida_qecalculate_qe_0Inputsworking_directory + + + + + + +clusteraiida_qeInputsgenerate_structures__strain_lst + +generate_structures__strain_lst + + + +clusteraiida_qegenerate_structuresInputsstrain_lst + +strain_lst + + + +clusteraiida_qeInputsgenerate_structures__strain_lst->clusteraiida_qegenerate_structuresInputsstrain_lst + + + + + + +clusteraiida_qeInputsget_dict_1__calculation + +get_dict_1__calculation + + + +clusteraiida_qeget_dict_1Inputscalculation + +calculation + + + +clusteraiida_qeInputsget_dict_1__calculation->clusteraiida_qeget_dict_1Inputscalculation + + + + + + +clusteraiida_qeInputsget_dict_1__kpts + +get_dict_1__kpts + + + +clusteraiida_qeget_dict_1Inputskpts + +kpts + + + +clusteraiida_qeInputsget_dict_1__kpts->clusteraiida_qeget_dict_1Inputskpts + + + + + + +clusteraiida_qeInputsget_dict_1__pseudopotentials + +get_dict_1__pseudopotentials + + + +clusteraiida_qeget_dict_1Inputspseudopotentials + +pseudopotentials + + + +clusteraiida_qeInputsget_dict_1__pseudopotentials->clusteraiida_qeget_dict_1Inputspseudopotentials + + + + + + +clusteraiida_qeInputsget_dict_1__smearing + +get_dict_1__smearing + + + +clusteraiida_qeget_dict_1Inputssmearing + +smearing + + + +clusteraiida_qeInputsget_dict_1__smearing->clusteraiida_qeget_dict_1Inputssmearing + + + + + + +clusteraiida_qeInputscalculate_qe_1__working_directory + +calculate_qe_1__working_directory + + + +clusteraiida_qecalculate_qe_1Inputsworking_directory + +working_directory + + + +clusteraiida_qeInputscalculate_qe_1__working_directory->clusteraiida_qecalculate_qe_1Inputsworking_directory + + + + + + +clusteraiida_qeInputsget_dict_2__calculation + +get_dict_2__calculation + + + +clusteraiida_qeget_dict_2Inputscalculation + +calculation + + + +clusteraiida_qeInputsget_dict_2__calculation->clusteraiida_qeget_dict_2Inputscalculation + + + + + + +clusteraiida_qeInputsget_dict_2__kpts + +get_dict_2__kpts + + + +clusteraiida_qeget_dict_2Inputskpts + +kpts + + + +clusteraiida_qeInputsget_dict_2__kpts->clusteraiida_qeget_dict_2Inputskpts + + + + + + +clusteraiida_qeInputsget_dict_2__pseudopotentials + +get_dict_2__pseudopotentials + + + +clusteraiida_qeget_dict_2Inputspseudopotentials + +pseudopotentials + + + +clusteraiida_qeInputsget_dict_2__pseudopotentials->clusteraiida_qeget_dict_2Inputspseudopotentials + + + + + + +clusteraiida_qeInputsget_dict_2__smearing + +get_dict_2__smearing + + + +clusteraiida_qeget_dict_2Inputssmearing + +smearing + + + +clusteraiida_qeInputsget_dict_2__smearing->clusteraiida_qeget_dict_2Inputssmearing + + + + + + +clusteraiida_qeInputscalculate_qe_2__working_directory + +calculate_qe_2__working_directory + + + +clusteraiida_qecalculate_qe_2Inputsworking_directory + +working_directory + + + +clusteraiida_qeInputscalculate_qe_2__working_directory->clusteraiida_qecalculate_qe_2Inputsworking_directory + + + + + + +clusteraiida_qeInputsget_dict_3__calculation + +get_dict_3__calculation + + + +clusteraiida_qeget_dict_3Inputscalculation + +calculation + + + +clusteraiida_qeInputsget_dict_3__calculation->clusteraiida_qeget_dict_3Inputscalculation + + + + + + +clusteraiida_qeInputsget_dict_3__kpts + +get_dict_3__kpts + + + +clusteraiida_qeget_dict_3Inputskpts + +kpts + + + +clusteraiida_qeInputsget_dict_3__kpts->clusteraiida_qeget_dict_3Inputskpts + + + + + + +clusteraiida_qeInputsget_dict_3__pseudopotentials + +get_dict_3__pseudopotentials + + + +clusteraiida_qeget_dict_3Inputspseudopotentials + +pseudopotentials + + + +clusteraiida_qeInputsget_dict_3__pseudopotentials->clusteraiida_qeget_dict_3Inputspseudopotentials + + + + + + +clusteraiida_qeInputsget_dict_3__smearing + +get_dict_3__smearing + + + +clusteraiida_qeget_dict_3Inputssmearing + +smearing + + + +clusteraiida_qeInputsget_dict_3__smearing->clusteraiida_qeget_dict_3Inputssmearing + + + + + + +clusteraiida_qeInputscalculate_qe_3__working_directory + +calculate_qe_3__working_directory + + + +clusteraiida_qecalculate_qe_3Inputsworking_directory + +working_directory + + + +clusteraiida_qeInputscalculate_qe_3__working_directory->clusteraiida_qecalculate_qe_3Inputsworking_directory + + + + + + +clusteraiida_qeInputsget_dict_4__calculation + +get_dict_4__calculation + + + +clusteraiida_qeget_dict_4Inputscalculation + +calculation + + + +clusteraiida_qeInputsget_dict_4__calculation->clusteraiida_qeget_dict_4Inputscalculation + + + + + + +clusteraiida_qeInputsget_dict_4__kpts + +get_dict_4__kpts + + + +clusteraiida_qeget_dict_4Inputskpts + +kpts + + + +clusteraiida_qeInputsget_dict_4__kpts->clusteraiida_qeget_dict_4Inputskpts + + + + + + +clusteraiida_qeInputsget_dict_4__pseudopotentials + +get_dict_4__pseudopotentials + + + +clusteraiida_qeget_dict_4Inputspseudopotentials + +pseudopotentials + + + +clusteraiida_qeInputsget_dict_4__pseudopotentials->clusteraiida_qeget_dict_4Inputspseudopotentials + + + + + + +clusteraiida_qeInputsget_dict_4__smearing + +get_dict_4__smearing + + + +clusteraiida_qeget_dict_4Inputssmearing + +smearing + + + +clusteraiida_qeInputsget_dict_4__smearing->clusteraiida_qeget_dict_4Inputssmearing + + + + + + +clusteraiida_qeInputscalculate_qe_4__working_directory + +calculate_qe_4__working_directory + + + +clusteraiida_qecalculate_qe_4Inputsworking_directory + +working_directory + + + +clusteraiida_qeInputscalculate_qe_4__working_directory->clusteraiida_qecalculate_qe_4Inputsworking_directory + + + + + + +clusteraiida_qeInputsget_dict_5__calculation + +get_dict_5__calculation + + + +clusteraiida_qeget_dict_5Inputscalculation + +calculation + + + +clusteraiida_qeInputsget_dict_5__calculation->clusteraiida_qeget_dict_5Inputscalculation + + + + + + +clusteraiida_qeInputsget_dict_5__kpts + +get_dict_5__kpts + + + +clusteraiida_qeget_dict_5Inputskpts + +kpts + + + +clusteraiida_qeInputsget_dict_5__kpts->clusteraiida_qeget_dict_5Inputskpts + + + + + + +clusteraiida_qeInputsget_dict_5__pseudopotentials + +get_dict_5__pseudopotentials + + + +clusteraiida_qeget_dict_5Inputspseudopotentials + +pseudopotentials + + + +clusteraiida_qeInputsget_dict_5__pseudopotentials->clusteraiida_qeget_dict_5Inputspseudopotentials + + + + + + +clusteraiida_qeInputsget_dict_5__smearing + +get_dict_5__smearing + + + +clusteraiida_qeget_dict_5Inputssmearing + +smearing + + + +clusteraiida_qeInputsget_dict_5__smearing->clusteraiida_qeget_dict_5Inputssmearing + + + + + + +clusteraiida_qeInputscalculate_qe_5__working_directory + +calculate_qe_5__working_directory + + + +clusteraiida_qecalculate_qe_5Inputsworking_directory + +working_directory + + + +clusteraiida_qeInputscalculate_qe_5__working_directory->clusteraiida_qecalculate_qe_5Inputsworking_directory + + + + + + +clusteraiida_qeInputsinjected_GetItem_2859163708959743150__item + +injected_GetItem_2859163708959743150__item + + + +clusteraiida_qeinjected_GetItem_2859163708959743150Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_2859163708959743150__item->clusteraiida_qeinjected_GetItem_2859163708959743150Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_2095185757530090309__item + +injected_GetItem_2095185757530090309__item + + + +clusteraiida_qeinjected_GetItem_2095185757530090309Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_2095185757530090309__item->clusteraiida_qeinjected_GetItem_2095185757530090309Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m6396244699285524644__item + +injected_GetItem_m6396244699285524644__item + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m6396244699285524644__item->clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m3217087382920924098__item + +injected_GetItem_m3217087382920924098__item + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m3217087382920924098__item->clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m1410919064082391699__item + +injected_GetItem_m1410919064082391699__item + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m1410919064082391699__item->clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m9115075428129331383__item + +injected_GetItem_m9115075428129331383__item + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m9115075428129331383__item->clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m7237000809964411643__item + +injected_GetItem_m7237000809964411643__item + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m7237000809964411643__item->clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m5860620980043280550__item + +injected_GetItem_m5860620980043280550__item + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m5860620980043280550__item->clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m6458391072898921223__item + +injected_GetItem_m6458391072898921223__item + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m6458391072898921223__item->clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_1684197267152821370__item + +injected_GetItem_1684197267152821370__item + + + +clusteraiida_qeinjected_GetItem_1684197267152821370Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_1684197267152821370__item->clusteraiida_qeinjected_GetItem_1684197267152821370Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_3919628805879474670__item + +injected_GetItem_3919628805879474670__item + + + +clusteraiida_qeinjected_GetItem_3919628805879474670Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_3919628805879474670__item->clusteraiida_qeinjected_GetItem_3919628805879474670Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m740119179149754946__item + +injected_GetItem_m740119179149754946__item + + + +clusteraiida_qeinjected_GetItem_m740119179149754946Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m740119179149754946__item->clusteraiida_qeinjected_GetItem_m740119179149754946Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_2084798752545049754__item + +injected_GetItem_2084798752545049754__item + + + +clusteraiida_qeinjected_GetItem_2084798752545049754Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_2084798752545049754__item->clusteraiida_qeinjected_GetItem_2084798752545049754Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_2761976441505203068__item + +injected_GetItem_2761976441505203068__item + + + +clusteraiida_qeinjected_GetItem_2761976441505203068Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_2761976441505203068__item->clusteraiida_qeinjected_GetItem_2761976441505203068Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m4556998621263697855__item + +injected_GetItem_m4556998621263697855__item + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m4556998621263697855__item->clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsitem + + + + + + +clusteraiida_qeInputsinjected_GetItem_m9206283876700615862__item + +injected_GetItem_m9206283876700615862__item + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsitem + +item + + + +clusteraiida_qeInputsinjected_GetItem_m9206283876700615862__item->clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsitem + + + + + + +clusteraiida_qeOutputsWithInjectionfailed + +failed + + + +clusteraiida_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + +plot_energy_volume_curve__plot_energy_volume_curve + + + +clusteraiida_qeget_bulk_structureInputsrun + +run + + + +clusteraiida_qeget_bulk_structureOutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_bulk_structureInputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_bulk_structureOutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_bulk_structureOutputsWithInjectionget_bulk_structure + +get_bulk_structure + + + +clusteraiida_qeget_dict_0Inputsstructure + +structure + + + +clusteraiida_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusteraiida_qeget_dict_0Inputsstructure + + + + + + +clusteraiida_qeget_dict_0Inputsrun + +run + + + +clusteraiida_qeget_dict_0OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_dict_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_dict_0OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_dict_0OutputsWithInjectionget_dict_0 + +get_dict_0 + + + +clusteraiida_qecalculate_qe_0Inputsinput_dict + +input_dict + + + +clusteraiida_qeget_dict_0OutputsWithInjectionget_dict_0->clusteraiida_qecalculate_qe_0Inputsinput_dict + + + + + + +clusteraiida_qecalculate_qe_0Inputsrun + +run + + + +clusteraiida_qecalculate_qe_0OutputsWithInjectionran + +ran + + + + +clusteraiida_qecalculate_qe_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qecalculate_qe_0OutputsWithInjectionfailed + +failed + + + +clusteraiida_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0 + +calculate_qe_0 + + + +clusteraiida_qeinjected_GetItem_2859163708959743150Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusteraiida_qeinjected_GetItem_2859163708959743150Inputsobj + + + + + + +clusteraiida_qegenerate_structuresInputsrun + +run + + + +clusteraiida_qegenerate_structuresOutputsWithInjectionran + +ran + + + + +clusteraiida_qegenerate_structuresInputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qegenerate_structuresInputsstructure + +structure + + + +clusteraiida_qegenerate_structuresOutputsWithInjectionfailed + +failed + + + +clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures + +generate_structures + + + +clusteraiida_qeinjected_GetItem_2095185757530090309Inputsobj + +obj + + + +clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_2095185757530090309Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsobj + +obj + + + +clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsobj + +obj + + + +clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_3919628805879474670Inputsobj + +obj + + + +clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_3919628805879474670Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_2761976441505203068Inputsobj + +obj + + + +clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_2761976441505203068Inputsobj + + + + + + +clusteraiida_qeget_list_0Inputsrun + +run + + + +clusteraiida_qeget_list_0OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_list_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_list_0Inputss_0 + +s_0 + + + +clusteraiida_qeget_list_0Inputss_1 + +s_1 + + + +clusteraiida_qeget_list_0Inputss_2 + +s_2 + + + +clusteraiida_qeget_list_0Inputss_3 + +s_3 + + + +clusteraiida_qeget_list_0Inputss_4 + +s_4 + + + +clusteraiida_qeget_list_0OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_list_0OutputsWithInjectionget_list_0 + +get_list_0 + + + +clusteraiida_qeplot_energy_volume_curveInputsvolume_lst + +volume_lst + + + +clusteraiida_qeget_list_0OutputsWithInjectionget_list_0->clusteraiida_qeplot_energy_volume_curveInputsvolume_lst + + + + + + +clusteraiida_qeget_list_1Inputsrun + +run + + + +clusteraiida_qeget_list_1OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_list_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_list_1Inputss_0 + +s_0 + + + +clusteraiida_qeget_list_1Inputss_1 + +s_1 + + + +clusteraiida_qeget_list_1Inputss_2 + +s_2 + + + +clusteraiida_qeget_list_1Inputss_3 + +s_3 + + + +clusteraiida_qeget_list_1Inputss_4 + +s_4 + + + +clusteraiida_qeget_list_1OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_list_1OutputsWithInjectionget_list_1 + +get_list_1 + + + +clusteraiida_qeplot_energy_volume_curveInputsenergy_lst + +energy_lst + + + +clusteraiida_qeget_list_1OutputsWithInjectionget_list_1->clusteraiida_qeplot_energy_volume_curveInputsenergy_lst + + + + + + +clusteraiida_qeget_dict_1Inputsrun + +run + + + +clusteraiida_qeget_dict_1OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_dict_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_dict_1Inputsstructure + +structure + + + +clusteraiida_qeget_dict_1OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_dict_1OutputsWithInjectionget_dict_1 + +get_dict_1 + + + +clusteraiida_qecalculate_qe_1Inputsinput_dict + +input_dict + + + +clusteraiida_qeget_dict_1OutputsWithInjectionget_dict_1->clusteraiida_qecalculate_qe_1Inputsinput_dict + + + + + + +clusteraiida_qecalculate_qe_1Inputsrun + +run + + + +clusteraiida_qecalculate_qe_1OutputsWithInjectionran + +ran + + + + +clusteraiida_qecalculate_qe_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qecalculate_qe_1OutputsWithInjectionfailed + +failed + + + +clusteraiida_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1 + +calculate_qe_1 + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsobj + + + + + + +clusteraiida_qeget_dict_2Inputsrun + +run + + + +clusteraiida_qeget_dict_2OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_dict_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_dict_2Inputsstructure + +structure + + + +clusteraiida_qeget_dict_2OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_dict_2OutputsWithInjectionget_dict_2 + +get_dict_2 + + + +clusteraiida_qecalculate_qe_2Inputsinput_dict + +input_dict + + + +clusteraiida_qeget_dict_2OutputsWithInjectionget_dict_2->clusteraiida_qecalculate_qe_2Inputsinput_dict + + + + + + +clusteraiida_qecalculate_qe_2Inputsrun + +run + + + +clusteraiida_qecalculate_qe_2OutputsWithInjectionran + +ran + + + + +clusteraiida_qecalculate_qe_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qecalculate_qe_2OutputsWithInjectionfailed + +failed + + + +clusteraiida_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2 + +calculate_qe_2 + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsobj + + + + + + +clusteraiida_qeget_dict_3Inputsrun + +run + + + +clusteraiida_qeget_dict_3OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_dict_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_dict_3Inputsstructure + +structure + + + +clusteraiida_qeget_dict_3OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_dict_3OutputsWithInjectionget_dict_3 + +get_dict_3 + + + +clusteraiida_qecalculate_qe_3Inputsinput_dict + +input_dict + + + +clusteraiida_qeget_dict_3OutputsWithInjectionget_dict_3->clusteraiida_qecalculate_qe_3Inputsinput_dict + + + + + + +clusteraiida_qecalculate_qe_3Inputsrun + +run + + + +clusteraiida_qecalculate_qe_3OutputsWithInjectionran + +ran + + + + +clusteraiida_qecalculate_qe_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qecalculate_qe_3OutputsWithInjectionfailed + +failed + + + +clusteraiida_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3 + +calculate_qe_3 + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_1684197267152821370Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusteraiida_qeinjected_GetItem_1684197267152821370Inputsobj + + + + + + +clusteraiida_qeget_dict_4Inputsrun + +run + + + +clusteraiida_qeget_dict_4OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_dict_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_dict_4Inputsstructure + +structure + + + +clusteraiida_qeget_dict_4OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_dict_4OutputsWithInjectionget_dict_4 + +get_dict_4 + + + +clusteraiida_qecalculate_qe_4Inputsinput_dict + +input_dict + + + +clusteraiida_qeget_dict_4OutputsWithInjectionget_dict_4->clusteraiida_qecalculate_qe_4Inputsinput_dict + + + + + + +clusteraiida_qecalculate_qe_4Inputsrun + +run + + + +clusteraiida_qecalculate_qe_4OutputsWithInjectionran + +ran + + + + +clusteraiida_qecalculate_qe_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qecalculate_qe_4OutputsWithInjectionfailed + +failed + + + +clusteraiida_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4 + +calculate_qe_4 + + + +clusteraiida_qeinjected_GetItem_m740119179149754946Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusteraiida_qeinjected_GetItem_m740119179149754946Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_2084798752545049754Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusteraiida_qeinjected_GetItem_2084798752545049754Inputsobj + + + + + + +clusteraiida_qeget_dict_5Inputsrun + +run + + + +clusteraiida_qeget_dict_5OutputsWithInjectionran + +ran + + + + +clusteraiida_qeget_dict_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeget_dict_5Inputsstructure + +structure + + + +clusteraiida_qeget_dict_5OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeget_dict_5OutputsWithInjectionget_dict_5 + +get_dict_5 + + + +clusteraiida_qecalculate_qe_5Inputsinput_dict + +input_dict + + + +clusteraiida_qeget_dict_5OutputsWithInjectionget_dict_5->clusteraiida_qecalculate_qe_5Inputsinput_dict + + + + + + +clusteraiida_qecalculate_qe_5Inputsrun + +run + + + +clusteraiida_qecalculate_qe_5OutputsWithInjectionran + +ran + + + + +clusteraiida_qecalculate_qe_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qecalculate_qe_5OutputsWithInjectionfailed + +failed + + + +clusteraiida_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5 + +calculate_qe_5 + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsobj + + + + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsobj + +obj + + + +clusteraiida_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsobj + + + + + + +clusteraiida_qeplot_energy_volume_curveInputsrun + +run + + + +clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionran + +ran + + + + +clusteraiida_qeplot_energy_volume_curveInputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionfailed + +failed + + + +clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve + +plot_energy_volume_curve + + + +clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusteraiida_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + + + + + + +clusteraiida_qeinjected_GetItem_2859163708959743150Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_2859163708959743150Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectiongetitem->clusteraiida_qegenerate_structuresInputsstructure + + + + + + +clusteraiida_qeinjected_GetItem_2095185757530090309Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_2095185757530090309Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectiongetitem->clusteraiida_qeget_dict_1Inputsstructure + + + + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_0 + + + + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_0 + + + + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectiongetitem->clusteraiida_qeget_dict_2Inputsstructure + + + + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_1 + + + + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_1 + + + + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectiongetitem->clusteraiida_qeget_dict_3Inputsstructure + + + + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_2 + + + + + + +clusteraiida_qeinjected_GetItem_1684197267152821370Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_1684197267152821370Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_2 + + + + + + +clusteraiida_qeinjected_GetItem_3919628805879474670Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_3919628805879474670Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectiongetitem->clusteraiida_qeget_dict_4Inputsstructure + + + + + + +clusteraiida_qeinjected_GetItem_m740119179149754946Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m740119179149754946Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_3 + + + + + + +clusteraiida_qeinjected_GetItem_2084798752545049754Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_2084798752545049754Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_3 + + + + + + +clusteraiida_qeinjected_GetItem_2761976441505203068Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_2761976441505203068Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectiongetitem->clusteraiida_qeget_dict_5Inputsstructure + + + + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_4 + + + + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsrun + +run + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectionran + +ran + + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsaccumulate_and_run + +accumulate_and_run + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectionfailed + +failed + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectiongetitem + +getitem + + + +clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_4 + + + + + + \ No newline at end of file diff --git a/_images/85c3db0c877bf6370f76c170eb30e28310cd872b8056106c271b983dd3171b7e.png b/_images/85c3db0c877bf6370f76c170eb30e28310cd872b8056106c271b983dd3171b7e.png new file mode 100644 index 00000000..0862f72e Binary files /dev/null and b/_images/85c3db0c877bf6370f76c170eb30e28310cd872b8056106c271b983dd3171b7e.png differ diff --git a/_images/894abd3dcc78887d897af1c177f72bea902fcbfcd269e09cd64eac4a5eb6ed66.svg b/_images/894abd3dcc78887d897af1c177f72bea902fcbfcd269e09cd64eac4a5eb6ed66.svg new file mode 100644 index 00000000..b9ec177b --- /dev/null +++ b/_images/894abd3dcc78887d897af1c177f72bea902fcbfcd269e09cd64eac4a5eb6ed66.svg @@ -0,0 +1,535 @@ + + + + + + +clusterexecutorlib_arithmetic + +executorlib_arithmetic: Workflow + +clusterexecutorlib_arithmeticInputs + + + + + + + +Inputs + + +clusterexecutorlib_arithmeticOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_arithmeticget_prod_and_div + + + + + + + +get_prod_and_div: get_prod_and_div + + +clusterexecutorlib_arithmeticget_prod_and_divInputs + + + + + + + +Inputs + + +clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_arithmeticget_sum + + + + + + + +get_sum: get_sum + + +clusterexecutorlib_arithmeticget_sumInputs + + + + + + + +Inputs + + +clusterexecutorlib_arithmeticget_sumOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_arithmeticget_square + + + + + + + +get_square: get_square + + +clusterexecutorlib_arithmeticget_squareInputs + + + + + + + +Inputs + + +clusterexecutorlib_arithmeticget_squareOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023 + + + + + + + +injected_GetItem_951416441108707023: GetItem + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputs + + + + + + + +Inputs + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913 + + + + + + + +injected_GetItem_m2059545174045897913: GetItem + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputs + + + + + + + +Inputs + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clusterexecutorlib_arithmeticInputsrun + +run + + + +clusterexecutorlib_arithmeticOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_arithmeticInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_arithmeticInputsget_prod_and_div__x + +get_prod_and_div__x + + + +clusterexecutorlib_arithmeticget_prod_and_divInputsx + +x + + + +clusterexecutorlib_arithmeticInputsget_prod_and_div__x->clusterexecutorlib_arithmeticget_prod_and_divInputsx + + + + + + +clusterexecutorlib_arithmeticInputsget_prod_and_div__y + +get_prod_and_div__y + + + +clusterexecutorlib_arithmeticget_prod_and_divInputsy + +y + + + +clusterexecutorlib_arithmeticInputsget_prod_and_div__y->clusterexecutorlib_arithmeticget_prod_and_divInputsy + + + + + + +clusterexecutorlib_arithmeticInputsinjected_GetItem_951416441108707023__item + +injected_GetItem_951416441108707023__item + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsitem + +item + + + +clusterexecutorlib_arithmeticInputsinjected_GetItem_951416441108707023__item->clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsitem + + + + + + +clusterexecutorlib_arithmeticInputsinjected_GetItem_m2059545174045897913__item + +injected_GetItem_m2059545174045897913__item + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsitem + +item + + + +clusterexecutorlib_arithmeticInputsinjected_GetItem_m2059545174045897913__item->clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsitem + + + + + + +clusterexecutorlib_arithmeticOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_arithmeticOutputsWithInjectionget_square__get_square + +get_square__get_square + + + +clusterexecutorlib_arithmeticget_prod_and_divInputsrun + +run + + + +clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_arithmeticget_prod_and_divInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionget_prod_and_div + +get_prod_and_div + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsobj + +obj + + + +clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionget_prod_and_div->clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsobj + + + + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsobj + +obj + + + +clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionget_prod_and_div->clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsobj + + + + + + +clusterexecutorlib_arithmeticget_sumInputsrun + +run + + + +clusterexecutorlib_arithmeticget_sumOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_arithmeticget_sumInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_arithmeticget_sumInputsx + +x + + + +clusterexecutorlib_arithmeticget_sumInputsy + +y + + + +clusterexecutorlib_arithmeticget_sumOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_arithmeticget_sumOutputsWithInjectionget_sum + +get_sum + + + +clusterexecutorlib_arithmeticget_squareInputsx + +x + + + +clusterexecutorlib_arithmeticget_sumOutputsWithInjectionget_sum->clusterexecutorlib_arithmeticget_squareInputsx + + + + + + +clusterexecutorlib_arithmeticget_squareInputsrun + +run + + + +clusterexecutorlib_arithmeticget_squareOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_arithmeticget_squareInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_arithmeticget_squareOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_arithmeticget_squareOutputsWithInjectionget_square + +get_square + + + +clusterexecutorlib_arithmeticget_squareOutputsWithInjectionget_square->clusterexecutorlib_arithmeticOutputsWithInjectionget_square__get_square + + + + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsrun + +run + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectiongetitem->clusterexecutorlib_arithmeticget_sumInputsx + + + + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsrun + +run + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectiongetitem->clusterexecutorlib_arithmeticget_sumInputsy + + + + + + \ No newline at end of file diff --git a/_images/96e905e5f0ad07439c8ee900ec41b57049069708d9b8a30f78b2f963daa683f3.svg b/_images/96e905e5f0ad07439c8ee900ec41b57049069708d9b8a30f78b2f963daa683f3.svg new file mode 100644 index 00000000..2c2c72ba --- /dev/null +++ b/_images/96e905e5f0ad07439c8ee900ec41b57049069708d9b8a30f78b2f963daa683f3.svg @@ -0,0 +1,1188 @@ + + + + + + +clustermy_workflow + +my_workflow: Workflow + +clustermy_workflowInputs + + + + + + + +Inputs + + +clustermy_workflowOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowgmsh_output_file + + + + + + + +gmsh_output_file: generate_mesh + + +clustermy_workflowgmsh_output_fileInputs + + + + + + + +Inputs + + +clustermy_workflowgmsh_output_fileOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowmeshio_output_dict + + + + + + + +meshio_output_dict: convert_to_xdmf + + +clustermy_workflowmeshio_output_dictInputs + + + + + + + +Inputs + + +clustermy_workflowmeshio_output_dictOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m7197572853956972366 + + + + + + + +injected_GetItem_m7197572853956972366: GetItem + + +clustermy_workflowinjected_GetItem_m7197572853956972366Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_5401042856615209092 + + + + + + + +injected_GetItem_5401042856615209092: GetItem + + +clustermy_workflowinjected_GetItem_5401042856615209092Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowpoisson_dict + + + + + + + +poisson_dict: poisson + + +clustermy_workflowpoisson_dictInputs + + + + + + + +Inputs + + +clustermy_workflowpoisson_dictOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_5839915180513303609 + + + + + + + +injected_GetItem_5839915180513303609: GetItem + + +clustermy_workflowinjected_GetItem_5839915180513303609Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m3497348724979863100 + + + + + + + +injected_GetItem_m3497348724979863100: GetItem + + +clustermy_workflowinjected_GetItem_m3497348724979863100Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowpvbatch_output_file + + + + + + + +pvbatch_output_file: plot_over_line + + +clustermy_workflowpvbatch_output_fileInputs + + + + + + + +Inputs + + +clustermy_workflowpvbatch_output_fileOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowinjected_GetItem_m6105838930489235458 + + + + + + + +injected_GetItem_m6105838930489235458: GetItem + + +clustermy_workflowinjected_GetItem_m6105838930489235458Inputs + + + + + + + +Inputs + + +clustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowmacros_tex_file + + + + + + + +macros_tex_file: substitute_macros + + +clustermy_workflowmacros_tex_fileInputs + + + + + + + +Inputs + + +clustermy_workflowmacros_tex_fileOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clustermy_workflowpaper_output + + + + + + + +paper_output: compile_paper + + +clustermy_workflowpaper_outputInputs + + + + + + + +Inputs + + +clustermy_workflowpaper_outputOutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clustermy_workflowInputsrun + +run + + + +clustermy_workflowOutputsWithInjectionran + +ran + + + + +clustermy_workflowInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowInputsgmsh_output_file__domain_size + +gmsh_output_file__domain_size: float + + + +clustermy_workflowgmsh_output_fileInputsdomain_size + +domain_size: float + + + +clustermy_workflowInputsgmsh_output_file__domain_size->clustermy_workflowgmsh_output_fileInputsdomain_size + + + + + + +clustermy_workflowInputsgmsh_output_file__source_directory + +gmsh_output_file__source_directory: str + + + +clustermy_workflowgmsh_output_fileInputssource_directory + +source_directory: str + + + +clustermy_workflowInputsgmsh_output_file__source_directory->clustermy_workflowgmsh_output_fileInputssource_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_m7197572853956972366__item + +injected_GetItem_m7197572853956972366__item + + + +clustermy_workflowinjected_GetItem_m7197572853956972366Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m7197572853956972366__item->clustermy_workflowinjected_GetItem_m7197572853956972366Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_5401042856615209092__item + +injected_GetItem_5401042856615209092__item + + + +clustermy_workflowinjected_GetItem_5401042856615209092Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_5401042856615209092__item->clustermy_workflowinjected_GetItem_5401042856615209092Inputsitem + + + + + + +clustermy_workflowInputspoisson_dict__source_directory + +poisson_dict__source_directory: str + + + +clustermy_workflowpoisson_dictInputssource_directory + +source_directory: str + + + +clustermy_workflowInputspoisson_dict__source_directory->clustermy_workflowpoisson_dictInputssource_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_5839915180513303609__item + +injected_GetItem_5839915180513303609__item + + + +clustermy_workflowinjected_GetItem_5839915180513303609Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_5839915180513303609__item->clustermy_workflowinjected_GetItem_5839915180513303609Inputsitem + + + + + + +clustermy_workflowInputsinjected_GetItem_m3497348724979863100__item + +injected_GetItem_m3497348724979863100__item + + + +clustermy_workflowinjected_GetItem_m3497348724979863100Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m3497348724979863100__item->clustermy_workflowinjected_GetItem_m3497348724979863100Inputsitem + + + + + + +clustermy_workflowInputspvbatch_output_file__source_directory + +pvbatch_output_file__source_directory: str + + + +clustermy_workflowpvbatch_output_fileInputssource_directory + +source_directory: str + + + +clustermy_workflowInputspvbatch_output_file__source_directory->clustermy_workflowpvbatch_output_fileInputssource_directory + + + + + + +clustermy_workflowInputsinjected_GetItem_m6105838930489235458__item + +injected_GetItem_m6105838930489235458__item + + + +clustermy_workflowinjected_GetItem_m6105838930489235458Inputsitem + +item + + + +clustermy_workflowInputsinjected_GetItem_m6105838930489235458__item->clustermy_workflowinjected_GetItem_m6105838930489235458Inputsitem + + + + + + +clustermy_workflowInputsmacros_tex_file__domain_size + +macros_tex_file__domain_size: float + + + +clustermy_workflowmacros_tex_fileInputsdomain_size + +domain_size: float + + + +clustermy_workflowInputsmacros_tex_file__domain_size->clustermy_workflowmacros_tex_fileInputsdomain_size + + + + + + +clustermy_workflowInputsmacros_tex_file__source_directory + +macros_tex_file__source_directory: str + + + +clustermy_workflowmacros_tex_fileInputssource_directory + +source_directory: str + + + +clustermy_workflowInputsmacros_tex_file__source_directory->clustermy_workflowmacros_tex_fileInputssource_directory + + + + + + +clustermy_workflowInputspaper_output__source_directory + +paper_output__source_directory: str + + + +clustermy_workflowpaper_outputInputssource_directory + +source_directory: str + + + +clustermy_workflowInputspaper_output__source_directory->clustermy_workflowpaper_outputInputssource_directory + + + + + + +clustermy_workflowOutputsWithInjectionfailed + +failed + + + +clustermy_workflowOutputsWithInjectionpaper_output__compile_paper + +paper_output__compile_paper: str + + + +clustermy_workflowgmsh_output_fileInputsrun + +run + + + +clustermy_workflowgmsh_output_fileOutputsWithInjectionran + +ran + + + + +clustermy_workflowgmsh_output_fileInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowgmsh_output_fileOutputsWithInjectionfailed + +failed + + + +clustermy_workflowgmsh_output_fileOutputsWithInjectiongenerate_mesh + +generate_mesh: str + + + +clustermy_workflowmeshio_output_dictInputsgmsh_output_file + +gmsh_output_file: str + + + +clustermy_workflowgmsh_output_fileOutputsWithInjectiongenerate_mesh->clustermy_workflowmeshio_output_dictInputsgmsh_output_file + + + + + + +clustermy_workflowmeshio_output_dictInputsrun + +run + + + +clustermy_workflowmeshio_output_dictOutputsWithInjectionran + +ran + + + + +clustermy_workflowmeshio_output_dictInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowmeshio_output_dictOutputsWithInjectionfailed + +failed + + + +clustermy_workflowmeshio_output_dictOutputsWithInjectionconvert_to_xdmf + +convert_to_xdmf: dict + + + +clustermy_workflowinjected_GetItem_m7197572853956972366Inputsobj + +obj + + + +clustermy_workflowmeshio_output_dictOutputsWithInjectionconvert_to_xdmf->clustermy_workflowinjected_GetItem_m7197572853956972366Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_5401042856615209092Inputsobj + +obj + + + +clustermy_workflowmeshio_output_dictOutputsWithInjectionconvert_to_xdmf->clustermy_workflowinjected_GetItem_5401042856615209092Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m7197572853956972366Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m7197572853956972366Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowpoisson_dictInputsmeshio_output_xdmf + +meshio_output_xdmf: str + + + +clustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectiongetitem->clustermy_workflowpoisson_dictInputsmeshio_output_xdmf + + + + + + +clustermy_workflowinjected_GetItem_5401042856615209092Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_5401042856615209092Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowpoisson_dictInputsmeshio_output_h5 + +meshio_output_h5: str + + + +clustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectiongetitem->clustermy_workflowpoisson_dictInputsmeshio_output_h5 + + + + + + +clustermy_workflowpoisson_dictInputsrun + +run + + + +clustermy_workflowpoisson_dictOutputsWithInjectionran + +ran + + + + +clustermy_workflowpoisson_dictInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowpoisson_dictOutputsWithInjectionfailed + +failed + + + +clustermy_workflowpoisson_dictOutputsWithInjectionpoisson + +poisson: dict + + + +clustermy_workflowinjected_GetItem_5839915180513303609Inputsobj + +obj + + + +clustermy_workflowpoisson_dictOutputsWithInjectionpoisson->clustermy_workflowinjected_GetItem_5839915180513303609Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m3497348724979863100Inputsobj + +obj + + + +clustermy_workflowpoisson_dictOutputsWithInjectionpoisson->clustermy_workflowinjected_GetItem_m3497348724979863100Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_m6105838930489235458Inputsobj + +obj + + + +clustermy_workflowpoisson_dictOutputsWithInjectionpoisson->clustermy_workflowinjected_GetItem_m6105838930489235458Inputsobj + + + + + + +clustermy_workflowinjected_GetItem_5839915180513303609Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_5839915180513303609Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowpvbatch_output_fileInputspoisson_output_pvd_file + +poisson_output_pvd_file: str + + + +clustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectiongetitem->clustermy_workflowpvbatch_output_fileInputspoisson_output_pvd_file + + + + + + +clustermy_workflowinjected_GetItem_m3497348724979863100Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m3497348724979863100Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowpvbatch_output_fileInputspoisson_output_vtu_file + +poisson_output_vtu_file: str + + + +clustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectiongetitem->clustermy_workflowpvbatch_output_fileInputspoisson_output_vtu_file + + + + + + +clustermy_workflowpvbatch_output_fileInputsrun + +run + + + +clustermy_workflowpvbatch_output_fileOutputsWithInjectionran + +ran + + + + +clustermy_workflowpvbatch_output_fileInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowpvbatch_output_fileOutputsWithInjectionfailed + +failed + + + +clustermy_workflowpvbatch_output_fileOutputsWithInjectionplot_over_line + +plot_over_line: str + + + +clustermy_workflowmacros_tex_fileInputspvbatch_output_file + +pvbatch_output_file: str + + + +clustermy_workflowpvbatch_output_fileOutputsWithInjectionplot_over_line->clustermy_workflowmacros_tex_fileInputspvbatch_output_file + + + + + + +clustermy_workflowpaper_outputInputsplot_file + +plot_file: str + + + +clustermy_workflowpvbatch_output_fileOutputsWithInjectionplot_over_line->clustermy_workflowpaper_outputInputsplot_file + + + + + + +clustermy_workflowinjected_GetItem_m6105838930489235458Inputsrun + +run + + + +clustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectionran + +ran + + + + +clustermy_workflowinjected_GetItem_m6105838930489235458Inputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectionfailed + +failed + + + +clustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectiongetitem + +getitem + + + +clustermy_workflowmacros_tex_fileInputsndofs + +ndofs: int + + + +clustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectiongetitem->clustermy_workflowmacros_tex_fileInputsndofs + + + + + + +clustermy_workflowmacros_tex_fileInputsrun + +run + + + +clustermy_workflowmacros_tex_fileOutputsWithInjectionran + +ran + + + + +clustermy_workflowmacros_tex_fileInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowmacros_tex_fileOutputsWithInjectionfailed + +failed + + + +clustermy_workflowmacros_tex_fileOutputsWithInjectionsubstitute_macros + +substitute_macros: str + + + +clustermy_workflowpaper_outputInputsmacros_tex + +macros_tex: str + + + +clustermy_workflowmacros_tex_fileOutputsWithInjectionsubstitute_macros->clustermy_workflowpaper_outputInputsmacros_tex + + + + + + +clustermy_workflowpaper_outputInputsrun + +run + + + +clustermy_workflowpaper_outputOutputsWithInjectionran + +ran + + + + +clustermy_workflowpaper_outputInputsaccumulate_and_run + +accumulate_and_run + + + +clustermy_workflowpaper_outputOutputsWithInjectionfailed + +failed + + + +clustermy_workflowpaper_outputOutputsWithInjectioncompile_paper + +compile_paper: str + + + +clustermy_workflowpaper_outputOutputsWithInjectioncompile_paper->clustermy_workflowOutputsWithInjectionpaper_output__compile_paper + + + + + + \ No newline at end of file diff --git a/_images/9b166521d39390707af8c6097e0ad4bb491ccb0c214cad6471b185419794f860.svg b/_images/9b166521d39390707af8c6097e0ad4bb491ccb0c214cad6471b185419794f860.svg new file mode 100644 index 00000000..caec4137 --- /dev/null +++ b/_images/9b166521d39390707af8c6097e0ad4bb491ccb0c214cad6471b185419794f860.svg @@ -0,0 +1,1188 @@ + + + + + + +clusterexecutorlib_nfdi + +executorlib_nfdi: Workflow + +clusterexecutorlib_nfdiInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdigenerate_mesh + + + + + + + +generate_mesh: generate_mesh + + +clusterexecutorlib_nfdigenerate_meshInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdigenerate_meshOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiconvert_to_xdmf + + + + + + + +convert_to_xdmf: convert_to_xdmf + + +clusterexecutorlib_nfdiconvert_to_xdmfInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdipoisson + + + + + + + +poisson: poisson + + +clusterexecutorlib_nfdipoissonInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdipoissonOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiplot_over_line + + + + + + + +plot_over_line: plot_over_line + + +clusterexecutorlib_nfdiplot_over_lineInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiplot_over_lineOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdisubstitute_macros + + + + + + + +substitute_macros: substitute_macros + + +clusterexecutorlib_nfdisubstitute_macrosInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdicompile_paper + + + + + + + +compile_paper: compile_paper + + +clusterexecutorlib_nfdicompile_paperInputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdicompile_paperOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458 + + + + + + + +injected_GetItem_5349895245803136458: GetItem + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704 + + + + + + + +injected_GetItem_2446111291168350704: GetItem + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640 + + + + + + + +injected_GetItem_3616010272467796640: GetItem + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182 + + + + + + + +injected_GetItem_288724780737349182: GetItem + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951 + + + + + + + +injected_GetItem_8657121023782977951: GetItem + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputs + + + + + + + +Inputs + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clusterexecutorlib_nfdiInputsrun + +run + + + +clusterexecutorlib_nfdiOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiInputsgenerate_mesh__domain_size + +generate_mesh__domain_size: float + + + +clusterexecutorlib_nfdigenerate_meshInputsdomain_size + +domain_size: float + + + +clusterexecutorlib_nfdiInputsgenerate_mesh__domain_size->clusterexecutorlib_nfdigenerate_meshInputsdomain_size + + + + + + +clusterexecutorlib_nfdiInputsgenerate_mesh__source_directory + +generate_mesh__source_directory: str + + + +clusterexecutorlib_nfdigenerate_meshInputssource_directory + +source_directory: str + + + +clusterexecutorlib_nfdiInputsgenerate_mesh__source_directory->clusterexecutorlib_nfdigenerate_meshInputssource_directory + + + + + + +clusterexecutorlib_nfdiInputspoisson__source_directory + +poisson__source_directory: str + + + +clusterexecutorlib_nfdipoissonInputssource_directory + +source_directory: str + + + +clusterexecutorlib_nfdiInputspoisson__source_directory->clusterexecutorlib_nfdipoissonInputssource_directory + + + + + + +clusterexecutorlib_nfdiInputsplot_over_line__source_directory + +plot_over_line__source_directory: str + + + +clusterexecutorlib_nfdiplot_over_lineInputssource_directory + +source_directory: str + + + +clusterexecutorlib_nfdiInputsplot_over_line__source_directory->clusterexecutorlib_nfdiplot_over_lineInputssource_directory + + + + + + +clusterexecutorlib_nfdiInputssubstitute_macros__domain_size + +substitute_macros__domain_size: float + + + +clusterexecutorlib_nfdisubstitute_macrosInputsdomain_size + +domain_size: float + + + +clusterexecutorlib_nfdiInputssubstitute_macros__domain_size->clusterexecutorlib_nfdisubstitute_macrosInputsdomain_size + + + + + + +clusterexecutorlib_nfdiInputssubstitute_macros__source_directory + +substitute_macros__source_directory: str + + + +clusterexecutorlib_nfdisubstitute_macrosInputssource_directory + +source_directory: str + + + +clusterexecutorlib_nfdiInputssubstitute_macros__source_directory->clusterexecutorlib_nfdisubstitute_macrosInputssource_directory + + + + + + +clusterexecutorlib_nfdiInputscompile_paper__source_directory + +compile_paper__source_directory: str + + + +clusterexecutorlib_nfdicompile_paperInputssource_directory + +source_directory: str + + + +clusterexecutorlib_nfdiInputscompile_paper__source_directory->clusterexecutorlib_nfdicompile_paperInputssource_directory + + + + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_5349895245803136458__item + +injected_GetItem_5349895245803136458__item + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsitem + +item + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_5349895245803136458__item->clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsitem + + + + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_2446111291168350704__item + +injected_GetItem_2446111291168350704__item + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsitem + +item + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_2446111291168350704__item->clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsitem + + + + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_3616010272467796640__item + +injected_GetItem_3616010272467796640__item + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsitem + +item + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_3616010272467796640__item->clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsitem + + + + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_288724780737349182__item + +injected_GetItem_288724780737349182__item + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsitem + +item + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_288724780737349182__item->clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsitem + + + + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_8657121023782977951__item + +injected_GetItem_8657121023782977951__item + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsitem + +item + + + +clusterexecutorlib_nfdiInputsinjected_GetItem_8657121023782977951__item->clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsitem + + + + + + +clusterexecutorlib_nfdiOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiOutputsWithInjectioncompile_paper__compile_paper + +compile_paper__compile_paper: str + + + +clusterexecutorlib_nfdigenerate_meshInputsrun + +run + + + +clusterexecutorlib_nfdigenerate_meshOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdigenerate_meshInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdigenerate_meshOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdigenerate_meshOutputsWithInjectiongenerate_mesh + +generate_mesh: str + + + +clusterexecutorlib_nfdiconvert_to_xdmfInputsgmsh_output_file + +gmsh_output_file: str + + + +clusterexecutorlib_nfdigenerate_meshOutputsWithInjectiongenerate_mesh->clusterexecutorlib_nfdiconvert_to_xdmfInputsgmsh_output_file + + + + + + +clusterexecutorlib_nfdiconvert_to_xdmfInputsrun + +run + + + +clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiconvert_to_xdmfInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionconvert_to_xdmf + +convert_to_xdmf: dict + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsobj + +obj + + + +clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionconvert_to_xdmf->clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsobj + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsobj + +obj + + + +clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionconvert_to_xdmf->clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsobj + + + + + + +clusterexecutorlib_nfdipoissonInputsrun + +run + + + +clusterexecutorlib_nfdipoissonOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdipoissonInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdipoissonInputsmeshio_output_xdmf + +meshio_output_xdmf: str + + + +clusterexecutorlib_nfdipoissonInputsmeshio_output_h5 + +meshio_output_h5: str + + + +clusterexecutorlib_nfdipoissonOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson + +poisson: dict + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsobj + +obj + + + +clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson->clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsobj + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsobj + +obj + + + +clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson->clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsobj + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsobj + +obj + + + +clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson->clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsobj + + + + + + +clusterexecutorlib_nfdiplot_over_lineInputsrun + +run + + + +clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiplot_over_lineInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_pvd_file + +poisson_output_pvd_file: str + + + +clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_vtu_file + +poisson_output_vtu_file: str + + + +clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionplot_over_line + +plot_over_line: str + + + +clusterexecutorlib_nfdisubstitute_macrosInputspvbatch_output_file + +pvbatch_output_file: str + + + +clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionplot_over_line->clusterexecutorlib_nfdisubstitute_macrosInputspvbatch_output_file + + + + + + +clusterexecutorlib_nfdicompile_paperInputsplot_file + +plot_file: str + + + +clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionplot_over_line->clusterexecutorlib_nfdicompile_paperInputsplot_file + + + + + + +clusterexecutorlib_nfdisubstitute_macrosInputsrun + +run + + + +clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdisubstitute_macrosInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdisubstitute_macrosInputsndofs + +ndofs: int + + + +clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionsubstitute_macros + +substitute_macros: str + + + +clusterexecutorlib_nfdicompile_paperInputsmacros_tex + +macros_tex: str + + + +clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionsubstitute_macros->clusterexecutorlib_nfdicompile_paperInputsmacros_tex + + + + + + +clusterexecutorlib_nfdicompile_paperInputsrun + +run + + + +clusterexecutorlib_nfdicompile_paperOutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdicompile_paperInputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdicompile_paperOutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdicompile_paperOutputsWithInjectioncompile_paper + +compile_paper: str + + + +clusterexecutorlib_nfdicompile_paperOutputsWithInjectioncompile_paper->clusterexecutorlib_nfdiOutputsWithInjectioncompile_paper__compile_paper + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsrun + +run + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectiongetitem->clusterexecutorlib_nfdipoissonInputsmeshio_output_xdmf + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsrun + +run + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectiongetitem->clusterexecutorlib_nfdipoissonInputsmeshio_output_h5 + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsrun + +run + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectiongetitem->clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_pvd_file + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsrun + +run + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectiongetitem->clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_vtu_file + + + + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsrun + +run + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectionran + +ran + + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectionfailed + +failed + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectiongetitem + +getitem + + + +clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectiongetitem->clusterexecutorlib_nfdisubstitute_macrosInputsndofs + + + + + + \ No newline at end of file diff --git a/_images/a1745bc5b97604c9bc0ee74c2c5f923c1221b809d84fcb202681237924200325.svg b/_images/a1745bc5b97604c9bc0ee74c2c5f923c1221b809d84fcb202681237924200325.svg new file mode 100644 index 00000000..39decfe1 --- /dev/null +++ b/_images/a1745bc5b97604c9bc0ee74c2c5f923c1221b809d84fcb202681237924200325.svg @@ -0,0 +1,3669 @@ + + + + + + +clusterjobflow_qe + +jobflow_qe: Workflow + +clusterjobflow_qeInputs + + + + + + + +Inputs + + +clusterjobflow_qeOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_bulk_structure + + + + + + + +get_bulk_structure: get_bulk_structure + + +clusterjobflow_qeget_bulk_structureInputs + + + + + + + +Inputs + + +clusterjobflow_qeget_bulk_structureOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qecalculate_qe_0 + + + + + + + +calculate_qe_0: calculate_qe + + +clusterjobflow_qecalculate_qe_0Inputs + + + + + + + +Inputs + + +clusterjobflow_qecalculate_qe_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qegenerate_structures + + + + + + + +generate_structures: generate_structures + + +clusterjobflow_qegenerate_structuresInputs + + + + + + + +Inputs + + +clusterjobflow_qegenerate_structuresOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qecalculate_qe_1 + + + + + + + +calculate_qe_1: calculate_qe + + +clusterjobflow_qecalculate_qe_1Inputs + + + + + + + +Inputs + + +clusterjobflow_qecalculate_qe_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qecalculate_qe_2 + + + + + + + +calculate_qe_2: calculate_qe + + +clusterjobflow_qecalculate_qe_2Inputs + + + + + + + +Inputs + + +clusterjobflow_qecalculate_qe_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qecalculate_qe_3 + + + + + + + +calculate_qe_3: calculate_qe + + +clusterjobflow_qecalculate_qe_3Inputs + + + + + + + +Inputs + + +clusterjobflow_qecalculate_qe_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qecalculate_qe_4 + + + + + + + +calculate_qe_4: calculate_qe + + +clusterjobflow_qecalculate_qe_4Inputs + + + + + + + +Inputs + + +clusterjobflow_qecalculate_qe_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qecalculate_qe_5 + + + + + + + +calculate_qe_5: calculate_qe + + +clusterjobflow_qecalculate_qe_5Inputs + + + + + + + +Inputs + + +clusterjobflow_qecalculate_qe_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeplot_energy_volume_curve + + + + + + + +plot_energy_volume_curve: plot_energy_volume_curve + + +clusterjobflow_qeplot_energy_volume_curveInputs + + + + + + + +Inputs + + +clusterjobflow_qeplot_energy_volume_curveOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_dict_0 + + + + + + + +get_dict_0: get_dict + + +clusterjobflow_qeget_dict_0Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_dict_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_dict_1 + + + + + + + +get_dict_1: get_dict + + +clusterjobflow_qeget_dict_1Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_dict_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_dict_2 + + + + + + + +get_dict_2: get_dict + + +clusterjobflow_qeget_dict_2Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_dict_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_dict_3 + + + + + + + +get_dict_3: get_dict + + +clusterjobflow_qeget_dict_3Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_dict_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_dict_4 + + + + + + + +get_dict_4: get_dict + + +clusterjobflow_qeget_dict_4Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_dict_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_dict_5 + + + + + + + +get_dict_5: get_dict + + +clusterjobflow_qeget_dict_5Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_dict_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_list_0 + + + + + + + +get_list_0: get_list + + +clusterjobflow_qeget_list_0Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_list_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeget_list_1 + + + + + + + +get_list_1: get_list + + +clusterjobflow_qeget_list_1Inputs + + + + + + + +Inputs + + +clusterjobflow_qeget_list_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_5694145002635648325 + + + + + + + +injected_GetItem_5694145002635648325: GetItem + + +clusterjobflow_qeinjected_GetItem_5694145002635648325Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365 + + + + + + + +injected_GetItem_m7622113868385731365: GetItem + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791 + + + + + + + +injected_GetItem_m7790390688026446791: GetItem + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_5456709381594516348 + + + + + + + +injected_GetItem_5456709381594516348: GetItem + + +clusterjobflow_qeinjected_GetItem_5456709381594516348Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_4383803830111319486 + + + + + + + +injected_GetItem_4383803830111319486: GetItem + + +clusterjobflow_qeinjected_GetItem_4383803830111319486Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834 + + + + + + + +injected_GetItem_m3166596768653844834: GetItem + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_4953877338424805303 + + + + + + + +injected_GetItem_4953877338424805303: GetItem + + +clusterjobflow_qeinjected_GetItem_4953877338424805303Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_5783905775072188943 + + + + + + + +injected_GetItem_5783905775072188943: GetItem + + +clusterjobflow_qeinjected_GetItem_5783905775072188943Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_7844378773575257119 + + + + + + + +injected_GetItem_7844378773575257119: GetItem + + +clusterjobflow_qeinjected_GetItem_7844378773575257119Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_7793121321835543799 + + + + + + + +injected_GetItem_7793121321835543799: GetItem + + +clusterjobflow_qeinjected_GetItem_7793121321835543799Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898 + + + + + + + +injected_GetItem_m4457864957213635898: GetItem + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240 + + + + + + + +injected_GetItem_m4756093589586022240: GetItem + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325 + + + + + + + +injected_GetItem_m8892127622114284325: GetItem + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_7481934391931090342 + + + + + + + +injected_GetItem_7481934391931090342: GetItem + + +clusterjobflow_qeinjected_GetItem_7481934391931090342Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_1478812047534775338 + + + + + + + +injected_GetItem_1478812047534775338: GetItem + + +clusterjobflow_qeinjected_GetItem_1478812047534775338Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138 + + + + + + + +injected_GetItem_m6581548438773794138: GetItem + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputs + + + + + + + +Inputs + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clusterjobflow_qeInputsrun + +run + + + +clusterjobflow_qeOutputsWithInjectionran + +ran + + + + +clusterjobflow_qeInputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeInputsget_bulk_structure__element + +get_bulk_structure__element + + + +clusterjobflow_qeget_bulk_structureInputselement + +element + + + +clusterjobflow_qeInputsget_bulk_structure__element->clusterjobflow_qeget_bulk_structureInputselement + + + + + + +clusterjobflow_qeInputsget_bulk_structure__a + +get_bulk_structure__a + + + +clusterjobflow_qeget_bulk_structureInputsa + +a + + + +clusterjobflow_qeInputsget_bulk_structure__a->clusterjobflow_qeget_bulk_structureInputsa + + + + + + +clusterjobflow_qeInputsget_bulk_structure__cubic + +get_bulk_structure__cubic + + + +clusterjobflow_qeget_bulk_structureInputscubic + +cubic + + + +clusterjobflow_qeInputsget_bulk_structure__cubic->clusterjobflow_qeget_bulk_structureInputscubic + + + + + + +clusterjobflow_qeInputscalculate_qe_0__working_directory + +calculate_qe_0__working_directory + + + +clusterjobflow_qecalculate_qe_0Inputsworking_directory + +working_directory + + + +clusterjobflow_qeInputscalculate_qe_0__working_directory->clusterjobflow_qecalculate_qe_0Inputsworking_directory + + + + + + +clusterjobflow_qeInputsgenerate_structures__strain_lst + +generate_structures__strain_lst + + + +clusterjobflow_qegenerate_structuresInputsstrain_lst + +strain_lst + + + +clusterjobflow_qeInputsgenerate_structures__strain_lst->clusterjobflow_qegenerate_structuresInputsstrain_lst + + + + + + +clusterjobflow_qeInputscalculate_qe_1__working_directory + +calculate_qe_1__working_directory + + + +clusterjobflow_qecalculate_qe_1Inputsworking_directory + +working_directory + + + +clusterjobflow_qeInputscalculate_qe_1__working_directory->clusterjobflow_qecalculate_qe_1Inputsworking_directory + + + + + + +clusterjobflow_qeInputscalculate_qe_2__working_directory + +calculate_qe_2__working_directory + + + +clusterjobflow_qecalculate_qe_2Inputsworking_directory + +working_directory + + + +clusterjobflow_qeInputscalculate_qe_2__working_directory->clusterjobflow_qecalculate_qe_2Inputsworking_directory + + + + + + +clusterjobflow_qeInputscalculate_qe_3__working_directory + +calculate_qe_3__working_directory + + + +clusterjobflow_qecalculate_qe_3Inputsworking_directory + +working_directory + + + +clusterjobflow_qeInputscalculate_qe_3__working_directory->clusterjobflow_qecalculate_qe_3Inputsworking_directory + + + + + + +clusterjobflow_qeInputscalculate_qe_4__working_directory + +calculate_qe_4__working_directory + + + +clusterjobflow_qecalculate_qe_4Inputsworking_directory + +working_directory + + + +clusterjobflow_qeInputscalculate_qe_4__working_directory->clusterjobflow_qecalculate_qe_4Inputsworking_directory + + + + + + +clusterjobflow_qeInputscalculate_qe_5__working_directory + +calculate_qe_5__working_directory + + + +clusterjobflow_qecalculate_qe_5Inputsworking_directory + +working_directory + + + +clusterjobflow_qeInputscalculate_qe_5__working_directory->clusterjobflow_qecalculate_qe_5Inputsworking_directory + + + + + + +clusterjobflow_qeInputsget_dict_0__pseudopotentials + +get_dict_0__pseudopotentials + + + +clusterjobflow_qeget_dict_0Inputspseudopotentials + +pseudopotentials + + + +clusterjobflow_qeInputsget_dict_0__pseudopotentials->clusterjobflow_qeget_dict_0Inputspseudopotentials + + + + + + +clusterjobflow_qeInputsget_dict_0__kpts + +get_dict_0__kpts + + + +clusterjobflow_qeget_dict_0Inputskpts + +kpts + + + +clusterjobflow_qeInputsget_dict_0__kpts->clusterjobflow_qeget_dict_0Inputskpts + + + + + + +clusterjobflow_qeInputsget_dict_0__calculation + +get_dict_0__calculation + + + +clusterjobflow_qeget_dict_0Inputscalculation + +calculation + + + +clusterjobflow_qeInputsget_dict_0__calculation->clusterjobflow_qeget_dict_0Inputscalculation + + + + + + +clusterjobflow_qeInputsget_dict_0__smearing + +get_dict_0__smearing + + + +clusterjobflow_qeget_dict_0Inputssmearing + +smearing + + + +clusterjobflow_qeInputsget_dict_0__smearing->clusterjobflow_qeget_dict_0Inputssmearing + + + + + + +clusterjobflow_qeInputsget_dict_1__pseudopotentials + +get_dict_1__pseudopotentials + + + +clusterjobflow_qeget_dict_1Inputspseudopotentials + +pseudopotentials + + + +clusterjobflow_qeInputsget_dict_1__pseudopotentials->clusterjobflow_qeget_dict_1Inputspseudopotentials + + + + + + +clusterjobflow_qeInputsget_dict_1__kpts + +get_dict_1__kpts + + + +clusterjobflow_qeget_dict_1Inputskpts + +kpts + + + +clusterjobflow_qeInputsget_dict_1__kpts->clusterjobflow_qeget_dict_1Inputskpts + + + + + + +clusterjobflow_qeInputsget_dict_1__calculation + +get_dict_1__calculation + + + +clusterjobflow_qeget_dict_1Inputscalculation + +calculation + + + +clusterjobflow_qeInputsget_dict_1__calculation->clusterjobflow_qeget_dict_1Inputscalculation + + + + + + +clusterjobflow_qeInputsget_dict_1__smearing + +get_dict_1__smearing + + + +clusterjobflow_qeget_dict_1Inputssmearing + +smearing + + + +clusterjobflow_qeInputsget_dict_1__smearing->clusterjobflow_qeget_dict_1Inputssmearing + + + + + + +clusterjobflow_qeInputsget_dict_2__pseudopotentials + +get_dict_2__pseudopotentials + + + +clusterjobflow_qeget_dict_2Inputspseudopotentials + +pseudopotentials + + + +clusterjobflow_qeInputsget_dict_2__pseudopotentials->clusterjobflow_qeget_dict_2Inputspseudopotentials + + + + + + +clusterjobflow_qeInputsget_dict_2__kpts + +get_dict_2__kpts + + + +clusterjobflow_qeget_dict_2Inputskpts + +kpts + + + +clusterjobflow_qeInputsget_dict_2__kpts->clusterjobflow_qeget_dict_2Inputskpts + + + + + + +clusterjobflow_qeInputsget_dict_2__calculation + +get_dict_2__calculation + + + +clusterjobflow_qeget_dict_2Inputscalculation + +calculation + + + +clusterjobflow_qeInputsget_dict_2__calculation->clusterjobflow_qeget_dict_2Inputscalculation + + + + + + +clusterjobflow_qeInputsget_dict_2__smearing + +get_dict_2__smearing + + + +clusterjobflow_qeget_dict_2Inputssmearing + +smearing + + + +clusterjobflow_qeInputsget_dict_2__smearing->clusterjobflow_qeget_dict_2Inputssmearing + + + + + + +clusterjobflow_qeInputsget_dict_3__pseudopotentials + +get_dict_3__pseudopotentials + + + +clusterjobflow_qeget_dict_3Inputspseudopotentials + +pseudopotentials + + + +clusterjobflow_qeInputsget_dict_3__pseudopotentials->clusterjobflow_qeget_dict_3Inputspseudopotentials + + + + + + +clusterjobflow_qeInputsget_dict_3__kpts + +get_dict_3__kpts + + + +clusterjobflow_qeget_dict_3Inputskpts + +kpts + + + +clusterjobflow_qeInputsget_dict_3__kpts->clusterjobflow_qeget_dict_3Inputskpts + + + + + + +clusterjobflow_qeInputsget_dict_3__calculation + +get_dict_3__calculation + + + +clusterjobflow_qeget_dict_3Inputscalculation + +calculation + + + +clusterjobflow_qeInputsget_dict_3__calculation->clusterjobflow_qeget_dict_3Inputscalculation + + + + + + +clusterjobflow_qeInputsget_dict_3__smearing + +get_dict_3__smearing + + + +clusterjobflow_qeget_dict_3Inputssmearing + +smearing + + + +clusterjobflow_qeInputsget_dict_3__smearing->clusterjobflow_qeget_dict_3Inputssmearing + + + + + + +clusterjobflow_qeInputsget_dict_4__pseudopotentials + +get_dict_4__pseudopotentials + + + +clusterjobflow_qeget_dict_4Inputspseudopotentials + +pseudopotentials + + + +clusterjobflow_qeInputsget_dict_4__pseudopotentials->clusterjobflow_qeget_dict_4Inputspseudopotentials + + + + + + +clusterjobflow_qeInputsget_dict_4__kpts + +get_dict_4__kpts + + + +clusterjobflow_qeget_dict_4Inputskpts + +kpts + + + +clusterjobflow_qeInputsget_dict_4__kpts->clusterjobflow_qeget_dict_4Inputskpts + + + + + + +clusterjobflow_qeInputsget_dict_4__calculation + +get_dict_4__calculation + + + +clusterjobflow_qeget_dict_4Inputscalculation + +calculation + + + +clusterjobflow_qeInputsget_dict_4__calculation->clusterjobflow_qeget_dict_4Inputscalculation + + + + + + +clusterjobflow_qeInputsget_dict_4__smearing + +get_dict_4__smearing + + + +clusterjobflow_qeget_dict_4Inputssmearing + +smearing + + + +clusterjobflow_qeInputsget_dict_4__smearing->clusterjobflow_qeget_dict_4Inputssmearing + + + + + + +clusterjobflow_qeInputsget_dict_5__pseudopotentials + +get_dict_5__pseudopotentials + + + +clusterjobflow_qeget_dict_5Inputspseudopotentials + +pseudopotentials + + + +clusterjobflow_qeInputsget_dict_5__pseudopotentials->clusterjobflow_qeget_dict_5Inputspseudopotentials + + + + + + +clusterjobflow_qeInputsget_dict_5__kpts + +get_dict_5__kpts + + + +clusterjobflow_qeget_dict_5Inputskpts + +kpts + + + +clusterjobflow_qeInputsget_dict_5__kpts->clusterjobflow_qeget_dict_5Inputskpts + + + + + + +clusterjobflow_qeInputsget_dict_5__calculation + +get_dict_5__calculation + + + +clusterjobflow_qeget_dict_5Inputscalculation + +calculation + + + +clusterjobflow_qeInputsget_dict_5__calculation->clusterjobflow_qeget_dict_5Inputscalculation + + + + + + +clusterjobflow_qeInputsget_dict_5__smearing + +get_dict_5__smearing + + + +clusterjobflow_qeget_dict_5Inputssmearing + +smearing + + + +clusterjobflow_qeInputsget_dict_5__smearing->clusterjobflow_qeget_dict_5Inputssmearing + + + + + + +clusterjobflow_qeInputsinjected_GetItem_5694145002635648325__item + +injected_GetItem_5694145002635648325__item + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_5694145002635648325__item->clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m7622113868385731365__item + +injected_GetItem_m7622113868385731365__item + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m7622113868385731365__item->clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m7790390688026446791__item + +injected_GetItem_m7790390688026446791__item + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m7790390688026446791__item->clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_5456709381594516348__item + +injected_GetItem_5456709381594516348__item + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_5456709381594516348__item->clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_4383803830111319486__item + +injected_GetItem_4383803830111319486__item + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_4383803830111319486__item->clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m3166596768653844834__item + +injected_GetItem_m3166596768653844834__item + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m3166596768653844834__item->clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_4953877338424805303__item + +injected_GetItem_4953877338424805303__item + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_4953877338424805303__item->clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_5783905775072188943__item + +injected_GetItem_5783905775072188943__item + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_5783905775072188943__item->clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_7844378773575257119__item + +injected_GetItem_7844378773575257119__item + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_7844378773575257119__item->clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_7793121321835543799__item + +injected_GetItem_7793121321835543799__item + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_7793121321835543799__item->clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m4457864957213635898__item + +injected_GetItem_m4457864957213635898__item + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m4457864957213635898__item->clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m4756093589586022240__item + +injected_GetItem_m4756093589586022240__item + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m4756093589586022240__item->clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m8892127622114284325__item + +injected_GetItem_m8892127622114284325__item + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m8892127622114284325__item->clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_7481934391931090342__item + +injected_GetItem_7481934391931090342__item + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_7481934391931090342__item->clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_1478812047534775338__item + +injected_GetItem_1478812047534775338__item + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_1478812047534775338__item->clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsitem + + + + + + +clusterjobflow_qeInputsinjected_GetItem_m6581548438773794138__item + +injected_GetItem_m6581548438773794138__item + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsitem + +item + + + +clusterjobflow_qeInputsinjected_GetItem_m6581548438773794138__item->clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsitem + + + + + + +clusterjobflow_qeOutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + +plot_energy_volume_curve__plot_energy_volume_curve + + + +clusterjobflow_qeget_bulk_structureInputsrun + +run + + + +clusterjobflow_qeget_bulk_structureOutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_bulk_structureInputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_bulk_structureOutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_bulk_structureOutputsWithInjectionget_bulk_structure + +get_bulk_structure + + + +clusterjobflow_qeget_dict_0Inputsstructure + +structure + + + +clusterjobflow_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusterjobflow_qeget_dict_0Inputsstructure + + + + + + +clusterjobflow_qecalculate_qe_0Inputsrun + +run + + + +clusterjobflow_qecalculate_qe_0OutputsWithInjectionran + +ran + + + + +clusterjobflow_qecalculate_qe_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qecalculate_qe_0Inputsinput_dict + +input_dict + + + +clusterjobflow_qecalculate_qe_0OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0 + +calculate_qe_0 + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsobj + + + + + + +clusterjobflow_qegenerate_structuresInputsrun + +run + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectionran + +ran + + + + +clusterjobflow_qegenerate_structuresInputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qegenerate_structuresInputsstructure + +structure + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectionfailed + +failed + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures + +generate_structures + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsobj + +obj + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsobj + +obj + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsobj + +obj + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsobj + +obj + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsobj + +obj + + + +clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsobj + + + + + + +clusterjobflow_qecalculate_qe_1Inputsrun + +run + + + +clusterjobflow_qecalculate_qe_1OutputsWithInjectionran + +ran + + + + +clusterjobflow_qecalculate_qe_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qecalculate_qe_1Inputsinput_dict + +input_dict + + + +clusterjobflow_qecalculate_qe_1OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1 + +calculate_qe_1 + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsobj + + + + + + +clusterjobflow_qecalculate_qe_2Inputsrun + +run + + + +clusterjobflow_qecalculate_qe_2OutputsWithInjectionran + +ran + + + + +clusterjobflow_qecalculate_qe_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qecalculate_qe_2Inputsinput_dict + +input_dict + + + +clusterjobflow_qecalculate_qe_2OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2 + +calculate_qe_2 + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsobj + + + + + + +clusterjobflow_qecalculate_qe_3Inputsrun + +run + + + +clusterjobflow_qecalculate_qe_3OutputsWithInjectionran + +ran + + + + +clusterjobflow_qecalculate_qe_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qecalculate_qe_3Inputsinput_dict + +input_dict + + + +clusterjobflow_qecalculate_qe_3OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3 + +calculate_qe_3 + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsobj + + + + + + +clusterjobflow_qecalculate_qe_4Inputsrun + +run + + + +clusterjobflow_qecalculate_qe_4OutputsWithInjectionran + +ran + + + + +clusterjobflow_qecalculate_qe_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qecalculate_qe_4Inputsinput_dict + +input_dict + + + +clusterjobflow_qecalculate_qe_4OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4 + +calculate_qe_4 + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsobj + + + + + + +clusterjobflow_qecalculate_qe_5Inputsrun + +run + + + +clusterjobflow_qecalculate_qe_5OutputsWithInjectionran + +ran + + + + +clusterjobflow_qecalculate_qe_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qecalculate_qe_5Inputsinput_dict + +input_dict + + + +clusterjobflow_qecalculate_qe_5OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5 + +calculate_qe_5 + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsobj + + + + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsobj + +obj + + + +clusterjobflow_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsobj + + + + + + +clusterjobflow_qeplot_energy_volume_curveInputsrun + +run + + + +clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionran + +ran + + + + +clusterjobflow_qeplot_energy_volume_curveInputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeplot_energy_volume_curveInputsvolume_lst + +volume_lst + + + +clusterjobflow_qeplot_energy_volume_curveInputsenergy_lst + +energy_lst + + + +clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve + +plot_energy_volume_curve + + + +clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusterjobflow_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + + + + + + +clusterjobflow_qeget_dict_0Inputsrun + +run + + + +clusterjobflow_qeget_dict_0OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_dict_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_dict_0OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_dict_0OutputsWithInjectionget_dict_0 + +get_dict_0 + + + +clusterjobflow_qeget_dict_0OutputsWithInjectionget_dict_0->clusterjobflow_qecalculate_qe_0Inputsinput_dict + + + + + + +clusterjobflow_qeget_dict_1Inputsrun + +run + + + +clusterjobflow_qeget_dict_1OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_dict_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_dict_1Inputsstructure + +structure + + + +clusterjobflow_qeget_dict_1OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_dict_1OutputsWithInjectionget_dict_1 + +get_dict_1 + + + +clusterjobflow_qeget_dict_1OutputsWithInjectionget_dict_1->clusterjobflow_qecalculate_qe_1Inputsinput_dict + + + + + + +clusterjobflow_qeget_dict_2Inputsrun + +run + + + +clusterjobflow_qeget_dict_2OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_dict_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_dict_2Inputsstructure + +structure + + + +clusterjobflow_qeget_dict_2OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_dict_2OutputsWithInjectionget_dict_2 + +get_dict_2 + + + +clusterjobflow_qeget_dict_2OutputsWithInjectionget_dict_2->clusterjobflow_qecalculate_qe_2Inputsinput_dict + + + + + + +clusterjobflow_qeget_dict_3Inputsrun + +run + + + +clusterjobflow_qeget_dict_3OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_dict_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_dict_3Inputsstructure + +structure + + + +clusterjobflow_qeget_dict_3OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_dict_3OutputsWithInjectionget_dict_3 + +get_dict_3 + + + +clusterjobflow_qeget_dict_3OutputsWithInjectionget_dict_3->clusterjobflow_qecalculate_qe_3Inputsinput_dict + + + + + + +clusterjobflow_qeget_dict_4Inputsrun + +run + + + +clusterjobflow_qeget_dict_4OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_dict_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_dict_4Inputsstructure + +structure + + + +clusterjobflow_qeget_dict_4OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_dict_4OutputsWithInjectionget_dict_4 + +get_dict_4 + + + +clusterjobflow_qeget_dict_4OutputsWithInjectionget_dict_4->clusterjobflow_qecalculate_qe_4Inputsinput_dict + + + + + + +clusterjobflow_qeget_dict_5Inputsrun + +run + + + +clusterjobflow_qeget_dict_5OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_dict_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_dict_5Inputsstructure + +structure + + + +clusterjobflow_qeget_dict_5OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_dict_5OutputsWithInjectionget_dict_5 + +get_dict_5 + + + +clusterjobflow_qeget_dict_5OutputsWithInjectionget_dict_5->clusterjobflow_qecalculate_qe_5Inputsinput_dict + + + + + + +clusterjobflow_qeget_list_0Inputsrun + +run + + + +clusterjobflow_qeget_list_0OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_list_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_list_0Inputss_0 + +s_0 + + + +clusterjobflow_qeget_list_0Inputss_1 + +s_1 + + + +clusterjobflow_qeget_list_0Inputss_2 + +s_2 + + + +clusterjobflow_qeget_list_0Inputss_3 + +s_3 + + + +clusterjobflow_qeget_list_0Inputss_4 + +s_4 + + + +clusterjobflow_qeget_list_0OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_list_0OutputsWithInjectionget_list_0 + +get_list_0 + + + +clusterjobflow_qeget_list_0OutputsWithInjectionget_list_0->clusterjobflow_qeplot_energy_volume_curveInputsvolume_lst + + + + + + +clusterjobflow_qeget_list_1Inputsrun + +run + + + +clusterjobflow_qeget_list_1OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeget_list_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeget_list_1Inputss_0 + +s_0 + + + +clusterjobflow_qeget_list_1Inputss_1 + +s_1 + + + +clusterjobflow_qeget_list_1Inputss_2 + +s_2 + + + +clusterjobflow_qeget_list_1Inputss_3 + +s_3 + + + +clusterjobflow_qeget_list_1Inputss_4 + +s_4 + + + +clusterjobflow_qeget_list_1OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeget_list_1OutputsWithInjectionget_list_1 + +get_list_1 + + + +clusterjobflow_qeget_list_1OutputsWithInjectionget_list_1->clusterjobflow_qeplot_energy_volume_curveInputsenergy_lst + + + + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectiongetitem->clusterjobflow_qegenerate_structuresInputsstructure + + + + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_1Inputsstructure + + + + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_2Inputsstructure + + + + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_3Inputsstructure + + + + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_4Inputsstructure + + + + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_5Inputsstructure + + + + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_0 + + + + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_1 + + + + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_2 + + + + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_3 + + + + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_4 + + + + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_0 + + + + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_1 + + + + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_2 + + + + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_3 + + + + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsrun + +run + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectionran + +ran + + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectionfailed + +failed + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectiongetitem + +getitem + + + +clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_4 + + + + + + \ No newline at end of file diff --git a/_images/afe05aefade47497f84cba8d5e6b6f94a1357ea1e7505a4e903e30d60a273a08.svg b/_images/afe05aefade47497f84cba8d5e6b6f94a1357ea1e7505a4e903e30d60a273a08.svg new file mode 100644 index 00000000..f0a8e1b4 --- /dev/null +++ b/_images/afe05aefade47497f84cba8d5e6b6f94a1357ea1e7505a4e903e30d60a273a08.svg @@ -0,0 +1,233 @@ + + + + + +create_function_job_d98d5639807a3be4999a1365311f70f7 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e211850> + + + +macros_tex_2966c3cce2a45e8cba702c524f55c461 + +macros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e2115e0> + + + +macros_tex_2966c3cce2a45e8cba702c524f55c461->create_function_job_d98d5639807a3be4999a1365311f70f7 + + + + + +pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5 + +pvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e2112b0> + + + +pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5->macros_tex_2966c3cce2a45e8cba702c524f55c461 + + + + + +poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66 + +poisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210f50> + + + +poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66->pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5 + + + + + +plot_file_2e9051e35dd84c5e1f106937c8c783f5 + +plot_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e2112b0> + + + +poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66->plot_file_2e9051e35dd84c5e1f106937c8c783f5 + + + + + +plot_file_2e9051e35dd84c5e1f106937c8c783f5->create_function_job_d98d5639807a3be4999a1365311f70f7 + + + + + +meshio_output_xdmf_2ed71308dc623781112ce378b493cea5 + +meshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210b90> + + + +meshio_output_xdmf_2ed71308dc623781112ce378b493cea5->poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66 + + + + + +poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9 + +poisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210f20> + + + +meshio_output_xdmf_2ed71308dc623781112ce378b493cea5->poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9 + + + + + +ndofs_c0ac3b9ed23ab49414fc2f718f8fb106 + +ndofs=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e211340> + + + +meshio_output_xdmf_2ed71308dc623781112ce378b493cea5->ndofs_c0ac3b9ed23ab49414fc2f718f8fb106 + + + + + +poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9->pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5 + + + + + +poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9->plot_file_2e9051e35dd84c5e1f106937c8c783f5 + + + + + +ndofs_c0ac3b9ed23ab49414fc2f718f8fb106->macros_tex_2966c3cce2a45e8cba702c524f55c461 + + + + + +gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809 + +gmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210770> + + + +gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809->meshio_output_xdmf_2ed71308dc623781112ce378b493cea5 + + + + + +meshio_output_h5_f481ee088011767a95b34af8231ee1c2 + +meshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210b60> + + + +gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809->meshio_output_h5_f481ee088011767a95b34af8231ee1c2 + + + + + +meshio_output_h5_f481ee088011767a95b34af8231ee1c2->poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66 + + + + + +meshio_output_h5_f481ee088011767a95b34af8231ee1c2->poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9 + + + + + +meshio_output_h5_f481ee088011767a95b34af8231ee1c2->ndofs_c0ac3b9ed23ab49414fc2f718f8fb106 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20 + +domain_size=2.0 + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_2966c3cce2a45e8cba702c524f55c461 + + + + + +domain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89 + +source_directory=/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/source + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->create_function_job_d98d5639807a3be4999a1365311f70f7 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->macros_tex_2966c3cce2a45e8cba702c524f55c461 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->plot_file_2e9051e35dd84c5e1f106937c8c783f5 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->ndofs_c0ac3b9ed23ab49414fc2f718f8fb106 + + + + + +source_directory_5beb97e7e5f621e33d82e6cf4af22c89->gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809 + + + + + \ No newline at end of file diff --git a/_images/b69d177baa97c67d4afebf6e1ea866f45780a51ab3f4964ff6be2683975dd441.svg b/_images/b69d177baa97c67d4afebf6e1ea866f45780a51ab3f4964ff6be2683975dd441.svg new file mode 100644 index 00000000..0e543f10 --- /dev/null +++ b/_images/b69d177baa97c67d4afebf6e1ea866f45780a51ab3f4964ff6be2683975dd441.svg @@ -0,0 +1,713 @@ + + + + + +create_function_job_9adf79b116ef7d1bd6234b8bd3fb8790 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x768578177f50> + + + +volume_lst_9ecc37695722ff26a909e7df66fad761 + +volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x768578177ec0> + + + +volume_lst_9ecc37695722ff26a909e7df66fad761->create_function_job_9adf79b116ef7d1bd6234b8bd3fb8790 + + + + + +0_9ec2b766eb40591013f27b281c10fdf6 + +0=<pyiron_base.project.delayed.DelayedObject object at 0x7685781761e0> + + + +0_9ec2b766eb40591013f27b281c10fdf6->volume_lst_9ecc37695722ff26a909e7df66fad761 + + + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add + +working_directory=strain_0 + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_9ec2b766eb40591013f27b281c10fdf6 + + + + + +0_2ee29abc84e19e2a89c493d954bca047 + +0=<pyiron_base.project.delayed.DelayedObject object at 0x768578177470> + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_2ee29abc84e19e2a89c493d954bca047 + + + + + +energy_lst_d41078de6fda3484043c8f3407845d97 + +energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x768578176240> + + + +0_2ee29abc84e19e2a89c493d954bca047->energy_lst_d41078de6fda3484043c8f3407845d97 + + + + + +input_dict_87f4e1381ab79d513e7ddd2deecdd386 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7685781773b0> + + + +input_dict_87f4e1381ab79d513e7ddd2deecdd386->0_9ec2b766eb40591013f27b281c10fdf6 + + + + + +input_dict_87f4e1381ab79d513e7ddd2deecdd386->0_2ee29abc84e19e2a89c493d954bca047 + + + + + +structure_24283480cde4a82cb11a95ad8315004b + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7685781770b0> + + + +structure_24283480cde4a82cb11a95ad8315004b->input_dict_87f4e1381ab79d513e7ddd2deecdd386 + + + + + +structure_199228a058c6c2abd4059cca704f33e6 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7685780d7170> + + + +structure_199228a058c6c2abd4059cca704f33e6->structure_24283480cde4a82cb11a95ad8315004b + + + + + +structure_02eea1a3dae4b8a2111c575ca7b757e4 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176db0> + + + +structure_199228a058c6c2abd4059cca704f33e6->structure_02eea1a3dae4b8a2111c575ca7b757e4 + + + + + +structure_f70fbf61dbacde3f86dbc99a31f544d6 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176a80> + + + +structure_199228a058c6c2abd4059cca704f33e6->structure_f70fbf61dbacde3f86dbc99a31f544d6 + + + + + +structure_5bb5ba75f27ad166411ec7f96a67d795 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176750> + + + +structure_199228a058c6c2abd4059cca704f33e6->structure_5bb5ba75f27ad166411ec7f96a67d795 + + + + + +structure_2a68a68e8c70db7870ac8e42f8b1865d + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176420> + + + +structure_199228a058c6c2abd4059cca704f33e6->structure_2a68a68e8c70db7870ac8e42f8b1865d + + + + + +input_dict_adda488913baad1684ada5811fc1bf07 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x768578177020> + + + +structure_02eea1a3dae4b8a2111c575ca7b757e4->input_dict_adda488913baad1684ada5811fc1bf07 + + + + + +input_dict_d5e1009e9a3698a7a581d7920d3308ba + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x768578176d20> + + + +structure_f70fbf61dbacde3f86dbc99a31f544d6->input_dict_d5e1009e9a3698a7a581d7920d3308ba + + + + + +input_dict_e4951879c0adfc1ee95c3f213d3670aa + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7685781769f0> + + + +structure_5bb5ba75f27ad166411ec7f96a67d795->input_dict_e4951879c0adfc1ee95c3f213d3670aa + + + + + +input_dict_a404d97e273a3ac600efe8c07b153592 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7685781766c0> + + + +structure_2a68a68e8c70db7870ac8e42f8b1865d->input_dict_a404d97e273a3ac600efe8c07b153592 + + + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7 + +working_directory=mini + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_199228a058c6c2abd4059cca704f33e6 + + + + + +input_dict_537467c3235749e6bbce7787ac63fcf2 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x768578175910> + + + +input_dict_537467c3235749e6bbce7787ac63fcf2->structure_199228a058c6c2abd4059cca704f33e6 + + + + + +structure_1143d046335e4294dac52196bc2767db + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x768578175b50> + + + +structure_1143d046335e4294dac52196bc2767db->input_dict_537467c3235749e6bbce7787ac63fcf2 + + + + + +element_467734216d9bd2497ffd28d5cd6daba0 + +element=Al + + + +element_467734216d9bd2497ffd28d5cd6daba0->structure_1143d046335e4294dac52196bc2767db + + + + + +a_aea0574e321c6f75f923c059730e9537 + +a=4.05 + + + +a_aea0574e321c6f75f923c059730e9537->structure_1143d046335e4294dac52196bc2767db + + + + + +cubic_bad787c53fa02a5559fe570238fdb23a + +cubic=True + + + +cubic_bad787c53fa02a5559fe570238fdb23a->structure_1143d046335e4294dac52196bc2767db + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10 + +pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'} + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_87f4e1381ab79d513e7ddd2deecdd386 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_537467c3235749e6bbce7787ac63fcf2 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_adda488913baad1684ada5811fc1bf07 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_d5e1009e9a3698a7a581d7920d3308ba + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e4951879c0adfc1ee95c3f213d3670aa + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_a404d97e273a3ac600efe8c07b153592 + + + + + +1_191bdde6d29a8110f9185c2dc2f36d40 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x768578176210> + + + +input_dict_adda488913baad1684ada5811fc1bf07->1_191bdde6d29a8110f9185c2dc2f36d40 + + + + + +1_4fc4ea22f90e9c5395aebcd832723a0b + +1=<pyiron_base.project.delayed.DelayedObject object at 0x768578177740> + + + +input_dict_adda488913baad1684ada5811fc1bf07->1_4fc4ea22f90e9c5395aebcd832723a0b + + + + + +2_19f8c443d3f233fce65b180b8671f9d3 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x768578176810> + + + +input_dict_d5e1009e9a3698a7a581d7920d3308ba->2_19f8c443d3f233fce65b180b8671f9d3 + + + + + +2_a91f85ab07dda5e77e64539693175399 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x7685781771a0> + + + +input_dict_d5e1009e9a3698a7a581d7920d3308ba->2_a91f85ab07dda5e77e64539693175399 + + + + + +3_3ede2f537cf839143078e1512ff2ef2f + +3=<pyiron_base.project.delayed.DelayedObject object at 0x7685781759d0> + + + +input_dict_e4951879c0adfc1ee95c3f213d3670aa->3_3ede2f537cf839143078e1512ff2ef2f + + + + + +3_5d8eeb1260eb131e15c0788d790e6449 + +3=<pyiron_base.project.delayed.DelayedObject object at 0x768578176ed0> + + + +input_dict_e4951879c0adfc1ee95c3f213d3670aa->3_5d8eeb1260eb131e15c0788d790e6449 + + + + + +4_25a83d640c1b83e1d1be6ab4ab2fe22d + +4=<pyiron_base.project.delayed.DelayedObject object at 0x768578177c50> + + + +input_dict_a404d97e273a3ac600efe8c07b153592->4_25a83d640c1b83e1d1be6ab4ab2fe22d + + + + + +4_24178a0d53ab74cdcd2d82759a89311b + +4=<pyiron_base.project.delayed.DelayedObject object at 0x768578177140> + + + +input_dict_a404d97e273a3ac600efe8c07b153592->4_24178a0d53ab74cdcd2d82759a89311b + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa + +kpts=[3, 3, 3] + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_87f4e1381ab79d513e7ddd2deecdd386 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_537467c3235749e6bbce7787ac63fcf2 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_adda488913baad1684ada5811fc1bf07 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_d5e1009e9a3698a7a581d7920d3308ba + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e4951879c0adfc1ee95c3f213d3670aa + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_a404d97e273a3ac600efe8c07b153592 + + + + + +calculation_77b75a01e65d83962d14fa8a882d6c34 + +calculation=vc-relax + + + +calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_537467c3235749e6bbce7787ac63fcf2 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9 + +smearing=0.02 + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_87f4e1381ab79d513e7ddd2deecdd386 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_537467c3235749e6bbce7787ac63fcf2 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_adda488913baad1684ada5811fc1bf07 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_d5e1009e9a3698a7a581d7920d3308ba + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e4951879c0adfc1ee95c3f213d3670aa + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_a404d97e273a3ac600efe8c07b153592 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781 + +strain_lst=[0.9, 0.95, 1.0, 1.05, 1.1] + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_24283480cde4a82cb11a95ad8315004b + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_02eea1a3dae4b8a2111c575ca7b757e4 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_f70fbf61dbacde3f86dbc99a31f544d6 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_5bb5ba75f27ad166411ec7f96a67d795 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_2a68a68e8c70db7870ac8e42f8b1865d + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83 + +calculation=scf + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_87f4e1381ab79d513e7ddd2deecdd386 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_adda488913baad1684ada5811fc1bf07 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_d5e1009e9a3698a7a581d7920d3308ba + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_e4951879c0adfc1ee95c3f213d3670aa + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_a404d97e273a3ac600efe8c07b153592 + + + + + +1_191bdde6d29a8110f9185c2dc2f36d40->volume_lst_9ecc37695722ff26a909e7df66fad761 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd + +working_directory=strain_1 + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_191bdde6d29a8110f9185c2dc2f36d40 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_4fc4ea22f90e9c5395aebcd832723a0b + + + + + +1_4fc4ea22f90e9c5395aebcd832723a0b->energy_lst_d41078de6fda3484043c8f3407845d97 + + + + + +2_19f8c443d3f233fce65b180b8671f9d3->volume_lst_9ecc37695722ff26a909e7df66fad761 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992 + +working_directory=strain_2 + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_19f8c443d3f233fce65b180b8671f9d3 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_a91f85ab07dda5e77e64539693175399 + + + + + +2_a91f85ab07dda5e77e64539693175399->energy_lst_d41078de6fda3484043c8f3407845d97 + + + + + +3_3ede2f537cf839143078e1512ff2ef2f->volume_lst_9ecc37695722ff26a909e7df66fad761 + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f + +working_directory=strain_3 + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_3ede2f537cf839143078e1512ff2ef2f + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_5d8eeb1260eb131e15c0788d790e6449 + + + + + +3_5d8eeb1260eb131e15c0788d790e6449->energy_lst_d41078de6fda3484043c8f3407845d97 + + + + + +4_25a83d640c1b83e1d1be6ab4ab2fe22d->volume_lst_9ecc37695722ff26a909e7df66fad761 + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7 + +working_directory=strain_4 + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_25a83d640c1b83e1d1be6ab4ab2fe22d + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_24178a0d53ab74cdcd2d82759a89311b + + + + + +4_24178a0d53ab74cdcd2d82759a89311b->energy_lst_d41078de6fda3484043c8f3407845d97 + + + + + +energy_lst_d41078de6fda3484043c8f3407845d97->create_function_job_9adf79b116ef7d1bd6234b8bd3fb8790 + + + + + \ No newline at end of file diff --git a/_images/bd1fa7a44a99e0832ce4d2e75114f5fb0e7041bf007832cd252b2ec622d08d0b.svg b/_images/bd1fa7a44a99e0832ce4d2e75114f5fb0e7041bf007832cd252b2ec622d08d0b.svg new file mode 100644 index 00000000..c706e827 --- /dev/null +++ b/_images/bd1fa7a44a99e0832ce4d2e75114f5fb0e7041bf007832cd252b2ec622d08d0b.svg @@ -0,0 +1,713 @@ + + + + + +create_function_job_819583e9e3328a02d26efc433a60218b + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994500> + + + +volume_lst_473b24fac60dad6f79608b1dcecb81c3 + +volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994650> + + + +volume_lst_473b24fac60dad6f79608b1dcecb81c3->create_function_job_819583e9e3328a02d26efc433a60218b + + + + + +0_8b5fadbd9d29d908c534248ef5e9315d + +0=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997950> + + + +0_8b5fadbd9d29d908c534248ef5e9315d->volume_lst_473b24fac60dad6f79608b1dcecb81c3 + + + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add + +working_directory=strain_0 + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_8b5fadbd9d29d908c534248ef5e9315d + + + + + +0_87110ed6b7c4d5bba96c34aeccc74df8 + +0=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49959a0> + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_87110ed6b7c4d5bba96c34aeccc74df8 + + + + + +energy_lst_eac6ea907afb7d28a1e710cf28b1bc21 + +energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997920> + + + +0_87110ed6b7c4d5bba96c34aeccc74df8->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21 + + + + + +input_dict_07bb4c07773ac201d36aae86ae8fe2fb + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994980> + + + +input_dict_07bb4c07773ac201d36aae86ae8fe2fb->0_8b5fadbd9d29d908c534248ef5e9315d + + + + + +input_dict_07bb4c07773ac201d36aae86ae8fe2fb->0_87110ed6b7c4d5bba96c34aeccc74df8 + + + + + +structure_d288c970f4f39abdf5917ab0cdda5a74 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49957c0> + + + +structure_d288c970f4f39abdf5917ab0cdda5a74->input_dict_07bb4c07773ac201d36aae86ae8fe2fb + + + + + +structure_24390cb51d2b8733707c1b0720f10ee1 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4660da0> + + + +structure_24390cb51d2b8733707c1b0720f10ee1->structure_d288c970f4f39abdf5917ab0cdda5a74 + + + + + +structure_cd6455098e547b09fab57e4b2675af93 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49955e0> + + + +structure_24390cb51d2b8733707c1b0720f10ee1->structure_cd6455098e547b09fab57e4b2675af93 + + + + + +structure_f8eea3d580ba67799a85fc572d29ff35 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4996fc0> + + + +structure_24390cb51d2b8733707c1b0720f10ee1->structure_f8eea3d580ba67799a85fc572d29ff35 + + + + + +structure_739f727cd683f52942cc877709ac6a2b + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994170> + + + +structure_24390cb51d2b8733707c1b0720f10ee1->structure_739f727cd683f52942cc877709ac6a2b + + + + + +structure_f3b0da6e211f75868023edb2cb868ac4 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4995250> + + + +structure_24390cb51d2b8733707c1b0720f10ee1->structure_f3b0da6e211f75868023edb2cb868ac4 + + + + + +input_dict_e3cba9a9960659f9dc41632e5327206e + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49955b0> + + + +structure_cd6455098e547b09fab57e4b2675af93->input_dict_e3cba9a9960659f9dc41632e5327206e + + + + + +input_dict_e93f22327a731a96309da7daa63359ec + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994710> + + + +structure_f8eea3d580ba67799a85fc572d29ff35->input_dict_e93f22327a731a96309da7daa63359ec + + + + + +input_dict_d66fbd538cf924fb2a8253bd48ef5c13 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49979b0> + + + +structure_739f727cd683f52942cc877709ac6a2b->input_dict_d66fbd538cf924fb2a8253bd48ef5c13 + + + + + +input_dict_7460bcb220d21c38a74f47f27eb9de2a + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994b00> + + + +structure_f3b0da6e211f75868023edb2cb868ac4->input_dict_7460bcb220d21c38a74f47f27eb9de2a + + + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7 + +working_directory=mini + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_24390cb51d2b8733707c1b0720f10ee1 + + + + + +input_dict_100eb1069a97b70f80697e03d6e0582d + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997d10> + + + +input_dict_100eb1069a97b70f80697e03d6e0582d->structure_24390cb51d2b8733707c1b0720f10ee1 + + + + + +structure_719a0b45b126422daa0a45939db22a79 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4996990> + + + +structure_719a0b45b126422daa0a45939db22a79->input_dict_100eb1069a97b70f80697e03d6e0582d + + + + + +element_467734216d9bd2497ffd28d5cd6daba0 + +element=Al + + + +element_467734216d9bd2497ffd28d5cd6daba0->structure_719a0b45b126422daa0a45939db22a79 + + + + + +a_aea0574e321c6f75f923c059730e9537 + +a=4.05 + + + +a_aea0574e321c6f75f923c059730e9537->structure_719a0b45b126422daa0a45939db22a79 + + + + + +cubic_bad787c53fa02a5559fe570238fdb23a + +cubic=True + + + +cubic_bad787c53fa02a5559fe570238fdb23a->structure_719a0b45b126422daa0a45939db22a79 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10 + +pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'} + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_07bb4c07773ac201d36aae86ae8fe2fb + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_100eb1069a97b70f80697e03d6e0582d + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e3cba9a9960659f9dc41632e5327206e + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e93f22327a731a96309da7daa63359ec + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_d66fbd538cf924fb2a8253bd48ef5c13 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_7460bcb220d21c38a74f47f27eb9de2a + + + + + +1_94302ebcb371a379af51f312ddde4842 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4996090> + + + +input_dict_e3cba9a9960659f9dc41632e5327206e->1_94302ebcb371a379af51f312ddde4842 + + + + + +1_e7c02b63ee60e6027e07408744058bb7 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4995eb0> + + + +input_dict_e3cba9a9960659f9dc41632e5327206e->1_e7c02b63ee60e6027e07408744058bb7 + + + + + +2_dda2e9a60d8da7b2145dfb00de5c55c7 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49950d0> + + + +input_dict_e93f22327a731a96309da7daa63359ec->2_dda2e9a60d8da7b2145dfb00de5c55c7 + + + + + +2_af768fbc51beefdd7dbf069476fb362c + +2=<pyiron_base.project.delayed.DelayedObject object at 0x7c99dbbc7d70> + + + +input_dict_e93f22327a731a96309da7daa63359ec->2_af768fbc51beefdd7dbf069476fb362c + + + + + +3_fa9d99441c09b3d51ecb159095ac606c + +3=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49969f0> + + + +input_dict_d66fbd538cf924fb2a8253bd48ef5c13->3_fa9d99441c09b3d51ecb159095ac606c + + + + + +3_9c4338c233da3f7fbf2bd1577209c8a4 + +3=<pyiron_base.project.delayed.DelayedObject object at 0x7c99dbb7a5a0> + + + +input_dict_d66fbd538cf924fb2a8253bd48ef5c13->3_9c4338c233da3f7fbf2bd1577209c8a4 + + + + + +4_7c7d811c8847195569c2105c938c464a + +4=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997230> + + + +input_dict_7460bcb220d21c38a74f47f27eb9de2a->4_7c7d811c8847195569c2105c938c464a + + + + + +4_3e48dd53dfddd2346d05b7b64e55ab38 + +4=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e446b770> + + + +input_dict_7460bcb220d21c38a74f47f27eb9de2a->4_3e48dd53dfddd2346d05b7b64e55ab38 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa + +kpts=[3, 3, 3] + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_07bb4c07773ac201d36aae86ae8fe2fb + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_100eb1069a97b70f80697e03d6e0582d + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e3cba9a9960659f9dc41632e5327206e + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e93f22327a731a96309da7daa63359ec + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_d66fbd538cf924fb2a8253bd48ef5c13 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_7460bcb220d21c38a74f47f27eb9de2a + + + + + +calculation_77b75a01e65d83962d14fa8a882d6c34 + +calculation=vc-relax + + + +calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_100eb1069a97b70f80697e03d6e0582d + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9 + +smearing=0.02 + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_07bb4c07773ac201d36aae86ae8fe2fb + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_100eb1069a97b70f80697e03d6e0582d + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e3cba9a9960659f9dc41632e5327206e + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e93f22327a731a96309da7daa63359ec + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_d66fbd538cf924fb2a8253bd48ef5c13 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_7460bcb220d21c38a74f47f27eb9de2a + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781 + +strain_lst=[0.9, 0.95, 1.0, 1.05, 1.1] + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_d288c970f4f39abdf5917ab0cdda5a74 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_cd6455098e547b09fab57e4b2675af93 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_f8eea3d580ba67799a85fc572d29ff35 + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_739f727cd683f52942cc877709ac6a2b + + + + + +strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_f3b0da6e211f75868023edb2cb868ac4 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83 + +calculation=scf + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_07bb4c07773ac201d36aae86ae8fe2fb + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_e3cba9a9960659f9dc41632e5327206e + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_e93f22327a731a96309da7daa63359ec + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_d66fbd538cf924fb2a8253bd48ef5c13 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_7460bcb220d21c38a74f47f27eb9de2a + + + + + +1_94302ebcb371a379af51f312ddde4842->volume_lst_473b24fac60dad6f79608b1dcecb81c3 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd + +working_directory=strain_1 + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_94302ebcb371a379af51f312ddde4842 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_e7c02b63ee60e6027e07408744058bb7 + + + + + +1_e7c02b63ee60e6027e07408744058bb7->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21 + + + + + +2_dda2e9a60d8da7b2145dfb00de5c55c7->volume_lst_473b24fac60dad6f79608b1dcecb81c3 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992 + +working_directory=strain_2 + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_dda2e9a60d8da7b2145dfb00de5c55c7 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_af768fbc51beefdd7dbf069476fb362c + + + + + +2_af768fbc51beefdd7dbf069476fb362c->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21 + + + + + +3_fa9d99441c09b3d51ecb159095ac606c->volume_lst_473b24fac60dad6f79608b1dcecb81c3 + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f + +working_directory=strain_3 + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_fa9d99441c09b3d51ecb159095ac606c + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_9c4338c233da3f7fbf2bd1577209c8a4 + + + + + +3_9c4338c233da3f7fbf2bd1577209c8a4->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21 + + + + + +4_7c7d811c8847195569c2105c938c464a->volume_lst_473b24fac60dad6f79608b1dcecb81c3 + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7 + +working_directory=strain_4 + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_7c7d811c8847195569c2105c938c464a + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_3e48dd53dfddd2346d05b7b64e55ab38 + + + + + +4_3e48dd53dfddd2346d05b7b64e55ab38->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21 + + + + + +energy_lst_eac6ea907afb7d28a1e710cf28b1bc21->create_function_job_819583e9e3328a02d26efc433a60218b + + + + + \ No newline at end of file diff --git a/_images/c4a7b7438914bc4d8a2af98fd80cb1fe1108c75ae2410c1e308e2918b1de01d0.svg b/_images/c4a7b7438914bc4d8a2af98fd80cb1fe1108c75ae2410c1e308e2918b1de01d0.svg new file mode 100644 index 00000000..c22c1c98 --- /dev/null +++ b/_images/c4a7b7438914bc4d8a2af98fd80cb1fe1108c75ae2410c1e308e2918b1de01d0.svg @@ -0,0 +1,713 @@ + + + + + +create_function_job_7a6b0a5d731ab6c2313227f09941d617 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521b110> + + + +volume_lst_30c54979ac77823618f2e69329ff2e23 + +volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521aea0> + + + +volume_lst_30c54979ac77823618f2e69329ff2e23->create_function_job_7a6b0a5d731ab6c2313227f09941d617 + + + + + +0_b28c4ab19cf80aceb6ea9905c5579cdf + +0=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a900> + + + +0_b28c4ab19cf80aceb6ea9905c5579cdf->volume_lst_30c54979ac77823618f2e69329ff2e23 + + + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add + +working_directory=strain_0 + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_b28c4ab19cf80aceb6ea9905c5579cdf + + + + + +0_31407cd5438b8f801835dcb5c1b4d41c + +0=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a2d0> + + + +working_directory_2e9abb255f1a31f7d29b4451ad422add->0_31407cd5438b8f801835dcb5c1b4d41c + + + + + +energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61 + +energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a870> + + + +0_31407cd5438b8f801835dcb5c1b4d41c->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61 + + + + + +input_dict_26015174619bcf580cff994859503441 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219610> + + + +input_dict_26015174619bcf580cff994859503441->0_b28c4ab19cf80aceb6ea9905c5579cdf + + + + + +input_dict_26015174619bcf580cff994859503441->0_31407cd5438b8f801835dcb5c1b4d41c + + + + + +structure_d68ff2adbab972340efae09bf2dca5b6 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219340> + + + +structure_d68ff2adbab972340efae09bf2dca5b6->input_dict_26015174619bcf580cff994859503441 + + + + + +structure_f26c3fb8bc87bf85ed5296f40ec2ae34 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e6154ef320> + + + +structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_d68ff2adbab972340efae09bf2dca5b6 + + + + + +structure_6c6a71df64a4775eb5b2b6627712d17c + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219010> + + + +structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_6c6a71df64a4775eb5b2b6627712d17c + + + + + +structure_535ac9ea932cf7dd1ea2a048ff184ef9 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218ce0> + + + +structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_535ac9ea932cf7dd1ea2a048ff184ef9 + + + + + +structure_b52cf29645cbdc73b2126ad614a6748d + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e6152189b0> + + + +structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_b52cf29645cbdc73b2126ad614a6748d + + + + + +structure_8b6656321f1e07cd30f21bb9d083f734 + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218680> + + + +structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_8b6656321f1e07cd30f21bb9d083f734 + + + + + +input_dict_aa3da715c96cd1fef134c69b1da72e42 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e6152192b0> + + + +structure_6c6a71df64a4775eb5b2b6627712d17c->input_dict_aa3da715c96cd1fef134c69b1da72e42 + + + + + +input_dict_eac440c283c1a2924bb89ecb82a35639 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218f80> + + + +structure_535ac9ea932cf7dd1ea2a048ff184ef9->input_dict_eac440c283c1a2924bb89ecb82a35639 + + + + + +input_dict_523110518563cadc66dc6aefb11923b8 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218c50> + + + +structure_b52cf29645cbdc73b2126ad614a6748d->input_dict_523110518563cadc66dc6aefb11923b8 + + + + + +input_dict_20011bd02b7fe4c3fa64102f5cee0ce1 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218920> + + + +structure_8b6656321f1e07cd30f21bb9d083f734->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1 + + + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7 + +working_directory=mini + + + +working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_f26c3fb8bc87bf85ed5296f40ec2ae34 + + + + + +input_dict_f2214e5b325d98ae04c3309fcba1e8c7 + +input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e6151fbbf0> + + + +input_dict_f2214e5b325d98ae04c3309fcba1e8c7->structure_f26c3fb8bc87bf85ed5296f40ec2ae34 + + + + + +structure_85578fbee37b882dfe6c61e46c6e3e6f + +structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e6151fbc80> + + + +structure_85578fbee37b882dfe6c61e46c6e3e6f->input_dict_f2214e5b325d98ae04c3309fcba1e8c7 + + + + + +element_467734216d9bd2497ffd28d5cd6daba0 + +element=Al + + + +element_467734216d9bd2497ffd28d5cd6daba0->structure_85578fbee37b882dfe6c61e46c6e3e6f + + + + + +a_457b6d376c6fce696df148a385afa46d + +a=4.04 + + + +a_457b6d376c6fce696df148a385afa46d->structure_85578fbee37b882dfe6c61e46c6e3e6f + + + + + +cubic_bad787c53fa02a5559fe570238fdb23a + +cubic=True + + + +cubic_bad787c53fa02a5559fe570238fdb23a->structure_85578fbee37b882dfe6c61e46c6e3e6f + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10 + +pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'} + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_26015174619bcf580cff994859503441 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_f2214e5b325d98ae04c3309fcba1e8c7 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_aa3da715c96cd1fef134c69b1da72e42 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_eac440c283c1a2924bb89ecb82a35639 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_523110518563cadc66dc6aefb11923b8 + + + + + +pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1 + + + + + +1_7641bae76279fbdc2c20282392d6c910 + +1=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a8d0> + + + +input_dict_aa3da715c96cd1fef134c69b1da72e42->1_7641bae76279fbdc2c20282392d6c910 + + + + + +1_6a3f07c7438420109a6c39351d9758ad + +1=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a2a0> + + + +input_dict_aa3da715c96cd1fef134c69b1da72e42->1_6a3f07c7438420109a6c39351d9758ad + + + + + +2_3cb49005be6d0d7ed322544b87487017 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a6f0> + + + +input_dict_eac440c283c1a2924bb89ecb82a35639->2_3cb49005be6d0d7ed322544b87487017 + + + + + +2_98818efec695006665bf7df606718768 + +2=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219df0> + + + +input_dict_eac440c283c1a2924bb89ecb82a35639->2_98818efec695006665bf7df606718768 + + + + + +3_139a6bb55cab1b6d5192deadc359db9a + +3=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521aa50> + + + +input_dict_523110518563cadc66dc6aefb11923b8->3_139a6bb55cab1b6d5192deadc359db9a + + + + + +3_9d10a16dc50af676367547dceb0d00b7 + +3=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a420> + + + +input_dict_523110518563cadc66dc6aefb11923b8->3_9d10a16dc50af676367547dceb0d00b7 + + + + + +4_8c659057d9f7b0eb48589698a769c3e3 + +4=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521ab10> + + + +input_dict_20011bd02b7fe4c3fa64102f5cee0ce1->4_8c659057d9f7b0eb48589698a769c3e3 + + + + + +4_2ab7c060eeaf5356ef9c2df021a5051d + +4=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a4e0> + + + +input_dict_20011bd02b7fe4c3fa64102f5cee0ce1->4_2ab7c060eeaf5356ef9c2df021a5051d + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa + +kpts=[3, 3, 3] + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_26015174619bcf580cff994859503441 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_f2214e5b325d98ae04c3309fcba1e8c7 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_aa3da715c96cd1fef134c69b1da72e42 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_eac440c283c1a2924bb89ecb82a35639 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_523110518563cadc66dc6aefb11923b8 + + + + + +kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1 + + + + + +calculation_77b75a01e65d83962d14fa8a882d6c34 + +calculation=vc-relax + + + +calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_f2214e5b325d98ae04c3309fcba1e8c7 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9 + +smearing=0.02 + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_26015174619bcf580cff994859503441 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_f2214e5b325d98ae04c3309fcba1e8c7 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_aa3da715c96cd1fef134c69b1da72e42 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_eac440c283c1a2924bb89ecb82a35639 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_523110518563cadc66dc6aefb11923b8 + + + + + +smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1 + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86 + +strain_lst=[0.9, 0.9500000000000001, 1.0, 1.05, 1.1] + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_d68ff2adbab972340efae09bf2dca5b6 + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_6c6a71df64a4775eb5b2b6627712d17c + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_535ac9ea932cf7dd1ea2a048ff184ef9 + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_b52cf29645cbdc73b2126ad614a6748d + + + + + +strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_8b6656321f1e07cd30f21bb9d083f734 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83 + +calculation=scf + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_26015174619bcf580cff994859503441 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_aa3da715c96cd1fef134c69b1da72e42 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_eac440c283c1a2924bb89ecb82a35639 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_523110518563cadc66dc6aefb11923b8 + + + + + +calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1 + + + + + +1_7641bae76279fbdc2c20282392d6c910->volume_lst_30c54979ac77823618f2e69329ff2e23 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd + +working_directory=strain_1 + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_7641bae76279fbdc2c20282392d6c910 + + + + + +working_directory_5423d2cc67129a6d0383af6f347df5bd->1_6a3f07c7438420109a6c39351d9758ad + + + + + +1_6a3f07c7438420109a6c39351d9758ad->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61 + + + + + +2_3cb49005be6d0d7ed322544b87487017->volume_lst_30c54979ac77823618f2e69329ff2e23 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992 + +working_directory=strain_2 + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_3cb49005be6d0d7ed322544b87487017 + + + + + +working_directory_cc646e064ddfc4b2811aba3d86d27992->2_98818efec695006665bf7df606718768 + + + + + +2_98818efec695006665bf7df606718768->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61 + + + + + +3_139a6bb55cab1b6d5192deadc359db9a->volume_lst_30c54979ac77823618f2e69329ff2e23 + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f + +working_directory=strain_3 + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_139a6bb55cab1b6d5192deadc359db9a + + + + + +working_directory_e27768d53df6cd8dc245c52054ecf31f->3_9d10a16dc50af676367547dceb0d00b7 + + + + + +3_9d10a16dc50af676367547dceb0d00b7->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61 + + + + + +4_8c659057d9f7b0eb48589698a769c3e3->volume_lst_30c54979ac77823618f2e69329ff2e23 + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7 + +working_directory=strain_4 + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_8c659057d9f7b0eb48589698a769c3e3 + + + + + +working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_2ab7c060eeaf5356ef9c2df021a5051d + + + + + +4_2ab7c060eeaf5356ef9c2df021a5051d->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61 + + + + + +energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61->create_function_job_7a6b0a5d731ab6c2313227f09941d617 + + + + + \ No newline at end of file diff --git a/_images/d306f99428509411d5f4e14a6cf22abfcc79ab4f34b9001705e5807564c4042d.svg b/_images/d306f99428509411d5f4e14a6cf22abfcc79ab4f34b9001705e5807564c4042d.svg new file mode 100644 index 00000000..548c3764 --- /dev/null +++ b/_images/d306f99428509411d5f4e14a6cf22abfcc79ab4f34b9001705e5807564c4042d.svg @@ -0,0 +1,83 @@ + + + + + +create_function_job_90a5b42c58fdc46b3ef919df41d06f68 + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8bb90> + + + +x_ac1d6fed32a5172c23c7d80f1257d4cf + +x=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8ba40> + + + +x_ac1d6fed32a5172c23c7d80f1257d4cf->create_function_job_90a5b42c58fdc46b3ef919df41d06f68 + + + + + +x_19fc443a8a97273a376990b43ca208fc + +x=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8b770> + + + +x_19fc443a8a97273a376990b43ca208fc->x_ac1d6fed32a5172c23c7d80f1257d4cf + + + + + +x_1d847da32ecaabf6731c38f798c3d4ce + +x=1 + + + +x_1d847da32ecaabf6731c38f798c3d4ce->x_19fc443a8a97273a376990b43ca208fc + + + + + +y_8b6d8b56733d62ed930105017913a62e + +y=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8b740> + + + +x_1d847da32ecaabf6731c38f798c3d4ce->y_8b6d8b56733d62ed930105017913a62e + + + + + +y_8b6d8b56733d62ed930105017913a62e->x_ac1d6fed32a5172c23c7d80f1257d4cf + + + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6 + +y=2 + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6->x_19fc443a8a97273a376990b43ca208fc + + + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6->y_8b6d8b56733d62ed930105017913a62e + + + + + \ No newline at end of file diff --git a/_images/d3c666f569ea1141f615bac1a3f38f0e11ab7c0b2afd5f18b90f73baf0048218.svg b/_images/d3c666f569ea1141f615bac1a3f38f0e11ab7c0b2afd5f18b90f73baf0048218.svg new file mode 100644 index 00000000..0869d32e --- /dev/null +++ b/_images/d3c666f569ea1141f615bac1a3f38f0e11ab7c0b2afd5f18b90f73baf0048218.svg @@ -0,0 +1,83 @@ + + + + + +create_function_job_25906340bd0c28c44fd73d69e7a3d8bc + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x733f400d1310> + + + +x_1a7fff02f6473a13e5e8742988186611 + +x=<pyiron_base.project.delayed.DelayedObject object at 0x733f40ddb0e0> + + + +x_1a7fff02f6473a13e5e8742988186611->create_function_job_25906340bd0c28c44fd73d69e7a3d8bc + + + + + +x_e4655695917c433de56d1c64232473f9 + +x=<pyiron_base.project.delayed.DelayedObject object at 0x733f4db8caa0> + + + +x_e4655695917c433de56d1c64232473f9->x_1a7fff02f6473a13e5e8742988186611 + + + + + +x_1d847da32ecaabf6731c38f798c3d4ce + +x=1 + + + +x_1d847da32ecaabf6731c38f798c3d4ce->x_e4655695917c433de56d1c64232473f9 + + + + + +y_3b83397feef07a74d9a046a1b7f57749 + +y=<pyiron_base.project.delayed.DelayedObject object at 0x733f4ed91130> + + + +x_1d847da32ecaabf6731c38f798c3d4ce->y_3b83397feef07a74d9a046a1b7f57749 + + + + + +y_3b83397feef07a74d9a046a1b7f57749->x_1a7fff02f6473a13e5e8742988186611 + + + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6 + +y=2 + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6->x_e4655695917c433de56d1c64232473f9 + + + + + +y_a9ec4f5f33f0d64e74ed5d9900bceac6->y_3b83397feef07a74d9a046a1b7f57749 + + + + + \ No newline at end of file diff --git a/_images/ebaf30b3693125d11543f26ab46c11c97c5607bcb3fd4890a678f5f105134cd3.svg b/_images/ebaf30b3693125d11543f26ab46c11c97c5607bcb3fd4890a678f5f105134cd3.svg new file mode 100644 index 00000000..46fddc5a --- /dev/null +++ b/_images/ebaf30b3693125d11543f26ab46c11c97c5607bcb3fd4890a678f5f105134cd3.svg @@ -0,0 +1,3669 @@ + + + + + + +clusterpyiron_base_qe + +pyiron_base_qe: Workflow + +clusterpyiron_base_qeInputs + + + + + + + +Inputs + + +clusterpyiron_base_qeOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeplot_energy_volume_curve + + + + + + + +plot_energy_volume_curve: plot_energy_volume_curve + + +clusterpyiron_base_qeplot_energy_volume_curveInputs + + + + + + + +Inputs + + +clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_list_0 + + + + + + + +get_list_0: get_list + + +clusterpyiron_base_qeget_list_0Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_list_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qecalculate_qe_0 + + + + + + + +calculate_qe_0: calculate_qe + + +clusterpyiron_base_qecalculate_qe_0Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qecalculate_qe_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_dict_0 + + + + + + + +get_dict_0: get_dict + + +clusterpyiron_base_qeget_dict_0Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_dict_0OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qegenerate_structures + + + + + + + +generate_structures: generate_structures + + +clusterpyiron_base_qegenerate_structuresInputs + + + + + + + +Inputs + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qecalculate_qe_1 + + + + + + + +calculate_qe_1: calculate_qe + + +clusterpyiron_base_qecalculate_qe_1Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qecalculate_qe_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_dict_1 + + + + + + + +get_dict_1: get_dict + + +clusterpyiron_base_qeget_dict_1Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_dict_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_bulk_structure + + + + + + + +get_bulk_structure: get_bulk_structure + + +clusterpyiron_base_qeget_bulk_structureInputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_bulk_structureOutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qecalculate_qe_2 + + + + + + + +calculate_qe_2: calculate_qe + + +clusterpyiron_base_qecalculate_qe_2Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qecalculate_qe_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_dict_2 + + + + + + + +get_dict_2: get_dict + + +clusterpyiron_base_qeget_dict_2Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_dict_2OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qecalculate_qe_3 + + + + + + + +calculate_qe_3: calculate_qe + + +clusterpyiron_base_qecalculate_qe_3Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qecalculate_qe_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_dict_3 + + + + + + + +get_dict_3: get_dict + + +clusterpyiron_base_qeget_dict_3Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_dict_3OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qecalculate_qe_4 + + + + + + + +calculate_qe_4: calculate_qe + + +clusterpyiron_base_qecalculate_qe_4Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qecalculate_qe_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_dict_4 + + + + + + + +get_dict_4: get_dict + + +clusterpyiron_base_qeget_dict_4Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_dict_4OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qecalculate_qe_5 + + + + + + + +calculate_qe_5: calculate_qe + + +clusterpyiron_base_qecalculate_qe_5Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qecalculate_qe_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_dict_5 + + + + + + + +get_dict_5: get_dict + + +clusterpyiron_base_qeget_dict_5Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_dict_5OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeget_list_1 + + + + + + + +get_list_1: get_list + + +clusterpyiron_base_qeget_list_1Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeget_list_1OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443 + + + + + + + +injected_GetItem_8448190184761347443: GetItem + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667 + + + + + + + +injected_GetItem_6888005398033223667: GetItem + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208 + + + + + + + +injected_GetItem_m2505717702026653208: GetItem + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258 + + + + + + + +injected_GetItem_m5521004309196267258: GetItem + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213 + + + + + + + +injected_GetItem_1374405447673059213: GetItem + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602 + + + + + + + +injected_GetItem_4462229027723870602: GetItem + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276 + + + + + + + +injected_GetItem_2384803467043042276: GetItem + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316 + + + + + + + +injected_GetItem_7146740412064090316: GetItem + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618 + + + + + + + +injected_GetItem_m350772300549240618: GetItem + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236 + + + + + + + +injected_GetItem_4087305954482680236: GetItem + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176 + + + + + + + +injected_GetItem_4692661231677176: GetItem + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074 + + + + + + + +injected_GetItem_1607275248375012074: GetItem + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821 + + + + + + + +injected_GetItem_3768223398597047821: GetItem + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319 + + + + + + + +injected_GetItem_8054512655741111319: GetItem + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312 + + + + + + + +injected_GetItem_m5340856505475737312: GetItem + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjection + + + + + + + +OutputsWithInjection + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304 + + + + + + + +injected_GetItem_m9009035754021092304: GetItem + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputs + + + + + + + +Inputs + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjection + + + + + + + +OutputsWithInjection + + + +clusterpyiron_base_qeInputsrun + +run + + + +clusterpyiron_base_qeOutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeInputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeInputscalculate_qe_0__working_directory + +calculate_qe_0__working_directory + + + +clusterpyiron_base_qecalculate_qe_0Inputsworking_directory + +working_directory + + + +clusterpyiron_base_qeInputscalculate_qe_0__working_directory->clusterpyiron_base_qecalculate_qe_0Inputsworking_directory + + + + + + +clusterpyiron_base_qeInputsget_dict_0__pseudopotentials + +get_dict_0__pseudopotentials + + + +clusterpyiron_base_qeget_dict_0Inputspseudopotentials + +pseudopotentials + + + +clusterpyiron_base_qeInputsget_dict_0__pseudopotentials->clusterpyiron_base_qeget_dict_0Inputspseudopotentials + + + + + + +clusterpyiron_base_qeInputsget_dict_0__kpts + +get_dict_0__kpts + + + +clusterpyiron_base_qeget_dict_0Inputskpts + +kpts + + + +clusterpyiron_base_qeInputsget_dict_0__kpts->clusterpyiron_base_qeget_dict_0Inputskpts + + + + + + +clusterpyiron_base_qeInputsget_dict_0__calculation + +get_dict_0__calculation + + + +clusterpyiron_base_qeget_dict_0Inputscalculation + +calculation + + + +clusterpyiron_base_qeInputsget_dict_0__calculation->clusterpyiron_base_qeget_dict_0Inputscalculation + + + + + + +clusterpyiron_base_qeInputsget_dict_0__smearing + +get_dict_0__smearing + + + +clusterpyiron_base_qeget_dict_0Inputssmearing + +smearing + + + +clusterpyiron_base_qeInputsget_dict_0__smearing->clusterpyiron_base_qeget_dict_0Inputssmearing + + + + + + +clusterpyiron_base_qeInputsgenerate_structures__strain_lst + +generate_structures__strain_lst + + + +clusterpyiron_base_qegenerate_structuresInputsstrain_lst + +strain_lst + + + +clusterpyiron_base_qeInputsgenerate_structures__strain_lst->clusterpyiron_base_qegenerate_structuresInputsstrain_lst + + + + + + +clusterpyiron_base_qeInputscalculate_qe_1__working_directory + +calculate_qe_1__working_directory + + + +clusterpyiron_base_qecalculate_qe_1Inputsworking_directory + +working_directory + + + +clusterpyiron_base_qeInputscalculate_qe_1__working_directory->clusterpyiron_base_qecalculate_qe_1Inputsworking_directory + + + + + + +clusterpyiron_base_qeInputsget_dict_1__pseudopotentials + +get_dict_1__pseudopotentials + + + +clusterpyiron_base_qeget_dict_1Inputspseudopotentials + +pseudopotentials + + + +clusterpyiron_base_qeInputsget_dict_1__pseudopotentials->clusterpyiron_base_qeget_dict_1Inputspseudopotentials + + + + + + +clusterpyiron_base_qeInputsget_dict_1__kpts + +get_dict_1__kpts + + + +clusterpyiron_base_qeget_dict_1Inputskpts + +kpts + + + +clusterpyiron_base_qeInputsget_dict_1__kpts->clusterpyiron_base_qeget_dict_1Inputskpts + + + + + + +clusterpyiron_base_qeInputsget_dict_1__calculation + +get_dict_1__calculation + + + +clusterpyiron_base_qeget_dict_1Inputscalculation + +calculation + + + +clusterpyiron_base_qeInputsget_dict_1__calculation->clusterpyiron_base_qeget_dict_1Inputscalculation + + + + + + +clusterpyiron_base_qeInputsget_dict_1__smearing + +get_dict_1__smearing + + + +clusterpyiron_base_qeget_dict_1Inputssmearing + +smearing + + + +clusterpyiron_base_qeInputsget_dict_1__smearing->clusterpyiron_base_qeget_dict_1Inputssmearing + + + + + + +clusterpyiron_base_qeInputsget_bulk_structure__element + +get_bulk_structure__element + + + +clusterpyiron_base_qeget_bulk_structureInputselement + +element + + + +clusterpyiron_base_qeInputsget_bulk_structure__element->clusterpyiron_base_qeget_bulk_structureInputselement + + + + + + +clusterpyiron_base_qeInputsget_bulk_structure__a + +get_bulk_structure__a + + + +clusterpyiron_base_qeget_bulk_structureInputsa + +a + + + +clusterpyiron_base_qeInputsget_bulk_structure__a->clusterpyiron_base_qeget_bulk_structureInputsa + + + + + + +clusterpyiron_base_qeInputsget_bulk_structure__cubic + +get_bulk_structure__cubic + + + +clusterpyiron_base_qeget_bulk_structureInputscubic + +cubic + + + +clusterpyiron_base_qeInputsget_bulk_structure__cubic->clusterpyiron_base_qeget_bulk_structureInputscubic + + + + + + +clusterpyiron_base_qeInputscalculate_qe_2__working_directory + +calculate_qe_2__working_directory + + + +clusterpyiron_base_qecalculate_qe_2Inputsworking_directory + +working_directory + + + +clusterpyiron_base_qeInputscalculate_qe_2__working_directory->clusterpyiron_base_qecalculate_qe_2Inputsworking_directory + + + + + + +clusterpyiron_base_qeInputsget_dict_2__pseudopotentials + +get_dict_2__pseudopotentials + + + +clusterpyiron_base_qeget_dict_2Inputspseudopotentials + +pseudopotentials + + + +clusterpyiron_base_qeInputsget_dict_2__pseudopotentials->clusterpyiron_base_qeget_dict_2Inputspseudopotentials + + + + + + +clusterpyiron_base_qeInputsget_dict_2__kpts + +get_dict_2__kpts + + + +clusterpyiron_base_qeget_dict_2Inputskpts + +kpts + + + +clusterpyiron_base_qeInputsget_dict_2__kpts->clusterpyiron_base_qeget_dict_2Inputskpts + + + + + + +clusterpyiron_base_qeInputsget_dict_2__calculation + +get_dict_2__calculation + + + +clusterpyiron_base_qeget_dict_2Inputscalculation + +calculation + + + +clusterpyiron_base_qeInputsget_dict_2__calculation->clusterpyiron_base_qeget_dict_2Inputscalculation + + + + + + +clusterpyiron_base_qeInputsget_dict_2__smearing + +get_dict_2__smearing + + + +clusterpyiron_base_qeget_dict_2Inputssmearing + +smearing + + + +clusterpyiron_base_qeInputsget_dict_2__smearing->clusterpyiron_base_qeget_dict_2Inputssmearing + + + + + + +clusterpyiron_base_qeInputscalculate_qe_3__working_directory + +calculate_qe_3__working_directory + + + +clusterpyiron_base_qecalculate_qe_3Inputsworking_directory + +working_directory + + + +clusterpyiron_base_qeInputscalculate_qe_3__working_directory->clusterpyiron_base_qecalculate_qe_3Inputsworking_directory + + + + + + +clusterpyiron_base_qeInputsget_dict_3__pseudopotentials + +get_dict_3__pseudopotentials + + + +clusterpyiron_base_qeget_dict_3Inputspseudopotentials + +pseudopotentials + + + +clusterpyiron_base_qeInputsget_dict_3__pseudopotentials->clusterpyiron_base_qeget_dict_3Inputspseudopotentials + + + + + + +clusterpyiron_base_qeInputsget_dict_3__kpts + +get_dict_3__kpts + + + +clusterpyiron_base_qeget_dict_3Inputskpts + +kpts + + + +clusterpyiron_base_qeInputsget_dict_3__kpts->clusterpyiron_base_qeget_dict_3Inputskpts + + + + + + +clusterpyiron_base_qeInputsget_dict_3__calculation + +get_dict_3__calculation + + + +clusterpyiron_base_qeget_dict_3Inputscalculation + +calculation + + + +clusterpyiron_base_qeInputsget_dict_3__calculation->clusterpyiron_base_qeget_dict_3Inputscalculation + + + + + + +clusterpyiron_base_qeInputsget_dict_3__smearing + +get_dict_3__smearing + + + +clusterpyiron_base_qeget_dict_3Inputssmearing + +smearing + + + +clusterpyiron_base_qeInputsget_dict_3__smearing->clusterpyiron_base_qeget_dict_3Inputssmearing + + + + + + +clusterpyiron_base_qeInputscalculate_qe_4__working_directory + +calculate_qe_4__working_directory + + + +clusterpyiron_base_qecalculate_qe_4Inputsworking_directory + +working_directory + + + +clusterpyiron_base_qeInputscalculate_qe_4__working_directory->clusterpyiron_base_qecalculate_qe_4Inputsworking_directory + + + + + + +clusterpyiron_base_qeInputsget_dict_4__pseudopotentials + +get_dict_4__pseudopotentials + + + +clusterpyiron_base_qeget_dict_4Inputspseudopotentials + +pseudopotentials + + + +clusterpyiron_base_qeInputsget_dict_4__pseudopotentials->clusterpyiron_base_qeget_dict_4Inputspseudopotentials + + + + + + +clusterpyiron_base_qeInputsget_dict_4__kpts + +get_dict_4__kpts + + + +clusterpyiron_base_qeget_dict_4Inputskpts + +kpts + + + +clusterpyiron_base_qeInputsget_dict_4__kpts->clusterpyiron_base_qeget_dict_4Inputskpts + + + + + + +clusterpyiron_base_qeInputsget_dict_4__calculation + +get_dict_4__calculation + + + +clusterpyiron_base_qeget_dict_4Inputscalculation + +calculation + + + +clusterpyiron_base_qeInputsget_dict_4__calculation->clusterpyiron_base_qeget_dict_4Inputscalculation + + + + + + +clusterpyiron_base_qeInputsget_dict_4__smearing + +get_dict_4__smearing + + + +clusterpyiron_base_qeget_dict_4Inputssmearing + +smearing + + + +clusterpyiron_base_qeInputsget_dict_4__smearing->clusterpyiron_base_qeget_dict_4Inputssmearing + + + + + + +clusterpyiron_base_qeInputscalculate_qe_5__working_directory + +calculate_qe_5__working_directory + + + +clusterpyiron_base_qecalculate_qe_5Inputsworking_directory + +working_directory + + + +clusterpyiron_base_qeInputscalculate_qe_5__working_directory->clusterpyiron_base_qecalculate_qe_5Inputsworking_directory + + + + + + +clusterpyiron_base_qeInputsget_dict_5__pseudopotentials + +get_dict_5__pseudopotentials + + + +clusterpyiron_base_qeget_dict_5Inputspseudopotentials + +pseudopotentials + + + +clusterpyiron_base_qeInputsget_dict_5__pseudopotentials->clusterpyiron_base_qeget_dict_5Inputspseudopotentials + + + + + + +clusterpyiron_base_qeInputsget_dict_5__kpts + +get_dict_5__kpts + + + +clusterpyiron_base_qeget_dict_5Inputskpts + +kpts + + + +clusterpyiron_base_qeInputsget_dict_5__kpts->clusterpyiron_base_qeget_dict_5Inputskpts + + + + + + +clusterpyiron_base_qeInputsget_dict_5__calculation + +get_dict_5__calculation + + + +clusterpyiron_base_qeget_dict_5Inputscalculation + +calculation + + + +clusterpyiron_base_qeInputsget_dict_5__calculation->clusterpyiron_base_qeget_dict_5Inputscalculation + + + + + + +clusterpyiron_base_qeInputsget_dict_5__smearing + +get_dict_5__smearing + + + +clusterpyiron_base_qeget_dict_5Inputssmearing + +smearing + + + +clusterpyiron_base_qeInputsget_dict_5__smearing->clusterpyiron_base_qeget_dict_5Inputssmearing + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_8448190184761347443__item + +injected_GetItem_8448190184761347443__item + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_8448190184761347443__item->clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_6888005398033223667__item + +injected_GetItem_6888005398033223667__item + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_6888005398033223667__item->clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_m2505717702026653208__item + +injected_GetItem_m2505717702026653208__item + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_m2505717702026653208__item->clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_m5521004309196267258__item + +injected_GetItem_m5521004309196267258__item + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_m5521004309196267258__item->clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_1374405447673059213__item + +injected_GetItem_1374405447673059213__item + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_1374405447673059213__item->clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_4462229027723870602__item + +injected_GetItem_4462229027723870602__item + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_4462229027723870602__item->clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_2384803467043042276__item + +injected_GetItem_2384803467043042276__item + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_2384803467043042276__item->clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_7146740412064090316__item + +injected_GetItem_7146740412064090316__item + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_7146740412064090316__item->clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_m350772300549240618__item + +injected_GetItem_m350772300549240618__item + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_m350772300549240618__item->clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_4087305954482680236__item + +injected_GetItem_4087305954482680236__item + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_4087305954482680236__item->clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_4692661231677176__item + +injected_GetItem_4692661231677176__item + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_4692661231677176__item->clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_1607275248375012074__item + +injected_GetItem_1607275248375012074__item + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_1607275248375012074__item->clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_3768223398597047821__item + +injected_GetItem_3768223398597047821__item + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_3768223398597047821__item->clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_8054512655741111319__item + +injected_GetItem_8054512655741111319__item + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_8054512655741111319__item->clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_m5340856505475737312__item + +injected_GetItem_m5340856505475737312__item + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_m5340856505475737312__item->clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsitem + + + + + + +clusterpyiron_base_qeInputsinjected_GetItem_m9009035754021092304__item + +injected_GetItem_m9009035754021092304__item + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsitem + +item + + + +clusterpyiron_base_qeInputsinjected_GetItem_m9009035754021092304__item->clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsitem + + + + + + +clusterpyiron_base_qeOutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + +plot_energy_volume_curve__plot_energy_volume_curve + + + +clusterpyiron_base_qeplot_energy_volume_curveInputsrun + +run + + + +clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeplot_energy_volume_curveInputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeplot_energy_volume_curveInputsvolume_lst + +volume_lst + + + +clusterpyiron_base_qeplot_energy_volume_curveInputsenergy_lst + +energy_lst + + + +clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve + +plot_energy_volume_curve + + + +clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusterpyiron_base_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve + + + + + + +clusterpyiron_base_qeget_list_0Inputsrun + +run + + + +clusterpyiron_base_qeget_list_0OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_list_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_list_0Inputss_0 + +s_0 + + + +clusterpyiron_base_qeget_list_0Inputss_1 + +s_1 + + + +clusterpyiron_base_qeget_list_0Inputss_2 + +s_2 + + + +clusterpyiron_base_qeget_list_0Inputss_3 + +s_3 + + + +clusterpyiron_base_qeget_list_0Inputss_4 + +s_4 + + + +clusterpyiron_base_qeget_list_0OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_list_0OutputsWithInjectionget_list_0 + +get_list_0 + + + +clusterpyiron_base_qeget_list_0OutputsWithInjectionget_list_0->clusterpyiron_base_qeplot_energy_volume_curveInputsvolume_lst + + + + + + +clusterpyiron_base_qecalculate_qe_0Inputsrun + +run + + + +clusterpyiron_base_qecalculate_qe_0OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qecalculate_qe_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qecalculate_qe_0Inputsinput_dict + +input_dict + + + +clusterpyiron_base_qecalculate_qe_0OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0 + +calculate_qe_0 + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsobj + + + + + + +clusterpyiron_base_qeget_dict_0Inputsrun + +run + + + +clusterpyiron_base_qeget_dict_0OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_dict_0Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_dict_0Inputsstructure + +structure + + + +clusterpyiron_base_qeget_dict_0OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_dict_0OutputsWithInjectionget_dict_0 + +get_dict_0 + + + +clusterpyiron_base_qeget_dict_0OutputsWithInjectionget_dict_0->clusterpyiron_base_qecalculate_qe_0Inputsinput_dict + + + + + + +clusterpyiron_base_qegenerate_structuresInputsrun + +run + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qegenerate_structuresInputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qegenerate_structuresInputsstructure + +structure + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures + +generate_structures + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsobj + +obj + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsobj + +obj + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsobj + +obj + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsobj + +obj + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsobj + +obj + + + +clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsobj + + + + + + +clusterpyiron_base_qecalculate_qe_1Inputsrun + +run + + + +clusterpyiron_base_qecalculate_qe_1OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qecalculate_qe_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qecalculate_qe_1Inputsinput_dict + +input_dict + + + +clusterpyiron_base_qecalculate_qe_1OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1 + +calculate_qe_1 + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsobj + + + + + + +clusterpyiron_base_qeget_dict_1Inputsrun + +run + + + +clusterpyiron_base_qeget_dict_1OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_dict_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_dict_1Inputsstructure + +structure + + + +clusterpyiron_base_qeget_dict_1OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_dict_1OutputsWithInjectionget_dict_1 + +get_dict_1 + + + +clusterpyiron_base_qeget_dict_1OutputsWithInjectionget_dict_1->clusterpyiron_base_qecalculate_qe_1Inputsinput_dict + + + + + + +clusterpyiron_base_qeget_bulk_structureInputsrun + +run + + + +clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_bulk_structureInputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionget_bulk_structure + +get_bulk_structure + + + +clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusterpyiron_base_qeget_dict_1Inputsstructure + + + + + + +clusterpyiron_base_qecalculate_qe_2Inputsrun + +run + + + +clusterpyiron_base_qecalculate_qe_2OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qecalculate_qe_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qecalculate_qe_2Inputsinput_dict + +input_dict + + + +clusterpyiron_base_qecalculate_qe_2OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2 + +calculate_qe_2 + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsobj + + + + + + +clusterpyiron_base_qeget_dict_2Inputsrun + +run + + + +clusterpyiron_base_qeget_dict_2OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_dict_2Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_dict_2Inputsstructure + +structure + + + +clusterpyiron_base_qeget_dict_2OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_dict_2OutputsWithInjectionget_dict_2 + +get_dict_2 + + + +clusterpyiron_base_qeget_dict_2OutputsWithInjectionget_dict_2->clusterpyiron_base_qecalculate_qe_2Inputsinput_dict + + + + + + +clusterpyiron_base_qecalculate_qe_3Inputsrun + +run + + + +clusterpyiron_base_qecalculate_qe_3OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qecalculate_qe_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qecalculate_qe_3Inputsinput_dict + +input_dict + + + +clusterpyiron_base_qecalculate_qe_3OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3 + +calculate_qe_3 + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsobj + + + + + + +clusterpyiron_base_qeget_dict_3Inputsrun + +run + + + +clusterpyiron_base_qeget_dict_3OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_dict_3Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_dict_3Inputsstructure + +structure + + + +clusterpyiron_base_qeget_dict_3OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_dict_3OutputsWithInjectionget_dict_3 + +get_dict_3 + + + +clusterpyiron_base_qeget_dict_3OutputsWithInjectionget_dict_3->clusterpyiron_base_qecalculate_qe_3Inputsinput_dict + + + + + + +clusterpyiron_base_qecalculate_qe_4Inputsrun + +run + + + +clusterpyiron_base_qecalculate_qe_4OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qecalculate_qe_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qecalculate_qe_4Inputsinput_dict + +input_dict + + + +clusterpyiron_base_qecalculate_qe_4OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4 + +calculate_qe_4 + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsobj + + + + + + +clusterpyiron_base_qeget_dict_4Inputsrun + +run + + + +clusterpyiron_base_qeget_dict_4OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_dict_4Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_dict_4Inputsstructure + +structure + + + +clusterpyiron_base_qeget_dict_4OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_dict_4OutputsWithInjectionget_dict_4 + +get_dict_4 + + + +clusterpyiron_base_qeget_dict_4OutputsWithInjectionget_dict_4->clusterpyiron_base_qecalculate_qe_4Inputsinput_dict + + + + + + +clusterpyiron_base_qecalculate_qe_5Inputsrun + +run + + + +clusterpyiron_base_qecalculate_qe_5OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qecalculate_qe_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qecalculate_qe_5Inputsinput_dict + +input_dict + + + +clusterpyiron_base_qecalculate_qe_5OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5 + +calculate_qe_5 + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsobj + + + + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsobj + +obj + + + +clusterpyiron_base_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsobj + + + + + + +clusterpyiron_base_qeget_dict_5Inputsrun + +run + + + +clusterpyiron_base_qeget_dict_5OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_dict_5Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_dict_5Inputsstructure + +structure + + + +clusterpyiron_base_qeget_dict_5OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_dict_5OutputsWithInjectionget_dict_5 + +get_dict_5 + + + +clusterpyiron_base_qeget_dict_5OutputsWithInjectionget_dict_5->clusterpyiron_base_qecalculate_qe_5Inputsinput_dict + + + + + + +clusterpyiron_base_qeget_list_1Inputsrun + +run + + + +clusterpyiron_base_qeget_list_1OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeget_list_1Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeget_list_1Inputss_0 + +s_0 + + + +clusterpyiron_base_qeget_list_1Inputss_1 + +s_1 + + + +clusterpyiron_base_qeget_list_1Inputss_2 + +s_2 + + + +clusterpyiron_base_qeget_list_1Inputss_3 + +s_3 + + + +clusterpyiron_base_qeget_list_1Inputss_4 + +s_4 + + + +clusterpyiron_base_qeget_list_1OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeget_list_1OutputsWithInjectionget_list_1 + +get_list_1 + + + +clusterpyiron_base_qeget_list_1OutputsWithInjectionget_list_1->clusterpyiron_base_qeplot_energy_volume_curveInputsenergy_lst + + + + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_0 + + + + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_0Inputsstructure + + + + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectiongetitem->clusterpyiron_base_qegenerate_structuresInputsstructure + + + + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_1 + + + + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_2Inputsstructure + + + + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_2 + + + + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_3Inputsstructure + + + + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_3 + + + + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_4Inputsstructure + + + + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_4 + + + + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_5Inputsstructure + + + + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_0 + + + + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_1 + + + + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_2 + + + + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_3 + + + + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsrun + +run + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectionran + +ran + + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsaccumulate_and_run + +accumulate_and_run + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectionfailed + +failed + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectiongetitem + +getitem + + + +clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_4 + + + + + + \ No newline at end of file diff --git a/_images/f56e8e4e1a270f2e47866a3f07539db63d9c9bf4fdd89487dc7b7be2cac68ee1.svg b/_images/f56e8e4e1a270f2e47866a3f07539db63d9c9bf4fdd89487dc7b7be2cac68ee1.svg new file mode 100644 index 00000000..87d69e5e --- /dev/null +++ b/_images/f56e8e4e1a270f2e47866a3f07539db63d9c9bf4fdd89487dc7b7be2cac68ee1.svg @@ -0,0 +1,83 @@ + + + + + +create_function_job_9e748c1c8cdef9464869503612dbb8dd + +create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7960e32575c0> + + + +x_a067a96e1de754e11581b419c5c1d4dd + +x=<pyiron_base.project.delayed.DelayedObject object at 0x7960e3257350> + + + +x_a067a96e1de754e11581b419c5c1d4dd->create_function_job_9e748c1c8cdef9464869503612dbb8dd + + + + + +x_e71e72d9c42ba1008579078b6c079655 + +x=<pyiron_base.project.delayed.DelayedObject object at 0x7960ec8cc9b0> + + + +x_e71e72d9c42ba1008579078b6c079655->x_a067a96e1de754e11581b419c5c1d4dd + + + + + +x_974924ff998969b91bfc8b2db5f854a1 + +x=1.0 + + + +x_974924ff998969b91bfc8b2db5f854a1->x_e71e72d9c42ba1008579078b6c079655 + + + + + +y_49c159de63f318f02b04278442feee05 + +y=<pyiron_base.project.delayed.DelayedObject object at 0x7960e3257020> + + + +x_974924ff998969b91bfc8b2db5f854a1->y_49c159de63f318f02b04278442feee05 + + + + + +y_49c159de63f318f02b04278442feee05->x_a067a96e1de754e11581b419c5c1d4dd + + + + + +y_f12a7f1986b9dd058dfc666dbe230b20 + +y=2.0 + + + +y_f12a7f1986b9dd058dfc666dbe230b20->x_e71e72d9c42ba1008579078b6c079655 + + + + + +y_f12a7f1986b9dd058dfc666dbe230b20->y_49c159de63f318f02b04278442feee05 + + + + + \ No newline at end of file diff --git a/_images/f7106aeb5d9e4e6445043145533fde9386717f0d5e039ef0f6516b5f871e8414.svg b/_images/f7106aeb5d9e4e6445043145533fde9386717f0d5e039ef0f6516b5f871e8414.svg new file mode 100644 index 00000000..6ce621fc --- /dev/null +++ b/_images/f7106aeb5d9e4e6445043145533fde9386717f0d5e039ef0f6516b5f871e8414.svg @@ -0,0 +1,161 @@ + + + + + +0 + +workflow.generate_mesh + + + +1 + +workflow.convert_to_xdmf + + + +0->1 + + +gmsh_output_file + + + +2 + +workflow.poisson + + + +1->2 + + + + + +3 + +workflow.plot_over_line + + + +2->3 + + + + + +4 + +workflow.substitute_macros + + + +2->4 + + +ndofs=result[numdofs] + + + +3->4 + + +pvbatch_output_file + + + +5 + +workflow.compile_paper + + + +3->5 + + +plot_file + + + +4->5 + + +macros_tex + + + +8 + +result + + + +5->8 + + + + + +6 + +2.0 + + + +6->0 + + +domain_size + + + +6->4 + + +domain_size + + + +7 + +/home/jovyan/example_workflows/nfdi/source + + + +7->0 + + +source_directory + + + +7->2 + + +source_directory + + + +7->3 + + +source_directory + + + +7->4 + + +source_directory + + + +7->5 + + +source_directory + + + \ No newline at end of file diff --git a/_sources/README.md b/_sources/README.md new file mode 100644 index 00000000..b5fc82d4 --- /dev/null +++ b/_sources/README.md @@ -0,0 +1,121 @@ +# Python Workflow Definition +[![Pipeline](https://github.com/pythonworkflow/python-workflow-definition/actions/workflows/pipeline.yml/badge.svg)](https://github.com/pythonworkflow/python-workflow-definition/actions/workflows/pipeline.yml) +[![codecov](https://codecov.io/github/pythonworkflow/python-workflow-definition/graph/badge.svg?token=3JXD1GN8LG)](https://codecov.io/github/pythonworkflow/python-workflow-definition) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pythonworkflow/python-workflow-definition/HEAD) +[![DOI](https://zenodo.org/badge/945869529.svg)](https://doi.org/10.5281/zenodo.15516179) + +## Definition +In the Python Workflow Definition (PWD) each node represents a Python function, with the edges defining the connection +between input and output of the different Python functions. + +Published in: [J. Janssen, J. George, J. Geiger, M. Bercx, X. Wang, C. Ertural, J. Schaarschmidt, A.M. Ganose, G. Pizzi, T. Hickel and J. Neugebauer. A python workflow definition for computational materials design. Digital Discovery, 2025](https://doi.org/10.1039/D5DD00231A) + +## Format +Each workflow consists of three files, a Python module which defines the individual Pythons, a JSON file which defines +the connections between the different Python functions and a conda environment file to define the software dependencies. +The files are not intended to be human readable, but rather interact as a machine readable exchange format between the +different workflow engines to enable interoperability. + +## Installation +The Python Workflow Definition can either be installed via pypi or via conda. For the [pypi installation](https://pypi.org/project/python-workflow-definition/) use: +``` +pip install python-workflow-definition +``` +For the conda installation via the [conda-forge community channel](https://anaconda.org/conda-forge/python-workflow-definition) use: +``` +conda install conda-forge::python-workflow-definition +``` + +## Examples +### Simple Example +As a first example we define two Python functions which add multiple inputs: +```python +def get_sum(x, y): + return x + y + + +def get_prod_and_div(x: float, y: float) -> dict: + return {"prod": x * y, "div": x / y} +``` +These two Python functions are combined in the following example workflow: +```python +def combined_workflow(x=1, y=2): + tmp_dict = get_prod_and_div(x=x, y=y) + return get_sum(x=tmp_dict["prod"], y=tmp_dict["div"]) +``` +For the workflow representation of these Python functions the Python functions are stored in the [example_workflows/arithmetic/workflow.py](example_workflows/arithmetic/workflow.py) +Python module. The connection of the Python functions are stored in the [example_workflows/arithmetic/workflow.json](example_workflows/arithmetic/workflow.json) +JSON file: +```JSON +{ + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.get_prod_and_div"}, + {"id": 1, "type": "function", "value": "workflow.get_sum"}, + {"id": 2, "type": "input", "value": 1, "name": "x"}, + {"id": 3, "type": "input", "value": 2, "name": "y"}, + {"id": 4, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "x", "source": 2, "sourcePort": null}, + {"target": 0, "targetPort": "y", "source": 3, "sourcePort": null}, + {"target": 1, "targetPort": "x", "source": 0, "sourcePort": "prod"}, + {"target": 1, "targetPort": "y", "source": 0, "sourcePort": "div"}, + {"target": 4, "targetPort": null, "source": 1, "sourcePort": null} + ] +} +``` +The abbreviations in the definition of the edges are: +* `target` - target node +* `targetPort` - target port - for a node with multiple input parameters the target port specifies which input parameter to use. +* `source` - source node +* `sourcePort` - source port - for a node with multiple output parameters the source port specifies which output parameter to use. + +As the workflow does not require any additional resources, as it is only using built-in functionality of the Python standard +library. + +The corresponding Jupyter notebooks demonstrate this functionality: + +| Example | Explanation | +|----------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------| +| [example_workflows/arithmetic/aiida.ipynb](example_workflows/arithmetic/aiida.ipynb) | Define Workflow with aiida and execute it with jobflow and pyiron_base. | +| [example_workflows/arithmetic/jobflow.ipynb](example_workflows/arithmetic/jobflow.ipynb) | Define Workflow with jobflow and execute it with aiida and pyiron_base. | +| [example_workflows/arithmetic/pyiron_base.ipynb](example_workflows/arithmetic/pyiron_base.ipynb) | Define Workflow with pyiron_base and execute it with aiida and jobflow. | +| [example_workflows/arithmetic/universal_workflow.ipynb](example_workflows/arithmetic/universal_workflow.ipynb) | Execute workflow defined in the Python Workflow Definition with aiida, executorlib, jobflow, pyiron_base and pure Python. | + +### Quantum Espresso Workflow +The second workflow example is the calculation of an energy volume curve with Quantum Espresso. In the first step the +initial structure is relaxed, afterward it is strained and the total energy is calculated. +* [example_workflows/quantum_espresso/workflow.py](example_workflows/quantum_espresso/workflow.py) Python functions +* [example_workflows/quantum_espresso/workflow.json](example_workflows/quantum_espresso/workflow.json) Workflow definition in the Python Workflow Definition. +* [example_workflows/quantum_espresso/environment.yml](example_workflows/quantum_espresso/environment.yml) Conda environment + +| Example | Explanation | +|----------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------| +| [example_workflows/quantum_espresso/aiida.ipynb](example_workflows/quantum_espresso/aiida.ipynb) | Define Workflow with aiida and execute it with jobflow and pyiron_base. | +| [example_workflows/quantum_espresso/jobflow.ipynb](example_workflows/quantum_espresso/jobflow.ipynb) | Define Workflow with jobflow and execute it with aiida and pyiron_base. | +| [example_workflows/quantum_espresso/pyiron_base.ipynb](example_workflows/quantum_espresso/pyiron_base.ipynb) | Define Workflow with pyiron_base and execute it with aiida and jobflow. | +| [example_workflows/quantum_espresso/universal_workflow.ipynb](example_workflows/quantum_espresso/universal_workflow.ipynb) | Execute workflow defined in the Python Workflow Definition with aiida, executorlib, jobflow, pyiron_base and pure Python. | + +### NFDI4Ing Scientific Workflow Requirements +To demonstrate the compatibility of the Python Workflow Definition to file based workflows, the workflow benchmark developed as part of [NFDI4Ing](https://github.com/BAMresearch/NFDI4IngScientificWorkflowRequirements) +is implemented for all three simulation codes based on a shared workflow definition. +* [example_workflows/nfdi/workflow.py](example_workflows/nfdi/workflow.py) Python functions +* [example_workflows/nfdi/workflow.json](example_workflows/nfdi/workflow.json) Workflow definition in the Python Workflow Definition. + +Additional source files provided with the workflow benchmark: +* [example_workflows/nfdi/source/envs/preprocessing.yaml](example_workflows/nfdi/source/envs/preprocessing.yaml) Conda environment for preprocessing +* [example_workflows/nfdi/source/envs/processing.yaml](example_workflows/nfdi/source/envs/processing.yaml) Conda environment for processing +* [example_workflows/nfdi/source/envs/postprocessing.yaml](example_workflows/nfdi/source/envs/postprocessing.yaml) Conda environment for postprocessing +* [example_workflows/nfdi/source/macros.tex.template](example_workflows/nfdi/source/macros.tex.template) LaTeX module template +* [example_workflows/nfdi/source/paper.tex](example_workflows/nfdi/source/paper.tex) LaTeX paper template +* [example_workflows/nfdi/source/poisson.py](example_workflows/nfdi/source/poisson.py) Poisson Python script +* [example_workflows/nfdi/source/postprocessing.py](example_workflows/nfdi/source/postprocessing.py) Postprocessing Python script +* [example_workflows/nfdi/source/prepare_paper_macros.py](example_workflows/nfdi/source/prepare_paper_macros.py) LaTeX preprocessing Python script +* [example_workflows/nfdi/source/unit_square.geo](example_workflows/nfdi/source/unit_square.geo) Input structure + +| Example | Explanation | +|----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------| +| [example_workflows/nfdi/aiida.ipynb](example_workflows/nfdi/aiida.ipynb) | Define Workflow with aiida and execute it with jobflow and pyiron_base. | +| [example_workflows/nfdi/jobflow.ipynb](example_workflows/nfdi/jobflow.ipynb) | Define Workflow with jobflow and execute it with aiida and pyiron_base. | +| [example_workflows/nfdi/pyiron_base.ipynb](example_workflows/nfdi/pyiron_base.ipynb) | Define Workflow with pyiron_base and execute it with aiida and jobflow. | +| [example_workflows/nfdi/universal_workflow.ipynb](example_workflows/nfdi/universal_workflow.ipynb) | Execute workflow defined in the Python Workflow Definition with aiida, executorlib, jobflow, pyiron_base and pure Python. | diff --git a/_sources/arithmetic.md b/_sources/arithmetic.md new file mode 100644 index 00000000..72ecb6d1 --- /dev/null +++ b/_sources/arithmetic.md @@ -0,0 +1,44 @@ +# Arithmetic Workflow +As a first example we define two Python functions which add multiple inputs: +```python +def get_sum(x, y): + return x + y + +def get_prod_and_div(x: float, y: float) -> dict: + return {"prod": x * y, "div": x / y} +``` +These two Python functions are combined in the following example workflow: +```python +def combined_workflow(x=1, y=2): + tmp_dict = get_prod_and_div(x=x, y=y) + return get_sum(x=tmp_dict["prod"], y=tmp_dict["div"]) +``` +For the workflow representation of these Python functions the Python functions are stored in the [workflow.py](example_workflows/arithmetic/workflow.py) +Python module. The connection of the Python functions are stored in the [workflow.json](example_workflows/arithmetic/workflow.json) +JSON file: +``` +{ + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.get_prod_and_div"}, + {"id": 1, "type": "function", "value": "workflow.get_sum"}, + {"id": 2, "type": "input", "value": 1, "name": "x"}, + {"id": 3, "type": "input", "value": 2, "name": "y"}, + {"id": 4, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "x", "source": 2, "sourcePort": null}, + {"target": 0, "targetPort": "y", "source": 3, "sourcePort": null}, + {"target": 1, "targetPort": "x", "source": 0, "sourcePort": "prod"}, + {"target": 1, "targetPort": "y", "source": 0, "sourcePort": "div"}, + {"target": 4, "targetPort": null, "source": 1, "sourcePort": null} + ] +} +``` +The abbreviations in the definition of the edges are: +* `target` - target node +* `targetPort` - target port - for a node with multiple input parameters the target port specifies which input parameter to use. +* `source` - source node +* `sourcePort` - source port - for a node with multiple output parameters the source port specifies which output parameter to use. + +As the workflow does not require any additional resources, as it is only using built-in functionality of the Python standard +library. diff --git a/_sources/conclusion.md b/_sources/conclusion.md new file mode 100644 index 00000000..5afbcb49 --- /dev/null +++ b/_sources/conclusion.md @@ -0,0 +1,17 @@ +# Conclusion +Based on the Python Workflow Definition three rather different workflows were implemented in rather different workflow +engines: a simple arithmetic example coupling two Python functions, a Quantum Espresso energy volume curve calculation +with fan-out parallelism, and a file based, multi-tool NFDI4Ing benchmark. In each case the same `workflow.json` was +written by one workflow engine and successfully loaded and executed by the others, without any change to the underlying +Python functions in `workflow.py`. This demonstrates the interoperability achieved with the Python Workflow Definition, +and shows that it scales from small, in-memory Python workflows to larger, file based, multi-environment scientific +workflows. + +## Where to go next +* Browse the [example_workflows](https://github.com/pythonworkflow/python-workflow-definition/tree/main/example_workflows) + directory for the full set of notebooks, including engines not covered in this book such as `pyiron_workflow`, + `executorlib` and CWL. +* See the [README](https://github.com/pythonworkflow/python-workflow-definition) for installation instructions via + `pip` or `conda`. +* Read the accompanying publication: [J. Janssen et al., A python workflow definition for computational materials + design, Digital Discovery, 2025](https://doi.org/10.1039/D5DD00231A). \ No newline at end of file diff --git a/_sources/documentation/arithmetic.md b/_sources/documentation/arithmetic.md new file mode 100644 index 00000000..72ecb6d1 --- /dev/null +++ b/_sources/documentation/arithmetic.md @@ -0,0 +1,44 @@ +# Arithmetic Workflow +As a first example we define two Python functions which add multiple inputs: +```python +def get_sum(x, y): + return x + y + +def get_prod_and_div(x: float, y: float) -> dict: + return {"prod": x * y, "div": x / y} +``` +These two Python functions are combined in the following example workflow: +```python +def combined_workflow(x=1, y=2): + tmp_dict = get_prod_and_div(x=x, y=y) + return get_sum(x=tmp_dict["prod"], y=tmp_dict["div"]) +``` +For the workflow representation of these Python functions the Python functions are stored in the [workflow.py](example_workflows/arithmetic/workflow.py) +Python module. The connection of the Python functions are stored in the [workflow.json](example_workflows/arithmetic/workflow.json) +JSON file: +``` +{ + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.get_prod_and_div"}, + {"id": 1, "type": "function", "value": "workflow.get_sum"}, + {"id": 2, "type": "input", "value": 1, "name": "x"}, + {"id": 3, "type": "input", "value": 2, "name": "y"}, + {"id": 4, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "x", "source": 2, "sourcePort": null}, + {"target": 0, "targetPort": "y", "source": 3, "sourcePort": null}, + {"target": 1, "targetPort": "x", "source": 0, "sourcePort": "prod"}, + {"target": 1, "targetPort": "y", "source": 0, "sourcePort": "div"}, + {"target": 4, "targetPort": null, "source": 1, "sourcePort": null} + ] +} +``` +The abbreviations in the definition of the edges are: +* `target` - target node +* `targetPort` - target port - for a node with multiple input parameters the target port specifies which input parameter to use. +* `source` - source node +* `sourcePort` - source port - for a node with multiple output parameters the source port specifies which output parameter to use. + +As the workflow does not require any additional resources, as it is only using built-in functionality of the Python standard +library. diff --git a/_sources/documentation/conclusion.md b/_sources/documentation/conclusion.md new file mode 100644 index 00000000..5afbcb49 --- /dev/null +++ b/_sources/documentation/conclusion.md @@ -0,0 +1,17 @@ +# Conclusion +Based on the Python Workflow Definition three rather different workflows were implemented in rather different workflow +engines: a simple arithmetic example coupling two Python functions, a Quantum Espresso energy volume curve calculation +with fan-out parallelism, and a file based, multi-tool NFDI4Ing benchmark. In each case the same `workflow.json` was +written by one workflow engine and successfully loaded and executed by the others, without any change to the underlying +Python functions in `workflow.py`. This demonstrates the interoperability achieved with the Python Workflow Definition, +and shows that it scales from small, in-memory Python workflows to larger, file based, multi-environment scientific +workflows. + +## Where to go next +* Browse the [example_workflows](https://github.com/pythonworkflow/python-workflow-definition/tree/main/example_workflows) + directory for the full set of notebooks, including engines not covered in this book such as `pyiron_workflow`, + `executorlib` and CWL. +* See the [README](https://github.com/pythonworkflow/python-workflow-definition) for installation instructions via + `pip` or `conda`. +* Read the accompanying publication: [J. Janssen et al., A python workflow definition for computational materials + design, Digital Discovery, 2025](https://doi.org/10.1039/D5DD00231A). \ No newline at end of file diff --git a/_sources/documentation/evcurve.md b/_sources/documentation/evcurve.md new file mode 100644 index 00000000..536eec6f --- /dev/null +++ b/_sources/documentation/evcurve.md @@ -0,0 +1,67 @@ +# Energy Volume Curve +Based on [previous work](https://materialdigital.github.io/ADIS2023/README.html) from the [ADIS 2023 workshop](https://www.mpie.de/4902385/adis2023) +the calculation of an energy volume curve with the [quantum espresso](https://www.quantum-espresso.org) density +functional theory (DFT) simulation code is implemented in the Python Workflow Definition. + +## Workflow +An energy-volume curve is computed by relaxing a bulk crystal structure, straining it to a series of volumes and +computing the total energy at each volume with a self-consistent-field (SCF) calculation. The pipeline is implemented +as five Python functions in [workflow.py](example_workflows/quantum_espresso/workflow.py): +```python +def get_bulk_structure(element, a, cubic): + # build an ASE bulk crystal structure, e.g. Al + +def calculate_qe(working_directory, input_dict): + # write a pw.x input file, run "pw.x -in input.pwi > output.pwo" and parse the pwscf.xml output; + # input_dict["calculation"] selects "vc-relax" (cell + geometry relaxation) or "scf" (single-point energy) + +def generate_structures(structure, strain_lst): + # apply each volumetric strain in strain_lst to a structure, returning one structure per strain + +def plot_energy_volume_curve(volume_lst, energy_lst): + # plot energy against volume and save it as evcurve.png +``` +`write_input`/`collect_output` handle the file-based `pw.x` input/output (`.pwi`/`.pwo`/`.xml` files), and +`ase_to_json`/`json_to_ase` (de)serialize ASE `Atoms` objects to/from OPTIMADE-JSON strings, so structures can be +passed between functions as plain JSON data instead of Python objects. + +The workflow combines these functions as: `get_bulk_structure` -> `calculate_qe` (`vc-relax`, once) -> +`generate_structures` -> `calculate_qe` (`scf`, once per strained structure) -> `plot_energy_volume_curve`. With five +strains this means one relaxation followed by five independent SCF calculations that fan out from +`generate_structures` and feed back into a single plot. + +## workflow.json +[workflow.json](example_workflows/quantum_espresso/workflow.json) encodes this fan-out as five separate +`workflow.calculate_qe` function nodes, each connected to its own strained structure and its own `working_directory` +input, all reading the same shared inputs (`pseudopotentials`, `kpts`, `calculation`, `smearing`) via +`python_workflow_definition.shared.get_dict`. An excerpt showing the pattern for two of the five strained +calculations: +``` +{ + "nodes": [ + {"id": 2, "type": "function", "value": "workflow.generate_structures"}, + {"id": 3, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 4, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 19, "type": "input", "value": "strain_0", "name": "working_directory_1"}, + {"id": 20, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 22, "type": "input", "value": "strain_1", "name": "working_directory_2"}, + {"id": 23, "type": "function", "value": "python_workflow_definition.shared.get_dict"} + ], + "edges": [ + {"target": 3, "targetPort": "working_directory", "source": 19, "sourcePort": null}, + {"target": 20, "targetPort": "structure", "source": 2, "sourcePort": "s_0"}, + {"target": 3, "targetPort": "input_dict", "source": 20, "sourcePort": null}, + {"target": 4, "targetPort": "working_directory", "source": 22, "sourcePort": null}, + {"target": 23, "targetPort": "structure", "source": 2, "sourcePort": "s_1"}, + {"target": 4, "targetPort": "input_dict", "source": 23, "sourcePort": null} + ] +} +``` +Node 2 (`generate_structures`) exposes one output port per strain (`s_0`, `s_1`, ...); each port is wired into its +own `get_dict`/`calculate_qe` pair. The energy and volume outputs of all five `calculate_qe` nodes are collected back +into lists with `python_workflow_definition.shared.get_list` before being passed to `plot_energy_volume_curve`. + +## Requirements +Running this workflow (rather than just loading/inspecting the JSON) requires the Quantum Espresso `pw.x` binary, +matching pseudopotential files (see [espresso/pseudo](example_workflows/quantum_espresso/espresso/pseudo)) and the +Python dependencies listed in [environment.yml](example_workflows/quantum_espresso/environment.yml). \ No newline at end of file diff --git a/_sources/documentation/intro.md b/_sources/documentation/intro.md new file mode 100644 index 00000000..4ad92284 --- /dev/null +++ b/_sources/documentation/intro.md @@ -0,0 +1,24 @@ +# Definition +In the Python Workflow Definition (PWD) each node represents a Python function, with the edges defining the connection +between input and output of the different Python functions. + +## Format +Each workflow consists of three files, a Python module which defines the individual Pythons, a JSON file which defines +the connections between the different Python functions and a conda environment file to define the software dependencies. +The files are not intended to be human readable, but rather interact as a machine readable exchange format between the +different workflow engines to enable interoperability. + +## Workflow Engines +Currently supported workflow engines: +* [aiida-workgraph](https://github.com/aiidateam/aiida-workgraph) +* [jobflow](https://github.com/materialsproject/jobflow) +* [pyiron_base](https://github.com/pyiron/pyiron_base) +* [pyiron_workflow](https://github.com/pyiron/pyiron_workflow) +* [executorlib](https://github.com/pyiron/executorlib) +* [CWL](https://www.commonwl.org/) via [cwltool](https://github.com/common-workflow-language/cwltool) + +## Example Workflows +Three workflows are implemented: +* Simple workflow coupling two python functions +* Calculation of an [energy volume curve with quantum espresso](https://materialdigital.github.io/ADIS2023/) +* File based workflow benchmark from [NFDI4Ing](https://www.inggrid.org/article/id/3726/) diff --git a/_sources/documentation/nfdi.md b/_sources/documentation/nfdi.md new file mode 100644 index 00000000..1fa6a863 --- /dev/null +++ b/_sources/documentation/nfdi.md @@ -0,0 +1,61 @@ +# NFDI4Ing Benchmark +To demonstrate the compatibility of the Python Workflow Definition to file based workflows, the workflow benchmark +developed as part of [NFDI4Ing](https://www.inggrid.org/article/id/3726/) is implemented for all workflow engines +based on the Python Workflow Definition. + +## Workflow +Unlike the [arithmetic](arithmetic.md) and energy-volume-curve examples, which pass Python objects between functions, +this benchmark chains together external command line tools that each require their own conda environment (defined in +`source/envs/*.yaml`) and communicate through files rather than in-memory values. The +pipeline is defined by six Python functions in [workflow.py](example_workflows/nfdi/workflow.py), each of which +copies its inputs into a stage-specific subdirectory (`preprocessing`, `processing` or `postprocessing`) and calls +its external tool with `conda_subprocess.check_output`: +```python +def generate_mesh(domain_size: float, source_directory: str) -> str: ... +def convert_to_xdmf(gmsh_output_file: str) -> dict: ... +def poisson(meshio_output_xdmf: str, meshio_output_h5: str, source_directory: str) -> dict: ... +def plot_over_line(poisson_output_pvd_file: str, poisson_output_vtu_file: str, source_directory: str) -> str: ... +def substitute_macros(pvbatch_output_file: str, ndofs: int, domain_size: float, source_directory: str) -> str: ... +def compile_paper(macros_tex: str, plot_file: str, source_directory: str) -> str: ... +``` +* `generate_mesh` runs [`gmsh`](https://gmsh.info) on `unit_square.geo` to mesh a 2D square whose side length is set + by the `domain_size` parameter, producing a `.msh` file. +* `convert_to_xdmf` runs `meshio convert` to turn the gmsh mesh into an XDMF/H5 file pair that the FEM solver can read. +* `poisson` runs a [FEniCS](https://fenicsproject.org)-based `poisson.py` script that solves the Poisson equation on + the mesh, returning the number of degrees of freedom (`numdofs`) alongside the `.pvd`/`.vtu` result files. +* `plot_over_line` runs ParaView's `pvbatch` with `postprocessing.py` to sample the FEM solution along a line and + write it out as a CSV file. +* `substitute_macros` runs `prepare_paper_macros.py` to fill a LaTeX macro template with the plot data path, the + domain size and the number of degrees of freedom. +* `compile_paper` runs [`tectonic`](https://tectonic-typesetting.github.io) to compile `paper.tex`, which references + those macros and the plot, into `paper.pdf`. + +The connection of these Python functions is stored in the [workflow.json](example_workflows/nfdi/workflow.json) +JSON file, following the same `nodes`/`edges` structure as the other examples. Each function is a `function` node, +`domain_size` and `source_directory` are `input` nodes, and edges connect a function's input port either to another +function's output port or directly to an input node: +``` +{ + "version": "0.1.0", + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.generate_mesh"}, + {"id": 1, "type": "function", "value": "workflow.convert_to_xdmf"}, + {"id": 6, "type": "input", "value": 2.0, "name": "domain_size"}, + {"id": 7, "type": "input", "value": "source", "name": "source_directory"}, + {"id": 8, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "domain_size", "source": 6, "sourcePort": null}, + {"target": 0, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 1, "targetPort": "gmsh_output_file", "source": 0, "sourcePort": null} + ] +} +``` +Since `convert_to_xdmf` and `poisson` return a `dict` instead of a single value, the edges that read their output +set `sourcePort` to the specific dictionary key (e.g. `"xdmf_file"` or `"numdofs"`) rather than `null`. + +Because every stage shells out to a different external tool in a different conda environment and passes file paths +along the graph, this benchmark exercises a different part of the Python Workflow Definition than the arithmetic and +energy-volume-curve examples: it shows that the same `workflow.json` produced by one engine can be handed to another +engine, an execution manager like [CWL](https://www.commonwl.org)/`cwltool`, or plain Python, and still reproduce the +same chain of `gmsh`, `meshio`, FEniCS, `pvbatch` and `tectonic` calls end to end. diff --git a/_sources/evcurve.md b/_sources/evcurve.md new file mode 100644 index 00000000..536eec6f --- /dev/null +++ b/_sources/evcurve.md @@ -0,0 +1,67 @@ +# Energy Volume Curve +Based on [previous work](https://materialdigital.github.io/ADIS2023/README.html) from the [ADIS 2023 workshop](https://www.mpie.de/4902385/adis2023) +the calculation of an energy volume curve with the [quantum espresso](https://www.quantum-espresso.org) density +functional theory (DFT) simulation code is implemented in the Python Workflow Definition. + +## Workflow +An energy-volume curve is computed by relaxing a bulk crystal structure, straining it to a series of volumes and +computing the total energy at each volume with a self-consistent-field (SCF) calculation. The pipeline is implemented +as five Python functions in [workflow.py](example_workflows/quantum_espresso/workflow.py): +```python +def get_bulk_structure(element, a, cubic): + # build an ASE bulk crystal structure, e.g. Al + +def calculate_qe(working_directory, input_dict): + # write a pw.x input file, run "pw.x -in input.pwi > output.pwo" and parse the pwscf.xml output; + # input_dict["calculation"] selects "vc-relax" (cell + geometry relaxation) or "scf" (single-point energy) + +def generate_structures(structure, strain_lst): + # apply each volumetric strain in strain_lst to a structure, returning one structure per strain + +def plot_energy_volume_curve(volume_lst, energy_lst): + # plot energy against volume and save it as evcurve.png +``` +`write_input`/`collect_output` handle the file-based `pw.x` input/output (`.pwi`/`.pwo`/`.xml` files), and +`ase_to_json`/`json_to_ase` (de)serialize ASE `Atoms` objects to/from OPTIMADE-JSON strings, so structures can be +passed between functions as plain JSON data instead of Python objects. + +The workflow combines these functions as: `get_bulk_structure` -> `calculate_qe` (`vc-relax`, once) -> +`generate_structures` -> `calculate_qe` (`scf`, once per strained structure) -> `plot_energy_volume_curve`. With five +strains this means one relaxation followed by five independent SCF calculations that fan out from +`generate_structures` and feed back into a single plot. + +## workflow.json +[workflow.json](example_workflows/quantum_espresso/workflow.json) encodes this fan-out as five separate +`workflow.calculate_qe` function nodes, each connected to its own strained structure and its own `working_directory` +input, all reading the same shared inputs (`pseudopotentials`, `kpts`, `calculation`, `smearing`) via +`python_workflow_definition.shared.get_dict`. An excerpt showing the pattern for two of the five strained +calculations: +``` +{ + "nodes": [ + {"id": 2, "type": "function", "value": "workflow.generate_structures"}, + {"id": 3, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 4, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 19, "type": "input", "value": "strain_0", "name": "working_directory_1"}, + {"id": 20, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 22, "type": "input", "value": "strain_1", "name": "working_directory_2"}, + {"id": 23, "type": "function", "value": "python_workflow_definition.shared.get_dict"} + ], + "edges": [ + {"target": 3, "targetPort": "working_directory", "source": 19, "sourcePort": null}, + {"target": 20, "targetPort": "structure", "source": 2, "sourcePort": "s_0"}, + {"target": 3, "targetPort": "input_dict", "source": 20, "sourcePort": null}, + {"target": 4, "targetPort": "working_directory", "source": 22, "sourcePort": null}, + {"target": 23, "targetPort": "structure", "source": 2, "sourcePort": "s_1"}, + {"target": 4, "targetPort": "input_dict", "source": 23, "sourcePort": null} + ] +} +``` +Node 2 (`generate_structures`) exposes one output port per strain (`s_0`, `s_1`, ...); each port is wired into its +own `get_dict`/`calculate_qe` pair. The energy and volume outputs of all five `calculate_qe` nodes are collected back +into lists with `python_workflow_definition.shared.get_list` before being passed to `plot_energy_volume_curve`. + +## Requirements +Running this workflow (rather than just loading/inspecting the JSON) requires the Quantum Espresso `pw.x` binary, +matching pseudopotential files (see [espresso/pseudo](example_workflows/quantum_espresso/espresso/pseudo)) and the +Python dependencies listed in [environment.yml](example_workflows/quantum_espresso/environment.yml). \ No newline at end of file diff --git a/_sources/example_workflows/arithmetic/aiida.ipynb b/_sources/example_workflows/arithmetic/aiida.ipynb new file mode 100644 index 00000000..bd067d85 --- /dev/null +++ b/_sources/example_workflows/arithmetic/aiida.ipynb @@ -0,0 +1,280 @@ +{ + "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\n\nThis notebook defines the arithmetic workflow with [`aiida-workgraph`](https://github.com/aiidateam/aiida-workgraph) and then loads the resulting `workflow.json` into `jobflow`, `pyiron_base` and `pyiron_workflow`, to demonstrate that the same workflow definition can be executed by several different engines.", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Define workflow with aiida\n\n`aiida-workgraph` represents a workflow as a `WorkGraph` of `Task`s. Tasks are executed and stored by the AiiDA engine, so we first need to connect to an AiiDA profile with `load_profile()` before any task can run.", + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "from python_workflow_definition.aiida import write_workflow_json\n", + "\n", + "from aiida_workgraph import WorkGraph, task\n", + "from aiida import orm, load_profile\n", + "load_profile()\n", + "\n", + "workflow_json_filename = \"aiida_simple.json\"" + ], + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "source": [ + "from workflow import (\n", + " get_sum as _get_sum,\n", + " get_prod_and_div as _get_prod_and_div,\n", + " get_square as _get_square,\n", + ")" + ], + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": "The arithmetic functions are imported under a leading underscore because they are still plain Python functions at this point; `wg.add_task` below turns each one into an AiiDA `Task` that can be linked to other tasks' inputs and outputs. `get_prod_and_div` returns a dictionary, so it is wrapped with `task(outputs=['prod', 'div'])` to expose `prod` and `div` as separate output sockets.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "wg = WorkGraph(\"arithmetic\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "cell_type": "code", + "source": "get_prod_and_div_task = wg.add_task(\n task(outputs=['prod', 'div'])(_get_prod_and_div),\n x=orm.Float(1),\n y=orm.Float(2),\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "source": "get_sum_task = wg.add_task(\n _get_sum,\n x=get_prod_and_div_task.outputs.prod,\n y=get_prod_and_div_task.outputs.div,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "cell_type": "code", + "source": "get_square_task = wg.add_task(\n _get_square,\n x=get_sum_task.outputs.result,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": "With all tasks connected, `write_workflow_json` walks the `WorkGraph`'s tasks and links and serializes them into the PWD `workflow.json` format: each task becomes a `function` node and each link becomes an edge between an input and an output port.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "write_workflow_json(wg=wg, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "code", + "source": "!cat {workflow_json_filename}", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "{\n \"version\": \"0.1.0\",\n \"nodes\": [\n {\n \"id\": 0,\n \"type\": \"function\",\n \"value\": \"workflow.get_prod_and_div\"\n },\n {\n \"id\": 1,\n \"type\": \"function\",\n \"value\": \"workflow.get_sum\"\n },\n {\n \"id\": 2,\n \"type\": \"function\",\n \"value\": \"workflow.get_square\"\n },\n {\n \"id\": 3,\n \"type\": \"input\",\n \"name\": \"x\",\n \"value\": 1.0\n },\n {\n \"id\": 4,\n \"type\": \"input\",\n \"name\": \"y\",\n \"value\": 2.0\n },\n {\n \"id\": 5,\n \"type\": \"output\",\n \"name\": \"result\"\n }\n ],\n \"edges\": [\n {\n \"target\": 1,\n \"targetPort\": \"x\",\n \"source\": 0,\n \"sourcePort\": \"prod\"\n },\n {\n \"target\": 1,\n \"targetPort\": \"y\",\n \"source\": 0,\n \"sourcePort\": \"div\"\n },\n {\n \"target\": 2,\n \"targetPort\": \"x\",\n \"source\": 1,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"x\",\n \"source\": 3,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"y\",\n \"source\": 4,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": null,\n \"source\": 2,\n \"sourcePort\": null\n }\n ]\n}" + } + ], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": "## Load Workflow with jobflow\n\nThe same `workflow.json` can now be loaded by a different engine. `python_workflow_definition.jobflow.load_workflow_json` reconstructs a jobflow `Flow` from the JSON, which is then executed locally with `run_locally`.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 05:37:36,950 INFO Started executing jobs locally\n2025-05-24 05:37:37,216 INFO Starting job - get_prod_and_div (3ea26df7-3e4f-4541-a399-52684f0d763e)\n2025-05-24 05:37:37,218 INFO Finished job - get_prod_and_div (3ea26df7-3e4f-4541-a399-52684f0d763e)\n2025-05-24 05:37:37,219 INFO Starting job - get_sum (8d0957e4-21b1-433e-8e9a-b2af7b2d9b6d)\n2025-05-24 05:37:37,220 INFO Finished job - get_sum (8d0957e4-21b1-433e-8e9a-b2af7b2d9b6d)\n2025-05-24 05:37:37,221 INFO Starting job - get_square (af8ae958-4ce4-4b1f-a5df-eb7768a9aa86)\n2025-05-24 05:37:37,223 INFO Finished job - get_square (af8ae958-4ce4-4b1f-a5df-eb7768a9aa86)\n2025-05-24 05:37:37,223 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 12, + "output_type": "execute_result", + "data": { + "text/plain": "{'3ea26df7-3e4f-4541-a399-52684f0d763e': {1: Response(output={'prod': 2.0, 'div': 0.5}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))},\n '8d0957e4-21b1-433e-8e9a-b2af7b2d9b6d': {1: Response(output=2.5, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))},\n 'af8ae958-4ce4-4b1f-a5df-eb7768a9aa86': {1: Response(output=6.25, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))}}" + }, + "metadata": {} + } + ], + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_base\n\nThe same JSON file is loaded into `pyiron_base`, producing a list of delayed jobs. `.draw()` visualizes the dependency graph and `.pull()` triggers delayed execution, running each job in turn and returning the final result.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_9e748c1c8cdef9464869503612dbb8dd\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7960e32575c0>\n\n\n\nx_a067a96e1de754e11581b419c5c1d4dd\n\nx=<pyiron_base.project.delayed.DelayedObject object at 0x7960e3257350>\n\n\n\nx_a067a96e1de754e11581b419c5c1d4dd->create_function_job_9e748c1c8cdef9464869503612dbb8dd\n\n\n\n\n\nx_e71e72d9c42ba1008579078b6c079655\n\nx=<pyiron_base.project.delayed.DelayedObject object at 0x7960ec8cc9b0>\n\n\n\nx_e71e72d9c42ba1008579078b6c079655->x_a067a96e1de754e11581b419c5c1d4dd\n\n\n\n\n\nx_974924ff998969b91bfc8b2db5f854a1\n\nx=1.0\n\n\n\nx_974924ff998969b91bfc8b2db5f854a1->x_e71e72d9c42ba1008579078b6c079655\n\n\n\n\n\ny_49c159de63f318f02b04278442feee05\n\ny=<pyiron_base.project.delayed.DelayedObject object at 0x7960e3257020>\n\n\n\nx_974924ff998969b91bfc8b2db5f854a1->y_49c159de63f318f02b04278442feee05\n\n\n\n\n\ny_49c159de63f318f02b04278442feee05->x_a067a96e1de754e11581b419c5c1d4dd\n\n\n\n\n\ny_f12a7f1986b9dd058dfc666dbe230b20\n\ny=2.0\n\n\n\ny_f12a7f1986b9dd058dfc666dbe230b20->x_e71e72d9c42ba1008579078b6c079655\n\n\n\n\n\ny_f12a7f1986b9dd058dfc666dbe230b20->y_49c159de63f318f02b04278442feee05\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_prod_and_div_4729edf2c689ca4cf512acd163c98b28 was saved and received the ID: 1\nThe job get_sum_25f72a559657d0b1549593792391953e was saved and received the ID: 2\nThe job get_square_9cc2f0545498916d7720c59c1120a66d was saved and received the ID: 3\n" + }, + { + "execution_count": 15, + "output_type": "execute_result", + "data": { + "text/plain": "6.25" + }, + "metadata": {} + } + ], + "execution_count": 15 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the workflow is loaded into `pyiron_workflow`, producing a `Workflow` object whose node graph can be visualized with `.draw()` and executed with `.run()`." + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=workflow_json_filename)" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()" + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/arithmetic/cwl.ipynb b/_sources/example_workflows/arithmetic/cwl.ipynb new file mode 100644 index 00000000..b0c0f40e --- /dev/null +++ b/_sources/example_workflows/arithmetic/cwl.ipynb @@ -0,0 +1,121 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "id": "7a93c81a", + "source": "# CWL\n\n[`cwltool`](https://github.com/common-workflow-language/cwltool) is the reference implementation of the [Common Workflow Language (CWL)](https://www.commonwl.org/), a standard for describing command-line based workflows. Unlike the other engines in this repository, CWL has no Python API: workflows are described in YAML/JSON documents and executed by the external `cwltool` command. This notebook converts the arithmetic `workflow.json` into an equivalent set of CWL files and executes them with `cwltool`.", + "metadata": {} + }, + { + "id": "377fef56-484d-491c-b19e-1be6931e44eb", + "cell_type": "code", + "source": "import pickle", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "92e3921b-2bb8-4333-8cfe-4bd27f785d24", + "cell_type": "code", + "source": "from python_workflow_definition.cwl import write_workflow", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "id": "55b1a180", + "source": "`write_workflow` reads the existing `workflow.json` and generates the corresponding CWL description: one `CommandLineTool` `.cwl` file per function node, a `workflow.cwl` file that wires the steps together, and a `workflow.yml` file listing the input values (each serialized to its own pickle file). Every generated tool invokes `python -m python_workflow_definition.cwl`, which loads the target function from `workflow.py` and calls it with the pickled inputs.", + "metadata": {} + }, + { + "id": "5303c059-8ae4-4557-858e-b4bd64eac711", + "cell_type": "code", + "source": "write_workflow(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "cell_type": "markdown", + "id": "0581c24f", + "source": "Running `cwltool workflow.cwl workflow.yml` executes the steps in dependency order, passing intermediate results between steps as pickle files, and prints the location of the final output file.", + "metadata": {} + }, + { + "id": "df302bd2-e9b6-4595-979c-67c46414d986", + "cell_type": "code", + "source": "! cwltool workflow.cwl workflow.yml", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "/srv/conda/envs/notebook/bin/cwltool:11: DeprecationWarning: Nesting argument groups is deprecated.\n sys.exit(run())\n\u001b[1;30mINFO\u001b[0m /srv/conda/envs/notebook/bin/cwltool 3.1.20250110105449\n\u001b[1;30mINFO\u001b[0m Resolved 'workflow.cwl' to 'file:///home/jovyan/example_workflows/arithmetic/workflow.cwl'\n\u001b[1;30mINFO\u001b[0m [workflow ] start\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_prod_and_div_0\n\u001b[1;30mINFO\u001b[0m [step get_prod_and_div_0] start\n\u001b[1;30mINFO\u001b[0m [job get_prod_and_div_0] /tmp/_1apt559$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/dyuxg6ka/stgf337bac5-2f8e-4489-bd51-83491b1d5f0e/workflow.py \\\n --function=workflow.get_prod_and_div \\\n --arg_x=/tmp/dyuxg6ka/stgd87c2fe4-ca8e-4031-9af0-751d6944cbe7/x.pickle \\\n --arg_y=/tmp/dyuxg6ka/stg7bcb8ced-0e5b-442e-a0e0-2b3117afe2d8/y.pickle\n\u001b[1;30mINFO\u001b[0m [job get_prod_and_div_0] completed success\n\u001b[1;30mINFO\u001b[0m [step get_prod_and_div_0] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_sum_1\n\u001b[1;30mINFO\u001b[0m [step get_sum_1] start\n\u001b[1;30mINFO\u001b[0m [job get_sum_1] /tmp/ysau_yra$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/rm6c9qek/stgfef68b90-5d69-4da9-a952-b9c2f2a1eb76/workflow.py \\\n --function=workflow.get_sum \\\n --arg_x=/tmp/rm6c9qek/stg35728be7-5a6d-487b-bd02-345581007663/prod.pickle \\\n --arg_y=/tmp/rm6c9qek/stgc0992786-237e-4308-9d9e-814ebbfb0319/div.pickle\n\u001b[1;30mINFO\u001b[0m [job get_sum_1] completed success\n\u001b[1;30mINFO\u001b[0m [step get_sum_1] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_square_2\n\u001b[1;30mINFO\u001b[0m [step get_square_2] start\n\u001b[1;30mINFO\u001b[0m [job get_square_2] /tmp/o3gzya8t$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/6a3sltnz/stg58ccf048-a5c3-4ba3-a24f-c64adfff84cd/workflow.py \\\n --function=workflow.get_square \\\n --arg_x=/tmp/6a3sltnz/stg70203cec-cbd4-4fea-a3de-70e9373d9c9d/result.pickle\n\u001b[1;30mINFO\u001b[0m [job get_square_2] completed success\n\u001b[1;30mINFO\u001b[0m [step get_square_2] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] completed success\n{\n \"result_file\": {\n \"location\": \"file:///home/jovyan/example_workflows/arithmetic/result.pickle\",\n \"basename\": \"result.pickle\",\n \"class\": \"File\",\n \"checksum\": \"sha1$1fd8f217331336b1226b84e351c56fb9a8d93685\",\n \"size\": 21,\n \"path\": \"/home/jovyan/example_workflows/arithmetic/result.pickle\"\n }\n}\u001b[1;30mINFO\u001b[0m Final process status is success\n" + } + ], + "execution_count": 4 + }, + { + "cell_type": "markdown", + "id": "c483a640", + "source": "The workflow's final output is written to `result.pickle`; unpickling it gives the same numeric result produced by the other engines.", + "metadata": {} + }, + { + "id": "2942dbba-ea0a-4d20-be5c-ed9992d09ff8", + "cell_type": "code", + "source": "with open(\"result.pickle\", \"rb\") as f:\n print(pickle.load(f))", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "6.25\n" + } + ], + "execution_count": 5 + }, + { + "id": "60e909ee-d0d0-4bd1-81c8-dd5274ae5834", + "cell_type": "code", + "source": "", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": null + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/arithmetic/executorlib.ipynb b/_sources/example_workflows/arithmetic/executorlib.ipynb new file mode 100644 index 00000000..612c6152 --- /dev/null +++ b/_sources/example_workflows/arithmetic/executorlib.ipynb @@ -0,0 +1,1125 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c39b76fb-259f-4e16-a44d-02a295c82386", + "metadata": {}, + "source": "# executorlib\n\nThis notebook defines the arithmetic workflow with [`executorlib`](https://github.com/pyiron/executorlib), a lightweight `concurrent.futures`-style executor for up-scaling Python functions to HPC resources, and then loads the resulting `workflow.json` into `aiida-workgraph`, `jobflow`, `pyiron_base` and `pyiron_workflow`." + }, + { + "cell_type": "markdown", + "id": "3638419b-a0cb-49e2-b157-7fbb1acde90f", + "metadata": {}, + "source": "## Define workflow with executorlib\n\n`executorlib`'s `SingleNodeExecutor` implements the standard `Executor` interface: `.submit()` schedules a function call and immediately returns a `Future`. Passing `export_workflow_filename` to the executor records every submitted call and its dependencies as a side effect and writes them out as a PWD `workflow.json` once the `with` block exits." + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b4a78447-e87c-4fb4-8d17-d9a280eb7254", + "metadata": {}, + "outputs": [], + "source": [ + "from executorlib import SingleNodeExecutor, get_item_from_future" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6d859dfff0c2df5c", + "metadata": {}, + "outputs": [], + "source": [ + "from workflow import get_sum, get_prod_and_div, get_square" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "77135b0c61898507", + "metadata": {}, + "outputs": [], + "source": [ + "workflow_json_filename = \"executorlib_arithmetic.json\"" + ] + }, + { + "cell_type": "markdown", + "id": "a6c2ee50", + "source": "`get_prod_and_div` returns a dictionary, so `get_item_from_future` is used to extract the `prod` and `div` keys from its future's result before they can be passed on as separate arguments to `get_sum`.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "07598344-0f75-433b-8902-bea21a42088c", + "metadata": {}, + "outputs": [], + "source": [ + "with SingleNodeExecutor(export_workflow_filename=workflow_json_filename) as exe:\n", + " future_prod_and_div = exe.submit(get_prod_and_div, x=1, y=2)\n", + " future_prod = get_item_from_future(future_prod_and_div, key=\"prod\")\n", + " future_div = get_item_from_future(future_prod_and_div, key=\"div\")\n", + " future_sum = exe.submit(get_sum, x=future_prod, y=future_div)\n", + " future_result = exe.submit(get_square, x=future_sum)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "bca646b2-0a9a-4271-966a-e5903a8c9031", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_prod_and_div\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_sum\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_square\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"input\",\n", + " \"value\": 1,\n", + " \"name\": \"x\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"input\",\n", + " \"value\": 2,\n", + " \"name\": \"y\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"x\",\n", + " \"source\": 3,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"y\",\n", + " \"source\": 4,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"x\",\n", + " \"source\": 0,\n", + " \"sourcePort\": \"prod\"\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"y\",\n", + " \"source\": 0,\n", + " \"sourcePort\": \"div\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"x\",\n", + " \"source\": 1,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": null,\n", + " \"source\": 2,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "id": "a4c0faaf-e30d-4ded-8e9f-57f97f51b14c", + "metadata": {}, + "source": "## Load Workflow with aiida\n\nThe exported `workflow.json` is loaded into `aiida-workgraph`. As with the other notebooks, an AiiDA profile must be connected via `load_profile()` before the resulting `WorkGraph` can be run." + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2ecc229f-daa1-49b9-9279-a6b5ae1aa4f2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Profile" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from aiida import load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "68a56b32-9f99-43d7-aaee-0c1cd9522681", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8f2a621d-b533-4ddd-8bcd-c22db2f922ec", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d1e4dac30bd3409f8000d40062e2ae1b", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wg = load_workflow_json(file_name=workflow_json_filename)\n", + "wg" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "cf80267d-c2b0-4236-bf1d-a57596985fc1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "01/16/2026 08:08:17 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_prod_and_div\n", + "01/16/2026 08:08:17 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|update_task_state]: Task: get_prod_and_div, type: PYFUNCTION, finished.\n", + "01/16/2026 08:08:17 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_sum\n", + "01/16/2026 08:08:18 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|update_task_state]: Task: get_sum, type: PYFUNCTION, finished.\n", + "01/16/2026 08:08:18 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_square\n", + "01/16/2026 08:08:18 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|update_task_state]: Task: get_square, type: PYFUNCTION, finished.\n", + "01/16/2026 08:08:18 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", + "01/16/2026 08:08:18 AM <39822> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1573|WorkGraphEngine|finalize]: Finalize workgraph.\n" + ] + }, + { + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "id": "0c3503e1-0a32-40e1-845d-3fd9ec3c4c19", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\nThe same JSON is loaded into a jobflow `Flow` and executed locally with `run_locally`." + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4abb0481-8e38-479d-ae61-6c46d091653e", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8253dd7c283bf3f7", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4b45e83b-945f-48c5-8e20-9df0ce0a14a1", + "metadata": {}, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8665c39c-220c-4982-b738-c31f6460530f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-01-16 08:08:27,788 INFO Started executing jobs locally\n", + "2026-01-16 08:08:28,329 INFO Starting job - get_prod_and_div (548e497c-81af-44a2-a626-cd9466984398)\n", + "2026-01-16 08:08:28,332 INFO Finished job - get_prod_and_div (548e497c-81af-44a2-a626-cd9466984398)\n", + "2026-01-16 08:08:28,333 INFO Starting job - get_sum (c4ce346f-059c-4cb1-8e98-c7f4f0df837e)\n", + "2026-01-16 08:08:28,335 INFO Finished job - get_sum (c4ce346f-059c-4cb1-8e98-c7f4f0df837e)\n", + "2026-01-16 08:08:28,336 INFO Starting job - get_square (e94efcd4-8074-48b1-865c-0e614fc9c846)\n", + "2026-01-16 08:08:28,339 INFO Finished job - get_square (e94efcd4-8074-48b1-865c-0e614fc9c846)\n", + "2026-01-16 08:08:28,340 INFO Finished executing jobs locally\n" + ] + }, + { + "data": { + "text/plain": [ + "{'548e497c-81af-44a2-a626-cd9466984398': {1: Response(output={'prod': 2, 'div': 0.5}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/arithmetic'))},\n", + " 'c4ce346f-059c-4cb1-8e98-c7f4f0df837e': {1: Response(output=2.5, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/arithmetic'))},\n", + " 'e94efcd4-8074-48b1-865c-0e614fc9c846': {1: Response(output=6.25, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/arithmetic'))}}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "406fd07dd4bd8006", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\nLoading the workflow into `pyiron_base` produces a list of delayed jobs; `.draw()` visualizes the dependency graph and `.pull()` triggers delayed execution of the whole chain." + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "cf76f305-24de-45a7-be8e-cfe45cd6458e", + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-24T08:25:33.797570Z", + "start_time": "2025-05-24T08:25:33.771214Z" + } + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5b442611457aa5a8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "create_function_job_90a5b42c58fdc46b3ef919df41d06f68\n", + "\n", + "create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8bb90>\n", + "\n", + "\n", + "\n", + "x_ac1d6fed32a5172c23c7d80f1257d4cf\n", + "\n", + "x=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8ba40>\n", + "\n", + "\n", + "\n", + "x_ac1d6fed32a5172c23c7d80f1257d4cf->create_function_job_90a5b42c58fdc46b3ef919df41d06f68\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "x_19fc443a8a97273a376990b43ca208fc\n", + "\n", + "x=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8b770>\n", + "\n", + "\n", + "\n", + "x_19fc443a8a97273a376990b43ca208fc->x_ac1d6fed32a5172c23c7d80f1257d4cf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "x_1d847da32ecaabf6731c38f798c3d4ce\n", + "\n", + "x=1\n", + "\n", + "\n", + "\n", + "x_1d847da32ecaabf6731c38f798c3d4ce->x_19fc443a8a97273a376990b43ca208fc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "y_8b6d8b56733d62ed930105017913a62e\n", + "\n", + "y=<pyiron_base.project.delayed.DelayedObject object at 0x7f9f60f8b740>\n", + "\n", + "\n", + "\n", + "x_1d847da32ecaabf6731c38f798c3d4ce->y_8b6d8b56733d62ed930105017913a62e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "y_8b6d8b56733d62ed930105017913a62e->x_ac1d6fed32a5172c23c7d80f1257d4cf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "y_a9ec4f5f33f0d64e74ed5d9900bceac6\n", + "\n", + "y=2\n", + "\n", + "\n", + "\n", + "y_a9ec4f5f33f0d64e74ed5d9900bceac6->x_19fc443a8a97273a376990b43ca208fc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "y_a9ec4f5f33f0d64e74ed5d9900bceac6->y_8b6d8b56733d62ed930105017913a62e\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "2ca33c8590a54866", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job get_prod_and_div_00cf2c787390eacfbc4a51e9a0c38ec7 was saved and received the ID: 31\n", + "The job get_sum_4b5b9d16b259a13b6a32798ce2779af8 was saved and received the ID: 32\n", + "The job get_square_9cc2f0545498916d7720c59c1120a66d was saved and received the ID: 33\n" + ] + }, + { + "data": { + "text/plain": [ + "6.25" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "delayed_object_lst[-1].pull()" + ] + }, + { + "cell_type": "markdown", + "id": "406d62d0-76eb-411f-a7fb-f866d5cec9c1", + "metadata": {}, + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the workflow is loaded into a `pyiron_workflow` `Workflow` object, drawn with `.draw()` and executed with `.run()`." + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c8c95d7f-7a3b-4ff4-890e-3f9b0434b436", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "5c759f6d-d82d-44f8-8120-e7732988fe71", + "metadata": {}, + "outputs": [], + "source": [ + "wf = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "fe6ab0eb-6078-413d-a8e2-f71a020b1036", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmetic\n", + "\n", + "executorlib_arithmetic: Workflow\n", + "\n", + "clusterexecutorlib_arithmeticInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_div\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_prod_and_div: get_prod_and_div\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sum\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_sum: get_sum\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_square\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_square: get_square\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_951416441108707023: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m2059545174045897913: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsget_prod_and_div__x\n", + "\n", + "get_prod_and_div__x\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divInputsx\n", + "\n", + "x\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsget_prod_and_div__x->clusterexecutorlib_arithmeticget_prod_and_divInputsx\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsget_prod_and_div__y\n", + "\n", + "get_prod_and_div__y\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divInputsy\n", + "\n", + "y\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsget_prod_and_div__y->clusterexecutorlib_arithmeticget_prod_and_divInputsy\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsinjected_GetItem_951416441108707023__item\n", + "\n", + "injected_GetItem_951416441108707023__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsinjected_GetItem_951416441108707023__item->clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsinjected_GetItem_m2059545174045897913__item\n", + "\n", + "injected_GetItem_m2059545174045897913__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticInputsinjected_GetItem_m2059545174045897913__item->clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticOutputsWithInjectionget_square__get_square\n", + "\n", + "get_square__get_square\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionget_prod_and_div\n", + "\n", + "get_prod_and_div\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionget_prod_and_div->clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_prod_and_divOutputsWithInjectionget_prod_and_div->clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumInputsx\n", + "\n", + "x\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumInputsy\n", + "\n", + "y\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumOutputsWithInjectionget_sum\n", + "\n", + "get_sum\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareInputsx\n", + "\n", + "x\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_sumOutputsWithInjectionget_sum->clusterexecutorlib_arithmeticget_squareInputsx\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareOutputsWithInjectionget_square\n", + "\n", + "get_square\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticget_squareOutputsWithInjectionget_square->clusterexecutorlib_arithmeticOutputsWithInjectionget_square__get_square\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_951416441108707023OutputsWithInjectiongetitem->clusterexecutorlib_arithmeticget_sumInputsx\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_arithmeticinjected_GetItem_m2059545174045897913OutputsWithInjectiongetitem->clusterexecutorlib_arithmeticget_sumInputsy\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3c4971a2-b66f-4fda-b438-1039b41d8f8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'get_square__get_square': 6.25}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "094c79c9-81e7-4613-b4e5-b029ce30b102", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/_sources/example_workflows/arithmetic/jobflow.ipynb b/_sources/example_workflows/arithmetic/jobflow.ipynb new file mode 100644 index 00000000..3ff3b1ce --- /dev/null +++ b/_sources/example_workflows/arithmetic/jobflow.ipynb @@ -0,0 +1,410 @@ +{ + "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": 5, + "nbformat": 4, + "cells": [ + { + "id": "982a4fbe-7cf9-45dd-84ae-9854149db0b9", + "cell_type": "markdown", + "source": "# jobflow", + "metadata": {} + }, + { + "id": "e6180712-d081-45c7-ba41-fc5191f10427", + "cell_type": "markdown", + "source": "## Define workflow with jobflow\n\nThis tutorial will demonstrate how to use the PWD with `jobflow` and load the workflow with `aiida` and `pyiron`.\n\n[`jobflow`](https://joss.theoj.org/papers/10.21105/joss.05995) was developed to simplify the development of high-throughput workflows. It uses a decorator-based approach to define the “Job“s that can be connected to form complex workflows (“Flow“s). `jobflow` is the workflow language of the workflow library [`atomate2`](https://chemrxiv.org/engage/chemrxiv/article-details/678e76a16dde43c9085c75e9), designed to replace [atomate](https://www.sciencedirect.com/science/article/pii/S0927025617303919), which was central to the development of the [Materials Project](https://pubs.aip.org/aip/apm/article/1/1/011002/119685/Commentary-The-Materials-Project-A-materials) database.", + "metadata": {} + }, + { + "id": "69bedfb9ec12c092", + "cell_type": "markdown", + "source": "First, we start by importing the job decorator and the Flow class from jobflow, as welll as the necessary modules from the python workflow definition and the example arithmetic workflow.", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "id": "000bbd4a-f53c-4eea-9d85-76f0aa2ca10b", + "cell_type": "code", + "source": "from jobflow import job, Flow", + "metadata": { + "ExecuteTime": { + "end_time": "2025-04-24T12:51:34.747117656Z", + "start_time": "2025-04-24T12:51:33.203979325Z" + }, + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "06c2bd9e-b2ac-4b88-9158-fa37331c3418", + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import write_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "id": "f9217ce7b093b5fc", + "cell_type": "code", + "source": "from workflow import (\n get_sum as _get_sum,\n get_prod_and_div as _get_prod_and_div,\n get_square as _get_square,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "2639deadfae9c591", + "cell_type": "markdown", + "source": "Using the job object decorator, the imported functions from the arithmetic workflow are transformed into jobflow “Job”s. These “Job”s can delay the execution of Python functions and can be chained into workflows (“Flow”s). A “Job” can return serializable outputs (e.g., a number, a dictionary, or a Pydantic model) or a so-called “Response” object, which enables the execution of dynamic workflows where the number of nodes is not known prior to the workflow’s execution. ", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "id": "1feba0898ee4e361", + "cell_type": "code", + "source": "workflow_json_filename = \"jobflow_simple.json\"", + "metadata": { + "ExecuteTime": { + "end_time": "2025-04-24T10:30:04.751088Z", + "start_time": "2025-04-24T10:30:04.748941Z" + }, + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "id": "07598344-0f75-433b-8902-bea21a42088c", + "cell_type": "code", + "source": "get_sum = job(_get_sum)\n# Note: one could also transfer the outputs to the datastore as well: get_prod_and_div = job(_get_prod_and_div, data=[\"prod\", \"div\"])\n# On the way from the general definition to the jobflow definition, we do this automatically to avoid overflow databases.\nget_prod_and_div = job(_get_prod_and_div)\nget_square = job(_get_square)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "ecef1ed5-a8d3-48c3-9e01-4a40e55c1153", + "cell_type": "code", + "source": "prod_and_div = get_prod_and_div(x=1, y=2)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "id": "2b88a30a-e26b-4802-89b7-79ca08cc0af9", + "cell_type": "code", + "source": "tmp_sum = get_sum(x=prod_and_div.output.prod, y=prod_and_div.output.div)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "id": "8d95c3aa", + "cell_type": "code", + "source": "result = get_square(x=tmp_sum.output)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "id": "a5e5ca63-2906-47c9-bac6-adebf8643cba", + "cell_type": "code", + "source": "flow = Flow([prod_and_div, tmp_sum, result])", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "id": "27688edd256f1420", + "cell_type": "markdown", + "source": "As jobflow itself is only a workflow language, the workflows are typically executed on high-performance computers with a workflow manager such as [Fireworks](https://onlinelibrary.wiley.com/doi/full/10.1002/cpe.3505) or [jobflow-remote](https://github.com/Matgenix/jobflow-remote). For smaller and test workflows, simple linear, non-parallel execution of the workflow graph can be performed with jobflow itself. All outputs of individual jobs are saved in a database. For high-throughput applications typically, a MongoDB database is used. For testing and smaller workflows, a memory database can be used instead.", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "id": "e464da97-16a1-4772-9a07-0a47f152781d", + "cell_type": "code", + "source": "write_workflow_json(flow=flow, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "id": "bca646b2-0a9a-4271-966a-e5903a8c9031", + "cell_type": "code", + "source": "!cat {workflow_json_filename}", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "{\n \"version\": \"0.1.0\",\n \"nodes\": [\n {\n \"id\": 0,\n \"type\": \"function\",\n \"value\": \"workflow.get_prod_and_div\"\n },\n {\n \"id\": 1,\n \"type\": \"function\",\n \"value\": \"workflow.get_sum\"\n },\n {\n \"id\": 2,\n \"type\": \"function\",\n \"value\": \"workflow.get_square\"\n },\n {\n \"id\": 3,\n \"type\": \"input\",\n \"name\": \"x\",\n \"value\": 1\n },\n {\n \"id\": 4,\n \"type\": \"input\",\n \"name\": \"y\",\n \"value\": 2\n },\n {\n \"id\": 5,\n \"type\": \"output\",\n \"name\": \"result\"\n }\n ],\n \"edges\": [\n {\n \"target\": 0,\n \"targetPort\": \"x\",\n \"source\": 3,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"y\",\n \"source\": 4,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"x\",\n \"source\": 0,\n \"sourcePort\": \"prod\"\n },\n {\n \"target\": 1,\n \"targetPort\": \"y\",\n \"source\": 0,\n \"sourcePort\": \"div\"\n },\n {\n \"target\": 2,\n \"targetPort\": \"x\",\n \"source\": 1,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": null,\n \"source\": 2,\n \"sourcePort\": null\n }\n ]\n}" + } + ], + "execution_count": 11 + }, + { + "id": "65389ef27c38fdec", + "cell_type": "markdown", + "source": "Finally, you can write the workflow data into a JSON file to be imported later.", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "id": "87a27540-c390-4d34-ae75-4739bfc4c1b7", + "cell_type": "markdown", + "source": "## Load Workflow with aiida\n\nIn this part, we will demonstrate how to import the `jobflow` workflow into `aiida` via the PWD.", + "metadata": {} + }, + { + "id": "66a1b3a6-3d3b-4caa-b58f-d8bc089b1074", + "cell_type": "code", + "source": "from aiida import load_profile\n\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 12, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 12 + }, + { + "id": "4679693b-039b-45cf-8c67-5b2b3d705a83", + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "id": "cc7127193d31d8ef", + "cell_type": "markdown", + "source": "We import the necessary modules from `aiida` and the PWD, as well as the workflow JSON file.", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "id": "68c41a61-d185-47e8-ba31-eeff71d8b2c6", + "cell_type": "code", + "source": "wg = load_workflow_json(file_name=workflow_json_filename)\nwg", + "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': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "9f822f7ac5ca4cb9960374af471f79cf" + } + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "id": "4816325767559bbe", + "cell_type": "markdown", + "source": "Finally, we are now able to run the workflow with `aiida`.", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "id": "05228ece-643c-420c-8df8-4ce3df379515", + "cell_type": "code", + "source": "wg.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 05:38:40 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_prod_and_div1\n05/24/2025 05:38:41 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: get_prod_and_div1, type: PyFunction, finished.\n05/24/2025 05:38:41 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_sum2\n05/24/2025 05:38:41 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: get_sum2, type: PyFunction, finished.\n05/24/2025 05:38:41 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_square3\n05/24/2025 05:38:42 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: get_square3, type: PyFunction, finished.\n05/24/2025 05:38:42 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 05:38:42 AM <306> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 15 + }, + { + "id": "2c942094-61b4-4e94-859a-64f87b5bec64", + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_base\n\nIn this part, we will demonstrate how to import the `jobflow` workflow into `pyiron` via the PWD.", + "metadata": {} + }, + { + "id": "ea102341-84f7-4156-a7d1-c3ab1ea613a5", + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 16 + }, + { + "id": "8f2a621d-b533-4ddd-8bcd-c22db2f922ec", + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_25906340bd0c28c44fd73d69e7a3d8bc\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x733f400d1310>\n\n\n\nx_1a7fff02f6473a13e5e8742988186611\n\nx=<pyiron_base.project.delayed.DelayedObject object at 0x733f40ddb0e0>\n\n\n\nx_1a7fff02f6473a13e5e8742988186611->create_function_job_25906340bd0c28c44fd73d69e7a3d8bc\n\n\n\n\n\nx_e4655695917c433de56d1c64232473f9\n\nx=<pyiron_base.project.delayed.DelayedObject object at 0x733f4db8caa0>\n\n\n\nx_e4655695917c433de56d1c64232473f9->x_1a7fff02f6473a13e5e8742988186611\n\n\n\n\n\nx_1d847da32ecaabf6731c38f798c3d4ce\n\nx=1\n\n\n\nx_1d847da32ecaabf6731c38f798c3d4ce->x_e4655695917c433de56d1c64232473f9\n\n\n\n\n\ny_3b83397feef07a74d9a046a1b7f57749\n\ny=<pyiron_base.project.delayed.DelayedObject object at 0x733f4ed91130>\n\n\n\nx_1d847da32ecaabf6731c38f798c3d4ce->y_3b83397feef07a74d9a046a1b7f57749\n\n\n\n\n\ny_3b83397feef07a74d9a046a1b7f57749->x_1a7fff02f6473a13e5e8742988186611\n\n\n\n\n\ny_a9ec4f5f33f0d64e74ed5d9900bceac6\n\ny=2\n\n\n\ny_a9ec4f5f33f0d64e74ed5d9900bceac6->x_e4655695917c433de56d1c64232473f9\n\n\n\n\n\ny_a9ec4f5f33f0d64e74ed5d9900bceac6->y_3b83397feef07a74d9a046a1b7f57749\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "id": "cf80267d-c2b0-4236-bf1d-a57596985fc1", + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_prod_and_div_00cf2c787390eacfbc4a51e9a0c38ec7 was saved and received the ID: 1\nThe job get_sum_4b5b9d16b259a13b6a32798ce2779af8 was saved and received the ID: 2\nThe job get_square_9cc2f0545498916d7720c59c1120a66d was saved and received the ID: 3\n" + }, + { + "execution_count": 18, + "output_type": "execute_result", + "data": { + "text/plain": "6.25" + }, + "metadata": {} + } + ], + "execution_count": 18 + }, + { + "id": "9414680d1cbc3b2e", + "cell_type": "markdown", + "source": "Here, the procedure is the same as before: Import the necessary `pyiron_base` module from the PWD, import the workflow JSON file and run the workflow with pyiron.", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + } + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow", + "id": "7da4733bfeffee63" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json", + "id": "6c87661996ff840b" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=workflow_json_filename)", + "id": "33b1e9408924f9c0" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))", + "id": "df63b2963a0d90a5" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()", + "id": "bf110395454bd694" + } + ] +} diff --git a/_sources/example_workflows/arithmetic/pyiron_base.ipynb b/_sources/example_workflows/arithmetic/pyiron_base.ipynb new file mode 100644 index 00000000..eaba0a52 --- /dev/null +++ b/_sources/example_workflows/arithmetic/pyiron_base.ipynb @@ -0,0 +1,328 @@ +{ + "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": 5, + "nbformat": 4, + "cells": [ + { + "id": "c39b76fb-259f-4e16-a44d-02a295c82386", + "cell_type": "markdown", + "source": "# pyiron\n\nThis notebook defines the arithmetic workflow with [`pyiron_base`](https://github.com/pyiron/pyiron_base) and then loads the resulting `workflow.json` into `aiida-workgraph`, `jobflow` and `pyiron_workflow`.", + "metadata": {} + }, + { + "id": "3638419b-a0cb-49e2-b157-7fbb1acde90f", + "cell_type": "markdown", + "source": "## Define workflow with pyiron_base\n\nThe `job` decorator from `pyiron_base` turns a plain Python function into a pyiron job: calling the decorated function no longer executes it immediately, but returns a delayed object that can be chained with other jobs. For functions such as `get_prod_and_div` that return a dictionary, `output_key_lst` declares the dictionary keys so that individual entries (`prod`, `div`) can be wired as separate outputs to downstream jobs.", + "metadata": {} + }, + { + "id": "b4a78447-e87c-4fb4-8d17-d9a280eb7254", + "cell_type": "code", + "source": "from pyiron_base import job", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "06c2bd9e-b2ac-4b88-9158-fa37331c3418", + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import write_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "id": "6d859dfff0c2df5c", + "cell_type": "code", + "source": "from workflow import (\n get_sum as _get_sum,\n get_prod_and_div as _get_prod_and_div,\n get_square as _get_square,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "77135b0c61898507", + "cell_type": "code", + "source": "workflow_json_filename = \"pyiron_arithmetic.json\"", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "id": "07598344-0f75-433b-8902-bea21a42088c", + "cell_type": "code", + "source": "get_sum = job(_get_sum)\nget_prod_and_div = job(_get_prod_and_div, output_key_lst=[\"prod\", \"div\"])\nget_square = job(_get_square)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "2b88a30a-e26b-4802-89b7-79ca08cc0af9", + "cell_type": "code", + "source": "prod_and_div = get_prod_and_div(x=1, y=2)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "id": "a5e5ca63-2906-47c9-bac6-adebf8643cba", + "cell_type": "code", + "source": "tmp_sum = get_sum(x=prod_and_div.output.prod, y=prod_and_div.output.div)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "id": "eae321f1", + "cell_type": "code", + "source": "result = get_square(x=tmp_sum)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "id": "9cecf662", + "source": "None of these calls run yet, they only build up a graph of delayed jobs. `write_workflow_json` walks that graph starting from the final `result` job and serializes it into the PWD `workflow.json` format.", + "metadata": {} + }, + { + "id": "e464da97-16a1-4772-9a07-0a47f152781d", + "cell_type": "code", + "source": "write_workflow_json(delayed_object=result, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "id": "bca646b2-0a9a-4271-966a-e5903a8c9031", + "cell_type": "code", + "source": "!cat {workflow_json_filename}", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "{\n \"version\": \"0.1.0\",\n \"nodes\": [\n {\n \"id\": 0,\n \"type\": \"function\",\n \"value\": \"workflow.get_square\"\n },\n {\n \"id\": 1,\n \"type\": \"function\",\n \"value\": \"workflow.get_sum\"\n },\n {\n \"id\": 2,\n \"type\": \"function\",\n \"value\": \"workflow.get_prod_and_div\"\n },\n {\n \"id\": 3,\n \"type\": \"input\",\n \"name\": \"x\",\n \"value\": 1\n },\n {\n \"id\": 4,\n \"type\": \"input\",\n \"name\": \"y\",\n \"value\": 2\n },\n {\n \"id\": 5,\n \"type\": \"output\",\n \"name\": \"result\"\n }\n ],\n \"edges\": [\n {\n \"target\": 0,\n \"targetPort\": \"x\",\n \"source\": 1,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"x\",\n \"source\": 2,\n \"sourcePort\": \"prod\"\n },\n {\n \"target\": 2,\n \"targetPort\": \"x\",\n \"source\": 3,\n \"sourcePort\": null\n },\n {\n \"target\": 2,\n \"targetPort\": \"y\",\n \"source\": 4,\n \"sourcePort\": null\n },\n {\n \"target\": 1,\n \"targetPort\": \"y\",\n \"source\": 2,\n \"sourcePort\": \"div\"\n },\n {\n \"target\": 5,\n \"targetPort\": null,\n \"source\": 0,\n \"sourcePort\": null\n }\n ]\n}" + } + ], + "execution_count": 10 + }, + { + "id": "a4c0faaf-e30d-4ded-8e9f-57f97f51b14c", + "cell_type": "markdown", + "source": "## Load Workflow with aiida\n\nThe exported `workflow.json` is loaded into `aiida-workgraph`. An AiiDA profile must be connected via `load_profile()` before the resulting `WorkGraph` can be run.", + "metadata": {} + }, + { + "id": "2ecc229f-daa1-49b9-9279-a6b5ae1aa4f2", + "cell_type": "code", + "source": "from aiida import load_profile\n\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 11, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 11 + }, + { + "id": "68a56b32-9f99-43d7-aaee-0c1cd9522681", + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "id": "8f2a621d-b533-4ddd-8bcd-c22db2f922ec", + "cell_type": "code", + "source": "wg = load_workflow_json(file_name=workflow_json_filename)\nwg", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 13, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "f52e57854d6e4d07b6a2c11a75873efe" + } + }, + "metadata": {} + } + ], + "execution_count": 13 + }, + { + "id": "cf80267d-c2b0-4236-bf1d-a57596985fc1", + "cell_type": "code", + "source": "\nwg.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 05:39:21 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_prod_and_div3\n05/24/2025 05:39:21 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|update_task_state]: Task: get_prod_and_div3, type: PyFunction, finished.\n05/24/2025 05:39:21 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_sum2\n05/24/2025 05:39:21 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|update_task_state]: Task: get_sum2, type: PyFunction, finished.\n05/24/2025 05:39:21 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_square1\n05/24/2025 05:39:22 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|update_task_state]: Task: get_square1, type: PyFunction, finished.\n05/24/2025 05:39:22 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 05:39:22 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 14 + }, + { + "id": "0c3503e1-0a32-40e1-845d-3fd9ec3c4c19", + "cell_type": "markdown", + "source": "## Load Workflow with jobflow\n\nThe same JSON is loaded into a jobflow `Flow` and executed locally with `run_locally`.", + "metadata": {} + }, + { + "id": "4abb0481-8e38-479d-ae61-6c46d091653e", + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "id": "8253dd7c283bf3f7", + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 16 + }, + { + "id": "4b45e83b-945f-48c5-8e20-9df0ce0a14a1", + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 17 + }, + { + "id": "8665c39c-220c-4982-b738-c31f6460530f", + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 05:39:22,893 INFO Started executing jobs locally\n2025-05-24 05:39:23,184 INFO Starting job - get_prod_and_div (82cb13d7-d7c8-4bd1-84d1-c301d4ee2422)\n2025-05-24 05:39:23,187 INFO Finished job - get_prod_and_div (82cb13d7-d7c8-4bd1-84d1-c301d4ee2422)\n2025-05-24 05:39:23,187 INFO Starting job - get_sum (19c0830c-e918-44d2-82f1-b9418463c057)\n2025-05-24 05:39:23,189 INFO Finished job - get_sum (19c0830c-e918-44d2-82f1-b9418463c057)\n2025-05-24 05:39:23,189 INFO Starting job - get_square (78fc4e6e-2a99-490e-b829-fae9704296c2)\n2025-05-24 05:39:23,190 INFO Finished job - get_square (78fc4e6e-2a99-490e-b829-fae9704296c2)\n2025-05-24 05:39:23,191 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 18, + "output_type": "execute_result", + "data": { + "text/plain": "{'82cb13d7-d7c8-4bd1-84d1-c301d4ee2422': {1: Response(output={'prod': 2, 'div': 0.5}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))},\n '19c0830c-e918-44d2-82f1-b9418463c057': {1: Response(output=2.5, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))},\n '78fc4e6e-2a99-490e-b829-fae9704296c2': {1: Response(output=6.25, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))}}" + }, + "metadata": {} + } + ], + "execution_count": 18 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the workflow is loaded into a `pyiron_workflow` `Workflow` object, drawn with `.draw()` and executed with `.run()`.", + "id": "406fd07dd4bd8006" + }, + { + "id": "cf76f305-24de-45a7-be8e-cfe45cd6458e", + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json", + "metadata": { + "trusted": true, + "ExecuteTime": { + "end_time": "2025-05-24T08:25:33.797570Z", + "start_time": "2025-05-24T08:25:33.771214Z" + } + }, + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=workflow_json_filename)", + "id": "5b442611457aa5a8" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))", + "id": "2ca33c8590a54866" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()", + "id": "d36522a1c315b7f5" + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/arithmetic/pyiron_workflow.ipynb b/_sources/example_workflows/arithmetic/pyiron_workflow.ipynb new file mode 100644 index 00000000..491322eb --- /dev/null +++ b/_sources/example_workflows/arithmetic/pyiron_workflow.ipynb @@ -0,0 +1,916 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9db99131-e5ef-49a9-93f6-13c44782c119", + "metadata": {}, + "source": "# pyiron_workflow\n\nThis notebook defines the arithmetic workflow with [`pyiron_workflow`](https://github.com/pyiron/pyiron_workflow) and then loads the resulting `workflow.json` into `aiida-workgraph`, `jobflow` and `pyiron_base`." + }, + { + "cell_type": "markdown", + "id": "d16df60e-1359-4d4c-bb95-2b994860d04a", + "metadata": {}, + "source": "## Define workflow in pyiron_workflow\n\n`to_function_node` wraps a plain Python function into a `pyiron_workflow` node that can be added to a `Workflow` graph. Nodes are assembled into a graph with attribute access: assigning `wf. = node(...)` both registers the node under that name and connects its inputs to the outputs of other nodes already on the graph." + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e19826e4-3540-4ea0-ba83-566e818ab6e3", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import write_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f0d54cc1-3603-4c6e-a715-852a8ef1545f", + "metadata": {}, + "outputs": [], + "source": [ + "from pyiron_workflow._legacy import Workflow, to_function_node" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9fa01739-812c-4188-b7af-320b4890c963", + "metadata": {}, + "outputs": [], + "source": [ + "from workflow import (\n", + " get_prod_and_div as _get_prod_and_div, \n", + " get_sum as _get_sum,\n", + " get_square as _get_square,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8b236cc-d0ff-4a53-b01a-ecbb74f68b0f", + "metadata": {}, + "outputs": [], + "source": [ + "workflow_json_filename = \"pyiron_workflow_arithmetic.json\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "99037759-4d9e-43b2-8b04-341f2698bbe7", + "metadata": {}, + "outputs": [], + "source": [ + "get_prod_and_div = to_function_node(\"get_prod_and_div\", _get_prod_and_div, \"get_prod_and_div\")\n", + "get_sum = to_function_node(\"get_sum\", _get_sum, \"get_sum\")\n", + "get_square = to_function_node(\"get_square\", _get_square, \"get_square\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "523a3561-315a-4345-a356-bd46774cc7dc", + "metadata": {}, + "outputs": [], + "source": [ + "wf = Workflow(\"my_workflow\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "92a67ce5-9c73-4018-8e70-ed95789a592e", + "metadata": {}, + "outputs": [], + "source": [ + "wf.x = 1\n", + "wf.y = 2\n", + "wf.prod_and_div = get_prod_and_div(x=wf.x, y=wf.y)\n", + "wf.tmp_sum = get_sum(x=wf.prod_and_div[\"prod\"], y=wf.prod_and_div[\"div\"])\n", + "wf.square_result = get_square(x=wf.tmp_sum)" + ] + }, + { + "cell_type": "markdown", + "id": "7d2460f1", + "source": "`wf.draw()` renders the resulting node graph, and `write_workflow_json` serializes `wf.graph_as_dict` into the PWD `workflow.json` format.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "bafebfbe-72de-407c-b376-6fce6cbb665e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflow\n", + "\n", + "my_workflow: Workflow\n", + "\n", + "clustermy_workflowInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowprod_and_div\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "prod_and_div: get_prod_and_div\n", + "\n", + "\n", + "clustermy_workflowprod_and_divInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowprod_and_divOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m277194796397263432: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7247062725966739531: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowtmp_sum\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "tmp_sum: get_sum\n", + "\n", + "\n", + "clustermy_workflowtmp_sumInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowtmp_sumOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowsquare_result\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "square_result: get_square\n", + "\n", + "\n", + "clustermy_workflowsquare_resultInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowsquare_resultOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsprod_and_div__x\n", + "\n", + "prod_and_div__x\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divInputsx\n", + "\n", + "x\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsprod_and_div__x->clustermy_workflowprod_and_divInputsx\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsprod_and_div__y\n", + "\n", + "prod_and_div__y\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divInputsy\n", + "\n", + "y\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsprod_and_div__y->clustermy_workflowprod_and_divInputsy\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m277194796397263432__item\n", + "\n", + "injected_GetItem_m277194796397263432__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m277194796397263432__item->clustermy_workflowinjected_GetItem_m277194796397263432Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m7247062725966739531__item\n", + "\n", + "injected_GetItem_m7247062725966739531__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m7247062725966739531__item->clustermy_workflowinjected_GetItem_m7247062725966739531Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjectionsquare_result__get_square\n", + "\n", + "square_result__get_square\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divOutputsWithInjectionget_prod_and_div\n", + "\n", + "get_prod_and_div\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divOutputsWithInjectionget_prod_and_div->clustermy_workflowinjected_GetItem_m277194796397263432Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowprod_and_divOutputsWithInjectionget_prod_and_div->clustermy_workflowinjected_GetItem_m7247062725966739531Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumInputsx\n", + "\n", + "x\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m277194796397263432OutputsWithInjectiongetitem->clustermy_workflowtmp_sumInputsx\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumInputsy\n", + "\n", + "y\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7247062725966739531OutputsWithInjectiongetitem->clustermy_workflowtmp_sumInputsy\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumOutputsWithInjectionget_sum\n", + "\n", + "get_sum\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultInputsx\n", + "\n", + "x\n", + "\n", + "\n", + "\n", + "clustermy_workflowtmp_sumOutputsWithInjectionget_sum->clustermy_workflowsquare_resultInputsx\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultOutputsWithInjectionget_square\n", + "\n", + "get_square\n", + "\n", + "\n", + "\n", + "clustermy_workflowsquare_resultOutputsWithInjectionget_square->clustermy_workflowOutputsWithInjectionsquare_result__get_square\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f140ec87-085c-4433-93cb-379226781bd3", + "metadata": {}, + "outputs": [], + "source": [ + "write_workflow_json(graph_as_dict=wf.graph_as_dict, file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c61b9a68-d1cd-4949-97b6-00451ba850b7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_prod_and_div\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_sum\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_square\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"input\",\n", + " \"name\": \"x\",\n", + " \"value\": 1\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"input\",\n", + " \"name\": \"y\",\n", + " \"value\": 2\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"y\",\n", + " \"source\": 0,\n", + " \"sourcePort\": \"div\"\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"x\",\n", + " \"source\": 0,\n", + " \"sourcePort\": \"prod\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"x\",\n", + " \"source\": 1,\n", + " \"sourcePort\": \"get_sum\"\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"x\",\n", + " \"source\": 3,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"y\",\n", + " \"source\": 4,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": null,\n", + " \"source\": 2,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat workflow.json" + ] + }, + { + "cell_type": "markdown", + "id": "1681d449-0266-4da4-8d87-40a055cf3149", + "metadata": {}, + "source": "## Load Workflow with aiida\n\nThe exported `workflow.json` is loaded into `aiida-workgraph`. An AiiDA profile must be connected via `load_profile()` before the resulting `WorkGraph` can be run." + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41b41ac3-7880-48dd-824e-7176187b8734", + "metadata": {}, + "outputs": [], + "source": [ + "from aiida import load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f6112a23-cdde-4346-88af-295f463940c5", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db6d30b6-2b42-4c07-b319-b6700e3c319b", + "metadata": {}, + "outputs": [], + "source": [ + "wg = load_workflow_json(file_name=workflow_json_filename)\n", + "wg" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "022066b4-21b3-41c6-b0ab-f40661fcf957", + "metadata": {}, + "outputs": [], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "id": "bac61097-e666-443b-9446-4ebb9a3e6b5f", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\nThe same JSON is loaded into a jobflow `Flow` and executed locally with `run_locally`." + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63df1efd-9417-4146-a88e-cde161962b9e", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6506e6cc-842c-4899-8382-696466d63a1b", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eed9ca1c-ad8d-440a-97f8-97b9d3d45eb0", + "metadata": {}, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21c2303c-1118-4d50-9d99-6ec71653be02", + "metadata": {}, + "outputs": [], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "f26c9650-649f-436d-8d19-b2cd75cf6488", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\nFinally, the workflow is loaded into `pyiron_base`, producing a list of delayed jobs. `.draw()` visualizes the dependency graph and `.pull()` triggers delayed execution of the whole chain." + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ada4861-0e5a-4baf-9e16-42b7c238558b", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ac2fd45-e88a-4d12-b4e3-b23212729730", + "metadata": {}, + "outputs": [], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8811199-2c2d-4613-be74-cc00508d97c4", + "metadata": {}, + "outputs": [], + "source": [ + "delayed_object_lst[-1].pull()" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/example_workflows/arithmetic/universal_workflow.ipynb b/_sources/example_workflows/arithmetic/universal_workflow.ipynb new file mode 100644 index 00000000..a100ed2d --- /dev/null +++ b/_sources/example_workflows/arithmetic/universal_workflow.ipynb @@ -0,0 +1,357 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 4, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "# Load Simple Workflow\n\nThis notebook loads a single, pre-existing `workflow.json` with several different engines in turn. Since the JSON only describes function nodes, inputs, outputs and the edges between them, it does not matter which engine originally wrote it — any of the engines below can load and execute it.", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Plot\n\nBefore running the workflow with any engine, `python_workflow_definition.plot.plot` renders `workflow.json` directly as a graph of function, input and output nodes — independent of any particular workflow engine.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.plot import plot", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "source": "plot(file_name='workflow.json')", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\n0\n\nworkflow.get_prod_and_div\n\n\n\n1\n\nworkflow.get_sum\n\n\n\n0->1\n\n\n\n\n\n2\n\nworkflow.get_square\n\n\n\n1->2\n\n\nx\n\n\n\n5\n\nresult\n\n\n\n2->5\n\n\n\n\n\n3\n\n1\n\n\n\n3->0\n\n\nx\n\n\n\n4\n\n2\n\n\n\n4->0\n\n\ny\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": "## Aiida\n\nLoading the JSON into `aiida-workgraph` requires connecting to an AiiDA profile first via `load_profile()`; the workflow is then reconstructed as a `WorkGraph` and executed with `.run()`.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json\n\nfrom aiida import load_profile\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 3, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "source": "workgraph = load_workflow_json(file_name='workflow.json')", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "source": "# TODO: Create inputs rather than tasks out of data nodes\nworkgraph", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 5, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "fc63f59e75a74fbcab9e44a06ecb6d18" + } + }, + "metadata": {} + } + ], + "execution_count": 5 + }, + { + "cell_type": "code", + "source": "\nworkgraph.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 05:39:46 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_prod_and_div1\n05/24/2025 05:39:46 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|update_task_state]: Task: get_prod_and_div1, type: PyFunction, finished.\n05/24/2025 05:39:46 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_sum2\n05/24/2025 05:39:47 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|update_task_state]: Task: get_sum2, type: PyFunction, finished.\n05/24/2025 05:39:47 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_square3\n05/24/2025 05:39:47 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|update_task_state]: Task: get_square3, type: PyFunction, finished.\n05/24/2025 05:39:47 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 05:39:47 AM <644> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [35|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": "## executorlib\n\n`python_workflow_definition.executorlib.load_workflow_json` submits each function node to the given `Executor` and returns the `Future` of the final node; calling `.result()` blocks until the whole chain has completed.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from executorlib import SingleNodeExecutor", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.executorlib import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "cell_type": "code", + "source": "with SingleNodeExecutor(max_workers=1) as exe:\n result = load_workflow_json(file_name=\"workflow.json\", exe=exe).result()", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "cell_type": "code", + "source": "result", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 10, + "output_type": "execute_result", + "data": { + "text/plain": "6.25" + }, + "metadata": {} + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": "## Jobflow\n\nThe JSON is reconstructed as a jobflow `Flow` and executed locally with `run_locally`.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 05:39:49,427 INFO Started executing jobs locally\n2025-05-24 05:39:49,510 INFO Starting job - get_prod_and_div (f82f13df-44cc-4bce-8712-ab5a1408c551)\n2025-05-24 05:39:49,512 INFO Finished job - get_prod_and_div (f82f13df-44cc-4bce-8712-ab5a1408c551)\n2025-05-24 05:39:49,513 INFO Starting job - get_sum (bb1c3b6d-986a-4e5d-b2f4-6611940ba4c6)\n2025-05-24 05:39:49,514 INFO Finished job - get_sum (bb1c3b6d-986a-4e5d-b2f4-6611940ba4c6)\n2025-05-24 05:39:49,515 INFO Starting job - get_square (5c60ac07-39fd-4511-93d8-3bd65c6bd7ca)\n2025-05-24 05:39:49,516 INFO Finished job - get_square (5c60ac07-39fd-4511-93d8-3bd65c6bd7ca)\n2025-05-24 05:39:49,516 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 14, + "output_type": "execute_result", + "data": { + "text/plain": "{'f82f13df-44cc-4bce-8712-ab5a1408c551': {1: Response(output={'prod': 2, 'div': 0.5}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))},\n 'bb1c3b6d-986a-4e5d-b2f4-6611940ba4c6': {1: Response(output=2.5, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))},\n '5c60ac07-39fd-4511-93d8-3bd65c6bd7ca': {1: Response(output=6.25, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/arithmetic'))}}" + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": "## pyiron\n\nLoading the JSON into `pyiron_base` produces a list of delayed jobs; `.draw()` visualizes the dependency graph and `.pull()` triggers execution of the whole chain.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=\"workflow.json\")\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_25906340bd0c28c44fd73d69e7a3d8bc\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x749611736a50>\n\n\n\nx_1a7fff02f6473a13e5e8742988186611\n\nx=<pyiron_base.project.delayed.DelayedObject object at 0x7496117367e0>\n\n\n\nx_1a7fff02f6473a13e5e8742988186611->create_function_job_25906340bd0c28c44fd73d69e7a3d8bc\n\n\n\n\n\nx_e4655695917c433de56d1c64232473f9\n\nx=<pyiron_base.project.delayed.DelayedObject object at 0x74961213ea50>\n\n\n\nx_e4655695917c433de56d1c64232473f9->x_1a7fff02f6473a13e5e8742988186611\n\n\n\n\n\nx_1d847da32ecaabf6731c38f798c3d4ce\n\nx=1\n\n\n\nx_1d847da32ecaabf6731c38f798c3d4ce->x_e4655695917c433de56d1c64232473f9\n\n\n\n\n\ny_3b83397feef07a74d9a046a1b7f57749\n\ny=<pyiron_base.project.delayed.DelayedObject object at 0x74961eca0a10>\n\n\n\nx_1d847da32ecaabf6731c38f798c3d4ce->y_3b83397feef07a74d9a046a1b7f57749\n\n\n\n\n\ny_3b83397feef07a74d9a046a1b7f57749->x_1a7fff02f6473a13e5e8742988186611\n\n\n\n\n\ny_a9ec4f5f33f0d64e74ed5d9900bceac6\n\ny=2\n\n\n\ny_a9ec4f5f33f0d64e74ed5d9900bceac6->x_e4655695917c433de56d1c64232473f9\n\n\n\n\n\ny_a9ec4f5f33f0d64e74ed5d9900bceac6->y_3b83397feef07a74d9a046a1b7f57749\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 16 + }, + { + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_prod_and_div_00cf2c787390eacfbc4a51e9a0c38ec7 was saved and received the ID: 1\nThe job get_sum_4b5b9d16b259a13b6a32798ce2779af8 was saved and received the ID: 2\nThe job get_square_9cc2f0545498916d7720c59c1120a66d was saved and received the ID: 3\n" + }, + { + "execution_count": 17, + "output_type": "execute_result", + "data": { + "text/plain": "6.25" + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## pyiron_workflow\n\nFinally, the workflow is loaded into a `pyiron_workflow` `Workflow` object, drawn with `.draw()` and executed with `.run()`." + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=\"workflow.json\")" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()" + }, + { + "cell_type": "markdown", + "source": "## Python\n\nAs a baseline, `python_workflow_definition.purepython.load_workflow_json` interprets the JSON directly in plain Python, with no workflow engine involved: it evaluates each function node in dependency order and returns the final result.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.purepython import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 18 + }, + { + "cell_type": "code", + "source": "load_workflow_json(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 19, + "output_type": "execute_result", + "data": { + "text/plain": "6.25" + }, + "metadata": {} + } + ], + "execution_count": 19 + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/nfdi/aiida.ipynb b/_sources/example_workflows/nfdi/aiida.ipynb new file mode 100644 index 00000000..ef72f1bf --- /dev/null +++ b/_sources/example_workflows/nfdi/aiida.ipynb @@ -0,0 +1,416 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "id": "106ded66-d202-46ac-82b0-2755ca309bdd", + "cell_type": "markdown", + "source": "# Aiida\n\nhttps://github.com/BAMresearch/NFDI4IngScientificWorkflowRequirements\n\nThis notebook defines the NFDI4Ing file-based workflow benchmark with [`aiida-workgraph`](https://github.com/aiidateam/aiida-workgraph) and then loads the resulting `workflow.json` into `jobflow`, `pyiron_base` and `pyiron_workflow` to show that the same JSON file can be executed by different engines. Every stage of the workflow calls an external command-line tool (`gmsh`, `meshio`, a FEniCS-based Poisson solver, ParaView's `pvbatch`, `tectonic`) in its own conda environment and passes file paths between stages rather than in-memory Python objects — see [`workflow.py`](workflow.py) for the six pipeline functions.", + "metadata": {} + }, + { + "id": "11e09b78-cb72-465f-9c8b-5b77f0aa729c", + "cell_type": "markdown", + "source": "## Define workflow with aiida\n\n`aiida-workgraph` represents a workflow as a `WorkGraph` of `Task`s. `load_profile()` connects to the local AiiDA profile/database that stores provenance and results for every task. `generate_mesh`, `plot_over_line`, `substitute_macros` and `compile_paper` each return a single value and can be added to the graph unchanged, but `convert_to_xdmf` and `poisson` return a `dict`, so they are wrapped with `task(outputs=[...])` to expose each dictionary key as its own output socket that later tasks can connect to.", + "metadata": {} + }, + { + "id": "17173d54-dc76-4052-ab39-d44771ac903d", + "cell_type": "code", + "source": "import os", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "89c02460-b543-442c-a27e-f1757dc2262e", + "cell_type": "code", + "source": "from python_workflow_definition.aiida import write_workflow_json\n\nfrom aiida_workgraph import WorkGraph, task\nfrom aiida import orm, load_profile\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 2, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 2 + }, + { + "id": "6dac225a1ce86b25", + "cell_type": "code", + "source": "from workflow import (\n generate_mesh,\n convert_to_xdmf as _convert_to_xdmf,\n poisson as _poisson,\n plot_over_line,\n substitute_macros,\n compile_paper,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "c47205d289499756", + "cell_type": "code", + "source": "convert_to_xdmf = task(outputs=[\"xdmf_file\", \"h5_file\"])(_convert_to_xdmf)\npoisson = task(outputs=[\"numdofs\", \"pvd_file\", \"vtu_file\"])(_poisson)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "markdown", + "id": "e16e7b61", + "source": "AiiDA tracks every input as a typed, storable node, so the shared `domain_size` and `source_directory` values are wrapped as `orm.Float` and `orm.Str` before being connected to any task.", + "metadata": {} + }, + { + "id": "37c9d988-1755-446c-9f7b-c32f99e280d4", + "cell_type": "code", + "source": "source_directory = orm.Str(os.path.abspath(os.path.join(os.curdir, \"source\")))", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "8d911f98-3b80-457f-a0f4-3cb37ebf1691", + "cell_type": "code", + "source": "domain_size = orm.Float(2.0)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "id": "1e7e14ba-c4a7-485f-9bd8-44625830cca0", + "cell_type": "code", + "source": "wg = WorkGraph(\"wg-nfdi\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "id": "2e764162", + "source": "Each `wg.add_task` call below adds one stage of the pipeline: mesh generation, XDMF conversion, the Poisson solve, line-plot postprocessing, LaTeX macro substitution and paper compilation. Outputs are wired to the next task's inputs with `.outputs.`; since the underlying functions communicate through files on disk, these connections are really file paths handed from one task to the next, not shared Python objects.", + "metadata": {} + }, + { + "id": "71d411b6-cbec-489e-99e3-ba71680bcb5b", + "cell_type": "code", + "source": "gmsh_output_file = wg.add_task(\n generate_mesh,\n domain_size=domain_size,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "id": "1d0d9804-f250-48b3-a5d0-a546d520f79b", + "cell_type": "code", + "source": "meshio_output_dict = wg.add_task(\n convert_to_xdmf,\n gmsh_output_file=gmsh_output_file.outputs.result,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "id": "7b69bcff-e2b1-4d4a-b62c-6a1c86eeb590", + "cell_type": "code", + "source": "poisson_dict = wg.add_task(\n poisson,\n meshio_output_xdmf=meshio_output_dict.outputs.xdmf_file, \n meshio_output_h5=meshio_output_dict.outputs.h5_file,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "id": "3c4a29b0-eb1e-490a-8be0-e03cfff15e0a", + "cell_type": "code", + "source": "pvbatch_output_file = wg.add_task(\n plot_over_line,\n poisson_output_pvd_file=poisson_dict.outputs.pvd_file, \n poisson_output_vtu_file=poisson_dict.outputs.vtu_file,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "id": "a0a4c233-322d-4723-9627-62ca2487bfa9", + "cell_type": "code", + "source": "macros_tex_file = wg.add_task(\n substitute_macros,\n pvbatch_output_file=pvbatch_output_file.outputs.result, \n ndofs=poisson_dict.outputs.numdofs, \n domain_size=domain_size,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "id": "c281408f-e63d-4380-a7e6-c595d49fbb8f", + "cell_type": "code", + "source": "paper_output = wg.add_task(\n compile_paper,\n macros_tex=macros_tex_file.outputs.result, \n plot_file=pvbatch_output_file.outputs.result,\n source_directory=source_directory,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "id": "a384d70a-8ef5-4fdd-880c-56ac7eaf87b9", + "cell_type": "code", + "source": "wg", + "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-nfdi…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "17520c019e5c413fb7a119ecc997c3ea" + } + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "cell_type": "markdown", + "id": "a7bd7df7", + "source": "The `wg` widget above renders the assembled task graph. Once satisfied, `write_workflow_json` serializes it into the PWD `workflow.json` format — one `function` node per task, `input` nodes for `domain_size`/`source_directory`, and edges recording which task output feeds which task's input port, as shown by the `cat` output below.", + "metadata": {} + }, + { + "id": "fb23ad9c-76fd-4c0b-b546-e305d6c49796", + "cell_type": "code", + "source": "workflow_json_filename = \"aiida_nfdi.json\"", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "id": "4139547a-9717-4708-b1a5-8202a0382d77", + "cell_type": "code", + "source": "write_workflow_json(wg=wg, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 16 + }, + { + "id": "490df6a3-e402-4620-acf2-dbcfa0c5d537", + "cell_type": "code", + "source": "!cat {workflow_json_filename}", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "{\n \"version\": \"0.1.0\",\n \"nodes\": [\n {\n \"id\": 0,\n \"type\": \"function\",\n \"value\": \"workflow.generate_mesh\"\n },\n {\n \"id\": 1,\n \"type\": \"function\",\n \"value\": \"workflow.convert_to_xdmf\"\n },\n {\n \"id\": 2,\n \"type\": \"function\",\n \"value\": \"workflow.poisson\"\n },\n {\n \"id\": 3,\n \"type\": \"function\",\n \"value\": \"workflow.plot_over_line\"\n },\n {\n \"id\": 4,\n \"type\": \"function\",\n \"value\": \"workflow.substitute_macros\"\n },\n {\n \"id\": 5,\n \"type\": \"function\",\n \"value\": \"workflow.compile_paper\"\n },\n {\n \"id\": 6,\n \"type\": \"input\",\n \"name\": \"domain_size\",\n \"value\": 2.0\n },\n {\n \"id\": 7,\n \"type\": \"input\",\n \"name\": \"source_directory\",\n \"value\": \"/home/jovyan/example_workflows/nfdi/source\"\n },\n {\n \"id\": 8,\n \"type\": \"output\",\n \"name\": \"result\"\n }\n ],\n \"edges\": [\n {\n \"target\": 1,\n \"targetPort\": \"gmsh_output_file\",\n \"source\": 0,\n \"sourcePort\": null\n },\n {\n \"target\": 2,\n \"targetPort\": \"meshio_output_xdmf\",\n \"source\": 1,\n \"sourcePort\": \"xdmf_file\"\n },\n {\n \"target\": 2,\n \"targetPort\": \"meshio_output_h5\",\n \"source\": 1,\n \"sourcePort\": \"h5_file\"\n },\n {\n \"target\": 3,\n \"targetPort\": \"poisson_output_pvd_file\",\n \"source\": 2,\n \"sourcePort\": \"pvd_file\"\n },\n {\n \"target\": 3,\n \"targetPort\": \"poisson_output_vtu_file\",\n \"source\": 2,\n \"sourcePort\": \"vtu_file\"\n },\n {\n \"target\": 4,\n \"targetPort\": \"pvbatch_output_file\",\n \"source\": 3,\n \"sourcePort\": null\n },\n {\n \"target\": 4,\n \"targetPort\": \"ndofs\",\n \"source\": 2,\n \"sourcePort\": \"numdofs\"\n },\n {\n \"target\": 5,\n \"targetPort\": \"macros_tex\",\n \"source\": 4,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"plot_file\",\n \"source\": 3,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"domain_size\",\n \"source\": 6,\n \"sourcePort\": null\n },\n {\n \"target\": 0,\n \"targetPort\": \"source_directory\",\n \"source\": 7,\n \"sourcePort\": null\n },\n {\n \"target\": 2,\n \"targetPort\": \"source_directory\",\n \"source\": 7,\n \"sourcePort\": null\n },\n {\n \"target\": 3,\n \"targetPort\": \"source_directory\",\n \"source\": 7,\n \"sourcePort\": null\n },\n {\n \"target\": 4,\n \"targetPort\": \"domain_size\",\n \"source\": 6,\n \"sourcePort\": null\n },\n {\n \"target\": 4,\n \"targetPort\": \"source_directory\",\n \"source\": 7,\n \"sourcePort\": null\n },\n {\n \"target\": 5,\n \"targetPort\": \"source_directory\",\n \"source\": 7,\n \"sourcePort\": null\n },\n {\n \"target\": 8,\n \"targetPort\": null,\n \"source\": 5,\n \"sourcePort\": null\n }\n ]\n}" + } + ], + "execution_count": 17 + }, + { + "id": "11a829e2-face-469f-b343-2c95763b1f13", + "cell_type": "markdown", + "source": "## Load Workflow with jobflow\n\n`python_workflow_definition.jobflow.load_workflow_json` reconstructs the same six-stage pipeline as a jobflow `Flow`, purely from `aiida_nfdi.json` — no reference to the `aiida-workgraph` objects defined above. `run_locally` then executes the jobs in dependency order, re-running `gmsh`, `meshio`, the Poisson solver, `pvbatch` and `tectonic` exactly as before.", + "metadata": {} + }, + { + "id": "4f3acabe-55df-479a-af4d-a23a80c4660d", + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 18 + }, + { + "id": "b6ba9444-a2c8-451b-b74c-19b0f69ba369", + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 19 + }, + { + "id": "c3528d55-6bf7-47ed-a110-65c47446ba92", + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 20 + }, + { + "id": "5ef48778-4209-425f-8c6b-85a4cd2f92ec", + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 05:41:02,340 INFO Started executing jobs locally\n2025-05-24 05:41:02,615 INFO Starting job - generate_mesh (1c3eab15-7639-4f4e-9ca7-7523ba640ca5)\n2025-05-24 05:41:03,800 INFO Finished job - generate_mesh (1c3eab15-7639-4f4e-9ca7-7523ba640ca5)\n2025-05-24 05:41:03,801 INFO Starting job - convert_to_xdmf (07acbed1-2abb-4141-896d-170b58aba7c2)\n2025-05-24 05:41:05,099 INFO Finished job - convert_to_xdmf (07acbed1-2abb-4141-896d-170b58aba7c2)\n2025-05-24 05:41:05,100 INFO Starting job - poisson (b212b743-f36d-4f7b-a64a-79060469f34b)\n2025-05-24 05:41:12,945 INFO Finished job - poisson (b212b743-f36d-4f7b-a64a-79060469f34b)\n2025-05-24 05:41:12,946 INFO Starting job - plot_over_line (af5a3a54-b7fa-45f8-a70f-7f95d23c32c4)\n2025-05-24 05:41:14,360 INFO Finished job - plot_over_line (af5a3a54-b7fa-45f8-a70f-7f95d23c32c4)\n2025-05-24 05:41:14,360 INFO Starting job - substitute_macros (ec55c04a-a5cb-4d8f-9981-961f7297532e)\n2025-05-24 05:41:15,171 INFO Finished job - substitute_macros (ec55c04a-a5cb-4d8f-9981-961f7297532e)\n2025-05-24 05:41:15,172 INFO Starting job - compile_paper (629539b7-2541-4ba7-9546-b7adb0cc312e)\n2025-05-24 05:42:14,698 INFO Finished job - compile_paper (629539b7-2541-4ba7-9546-b7adb0cc312e)\n2025-05-24 05:42:14,699 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 21, + "output_type": "execute_result", + "data": { + "text/plain": "{'1c3eab15-7639-4f4e-9ca7-7523ba640ca5': {1: Response(output='/home/jovyan/example_workflows/nfdi/preprocessing/square.msh', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '07acbed1-2abb-4141-896d-170b58aba7c2': {1: Response(output={'xdmf_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.xdmf', 'h5_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.h5'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'b212b743-f36d-4f7b-a64a-79060469f34b': {1: Response(output={'numdofs': 357, 'pvd_file': '/home/jovyan/example_workflows/nfdi/processing/poisson.pvd', 'vtu_file': '/home/jovyan/example_workflows/nfdi/processing/poisson000000.vtu'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'af5a3a54-b7fa-45f8-a70f-7f95d23c32c4': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/plotoverline.csv', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'ec55c04a-a5cb-4d8f-9981-961f7297532e': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/macros.tex', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '629539b7-2541-4ba7-9546-b7adb0cc312e': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))}}" + }, + "metadata": {} + } + ], + "execution_count": 21 + }, + { + "id": "397b16a2-e1ec-4eec-8562-1c84f585c347", + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_base\n\n`python_workflow_definition.pyiron_base.load_workflow_json` turns the JSON graph into a list of delayed pyiron jobs; `.draw()` visualizes their dependencies and `.pull()` triggers execution, running each job in turn and returning the final `paper.pdf` path.", + "metadata": {} + }, + { + "id": "be4d5d93-e9f6-4072-a6be-0ee5dc93590f", + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 22 + }, + { + "id": "4452a648-d4c3-4f5f-8678-ffb54bef17dc", + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_724cfd00ffeb70f8b463a938195e0447\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38aa0>\n\n\n\nmacros_tex_b52804e5fa845b3657fa99b738e02cf7\n\nmacros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38830>\n\n\n\nmacros_tex_b52804e5fa845b3657fa99b738e02cf7->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\npvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\npvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38500>\n\n\n\npvbatch_output_file_554a54a50a86b23416c0daf6ab0938df->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\npoisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07a10>\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nplot_file_554a54a50a86b23416c0daf6ab0938df\n\nplot_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38500>\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nplot_file_554a54a50a86b23416c0daf6ab0938df->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1\n\nmeshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07da0>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\npoisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf381a0>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nndofs_e826761b60042b070e0c0a24b472ee26\n\nndofs=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf38590>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nndofs_e826761b60042b070e0c0a24b472ee26->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\ngmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07b00>\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe\n\nmeshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x74ee3cf07d70>\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20\n\ndomain_size=2.0\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696\n\nsource_directory=/home/jovyan/example_workflows/nfdi/source\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 23 + }, + { + "id": "1c2760b6-96b4-4f44-ac49-a229d4a0cf67", + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job generate_mesh_47725c16637f799ac042e47468005db3 was saved and received the ID: 1\nThe job convert_to_xdmf_d6a46eb9a4ec352aa996e783ec3c785f was saved and received the ID: 2\nThe job poisson_3c147fc86db87cf0c0f94bda333f8cd8 was saved and received the ID: 3\nThe job plot_over_line_ef50933291910dadcc8311924971e127 was saved and received the ID: 4\nThe job substitute_macros_63766eafd6b1980c7832dd8c9a97c96e was saved and received the ID: 5\nThe job compile_paper_128d1d58374953c00e95b8de62cbb10b was saved and received the ID: 6\n" + }, + { + "execution_count": 24, + "output_type": "execute_result", + "data": { + "text/plain": "'/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf'" + }, + "metadata": {} + } + ], + "execution_count": 24 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the same JSON is loaded into a `pyiron_workflow` `Workflow` object. `.draw()` shows the node graph and `.run()` executes it end to end, again shelling out to each external tool in turn.", + "id": "afaf2bc0b3a491ca" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json", + "id": "6172b410eb776fc4" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=workflow_json_filename)", + "id": "668fe64b18b4d604" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))", + "id": "8c4fd72394841ffa" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()", + "id": "c1427e3ce0716f64" + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/nfdi/cwl.ipynb b/_sources/example_workflows/nfdi/cwl.ipynb new file mode 100644 index 00000000..5fc2d266 --- /dev/null +++ b/_sources/example_workflows/nfdi/cwl.ipynb @@ -0,0 +1,171 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "id": "e88c3a45", + "source": "# CWL\n\nThis notebook executes the NFDI4Ing file-based workflow benchmark's `workflow.json` with the [Common Workflow Language](https://www.commonwl.org/) via [`cwltool`](https://github.com/common-workflow-language/cwltool), instead of generating the JSON from a Python workflow engine like the other notebooks in this directory. `python_workflow_definition.cwl.write_workflow` translates the PWD graph into a CWL `workflow.cwl` plus one `CommandLineTool` wrapper per pipeline function; CWL then passes data between steps as pickled files on disk rather than in-memory Python objects, which matches this benchmark's file-based nature.", + "metadata": {} + }, + { + "id": "377fef56-484d-491c-b19e-1be6931e44eb", + "cell_type": "code", + "source": "import pickle", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "2033dda1-dc7a-4f96-b1bd-90505b0ec555", + "cell_type": "code", + "source": "import json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "id": "60cb8ace-acb0-47b4-b0bc-bb54d00d19dd", + "cell_type": "code", + "source": "import os", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "92e3921b-2bb8-4333-8cfe-4bd27f785d24", + "cell_type": "code", + "source": "from python_workflow_definition.cwl import write_workflow", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "id": "b0cf73b9-ea21-4437-8d2a-c51b65bbfa86", + "cell_type": "markdown", + "source": "## Overwrite source directory with absolute path\n\n`workflow.json` stores `source_directory` as the relative path `\"source\"`. Because `cwltool` stages each step's inputs into its own temporary working directory, a relative path would no longer resolve once execution starts, so it is rewritten to an absolute path before export.", + "metadata": {} + }, + { + "id": "bca61d32-89dd-4df7-92da-fee1a157df5a", + "cell_type": "code", + "source": "with open(\"workflow.json\") as f:\n content = json.load(f)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "8392fa04-4fb3-496e-9387-0106c872fb98", + "cell_type": "code", + "source": "node_lst = []\nfor n in content[\"nodes\"]:\n if 'name' in n and n['name'] == 'source_directory':\n n[\"value\"] = os.path.abspath(n[\"value\"])\n node_lst.append(n)\n\ncontent[\"nodes\"] = node_lst", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "id": "e53c7769-28bb-4d8e-b3a4-02298818a001", + "cell_type": "code", + "source": "with open(\"workflow.json\", \"w\") as f:\n json.dump(content, f)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "id": "a9540ba7-f15a-4d04-86aa-0cf2ad4ac185", + "cell_type": "markdown", + "source": "## Execute workflow\n\n`write_workflow` reads `workflow.json` and writes out `workflow.cwl` (the CWL `Workflow` definition), one `_.cwl` `CommandLineTool` per pipeline step, and `workflow.yml` with the input values pickled to disk. `cwltool` then runs the six steps in dependency order, invoking `gmsh`, `meshio`, the Poisson solver, `pvbatch` and `tectonic` in turn, and writes the workflow's single output — the path to the compiled `paper.pdf` — to `result.pickle`.", + "metadata": {} + }, + { + "id": "5303c059-8ae4-4557-858e-b4bd64eac711", + "cell_type": "code", + "source": "write_workflow(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "id": "df302bd2-e9b6-4595-979c-67c46414d986", + "cell_type": "code", + "source": "! cwltool --preserve-environment=CONDA_EXE workflow.cwl workflow.yml", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "/srv/conda/envs/notebook/bin/cwltool:11: DeprecationWarning: Nesting argument groups is deprecated.\n sys.exit(run())\n\u001b[1;30mINFO\u001b[0m /srv/conda/envs/notebook/bin/cwltool 3.1.20250110105449\n\u001b[1;30mINFO\u001b[0m Resolved 'workflow.cwl' to 'file:///home/jovyan/example_workflows/nfdi/workflow.cwl'\n\u001b[1;30mINFO\u001b[0m [workflow ] start\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step generate_mesh_0\n\u001b[1;30mINFO\u001b[0m [step generate_mesh_0] start\n\u001b[1;30mINFO\u001b[0m [job generate_mesh_0] /tmp/xjzxjjxg$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/lint8hha/stgaa9fa1cf-dae6-4402-aa25-3da9289e3937/workflow.py \\\n --function=workflow.generate_mesh \\\n --arg_domain_size=/tmp/lint8hha/stg94834a09-0454-4ad4-bc93-b8f3a1dc72f4/domain_size.pickle \\\n --arg_source_directory=/tmp/lint8hha/stg03fa6508-a0ea-4379-97b1-e3815dfe7395/source_directory.pickle\n\u001b[1;30mINFO\u001b[0m [job generate_mesh_0] Max memory used: 60MiB\n\u001b[1;30mINFO\u001b[0m [job generate_mesh_0] completed success\n\u001b[1;30mINFO\u001b[0m [step generate_mesh_0] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step convert_to_xdmf_1\n\u001b[1;30mINFO\u001b[0m [step convert_to_xdmf_1] start\n\u001b[1;30mINFO\u001b[0m [job convert_to_xdmf_1] /tmp/q47niux0$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/pd0inpeh/stg928009b1-efc5-45d7-9746-e1af8d96f0c5/workflow.py \\\n --function=workflow.convert_to_xdmf \\\n --arg_gmsh_output_file=/tmp/pd0inpeh/stg03750262-f7c4-4bb9-b558-0b7ea0a54cf3/result.pickle\n\u001b[1;30mINFO\u001b[0m [job convert_to_xdmf_1] Max memory used: 69MiB\n\u001b[1;30mINFO\u001b[0m [job convert_to_xdmf_1] completed success\n\u001b[1;30mINFO\u001b[0m [step convert_to_xdmf_1] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step poisson_2\n\u001b[1;30mINFO\u001b[0m [step poisson_2] start\n\u001b[1;30mINFO\u001b[0m [job poisson_2] /tmp/e045_wvq$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/rsa0i3o4/stgfd3d067f-0d0e-46b6-8b1c-e63a936cca99/workflow.py \\\n --function=workflow.poisson \\\n --arg_meshio_output_xdmf=/tmp/rsa0i3o4/stgebd53ba4-dbbc-4769-b359-f1f95611d02d/xdmf_file.pickle \\\n --arg_meshio_output_h5=/tmp/rsa0i3o4/stga4bcfd98-5bf0-4da3-b1e6-a4d55a00cc30/h5_file.pickle \\\n --arg_source_directory=/tmp/rsa0i3o4/stg003e0d81-81e0-4138-9e97-103a910c925e/source_directory.pickle\n\u001b[1;30mINFO\u001b[0m [job poisson_2] Max memory used: 81MiB\n\u001b[1;30mINFO\u001b[0m [job poisson_2] completed success\n\u001b[1;30mINFO\u001b[0m [step poisson_2] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step plot_over_line_3\n\u001b[1;30mINFO\u001b[0m [step plot_over_line_3] start\n\u001b[1;30mINFO\u001b[0m [job plot_over_line_3] /tmp/0tov09ih$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/z9a5oiuc/stgcde66eb7-274f-4ae3-833b-c8d99fe3bbb1/workflow.py \\\n --function=workflow.plot_over_line \\\n --arg_poisson_output_vtu_file=/tmp/z9a5oiuc/stg144f313e-e286-4800-a3d2-86a6cae36a98/vtu_file.pickle \\\n --arg_source_directory=/tmp/z9a5oiuc/stg224c0c40-7cb8-4f1c-921c-013809fb5cbf/source_directory.pickle \\\n --arg_poisson_output_pvd_file=/tmp/z9a5oiuc/stgc4c75ca6-aab0-40be-bfbd-f432d3523d2b/pvd_file.pickle\n\u001b[1;30mINFO\u001b[0m [job plot_over_line_3] Max memory used: 68MiB\n\u001b[1;30mINFO\u001b[0m [job plot_over_line_3] completed success\n\u001b[1;30mINFO\u001b[0m [step plot_over_line_3] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step substitute_macros_4\n\u001b[1;30mINFO\u001b[0m [step substitute_macros_4] start\n\u001b[1;30mINFO\u001b[0m [job substitute_macros_4] /tmp/08mfe8f0$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/5valbs4a/stg15353150-ebc3-49de-93a8-564a25f33270/workflow.py \\\n --function=workflow.substitute_macros \\\n --arg_domain_size=/tmp/5valbs4a/stg0734ab21-1efd-480b-ba2b-cea9ed24012e/domain_size.pickle \\\n --arg_source_directory=/tmp/5valbs4a/stg0c79cde6-159f-4b82-bdb9-aabef8678f9f/source_directory.pickle \\\n --arg_ndofs=/tmp/5valbs4a/stg770f9cb7-d2c3-4ce5-bc00-7a9cdb11d64d/numdofs.pickle \\\n --arg_pvbatch_output_file=/tmp/5valbs4a/stgdd978452-6c84-4308-abf6-7ae2609fc91d/result.pickle\n\u001b[1;30mINFO\u001b[0m [job substitute_macros_4] Max memory used: 60MiB\n\u001b[1;30mINFO\u001b[0m [job substitute_macros_4] completed success\n\u001b[1;30mINFO\u001b[0m [step substitute_macros_4] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step compile_paper_5\n\u001b[1;30mINFO\u001b[0m [step compile_paper_5] start\n\u001b[1;30mINFO\u001b[0m [job compile_paper_5] /tmp/hjjeng16$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/3bq2mxdl/stg34a5d902-97c3-43f1-95eb-5e14d0c68386/workflow.py \\\n --function=workflow.compile_paper \\\n --arg_macros_tex=/tmp/3bq2mxdl/stg184e0acf-5138-4b37-97f0-ba406ed71433/result.pickle \\\n --arg_plot_file=/tmp/3bq2mxdl/stg2360c6e9-26ec-43f5-99a2-26c05668b2fa/result.pickle \\\n --arg_source_directory=/tmp/3bq2mxdl/stg7194b36e-38db-4ef7-af5d-368e9575f15f/source_directory.pickle\n\u001b[1;30mINFO\u001b[0m [job compile_paper_5] Max memory used: 265MiB\n\u001b[1;30mINFO\u001b[0m [job compile_paper_5] completed success\n\u001b[1;30mINFO\u001b[0m [step compile_paper_5] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] completed success\n{\n \"result_file\": {\n \"location\": \"file:///home/jovyan/example_workflows/nfdi/result.pickle\",\n \"basename\": \"result.pickle\",\n \"class\": \"File\",\n \"checksum\": \"sha1$a23617d3f4b4e6970b7f4fb9eb4d2148f9888e58\",\n \"size\": 53,\n \"path\": \"/home/jovyan/example_workflows/nfdi/result.pickle\"\n }\n}\u001b[1;30mINFO\u001b[0m Final process status is success\n" + } + ], + "execution_count": 9 + }, + { + "cell_type": "markdown", + "id": "c55f089b", + "source": "The result is unpickled below to confirm it is the expected `paper.pdf` path.", + "metadata": {} + }, + { + "id": "2942dbba-ea0a-4d20-be5c-ed9992d09ff8", + "cell_type": "code", + "source": "with open(\"result.pickle\", \"rb\") as f:\n print(pickle.load(f))", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "/tmp/hjjeng16/postprocessing/paper.pdf\n" + } + ], + "execution_count": 10 + }, + { + "id": "60e909ee-d0d0-4bd1-81c8-dd5274ae5834", + "cell_type": "code", + "source": "", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": null + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/nfdi/executorlib.ipynb b/_sources/example_workflows/nfdi/executorlib.ipynb new file mode 100644 index 00000000..8a2e0bac --- /dev/null +++ b/_sources/example_workflows/nfdi/executorlib.ipynb @@ -0,0 +1,2121 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "106ded66-d202-46ac-82b0-2755ca309bdd", + "metadata": {}, + "source": "# executorlib\n\nhttps://github.com/BAMresearch/NFDI4IngScientificWorkflowRequirements\n\nThis notebook defines the NFDI4Ing file-based workflow benchmark with [`executorlib`](https://github.com/pyiron/executorlib) and then loads the resulting `workflow.json` into `aiida`, `jobflow`, `pyiron_base` and `pyiron_workflow`. Every stage of the pipeline shells out to an external command-line tool (`gmsh`, `meshio`, a FEniCS-based Poisson solver, ParaView's `pvbatch`, `tectonic`) in its own conda environment and passes file paths between stages rather than in-memory Python objects — see [`workflow.py`](workflow.py)." + }, + { + "cell_type": "markdown", + "id": "91dd48ea-aa7e-4937-a68e-59fc5017eb1e", + "metadata": {}, + "source": "## Define workflow with executorlib\n\n`executorlib` provides a `concurrent.futures`-compatible `SingleNodeExecutor`: each `exe.submit(func, ...)` call schedules a function call and immediately returns a `Future`. Since `convert_to_xdmf` and `poisson` return a `dict`, `get_item_from_future` is used to pick a single key (e.g. `\"xdmf_file\"`) out of a future's eventual result before passing it on as an input to the next stage." + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2c9622f5-ab7e-460e-b8e4-8d21413eda77", + "metadata": {}, + "outputs": [], + "source": [ + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d265bb5aa6af79d6", + "metadata": {}, + "outputs": [], + "source": [ + "from workflow import generate_mesh, convert_to_xdmf, poisson, plot_over_line, substitute_macros, compile_paper " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2dced28725813fc1", + "metadata": {}, + "outputs": [], + "source": [ + "from executorlib import SingleNodeExecutor, get_item_from_future" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8d911f98-3b80-457f-a0f4-3cb37ebf1691", + "metadata": {}, + "outputs": [], + "source": [ + "domain_size = 2.0" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c6ea980b-6761-4191-8407-7b1f78a4c3ea", + "metadata": {}, + "outputs": [], + "source": [ + "source_directory = os.path.abspath(os.path.join(os.curdir, \"source\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ef1a63b7-2c04-43ac-9f33-333c5f7d93cd", + "metadata": {}, + "outputs": [], + "source": [ + "workflow_json_filename = \"executorlib_nfdi.json\"" + ] + }, + { + "cell_type": "markdown", + "id": "57d670cb", + "source": "Passing `export_workflow_filename` to `SingleNodeExecutor` makes it record every `submit` call as a side effect and write them out as a PWD `workflow.json` once the `with` block exits — no separate `write_workflow_json` call is needed. The six `submit` calls below mirror the six pipeline stages: mesh generation, XDMF conversion, the Poisson solve, line-plot postprocessing, LaTeX macro substitution and paper compilation.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "71d411b6-cbec-489e-99e3-ba71680bcb5b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "with SingleNodeExecutor(export_workflow_filename=workflow_json_filename) as exe:\n", + " gmsh_output_file = exe.submit(\n", + " generate_mesh,\n", + " domain_size=domain_size,\n", + " source_directory=source_directory,\n", + " )\n", + " meshio_output_dict = exe.submit(\n", + " convert_to_xdmf,\n", + " gmsh_output_file=gmsh_output_file,\n", + " )\n", + " poisson_dict = exe.submit(\n", + " poisson,\n", + " meshio_output_xdmf=get_item_from_future(meshio_output_dict, key=\"xdmf_file\"), \n", + " meshio_output_h5=get_item_from_future(meshio_output_dict, key=\"h5_file\"),\n", + " source_directory=source_directory,\n", + " )\n", + " pvbatch_output_file = exe.submit(\n", + " plot_over_line,\n", + " poisson_output_pvd_file=get_item_from_future(poisson_dict, key=\"pvd_file\"), \n", + " poisson_output_vtu_file=get_item_from_future(poisson_dict, key=\"vtu_file\"),\n", + " source_directory=source_directory,\n", + " )\n", + " macros_tex_file = exe.submit(\n", + " substitute_macros,\n", + " pvbatch_output_file=pvbatch_output_file, \n", + " ndofs=get_item_from_future(poisson_dict, key=\"numdofs\"), \n", + " domain_size=domain_size,\n", + " source_directory=source_directory,\n", + " )\n", + " paper_output = exe.submit(\n", + " compile_paper,\n", + " macros_tex=macros_tex_file, \n", + " plot_file=pvbatch_output_file,\n", + " source_directory=source_directory,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0a42a34e-ebe2-478c-bea6-e6c5c8506883", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.generate_mesh\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.convert_to_xdmf\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.poisson\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.plot_over_line\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.substitute_macros\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.compile_paper\"\n", + " },\n", + " {\n", + " \"id\": 6,\n", + " \"type\": \"input\",\n", + " \"value\": 2.0,\n", + " \"name\": \"domain_size\"\n", + " },\n", + " {\n", + " \"id\": 7,\n", + " \"type\": \"input\",\n", + " \"value\": \"/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/source\",\n", + " \"name\": \"source_directory\"\n", + " },\n", + " {\n", + " \"id\": 8,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"domain_size\",\n", + " \"source\": 6,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"source_directory\",\n", + " \"source\": 7,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"gmsh_output_file\",\n", + " \"source\": 0,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"meshio_output_xdmf\",\n", + " \"source\": 1,\n", + " \"sourcePort\": \"xdmf_file\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"meshio_output_h5\",\n", + " \"source\": 1,\n", + " \"sourcePort\": \"h5_file\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"source_directory\",\n", + " \"source\": 7,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"poisson_output_pvd_file\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"pvd_file\"\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"poisson_output_vtu_file\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"vtu_file\"\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"source_directory\",\n", + " \"source\": 7,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"pvbatch_output_file\",\n", + " \"source\": 3,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"ndofs\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"numdofs\"\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"domain_size\",\n", + " \"source\": 6,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"source_directory\",\n", + " \"source\": 7,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"macros_tex\",\n", + " \"source\": 4,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"plot_file\",\n", + " \"source\": 3,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"source_directory\",\n", + " \"source\": 7,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": null,\n", + " \"source\": 5,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "id": "d789971e-8f41-45fa-832a-11fd72dea96e", + "metadata": {}, + "source": "## Load Workflow with aiida\n\nThe JSON produced by `executorlib` is loaded into an `aiida-workgraph` `WorkGraph` via `load_workflow_json`, after connecting to a local AiiDA profile with `load_profile()`. `wg.run()` then re-executes the whole pipeline under `aiida`." + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a6e85e89-5d7a-40eb-809c-ac44974e3fd7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Profile" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from aiida import load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3de84fb7-b01b-4541-868a-92e881eb6e77", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b33f5528-10cd-47c8-8723-622902978859", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d1895b0b32c4451c8847cc76ded8f82e", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wg = load_workflow_json(file_name=workflow_json_filename)\n", + "wg" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "15282ca1-d339-40e7-ad68-8a7613ed08da", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "01/16/2026 08:09:53 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_mesh\n", + "01/16/2026 08:09:56 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|update_task_state]: Task: generate_mesh, type: PYFUNCTION, finished.\n", + "01/16/2026 08:09:56 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: convert_to_xdmf\n", + "01/16/2026 08:10:00 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|update_task_state]: Task: convert_to_xdmf, type: PYFUNCTION, finished.\n", + "01/16/2026 08:10:00 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: poisson\n", + "/home/jan/miniforge3/envs/processing/lib/python3.9/site-packages/ufl/__init__.py:250: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources\n", + "01/16/2026 08:10:04 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|update_task_state]: Task: poisson, type: PYFUNCTION, finished.\n", + "01/16/2026 08:10:05 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_over_line\n", + "01/16/2026 08:10:09 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|update_task_state]: Task: plot_over_line, type: PYFUNCTION, finished.\n", + "01/16/2026 08:10:09 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: substitute_macros\n", + "01/16/2026 08:10:11 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|update_task_state]: Task: substitute_macros, type: PYFUNCTION, finished.\n", + "01/16/2026 08:10:11 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: compile_paper\n", + "01/16/2026 08:10:16 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|update_task_state]: Task: compile_paper, type: PYFUNCTION, finished.\n", + "01/16/2026 08:10:16 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", + "01/16/2026 08:10:16 AM <39943> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1584|WorkGraphEngine|finalize]: Finalize workgraph.\n" + ] + }, + { + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "id": "55dc8d12-dfe6-4465-a368-b7e590ae6800", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\nThe same `workflow.json` is reconstructed as a jobflow `Flow` and executed locally with `run_locally`, independently of the `executorlib` objects used to define it." + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "dff46eb8-e0e7-49bb-8c40-0db2df133124", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "6a189459-84e4-4738-ada1-37ee8c65b2ab", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "6e7f3614-c971-4e2d-83f0-96f0d0fc04de", + "metadata": {}, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "2d87ed45-f5d9-403f-a03a-26be4a47a3ef", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-01-16 08:10:22,433 INFO Started executing jobs locally\n", + "2026-01-16 08:10:22,747 INFO Starting job - generate_mesh (fca356ed-0f12-49aa-90c5-3161982fb757)\n", + "2026-01-16 08:10:24,797 INFO Finished job - generate_mesh (fca356ed-0f12-49aa-90c5-3161982fb757)\n", + "2026-01-16 08:10:24,797 INFO Starting job - convert_to_xdmf (2be5b5a6-4ba9-4962-b09c-c7565e4655a8)\n", + "2026-01-16 08:10:27,186 INFO Finished job - convert_to_xdmf (2be5b5a6-4ba9-4962-b09c-c7565e4655a8)\n", + "2026-01-16 08:10:27,186 INFO Starting job - poisson (e539fd0a-4e53-42b4-b79d-9d07a2f602d7)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jan/miniforge3/envs/processing/lib/python3.9/site-packages/ufl/__init__.py:250: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-01-16 08:10:30,319 INFO Finished job - poisson (e539fd0a-4e53-42b4-b79d-9d07a2f602d7)\n", + "2026-01-16 08:10:30,320 INFO Starting job - plot_over_line (e71edb93-5784-4a14-9cb8-29180644c4e1)\n", + "2026-01-16 08:10:33,201 INFO Finished job - plot_over_line (e71edb93-5784-4a14-9cb8-29180644c4e1)\n", + "2026-01-16 08:10:33,202 INFO Starting job - substitute_macros (ca231d17-16ce-409c-a4cc-9a3988b7524a)\n", + "2026-01-16 08:10:35,251 INFO Finished job - substitute_macros (ca231d17-16ce-409c-a4cc-9a3988b7524a)\n", + "2026-01-16 08:10:35,252 INFO Starting job - compile_paper (43798414-e406-411e-9daa-bf1bf3d20c25)\n", + "2026-01-16 08:10:39,264 INFO Finished job - compile_paper (43798414-e406-411e-9daa-bf1bf3d20c25)\n", + "2026-01-16 08:10:39,265 INFO Finished executing jobs locally\n" + ] + }, + { + "data": { + "text/plain": [ + "{'fca356ed-0f12-49aa-90c5-3161982fb757': {1: Response(output='/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/preprocessing/square.msh', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi'))},\n", + " '2be5b5a6-4ba9-4962-b09c-c7565e4655a8': {1: Response(output={'xdmf_file': '/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/preprocessing/square.xdmf', 'h5_file': '/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/preprocessing/square.h5'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi'))},\n", + " 'e539fd0a-4e53-42b4-b79d-9d07a2f602d7': {1: Response(output={'numdofs': 357, 'pvd_file': '/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/processing/poisson.pvd', 'vtu_file': '/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/processing/poisson000000.vtu'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi'))},\n", + " 'e71edb93-5784-4a14-9cb8-29180644c4e1': {1: Response(output='/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/postprocessing/plotoverline.csv', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi'))},\n", + " 'ca231d17-16ce-409c-a4cc-9a3988b7524a': {1: Response(output='/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/postprocessing/macros.tex', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi'))},\n", + " '43798414-e406-411e-9daa-bf1bf3d20c25': {1: Response(output='/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/postprocessing/paper.pdf', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi'))}}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "7ecc0861-6fc8-4788-b05b-fa5ae06b96e3", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\n`load_workflow_json` turns the graph into a list of delayed pyiron jobs; `.draw()` visualizes the dependency chain and `.pull()` triggers execution, returning the path to the final `paper.pdf`." + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "78bf8ce1-518c-4a14-9375-9557db125fd0", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "3c9a66a4-81e1-40e7-bf33-b0c661b6c8df", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "create_function_job_d98d5639807a3be4999a1365311f70f7\n", + "\n", + "create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e211850>\n", + "\n", + "\n", + "\n", + "macros_tex_2966c3cce2a45e8cba702c524f55c461\n", + "\n", + "macros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e2115e0>\n", + "\n", + "\n", + "\n", + "macros_tex_2966c3cce2a45e8cba702c524f55c461->create_function_job_d98d5639807a3be4999a1365311f70f7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "pvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e2112b0>\n", + "\n", + "\n", + "\n", + "pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5->macros_tex_2966c3cce2a45e8cba702c524f55c461\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66\n", + "\n", + "poisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210f50>\n", + "\n", + "\n", + "\n", + "poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66->pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "plot_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e2112b0>\n", + "\n", + "\n", + "\n", + "poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66->plot_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_file_2e9051e35dd84c5e1f106937c8c783f5->create_function_job_d98d5639807a3be4999a1365311f70f7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "meshio_output_xdmf_2ed71308dc623781112ce378b493cea5\n", + "\n", + "meshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210b90>\n", + "\n", + "\n", + "\n", + "meshio_output_xdmf_2ed71308dc623781112ce378b493cea5->poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9\n", + "\n", + "poisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210f20>\n", + "\n", + "\n", + "\n", + "meshio_output_xdmf_2ed71308dc623781112ce378b493cea5->poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ndofs_c0ac3b9ed23ab49414fc2f718f8fb106\n", + "\n", + "ndofs=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e211340>\n", + "\n", + "\n", + "\n", + "meshio_output_xdmf_2ed71308dc623781112ce378b493cea5->ndofs_c0ac3b9ed23ab49414fc2f718f8fb106\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9->pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9->plot_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ndofs_c0ac3b9ed23ab49414fc2f718f8fb106->macros_tex_2966c3cce2a45e8cba702c524f55c461\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809\n", + "\n", + "gmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210770>\n", + "\n", + "\n", + "\n", + "gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809->meshio_output_xdmf_2ed71308dc623781112ce378b493cea5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "meshio_output_h5_f481ee088011767a95b34af8231ee1c2\n", + "\n", + "meshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x7f752e210b60>\n", + "\n", + "\n", + "\n", + "gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809->meshio_output_h5_f481ee088011767a95b34af8231ee1c2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "meshio_output_h5_f481ee088011767a95b34af8231ee1c2->poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "meshio_output_h5_f481ee088011767a95b34af8231ee1c2->poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "meshio_output_h5_f481ee088011767a95b34af8231ee1c2->ndofs_c0ac3b9ed23ab49414fc2f718f8fb106\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "domain_size_f12a7f1986b9dd058dfc666dbe230b20\n", + "\n", + "domain_size=2.0\n", + "\n", + "\n", + "\n", + "domain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_2966c3cce2a45e8cba702c524f55c461\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "domain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89\n", + "\n", + "source_directory=/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/source\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->create_function_job_d98d5639807a3be4999a1365311f70f7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->macros_tex_2966c3cce2a45e8cba702c524f55c461\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->pvbatch_output_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->poisson_output_pvd_file_33b662a19dd2a4b145850729f23a7c66\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->plot_file_2e9051e35dd84c5e1f106937c8c783f5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->poisson_output_vtu_file_5b4f7a5144851465b22b9e4f9e6af5a9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->ndofs_c0ac3b9ed23ab49414fc2f718f8fb106\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "source_directory_5beb97e7e5f621e33d82e6cf4af22c89->gmsh_output_file_fa7ec7ce434650774dc66bdb43c1d809\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "44c5213b-ce89-4d8d-b47b-1ac0bb4940ab", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job generate_mesh_48a36c5747cacb5a404050510014e47e was saved and received the ID: 34\n", + "The job convert_to_xdmf_eb9b45572042c1ef8c618184cde64b0d was saved and received the ID: 35\n", + "The job poisson_2fd5008b2250fed255cc4f58e009fe7e was saved and received the ID: 36\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jan/miniforge3/envs/processing/lib/python3.9/site-packages/ufl/__init__.py:250: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job plot_over_line_e59dd6066e3aaeb378917024209e71cf was saved and received the ID: 37\n", + "The job substitute_macros_317cac7b98bf8b6278cdf40a45350ccb was saved and received the ID: 38\n", + "The job compile_paper_32a7807be3644bd018cad61f46ebfb35 was saved and received the ID: 39\n" + ] + }, + { + "data": { + "text/plain": [ + "'/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/postprocessing/paper.pdf'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "delayed_object_lst[-1].pull()" + ] + }, + { + "cell_type": "markdown", + "id": "385acbf585763632", + "metadata": {}, + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the graph is loaded into a `pyiron_workflow` `Workflow`. `.draw()` shows the node graph and `.run()` executes it end to end." + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "927d0118cc4edfba", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "50055483ca2c9909", + "metadata": {}, + "outputs": [], + "source": [ + "wf = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "7d25a578c431e0f5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdi\n", + "\n", + "executorlib_nfdi: Workflow\n", + "\n", + "clusterexecutorlib_nfdiInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_mesh\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "generate_mesh: generate_mesh\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "convert_to_xdmf: convert_to_xdmf\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoisson\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "poisson: poisson\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_line\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_over_line: plot_over_line\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macros\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "substitute_macros: substitute_macros\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paper\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "compile_paper: compile_paper\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_5349895245803136458: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2446111291168350704: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_3616010272467796640: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_288724780737349182: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_8657121023782977951: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsgenerate_mesh__domain_size\n", + "\n", + "generate_mesh__domain_size: float\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshInputsdomain_size\n", + "\n", + "domain_size: float\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsgenerate_mesh__domain_size->clusterexecutorlib_nfdigenerate_meshInputsdomain_size\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsgenerate_mesh__source_directory\n", + "\n", + "generate_mesh__source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshInputssource_directory\n", + "\n", + "source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsgenerate_mesh__source_directory->clusterexecutorlib_nfdigenerate_meshInputssource_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputspoisson__source_directory\n", + "\n", + "poisson__source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonInputssource_directory\n", + "\n", + "source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputspoisson__source_directory->clusterexecutorlib_nfdipoissonInputssource_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsplot_over_line__source_directory\n", + "\n", + "plot_over_line__source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineInputssource_directory\n", + "\n", + "source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsplot_over_line__source_directory->clusterexecutorlib_nfdiplot_over_lineInputssource_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputssubstitute_macros__domain_size\n", + "\n", + "substitute_macros__domain_size: float\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputsdomain_size\n", + "\n", + "domain_size: float\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputssubstitute_macros__domain_size->clusterexecutorlib_nfdisubstitute_macrosInputsdomain_size\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputssubstitute_macros__source_directory\n", + "\n", + "substitute_macros__source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputssource_directory\n", + "\n", + "source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputssubstitute_macros__source_directory->clusterexecutorlib_nfdisubstitute_macrosInputssource_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputscompile_paper__source_directory\n", + "\n", + "compile_paper__source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperInputssource_directory\n", + "\n", + "source_directory: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputscompile_paper__source_directory->clusterexecutorlib_nfdicompile_paperInputssource_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_5349895245803136458__item\n", + "\n", + "injected_GetItem_5349895245803136458__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_5349895245803136458__item->clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_2446111291168350704__item\n", + "\n", + "injected_GetItem_2446111291168350704__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_2446111291168350704__item->clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_3616010272467796640__item\n", + "\n", + "injected_GetItem_3616010272467796640__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_3616010272467796640__item->clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_288724780737349182__item\n", + "\n", + "injected_GetItem_288724780737349182__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_288724780737349182__item->clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_8657121023782977951__item\n", + "\n", + "injected_GetItem_8657121023782977951__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiInputsinjected_GetItem_8657121023782977951__item->clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiOutputsWithInjectioncompile_paper__compile_paper\n", + "\n", + "compile_paper__compile_paper: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshOutputsWithInjectiongenerate_mesh\n", + "\n", + "generate_mesh: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfInputsgmsh_output_file\n", + "\n", + "gmsh_output_file: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdigenerate_meshOutputsWithInjectiongenerate_mesh->clusterexecutorlib_nfdiconvert_to_xdmfInputsgmsh_output_file\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionconvert_to_xdmf\n", + "\n", + "convert_to_xdmf: dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionconvert_to_xdmf->clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiconvert_to_xdmfOutputsWithInjectionconvert_to_xdmf->clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonInputsmeshio_output_xdmf\n", + "\n", + "meshio_output_xdmf: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonInputsmeshio_output_h5\n", + "\n", + "meshio_output_h5: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson\n", + "\n", + "poisson: dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson->clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson->clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdipoissonOutputsWithInjectionpoisson->clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_pvd_file\n", + "\n", + "poisson_output_pvd_file: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_vtu_file\n", + "\n", + "poisson_output_vtu_file: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionplot_over_line\n", + "\n", + "plot_over_line: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputspvbatch_output_file\n", + "\n", + "pvbatch_output_file: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionplot_over_line->clusterexecutorlib_nfdisubstitute_macrosInputspvbatch_output_file\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperInputsplot_file\n", + "\n", + "plot_file: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiplot_over_lineOutputsWithInjectionplot_over_line->clusterexecutorlib_nfdicompile_paperInputsplot_file\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosInputsndofs\n", + "\n", + "ndofs: int\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionsubstitute_macros\n", + "\n", + "substitute_macros: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperInputsmacros_tex\n", + "\n", + "macros_tex: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdisubstitute_macrosOutputsWithInjectionsubstitute_macros->clusterexecutorlib_nfdicompile_paperInputsmacros_tex\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperOutputsWithInjectioncompile_paper\n", + "\n", + "compile_paper: str\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdicompile_paperOutputsWithInjectioncompile_paper->clusterexecutorlib_nfdiOutputsWithInjectioncompile_paper__compile_paper\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_5349895245803136458OutputsWithInjectiongetitem->clusterexecutorlib_nfdipoissonInputsmeshio_output_xdmf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_2446111291168350704OutputsWithInjectiongetitem->clusterexecutorlib_nfdipoissonInputsmeshio_output_h5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_3616010272467796640OutputsWithInjectiongetitem->clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_pvd_file\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_288724780737349182OutputsWithInjectiongetitem->clusterexecutorlib_nfdiplot_over_lineInputspoisson_output_vtu_file\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_nfdiinjected_GetItem_8657121023782977951OutputsWithInjectiongetitem->clusterexecutorlib_nfdisubstitute_macrosInputsndofs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "fff9513c4a127a96", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jan/miniforge3/envs/processing/lib/python3.9/site-packages/ufl/__init__.py:250: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources\n" + ] + }, + { + "data": { + "text/plain": [ + "{'compile_paper__compile_paper': '/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/nfdi/postprocessing/paper.pdf'}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47a4de7a-d149-4cd2-9b92-1901ce0ceb9d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/_sources/example_workflows/nfdi/jobflow.ipynb b/_sources/example_workflows/nfdi/jobflow.ipynb new file mode 100644 index 00000000..77c50414 --- /dev/null +++ b/_sources/example_workflows/nfdi/jobflow.ipynb @@ -0,0 +1,382 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "id": "048b53d1-db08-44ff-84cc-a4ff50032944", + "cell_type": "markdown", + "source": "# jobflow", + "metadata": {} + }, + { + "id": "106ded66-d202-46ac-82b0-2755ca309bdd", + "cell_type": "markdown", + "source": "https://github.com/BAMresearch/NFDI4IngScientificWorkflowRequirements\n\nThis notebook defines the NFDI4Ing file-based workflow benchmark with [`jobflow`](https://github.com/materialsproject/jobflow) and then loads the resulting `workflow.json` into `aiida`, `pyiron_base` and `pyiron_workflow`. Every stage of the pipeline shells out to an external command-line tool (`gmsh`, `meshio`, a FEniCS-based Poisson solver, ParaView's `pvbatch`, `tectonic`) in its own conda environment and passes file paths between stages rather than in-memory Python objects — see [`workflow.py`](workflow.py).", + "metadata": {} + }, + { + "id": "856b2ba2-93d5-4516-93e1-a1eac49c48f2", + "cell_type": "markdown", + "source": "## Define workflow with jobflow\n\nThe `job` decorator turns each of the six pipeline functions into a jobflow `Job` that delays execution until the `Flow` is run. Because `convert_to_xdmf` and `poisson` return a `dict`, their outputs are accessed downstream as `.output.` (e.g. `meshio_output_dict.output.xdmf_file`) to wire a single dictionary entry into the next job's input.", + "metadata": {} + }, + { + "id": "43d5c810-a701-4971-8534-56dcbd112716", + "cell_type": "code", + "source": "import os", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "89c02460-b543-442c-a27e-f1757dc2262e", + "cell_type": "code", + "source": "from jobflow import job, Flow\n\nfrom python_workflow_definition.jobflow import write_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "id": "864f048d78ea3f08", + "cell_type": "code", + "source": "from workflow import (\n generate_mesh as _generate_mesh, \n convert_to_xdmf as _convert_to_xdmf,\n poisson as _poisson,\n plot_over_line as _plot_over_line,\n substitute_macros as _substitute_macros,\n compile_paper as _compile_paper,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "147b81b7b494ceda", + "cell_type": "code", + "source": "generate_mesh = job(_generate_mesh)\nconvert_to_xdmf = job(_convert_to_xdmf)\npoisson = job(_poisson)\nplot_over_line = job(_plot_over_line)\nsubstitute_macros = job(_substitute_macros)\ncompile_paper = job(_compile_paper)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "id": "981e548b-a3b4-49a3-9653-85e90f05c60e", + "cell_type": "code", + "source": "source_directory = os.path.abspath(os.path.join(os.curdir, \"source\"))", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "id": "1cd3d59e", + "source": "With `source_directory` and `domain_size` fixed, the calls below chain the six jobs together: mesh generation, XDMF conversion, the Poisson solve, line-plot postprocessing, LaTeX macro substitution and paper compilation. Each job runs in its own subdirectory and conda environment (see `source/envs/`), so what actually flows from one job to the next are file paths, not in-memory results.", + "metadata": {} + }, + { + "id": "8d911f98-3b80-457f-a0f4-3cb37ebf1691", + "cell_type": "code", + "source": "domain_size = 2.0", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "id": "71d411b6-cbec-489e-99e3-ba71680bcb5b", + "cell_type": "code", + "source": "gmsh_output_file = generate_mesh(\n domain_size=domain_size,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "id": "1d0d9804-f250-48b3-a5d0-a546d520f79b", + "cell_type": "code", + "source": "meshio_output_dict = convert_to_xdmf(\n gmsh_output_file=gmsh_output_file.output,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "id": "7b69bcff-e2b1-4d4a-b62c-6a1c86eeb590", + "cell_type": "code", + "source": "poisson_dict = poisson(\n meshio_output_xdmf=meshio_output_dict.output.xdmf_file, \n meshio_output_h5=meshio_output_dict.output.h5_file,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "id": "3c4a29b0-eb1e-490a-8be0-e03cfff15e0a", + "cell_type": "code", + "source": "pvbatch_output_file = plot_over_line(\n poisson_output_pvd_file=poisson_dict.output.pvd_file, \n poisson_output_vtu_file=poisson_dict.output.vtu_file,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "id": "a0a4c233-322d-4723-9627-62ca2487bfa9", + "cell_type": "code", + "source": "macros_tex_file = substitute_macros( \n pvbatch_output_file=pvbatch_output_file.output, \n ndofs=poisson_dict.output.numdofs, \n domain_size=domain_size,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "id": "c281408f-e63d-4380-a7e6-c595d49fbb8f", + "cell_type": "code", + "source": "paper_output = compile_paper(\n macros_tex=macros_tex_file.output, \n plot_file=pvbatch_output_file.output,\n source_directory=source_directory,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "id": "a384d70a-8ef5-4fdd-880c-56ac7eaf87b9", + "cell_type": "code", + "source": "flow = Flow([gmsh_output_file, meshio_output_dict, poisson_dict, pvbatch_output_file, macros_tex_file, paper_output])", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "cell_type": "markdown", + "id": "71c4ff70", + "source": "The six jobs are collected into a `Flow`, which `write_workflow_json` then serializes to the PWD `workflow.json` format for the other engines to load.", + "metadata": {} + }, + { + "id": "fb23ad9c-76fd-4c0b-b546-e305d6c49796", + "cell_type": "code", + "source": "workflow_json_filename = \"jobflow_nfdi.json\"", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 14 + }, + { + "id": "4139547a-9717-4708-b1a5-8202a0382d77", + "cell_type": "code", + "source": "write_workflow_json(flow=flow, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "id": "11a829e2-face-469f-b343-2c95763b1f13", + "cell_type": "markdown", + "source": "## Load Workflow with aiida\n\n`load_workflow_json` rebuilds the pipeline as an `aiida-workgraph` `WorkGraph` from `jobflow_nfdi.json`, after connecting to a local AiiDA profile with `load_profile()`. `wg.run()` re-executes the whole pipeline under `aiida`.", + "metadata": {} + }, + { + "id": "4f3acabe-55df-479a-af4d-a23a80c4660d", + "cell_type": "code", + "source": "from aiida import load_profile\n\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 16, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 16 + }, + { + "id": "b6ba9444-a2c8-451b-b74c-19b0f69ba369", + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 17 + }, + { + "id": "c3528d55-6bf7-47ed-a110-65c47446ba92", + "cell_type": "code", + "source": "wg = load_workflow_json(file_name=workflow_json_filename)\nwg", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 18, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "47a0a80d777f424aa98a551c4cbe7e1e" + } + }, + "metadata": {} + } + ], + "execution_count": 18 + }, + { + "id": "5ef48778-4209-425f-8c6b-85a4cd2f92ec", + "cell_type": "code", + "source": "wg.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 05:44:19 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_mesh1\n05/24/2025 05:44:21 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|update_task_state]: Task: generate_mesh1, type: PyFunction, finished.\n05/24/2025 05:44:21 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: convert_to_xdmf2\n05/24/2025 05:44:22 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|update_task_state]: Task: convert_to_xdmf2, type: PyFunction, finished.\n05/24/2025 05:44:22 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: poisson3\n05/24/2025 05:44:25 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|update_task_state]: Task: poisson3, type: PyFunction, finished.\n05/24/2025 05:44:25 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_over_line4\n05/24/2025 05:44:27 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|update_task_state]: Task: plot_over_line4, type: PyFunction, finished.\n05/24/2025 05:44:27 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: substitute_macros5\n05/24/2025 05:44:29 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|update_task_state]: Task: substitute_macros5, type: PyFunction, finished.\n05/24/2025 05:44:29 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: compile_paper6\n05/24/2025 05:44:31 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|update_task_state]: Task: compile_paper6, type: PyFunction, finished.\n05/24/2025 05:44:31 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 05:44:31 AM <3034> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [51|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 19 + }, + { + "id": "397b16a2-e1ec-4eec-8562-1c84f585c347", + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_base\n\nThe same JSON is loaded into a list of delayed pyiron jobs; `.draw()` visualizes their dependencies and `.pull()` triggers execution, returning the final `paper.pdf` path.", + "metadata": {} + }, + { + "id": "be4d5d93-e9f6-4072-a6be-0ee5dc93590f", + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 20 + }, + { + "id": "4452a648-d4c3-4f5f-8678-ffb54bef17dc", + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_724cfd00ffeb70f8b463a938195e0447\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9b80>\n\n\n\nmacros_tex_b52804e5fa845b3657fa99b738e02cf7\n\nmacros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9910>\n\n\n\nmacros_tex_b52804e5fa845b3657fa99b738e02cf7->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\npvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\npvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b95e0>\n\n\n\npvbatch_output_file_554a54a50a86b23416c0daf6ab0938df->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\npoisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9280>\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nplot_file_554a54a50a86b23416c0daf6ab0938df\n\nplot_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b95e0>\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nplot_file_554a54a50a86b23416c0daf6ab0938df->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1\n\nmeshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b8e90>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\npoisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9250>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nndofs_e826761b60042b070e0c0a24b472ee26\n\nndofs=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b9670>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nndofs_e826761b60042b070e0c0a24b472ee26->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\ngmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b8b90>\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe\n\nmeshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x7da7483b8e60>\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20\n\ndomain_size=2.0\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696\n\nsource_directory=/home/jovyan/example_workflows/nfdi/source\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 21 + }, + { + "id": "1c2760b6-96b4-4f44-ac49-a229d4a0cf67", + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job generate_mesh_47725c16637f799ac042e47468005db3 was saved and received the ID: 1\nThe job convert_to_xdmf_d6a46eb9a4ec352aa996e783ec3c785f was saved and received the ID: 2\nThe job poisson_3c147fc86db87cf0c0f94bda333f8cd8 was saved and received the ID: 3\nThe job plot_over_line_ef50933291910dadcc8311924971e127 was saved and received the ID: 4\nThe job substitute_macros_63766eafd6b1980c7832dd8c9a97c96e was saved and received the ID: 5\nThe job compile_paper_128d1d58374953c00e95b8de62cbb10b was saved and received the ID: 6\n" + }, + { + "execution_count": 22, + "output_type": "execute_result", + "data": { + "text/plain": "'/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf'" + }, + "metadata": {} + } + ], + "execution_count": 22 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the graph is loaded into a `pyiron_workflow` `Workflow`. `.draw()` shows the node graph and `.run()` executes it end to end.", + "id": "8e73fa07cebd7b72" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json", + "id": "aa99fbd94b03a869" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=workflow_json_filename)", + "id": "728b8684fee475b5" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))", + "id": "7b814f0f74f0b15a" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()", + "id": "447506cdca5080e6" + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/nfdi/pyiron_base.ipynb b/_sources/example_workflows/nfdi/pyiron_base.ipynb new file mode 100644 index 00000000..164b5af8 --- /dev/null +++ b/_sources/example_workflows/nfdi/pyiron_base.ipynb @@ -0,0 +1,367 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "id": "106ded66-d202-46ac-82b0-2755ca309bdd", + "cell_type": "markdown", + "source": "# pyiron\n\nhttps://github.com/BAMresearch/NFDI4IngScientificWorkflowRequirements\n\nThis notebook defines the NFDI4Ing file-based workflow benchmark with [`pyiron_base`](https://github.com/pyiron/pyiron_base) and then loads the resulting `workflow.json` into `aiida`, `jobflow` and `pyiron_workflow`. Every stage of the pipeline shells out to an external command-line tool (`gmsh`, `meshio`, a FEniCS-based Poisson solver, ParaView's `pvbatch`, `tectonic`) in its own conda environment and passes file paths between stages rather than in-memory Python objects — see [`workflow.py`](workflow.py).", + "metadata": {} + }, + { + "id": "91dd48ea-aa7e-4937-a68e-59fc5017eb1e", + "cell_type": "markdown", + "source": "## Define workflow with pyiron_base\n\nThe `job` decorator turns a plain Python function into a delayed pyiron job. Since `convert_to_xdmf` and `poisson` return a `dict`, they are decorated with `output_key_lst=[...]` so each dictionary key becomes a separately addressable output (e.g. `meshio_output_dict.output.xdmf_file`) that can be wired into the next job's input.", + "metadata": {} + }, + { + "id": "2c9622f5-ab7e-460e-b8e4-8d21413eda77", + "cell_type": "code", + "source": "import os", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "d265bb5aa6af79d6", + "cell_type": "code", + "source": "from workflow import (\n generate_mesh as _generate_mesh, \n convert_to_xdmf as _convert_to_xdmf,\n poisson as _poisson,\n plot_over_line as _plot_over_line,\n substitute_macros as _substitute_macros,\n compile_paper as _compile_paper,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "id": "2dced28725813fc1", + "cell_type": "code", + "source": "from pyiron_base import job\n\nfrom python_workflow_definition.pyiron_base import write_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "549ecf27-88ef-4e77-8bd4-b616cfdda2e4", + "cell_type": "code", + "source": "generate_mesh = job(_generate_mesh)\nconvert_to_xdmf = job(_convert_to_xdmf, output_key_lst=[\"xdmf_file\", \"h5_file\"])\npoisson = job(_poisson, output_key_lst=[\"numdofs\", \"pvd_file\", \"vtu_file\"])\nplot_over_line = job(_plot_over_line)\nsubstitute_macros = job(_substitute_macros)\ncompile_paper = job(_compile_paper)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "id": "8d911f98-3b80-457f-a0f4-3cb37ebf1691", + "cell_type": "code", + "source": "domain_size = 2.0", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "c6ea980b-6761-4191-8407-7b1f78a4c3ea", + "cell_type": "code", + "source": "source_directory = os.path.abspath(os.path.join(os.curdir, \"source\"))", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "id": "b80c6588", + "source": "The calls below chain the six jobs together: mesh generation, XDMF conversion, the Poisson solve, line-plot postprocessing, LaTeX macro substitution and paper compilation. Since each stage runs an external tool in its own conda environment (see `source/envs/`), what is actually passed between jobs are file paths, not in-memory Python values.", + "metadata": {} + }, + { + "id": "71d411b6-cbec-489e-99e3-ba71680bcb5b", + "cell_type": "code", + "source": "gmsh_output_file = generate_mesh(\n domain_size=domain_size,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "id": "1d0d9804-f250-48b3-a5d0-a546d520f79b", + "cell_type": "code", + "source": "meshio_output_dict = convert_to_xdmf(\n gmsh_output_file=gmsh_output_file,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "id": "7b69bcff-e2b1-4d4a-b62c-6a1c86eeb590", + "cell_type": "code", + "source": "poisson_dict = poisson(\n meshio_output_xdmf=meshio_output_dict.output.xdmf_file, \n meshio_output_h5=meshio_output_dict.output.h5_file,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "id": "3c4a29b0-eb1e-490a-8be0-e03cfff15e0a", + "cell_type": "code", + "source": "pvbatch_output_file = plot_over_line(\n poisson_output_pvd_file=poisson_dict.output.pvd_file, \n poisson_output_vtu_file=poisson_dict.output.vtu_file,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "id": "a0a4c233-322d-4723-9627-62ca2487bfa9", + "cell_type": "code", + "source": "macros_tex_file = substitute_macros( \n pvbatch_output_file=pvbatch_output_file, \n ndofs=poisson_dict.output.numdofs, \n domain_size=domain_size,\n source_directory=source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "id": "c281408f-e63d-4380-a7e6-c595d49fbb8f", + "cell_type": "code", + "source": "paper_output = compile_paper(\n macros_tex=macros_tex_file, \n plot_file=pvbatch_output_file,\n source_directory=source_directory,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "cell_type": "markdown", + "id": "4d1ce825", + "source": "Because pyiron builds a delayed call graph rather than an explicit `Flow`/`WorkGraph` object, `write_workflow_json` only needs the final delayed object (`paper_output`) — it walks the graph backwards to discover every upstream job.", + "metadata": {} + }, + { + "id": "63f29646-3846-4a97-a033-20e9df0ac214", + "cell_type": "code", + "source": "workflow_json_filename = \"pyiron_base_nfdi.json\"", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "id": "f62111ba-9271-4987-9c7e-3b1c9f9eae7a", + "cell_type": "code", + "source": "write_workflow_json(delayed_object=paper_output, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 14 + }, + { + "id": "d789971e-8f41-45fa-832a-11fd72dea96e", + "cell_type": "markdown", + "source": "## Load Workflow with aiida\n\n`load_workflow_json` rebuilds the pipeline as an `aiida-workgraph` `WorkGraph` from `pyiron_base_nfdi.json`, after connecting to a local AiiDA profile with `load_profile()`. `wg.run()` re-executes the whole pipeline under `aiida`.", + "metadata": {} + }, + { + "id": "a6e85e89-5d7a-40eb-809c-ac44974e3fd7", + "cell_type": "code", + "source": "from aiida import load_profile\n\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 15, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 15 + }, + { + "id": "3de84fb7-b01b-4541-868a-92e881eb6e77", + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 16 + }, + { + "id": "b33f5528-10cd-47c8-8723-622902978859", + "cell_type": "code", + "source": "wg = load_workflow_json(file_name=workflow_json_filename)\nwg", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 17, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "ecd2de75aecb4dc7b8db86590fff92bb" + } + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "id": "15282ca1-d339-40e7-ad68-8a7613ed08da", + "cell_type": "code", + "source": "wg.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 05:45:10 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_mesh6\n05/24/2025 05:45:12 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|update_task_state]: Task: generate_mesh6, type: PyFunction, finished.\n05/24/2025 05:45:12 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: convert_to_xdmf5\n05/24/2025 05:45:13 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|update_task_state]: Task: convert_to_xdmf5, type: PyFunction, finished.\n05/24/2025 05:45:13 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: poisson4\n05/24/2025 05:45:16 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|update_task_state]: Task: poisson4, type: PyFunction, finished.\n05/24/2025 05:45:16 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_over_line3\n05/24/2025 05:45:18 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|update_task_state]: Task: plot_over_line3, type: PyFunction, finished.\n05/24/2025 05:45:18 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: substitute_macros2\n05/24/2025 05:45:20 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|update_task_state]: Task: substitute_macros2, type: PyFunction, finished.\n05/24/2025 05:45:20 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: compile_paper1\n05/24/2025 05:45:22 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|update_task_state]: Task: compile_paper1, type: PyFunction, finished.\n05/24/2025 05:45:22 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 05:45:22 AM <4326> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [81|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 18 + }, + { + "id": "55dc8d12-dfe6-4465-a368-b7e590ae6800", + "cell_type": "markdown", + "source": "## Load Workflow with jobflow\n\nThe same JSON is reconstructed as a jobflow `Flow` and executed locally with `run_locally`, independently of the `pyiron_base` objects used to define it.", + "metadata": {} + }, + { + "id": "dff46eb8-e0e7-49bb-8c40-0db2df133124", + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 19 + }, + { + "id": "6a189459-84e4-4738-ada1-37ee8c65b2ab", + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 20 + }, + { + "id": "6e7f3614-c971-4e2d-83f0-96f0d0fc04de", + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 21 + }, + { + "id": "2d87ed45-f5d9-403f-a03a-26be4a47a3ef", + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 05:45:23,211 INFO Started executing jobs locally\n2025-05-24 05:45:23,487 INFO Starting job - generate_mesh (afd8b83e-2283-40e8-9a75-4553a7ca72d0)\n2025-05-24 05:45:24,604 INFO Finished job - generate_mesh (afd8b83e-2283-40e8-9a75-4553a7ca72d0)\n2025-05-24 05:45:24,605 INFO Starting job - convert_to_xdmf (6723daca-18b6-4f38-8b3e-a92c2a227dc3)\n2025-05-24 05:45:26,001 INFO Finished job - convert_to_xdmf (6723daca-18b6-4f38-8b3e-a92c2a227dc3)\n2025-05-24 05:45:26,002 INFO Starting job - poisson (db43f907-45eb-4596-ac6b-ab5978cc5e17)\n2025-05-24 05:45:28,507 INFO Finished job - poisson (db43f907-45eb-4596-ac6b-ab5978cc5e17)\n2025-05-24 05:45:28,509 INFO Starting job - plot_over_line (b6493a73-f134-4067-ba0d-d6e2cd246afe)\n2025-05-24 05:45:29,933 INFO Finished job - plot_over_line (b6493a73-f134-4067-ba0d-d6e2cd246afe)\n2025-05-24 05:45:29,934 INFO Starting job - substitute_macros (65c3db44-dcc1-44ca-a1bb-374e8f5c771e)\n2025-05-24 05:45:30,774 INFO Finished job - substitute_macros (65c3db44-dcc1-44ca-a1bb-374e8f5c771e)\n2025-05-24 05:45:30,775 INFO Starting job - compile_paper (84277487-0e26-444b-92dc-4516ae8a4eba)\n2025-05-24 05:45:32,790 INFO Finished job - compile_paper (84277487-0e26-444b-92dc-4516ae8a4eba)\n2025-05-24 05:45:32,791 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 22, + "output_type": "execute_result", + "data": { + "text/plain": "{'afd8b83e-2283-40e8-9a75-4553a7ca72d0': {1: Response(output='/home/jovyan/example_workflows/nfdi/preprocessing/square.msh', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '6723daca-18b6-4f38-8b3e-a92c2a227dc3': {1: Response(output={'xdmf_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.xdmf', 'h5_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.h5'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'db43f907-45eb-4596-ac6b-ab5978cc5e17': {1: Response(output={'numdofs': 357, 'pvd_file': '/home/jovyan/example_workflows/nfdi/processing/poisson.pvd', 'vtu_file': '/home/jovyan/example_workflows/nfdi/processing/poisson000000.vtu'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'b6493a73-f134-4067-ba0d-d6e2cd246afe': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/plotoverline.csv', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '65c3db44-dcc1-44ca-a1bb-374e8f5c771e': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/macros.tex', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '84277487-0e26-444b-92dc-4516ae8a4eba': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))}}" + }, + "metadata": {} + } + ], + "execution_count": 22 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the graph is loaded into a `pyiron_workflow` `Workflow`. `.draw()` shows the node graph and `.run()` executes it end to end.", + "id": "385acbf585763632" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json", + "id": "927d0118cc4edfba" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=workflow_json_filename)", + "id": "50055483ca2c9909" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))", + "id": "7d25a578c431e0f5" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()", + "id": "fff9513c4a127a96" + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/nfdi/pyiron_workflow.ipynb b/_sources/example_workflows/nfdi/pyiron_workflow.ipynb new file mode 100644 index 00000000..2bc76e3a --- /dev/null +++ b/_sources/example_workflows/nfdi/pyiron_workflow.ipynb @@ -0,0 +1,428 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "id": "106ded66-d202-46ac-82b0-2755ca309bdd", + "cell_type": "markdown", + "source": "# pyiron\n\nhttps://github.com/BAMresearch/NFDI4IngScientificWorkflowRequirements\n\nThis notebook defines the NFDI4Ing file-based workflow benchmark with [`pyiron_workflow`](https://github.com/pyiron/pyiron_workflow) and then loads the resulting `workflow.json` into `aiida`, `jobflow` and `pyiron_base`. Every stage of the pipeline shells out to an external command-line tool (`gmsh`, `meshio`, a FEniCS-based Poisson solver, ParaView's `pvbatch`, `tectonic`) in its own conda environment and passes file paths between stages rather than in-memory Python objects — see [`workflow.py`](workflow.py).", + "metadata": {} + }, + { + "id": "91dd48ea-aa7e-4937-a68e-59fc5017eb1e", + "cell_type": "markdown", + "source": "## Define workflow with pyiron_workflow\n\n`to_function_node` wraps each plain Python function into a `pyiron_workflow` node; the three arguments are the node's registered class name, the function itself, and the name of its (single, unlabeled) output. Nodes are assembled into a graph by assigning them as attributes of a `Workflow` object (`wf. = node(...)`), and dictionary outputs such as `convert_to_xdmf`'s are indexed with `wf.meshio_output_dict[\"xdmf_file\"]` when wiring the next node's input.", + "metadata": {} + }, + { + "id": "2c9622f5-ab7e-460e-b8e4-8d21413eda77", + "cell_type": "code", + "source": "import os", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "d265bb5aa6af79d6", + "cell_type": "code", + "source": "from workflow import (\n generate_mesh as _generate_mesh, \n convert_to_xdmf as _convert_to_xdmf,\n poisson as _poisson,\n plot_over_line as _plot_over_line,\n substitute_macros as _substitute_macros,\n compile_paper as _compile_paper,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "id": "2dced28725813fc1", + "cell_type": "code", + "source": "from pyiron_workflow._legacy import Workflow, to_function_node\n\nfrom python_workflow_definition.pyiron_workflow import write_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "549ecf27-88ef-4e77-8bd4-b616cfdda2e4", + "cell_type": "code", + "source": "generate_mesh = to_function_node(\"generate_mesh\", _generate_mesh, \"generate_mesh\")\nconvert_to_xdmf = to_function_node(\"convert_to_xdmf\", _convert_to_xdmf, \"convert_to_xdmf\")\npoisson = to_function_node(\"poisson\", _poisson, \"poisson\")\nplot_over_line = to_function_node(\"plot_over_line\", _plot_over_line, \"plot_over_line\")\nsubstitute_macros = to_function_node(\"substitute_macros\", _substitute_macros, \"substitute_macros\")\ncompile_paper = to_function_node(\"compile_paper\", _compile_paper, \"compile_paper\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "id": "3a75428e-18c7-49cf-8256-23cff58b9d6e", + "cell_type": "code", + "source": "wf = Workflow(\"my_workflow\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "8d911f98-3b80-457f-a0f4-3cb37ebf1691", + "cell_type": "code", + "source": "wf.domain_size = 2.0", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 6 + }, + { + "id": "c6ea980b-6761-4191-8407-7b1f78a4c3ea", + "cell_type": "code", + "source": "wf.source_directory = os.path.abspath(os.path.join(os.curdir, \"source\"))", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "id": "7c642a24", + "source": "The assignments below build the six-stage pipeline as attributes of `wf`: mesh generation, XDMF conversion, the Poisson solve, line-plot postprocessing, LaTeX macro substitution and paper compilation. Each stage runs an external tool in its own conda environment (see `source/envs/`), so the values connecting them are file paths on disk rather than shared Python objects.", + "metadata": {} + }, + { + "id": "71d411b6-cbec-489e-99e3-ba71680bcb5b", + "cell_type": "code", + "source": "wf.gmsh_output_file = generate_mesh(\n domain_size=wf.domain_size,\n source_directory=wf.source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "id": "1d0d9804-f250-48b3-a5d0-a546d520f79b", + "cell_type": "code", + "source": "wf.meshio_output_dict = convert_to_xdmf(\n gmsh_output_file=wf.gmsh_output_file,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "id": "7b69bcff-e2b1-4d4a-b62c-6a1c86eeb590", + "cell_type": "code", + "source": "wf.poisson_dict = poisson(\n meshio_output_xdmf=wf.meshio_output_dict[\"xdmf_file\"], \n meshio_output_h5=wf.meshio_output_dict[\"h5_file\"],\n source_directory=wf.source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "id": "3c4a29b0-eb1e-490a-8be0-e03cfff15e0a", + "cell_type": "code", + "source": "wf.pvbatch_output_file = plot_over_line(\n poisson_output_pvd_file=wf.poisson_dict[\"pvd_file\"], \n poisson_output_vtu_file=wf.poisson_dict[\"vtu_file\"],\n source_directory=wf.source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "id": "a0a4c233-322d-4723-9627-62ca2487bfa9", + "cell_type": "code", + "source": "wf.macros_tex_file = substitute_macros( \n pvbatch_output_file=wf.pvbatch_output_file, \n ndofs=wf.poisson_dict[\"numdofs\"], \n domain_size=wf.domain_size,\n source_directory=wf.source_directory,\n)", + "metadata": { + "tags": [], + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "id": "c281408f-e63d-4380-a7e6-c595d49fbb8f", + "cell_type": "code", + "source": "wf.paper_output = compile_paper(\n macros_tex=wf.macros_tex_file, \n plot_file=wf.pvbatch_output_file,\n source_directory=wf.source_directory,\n)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "cell_type": "markdown", + "id": "cb9a923d", + "source": "`wf.draw()` renders the assembled node graph; `wf.graph_as_dict` is then handed to `write_workflow_json`, which serializes it into the PWD `workflow.json` format for the other engines to load.", + "metadata": {} + }, + { + "id": "db4f1e15-3710-4e24-abc2-0fef417043e8", + "cell_type": "code", + "source": "wf.draw(size=(10,10))", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 14, + "output_type": "execute_result", + "data": { + "image/svg+xml": "\n\n\n\n\n\nclustermy_workflow\n\nmy_workflow: Workflow\n\nclustermy_workflowInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowgmsh_output_file\n\n\n\n\n\n\n\ngmsh_output_file: generate_mesh\n\n\nclustermy_workflowgmsh_output_fileInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowgmsh_output_fileOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowmeshio_output_dict\n\n\n\n\n\n\n\nmeshio_output_dict: convert_to_xdmf\n\n\nclustermy_workflowmeshio_output_dictInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowmeshio_output_dictOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366\n\n\n\n\n\n\n\ninjected_GetItem_m7197572853956972366: GetItem\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366Inputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092\n\n\n\n\n\n\n\ninjected_GetItem_5401042856615209092: GetItem\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092Inputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowpoisson_dict\n\n\n\n\n\n\n\npoisson_dict: poisson\n\n\nclustermy_workflowpoisson_dictInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowpoisson_dictOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609\n\n\n\n\n\n\n\ninjected_GetItem_5839915180513303609: GetItem\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609Inputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100\n\n\n\n\n\n\n\ninjected_GetItem_m3497348724979863100: GetItem\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100Inputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowpvbatch_output_file\n\n\n\n\n\n\n\npvbatch_output_file: plot_over_line\n\n\nclustermy_workflowpvbatch_output_fileInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowpvbatch_output_fileOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458\n\n\n\n\n\n\n\ninjected_GetItem_m6105838930489235458: GetItem\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458Inputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowmacros_tex_file\n\n\n\n\n\n\n\nmacros_tex_file: substitute_macros\n\n\nclustermy_workflowmacros_tex_fileInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowmacros_tex_fileOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\nclustermy_workflowpaper_output\n\n\n\n\n\n\n\npaper_output: compile_paper\n\n\nclustermy_workflowpaper_outputInputs\n\n\n\n\n\n\n\nInputs\n\n\nclustermy_workflowpaper_outputOutputsWithInjection\n\n\n\n\n\n\n\nOutputsWithInjection\n\n\n\nclustermy_workflowInputsrun\n\nrun\n\n\n\nclustermy_workflowOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowInputsgmsh_output_file__domain_size\n\ngmsh_output_file__domain_size: float\n\n\n\nclustermy_workflowgmsh_output_fileInputsdomain_size\n\ndomain_size: float\n\n\n\nclustermy_workflowInputsgmsh_output_file__domain_size->clustermy_workflowgmsh_output_fileInputsdomain_size\n\n\n\n\n\n\nclustermy_workflowInputsgmsh_output_file__source_directory\n\ngmsh_output_file__source_directory: str\n\n\n\nclustermy_workflowgmsh_output_fileInputssource_directory\n\nsource_directory: str\n\n\n\nclustermy_workflowInputsgmsh_output_file__source_directory->clustermy_workflowgmsh_output_fileInputssource_directory\n\n\n\n\n\n\nclustermy_workflowInputsinjected_GetItem_m7197572853956972366__item\n\ninjected_GetItem_m7197572853956972366__item\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366Inputsitem\n\nitem\n\n\n\nclustermy_workflowInputsinjected_GetItem_m7197572853956972366__item->clustermy_workflowinjected_GetItem_m7197572853956972366Inputsitem\n\n\n\n\n\n\nclustermy_workflowInputsinjected_GetItem_5401042856615209092__item\n\ninjected_GetItem_5401042856615209092__item\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092Inputsitem\n\nitem\n\n\n\nclustermy_workflowInputsinjected_GetItem_5401042856615209092__item->clustermy_workflowinjected_GetItem_5401042856615209092Inputsitem\n\n\n\n\n\n\nclustermy_workflowInputspoisson_dict__source_directory\n\npoisson_dict__source_directory: str\n\n\n\nclustermy_workflowpoisson_dictInputssource_directory\n\nsource_directory: str\n\n\n\nclustermy_workflowInputspoisson_dict__source_directory->clustermy_workflowpoisson_dictInputssource_directory\n\n\n\n\n\n\nclustermy_workflowInputsinjected_GetItem_5839915180513303609__item\n\ninjected_GetItem_5839915180513303609__item\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609Inputsitem\n\nitem\n\n\n\nclustermy_workflowInputsinjected_GetItem_5839915180513303609__item->clustermy_workflowinjected_GetItem_5839915180513303609Inputsitem\n\n\n\n\n\n\nclustermy_workflowInputsinjected_GetItem_m3497348724979863100__item\n\ninjected_GetItem_m3497348724979863100__item\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100Inputsitem\n\nitem\n\n\n\nclustermy_workflowInputsinjected_GetItem_m3497348724979863100__item->clustermy_workflowinjected_GetItem_m3497348724979863100Inputsitem\n\n\n\n\n\n\nclustermy_workflowInputspvbatch_output_file__source_directory\n\npvbatch_output_file__source_directory: str\n\n\n\nclustermy_workflowpvbatch_output_fileInputssource_directory\n\nsource_directory: str\n\n\n\nclustermy_workflowInputspvbatch_output_file__source_directory->clustermy_workflowpvbatch_output_fileInputssource_directory\n\n\n\n\n\n\nclustermy_workflowInputsinjected_GetItem_m6105838930489235458__item\n\ninjected_GetItem_m6105838930489235458__item\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458Inputsitem\n\nitem\n\n\n\nclustermy_workflowInputsinjected_GetItem_m6105838930489235458__item->clustermy_workflowinjected_GetItem_m6105838930489235458Inputsitem\n\n\n\n\n\n\nclustermy_workflowInputsmacros_tex_file__domain_size\n\nmacros_tex_file__domain_size: float\n\n\n\nclustermy_workflowmacros_tex_fileInputsdomain_size\n\ndomain_size: float\n\n\n\nclustermy_workflowInputsmacros_tex_file__domain_size->clustermy_workflowmacros_tex_fileInputsdomain_size\n\n\n\n\n\n\nclustermy_workflowInputsmacros_tex_file__source_directory\n\nmacros_tex_file__source_directory: str\n\n\n\nclustermy_workflowmacros_tex_fileInputssource_directory\n\nsource_directory: str\n\n\n\nclustermy_workflowInputsmacros_tex_file__source_directory->clustermy_workflowmacros_tex_fileInputssource_directory\n\n\n\n\n\n\nclustermy_workflowInputspaper_output__source_directory\n\npaper_output__source_directory: str\n\n\n\nclustermy_workflowpaper_outputInputssource_directory\n\nsource_directory: str\n\n\n\nclustermy_workflowInputspaper_output__source_directory->clustermy_workflowpaper_outputInputssource_directory\n\n\n\n\n\n\nclustermy_workflowOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowOutputsWithInjectionpaper_output__compile_paper\n\npaper_output__compile_paper: str\n\n\n\nclustermy_workflowgmsh_output_fileInputsrun\n\nrun\n\n\n\nclustermy_workflowgmsh_output_fileOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowgmsh_output_fileInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowgmsh_output_fileOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowgmsh_output_fileOutputsWithInjectiongenerate_mesh\n\ngenerate_mesh: str\n\n\n\nclustermy_workflowmeshio_output_dictInputsgmsh_output_file\n\ngmsh_output_file: str\n\n\n\nclustermy_workflowgmsh_output_fileOutputsWithInjectiongenerate_mesh->clustermy_workflowmeshio_output_dictInputsgmsh_output_file\n\n\n\n\n\n\nclustermy_workflowmeshio_output_dictInputsrun\n\nrun\n\n\n\nclustermy_workflowmeshio_output_dictOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowmeshio_output_dictInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowmeshio_output_dictOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowmeshio_output_dictOutputsWithInjectionconvert_to_xdmf\n\nconvert_to_xdmf: dict\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366Inputsobj\n\nobj\n\n\n\nclustermy_workflowmeshio_output_dictOutputsWithInjectionconvert_to_xdmf->clustermy_workflowinjected_GetItem_m7197572853956972366Inputsobj\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092Inputsobj\n\nobj\n\n\n\nclustermy_workflowmeshio_output_dictOutputsWithInjectionconvert_to_xdmf->clustermy_workflowinjected_GetItem_5401042856615209092Inputsobj\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366Inputsrun\n\nrun\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366Inputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectiongetitem\n\ngetitem\n\n\n\nclustermy_workflowpoisson_dictInputsmeshio_output_xdmf\n\nmeshio_output_xdmf: str\n\n\n\nclustermy_workflowinjected_GetItem_m7197572853956972366OutputsWithInjectiongetitem->clustermy_workflowpoisson_dictInputsmeshio_output_xdmf\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092Inputsrun\n\nrun\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092Inputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectiongetitem\n\ngetitem\n\n\n\nclustermy_workflowpoisson_dictInputsmeshio_output_h5\n\nmeshio_output_h5: str\n\n\n\nclustermy_workflowinjected_GetItem_5401042856615209092OutputsWithInjectiongetitem->clustermy_workflowpoisson_dictInputsmeshio_output_h5\n\n\n\n\n\n\nclustermy_workflowpoisson_dictInputsrun\n\nrun\n\n\n\nclustermy_workflowpoisson_dictOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowpoisson_dictInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowpoisson_dictOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowpoisson_dictOutputsWithInjectionpoisson\n\npoisson: dict\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609Inputsobj\n\nobj\n\n\n\nclustermy_workflowpoisson_dictOutputsWithInjectionpoisson->clustermy_workflowinjected_GetItem_5839915180513303609Inputsobj\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100Inputsobj\n\nobj\n\n\n\nclustermy_workflowpoisson_dictOutputsWithInjectionpoisson->clustermy_workflowinjected_GetItem_m3497348724979863100Inputsobj\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458Inputsobj\n\nobj\n\n\n\nclustermy_workflowpoisson_dictOutputsWithInjectionpoisson->clustermy_workflowinjected_GetItem_m6105838930489235458Inputsobj\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609Inputsrun\n\nrun\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609Inputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectiongetitem\n\ngetitem\n\n\n\nclustermy_workflowpvbatch_output_fileInputspoisson_output_pvd_file\n\npoisson_output_pvd_file: str\n\n\n\nclustermy_workflowinjected_GetItem_5839915180513303609OutputsWithInjectiongetitem->clustermy_workflowpvbatch_output_fileInputspoisson_output_pvd_file\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100Inputsrun\n\nrun\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100Inputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectiongetitem\n\ngetitem\n\n\n\nclustermy_workflowpvbatch_output_fileInputspoisson_output_vtu_file\n\npoisson_output_vtu_file: str\n\n\n\nclustermy_workflowinjected_GetItem_m3497348724979863100OutputsWithInjectiongetitem->clustermy_workflowpvbatch_output_fileInputspoisson_output_vtu_file\n\n\n\n\n\n\nclustermy_workflowpvbatch_output_fileInputsrun\n\nrun\n\n\n\nclustermy_workflowpvbatch_output_fileOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowpvbatch_output_fileInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowpvbatch_output_fileOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowpvbatch_output_fileOutputsWithInjectionplot_over_line\n\nplot_over_line: str\n\n\n\nclustermy_workflowmacros_tex_fileInputspvbatch_output_file\n\npvbatch_output_file: str\n\n\n\nclustermy_workflowpvbatch_output_fileOutputsWithInjectionplot_over_line->clustermy_workflowmacros_tex_fileInputspvbatch_output_file\n\n\n\n\n\n\nclustermy_workflowpaper_outputInputsplot_file\n\nplot_file: str\n\n\n\nclustermy_workflowpvbatch_output_fileOutputsWithInjectionplot_over_line->clustermy_workflowpaper_outputInputsplot_file\n\n\n\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458Inputsrun\n\nrun\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458Inputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectiongetitem\n\ngetitem\n\n\n\nclustermy_workflowmacros_tex_fileInputsndofs\n\nndofs: int\n\n\n\nclustermy_workflowinjected_GetItem_m6105838930489235458OutputsWithInjectiongetitem->clustermy_workflowmacros_tex_fileInputsndofs\n\n\n\n\n\n\nclustermy_workflowmacros_tex_fileInputsrun\n\nrun\n\n\n\nclustermy_workflowmacros_tex_fileOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowmacros_tex_fileInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowmacros_tex_fileOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowmacros_tex_fileOutputsWithInjectionsubstitute_macros\n\nsubstitute_macros: str\n\n\n\nclustermy_workflowpaper_outputInputsmacros_tex\n\nmacros_tex: str\n\n\n\nclustermy_workflowmacros_tex_fileOutputsWithInjectionsubstitute_macros->clustermy_workflowpaper_outputInputsmacros_tex\n\n\n\n\n\n\nclustermy_workflowpaper_outputInputsrun\n\nrun\n\n\n\nclustermy_workflowpaper_outputOutputsWithInjectionran\n\nran\n\n\n\n\nclustermy_workflowpaper_outputInputsaccumulate_and_run\n\naccumulate_and_run\n\n\n\nclustermy_workflowpaper_outputOutputsWithInjectionfailed\n\nfailed\n\n\n\nclustermy_workflowpaper_outputOutputsWithInjectioncompile_paper\n\ncompile_paper: str\n\n\n\nclustermy_workflowpaper_outputOutputsWithInjectioncompile_paper->clustermy_workflowOutputsWithInjectionpaper_output__compile_paper\n\n\n\n\n\n\n", + "text/plain": "" + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "id": "63f29646-3846-4a97-a033-20e9df0ac214", + "cell_type": "code", + "source": "workflow_json_filename = \"pyiron_workflow_nfdi.json\"", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "id": "f62111ba-9271-4987-9c7e-3b1c9f9eae7a", + "cell_type": "code", + "source": "write_workflow_json(graph_as_dict=wf.graph_as_dict, file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 16 + }, + { + "id": "d789971e-8f41-45fa-832a-11fd72dea96e", + "cell_type": "markdown", + "source": "## Load Workflow with aiida\n\n`load_workflow_json` rebuilds the pipeline as an `aiida-workgraph` `WorkGraph` from `pyiron_workflow_nfdi.json`, after connecting to a local AiiDA profile with `load_profile()`. `wg.run()` re-executes the whole pipeline under `aiida`.", + "metadata": {} + }, + { + "id": "a6e85e89-5d7a-40eb-809c-ac44974e3fd7", + "cell_type": "code", + "source": "from aiida import load_profile\n\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 17, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "id": "3de84fb7-b01b-4541-868a-92e881eb6e77", + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 18 + }, + { + "id": "b33f5528-10cd-47c8-8723-622902978859", + "cell_type": "code", + "source": "wg = load_workflow_json(file_name=workflow_json_filename)\nwg", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 19, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "6641ced7603742b8b28900587d764b7c" + } + }, + "metadata": {} + } + ], + "execution_count": 19 + }, + { + "id": "15282ca1-d339-40e7-ad68-8a7613ed08da", + "cell_type": "code", + "source": "wg.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 09:30:18 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_mesh1\n05/24/2025 09:30:20 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: generate_mesh1, type: PyFunction, finished.\n05/24/2025 09:30:20 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: convert_to_xdmf2\n05/24/2025 09:30:22 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: convert_to_xdmf2, type: PyFunction, finished.\n05/24/2025 09:30:22 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: poisson3\n05/24/2025 09:30:30 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: poisson3, type: PyFunction, finished.\n05/24/2025 09:30:30 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_over_line4\n05/24/2025 09:30:33 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: plot_over_line4, type: PyFunction, finished.\n05/24/2025 09:30:33 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: substitute_macros5\n05/24/2025 09:30:34 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: substitute_macros5, type: PyFunction, finished.\n05/24/2025 09:30:34 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: compile_paper6\n05/24/2025 09:30:50 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|update_task_state]: Task: compile_paper6, type: PyFunction, finished.\n05/24/2025 09:30:50 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 09:30:50 AM <282> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [3|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 20 + }, + { + "id": "55dc8d12-dfe6-4465-a368-b7e590ae6800", + "cell_type": "markdown", + "source": "## Load Workflow with jobflow\n\nThe same JSON is reconstructed as a jobflow `Flow` and executed locally with `run_locally`, independently of the `pyiron_workflow` objects used to define it.", + "metadata": {} + }, + { + "id": "dff46eb8-e0e7-49bb-8c40-0db2df133124", + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 21 + }, + { + "id": "6a189459-84e4-4738-ada1-37ee8c65b2ab", + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 22 + }, + { + "id": "6e7f3614-c971-4e2d-83f0-96f0d0fc04de", + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=workflow_json_filename)", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 23 + }, + { + "id": "2d87ed45-f5d9-403f-a03a-26be4a47a3ef", + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 09:31:15,165 INFO Started executing jobs locally\n2025-05-24 09:31:15,364 INFO Starting job - generate_mesh (4cc4e3d9-39aa-4c20-a047-a029b6812d61)\n2025-05-24 09:31:16,480 INFO Finished job - generate_mesh (4cc4e3d9-39aa-4c20-a047-a029b6812d61)\n2025-05-24 09:31:16,481 INFO Starting job - convert_to_xdmf (8527c563-c0b1-4ae5-a6c3-00ae25ad2508)\n2025-05-24 09:31:17,834 INFO Finished job - convert_to_xdmf (8527c563-c0b1-4ae5-a6c3-00ae25ad2508)\n2025-05-24 09:31:17,836 INFO Starting job - poisson (58b31d24-51f9-4b9a-ac3e-88a7f01a09ad)\n2025-05-24 09:31:20,318 INFO Finished job - poisson (58b31d24-51f9-4b9a-ac3e-88a7f01a09ad)\n2025-05-24 09:31:20,318 INFO Starting job - plot_over_line (b095dc38-f858-4c34-876c-df8f8b851a5f)\n2025-05-24 09:31:21,717 INFO Finished job - plot_over_line (b095dc38-f858-4c34-876c-df8f8b851a5f)\n2025-05-24 09:31:21,718 INFO Starting job - substitute_macros (656e820d-20d5-4665-bb8a-43807ed6b2e9)\n2025-05-24 09:31:22,542 INFO Finished job - substitute_macros (656e820d-20d5-4665-bb8a-43807ed6b2e9)\n2025-05-24 09:31:22,543 INFO Starting job - compile_paper (52de4e6d-7574-401b-bcdb-ae6c298cc6b9)\n2025-05-24 09:31:24,556 INFO Finished job - compile_paper (52de4e6d-7574-401b-bcdb-ae6c298cc6b9)\n2025-05-24 09:31:24,557 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 24, + "output_type": "execute_result", + "data": { + "text/plain": "{'4cc4e3d9-39aa-4c20-a047-a029b6812d61': {1: Response(output='/home/jovyan/example_workflows/nfdi/preprocessing/square.msh', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '8527c563-c0b1-4ae5-a6c3-00ae25ad2508': {1: Response(output={'xdmf_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.xdmf', 'h5_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.h5'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '58b31d24-51f9-4b9a-ac3e-88a7f01a09ad': {1: Response(output={'numdofs': 357, 'pvd_file': '/home/jovyan/example_workflows/nfdi/processing/poisson.pvd', 'vtu_file': '/home/jovyan/example_workflows/nfdi/processing/poisson000000.vtu'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'b095dc38-f858-4c34-876c-df8f8b851a5f': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/plotoverline.csv', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '656e820d-20d5-4665-bb8a-43807ed6b2e9': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/macros.tex', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '52de4e6d-7574-401b-bcdb-ae6c298cc6b9': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))}}" + }, + "metadata": {} + } + ], + "execution_count": 24 + }, + { + "id": "ebd3248b-ff75-40bf-a488-b5e338342671", + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_base\n\nFinally, the graph is loaded into a list of delayed `pyiron_base` jobs. `.draw()` visualizes the dependency chain and `.pull()` triggers execution, returning the final `paper.pdf` path.", + "metadata": {} + }, + { + "id": "c7e1047f-0d42-4777-911d-ab405396401a", + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 25 + }, + { + "id": "6aeba274-10d3-4e79-8ee4-4d870f163939", + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_ba0bf2668d8f7b42ff717c2cb79b5920\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d9280>\n\n\n\nplot_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\nplot_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8da0>\n\n\n\nplot_file_5007b1d67345934b2ffcdeaaad6ea2ab->create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920\n\n\n\n\n\npoisson_output_vtu_file_51141ca0ec0a07922807865d8a067793\n\npoisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8a40>\n\n\n\npoisson_output_vtu_file_51141ca0ec0a07922807865d8a067793->plot_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\n\n\n\n\npvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\npvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8da0>\n\n\n\npoisson_output_vtu_file_51141ca0ec0a07922807865d8a067793->pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\n\n\n\n\nmacros_tex_02d82cedf90ad323f7eef57ddf383160\n\nmacros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d9070>\n\n\n\npvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab->macros_tex_02d82cedf90ad323f7eef57ddf383160\n\n\n\n\n\nmeshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88\n\nmeshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x76dba3cb2600>\n\n\n\nmeshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88->poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793\n\n\n\n\n\npoisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513\n\npoisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8a10>\n\n\n\nmeshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88->poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513\n\n\n\n\n\nndofs_ac7427db28c0527371c0e9b27a57024b\n\nndofs=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8e30>\n\n\n\nmeshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88->ndofs_ac7427db28c0527371c0e9b27a57024b\n\n\n\n\n\npoisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513->plot_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\n\n\n\n\npoisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513->pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\n\n\n\n\nndofs_ac7427db28c0527371c0e9b27a57024b->macros_tex_02d82cedf90ad323f7eef57ddf383160\n\n\n\n\n\ngmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18\n\ngmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x76dba89319d0>\n\n\n\ngmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18->meshio_output_h5_0af06cb14e9ddc7585647c44e4d4ef88\n\n\n\n\n\nmeshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173\n\nmeshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x76dba30d8710>\n\n\n\ngmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18->meshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173\n\n\n\n\n\nmeshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173->poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793\n\n\n\n\n\nmeshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173->poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513\n\n\n\n\n\nmeshio_output_xdmf_c383e7d9f83d7cdc8ae04ebf9c264173->ndofs_ac7427db28c0527371c0e9b27a57024b\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20\n\ndomain_size=2.0\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_02d82cedf90ad323f7eef57ddf383160\n\n\n\n\n\nmacros_tex_02d82cedf90ad323f7eef57ddf383160->create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696\n\nsource_directory=/home/jovyan/example_workflows/nfdi/source\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_ba0bf2668d8f7b42ff717c2cb79b5920\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_51141ca0ec0a07922807865d8a067793\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_5007b1d67345934b2ffcdeaaad6ea2ab\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_0440a581658dfd1533b4c5d08eaf8513\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_ac7427db28c0527371c0e9b27a57024b\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_6ef41eb684984daa8337ee65c2aa9f18\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_02d82cedf90ad323f7eef57ddf383160\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 26 + }, + { + "id": "ea92c7ad-afef-423c-b8fa-9d24c1267c73", + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job generate_mesh_47725c16637f799ac042e47468005db3 was saved and received the ID: 1\nThe job convert_to_xdmf_d6a46eb9a4ec352aa996e783ec3c785f was saved and received the ID: 2\nThe job poisson_3c147fc86db87cf0c0f94bda333f8cd8 was saved and received the ID: 3\nThe job plot_over_line_ef50933291910dadcc8311924971e127 was saved and received the ID: 4\nThe job substitute_macros_63766eafd6b1980c7832dd8c9a97c96e was saved and received the ID: 5\nThe job compile_paper_128d1d58374953c00e95b8de62cbb10b was saved and received the ID: 6\n" + }, + { + "execution_count": 27, + "output_type": "execute_result", + "data": { + "text/plain": "'/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf'" + }, + "metadata": {} + } + ], + "execution_count": 27 + }, + { + "id": "32287743-e59a-467c-92fe-8586f199e36e", + "cell_type": "code", + "source": "", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": null + } + ] +} diff --git a/_sources/example_workflows/nfdi/universal_workflow.ipynb b/_sources/example_workflows/nfdi/universal_workflow.ipynb new file mode 100644 index 00000000..8ceeaad3 --- /dev/null +++ b/_sources/example_workflows/nfdi/universal_workflow.ipynb @@ -0,0 +1,357 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 4, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "# Load Simple Workflow\n\nThis notebook loads the single, pre-existing NFDI4Ing `workflow.json` — the file-based benchmark from [`workflow.py`](workflow.py) that runs `gmsh`, `meshio`, a FEniCS-based Poisson solver, ParaView's `pvbatch` and `tectonic` in turn — with several different engines. Since the JSON only describes function nodes, inputs, outputs and the edges between them, it does not matter which engine originally wrote it; any of the engines below can load and execute it, each re-running the same chain of external tools.", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Plot\n\nBefore running the workflow with any engine, `python_workflow_definition.plot.plot` renders `workflow.json` directly as a graph of function, input and output nodes — independent of any particular workflow engine.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.plot import plot", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "source": "plot(file_name='workflow.json')", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\n0\n\nworkflow.generate_mesh\n\n\n\n1\n\nworkflow.convert_to_xdmf\n\n\n\n0->1\n\n\ngmsh_output_file\n\n\n\n2\n\nworkflow.poisson\n\n\n\n1->2\n\n\n\n\n\n3\n\nworkflow.plot_over_line\n\n\n\n2->3\n\n\n\n\n\n4\n\nworkflow.substitute_macros\n\n\n\n2->4\n\n\nndofs=result[numdofs]\n\n\n\n3->4\n\n\npvbatch_output_file\n\n\n\n5\n\nworkflow.compile_paper\n\n\n\n3->5\n\n\nplot_file\n\n\n\n4->5\n\n\nmacros_tex\n\n\n\n8\n\nresult\n\n\n\n5->8\n\n\n\n\n\n6\n\n2.0\n\n\n\n6->0\n\n\ndomain_size\n\n\n\n6->4\n\n\ndomain_size\n\n\n\n7\n\n/home/jovyan/example_workflows/nfdi/source\n\n\n\n7->0\n\n\nsource_directory\n\n\n\n7->2\n\n\nsource_directory\n\n\n\n7->3\n\n\nsource_directory\n\n\n\n7->4\n\n\nsource_directory\n\n\n\n7->5\n\n\nsource_directory\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": "## Aiida\n\nLoading the JSON into `aiida-workgraph` requires connecting to an AiiDA profile first via `load_profile()`; the workflow is then reconstructed as a `WorkGraph` and executed with `.run()`, which re-runs `generate_mesh`, `convert_to_xdmf`, `poisson`, `plot_over_line`, `substitute_macros` and `compile_paper` in order.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json\n\nfrom aiida import load_profile\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 3, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "source": "workgraph = load_workflow_json(file_name='workflow.json')", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "source": "# TODO: Create inputs rather than tasks out of data nodes\nworkgraph", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 5, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "b9f711f3af4b4f9c9f6260d595667b1d" + } + }, + "metadata": {} + } + ], + "execution_count": 5 + }, + { + "cell_type": "code", + "source": "\nworkgraph.run()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 05:45:59 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_mesh1\n05/24/2025 05:46:01 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: generate_mesh1, type: PyFunction, finished.\n05/24/2025 05:46:01 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: convert_to_xdmf2\n05/24/2025 05:46:03 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: convert_to_xdmf2, type: PyFunction, finished.\n05/24/2025 05:46:03 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: poisson3\n05/24/2025 05:46:06 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: poisson3, type: PyFunction, finished.\n05/24/2025 05:46:06 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_over_line4\n05/24/2025 05:46:08 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: plot_over_line4, type: PyFunction, finished.\n05/24/2025 05:46:08 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: substitute_macros5\n05/24/2025 05:46:09 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: substitute_macros5, type: PyFunction, finished.\n05/24/2025 05:46:09 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: compile_paper6\n05/24/2025 05:46:12 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: compile_paper6, type: PyFunction, finished.\n05/24/2025 05:46:12 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 05:46:12 AM <5606> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|finalize]: Finalize workgraph.\n" + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": "## executorlib\n\n`python_workflow_definition.executorlib.load_workflow_json` submits each function node to the given `Executor` and returns the `Future` of the final node (the compiled `paper.pdf` path); calling `.result()` blocks until the whole chain of external tools has completed.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from executorlib import SingleNodeExecutor", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.executorlib import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "cell_type": "code", + "source": "with SingleNodeExecutor(max_workers=1) as exe:\n result = load_workflow_json(file_name=\"workflow.json\", exe=exe).result()", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 9 + }, + { + "cell_type": "code", + "source": "result", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 10, + "output_type": "execute_result", + "data": { + "text/plain": "'/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf'" + }, + "metadata": {} + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": "## Jobflow\n\nThe JSON is reconstructed as a jobflow `Flow` and executed locally with `run_locally`.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 05:46:27,374 INFO Started executing jobs locally\n2025-05-24 05:46:27,453 INFO Starting job - generate_mesh (e65df967-702e-4def-9172-6be0b3b95604)\n2025-05-24 05:46:28,600 INFO Finished job - generate_mesh (e65df967-702e-4def-9172-6be0b3b95604)\n2025-05-24 05:46:28,601 INFO Starting job - convert_to_xdmf (173b17f6-c6d6-4002-81f3-fdc267be7837)\n2025-05-24 05:46:29,943 INFO Finished job - convert_to_xdmf (173b17f6-c6d6-4002-81f3-fdc267be7837)\n2025-05-24 05:46:29,944 INFO Starting job - poisson (91e67802-de2e-462d-a076-536c2e874b0b)\n2025-05-24 05:46:32,711 INFO Finished job - poisson (91e67802-de2e-462d-a076-536c2e874b0b)\n2025-05-24 05:46:32,712 INFO Starting job - plot_over_line (5094148b-2ae8-4f88-bbf3-73b68fe02fb1)\n2025-05-24 05:46:34,138 INFO Finished job - plot_over_line (5094148b-2ae8-4f88-bbf3-73b68fe02fb1)\n2025-05-24 05:46:34,139 INFO Starting job - substitute_macros (8badd91e-4495-491e-b978-0b1abac4c680)\n2025-05-24 05:46:34,939 INFO Finished job - substitute_macros (8badd91e-4495-491e-b978-0b1abac4c680)\n2025-05-24 05:46:34,940 INFO Starting job - compile_paper (ae640287-0fda-4682-8bd9-da3251f2cd30)\n2025-05-24 05:46:37,022 INFO Finished job - compile_paper (ae640287-0fda-4682-8bd9-da3251f2cd30)\n2025-05-24 05:46:37,024 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 14, + "output_type": "execute_result", + "data": { + "text/plain": "{'e65df967-702e-4def-9172-6be0b3b95604': {1: Response(output='/home/jovyan/example_workflows/nfdi/preprocessing/square.msh', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '173b17f6-c6d6-4002-81f3-fdc267be7837': {1: Response(output={'xdmf_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.xdmf', 'h5_file': '/home/jovyan/example_workflows/nfdi/preprocessing/square.h5'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '91e67802-de2e-462d-a076-536c2e874b0b': {1: Response(output={'numdofs': 357, 'pvd_file': '/home/jovyan/example_workflows/nfdi/processing/poisson.pvd', 'vtu_file': '/home/jovyan/example_workflows/nfdi/processing/poisson000000.vtu'}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '5094148b-2ae8-4f88-bbf3-73b68fe02fb1': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/plotoverline.csv', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n '8badd91e-4495-491e-b978-0b1abac4c680': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/macros.tex', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))},\n 'ae640287-0fda-4682-8bd9-da3251f2cd30': {1: Response(output='/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf', detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/nfdi'))}}" + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": "## pyiron\n\nLoading the JSON into `pyiron_base` produces a list of delayed jobs; `.draw()` visualizes the dependency graph and `.pull()` triggers execution of the whole chain, again writing intermediate files to `preprocessing/`, `processing/` and `postprocessing/`.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=\"workflow.json\")\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_724cfd00ffeb70f8b463a938195e0447\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7cace97128d0>\n\n\n\nmacros_tex_b52804e5fa845b3657fa99b738e02cf7\n\nmacros_tex=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9712660>\n\n\n\nmacros_tex_b52804e5fa845b3657fa99b738e02cf7->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\npvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\npvbatch_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9712330>\n\n\n\npvbatch_output_file_554a54a50a86b23416c0daf6ab0938df->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\npoisson_output_pvd_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711fd0>\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nplot_file_554a54a50a86b23416c0daf6ab0938df\n\nplot_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9712330>\n\n\n\npoisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nplot_file_554a54a50a86b23416c0daf6ab0938df->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1\n\nmeshio_output_xdmf=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711d60>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\npoisson_output_vtu_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711fa0>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nndofs_e826761b60042b070e0c0a24b472ee26\n\nndofs=<pyiron_base.project.delayed.DelayedObject object at 0x7cace97123c0>\n\n\n\nmeshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\npoisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nndofs_e826761b60042b070e0c0a24b472ee26->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\ngmsh_output_file=<pyiron_base.project.delayed.DelayedObject object at 0x7cace97119a0>\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_xdmf_52103bbf2f92608bdb3c6bedb045e0e1\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe\n\nmeshio_output_h5=<pyiron_base.project.delayed.DelayedObject object at 0x7cace9711d30>\n\n\n\ngmsh_output_file_553a0d07e32ca83a3640e955a7b868a4->meshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nmeshio_output_h5_0e11ecf3d5834e399bb91f99309bf3fe->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20\n\ndomain_size=2.0\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\ndomain_size_f12a7f1986b9dd058dfc666dbe230b20->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696\n\nsource_directory=/home/jovyan/example_workflows/nfdi/source\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->create_function_job_724cfd00ffeb70f8b463a938195e0447\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->macros_tex_b52804e5fa845b3657fa99b738e02cf7\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->pvbatch_output_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_pvd_file_50ce5e5ed091c2b7a77b69e1c1750ad9\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->plot_file_554a54a50a86b23416c0daf6ab0938df\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->poisson_output_vtu_file_fdcc35c5e09c1b2a481c5350749d9810\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->ndofs_e826761b60042b070e0c0a24b472ee26\n\n\n\n\n\nsource_directory_053958014e7cd4a4df22cfa51c9fc696->gmsh_output_file_553a0d07e32ca83a3640e955a7b868a4\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 16 + }, + { + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job generate_mesh_47725c16637f799ac042e47468005db3 was saved and received the ID: 1\nThe job convert_to_xdmf_d6a46eb9a4ec352aa996e783ec3c785f was saved and received the ID: 2\nThe job poisson_3c147fc86db87cf0c0f94bda333f8cd8 was saved and received the ID: 3\nThe job plot_over_line_ef50933291910dadcc8311924971e127 was saved and received the ID: 4\nThe job substitute_macros_63766eafd6b1980c7832dd8c9a97c96e was saved and received the ID: 5\nThe job compile_paper_128d1d58374953c00e95b8de62cbb10b was saved and received the ID: 6\n" + }, + { + "execution_count": 17, + "output_type": "execute_result", + "data": { + "text/plain": "'/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf'" + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the workflow is loaded into a `pyiron_workflow` `Workflow` object, drawn with `.draw()` and executed with `.run()`." + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=\"workflow.json\")" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Python\n\nAs a baseline, `python_workflow_definition.purepython.load_workflow_json` interprets the JSON directly in plain Python, with no workflow engine involved: it evaluates each function node in dependency order — invoking `gmsh`, `meshio`, the Poisson solver, `pvbatch` and `tectonic` via `conda_subprocess` exactly as `workflow.py` defines — and returns the final result." + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.purepython import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 18 + }, + { + "cell_type": "code", + "source": "load_workflow_json(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 19, + "output_type": "execute_result", + "data": { + "text/plain": "'/home/jovyan/example_workflows/nfdi/postprocessing/paper.pdf'" + }, + "metadata": {} + } + ], + "execution_count": 19 + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/quantum_espresso/aiida.ipynb b/_sources/example_workflows/quantum_espresso/aiida.ipynb new file mode 100644 index 00000000..8b297f21 --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/aiida.ipynb @@ -0,0 +1,5800 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": "# aiida-workgraph\n\nThis notebook builds the Quantum Espresso energy-volume-curve workflow directly with [`aiida-workgraph`](https://github.com/aiidateam/aiida-workgraph) and exports it as a PWD `workflow.json`. The second half of the notebook loads that same JSON file with `jobflow`, `pyiron_base` and `pyiron_workflow` to show that a graph built with one engine can be executed by another." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Define workflow with aiida\n\n`aiida-workgraph` represents a workflow as a `WorkGraph` built from `task`s, each wrapping a Python function; connecting a task's output to another task's input builds up the graph. `load_profile()` connects to the local AiiDA profile/database, which is required before any AiiDA node can be created, since every task and its result are stored there for provenance." + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import write_workflow_json\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", + "execution_count": 2, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from aiida_workgraph import task, WorkGraph" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from workflow import (\n", + " generate_structures,\n", + " get_bulk_structure,\n", + " calculate_qe as _calculate_qe,\n", + " plot_energy_volume_curve,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "source": "`calculate_qe` (defined in [`workflow.py`](workflow.py)) returns a dict with `energy`, `volume` and `structure` keys. Wrapping it with `task(outputs=[...])` tells `aiida-workgraph` to expose these as separate output sockets (`.outputs.energy`, `.outputs.volume`, `.outputs.structure`) instead of a single opaque result, so downstream tasks can connect to individual keys.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "calculate_qe = task(outputs=[\"energy\", \"volume\", \"structure\"])(_calculate_qe)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wg = WorkGraph(\"wg-qe\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Prepare the inputs\n\nScalar inputs are wrapped as AiiDA data types (`orm.Str`, `orm.Float`, `orm.Bool`, `orm.Dict`, `orm.List`) so AiiDA can track their provenance. `strain_lst` are the five volumetric strains (0.9-1.1) that will later be applied to the relaxed structure to sample the energy-volume curve." + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "trusted": true + }, + "outputs": [], + "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", + "metadata": {}, + "source": "### Build the task graph\n\nThe pipeline is: `get_bulk_structure` builds the initial Al structure, `calculate_qe` relaxes it (`vc-relax`), `generate_structures` applies the strains, and one `calculate_qe` (`scf`) task per strained structure computes its energy and volume. `get_dict` bundles the structure, calculation type, k-points, pseudopotentials and smearing into the `input_dict` argument `calculate_qe` expects." + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "get_bulk_structure_task = wg.add_task(\n", + " get_bulk_structure,\n", + " element=element,\n", + " a=a,\n", + " cubic=cubic,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "relax_prepare_input_dict_task = wg.add_task(\n", + " 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", + " input_dict=relax_prepare_input_dict_task.outputs.result,\n", + " working_directory=relax_workdir,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "source": "`generate_structures` applies each of the five strains to the relaxed structure, producing five strained structures (`s_0` ... `s_4`). This is the fan-out point of the workflow: the loop below adds one independent `scf` `calculate_qe` task per strained structure, and their `energy`/`volume` outputs are collected into two lists (via `get_list` tasks) for the final plot.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "generate_structures_task = wg.add_task(\n", + " generate_structures,\n", + " structure=relax_task.outputs.structure,\n", + " strain_lst=strain_lst,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "get_volumes_task = wg.add_task(get_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "get_energies_task = wg.add_task(get_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "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", + " 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", + " 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_inputs({f\"{i}\": scf_qe_task.outputs.energy})\n", + " get_volumes_task.set_inputs({f\"{i}\": scf_qe_task.outputs.volume})" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "plot_energy_volume_curve_task = wg.add_task(\n", + " plot_energy_volume_curve,\n", + " volume_lst=get_volumes_task.outputs.result,\n", + " energy_lst=get_energies_task.outputs.result,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "source": "Displaying `wg` renders an interactive `NodeGraphWidget` of the task graph, which is useful to check the wiring before running it. `write_workflow_json` then serializes the `WorkGraph` into the PWD `workflow.json` format (nodes = functions/inputs/outputs, edges = data connections) so it can be loaded by another engine.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8cde6dcdf8224a4a9c002550a0165c73", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'wg-qe',…" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wg" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "_ = write_workflow_json(wg=wg, file_name=workflow_json_filename)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_bulk_structure\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.generate_structures\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 6,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 7,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 8,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 9,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 10,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 11,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 12,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 13,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 14,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 15,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 16,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.plot_energy_volume_curve\"\n", + " },\n", + " {\n", + " \"id\": 17,\n", + " \"type\": \"input\",\n", + " \"name\": \"element\",\n", + " \"value\": \"Al\"\n", + " },\n", + " {\n", + " \"id\": 18,\n", + " \"type\": \"input\",\n", + " \"name\": \"a\",\n", + " \"value\": 4.04\n", + " },\n", + " {\n", + " \"id\": 19,\n", + " \"type\": \"input\",\n", + " \"name\": \"cubic\",\n", + " \"value\": true\n", + " },\n", + " {\n", + " \"id\": 20,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_0\",\n", + " \"value\": \"vc-relax\"\n", + " },\n", + " {\n", + " \"id\": 21,\n", + " \"type\": \"input\",\n", + " \"name\": \"kpts\",\n", + " \"value\": [\n", + " 3,\n", + " 3,\n", + " 3\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 22,\n", + " \"type\": \"input\",\n", + " \"name\": \"pseudopotentials\",\n", + " \"value\": {\n", + " \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n", + " }\n", + " },\n", + " {\n", + " \"id\": 23,\n", + " \"type\": \"input\",\n", + " \"name\": \"smearing\",\n", + " \"value\": 0.02\n", + " },\n", + " {\n", + " \"id\": 24,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_0\",\n", + " \"value\": \"mini\"\n", + " },\n", + " {\n", + " \"id\": 25,\n", + " \"type\": \"input\",\n", + " \"name\": \"strain_lst\",\n", + " \"value\": [\n", + " 0.9,\n", + " 0.95,\n", + " 1.0,\n", + " 1.05,\n", + " 1.1\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 26,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_1\",\n", + " \"value\": \"scf\"\n", + " },\n", + " {\n", + " \"id\": 27,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_1\",\n", + " \"value\": \"strain_0\"\n", + " },\n", + " {\n", + " \"id\": 28,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_2\",\n", + " \"value\": \"strain_1\"\n", + " },\n", + " {\n", + " \"id\": 29,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_3\",\n", + " \"value\": \"strain_2\"\n", + " },\n", + " {\n", + " \"id\": 30,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_4\",\n", + " \"value\": \"strain_3\"\n", + " },\n", + " {\n", + " \"id\": 31,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_5\",\n", + " \"value\": \"strain_4\"\n", + " },\n", + " {\n", + " \"id\": 32,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\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", + " \"target\": 32,\n", + " \"targetPort\": null,\n", + " \"source\": 16,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\n`load_workflow_json` reconstructs the same graph as a `jobflow` `Flow` of `Job`s. To show that the loaded graph behaves like a native `jobflow` object, the lattice constant `a` of the first job is overridden (4.04 -> 4.05) before the flow is executed locally with `run_locally`." + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow[0].function_kwargs[\"a\"] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-05-26 04:52:50,581 INFO Started executing jobs locally\n", + "2025-05-26 04:52:50,675 INFO Starting job - get_bulk_structure (3ac8790d-eb22-4532-be62-de8fbef1b1d6)\n", + "2025-05-26 04:52:50,678 INFO Finished job - get_bulk_structure (3ac8790d-eb22-4532-be62-de8fbef1b1d6)\n", + "2025-05-26 04:52:50,678 INFO Starting job - get_dict (c4961244-74bf-450f-8d51-1185a6fa636e)\n", + "2025-05-26 04:52:50,679 INFO Finished job - get_dict (c4961244-74bf-450f-8d51-1185a6fa636e)\n", + "2025-05-26 04:52:50,680 INFO Starting job - calculate_qe (1c454eb0-0ad4-4b71-9d98-9d767f2eeb26)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02130] 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-05-26 04:53:41,492 INFO Finished job - calculate_qe (1c454eb0-0ad4-4b71-9d98-9d767f2eeb26)\n", + "2025-05-26 04:53:41,493 INFO Starting job - generate_structures (4b55ebda-5c1f-4778-96b0-04b01637fd55)\n", + "2025-05-26 04:53:41,497 INFO Finished job - generate_structures (4b55ebda-5c1f-4778-96b0-04b01637fd55)\n", + "2025-05-26 04:53:41,498 INFO Starting job - get_dict (b565cdc4-4ce6-4a26-80aa-df13d5c66c6a)\n", + "2025-05-26 04:53:41,501 INFO Finished job - get_dict (b565cdc4-4ce6-4a26-80aa-df13d5c66c6a)\n", + "2025-05-26 04:53:41,502 INFO Starting job - get_dict (b77d779a-5ef4-444f-be7e-386f16f7ec4a)\n", + "2025-05-26 04:53:41,505 INFO Finished job - get_dict (b77d779a-5ef4-444f-be7e-386f16f7ec4a)\n", + "2025-05-26 04:53:41,506 INFO Starting job - get_dict (bd7706a1-7c30-4c5c-9319-a082dc3950ad)\n", + "2025-05-26 04:53:41,509 INFO Finished job - get_dict (bd7706a1-7c30-4c5c-9319-a082dc3950ad)\n", + "2025-05-26 04:53:41,510 INFO Starting job - get_dict (05f7faac-40ed-495e-b0dc-26ba16f805c8)\n", + "2025-05-26 04:53:41,513 INFO Finished job - get_dict (05f7faac-40ed-495e-b0dc-26ba16f805c8)\n", + "2025-05-26 04:53:41,516 INFO Starting job - get_dict (378217fd-e39a-45a3-ba59-435de2062c71)\n", + "2025-05-26 04:53:41,531 INFO Finished job - get_dict (378217fd-e39a-45a3-ba59-435de2062c71)\n", + "2025-05-26 04:53:41,532 INFO Starting job - calculate_qe (45551771-435e-4dc6-913f-07091732e0a3)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02145] 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-05-26 04:53:51,562 INFO Finished job - calculate_qe (45551771-435e-4dc6-913f-07091732e0a3)\n", + "2025-05-26 04:53:51,563 INFO Starting job - calculate_qe (548d3d66-855c-45f6-803d-894aaf90fd6b)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02155] 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-05-26 04:54:02,977 INFO Finished job - calculate_qe (548d3d66-855c-45f6-803d-894aaf90fd6b)\n", + "2025-05-26 04:54:02,978 INFO Starting job - calculate_qe (d309162b-9af7-4270-bfd5-fc0c893ba9f0)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02165] 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-05-26 04:54:14,530 INFO Finished job - calculate_qe (d309162b-9af7-4270-bfd5-fc0c893ba9f0)\n", + "2025-05-26 04:54:14,531 INFO Starting job - calculate_qe (67abe614-2777-4184-92e6-f5443def6503)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02175] 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-05-26 04:54:27,806 INFO Finished job - calculate_qe (67abe614-2777-4184-92e6-f5443def6503)\n", + "2025-05-26 04:54:27,807 INFO Starting job - calculate_qe (35826c86-14ca-4341-90f0-894b9be0d16d)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02185] 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-05-26 04:54:41,828 INFO Finished job - calculate_qe (35826c86-14ca-4341-90f0-894b9be0d16d)\n", + "2025-05-26 04:54:41,829 INFO Starting job - get_list (87cd2e29-15fc-4e35-845f-47211f6a1090)\n", + "2025-05-26 04:54:41,835 INFO Finished job - get_list (87cd2e29-15fc-4e35-845f-47211f6a1090)\n", + "2025-05-26 04:54:41,836 INFO Starting job - get_list (3b0846af-d37d-4199-897b-16f124a5516a)\n", + "2025-05-26 04:54:41,839 INFO Finished job - get_list (3b0846af-d37d-4199-897b-16f124a5516a)\n", + "2025-05-26 04:54:41,840 INFO Starting job - plot_energy_volume_curve (88a18290-ffeb-40b6-b0e8-fca1ee6fade4)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-05-26 04:54:41,900 INFO Finished job - plot_energy_volume_curve (88a18290-ffeb-40b6-b0e8-fca1ee6fade4)\n", + "2025-05-26 04:54:41,901 INFO Finished executing jobs locally\n" + ] + }, + { + "data": { + "text/plain": [ + "{'3ac8790d-eb22-4532-be62-de8fbef1b1d6': {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/example_workflows/quantum_espresso'))},\n", + " 'c4961244-74bf-450f-8d51-1185a6fa636e': {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/example_workflows/quantum_espresso'))},\n", + " '1c454eb0-0ad4-4b71-9d98-9d767f2eeb26': {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.045637215946779, 0.0, 0.0], [0.0, 4.045637215946779, 0.0], [0.0, 0.0, 4.045637215946779]], \"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.0228186079733894, 2.0228186079733894], [2.0228186079733894, 0.0, 2.0228186079733894], [2.0228186079733894, 2.0228186079733894, 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.9365262253605, 'volume': 66.21567448235946}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '4b55ebda-5c1f-4778-96b0-04b01637fd55': {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.9060197859620884, 0.0, 0.0], [0.0, 3.9060197859620884, 0.0], [0.0, 0.0, 3.9060197859620884]], \"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.9530098929810442, 1.9530098929810442], [1.9530098929810442, 0.0, 1.9530098929810442], [1.9530098929810442, 1.9530098929810442, 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.977053844317988, 0.0, 0.0], [0.0, 3.977053844317988, 0.0], [0.0, 0.0, 3.977053844317988]], \"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.9885269221589943, 1.9885269221589943], [1.9885269221589943, 0.0, 1.9885269221589943], [1.9885269221589943, 1.9885269221589943, 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.045637215946779, 0.0, 0.0], [0.0, 4.045637215946779, 0.0], [0.0, 0.0, 4.045637215946779]], \"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.0228186079733894, 2.0228186079733894], [2.0228186079733894, 0.0, 2.0228186079733894], [2.0228186079733894, 2.0228186079733894, 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.111970927282893, 0.0, 0.0], [0.0, 4.111970927282893, 0.0], [0.0, 0.0, 4.111970927282893]], \"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.0559854636414463, 2.0559854636414463], [2.0559854636414463, 0.0, 2.0559854636414463], [2.0559854636414463, 2.0559854636414463, 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.176230852372117, 0.0, 0.0], [0.0, 4.176230852372117, 0.0], [0.0, 0.0, 4.176230852372117]], \"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.0881154261860586, 2.0881154261860586], [2.0881154261860586, 0.0, 2.0881154261860586], [2.0881154261860586, 2.0881154261860586, 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/example_workflows/quantum_espresso'))},\n", + " 'b565cdc4-4ce6-4a26-80aa-df13d5c66c6a': {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.9060197859620884, 0.0, 0.0], [0.0, 3.9060197859620884, 0.0], [0.0, 0.0, 3.9060197859620884]], \"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.9530098929810442, 1.9530098929810442], [1.9530098929810442, 0.0, 1.9530098929810442], [1.9530098929810442, 1.9530098929810442, 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/example_workflows/quantum_espresso'))},\n", + " 'b77d779a-5ef4-444f-be7e-386f16f7ec4a': {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.977053844317988, 0.0, 0.0], [0.0, 3.977053844317988, 0.0], [0.0, 0.0, 3.977053844317988]], \"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.9885269221589943, 1.9885269221589943], [1.9885269221589943, 0.0, 1.9885269221589943], [1.9885269221589943, 1.9885269221589943, 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/example_workflows/quantum_espresso'))},\n", + " 'bd7706a1-7c30-4c5c-9319-a082dc3950ad': {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.045637215946779, 0.0, 0.0], [0.0, 4.045637215946779, 0.0], [0.0, 0.0, 4.045637215946779]], \"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.0228186079733894, 2.0228186079733894], [2.0228186079733894, 0.0, 2.0228186079733894], [2.0228186079733894, 2.0228186079733894, 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/example_workflows/quantum_espresso'))},\n", + " '05f7faac-40ed-495e-b0dc-26ba16f805c8': {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.111970927282893, 0.0, 0.0], [0.0, 4.111970927282893, 0.0], [0.0, 0.0, 4.111970927282893]], \"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.0559854636414463, 2.0559854636414463], [2.0559854636414463, 0.0, 2.0559854636414463], [2.0559854636414463, 2.0559854636414463, 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/example_workflows/quantum_espresso'))},\n", + " '378217fd-e39a-45a3-ba59-435de2062c71': {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.176230852372117, 0.0, 0.0], [0.0, 4.176230852372117, 0.0], [0.0, 0.0, 4.176230852372117]], \"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.0881154261860586, 2.0881154261860586], [2.0881154261860586, 0.0, 2.0881154261860586], [2.0881154261860586, 2.0881154261860586, 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/example_workflows/quantum_espresso'))},\n", + " '45551771-435e-4dc6-913f-07091732e0a3': {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.906019768889126, 0.0, 0.0], [0.0, 3.906019768889126, 0.0], [0.0, 0.0, 3.906019768889126]], \"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.8457446150642, 'volume': 59.59410625267737}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '548d3d66-855c-45f6-803d-894aaf90fd6b': {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.9770538269345397, 0.0, 0.0], [0.0, 3.9770538269345397, 0.0], [0.0, 0.0, 3.9770538269345397]], \"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.9885269135082746, 1.9885269135082746], [1.9885269135082746, 0.0, 1.9885269135082746], [1.9885269135082746, 1.9885269135082746, 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.916148859459, 'volume': 62.90488993338167}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'd309162b-9af7-4270-bfd5-fc0c893ba9f0': {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.045637198263556, 0.0, 0.0], [0.0, 4.045637198263556, 0.0], [0.0, 0.0, 4.045637198263556]], \"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.9365241668359, 'volume': 66.21567361408594}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '67abe614-2777-4184-92e6-f5443def6503': {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.111970909309726, 0.0, 0.0], [0.0, 4.111970909309726, 0.0], [0.0, 0.0, 4.111970909309726]], \"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.9192860025844, 'volume': 69.52645729479006}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '35826c86-14ca-4341-90f0-894b9be0d16d': {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.17623083411808, 0.0, 0.0], [0.0, 4.17623083411808, 0.0], [0.0, 0.0, 4.17623083411808]], \"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.8737904693412, 'volume': 72.83724097549467}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '87cd2e29-15fc-4e35-845f-47211f6a1090': {1: Response(output=[59.59410625267737, 62.90488993338167, 66.21567361408594, 69.52645729479006, 72.83724097549467], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '3b0846af-d37d-4199-897b-16f124a5516a': {1: Response(output=[-1074.8457446150642, -1074.916148859459, -1074.9365241668359, -1074.9192860025844, -1074.8737904693412], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '88a18290-ffeb-40b6-b0e8-fca1ee6fade4': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))}}" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\n`pyiron_base`'s `load_workflow_json` turns each node into a delayed pyiron job. `.draw()` renders the dependency graph, and `.pull()` triggers execution of the whole chain, saving every intermediate job (relax + 5 strained SCF calculations) to the pyiron project." + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "create_function_job_2dd37919a07881ec35b48b79261ff390\n", + "\n", + "create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a510>\n", + "\n", + "\n", + "\n", + "volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d\n", + "\n", + "volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678470>\n", + "\n", + "\n", + "\n", + "volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d->create_function_job_2dd37919a07881ec35b48b79261ff390\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_a9794c804499521a0ab9ea2cff0500a5\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679790>\n", + "\n", + "\n", + "\n", + "0_a9794c804499521a0ab9ea2cff0500a5->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_199d8ddb39100dfde98b937df71f9e62\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679640>\n", + "\n", + "\n", + "\n", + "input_dict_199d8ddb39100dfde98b937df71f9e62->0_a9794c804499521a0ab9ea2cff0500a5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_114ef2e3771735da6b268f82effc2ec4\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a300>\n", + "\n", + "\n", + "\n", + "input_dict_199d8ddb39100dfde98b937df71f9e62->0_114ef2e3771735da6b268f82effc2ec4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_63ae189fad790382f5cf0940678c54d6\n", + "\n", + "energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679700>\n", + "\n", + "\n", + "\n", + "0_114ef2e3771735da6b268f82effc2ec4->energy_lst_63ae189fad790382f5cf0940678c54d6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_d0527c0703fcb9fb054aa650b4594053\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679370>\n", + "\n", + "\n", + "\n", + "structure_d0527c0703fcb9fb054aa650b4594053->input_dict_199d8ddb39100dfde98b937df71f9e62\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_0be62b07a99e8ffab057f3214c0826d1\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678650>\n", + "\n", + "\n", + "\n", + "structure_0be62b07a99e8ffab057f3214c0826d1->structure_d0527c0703fcb9fb054aa650b4594053\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_fe302a8bff25da05cd1653eb33e11409\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679040>\n", + "\n", + "\n", + "\n", + "structure_0be62b07a99e8ffab057f3214c0826d1->structure_fe302a8bff25da05cd1653eb33e11409\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_467af4337e84ea49bfbf05893ab4d2b6\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678cb0>\n", + "\n", + "\n", + "\n", + "structure_0be62b07a99e8ffab057f3214c0826d1->structure_467af4337e84ea49bfbf05893ab4d2b6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_bac337a65cedef9d7d93433033561948\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e395200aa0>\n", + "\n", + "\n", + "\n", + "structure_0be62b07a99e8ffab057f3214c0826d1->structure_bac337a65cedef9d7d93433033561948\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_297df784365c490600edb61686e8375e\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678980>\n", + "\n", + "\n", + "\n", + "structure_0be62b07a99e8ffab057f3214c0826d1->structure_297df784365c490600edb61686e8375e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_61544c190a92e7e3c48a8e27d7493f93\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e3886792e0>\n", + "\n", + "\n", + "\n", + "structure_fe302a8bff25da05cd1653eb33e11409->input_dict_61544c190a92e7e3c48a8e27d7493f93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_c8599abc416e76a13e7fdd654083464d\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678fb0>\n", + "\n", + "\n", + "\n", + "structure_467af4337e84ea49bfbf05893ab4d2b6->input_dict_c8599abc416e76a13e7fdd654083464d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_39ff3b093c7af4b691297d26a0944f04\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388678140>\n", + "\n", + "\n", + "\n", + "structure_bac337a65cedef9d7d93433033561948->input_dict_39ff3b093c7af4b691297d26a0944f04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_9db8363b46b99584f513f7a9614dd22d\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e38b8bf4a0>\n", + "\n", + "\n", + "\n", + "structure_297df784365c490600edb61686e8375e->input_dict_9db8363b46b99584f513f7a9614dd22d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_4bf0a304f408347d8c495fe72b1f5351\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x76e388657ce0>\n", + "\n", + "\n", + "\n", + "input_dict_4bf0a304f408347d8c495fe72b1f5351->structure_0be62b07a99e8ffab057f3214c0826d1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x76e388657e00>\n", + "\n", + "\n", + "\n", + "structure_85578fbee37b882dfe6c61e46c6e3e6f->input_dict_4bf0a304f408347d8c495fe72b1f5351\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0\n", + "\n", + "element=Al\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0->structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "a_457b6d376c6fce696df148a385afa46d\n", + "\n", + "a=4.04\n", + "\n", + "\n", + "\n", + "a_457b6d376c6fce696df148a385afa46d->structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a\n", + "\n", + "cubic=True\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a->structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34\n", + "\n", + "calculation=vc-relax\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_4bf0a304f408347d8c495fe72b1f5351\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa\n", + "\n", + "kpts=[3, 3, 3]\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_199d8ddb39100dfde98b937df71f9e62\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_4bf0a304f408347d8c495fe72b1f5351\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_61544c190a92e7e3c48a8e27d7493f93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_c8599abc416e76a13e7fdd654083464d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_39ff3b093c7af4b691297d26a0944f04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_9db8363b46b99584f513f7a9614dd22d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_bd319eedb0f799b5a7b32d898fc37aac\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679730>\n", + "\n", + "\n", + "\n", + "input_dict_61544c190a92e7e3c48a8e27d7493f93->1_bd319eedb0f799b5a7b32d898fc37aac\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_1c531d3dedfcb8ccd1735fb8647a93a1\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a2d0>\n", + "\n", + "\n", + "\n", + "input_dict_61544c190a92e7e3c48a8e27d7493f93->1_1c531d3dedfcb8ccd1735fb8647a93a1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_10b8d86df31efb98fd394e77e3844197\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679c10>\n", + "\n", + "\n", + "\n", + "input_dict_c8599abc416e76a13e7fdd654083464d->2_10b8d86df31efb98fd394e77e3844197\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_9e637dbd1c8b2498c7b16c988ec96697\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a1e0>\n", + "\n", + "\n", + "\n", + "input_dict_c8599abc416e76a13e7fdd654083464d->2_9e637dbd1c8b2498c7b16c988ec96697\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_3377c152644227fb254585b855a83939\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679070>\n", + "\n", + "\n", + "\n", + "input_dict_39ff3b093c7af4b691297d26a0944f04->3_3377c152644227fb254585b855a83939\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_90324db5f7de99a93f4026efbf85ef5d\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x76e388679cd0>\n", + "\n", + "\n", + "\n", + "input_dict_39ff3b093c7af4b691297d26a0944f04->3_90324db5f7de99a93f4026efbf85ef5d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_81ac7aa8786b3edc4893de089ff4984c\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x76e3886790d0>\n", + "\n", + "\n", + "\n", + "input_dict_9db8363b46b99584f513f7a9614dd22d->4_81ac7aa8786b3edc4893de089ff4984c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x76e38867a180>\n", + "\n", + "\n", + "\n", + "input_dict_9db8363b46b99584f513f7a9614dd22d->4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10\n", + "\n", + "pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_199d8ddb39100dfde98b937df71f9e62\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_4bf0a304f408347d8c495fe72b1f5351\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_61544c190a92e7e3c48a8e27d7493f93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_c8599abc416e76a13e7fdd654083464d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_39ff3b093c7af4b691297d26a0944f04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_9db8363b46b99584f513f7a9614dd22d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9\n", + "\n", + "smearing=0.02\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_199d8ddb39100dfde98b937df71f9e62\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_4bf0a304f408347d8c495fe72b1f5351\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_61544c190a92e7e3c48a8e27d7493f93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_c8599abc416e76a13e7fdd654083464d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_39ff3b093c7af4b691297d26a0944f04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_9db8363b46b99584f513f7a9614dd22d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7\n", + "\n", + "working_directory=mini\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_0be62b07a99e8ffab057f3214c0826d1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781\n", + "\n", + "strain_lst=[0.9, 0.95, 1.0, 1.05, 1.1]\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_d0527c0703fcb9fb054aa650b4594053\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_fe302a8bff25da05cd1653eb33e11409\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_467af4337e84ea49bfbf05893ab4d2b6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_bac337a65cedef9d7d93433033561948\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_297df784365c490600edb61686e8375e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83\n", + "\n", + "calculation=scf\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_199d8ddb39100dfde98b937df71f9e62\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_61544c190a92e7e3c48a8e27d7493f93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_c8599abc416e76a13e7fdd654083464d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_39ff3b093c7af4b691297d26a0944f04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_9db8363b46b99584f513f7a9614dd22d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add\n", + "\n", + "working_directory=strain_0\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_a9794c804499521a0ab9ea2cff0500a5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_114ef2e3771735da6b268f82effc2ec4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_bd319eedb0f799b5a7b32d898fc37aac->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_1c531d3dedfcb8ccd1735fb8647a93a1->energy_lst_63ae189fad790382f5cf0940678c54d6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd\n", + "\n", + "working_directory=strain_1\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_bd319eedb0f799b5a7b32d898fc37aac\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_1c531d3dedfcb8ccd1735fb8647a93a1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_10b8d86df31efb98fd394e77e3844197->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_9e637dbd1c8b2498c7b16c988ec96697->energy_lst_63ae189fad790382f5cf0940678c54d6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992\n", + "\n", + "working_directory=strain_2\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_10b8d86df31efb98fd394e77e3844197\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_9e637dbd1c8b2498c7b16c988ec96697\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_3377c152644227fb254585b855a83939->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_90324db5f7de99a93f4026efbf85ef5d->energy_lst_63ae189fad790382f5cf0940678c54d6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f\n", + "\n", + "working_directory=strain_3\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_3377c152644227fb254585b855a83939\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_90324db5f7de99a93f4026efbf85ef5d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_81ac7aa8786b3edc4893de089ff4984c->volume_lst_3a9d8118eb14b1a474fbd6ebdc78755d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a->energy_lst_63ae189fad790382f5cf0940678c54d6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7\n", + "\n", + "working_directory=strain_4\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_81ac7aa8786b3edc4893de089ff4984c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_e9f006b1cf9b1af3b5b6dd98fa6fbb6a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_63ae189fad790382f5cf0940678c54d6->create_function_job_2dd37919a07881ec35b48b79261ff390\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "delayed_object_lst[0].input['a'] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job get_bulk_structure_2ca4aeae204ceaa28593c93054b07908 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_b261e97e2e1714bf57ce6e5016ae4632 was saved and received the ID: 3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02215] 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_4ebba2fa25817e4d72c841e3b2e8b6f0 was saved and received the ID: 4\n", + "The job get_dict_869b937d7880c2f0aa7d1ff12e5658fe was saved and received the ID: 5\n", + "The job calculate_qe_1e1d1a32203e271ae2255924d3e9b14f was saved and received the ID: 6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02247] 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_afe14b210783e4e61e6d468d63799bad was saved and received the ID: 7\n", + "The job calculate_qe_0c07010ebc24b938a57832c41fcd74af was saved and received the ID: 8\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02261] 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_c42b900d2b5d0c900d1158c58ab1a259 was saved and received the ID: 9\n", + "The job calculate_qe_808bdd6630f3c0da564a58075a232427 was saved and received the ID: 10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02271] 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_db89bfa1573064c1e658fee65739f0d7 was saved and received the ID: 11\n", + "The job calculate_qe_91a59b931c007125c72d9a407632de03 was saved and received the ID: 12\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02281] 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_8e6eb778e855d484b1763a645b753abf was saved and received the ID: 13\n", + "The job calculate_qe_80b6905597629098e2dca3067098d3e9 was saved and received the ID: 14\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02295] 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_befc04228af2690aa933355368b2374b was saved and received the ID: 15\n", + "The job get_list_de1f227902310f2b34d080eff15204c9 was saved and received the ID: 16\n", + "The job plot_energy_volume_curve_a817e1974411e9ad4e1c06ce96b8a65d was saved and received the ID: 17\n" + ] + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst[-1].pull()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the same JSON is loaded into a `pyiron_workflow` `Workflow` object. Nodes become graph nodes reachable via attribute access (e.g. `wf.get_bulk_structure`), and `.run()` executes them in dependency order." + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.get_bulk_structure.inputs.a.value = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qe\n", + "\n", + "aiida_qe: Workflow\n", + "\n", + "clusteraiida_qeInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_bulk_structure: get_bulk_structure\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_0: get_dict\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_0: calculate_qe\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qegenerate_structures\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "generate_structures: generate_structures\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_list_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_0: get_list\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_list_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_list_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_1: get_list\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_list_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_1: get_dict\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_1: calculate_qe\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_2: get_dict\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_2: calculate_qe\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_3: get_dict\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_3: calculate_qe\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_4: get_dict\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_4: calculate_qe\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_5: get_dict\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_5: calculate_qe\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_energy_volume_curve: plot_energy_volume_curve\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2859163708959743150: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2095185757530090309: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m6396244699285524644: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m3217087382920924098: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m1410919064082391699: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m9115075428129331383: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7237000809964411643: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m5860620980043280550: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m6458391072898921223: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_1684197267152821370: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_3919628805879474670: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m740119179149754946: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2084798752545049754: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2761976441505203068: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m4556998621263697855: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m9206283876700615862: GetItem\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_bulk_structure__element\n", + "\n", + "get_bulk_structure__element\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureInputselement\n", + "\n", + "element\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_bulk_structure__element->clusteraiida_qeget_bulk_structureInputselement\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_bulk_structure__a\n", + "\n", + "get_bulk_structure__a\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureInputsa\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_bulk_structure__a->clusteraiida_qeget_bulk_structureInputsa\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_bulk_structure__cubic\n", + "\n", + "get_bulk_structure__cubic\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureInputscubic\n", + "\n", + "cubic\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_bulk_structure__cubic->clusteraiida_qeget_bulk_structureInputscubic\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__calculation\n", + "\n", + "get_dict_0__calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__calculation->clusteraiida_qeget_dict_0Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__kpts\n", + "\n", + "get_dict_0__kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__kpts->clusteraiida_qeget_dict_0Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__pseudopotentials\n", + "\n", + "get_dict_0__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__pseudopotentials->clusteraiida_qeget_dict_0Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__smearing\n", + "\n", + "get_dict_0__smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_0__smearing->clusteraiida_qeget_dict_0Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_0__working_directory\n", + "\n", + "calculate_qe_0__working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_0__working_directory->clusteraiida_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsgenerate_structures__strain_lst\n", + "\n", + "generate_structures__strain_lst\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresInputsstrain_lst\n", + "\n", + "strain_lst\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsgenerate_structures__strain_lst->clusteraiida_qegenerate_structuresInputsstrain_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__calculation\n", + "\n", + "get_dict_1__calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__calculation->clusteraiida_qeget_dict_1Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__kpts\n", + "\n", + "get_dict_1__kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__kpts->clusteraiida_qeget_dict_1Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__pseudopotentials\n", + "\n", + "get_dict_1__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__pseudopotentials->clusteraiida_qeget_dict_1Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__smearing\n", + "\n", + "get_dict_1__smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_1__smearing->clusteraiida_qeget_dict_1Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_1__working_directory\n", + "\n", + "calculate_qe_1__working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_1__working_directory->clusteraiida_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__calculation\n", + "\n", + "get_dict_2__calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__calculation->clusteraiida_qeget_dict_2Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__kpts\n", + "\n", + "get_dict_2__kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__kpts->clusteraiida_qeget_dict_2Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__pseudopotentials\n", + "\n", + "get_dict_2__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__pseudopotentials->clusteraiida_qeget_dict_2Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__smearing\n", + "\n", + "get_dict_2__smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_2__smearing->clusteraiida_qeget_dict_2Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_2__working_directory\n", + "\n", + "calculate_qe_2__working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_2__working_directory->clusteraiida_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__calculation\n", + "\n", + "get_dict_3__calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__calculation->clusteraiida_qeget_dict_3Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__kpts\n", + "\n", + "get_dict_3__kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__kpts->clusteraiida_qeget_dict_3Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__pseudopotentials\n", + "\n", + "get_dict_3__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__pseudopotentials->clusteraiida_qeget_dict_3Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__smearing\n", + "\n", + "get_dict_3__smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_3__smearing->clusteraiida_qeget_dict_3Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_3__working_directory\n", + "\n", + "calculate_qe_3__working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_3__working_directory->clusteraiida_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__calculation\n", + "\n", + "get_dict_4__calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__calculation->clusteraiida_qeget_dict_4Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__kpts\n", + "\n", + "get_dict_4__kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__kpts->clusteraiida_qeget_dict_4Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__pseudopotentials\n", + "\n", + "get_dict_4__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__pseudopotentials->clusteraiida_qeget_dict_4Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__smearing\n", + "\n", + "get_dict_4__smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_4__smearing->clusteraiida_qeget_dict_4Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_4__working_directory\n", + "\n", + "calculate_qe_4__working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_4__working_directory->clusteraiida_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__calculation\n", + "\n", + "get_dict_5__calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__calculation->clusteraiida_qeget_dict_5Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__kpts\n", + "\n", + "get_dict_5__kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__kpts->clusteraiida_qeget_dict_5Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__pseudopotentials\n", + "\n", + "get_dict_5__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__pseudopotentials->clusteraiida_qeget_dict_5Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__smearing\n", + "\n", + "get_dict_5__smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsget_dict_5__smearing->clusteraiida_qeget_dict_5Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_5__working_directory\n", + "\n", + "calculate_qe_5__working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputscalculate_qe_5__working_directory->clusteraiida_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2859163708959743150__item\n", + "\n", + "injected_GetItem_2859163708959743150__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2859163708959743150__item->clusteraiida_qeinjected_GetItem_2859163708959743150Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2095185757530090309__item\n", + "\n", + "injected_GetItem_2095185757530090309__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2095185757530090309__item->clusteraiida_qeinjected_GetItem_2095185757530090309Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m6396244699285524644__item\n", + "\n", + "injected_GetItem_m6396244699285524644__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m6396244699285524644__item->clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m3217087382920924098__item\n", + "\n", + "injected_GetItem_m3217087382920924098__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m3217087382920924098__item->clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m1410919064082391699__item\n", + "\n", + "injected_GetItem_m1410919064082391699__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m1410919064082391699__item->clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m9115075428129331383__item\n", + "\n", + "injected_GetItem_m9115075428129331383__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m9115075428129331383__item->clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m7237000809964411643__item\n", + "\n", + "injected_GetItem_m7237000809964411643__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m7237000809964411643__item->clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m5860620980043280550__item\n", + "\n", + "injected_GetItem_m5860620980043280550__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m5860620980043280550__item->clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m6458391072898921223__item\n", + "\n", + "injected_GetItem_m6458391072898921223__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m6458391072898921223__item->clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_1684197267152821370__item\n", + "\n", + "injected_GetItem_1684197267152821370__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_1684197267152821370__item->clusteraiida_qeinjected_GetItem_1684197267152821370Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_3919628805879474670__item\n", + "\n", + "injected_GetItem_3919628805879474670__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_3919628805879474670__item->clusteraiida_qeinjected_GetItem_3919628805879474670Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m740119179149754946__item\n", + "\n", + "injected_GetItem_m740119179149754946__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m740119179149754946__item->clusteraiida_qeinjected_GetItem_m740119179149754946Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2084798752545049754__item\n", + "\n", + "injected_GetItem_2084798752545049754__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2084798752545049754__item->clusteraiida_qeinjected_GetItem_2084798752545049754Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2761976441505203068__item\n", + "\n", + "injected_GetItem_2761976441505203068__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_2761976441505203068__item->clusteraiida_qeinjected_GetItem_2761976441505203068Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m4556998621263697855__item\n", + "\n", + "injected_GetItem_m4556998621263697855__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m4556998621263697855__item->clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m9206283876700615862__item\n", + "\n", + "injected_GetItem_m9206283876700615862__item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusteraiida_qeInputsinjected_GetItem_m9206283876700615862__item->clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureOutputsWithInjectionget_bulk_structure\n", + "\n", + "get_bulk_structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusteraiida_qeget_dict_0Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0OutputsWithInjectionget_dict_0\n", + "\n", + "get_dict_0\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_0OutputsWithInjectionget_dict_0->clusteraiida_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0\n", + "\n", + "calculate_qe_0\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusteraiida_qeinjected_GetItem_2859163708959743150Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresInputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures\n", + "\n", + "generate_structures\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_2095185757530090309Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_3919628805879474670Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusteraiida_qeinjected_GetItem_2761976441505203068Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0OutputsWithInjectionget_list_0\n", + "\n", + "get_list_0\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "volume_lst\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_0OutputsWithInjectionget_list_0->clusteraiida_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1OutputsWithInjectionget_list_1\n", + "\n", + "get_list_1\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "energy_lst\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_list_1OutputsWithInjectionget_list_1->clusteraiida_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1OutputsWithInjectionget_dict_1\n", + "\n", + "get_dict_1\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_1OutputsWithInjectionget_dict_1->clusteraiida_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1\n", + "\n", + "calculate_qe_1\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2OutputsWithInjectionget_dict_2\n", + "\n", + "get_dict_2\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_2OutputsWithInjectionget_dict_2->clusteraiida_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2\n", + "\n", + "calculate_qe_2\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3OutputsWithInjectionget_dict_3\n", + "\n", + "get_dict_3\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_3OutputsWithInjectionget_dict_3->clusteraiida_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3\n", + "\n", + "calculate_qe_3\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusteraiida_qeinjected_GetItem_1684197267152821370Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4OutputsWithInjectionget_dict_4\n", + "\n", + "get_dict_4\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_4OutputsWithInjectionget_dict_4->clusteraiida_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4\n", + "\n", + "calculate_qe_4\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusteraiida_qeinjected_GetItem_m740119179149754946Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusteraiida_qeinjected_GetItem_2084798752545049754Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5OutputsWithInjectionget_dict_5\n", + "\n", + "get_dict_5\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusteraiida_qeget_dict_5OutputsWithInjectionget_dict_5->clusteraiida_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5\n", + "\n", + "calculate_qe_5\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusteraiida_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusteraiida_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusteraiida_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2859163708959743150OutputsWithInjectiongetitem->clusteraiida_qegenerate_structuresInputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2095185757530090309OutputsWithInjectiongetitem->clusteraiida_qeget_dict_1Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6396244699285524644OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m3217087382920924098OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m1410919064082391699OutputsWithInjectiongetitem->clusteraiida_qeget_dict_2Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9115075428129331383OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m7237000809964411643OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m5860620980043280550OutputsWithInjectiongetitem->clusteraiida_qeget_dict_3Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m6458391072898921223OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_1684197267152821370OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_3919628805879474670OutputsWithInjectiongetitem->clusteraiida_qeget_dict_4Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m740119179149754946OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2084798752545049754OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_2761976441505203068OutputsWithInjectiongetitem->clusteraiida_qeget_dict_5Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m4556998621263697855OutputsWithInjectiongetitem->clusteraiida_qeget_list_1Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusteraiida_qeinjected_GetItem_m9206283876700615862OutputsWithInjectiongetitem->clusteraiida_qeget_list_0Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02308] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02404] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02421] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02443] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02459] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02470] 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" + ] + }, + { + "data": { + "text/plain": [ + "{'plot_energy_volume_curve__plot_energy_volume_curve': None}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "wf.run()" + ] + } + ], + "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": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/_sources/example_workflows/quantum_espresso/cwl.ipynb b/_sources/example_workflows/quantum_espresso/cwl.ipynb new file mode 100644 index 00000000..4c477564 --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/cwl.ipynb @@ -0,0 +1,147 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 5, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "id": "f9fecca7", + "source": "# CWL\n\nThis notebook executes the Quantum Espresso energy-volume-curve `workflow.json` (produced by one of the other notebooks in this directory, e.g. `aiida.ipynb`) with the [Common Workflow Language](https://www.commonwl.org) via [`cwltool`](https://github.com/common-workflow-language/cwltool). Unlike the other engines, PWD does not build a CWL graph directly in Python - instead it translates an existing `workflow.json` into native CWL files, which `cwltool` then executes as a separate command line process.", + "metadata": {} + }, + { + "id": "4eca79ef-1053-4f69-89ad-2bee8411068e", + "cell_type": "code", + "source": "import os", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "id": "377fef56-484d-491c-b19e-1be6931e44eb", + "cell_type": "code", + "source": "import pickle", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "id": "8da8470b", + "source": "## Translate workflow.json to CWL\n\n`write_workflow` reads the existing `workflow.json` and generates: one `.cwl` `CommandLineTool` per PWD function node (each one invokes `python -m python_workflow_definition.cwl --function=...` to call the matching function in `workflow.py`), a top-level `workflow.cwl` that chains these steps together following the `workflow.json` edges, and a `workflow.yml` job file listing one input file per PWD input node. Since CWL only passes files between steps, every input and every function output is exchanged as a pickle file.", + "metadata": {} + }, + { + "id": "92e3921b-2bb8-4333-8cfe-4bd27f785d24", + "cell_type": "code", + "source": "from python_workflow_definition.cwl import write_workflow", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 3 + }, + { + "id": "5303c059-8ae4-4557-858e-b4bd64eac711", + "cell_type": "code", + "source": "write_workflow(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "markdown", + "id": "21fc2973", + "source": "## Run the workflow with cwltool\n\nASE's Quantum Espresso writer resolves the pseudopotential directory from the `ESPRESSO_PSEUDO` environment variable when no explicit path is given. Because `cwltool` runs every step in its own isolated temporary directory, the environment variable has to be forwarded explicitly with `--preserve-environment=ESPRESSO_PSEUDO`, so that `pw.x` can find the pseudopotential file shipped in [`espresso/pseudo`](espresso/pseudo) from any step.", + "metadata": {} + }, + { + "id": "0192ca74-3971-464b-9435-c156e0b6e623", + "cell_type": "code", + "source": "os.environ[\"ESPRESSO_PSEUDO\"] = os.path.abspath(os.path.join(\"../../espresso/pseudo\"))", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 5 + }, + { + "id": "df302bd2-e9b6-4595-979c-67c46414d986", + "cell_type": "code", + "source": "! cwltool --preserve-environment=ESPRESSO_PSEUDO workflow.cwl workflow.yml", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "/srv/conda/envs/notebook/bin/cwltool:11: DeprecationWarning: Nesting argument groups is deprecated.\n sys.exit(run())\n\u001b[1;30mINFO\u001b[0m /srv/conda/envs/notebook/bin/cwltool 3.1.20250110105449\n\u001b[1;30mINFO\u001b[0m Resolved 'workflow.cwl' to 'file:///home/jovyan/example_workflows/quantum_espresso/workflow.cwl'\n\u001b[1;30mINFO\u001b[0m [workflow ] start\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_bulk_structure_0\n\u001b[1;30mINFO\u001b[0m [step get_bulk_structure_0] start\n\u001b[1;30mINFO\u001b[0m [job get_bulk_structure_0] /tmp/9sant4h9$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/va137af6/stga19aac01-d6f9-48d3-ba6b-d8a6e460f525/workflow.py \\\n --function=workflow.get_bulk_structure \\\n --arg_cubic=/tmp/va137af6/stgd2861bb7-939d-449d-9600-71f380ee058d/cubic.pickle \\\n --arg_element=/tmp/va137af6/stg93f5775e-477a-4b2e-87ac-822ff4097346/element.pickle \\\n --arg_a=/tmp/va137af6/stgcfd0bd7b-a186-4b46-80a6-663aeb5d0fa9/a.pickle\n\u001b[1;30mINFO\u001b[0m [job get_bulk_structure_0] Max memory used: 110MiB\n\u001b[1;30mINFO\u001b[0m [job get_bulk_structure_0] completed success\n\u001b[1;30mINFO\u001b[0m [step get_bulk_structure_0] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_dict_13\n\u001b[1;30mINFO\u001b[0m [step get_dict_13] start\n\u001b[1;30mINFO\u001b[0m [job get_dict_13] /tmp/_o8rxcyc$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_dict \\\n --arg_smearing=/tmp/1h2uwpt9/stg17e865b8-f1f4-406f-a9c7-b8deddc5695d/smearing.pickle \\\n --arg_calculation=/tmp/1h2uwpt9/stgf1d25320-f3de-48f7-8087-5cdb5531765c/calculation_0.pickle \\\n --arg_kpts=/tmp/1h2uwpt9/stgc9e37196-83cf-49d9-88e1-b5acb7c53e7f/kpts.pickle \\\n --arg_pseudopotentials=/tmp/1h2uwpt9/stgcfb6bfd1-3ae7-4600-b07d-ca107c1a275c/pseudopotentials.pickle \\\n --arg_structure=/tmp/1h2uwpt9/stg0da627e7-f19e-4948-b23e-4552aa692862/result.pickle\n\u001b[1;30mINFO\u001b[0m [job get_dict_13] completed success\n\u001b[1;30mINFO\u001b[0m [step get_dict_13] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step calculate_qe_1\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_1] start\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_1] /tmp/q56p65x4$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/5hwlsb8q/stga00637b3-d27a-4b67-b4b2-5857ffc8f94a/workflow.py \\\n --function=workflow.calculate_qe \\\n --arg_input_dict=/tmp/5hwlsb8q/stgea0d773c-cef9-49b7-9895-09c22db6f52d/result.pickle \\\n --arg_working_directory=/tmp/5hwlsb8q/stg541840e1-d4a6-4a2c-a220-ab09e72c869d/working_directory_0.pickle\n[jupyter-pythonworkflow-fl--x---d7231032:09273] 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\u001b[1;30mINFO\u001b[0m [job calculate_qe_1] Max memory used: 273MiB\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_1] completed success\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_1] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step generate_structures_2\n\u001b[1;30mINFO\u001b[0m [step generate_structures_2] start\n\u001b[1;30mINFO\u001b[0m [job generate_structures_2] /tmp/81vwps2h$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/0d6xih7u/stg8da9bfd1-34a7-4282-8446-97a728d4747b/workflow.py \\\n --function=workflow.generate_structures \\\n --arg_structure=/tmp/0d6xih7u/stg89eb15f9-014d-4c20-8197-87c6c7345ffe/structure.pickle \\\n --arg_strain_lst=/tmp/0d6xih7u/stg80ec088c-9b6a-45bd-8565-e68fd3c76210/strain_lst.pickle\n\u001b[1;30mINFO\u001b[0m [job generate_structures_2] Max memory used: 96MiB\n\u001b[1;30mINFO\u001b[0m [job generate_structures_2] completed success\n\u001b[1;30mINFO\u001b[0m [step generate_structures_2] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_dict_25\n\u001b[1;30mINFO\u001b[0m [step get_dict_25] start\n\u001b[1;30mINFO\u001b[0m [job get_dict_25] /tmp/hj3teyvh$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_dict \\\n --arg_smearing=/tmp/ky497mud/stgf2ab029c-fd78-4490-a4aa-2ee352fa40a2/smearing.pickle \\\n --arg_calculation=/tmp/ky497mud/stg12f82711-28cb-42e6-80c5-59e7fa946ea8/calculation_1.pickle \\\n --arg_kpts=/tmp/ky497mud/stgd35fecc6-83e5-493e-85ad-caf6acd301cb/kpts.pickle \\\n --arg_pseudopotentials=/tmp/ky497mud/stg9b98aba6-11a6-4718-bd3a-23f160518077/pseudopotentials.pickle \\\n --arg_structure=/tmp/ky497mud/stg00376f4a-a991-469a-b494-27c160e6c15d/s_2.pickle\n\u001b[1;30mINFO\u001b[0m [job get_dict_25] completed success\n\u001b[1;30mINFO\u001b[0m [step get_dict_25] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_dict_20\n\u001b[1;30mINFO\u001b[0m [step get_dict_20] start\n\u001b[1;30mINFO\u001b[0m [job get_dict_20] /tmp/y9drdoe7$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_dict \\\n --arg_smearing=/tmp/dsu142t1/stgcba59359-36e1-4bf9-9e6f-e7cf99a23077/smearing.pickle \\\n --arg_calculation=/tmp/dsu142t1/stg56a2646f-2057-4670-bb4e-f55af62c5858/calculation_1.pickle \\\n --arg_kpts=/tmp/dsu142t1/stgc443e9a8-c9b6-4c5e-8321-6a70d347706b/kpts.pickle \\\n --arg_pseudopotentials=/tmp/dsu142t1/stg47b4b44d-c69c-4629-aaed-0e15bf14426e/pseudopotentials.pickle \\\n --arg_structure=/tmp/dsu142t1/stg0e5b3c6e-a315-4eaf-9a66-dbf5669eaada/s_0.pickle\n\u001b[1;30mINFO\u001b[0m [job get_dict_20] completed success\n\u001b[1;30mINFO\u001b[0m [step get_dict_20] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_dict_23\n\u001b[1;30mINFO\u001b[0m [step get_dict_23] start\n\u001b[1;30mINFO\u001b[0m [job get_dict_23] /tmp/9v59c4vd$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_dict \\\n --arg_smearing=/tmp/2mc_byfs/stgace4b178-c0ff-406e-95ac-754318766886/smearing.pickle \\\n --arg_calculation=/tmp/2mc_byfs/stg793df1d8-8f8d-4bb3-9c7c-243a48dc494b/calculation_1.pickle \\\n --arg_kpts=/tmp/2mc_byfs/stga852e76a-885f-4e39-8ab4-ecebf95c656f/kpts.pickle \\\n --arg_pseudopotentials=/tmp/2mc_byfs/stgd06acdff-6e0c-476c-be57-1f21b2d03711/pseudopotentials.pickle \\\n --arg_structure=/tmp/2mc_byfs/stg02210df5-d3e2-42b8-a75e-47e2f2c9f274/s_1.pickle\n\u001b[1;30mINFO\u001b[0m [job get_dict_23] completed success\n\u001b[1;30mINFO\u001b[0m [step get_dict_23] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_dict_29\n\u001b[1;30mINFO\u001b[0m [step get_dict_29] start\n\u001b[1;30mINFO\u001b[0m [job get_dict_29] /tmp/q_svsf9g$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_dict \\\n --arg_smearing=/tmp/8u8e7db4/stgbba611dc-3b23-4653-a293-f71d492a42af/smearing.pickle \\\n --arg_calculation=/tmp/8u8e7db4/stge9a32972-6649-4eb5-abd7-9db61d929d2d/calculation_1.pickle \\\n --arg_kpts=/tmp/8u8e7db4/stg02098ea5-7487-4a66-bb77-99a6336d7b71/kpts.pickle \\\n --arg_pseudopotentials=/tmp/8u8e7db4/stg571b6259-4599-4c39-8cb2-79a70feb78b8/pseudopotentials.pickle \\\n --arg_structure=/tmp/8u8e7db4/stg64c55a4d-8af6-40bf-abfd-3ec8a690b90b/s_4.pickle\n\u001b[1;30mINFO\u001b[0m [job get_dict_29] completed success\n\u001b[1;30mINFO\u001b[0m [step get_dict_29] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_dict_27\n\u001b[1;30mINFO\u001b[0m [step get_dict_27] start\n\u001b[1;30mINFO\u001b[0m [job get_dict_27] /tmp/vgcwzb84$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_dict \\\n --arg_smearing=/tmp/xf32x1ld/stg3cbb6408-2383-49d0-9476-ef3fbee7c165/smearing.pickle \\\n --arg_calculation=/tmp/xf32x1ld/stgeb36ed3b-b442-43ea-b14d-1397875e8839/calculation_1.pickle \\\n --arg_kpts=/tmp/xf32x1ld/stge8854d32-32f3-4a90-8e66-8ce7b1160d8d/kpts.pickle \\\n --arg_pseudopotentials=/tmp/xf32x1ld/stg0dba3c44-e6af-46a9-9f00-c08969392ede/pseudopotentials.pickle \\\n --arg_structure=/tmp/xf32x1ld/stg4223a500-1f85-4651-9130-bd1629008770/s_3.pickle\n\u001b[1;30mINFO\u001b[0m [job get_dict_27] completed success\n\u001b[1;30mINFO\u001b[0m [step get_dict_27] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step calculate_qe_3\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_3] start\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_3] /tmp/v2e_84tz$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/n81xp6_a/stgf98a9803-3329-400e-a03c-02b51d3f3c97/workflow.py \\\n --function=workflow.calculate_qe \\\n --arg_input_dict=/tmp/n81xp6_a/stgd93a737b-2598-4fb8-bdcb-bb1d2048116f/result.pickle \\\n --arg_working_directory=/tmp/n81xp6_a/stg5ad2a52b-2844-45e4-b227-3d835efa01f6/working_directory_1.pickle\n[jupyter-pythonworkflow-fl--x---d7231032:09459] 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\u001b[1;30mINFO\u001b[0m [job calculate_qe_3] Max memory used: 240MiB\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_3] completed success\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_3] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step calculate_qe_4\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_4] start\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_4] /tmp/tgwdkhxx$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/l5mihx97/stgf73a20aa-bd97-46af-a923-b8d776da2b98/workflow.py \\\n --function=workflow.calculate_qe \\\n --arg_input_dict=/tmp/l5mihx97/stgb8c3fcbe-9277-46c4-b8a2-a1171a292580/result.pickle \\\n --arg_working_directory=/tmp/l5mihx97/stg3ae0b93a-2e0b-4f1b-b079-985ea6bbaa72/working_directory_2.pickle\n[jupyter-pythonworkflow-fl--x---d7231032:09533] 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\u001b[1;30mINFO\u001b[0m [job calculate_qe_4] Max memory used: 213MiB\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_4] completed success\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_4] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step calculate_qe_5\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_5] start\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_5] /tmp/d36x49f6$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/nvm7fsf5/stg384bab04-833c-43f2-bd00-f4b5a5c93eec/workflow.py \\\n --function=workflow.calculate_qe \\\n --arg_input_dict=/tmp/nvm7fsf5/stg9aa51e21-01b0-4157-b73f-a3feee8a917a/result.pickle \\\n --arg_working_directory=/tmp/nvm7fsf5/stg02ef6345-c598-4127-95c7-e92d0a977c40/working_directory_3.pickle\n[jupyter-pythonworkflow-fl--x---d7231032:09611] 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\u001b[1;30mINFO\u001b[0m [job calculate_qe_5] Max memory used: 243MiB\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_5] completed success\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_5] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step calculate_qe_6\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_6] start\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_6] /tmp/eiyg8it6$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/708xmf3f/stg791b1717-cfb1-4569-ba75-d648a84e0a72/workflow.py \\\n --function=workflow.calculate_qe \\\n --arg_input_dict=/tmp/708xmf3f/stg9ebf7054-080c-4173-a8b9-2247d01a0068/result.pickle \\\n --arg_working_directory=/tmp/708xmf3f/stg1afccee5-d9b6-46ed-bc2c-fa36bdb8013d/working_directory_4.pickle\n[jupyter-pythonworkflow-fl--x---d7231032:09688] 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\u001b[1;30mINFO\u001b[0m [job calculate_qe_6] Max memory used: 245MiB\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_6] completed success\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_6] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step calculate_qe_7\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_7] start\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_7] /tmp/qjgxwxnd$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/g3sp392q/stg0a51a8da-c7a7-4d90-a49c-1817002a62a6/workflow.py \\\n --function=workflow.calculate_qe \\\n --arg_input_dict=/tmp/g3sp392q/stg67e73a60-3cc6-46dd-b009-cfc0034aec2c/result.pickle \\\n --arg_working_directory=/tmp/g3sp392q/stgf3d265db-820b-4af3-8975-0a6faa0d7a67/working_directory_5.pickle\n[jupyter-pythonworkflow-fl--x---d7231032:09770] 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\u001b[1;30mINFO\u001b[0m [job calculate_qe_7] Max memory used: 244MiB\n\u001b[1;30mINFO\u001b[0m [job calculate_qe_7] completed success\n\u001b[1;30mINFO\u001b[0m [step calculate_qe_7] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_list_31\n\u001b[1;30mINFO\u001b[0m [step get_list_31] start\n\u001b[1;30mINFO\u001b[0m [job get_list_31] /tmp/mnovytq_$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_list \\\n --arg_0=/tmp/bz0ntajx/stgdab2f59b-b118-44c4-96ef-b4639edaee4e/energy.pickle \\\n --arg_2=/tmp/bz0ntajx/stg2e9bec4d-1824-4152-b003-aab0eac204cd/energy.pickle \\\n --arg_1=/tmp/bz0ntajx/stg9511563e-9784-48a9-8d81-74ade3a084c1/energy.pickle \\\n --arg_4=/tmp/bz0ntajx/stg17845efd-e335-421e-9891-6e627254edb4/energy.pickle \\\n --arg_3=/tmp/bz0ntajx/stg051fa3bc-832a-4d70-b9fb-b9948f51904d/energy.pickle\n\u001b[1;30mINFO\u001b[0m [job get_list_31] completed success\n\u001b[1;30mINFO\u001b[0m [step get_list_31] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step get_list_30\n\u001b[1;30mINFO\u001b[0m [step get_list_30] start\n\u001b[1;30mINFO\u001b[0m [job get_list_30] /tmp/vc0dzppy$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --function=python_workflow_definition.shared.get_list \\\n --arg_0=/tmp/mejux8b1/stg71e3a6a9-c56b-4be8-8720-0ca90ac40513/volume.pickle \\\n --arg_2=/tmp/mejux8b1/stg429d498d-cf56-4561-a653-8048c1213851/volume.pickle \\\n --arg_1=/tmp/mejux8b1/stgee1a0001-20f2-45de-ac4e-77b0d0c59957/volume.pickle \\\n --arg_4=/tmp/mejux8b1/stg0de2a6dc-57cd-4a0c-9637-ef2e63e96fce/volume.pickle \\\n --arg_3=/tmp/mejux8b1/stga4551f25-d5f6-47c6-92ea-452cf694a286/volume.pickle\n\u001b[1;30mINFO\u001b[0m [job get_list_30] completed success\n\u001b[1;30mINFO\u001b[0m [step get_list_30] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] starting step plot_energy_volume_curve_8\n\u001b[1;30mINFO\u001b[0m [step plot_energy_volume_curve_8] start\n\u001b[1;30mINFO\u001b[0m [job plot_energy_volume_curve_8] /tmp/j4v3j3mt$ python \\\n -m \\\n python_workflow_definition.cwl \\\n --workflowfile=/tmp/_67k4bu3/stg5be48d76-8a92-4b02-b3d6-7bdb4c35c9ce/workflow.py \\\n --function=workflow.plot_energy_volume_curve \\\n --arg_volume_lst=/tmp/_67k4bu3/stgd43e71b0-d16b-4eb2-8d14-83924dafd7d6/result.pickle \\\n --arg_energy_lst=/tmp/_67k4bu3/stg43eeacdd-5042-4f2d-8efc-d8e0d5fe1c14/result.pickle\n\u001b[1;30mINFO\u001b[0m [job plot_energy_volume_curve_8] Max memory used: 112MiB\n\u001b[1;30mINFO\u001b[0m [job plot_energy_volume_curve_8] completed success\n\u001b[1;30mINFO\u001b[0m [step plot_energy_volume_curve_8] completed success\n\u001b[1;30mINFO\u001b[0m [workflow ] completed success\n{\n \"result_file\": {\n \"location\": \"file:///home/jovyan/example_workflows/quantum_espresso/result.pickle\",\n \"basename\": \"result.pickle\",\n \"class\": \"File\",\n \"checksum\": \"sha1$dbc1aaddc8b7343d6d33b34edcf608b8f8801918\",\n \"size\": 4,\n \"path\": \"/home/jovyan/example_workflows/quantum_espresso/result.pickle\"\n }\n}\u001b[1;30mINFO\u001b[0m Final process status is success\n" + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "id": "7ddd08ec", + "source": "`cwltool` runs one step per PWD function node - `get_bulk_structure`, the `vc-relax` `calculate_qe`, `generate_structures`, the five strained `scf` `calculate_qe` steps and finally `plot_energy_volume_curve` - each reading its input pickles and writing its output pickle(s), exactly mirroring the fan-out of one relax followed by five parallel SCF calculations seen in the other notebooks. The workflow's final output is declared as `result_file`, the pickle produced by the last step.", + "metadata": {} + }, + { + "id": "2942dbba-ea0a-4d20-be5c-ed9992d09ff8", + "cell_type": "code", + "source": "with open(\"result.pickle\", \"rb\") as f:\n print(pickle.load(f))", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "None\n" + } + ], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "id": "e9ec76ee", + "source": "`plot_energy_volume_curve` has no return value, so `result_file` unpickles to `None` here - that is expected. The actual output of this workflow is the `evcurve.png` plot, written as a side effect into the working directory of the last CWL step.", + "metadata": {} + }, + { + "id": "60e909ee-d0d0-4bd1-81c8-dd5274ae5834", + "cell_type": "code", + "source": "", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": null + } + ] +} \ No newline at end of file diff --git a/_sources/example_workflows/quantum_espresso/executorlib.ipynb b/_sources/example_workflows/quantum_espresso/executorlib.ipynb new file mode 100644 index 00000000..e4ebd6f0 --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/executorlib.ipynb @@ -0,0 +1,5558 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "be2d61b0-0d47-4349-b4b0-1b767c961644", + "metadata": {}, + "source": "# executorlib\n\nThis notebook builds the Quantum Espresso energy-volume-curve workflow with [`executorlib`](https://github.com/pyiron/executorlib), a lightweight `concurrent.futures`-style executor. Tasks are submitted individually with `.submit()`, and the resulting graph is exported as a PWD `workflow.json` as a side effect. The second half of the notebook loads that same JSON with `aiida-workgraph`, `jobflow` and `pyiron_base`/`pyiron_workflow`." + }, + { + "cell_type": "markdown", + "id": "0bad2a57-1bd2-4837-94fe-f8c60e211fae", + "metadata": {}, + "source": "## Define workflow with executorlib\n\n`SingleNodeExecutor` runs submitted functions in local worker processes. Passing `export_workflow_filename` makes it record every `.submit()` call and its dependencies and write them out as `workflow_json_filename` once the `with` block exits - no separate `write_workflow_json` call is needed, unlike the other engines." + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a2ed2608-9e1b-4a81-81cb-5079573ea2d1", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from executorlib import SingleNodeExecutor, get_item_from_future" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ea65c6275f956bdb", + "metadata": {}, + "outputs": [], + "source": [ + "from workflow import calculate_qe, generate_structures, get_bulk_structure, plot_energy_volume_curve" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "686a6a5f54a0cef5", + "metadata": {}, + "outputs": [], + "source": [ + "workflow_json_filename = \"executorlib_qe.json\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5071d3a0-7c1f-44c5-85e0-dede1566c10c", + "metadata": {}, + "outputs": [], + "source": [ + "pseudopotentials = {\"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"}" + ] + }, + { + "cell_type": "markdown", + "id": "9ce84a62", + "source": "Each `exe.submit()` call schedules one function call and returns a `Future`. Since `calculate_qe` returns a dict, `get_item_from_future` extracts a single key (e.g. `\"structure\"`, `\"energy\"`, `\"volume\"`) from a future's eventual result so it can be passed as an argument to the next `submit()` call. The relaxed structure is strained into `number_of_strains` (5) structures by `generate_structures`, and each strained structure is submitted as its own independent `scf` `calculate_qe` call - the fan-out that produces the 5 points of the energy-volume curve.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1f1cb12f-4001-478d-8ea0-b369f4f2981a", + "metadata": {}, + "outputs": [], + "source": [ + "with SingleNodeExecutor(export_workflow_filename=workflow_json_filename) as exe:\n", + " structure_future = exe.submit(\n", + " get_bulk_structure,\n", + " element=\"Al\",\n", + " a=4.04,\n", + " cubic=True,\n", + " )\n", + " calc_mini_future = exe.submit(\n", + " calculate_qe,\n", + " working_directory=\"mini\",\n", + " input_dict={\n", + " \"structure\": structure_future,\n", + " \"pseudopotentials\": pseudopotentials,\n", + " \"kpts\": (3, 3, 3),\n", + " \"calculation\": \"vc-relax\",\n", + " \"smearing\": 0.02,\n", + " },\n", + " )\n", + " number_of_strains = 5\n", + " structure_lst_future = exe.submit(\n", + " generate_structures,\n", + " structure=get_item_from_future(calc_mini_future, key=\"structure\"),\n", + " strain_lst=np.linspace(0.9, 1.1, number_of_strains),\n", + " )\n", + " calc_future_lst = []\n", + " for i, structure_strain in [[i, get_item_from_future(structure_lst_future, key=\"s_\" + str(i))] for i in range(number_of_strains)]:\n", + " calc_future_lst.append(exe.submit(\n", + " calculate_qe,\n", + " working_directory=\"strain_\" + str(i),\n", + " input_dict={\n", + " \"structure\": structure_strain,\n", + " \"pseudopotentials\": pseudopotentials,\n", + " \"kpts\": (3, 3, 3),\n", + " \"calculation\": \"scf\",\n", + " \"smearing\": 0.02,\n", + " },\n", + " ))\n", + " plot_future = exe.submit(\n", + " plot_energy_volume_curve,\n", + " volume_lst=[get_item_from_future(future=f, key=\"volume\") for f in calc_future_lst],\n", + " energy_lst=[get_item_from_future(future=f, key=\"energy\") for f in calc_future_lst],\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "72c8e6e6-8e60-4a4f-81f3-968b4b5f36ee", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_bulk_structure\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.generate_structures\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 6,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 7,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 8,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.plot_energy_volume_curve\"\n", + " },\n", + " {\n", + " \"id\": 9,\n", + " \"type\": \"input\",\n", + " \"value\": \"Al\",\n", + " \"name\": \"element\"\n", + " },\n", + " {\n", + " \"id\": 10,\n", + " \"type\": \"input\",\n", + " \"value\": 4.04,\n", + " \"name\": \"a\"\n", + " },\n", + " {\n", + " \"id\": 11,\n", + " \"type\": \"input\",\n", + " \"value\": true,\n", + " \"name\": \"cubic\"\n", + " },\n", + " {\n", + " \"id\": 12,\n", + " \"type\": \"input\",\n", + " \"value\": \"mini\",\n", + " \"name\": \"working_directory\"\n", + " },\n", + " {\n", + " \"id\": 13,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 14,\n", + " \"type\": \"input\",\n", + " \"value\": {\n", + " \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n", + " },\n", + " \"name\": \"pseudopotentials\"\n", + " },\n", + " {\n", + " \"id\": 15,\n", + " \"type\": \"input\",\n", + " \"value\": [\n", + " 3,\n", + " 3,\n", + " 3\n", + " ],\n", + " \"name\": \"kpts\"\n", + " },\n", + " {\n", + " \"id\": 16,\n", + " \"type\": \"input\",\n", + " \"value\": \"vc-relax\",\n", + " \"name\": \"calculation\"\n", + " },\n", + " {\n", + " \"id\": 17,\n", + " \"type\": \"input\",\n", + " \"value\": 0.02,\n", + " \"name\": \"smearing\"\n", + " },\n", + " {\n", + " \"id\": 18,\n", + " \"type\": \"input\",\n", + " \"value\": [\n", + " 0.9,\n", + " 0.9500000000000001,\n", + " 1.0,\n", + " 1.05,\n", + " 1.1\n", + " ],\n", + " \"name\": \"strain_lst\"\n", + " },\n", + " {\n", + " \"id\": 19,\n", + " \"type\": \"input\",\n", + " \"value\": \"strain_0\",\n", + " \"name\": \"working_directory\"\n", + " },\n", + " {\n", + " \"id\": 20,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 21,\n", + " \"type\": \"input\",\n", + " \"value\": \"scf\",\n", + " \"name\": \"calculation\"\n", + " },\n", + " {\n", + " \"id\": 22,\n", + " \"type\": \"input\",\n", + " \"value\": \"strain_1\",\n", + " \"name\": \"working_directory\"\n", + " },\n", + " {\n", + " \"id\": 23,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 24,\n", + " \"type\": \"input\",\n", + " \"value\": \"strain_2\",\n", + " \"name\": \"working_directory\"\n", + " },\n", + " {\n", + " \"id\": 25,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 26,\n", + " \"type\": \"input\",\n", + " \"value\": \"strain_3\",\n", + " \"name\": \"working_directory\"\n", + " },\n", + " {\n", + " \"id\": 27,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 28,\n", + " \"type\": \"input\",\n", + " \"value\": \"strain_4\",\n", + " \"name\": \"working_directory\"\n", + " },\n", + " {\n", + " \"id\": 29,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 30,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 31,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 32,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"element\",\n", + " \"source\": 9,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"a\",\n", + " \"source\": 10,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"cubic\",\n", + " \"source\": 11,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 12,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 13,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 0,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 16,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 1,\n", + " \"sourcePort\": \"structure\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"strain_lst\",\n", + " \"source\": 18,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 19,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_0\"\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_1\"\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 24,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_2\"\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 26,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_3\"\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 28,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 29,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_4\"\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"volume_lst\",\n", + " \"source\": 30,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 6,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 7,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"energy_lst\",\n", + " \"source\": 31,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 6,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 7,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 32,\n", + " \"targetPort\": null,\n", + " \"source\": 31,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "id": "7d75a2f6-6fad-49c8-bd29-37cca1b84441", + "metadata": {}, + "source": "## Load Workflow with aiida\n\n`load_workflow_json` reconstructs the graph as an `aiida-workgraph` `WorkGraph`. To demonstrate that the loaded graph can still be edited like one built natively with `aiida-workgraph`, the lattice constant `a` is overridden (4.04 -> 4.05) before running it with `wg.run()`." + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "28760464-2a2c-40c2-9451-20713da2ba2c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Profile" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from aiida import orm, load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a442fe46-057c-469b-a5e0-173ed4829dfb", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "32fcd4b2-4f0a-442d-b098-827672823796", + "metadata": {}, + "outputs": [], + "source": [ + "wg = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d81a4fb5-a674-41a9-ac19-24c56f952468", + "metadata": {}, + "outputs": [], + "source": [ + "wg.tasks.get_bulk_structure.inputs.a.value = orm.Float(4.05)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "a80b59bd-fe30-49c6-92ca-35ef2d77a6fb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "01/16/2026 08:27:06 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_bulk_structure\n", + "01/16/2026 08:27:06 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_bulk_structure, type: PYFUNCTION, finished.\n", + "01/16/2026 08:27:06 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict\n", + "01/16/2026 08:27:07 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_dict, type: PYFUNCTION, finished.\n", + "01/16/2026 08:27:07 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe\n", + "01/16/2026 08:28:16 AM <71653> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: ['energy', 'volume']\n", + "01/16/2026 08:28:17 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: calculate_qe, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:17 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_structures\n", + "01/16/2026 08:28:18 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: generate_structures, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:18 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict1,get_dict2,get_dict3,get_dict4,get_dict5\n", + "01/16/2026 08:28:18 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_dict1, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:18 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe1,get_dict2,get_dict3,get_dict4,get_dict5\n", + "01/16/2026 08:28:34 AM <71653> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: ['structure']\n", + "01/16/2026 08:28:34 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: calculate_qe1, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:34 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict2,get_dict3,get_dict4,get_dict5\n", + "01/16/2026 08:28:35 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_dict2, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:35 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe2,get_dict3,get_dict4,get_dict5\n", + "01/16/2026 08:28:51 AM <71653> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: ['structure']\n", + "01/16/2026 08:28:51 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: calculate_qe2, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:51 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict3,get_dict4,get_dict5\n", + "01/16/2026 08:28:51 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_dict3, type: PYFUNCTION, finished.\n", + "01/16/2026 08:28:52 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe3,get_dict4,get_dict5\n", + "01/16/2026 08:29:11 AM <71653> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: ['structure']\n", + "01/16/2026 08:29:12 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: calculate_qe3, type: PYFUNCTION, finished.\n", + "01/16/2026 08:29:12 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict4,get_dict5\n", + "01/16/2026 08:29:12 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_dict4, type: PYFUNCTION, finished.\n", + "01/16/2026 08:29:13 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe4,get_dict5\n", + "01/16/2026 08:29:34 AM <71653> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: ['structure']\n", + "01/16/2026 08:29:35 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: calculate_qe4, type: PYFUNCTION, finished.\n", + "01/16/2026 08:29:35 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict5\n", + "01/16/2026 08:29:36 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_dict5, type: PYFUNCTION, finished.\n", + "01/16/2026 08:29:36 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe5\n", + "01/16/2026 08:29:58 AM <71653> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: ['structure']\n", + "01/16/2026 08:29:59 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: calculate_qe5, type: PYFUNCTION, finished.\n", + "01/16/2026 08:29:59 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list,get_list1\n", + "01/16/2026 08:29:59 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_list, type: PYFUNCTION, finished.\n", + "01/16/2026 08:29:59 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list1\n", + "01/16/2026 08:30:00 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: get_list1, type: PYFUNCTION, finished.\n", + "01/16/2026 08:30:00 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_energy_volume_curve\n", + "01/16/2026 08:30:00 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|update_task_state]: Task: plot_energy_volume_curve, type: PYFUNCTION, finished.\n", + "01/16/2026 08:30:00 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", + "01/16/2026 08:30:01 AM <71653> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [1663|WorkGraphEngine|finalize]: Finalize workgraph.\n" + ] + }, + { + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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m5ubIiQkRI5PqTzEuAxdfY3cSZvLcHXpD/G7IspT//3vf+VjRNlJjNU4cuSIQhf7Y8CAAXJG3KFDhxRRUVGK9evXy3FNn3/+uUIblZaWKjw8PORMwTvp0vvpvfqjWAffTxksabCdO3cqOnXqJAdpent7yzf424lBu2+99Zac8ioe8+CDD8pfcl3sj+joaDnmoLpDfBDo6mtEl4KluvbHN998o2jXrp0MCjp37qz47bffFLraH+LDb86cOQoXFxfZHx07dlSsWrWqxunjmm7v3r3yPSE8PPyu+3Tt/bS2/ojWwfdTPfEfVWe3iIiIiNQVxywRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRkU4TmwZ//PHHqm4GEakxBktEpLHGjBmDwYMHV3vf8ePHoaenh7NnzzZ7u4hIuzBYIiKN9cQTT+DgwYOIjY29675vv/0WXbp0Qbdu3VTSNiLSHgyWiEhjjR49Gg4ODtiwYUOV6/n5+fj5559lMLVt2zb4+fnBxMREltxWrVpV4/PFxMTIbFRISIjyWlZWlrx2+PBheVt8Fbf37t2Lrl27wszMDIMGDUJaWhp2794NHx8fWFlZYerUqbIdlcQ2nCtXrkSbNm3k93Tu3Blbt25tkn4hosbFYImINJahoSFmzZolg6Xb9wTfsmULioqKEBgYiMceewxTpkzBxYsXsXTpUrzxxht3BVf1IZ5r7dq1CAoKQnx8vPx3xNinH374AX/++Sf279+PTz/9VPn4119/HevXr8e6detw+fJlLFy4EDNmzMDff//d4LYQUdPSU9z+DkNEpGHCwsJkNkeU4x566CF5bcCAAXB1dZUZoPT0dOzbt0/5+FdeeUUGMyJgEUS26cUXX5SHyCy1bt0a586dkyW8ysxSy5YtcejQIQwcOFBmlsS/c+DAATz88MPyMStWrMDixYtx7do1mTkSnn76afl8e/bsQV5eHuzs7GQbRQBXad68eTL7JAIsIlJfzCwRkUbz9vZG37595RglQQQsR44cweOPP47Q0FD069evyuPF7cjISJSWljbo3w0ICFCeOzo6wtzcXBkoVV4TpTnhypUrKCgowJAhQ9CiRQvlsWnTJtleIlJvhqpuABFRQ4mxSQsWLMBnn30mS12enp4y6yMS5yK7dLvakun6+vp3Paa4uLjaxxoZGSnPxb9x++3Ka2VlZfK88qvIaImM1+3EWCoiUm/MLBGRxhPjhQwMDGQ5a+PGjZg7d64MVnx9fXH06NEqjxVjjDp06CAffyd7e3v5NTk5WXnt9sHe9SXaIYKiuLg4tGvXrsrh7u7e4OcnoqbFzBIRaTxR0po8eTKWLFmC7OxszJkzR15/+eWX0bNnT7z77rvyfrH2khiU/fnnn1f7PGKWWp8+feQYJDGW6fr163JgdkNZWlri3//+txzULbJM/fv3R05OjgzcRNtnz57d4H+DiJoOM0tEpDWluMzMTLlIpYeHh7wm1lj65Zdf8NNPP6FTp05488038c477yiDqeqIsU+i9NajRw+88MILeO+99xqlfSJgE//+8uXL5YD0YcOGYefOnXJAORGpN86GIyIiIqoFM0tEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERISa/T8ezoucFchGGAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "id": "c4f5c047-c6da-4b54-9007-415faca7a448", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\nThe same JSON is loaded as a `jobflow` `Flow` and executed locally with `run_locally`, again after overriding the lattice constant `a`." + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b8e3c2ca-2672-4e9d-aada-63344842dbcf", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "54a24ff6c569094e", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "48a27146-7372-40ab-8b02-e2a9283d4748", + "metadata": {}, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "bf84ef10-e1af-475f-a457-d2703c7276a0", + "metadata": {}, + "outputs": [], + "source": [ + "flow[0].function_kwargs[\"a\"] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "98fa5694-2cc6-44e9-a6e7-2cc71b4f48ce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-01-16 08:31:28,452 INFO Started executing jobs locally\n", + "2026-01-16 08:31:28,816 INFO Starting job - get_bulk_structure (9a8ea16b-3d54-40ab-ba1c-ed56a2f6c7a3)\n", + "2026-01-16 08:31:28,821 INFO Finished job - get_bulk_structure (9a8ea16b-3d54-40ab-ba1c-ed56a2f6c7a3)\n", + "2026-01-16 08:31:28,821 INFO Starting job - get_dict (0dbdd8f7-8a2f-4160-be09-0620e7fa3bea)\n", + "2026-01-16 08:31:28,825 INFO Finished job - get_dict (0dbdd8f7-8a2f-4160-be09-0620e7fa3bea)\n", + "2026-01-16 08:31:28,826 INFO Starting job - calculate_qe (583839c2-ffac-4ef2-8ca4-64c2a7701745)\n", + "2026-01-16 08:32:37,487 INFO Finished job - calculate_qe (583839c2-ffac-4ef2-8ca4-64c2a7701745)\n", + "2026-01-16 08:32:37,489 INFO Starting job - generate_structures (c8cf3dd8-ddfc-4f28-9d19-6da0ab99346f)\n", + "2026-01-16 08:32:37,497 INFO Finished job - generate_structures (c8cf3dd8-ddfc-4f28-9d19-6da0ab99346f)\n", + "2026-01-16 08:32:37,498 INFO Starting job - get_dict (f50678d3-6d30-4941-822d-e9e46a0d42aa)\n", + "2026-01-16 08:32:37,501 INFO Finished job - get_dict (f50678d3-6d30-4941-822d-e9e46a0d42aa)\n", + "2026-01-16 08:32:37,503 INFO Starting job - get_dict (115aa31e-629e-4371-8c88-9e12e5fc0c4e)\n", + "2026-01-16 08:32:37,508 INFO Finished job - get_dict (115aa31e-629e-4371-8c88-9e12e5fc0c4e)\n", + "2026-01-16 08:32:37,510 INFO Starting job - get_dict (7e22fea0-9529-44ce-8ce0-5dc47cf9a558)\n", + "2026-01-16 08:32:37,517 INFO Finished job - get_dict (7e22fea0-9529-44ce-8ce0-5dc47cf9a558)\n", + "2026-01-16 08:32:37,518 INFO Starting job - get_dict (2fcbd570-2464-4fa9-af6d-c7cde924867c)\n", + "2026-01-16 08:32:37,521 INFO Finished job - get_dict (2fcbd570-2464-4fa9-af6d-c7cde924867c)\n", + "2026-01-16 08:32:37,521 INFO Starting job - get_dict (0e486056-1f13-4c7f-bbcb-6379d46cf407)\n", + "2026-01-16 08:32:37,524 INFO Finished job - get_dict (0e486056-1f13-4c7f-bbcb-6379d46cf407)\n", + "2026-01-16 08:32:37,524 INFO Starting job - calculate_qe (4ea4ab88-7ded-4840-a9f0-1374255fb8fb)\n", + "2026-01-16 08:32:52,682 INFO Finished job - calculate_qe (4ea4ab88-7ded-4840-a9f0-1374255fb8fb)\n", + "2026-01-16 08:32:52,683 INFO Starting job - calculate_qe (dbf29828-2fb9-4f9c-8613-077eb01882f5)\n", + "2026-01-16 08:33:07,920 INFO Finished job - calculate_qe (dbf29828-2fb9-4f9c-8613-077eb01882f5)\n", + "2026-01-16 08:33:07,921 INFO Starting job - calculate_qe (87d5064e-4939-408b-8d0c-4f40ad383ca5)\n", + "2026-01-16 08:33:27,478 INFO Finished job - calculate_qe (87d5064e-4939-408b-8d0c-4f40ad383ca5)\n", + "2026-01-16 08:33:27,479 INFO Starting job - calculate_qe (d47b6fbf-afda-4190-a8a4-3e0954785d8a)\n", + "2026-01-16 08:33:49,844 INFO Finished job - calculate_qe (d47b6fbf-afda-4190-a8a4-3e0954785d8a)\n", + "2026-01-16 08:33:49,845 INFO Starting job - calculate_qe (a8f38ff3-604d-4e68-bb3e-db2378f554e6)\n", + "2026-01-16 08:34:11,056 INFO Finished job - calculate_qe (a8f38ff3-604d-4e68-bb3e-db2378f554e6)\n", + "2026-01-16 08:34:11,057 INFO Starting job - get_list (3c430b52-4a0e-410f-b998-5000702e12b3)\n", + "2026-01-16 08:34:11,065 INFO Finished job - get_list (3c430b52-4a0e-410f-b998-5000702e12b3)\n", + "2026-01-16 08:34:11,067 INFO Starting job - get_list (e306309a-4f67-435c-a175-0b98694d8cfd)\n", + "2026-01-16 08:34:11,074 INFO Finished job - get_list (e306309a-4f67-435c-a175-0b98694d8cfd)\n", + "2026-01-16 08:34:11,076 INFO Starting job - plot_energy_volume_curve (ce94f2d9-5163-459e-a5ba-6c3c78147900)\n", + "2026-01-16 08:34:11,192 INFO Finished job - plot_energy_volume_curve (ce94f2d9-5163-459e-a5ba-6c3c78147900)\n", + "2026-01-16 08:34:11,192 INFO Finished executing jobs locally\n" + ] + }, + { + "data": { + "text/plain": [ + "{'9a8ea16b-3d54-40ab-ba1c-ed56a2f6c7a3': {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/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '0dbdd8f7-8a2f-4160-be09-0620e7fa3bea': {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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'vc-relax', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '583839c2-ffac-4ef2-8ca4-64c2a7701745': {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.0456373912944485, 0.0, 0.0], [0.0, 4.0456373912944485, 0.0], [0.0, 0.0, 4.0456373912944485]], \"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.0228186956472243, 2.0228186956472243], [2.0228186956472243, 0.0, 2.0228186956472243], [2.0228186956472243, 2.0228186956472243, 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.9365262239594, 'volume': 66.21568309220069}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'c8cf3dd8-ddfc-4f28-9d19-6da0ab99346f': {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.9060199552584023, 0.0, 0.0], [0.0, 3.9060199552584023, 0.0], [0.0, 0.0, 3.9060199552584023]], \"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.9530099776292011, 1.9530099776292011], [1.9530099776292011, 0.0, 1.9530099776292011], [1.9530099776292011, 1.9530099776292011, 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.977054016693089, 0.0, 0.0], [0.0, 3.977054016693089, 0.0], [0.0, 0.0, 3.977054016693089]], \"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.9885270083465445, 1.9885270083465445], [1.9885270083465445, 0.0, 1.9885270083465445], [1.9885270083465445, 1.9885270083465445, 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.0456373912944485, 0.0, 0.0], [0.0, 4.0456373912944485, 0.0], [0.0, 0.0, 4.0456373912944485]], \"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.0228186956472243, 2.0228186956472243], [2.0228186956472243, 0.0, 2.0228186956472243], [2.0228186956472243, 2.0228186956472243, 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.111971105505625, 0.0, 0.0], [0.0, 4.111971105505625, 0.0], [0.0, 0.0, 4.111971105505625]], \"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.0559855527528126, 2.0559855527528126], [2.0559855527528126, 0.0, 2.0559855527528126], [2.0559855527528126, 2.0559855527528126, 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.17623103338003, 0.0, 0.0], [0.0, 4.17623103338003, 0.0], [0.0, 0.0, 4.17623103338003]], \"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.088115516690015, 2.088115516690015], [2.088115516690015, 0.0, 2.088115516690015], [2.088115516690015, 2.088115516690015, 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/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'f50678d3-6d30-4941-822d-e9e46a0d42aa': {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.9060199552584023, 0.0, 0.0], [0.0, 3.9060199552584023, 0.0], [0.0, 0.0, 3.9060199552584023]], \"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.9530099776292011, 1.9530099776292011], [1.9530099776292011, 0.0, 1.9530099776292011], [1.9530099776292011, 1.9530099776292011, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '115aa31e-629e-4371-8c88-9e12e5fc0c4e': {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.977054016693089, 0.0, 0.0], [0.0, 3.977054016693089, 0.0], [0.0, 0.0, 3.977054016693089]], \"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.9885270083465445, 1.9885270083465445], [1.9885270083465445, 0.0, 1.9885270083465445], [1.9885270083465445, 1.9885270083465445, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '7e22fea0-9529-44ce-8ce0-5dc47cf9a558': {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.0456373912944485, 0.0, 0.0], [0.0, 4.0456373912944485, 0.0], [0.0, 0.0, 4.0456373912944485]], \"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.0228186956472243, 2.0228186956472243], [2.0228186956472243, 0.0, 2.0228186956472243], [2.0228186956472243, 2.0228186956472243, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '2fcbd570-2464-4fa9-af6d-c7cde924867c': {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.111971105505625, 0.0, 0.0], [0.0, 4.111971105505625, 0.0], [0.0, 0.0, 4.111971105505625]], \"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.0559855527528126, 2.0559855527528126], [2.0559855527528126, 0.0, 2.0559855527528126], [2.0559855527528126, 2.0559855527528126, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '0e486056-1f13-4c7f-bbcb-6379d46cf407': {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.17623103338003, 0.0, 0.0], [0.0, 4.17623103338003, 0.0], [0.0, 0.0, 4.17623103338003]], \"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.088115516690015, 2.088115516690015], [2.088115516690015, 0.0, 2.088115516690015], [2.088115516690015, 2.088115516690015, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '4ea4ab88-7ded-4840-a9f0-1374255fb8fb': {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.906019938185435, 0.0, 0.0], [0.0, 3.906019938185435, 0.0], [0.0, 0.0, 3.906019938185435]], \"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.9530099690635172, 1.9530099690635172], [1.9530099690635172, 0.0, 1.9530099690635172], [1.9530099690635172, 1.9530099690635172, 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.845744849063, 'volume': 59.594114001534216}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'dbf29828-2fb9-4f9c-8613-077eb01882f5': {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.9770539993096388, 0.0, 0.0], [0.0, 3.9770539993096388, 0.0], [0.0, 0.0, 3.9770539993096388]], \"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.9885269996082748, 1.9885269996082748], [1.9885269996082748, 0.0, 1.9885269996082748], [1.9885269996082748, 1.9885269996082748, 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.9161489649603, 'volume': 62.90489811273073}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '87d5064e-4939-408b-8d0c-4f40ad383ca5': {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.045637373611226, 0.0, 0.0], [0.0, 4.045637373611226, 0.0], [0.0, 0.0, 4.045637373611226]], \"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.0228186867583875, 2.0228186867583875], [2.0228186867583875, 0.0, 2.0228186867583875], [2.0228186867583875, 2.0228186867583875, 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.9365241649446, 'volume': 66.21568222392706}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'd47b6fbf-afda-4190-a8a4-3e0954785d8a': {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.111971087532464, 0.0, 0.0], [0.0, 4.111971087532464, 0.0], [0.0, 0.0, 4.111971087532464]], \"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.0559855438134176, 2.0559855438134176], [2.0559855438134176, 0.0, 2.0559855438134176], [2.0559855438134176, 2.0559855438134176, 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.9192859118161, 'volume': 69.52646633512354}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'a8f38ff3-604d-4e68-bb3e-db2378f554e6': {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.176231015125989, 0.0, 0.0], [0.0, 4.176231015125989, 0.0], [0.0, 0.0, 4.176231015125989]], \"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.0881155075729794, 2.0881155075729794], [2.0881155075729794, 0.0, 2.0881155075729794], [2.0881155075729794, 2.0881155075729794, 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.8737903053711, 'volume': 72.83725044631976}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " '3c430b52-4a0e-410f-b998-5000702e12b3': {1: Response(output=[59.594114001534216, 62.90489811273073, 66.21568222392706, 69.52646633512354, 72.83725044631976], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'e306309a-4f67-435c-a175-0b98694d8cfd': {1: Response(output=[-1074.845744849063, -1074.9161489649603, -1074.9365241649446, -1074.9192859118161, -1074.8737903053711], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))},\n", + " 'ce94f2d9-5163-459e-a5ba-6c3c78147900': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jan/notebooks/2026/2026-01-16-executorlib-pwd/quantum_espresso'))}}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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m5ubIiQkRI5PqTzEuAxdfY3cSZvLcHXpD/G7IspT//3vf+VjRNlJjNU4cuSIQhf7Y8CAAXJG3KFDhxRRUVGK9evXy3FNn3/+uUIblZaWKjw8PORMwTvp0vvpvfqjWAffTxksabCdO3cqOnXqJAdpent7yzf424lBu2+99Zac8ioe8+CDD8pfcl3sj+joaDnmoLpDfBDo6mtEl4KluvbHN998o2jXrp0MCjp37qz47bffFLraH+LDb86cOQoXFxfZHx07dlSsWrWqxunjmm7v3r3yPSE8PPyu+3Tt/bS2/ojWwfdTPfEfVWe3iIiIiNQVxywRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRkU4TmwZ//PHHqm4GEakxBktEpLHGjBmDwYMHV3vf8ePHoaenh7NnzzZ7u4hIuzBYIiKN9cQTT+DgwYOIjY29675vv/0WXbp0Qbdu3VTSNiLSHgyWiEhjjR49Gg4ODtiwYUOV6/n5+fj5559lMLVt2zb4+fnBxMREltxWrVpV4/PFxMTIbFRISIjyWlZWlrx2+PBheVt8Fbf37t2Lrl27wszMDIMGDUJaWhp2794NHx8fWFlZYerUqbIdlcQ2nCtXrkSbNm3k93Tu3Blbt25tkn4hosbFYImINJahoSFmzZolg6Xb9wTfsmULioqKEBgYiMceewxTpkzBxYsXsXTpUrzxxht3BVf1IZ5r7dq1CAoKQnx8vPx3xNinH374AX/++Sf279+PTz/9VPn4119/HevXr8e6detw+fJlLFy4EDNmzMDff//d4LYQUdPSU9z+DkNEpGHCwsJkNkeU4x566CF5bcCAAXB1dZUZoPT0dOzbt0/5+FdeeUUGMyJgEUS26cUXX5SHyCy1bt0a586dkyW8ysxSy5YtcejQIQwcOFBmlsS/c+DAATz88MPyMStWrMDixYtx7do1mTkSnn76afl8e/bsQV5eHuzs7GQbRQBXad68eTL7JAIsIlJfzCwRkUbz9vZG37595RglQQQsR44cweOPP47Q0FD069evyuPF7cjISJSWljbo3w0ICFCeOzo6wtzcXBkoVV4TpTnhypUrKCgowJAhQ9CiRQvlsWnTJtleIlJvhqpuABFRQ4mxSQsWLMBnn30mS12enp4y6yMS5yK7dLvakun6+vp3Paa4uLjaxxoZGSnPxb9x++3Ka2VlZfK88qvIaImM1+3EWCoiUm/MLBGRxhPjhQwMDGQ5a+PGjZg7d64MVnx9fXH06NEqjxVjjDp06CAffyd7e3v5NTk5WXnt9sHe9SXaIYKiuLg4tGvXrsrh7u7e4OcnoqbFzBIRaTxR0po8eTKWLFmC7OxszJkzR15/+eWX0bNnT7z77rvyfrH2khiU/fnnn1f7PGKWWp8+feQYJDGW6fr163JgdkNZWlri3//+txzULbJM/fv3R05OjgzcRNtnz57d4H+DiJoOM0tEpDWluMzMTLlIpYeHh7wm1lj65Zdf8NNPP6FTp05488038c477yiDqeqIsU+i9NajRw+88MILeO+99xqlfSJgE//+8uXL5YD0YcOGYefOnXJAORGpN86GIyIiIqoFM0tEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERISa/T8ezoucFchGGAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "9a956c9e", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\n`pyiron_base`'s loader turns the graph into a list of delayed jobs. `.draw()` visualizes the dependency graph and `.pull()` executes the whole chain (relax + 5 strained SCF calculations), after the lattice constant override." + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "60e3a47c", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "2b5f8ac0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "create_function_job_5b061420d63d9ec78dec4ea199d17802\n", + "\n", + "create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a9f0>\n", + "\n", + "\n", + "\n", + "volume_lst_bab5e4fda3f1e5f52078772393f532bd\n", + "\n", + "volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a780>\n", + "\n", + "\n", + "\n", + "volume_lst_bab5e4fda3f1e5f52078772393f532bd->create_function_job_5b061420d63d9ec78dec4ea199d17802\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_660e411be80b9601df04a305c0b8d42c\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a1e0>\n", + "\n", + "\n", + "\n", + "0_660e411be80b9601df04a305c0b8d42c->volume_lst_bab5e4fda3f1e5f52078772393f532bd\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add\n", + "\n", + "working_directory=strain_0\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_660e411be80b9601df04a305c0b8d42c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_e6ee3581c44e7854efead20f04471309\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939bb0>\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_e6ee3581c44e7854efead20f04471309\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_66d2789b6d3a5694711b89056d28c94e\n", + "\n", + "energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a150>\n", + "\n", + "\n", + "\n", + "0_e6ee3581c44e7854efead20f04471309->energy_lst_66d2789b6d3a5694711b89056d28c94e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_1ae09ae858f19c8e60799472df8fb722\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938ef0>\n", + "\n", + "\n", + "\n", + "input_dict_1ae09ae858f19c8e60799472df8fb722->0_660e411be80b9601df04a305c0b8d42c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_1ae09ae858f19c8e60799472df8fb722->0_e6ee3581c44e7854efead20f04471309\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_5a1787d961459460ccaffe1e1d4ecccb\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938920>\n", + "\n", + "\n", + "\n", + "structure_5a1787d961459460ccaffe1e1d4ecccb->input_dict_1ae09ae858f19c8e60799472df8fb722\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_d174185e21e45d75662c968cd22e343f\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7917b60>\n", + "\n", + "\n", + "\n", + "structure_d174185e21e45d75662c968cd22e343f->structure_5a1787d961459460ccaffe1e1d4ecccb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_f767dff1064c80db5f7485234890502b\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938e90>\n", + "\n", + "\n", + "\n", + "structure_d174185e21e45d75662c968cd22e343f->structure_f767dff1064c80db5f7485234890502b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_ddec29d78e450302309468a205f853e0\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938b60>\n", + "\n", + "\n", + "\n", + "structure_d174185e21e45d75662c968cd22e343f->structure_ddec29d78e450302309468a205f853e0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_7058e2b0f9750c91bc4bfb196ef657c4\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938830>\n", + "\n", + "\n", + "\n", + "structure_d174185e21e45d75662c968cd22e343f->structure_7058e2b0f9750c91bc4bfb196ef657c4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_bd3567f1c4dea198450a9c5754169c6e\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938500>\n", + "\n", + "\n", + "\n", + "structure_d174185e21e45d75662c968cd22e343f->structure_bd3567f1c4dea198450a9c5754169c6e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_6ac5729accfaa2fc17b16aea0993239d\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938c20>\n", + "\n", + "\n", + "\n", + "structure_f767dff1064c80db5f7485234890502b->input_dict_6ac5729accfaa2fc17b16aea0993239d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_6f5f227e76a59bc3328c1589d19e76a8\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c798e210>\n", + "\n", + "\n", + "\n", + "structure_ddec29d78e450302309468a205f853e0->input_dict_6f5f227e76a59bc3328c1589d19e76a8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_6a9cf74e8db96e54fdfb0259b080fde5\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7938ad0>\n", + "\n", + "\n", + "\n", + "structure_7058e2b0f9750c91bc4bfb196ef657c4->input_dict_6a9cf74e8db96e54fdfb0259b080fde5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_5c935f1e934238da77888607adb78f21\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c79387a0>\n", + "\n", + "\n", + "\n", + "structure_bd3567f1c4dea198450a9c5754169c6e->input_dict_5c935f1e934238da77888607adb78f21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7\n", + "\n", + "working_directory=mini\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_d174185e21e45d75662c968cd22e343f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_e4882b06f1d1d2787261039e2cadf144\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7917b30>\n", + "\n", + "\n", + "\n", + "input_dict_e4882b06f1d1d2787261039e2cadf144->structure_d174185e21e45d75662c968cd22e343f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_f05da6b1fa437561d105bdc15c0397dc\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7917cb0>\n", + "\n", + "\n", + "\n", + "structure_f05da6b1fa437561d105bdc15c0397dc->input_dict_e4882b06f1d1d2787261039e2cadf144\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0\n", + "\n", + "element=Al\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0->structure_f05da6b1fa437561d105bdc15c0397dc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "a_457b6d376c6fce696df148a385afa46d\n", + "\n", + "a=4.04\n", + "\n", + "\n", + "\n", + "a_457b6d376c6fce696df148a385afa46d->structure_f05da6b1fa437561d105bdc15c0397dc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a\n", + "\n", + "cubic=True\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a->structure_f05da6b1fa437561d105bdc15c0397dc\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10\n", + "\n", + "pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_1ae09ae858f19c8e60799472df8fb722\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e4882b06f1d1d2787261039e2cadf144\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_6ac5729accfaa2fc17b16aea0993239d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_6f5f227e76a59bc3328c1589d19e76a8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_6a9cf74e8db96e54fdfb0259b080fde5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_5c935f1e934238da77888607adb78f21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_3f102cbfb29758610dc0341d9bfc5314\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a1b0>\n", + "\n", + "\n", + "\n", + "input_dict_6ac5729accfaa2fc17b16aea0993239d->1_3f102cbfb29758610dc0341d9bfc5314\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_1aafcac616c31f340be5f72208a8c4a6\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939b80>\n", + "\n", + "\n", + "\n", + "input_dict_6ac5729accfaa2fc17b16aea0993239d->1_1aafcac616c31f340be5f72208a8c4a6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_306ec52f73bd4cc0aa3c9ca487ebbd04\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939fd0>\n", + "\n", + "\n", + "\n", + "input_dict_6f5f227e76a59bc3328c1589d19e76a8->2_306ec52f73bd4cc0aa3c9ca487ebbd04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_1d6711e273989bd3e65c553533c25350\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c79396d0>\n", + "\n", + "\n", + "\n", + "input_dict_6f5f227e76a59bc3328c1589d19e76a8->2_1d6711e273989bd3e65c553533c25350\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_7da5e0a20fb71fd839016cb73b56e605\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a330>\n", + "\n", + "\n", + "\n", + "input_dict_6a9cf74e8db96e54fdfb0259b080fde5->3_7da5e0a20fb71fd839016cb73b56e605\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_a0c6deb5c976cd0c5a3056ba4168a962\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939d00>\n", + "\n", + "\n", + "\n", + "input_dict_6a9cf74e8db96e54fdfb0259b080fde5->3_a0c6deb5c976cd0c5a3056ba4168a962\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_f1a7b8e82b6bf6190263e6e6d63b9ebf\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c793a3f0>\n", + "\n", + "\n", + "\n", + "input_dict_5c935f1e934238da77888607adb78f21->4_f1a7b8e82b6bf6190263e6e6d63b9ebf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_b415c675207adb05d16e428662ace723\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x7f54c7939dc0>\n", + "\n", + "\n", + "\n", + "input_dict_5c935f1e934238da77888607adb78f21->4_b415c675207adb05d16e428662ace723\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa\n", + "\n", + "kpts=[3, 3, 3]\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_1ae09ae858f19c8e60799472df8fb722\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e4882b06f1d1d2787261039e2cadf144\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_6ac5729accfaa2fc17b16aea0993239d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_6f5f227e76a59bc3328c1589d19e76a8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_6a9cf74e8db96e54fdfb0259b080fde5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_5c935f1e934238da77888607adb78f21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34\n", + "\n", + "calculation=vc-relax\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_e4882b06f1d1d2787261039e2cadf144\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9\n", + "\n", + "smearing=0.02\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_1ae09ae858f19c8e60799472df8fb722\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e4882b06f1d1d2787261039e2cadf144\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_6ac5729accfaa2fc17b16aea0993239d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_6f5f227e76a59bc3328c1589d19e76a8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_6a9cf74e8db96e54fdfb0259b080fde5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_5c935f1e934238da77888607adb78f21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86\n", + "\n", + "strain_lst=[0.9, 0.9500000000000001, 1.0, 1.05, 1.1]\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_5a1787d961459460ccaffe1e1d4ecccb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_f767dff1064c80db5f7485234890502b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_ddec29d78e450302309468a205f853e0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_7058e2b0f9750c91bc4bfb196ef657c4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_bd3567f1c4dea198450a9c5754169c6e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83\n", + "\n", + "calculation=scf\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_1ae09ae858f19c8e60799472df8fb722\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_6ac5729accfaa2fc17b16aea0993239d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_6f5f227e76a59bc3328c1589d19e76a8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_6a9cf74e8db96e54fdfb0259b080fde5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_5c935f1e934238da77888607adb78f21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_3f102cbfb29758610dc0341d9bfc5314->volume_lst_bab5e4fda3f1e5f52078772393f532bd\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd\n", + "\n", + "working_directory=strain_1\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_3f102cbfb29758610dc0341d9bfc5314\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_1aafcac616c31f340be5f72208a8c4a6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_1aafcac616c31f340be5f72208a8c4a6->energy_lst_66d2789b6d3a5694711b89056d28c94e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_306ec52f73bd4cc0aa3c9ca487ebbd04->volume_lst_bab5e4fda3f1e5f52078772393f532bd\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992\n", + "\n", + "working_directory=strain_2\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_306ec52f73bd4cc0aa3c9ca487ebbd04\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_1d6711e273989bd3e65c553533c25350\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_1d6711e273989bd3e65c553533c25350->energy_lst_66d2789b6d3a5694711b89056d28c94e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_7da5e0a20fb71fd839016cb73b56e605->volume_lst_bab5e4fda3f1e5f52078772393f532bd\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f\n", + "\n", + "working_directory=strain_3\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_7da5e0a20fb71fd839016cb73b56e605\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_a0c6deb5c976cd0c5a3056ba4168a962\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_a0c6deb5c976cd0c5a3056ba4168a962->energy_lst_66d2789b6d3a5694711b89056d28c94e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_f1a7b8e82b6bf6190263e6e6d63b9ebf->volume_lst_bab5e4fda3f1e5f52078772393f532bd\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7\n", + "\n", + "working_directory=strain_4\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_f1a7b8e82b6bf6190263e6e6d63b9ebf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_b415c675207adb05d16e428662ace723\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_b415c675207adb05d16e428662ace723->energy_lst_66d2789b6d3a5694711b89056d28c94e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_66d2789b6d3a5694711b89056d28c94e->create_function_job_5b061420d63d9ec78dec4ea199d17802\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "6a5b0297", + "metadata": {}, + "outputs": [], + "source": [ + "delayed_object_lst[0].input['a'] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5a1666ae", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job get_bulk_structure_2ca4aeae204ceaa28593c93054b07908 was saved and received the ID: 40\n", + "The job get_dict_1e47509b88d63a21fd421686554c8f4a was saved and received the ID: 41\n", + "The job calculate_qe_411e578f2700d09ba2df9a4c682b4582 was saved and received the ID: 42\n", + "The job generate_structures_7f140b9836b0bba16af81baf1b246241 was saved and received the ID: 43\n", + "The job get_dict_c58ae4a3f59bfb45975f3785a2ea7f39 was saved and received the ID: 44\n", + "The job calculate_qe_fe50ef8ac8518002303cd38ac9d6815a was saved and received the ID: 45\n", + "The job get_dict_15fbde13a9aabf52685fc04f66093040 was saved and received the ID: 46\n", + "The job calculate_qe_80b9c98a7807cac136aa34a89dde5b3c was saved and received the ID: 47\n", + "The job get_dict_63901158944acf473876b0bcffdfc90c was saved and received the ID: 48\n", + "The job calculate_qe_d20ea0f0eb2b5331fdae70cdb74b5b47 was saved and received the ID: 49\n", + "The job get_dict_0426b545b339ef96773c978a8d508c0b was saved and received the ID: 50\n", + "The job calculate_qe_0e46fbe7e87a5b5a8cadd21dad9584fc was saved and received the ID: 51\n", + "The job get_dict_cfd40a0a40679f9c358ca371dcf2f5c2 was saved and received the ID: 52\n", + "The job calculate_qe_ad9c11a3767907eb1b0532258092495c was saved and received the ID: 53\n", + "The job get_list_58b9234b924f260fdd0ca16332ed9a67 was saved and received the ID: 54\n", + "The job get_list_093dd62325e29744484ef602b97e825f was saved and received the ID: 55\n", + "The job plot_energy_volume_curve_9e2db727fd8ef415e376c937e44a8213 was saved and received the ID: 56\n" + ] + }, + { + "data": { + "image/png": "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m5ubIiQkRI5PqTzEuAxdfY3cSZvLcHXpD/G7IspT//3vf+VjRNlJjNU4cuSIQhf7Y8CAAXJG3KFDhxRRUVGK9evXy3FNn3/+uUIblZaWKjw8PORMwTvp0vvpvfqjWAffTxksabCdO3cqOnXqJAdpent7yzf424lBu2+99Zac8ioe8+CDD8pfcl3sj+joaDnmoLpDfBDo6mtEl4KluvbHN998o2jXrp0MCjp37qz47bffFLraH+LDb86cOQoXFxfZHx07dlSsWrWqxunjmm7v3r3yPSE8PPyu+3Tt/bS2/ojWwfdTPfEfVWe3iIiIiNQVxywRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRkU4TmwZ//PHHqm4GEakxBktEpLHGjBmDwYMHV3vf8ePHoaenh7NnzzZ7u4hIuzBYIiKN9cQTT+DgwYOIjY29675vv/0WXbp0Qbdu3VTSNiLSHgyWiEhjjR49Gg4ODtiwYUOV6/n5+fj5559lMLVt2zb4+fnBxMREltxWrVpV4/PFxMTIbFRISIjyWlZWlrx2+PBheVt8Fbf37t2Lrl27wszMDIMGDUJaWhp2794NHx8fWFlZYerUqbIdlcQ2nCtXrkSbNm3k93Tu3Blbt25tkn4hosbFYImINJahoSFmzZolg6Xb9wTfsmULioqKEBgYiMceewxTpkzBxYsXsXTpUrzxxht3BVf1IZ5r7dq1CAoKQnx8vPx3xNinH374AX/++Sf279+PTz/9VPn4119/HevXr8e6detw+fJlLFy4EDNmzMDff//d4LYQUdPSU9z+DkNEpGHCwsJkNkeU4x566CF5bcCAAXB1dZUZoPT0dOzbt0/5+FdeeUUGMyJgEUS26cUXX5SHyCy1bt0a586dkyW8ysxSy5YtcejQIQwcOFBmlsS/c+DAATz88MPyMStWrMDixYtx7do1mTkSnn76afl8e/bsQV5eHuzs7GQbRQBXad68eTL7JAIsIlJfzCwRkUbz9vZG37595RglQQQsR44cweOPP47Q0FD069evyuPF7cjISJSWljbo3w0ICFCeOzo6wtzcXBkoVV4TpTnhypUrKCgowJAhQ9CiRQvlsWnTJtleIlJvhqpuABFRQ4mxSQsWLMBnn30mS12enp4y6yMS5yK7dLvakun6+vp3Paa4uLjaxxoZGSnPxb9x++3Ka2VlZfK88qvIaImM1+3EWCoiUm/MLBGRxhPjhQwMDGQ5a+PGjZg7d64MVnx9fXH06NEqjxVjjDp06CAffyd7e3v5NTk5WXnt9sHe9SXaIYKiuLg4tGvXrsrh7u7e4OcnoqbFzBIRaTxR0po8eTKWLFmC7OxszJkzR15/+eWX0bNnT7z77rvyfrH2khiU/fnnn1f7PGKWWp8+feQYJDGW6fr163JgdkNZWlri3//+txzULbJM/fv3R05OjgzcRNtnz57d4H+DiJoOM0tEpDWluMzMTLlIpYeHh7wm1lj65Zdf8NNPP6FTp05488038c477yiDqeqIsU+i9NajRw+88MILeO+99xqlfSJgE//+8uXL5YD0YcOGYefOnXJAORGpN86GIyIiIqoFM0tEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERISa/T8ezoucFchGGAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst[-1].pull()" + ] + }, + { + "cell_type": "markdown", + "id": "406b0429e65b9760", + "metadata": {}, + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the graph is loaded into a `pyiron_workflow` `Workflow`, its lattice constant overridden, drawn with `.draw()`, and executed with `.run()`." + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "1b45a453f593202f", + "metadata": {}, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "97ef39ae859855ab", + "metadata": {}, + "outputs": [], + "source": [ + "wf = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4368c6921b71e396", + "metadata": {}, + "outputs": [], + "source": [ + "wf.get_bulk_structure.inputs.a.value = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "659ccc92-a4d9-4876-a63a-be5dac50e295", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qe\n", + "\n", + "executorlib_qe: Workflow\n", + "\n", + "clusterexecutorlib_qeInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_bulk_structure: get_bulk_structure\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_0: calculate_qe\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structures\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "generate_structures: generate_structures\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_1: calculate_qe\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_2: calculate_qe\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_3: calculate_qe\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_4: calculate_qe\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_5: calculate_qe\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_energy_volume_curve: plot_energy_volume_curve\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_0: get_dict\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_1: get_dict\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_2: get_dict\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_3: get_dict\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_4: get_dict\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_5: get_dict\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_0: get_list\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_1: get_list\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m6720263453336892414: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m5192631277149654622: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m849577779288197366: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_5951870909743653040: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7836207314751032173: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_6433507487520335553: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7869024876371549904: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m4218471151653974509: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m1085943981688640947: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7250078437459878721: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_559636883763074885: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_3038824414599959243: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m1872070586173770857: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_6632549865328393813: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_8220875466878116434: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m4760082579177574284: GetItem\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_bulk_structure__element\n", + "\n", + "get_bulk_structure__element\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureInputselement\n", + "\n", + "element\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_bulk_structure__element->clusterexecutorlib_qeget_bulk_structureInputselement\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_bulk_structure__a\n", + "\n", + "get_bulk_structure__a\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureInputsa\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_bulk_structure__a->clusterexecutorlib_qeget_bulk_structureInputsa\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_bulk_structure__cubic\n", + "\n", + "get_bulk_structure__cubic\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureInputscubic\n", + "\n", + "cubic\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_bulk_structure__cubic->clusterexecutorlib_qeget_bulk_structureInputscubic\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_0__working_directory\n", + "\n", + "calculate_qe_0__working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_0__working_directory->clusterexecutorlib_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsgenerate_structures__strain_lst\n", + "\n", + "generate_structures__strain_lst\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresInputsstrain_lst\n", + "\n", + "strain_lst\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsgenerate_structures__strain_lst->clusterexecutorlib_qegenerate_structuresInputsstrain_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_1__working_directory\n", + "\n", + "calculate_qe_1__working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_1__working_directory->clusterexecutorlib_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_2__working_directory\n", + "\n", + "calculate_qe_2__working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_2__working_directory->clusterexecutorlib_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_3__working_directory\n", + "\n", + "calculate_qe_3__working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_3__working_directory->clusterexecutorlib_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_4__working_directory\n", + "\n", + "calculate_qe_4__working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_4__working_directory->clusterexecutorlib_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_5__working_directory\n", + "\n", + "calculate_qe_5__working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputscalculate_qe_5__working_directory->clusterexecutorlib_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__pseudopotentials\n", + "\n", + "get_dict_0__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__pseudopotentials->clusterexecutorlib_qeget_dict_0Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__kpts\n", + "\n", + "get_dict_0__kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__kpts->clusterexecutorlib_qeget_dict_0Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__calculation\n", + "\n", + "get_dict_0__calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__calculation->clusterexecutorlib_qeget_dict_0Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__smearing\n", + "\n", + "get_dict_0__smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_0__smearing->clusterexecutorlib_qeget_dict_0Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__pseudopotentials\n", + "\n", + "get_dict_1__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__pseudopotentials->clusterexecutorlib_qeget_dict_1Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__kpts\n", + "\n", + "get_dict_1__kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__kpts->clusterexecutorlib_qeget_dict_1Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__calculation\n", + "\n", + "get_dict_1__calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__calculation->clusterexecutorlib_qeget_dict_1Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__smearing\n", + "\n", + "get_dict_1__smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_1__smearing->clusterexecutorlib_qeget_dict_1Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__pseudopotentials\n", + "\n", + "get_dict_2__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__pseudopotentials->clusterexecutorlib_qeget_dict_2Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__kpts\n", + "\n", + "get_dict_2__kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__kpts->clusterexecutorlib_qeget_dict_2Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__calculation\n", + "\n", + "get_dict_2__calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__calculation->clusterexecutorlib_qeget_dict_2Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__smearing\n", + "\n", + "get_dict_2__smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_2__smearing->clusterexecutorlib_qeget_dict_2Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__pseudopotentials\n", + "\n", + "get_dict_3__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__pseudopotentials->clusterexecutorlib_qeget_dict_3Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__kpts\n", + "\n", + "get_dict_3__kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__kpts->clusterexecutorlib_qeget_dict_3Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__calculation\n", + "\n", + "get_dict_3__calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__calculation->clusterexecutorlib_qeget_dict_3Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__smearing\n", + "\n", + "get_dict_3__smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_3__smearing->clusterexecutorlib_qeget_dict_3Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__pseudopotentials\n", + "\n", + "get_dict_4__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__pseudopotentials->clusterexecutorlib_qeget_dict_4Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__kpts\n", + "\n", + "get_dict_4__kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__kpts->clusterexecutorlib_qeget_dict_4Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__calculation\n", + "\n", + "get_dict_4__calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__calculation->clusterexecutorlib_qeget_dict_4Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__smearing\n", + "\n", + "get_dict_4__smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_4__smearing->clusterexecutorlib_qeget_dict_4Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__pseudopotentials\n", + "\n", + "get_dict_5__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__pseudopotentials->clusterexecutorlib_qeget_dict_5Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__kpts\n", + "\n", + "get_dict_5__kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__kpts->clusterexecutorlib_qeget_dict_5Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__calculation\n", + "\n", + "get_dict_5__calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__calculation->clusterexecutorlib_qeget_dict_5Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__smearing\n", + "\n", + "get_dict_5__smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsget_dict_5__smearing->clusterexecutorlib_qeget_dict_5Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m6720263453336892414__item\n", + "\n", + "injected_GetItem_m6720263453336892414__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m6720263453336892414__item->clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m5192631277149654622__item\n", + "\n", + "injected_GetItem_m5192631277149654622__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m5192631277149654622__item->clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m849577779288197366__item\n", + "\n", + "injected_GetItem_m849577779288197366__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m849577779288197366__item->clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_5951870909743653040__item\n", + "\n", + "injected_GetItem_5951870909743653040__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_5951870909743653040__item->clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m7836207314751032173__item\n", + "\n", + "injected_GetItem_m7836207314751032173__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m7836207314751032173__item->clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_6433507487520335553__item\n", + "\n", + "injected_GetItem_6433507487520335553__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_6433507487520335553__item->clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m7869024876371549904__item\n", + "\n", + "injected_GetItem_m7869024876371549904__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m7869024876371549904__item->clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m4218471151653974509__item\n", + "\n", + "injected_GetItem_m4218471151653974509__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m4218471151653974509__item->clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m1085943981688640947__item\n", + "\n", + "injected_GetItem_m1085943981688640947__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m1085943981688640947__item->clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m7250078437459878721__item\n", + "\n", + "injected_GetItem_m7250078437459878721__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m7250078437459878721__item->clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_559636883763074885__item\n", + "\n", + "injected_GetItem_559636883763074885__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_559636883763074885__item->clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_3038824414599959243__item\n", + "\n", + "injected_GetItem_3038824414599959243__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_3038824414599959243__item->clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m1872070586173770857__item\n", + "\n", + "injected_GetItem_m1872070586173770857__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m1872070586173770857__item->clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_6632549865328393813__item\n", + "\n", + "injected_GetItem_6632549865328393813__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_6632549865328393813__item->clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_8220875466878116434__item\n", + "\n", + "injected_GetItem_8220875466878116434__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_8220875466878116434__item->clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m4760082579177574284__item\n", + "\n", + "injected_GetItem_m4760082579177574284__item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeInputsinjected_GetItem_m4760082579177574284__item->clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionget_bulk_structure\n", + "\n", + "get_bulk_structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusterexecutorlib_qeget_dict_0Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0\n", + "\n", + "calculate_qe_0\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresInputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures\n", + "\n", + "generate_structures\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1\n", + "\n", + "calculate_qe_1\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2\n", + "\n", + "calculate_qe_2\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3\n", + "\n", + "calculate_qe_3\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4\n", + "\n", + "calculate_qe_4\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5\n", + "\n", + "calculate_qe_5\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "volume_lst\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "energy_lst\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusterexecutorlib_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0OutputsWithInjectionget_dict_0\n", + "\n", + "get_dict_0\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_0OutputsWithInjectionget_dict_0->clusterexecutorlib_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1OutputsWithInjectionget_dict_1\n", + "\n", + "get_dict_1\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_1OutputsWithInjectionget_dict_1->clusterexecutorlib_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2OutputsWithInjectionget_dict_2\n", + "\n", + "get_dict_2\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_2OutputsWithInjectionget_dict_2->clusterexecutorlib_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3OutputsWithInjectionget_dict_3\n", + "\n", + "get_dict_3\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_3OutputsWithInjectionget_dict_3->clusterexecutorlib_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4OutputsWithInjectionget_dict_4\n", + "\n", + "get_dict_4\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_4OutputsWithInjectionget_dict_4->clusterexecutorlib_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5OutputsWithInjectionget_dict_5\n", + "\n", + "get_dict_5\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_dict_5OutputsWithInjectionget_dict_5->clusterexecutorlib_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0OutputsWithInjectionget_list_0\n", + "\n", + "get_list_0\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_0OutputsWithInjectionget_list_0->clusterexecutorlib_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1OutputsWithInjectionget_list_1\n", + "\n", + "get_list_1\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeget_list_1OutputsWithInjectionget_list_1->clusterexecutorlib_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m6720263453336892414OutputsWithInjectiongetitem->clusterexecutorlib_qegenerate_structuresInputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m5192631277149654622OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_1Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m849577779288197366OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_2Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_5951870909743653040OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_3Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7836207314751032173OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_4Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6433507487520335553OutputsWithInjectiongetitem->clusterexecutorlib_qeget_dict_5Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7869024876371549904OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4218471151653974509OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1085943981688640947OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m7250078437459878721OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_559636883763074885OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_0Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_3038824414599959243OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m1872070586173770857OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_6632549865328393813OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_8220875466878116434OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterexecutorlib_qeinjected_GetItem_m4760082579177574284OutputsWithInjectiongetitem->clusterexecutorlib_qeget_list_1Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "1007f60c-23eb-4a28-a5c7-ea0c0909be38", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'plot_energy_volume_curve__plot_energy_volume_curve': None}" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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m5ubIiQkRI5PqTzEuAxdfY3cSZvLcHXpD/G7IspT//3vf+VjRNlJjNU4cuSIQhf7Y8CAAXJG3KFDhxRRUVGK9evXy3FNn3/+uUIblZaWKjw8PORMwTvp0vvpvfqjWAffTxksabCdO3cqOnXqJAdpent7yzf424lBu2+99Zac8ioe8+CDD8pfcl3sj+joaDnmoLpDfBDo6mtEl4KluvbHN998o2jXrp0MCjp37qz47bffFLraH+LDb86cOQoXFxfZHx07dlSsWrWqxunjmm7v3r3yPSE8PPyu+3Tt/bS2/ojWwfdTPfEfVWe3iIiIiNQVxywRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRERER1YLBEhEREVEtGCwRkU4TmwZ//PHHqm4GEakxBktEpLHGjBmDwYMHV3vf8ePHoaenh7NnzzZ7u4hIuzBYIiKN9cQTT+DgwYOIjY29675vv/0WXbp0Qbdu3VTSNiLSHgyWiEhjjR49Gg4ODtiwYUOV6/n5+fj5559lMLVt2zb4+fnBxMREltxWrVpV4/PFxMTIbFRISIjyWlZWlrx2+PBheVt8Fbf37t2Lrl27wszMDIMGDUJaWhp2794NHx8fWFlZYerUqbIdlcQ2nCtXrkSbNm3k93Tu3Blbt25tkn4hosbFYImINJahoSFmzZolg6Xb9wTfsmULioqKEBgYiMceewxTpkzBxYsXsXTpUrzxxht3BVf1IZ5r7dq1CAoKQnx8vPx3xNinH374AX/++Sf279+PTz/9VPn4119/HevXr8e6detw+fJlLFy4EDNmzMDff//d4LYQUdPSU9z+DkNEpGHCwsJkNkeU4x566CF5bcCAAXB1dZUZoPT0dOzbt0/5+FdeeUUGMyJgEUS26cUXX5SHyCy1bt0a586dkyW8ysxSy5YtcejQIQwcOFBmlsS/c+DAATz88MPyMStWrMDixYtx7do1mTkSnn76afl8e/bsQV5eHuzs7GQbRQBXad68eTL7JAIsIlJfzCwRkUbz9vZG37595RglQQQsR44cweOPP47Q0FD069evyuPF7cjISJSWljbo3w0ICFCeOzo6wtzcXBkoVV4TpTnhypUrKCgowJAhQ9CiRQvlsWnTJtleIlJvhqpuABFRQ4mxSQsWLMBnn30mS12enp4y6yMS5yK7dLvakun6+vp3Paa4uLjaxxoZGSnPxb9x++3Ka2VlZfK88qvIaImM1+3EWCoiUm/MLBGRxhPjhQwMDGQ5a+PGjZg7d64MVnx9fXH06NEqjxVjjDp06CAffyd7e3v5NTk5WXnt9sHe9SXaIYKiuLg4tGvXrsrh7u7e4OcnoqbFzBIRaTxR0po8eTKWLFmC7OxszJkzR15/+eWX0bNnT7z77rvyfrH2khiU/fnnn1f7PGKWWp8+feQYJDGW6fr163JgdkNZWlri3//+txzULbJM/fv3R05OjgzcRNtnz57d4H+DiJoOM0tEpDWluMzMTLlIpYeHh7wm1lj65Zdf8NNPP6FTp05488038c477yiDqeqIsU+i9NajRw+88MILeO+99xqlfSJgE//+8uXL5YD0YcOGYefOnXJAORGpN86GIyIiIqoFM0tEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERFQLBktEREREtWCwRERERISa/T8ezoucFchGGAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "wf.run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5022eb03-b714-409d-b82b-cada385b351d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/_sources/example_workflows/quantum_espresso/jobflow.ipynb b/_sources/example_workflows/quantum_espresso/jobflow.ipynb new file mode 100644 index 00000000..d8b1e1fa --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/jobflow.ipynb @@ -0,0 +1,5739 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# jobflow" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "[`jobflow`](https://materialsproject.github.io/jobflow/index.html) and [`atomate2`](https://materialsproject.github.io/atomate2/index.html) are key packages of the [Materials Project](https://materialsproject.org/) . `jobflow` was especially designed to simplify the execution of dynamic workflows -- when the actual number of jobs is dynamically determined upon runtime instead of being statically fixed before running the workflow(s). `jobflow`'s overall flexibility allows for building workflows that go beyond the usage in materials science. `jobflow` serves as the basis of `atomate2`, which implements data generation workflows in the context of materials science and will be used for data generation in the Materials Project in the future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define workflow with jobflow\n", + "\n", + "We start by importing the job decorator and Flow class from `jobflow` and the respective PWD tools." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from jobflow import job, Flow" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import write_workflow_json" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "## Quantum Espresso Workflow\n", + "We will use the knowledge from the previous arithmetic workflow example to create the Quantum Espresso-related tasks for calculating an \"Energy vs. Volume\" curve. It’s important to note that this is only a basic implementation, and further extensions towards data validation or for a simplified user experience can be added. For example, one can typically configure run commands for quantum-chemical programs via configuration files in atomate2." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from workflow import (\n", + " calculate_qe as _calculate_qe, \n", + " generate_structures as _generate_structures, \n", + " get_bulk_structure as _get_bulk_structure, \n", + " plot_energy_volume_curve as _plot_energy_volume_curve,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "workflow_json_filename = \"jobflow_qe.json\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "calculate_qe = job(_calculate_qe)\n", + "generate_structures = job(_generate_structures)\n", + "plot_energy_volume_curve = job(_plot_energy_volume_curve)\n", + "get_bulk_structure = job(_get_bulk_structure)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "We need to specify the typical QE input like pseudopotential(s) and structure model." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "pseudopotentials = {\"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "structure = get_bulk_structure(\n", + " element=\"Al\",\n", + " a=4.04,\n", + " cubic=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "calc_mini = calculate_qe(\n", + " working_directory=\"mini\",\n", + " input_dict={\n", + " \"structure\": structure.output,\n", + " \"pseudopotentials\": pseudopotentials,\n", + " \"kpts\": (3, 3, 3),\n", + " \"calculation\": \"vc-relax\",\n", + " \"smearing\": 0.02,\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": "Next, for the \"Energy vs. Volume\" curve, we need to specify the number of strained structures and save them into a list object. This is the fan-out point of the workflow: for each of the `number_of_strains` (5) strained structures, an independent `scf` QE calculation is carried out below." + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "number_of_strains = 5\n", + "structure_lst = generate_structures(\n", + " structure=calc_mini.output.structure,\n", + " strain_lst=np.linspace(0.9, 1.1, number_of_strains),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "job_strain_lst = []\n", + "for i in range(number_of_strains):\n", + " calc_strain = calculate_qe(\n", + " working_directory=\"strain_\" + str(i),\n", + " input_dict={\n", + " \"structure\": getattr(structure_lst.output, f\"s_{i}\"),\n", + " \"pseudopotentials\": pseudopotentials,\n", + " \"kpts\": (3, 3, 3),\n", + " \"calculation\": \"scf\",\n", + " \"smearing\": 0.02,\n", + " },\n", + " )\n", + " job_strain_lst.append(calc_strain)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "Finally, we specify a plotter for the \"Energy vs. Volume\" curve and can export the workflow." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "plot = plot_energy_volume_curve(\n", + " volume_lst=[job.output.volume for job in job_strain_lst],\n", + " energy_lst=[job.output.energy for job in job_strain_lst],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow = Flow([structure, calc_mini, structure_lst] + job_strain_lst + [plot])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "write_workflow_json(flow=flow, file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_bulk_structure\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.generate_structures\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 6,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 7,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 8,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.plot_energy_volume_curve\"\n", + " },\n", + " {\n", + " \"id\": 9,\n", + " \"type\": \"input\",\n", + " \"name\": \"element\",\n", + " \"value\": \"Al\"\n", + " },\n", + " {\n", + " \"id\": 10,\n", + " \"type\": \"input\",\n", + " \"name\": \"a\",\n", + " \"value\": 4.04\n", + " },\n", + " {\n", + " \"id\": 11,\n", + " \"type\": \"input\",\n", + " \"name\": \"cubic\",\n", + " \"value\": true\n", + " },\n", + " {\n", + " \"id\": 12,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_0\",\n", + " \"value\": \"mini\"\n", + " },\n", + " {\n", + " \"id\": 13,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 14,\n", + " \"type\": \"input\",\n", + " \"name\": \"pseudopotentials\",\n", + " \"value\": {\n", + " \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n", + " }\n", + " },\n", + " {\n", + " \"id\": 15,\n", + " \"type\": \"input\",\n", + " \"name\": \"kpts\",\n", + " \"value\": [\n", + " 3,\n", + " 3,\n", + " 3\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 16,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_0\",\n", + " \"value\": \"vc-relax\"\n", + " },\n", + " {\n", + " \"id\": 17,\n", + " \"type\": \"input\",\n", + " \"name\": \"smearing\",\n", + " \"value\": 0.02\n", + " },\n", + " {\n", + " \"id\": 18,\n", + " \"type\": \"input\",\n", + " \"name\": \"strain_lst\",\n", + " \"value\": [\n", + " 0.9,\n", + " 0.9500000000000001,\n", + " 1.0,\n", + " 1.05,\n", + " 1.1\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 19,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_1\",\n", + " \"value\": \"strain_0\"\n", + " },\n", + " {\n", + " \"id\": 20,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 21,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_1\",\n", + " \"value\": \"scf\"\n", + " },\n", + " {\n", + " \"id\": 22,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_2\",\n", + " \"value\": \"strain_1\"\n", + " },\n", + " {\n", + " \"id\": 23,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 24,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_3\",\n", + " \"value\": \"strain_2\"\n", + " },\n", + " {\n", + " \"id\": 25,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 26,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_4\",\n", + " \"value\": \"strain_3\"\n", + " },\n", + " {\n", + " \"id\": 27,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 28,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_5\",\n", + " \"value\": \"strain_4\"\n", + " },\n", + " {\n", + " \"id\": 29,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 30,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 31,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 32,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"element\",\n", + " \"source\": 9,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"a\",\n", + " \"source\": 10,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"cubic\",\n", + " \"source\": 11,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 12,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 0,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 16,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 13,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 1,\n", + " \"sourcePort\": \"structure\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"strain_lst\",\n", + " \"source\": 18,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 19,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_0\"\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 20,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_1\"\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 23,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 24,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_2\"\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 25,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 26,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_3\"\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 27,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 28,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"s_4\"\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 29,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 29,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 6,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 30,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 7,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"volume_lst\",\n", + " \"source\": 30,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 6,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 31,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 7,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"energy_lst\",\n", + " \"source\": 31,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 32,\n", + " \"targetPort\": null,\n", + " \"source\": 8,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Workflow with aiida\n", + "\n", + "Now, we can import the workflow, run it with `aiida` and plot the \"Energy vs. Volume\" curve." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Profile" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from aiida import orm, load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wg = load_workflow_json(workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "trusted": true + }, + "outputs": [], + "source": [ + "wg.tasks.get_bulk_structure.inputs.a.value = orm.Float(4.05)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e9bb01de73ff4284a7578d7064ae369f", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wg" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "05/26/2025 04:59:05 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_bulk_structure1\n", + "05/26/2025 04:59:05 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_bulk_structure1, type: PyFunction, finished.\n", + "05/26/2025 04:59:05 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict10\n", + "05/26/2025 04:59:06 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_dict10, type: PyFunction, finished.\n", + "05/26/2025 04:59:06 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe2\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02569] 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", + "05/26/2025 04:59:56 AM <2497> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['energy', 'volume'])\n", + "05/26/2025 04:59:57 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: calculate_qe2, type: PyFunction, finished.\n", + "05/26/2025 04:59:57 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_structures3\n", + "05/26/2025 04:59:58 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: generate_structures3, type: PyFunction, finished.\n", + "05/26/2025 04:59:58 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict11,get_dict12,get_dict13,get_dict14,get_dict15\n", + "05/26/2025 04:59:58 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_dict11, type: PyFunction, finished.\n", + "05/26/2025 04:59:58 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe4,get_dict12,get_dict13,get_dict14,get_dict15\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02586] 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", + "05/26/2025 05:00:10 AM <2497> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:00:10 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: calculate_qe4, type: PyFunction, finished.\n", + "05/26/2025 05:00:10 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict12,get_dict13,get_dict14,get_dict15\n", + "05/26/2025 05:00:11 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_dict12, type: PyFunction, finished.\n", + "05/26/2025 05:00:11 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe5,get_dict13,get_dict14,get_dict15\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02596] 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", + "05/26/2025 05:00:22 AM <2497> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:00:22 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: calculate_qe5, type: PyFunction, finished.\n", + "05/26/2025 05:00:22 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict13,get_dict14,get_dict15\n", + "05/26/2025 05:00:23 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_dict13, type: PyFunction, finished.\n", + "05/26/2025 05:00:23 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe6,get_dict14,get_dict15\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02606] 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", + "05/26/2025 05:00:35 AM <2497> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:00:35 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: calculate_qe6, type: PyFunction, finished.\n", + "05/26/2025 05:00:35 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict14,get_dict15\n", + "05/26/2025 05:00:35 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_dict14, type: PyFunction, finished.\n", + "05/26/2025 05:00:36 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe7,get_dict15\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02616] 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", + "05/26/2025 05:00:50 AM <2497> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:00:51 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: calculate_qe7, type: PyFunction, finished.\n", + "05/26/2025 05:00:51 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict15\n", + "05/26/2025 05:00:51 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_dict15, type: PyFunction, finished.\n", + "05/26/2025 05:00:51 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe8\n", + "[jupyter-pythonworkflow-fl--x---218119f8:02626] 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", + "05/26/2025 05:01:05 AM <2497> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:01:05 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: calculate_qe8, type: PyFunction, finished.\n", + "05/26/2025 05:01:06 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list16,get_list17\n", + "05/26/2025 05:01:06 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_list16, type: PyFunction, finished.\n", + "05/26/2025 05:01:07 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list17\n", + "05/26/2025 05:01:07 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: get_list17, type: PyFunction, finished.\n", + "05/26/2025 05:01:07 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_energy_volume_curve9\n", + "05/26/2025 05:01:08 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|update_task_state]: Task: plot_energy_volume_curve9, type: PyFunction, finished.\n", + "05/26/2025 05:01:08 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", + "05/26/2025 05:01:08 AM <2497> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [111|WorkGraphEngine|finalize]: Finalize workgraph.\n" + ] + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\nAnd we can repeat the same process using `pyiron_base`: `load_workflow_json` turns the graph into a list of delayed jobs, `.draw()` visualizes the dependency graph, and `.pull()` executes the whole chain (relax + 5 strained SCF calculations) after overriding the lattice constant `a`." + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "create_function_job_7a6b0a5d731ab6c2313227f09941d617\n", + "\n", + "create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521b110>\n", + "\n", + "\n", + "\n", + "volume_lst_30c54979ac77823618f2e69329ff2e23\n", + "\n", + "volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521aea0>\n", + "\n", + "\n", + "\n", + "volume_lst_30c54979ac77823618f2e69329ff2e23->create_function_job_7a6b0a5d731ab6c2313227f09941d617\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_b28c4ab19cf80aceb6ea9905c5579cdf\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a900>\n", + "\n", + "\n", + "\n", + "0_b28c4ab19cf80aceb6ea9905c5579cdf->volume_lst_30c54979ac77823618f2e69329ff2e23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add\n", + "\n", + "working_directory=strain_0\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_b28c4ab19cf80aceb6ea9905c5579cdf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_31407cd5438b8f801835dcb5c1b4d41c\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a2d0>\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_31407cd5438b8f801835dcb5c1b4d41c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61\n", + "\n", + "energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a870>\n", + "\n", + "\n", + "\n", + "0_31407cd5438b8f801835dcb5c1b4d41c->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_26015174619bcf580cff994859503441\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219610>\n", + "\n", + "\n", + "\n", + "input_dict_26015174619bcf580cff994859503441->0_b28c4ab19cf80aceb6ea9905c5579cdf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_26015174619bcf580cff994859503441->0_31407cd5438b8f801835dcb5c1b4d41c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_d68ff2adbab972340efae09bf2dca5b6\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219340>\n", + "\n", + "\n", + "\n", + "structure_d68ff2adbab972340efae09bf2dca5b6->input_dict_26015174619bcf580cff994859503441\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_f26c3fb8bc87bf85ed5296f40ec2ae34\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e6154ef320>\n", + "\n", + "\n", + "\n", + "structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_d68ff2adbab972340efae09bf2dca5b6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_6c6a71df64a4775eb5b2b6627712d17c\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219010>\n", + "\n", + "\n", + "\n", + "structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_6c6a71df64a4775eb5b2b6627712d17c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_535ac9ea932cf7dd1ea2a048ff184ef9\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218ce0>\n", + "\n", + "\n", + "\n", + "structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_535ac9ea932cf7dd1ea2a048ff184ef9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_b52cf29645cbdc73b2126ad614a6748d\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e6152189b0>\n", + "\n", + "\n", + "\n", + "structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_b52cf29645cbdc73b2126ad614a6748d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_8b6656321f1e07cd30f21bb9d083f734\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218680>\n", + "\n", + "\n", + "\n", + "structure_f26c3fb8bc87bf85ed5296f40ec2ae34->structure_8b6656321f1e07cd30f21bb9d083f734\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_aa3da715c96cd1fef134c69b1da72e42\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e6152192b0>\n", + "\n", + "\n", + "\n", + "structure_6c6a71df64a4775eb5b2b6627712d17c->input_dict_aa3da715c96cd1fef134c69b1da72e42\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_eac440c283c1a2924bb89ecb82a35639\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218f80>\n", + "\n", + "\n", + "\n", + "structure_535ac9ea932cf7dd1ea2a048ff184ef9->input_dict_eac440c283c1a2924bb89ecb82a35639\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_523110518563cadc66dc6aefb11923b8\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218c50>\n", + "\n", + "\n", + "\n", + "structure_b52cf29645cbdc73b2126ad614a6748d->input_dict_523110518563cadc66dc6aefb11923b8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_20011bd02b7fe4c3fa64102f5cee0ce1\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e615218920>\n", + "\n", + "\n", + "\n", + "structure_8b6656321f1e07cd30f21bb9d083f734->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7\n", + "\n", + "working_directory=mini\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_f26c3fb8bc87bf85ed5296f40ec2ae34\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_f2214e5b325d98ae04c3309fcba1e8c7\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x72e6151fbbf0>\n", + "\n", + "\n", + "\n", + "input_dict_f2214e5b325d98ae04c3309fcba1e8c7->structure_f26c3fb8bc87bf85ed5296f40ec2ae34\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x72e6151fbc80>\n", + "\n", + "\n", + "\n", + "structure_85578fbee37b882dfe6c61e46c6e3e6f->input_dict_f2214e5b325d98ae04c3309fcba1e8c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0\n", + "\n", + "element=Al\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0->structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "a_457b6d376c6fce696df148a385afa46d\n", + "\n", + "a=4.04\n", + "\n", + "\n", + "\n", + "a_457b6d376c6fce696df148a385afa46d->structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a\n", + "\n", + "cubic=True\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a->structure_85578fbee37b882dfe6c61e46c6e3e6f\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10\n", + "\n", + "pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_26015174619bcf580cff994859503441\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_f2214e5b325d98ae04c3309fcba1e8c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_aa3da715c96cd1fef134c69b1da72e42\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_eac440c283c1a2924bb89ecb82a35639\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_523110518563cadc66dc6aefb11923b8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_7641bae76279fbdc2c20282392d6c910\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a8d0>\n", + "\n", + "\n", + "\n", + "input_dict_aa3da715c96cd1fef134c69b1da72e42->1_7641bae76279fbdc2c20282392d6c910\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_6a3f07c7438420109a6c39351d9758ad\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a2a0>\n", + "\n", + "\n", + "\n", + "input_dict_aa3da715c96cd1fef134c69b1da72e42->1_6a3f07c7438420109a6c39351d9758ad\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_3cb49005be6d0d7ed322544b87487017\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a6f0>\n", + "\n", + "\n", + "\n", + "input_dict_eac440c283c1a2924bb89ecb82a35639->2_3cb49005be6d0d7ed322544b87487017\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_98818efec695006665bf7df606718768\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x72e615219df0>\n", + "\n", + "\n", + "\n", + "input_dict_eac440c283c1a2924bb89ecb82a35639->2_98818efec695006665bf7df606718768\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_139a6bb55cab1b6d5192deadc359db9a\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521aa50>\n", + "\n", + "\n", + "\n", + "input_dict_523110518563cadc66dc6aefb11923b8->3_139a6bb55cab1b6d5192deadc359db9a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_9d10a16dc50af676367547dceb0d00b7\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a420>\n", + "\n", + "\n", + "\n", + "input_dict_523110518563cadc66dc6aefb11923b8->3_9d10a16dc50af676367547dceb0d00b7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_8c659057d9f7b0eb48589698a769c3e3\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521ab10>\n", + "\n", + "\n", + "\n", + "input_dict_20011bd02b7fe4c3fa64102f5cee0ce1->4_8c659057d9f7b0eb48589698a769c3e3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_2ab7c060eeaf5356ef9c2df021a5051d\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x72e61521a4e0>\n", + "\n", + "\n", + "\n", + "input_dict_20011bd02b7fe4c3fa64102f5cee0ce1->4_2ab7c060eeaf5356ef9c2df021a5051d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa\n", + "\n", + "kpts=[3, 3, 3]\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_26015174619bcf580cff994859503441\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_f2214e5b325d98ae04c3309fcba1e8c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_aa3da715c96cd1fef134c69b1da72e42\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_eac440c283c1a2924bb89ecb82a35639\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_523110518563cadc66dc6aefb11923b8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34\n", + "\n", + "calculation=vc-relax\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_f2214e5b325d98ae04c3309fcba1e8c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9\n", + "\n", + "smearing=0.02\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_26015174619bcf580cff994859503441\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_f2214e5b325d98ae04c3309fcba1e8c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_aa3da715c96cd1fef134c69b1da72e42\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_eac440c283c1a2924bb89ecb82a35639\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_523110518563cadc66dc6aefb11923b8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86\n", + "\n", + "strain_lst=[0.9, 0.9500000000000001, 1.0, 1.05, 1.1]\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_d68ff2adbab972340efae09bf2dca5b6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_6c6a71df64a4775eb5b2b6627712d17c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_535ac9ea932cf7dd1ea2a048ff184ef9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_b52cf29645cbdc73b2126ad614a6748d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_17d5bcbc7579ab5e0f98577d05347b86->structure_8b6656321f1e07cd30f21bb9d083f734\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83\n", + "\n", + "calculation=scf\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_26015174619bcf580cff994859503441\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_aa3da715c96cd1fef134c69b1da72e42\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_eac440c283c1a2924bb89ecb82a35639\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_523110518563cadc66dc6aefb11923b8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_20011bd02b7fe4c3fa64102f5cee0ce1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_7641bae76279fbdc2c20282392d6c910->volume_lst_30c54979ac77823618f2e69329ff2e23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd\n", + "\n", + "working_directory=strain_1\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_7641bae76279fbdc2c20282392d6c910\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_6a3f07c7438420109a6c39351d9758ad\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_6a3f07c7438420109a6c39351d9758ad->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_3cb49005be6d0d7ed322544b87487017->volume_lst_30c54979ac77823618f2e69329ff2e23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992\n", + "\n", + "working_directory=strain_2\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_3cb49005be6d0d7ed322544b87487017\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_98818efec695006665bf7df606718768\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_98818efec695006665bf7df606718768->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_139a6bb55cab1b6d5192deadc359db9a->volume_lst_30c54979ac77823618f2e69329ff2e23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f\n", + "\n", + "working_directory=strain_3\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_139a6bb55cab1b6d5192deadc359db9a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_9d10a16dc50af676367547dceb0d00b7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_9d10a16dc50af676367547dceb0d00b7->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_8c659057d9f7b0eb48589698a769c3e3->volume_lst_30c54979ac77823618f2e69329ff2e23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7\n", + "\n", + "working_directory=strain_4\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_8c659057d9f7b0eb48589698a769c3e3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_2ab7c060eeaf5356ef9c2df021a5051d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_2ab7c060eeaf5356ef9c2df021a5051d->energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_7a67d028a4fc3e7b717ea0eabdc78b61->create_function_job_7a6b0a5d731ab6c2313227f09941d617\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=workflow_json_filename)\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "delayed_object_lst[0].input['a'] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job get_bulk_structure_2ca4aeae204ceaa28593c93054b07908 was saved and received the ID: 1\n", + "The job get_dict_1e47509b88d63a21fd421686554c8f4a was saved and received the ID: 2\n", + "The job calculate_qe_411e578f2700d09ba2df9a4c682b4582 was saved and received the ID: 3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02656] 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_550221ce8aa27fbdf50dbf13e059ce24 was saved and received the ID: 4\n", + "The job get_dict_68a4c6ff00bffbd8f249d6022ec8abb2 was saved and received the ID: 5\n", + "The job calculate_qe_8e11594357cf470d576634593684ae66 was saved and received the ID: 6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02670] 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_64aacd2badb7b0a126a5662dabd1ce0c was saved and received the ID: 7\n", + "The job calculate_qe_95276d45f24b5e6e645aab15a3b853df was saved and received the ID: 8\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02680] 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_7079cab3db71ad163cfc2e39fcf98688 was saved and received the ID: 9\n", + "The job calculate_qe_3c1dbc8b42e651e328ae99033a426980 was saved and received the ID: 10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02690] 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_0e89a9ec0ef1fd918240aa8d2dc44178 was saved and received the ID: 11\n", + "The job calculate_qe_2550d6d1ccd7ab3d68c384d3887a3fe3 was saved and received the ID: 12\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02700] 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_2ac7f25535cfa6c6850c0f9af197b541 was saved and received the ID: 13\n", + "The job calculate_qe_10d82eb36a247279f62c63b70e1a55d2 was saved and received the ID: 14\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02710] 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_e21c87f95f3795055e7214eec6d7c927 was saved and received the ID: 15\n", + "The job get_list_61df540ee8a34a06782249cbe8834865 was saved and received the ID: 16\n", + "The job plot_energy_volume_curve_bbe171c30a8de804ba8d4227e65e62bf was saved and received the ID: 17\n" + ] + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst[-1].pull()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the same JSON is loaded into a `pyiron_workflow` `Workflow`; nodes become graph nodes reachable via attribute access (e.g. `wf.get_bulk_structure`). The lattice constant `a` is overridden again before drawing the graph with `.draw()` and executing it with `.run()`." + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.get_bulk_structure.inputs.a.value = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qe\n", + "\n", + "jobflow_qe: Workflow\n", + "\n", + "clusterjobflow_qeInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_bulk_structure: get_bulk_structure\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_0: calculate_qe\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structures\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "generate_structures: generate_structures\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_1: calculate_qe\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_2: calculate_qe\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_3: calculate_qe\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_4: calculate_qe\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_5: calculate_qe\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_energy_volume_curve: plot_energy_volume_curve\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_0: get_dict\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_1: get_dict\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_2: get_dict\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_3: get_dict\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_4: get_dict\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_5: get_dict\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_0: get_list\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_1: get_list\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_5694145002635648325: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7622113868385731365: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7790390688026446791: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_5456709381594516348: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_4383803830111319486: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m3166596768653844834: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_4953877338424805303: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_5783905775072188943: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_7844378773575257119: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_7793121321835543799: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m4457864957213635898: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m4756093589586022240: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m8892127622114284325: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_7481934391931090342: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_1478812047534775338: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m6581548438773794138: GetItem\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_bulk_structure__element\n", + "\n", + "get_bulk_structure__element\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureInputselement\n", + "\n", + "element\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_bulk_structure__element->clusterjobflow_qeget_bulk_structureInputselement\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_bulk_structure__a\n", + "\n", + "get_bulk_structure__a\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureInputsa\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_bulk_structure__a->clusterjobflow_qeget_bulk_structureInputsa\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_bulk_structure__cubic\n", + "\n", + "get_bulk_structure__cubic\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureInputscubic\n", + "\n", + "cubic\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_bulk_structure__cubic->clusterjobflow_qeget_bulk_structureInputscubic\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_0__working_directory\n", + "\n", + "calculate_qe_0__working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_0__working_directory->clusterjobflow_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsgenerate_structures__strain_lst\n", + "\n", + "generate_structures__strain_lst\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresInputsstrain_lst\n", + "\n", + "strain_lst\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsgenerate_structures__strain_lst->clusterjobflow_qegenerate_structuresInputsstrain_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_1__working_directory\n", + "\n", + "calculate_qe_1__working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_1__working_directory->clusterjobflow_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_2__working_directory\n", + "\n", + "calculate_qe_2__working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_2__working_directory->clusterjobflow_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_3__working_directory\n", + "\n", + "calculate_qe_3__working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_3__working_directory->clusterjobflow_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_4__working_directory\n", + "\n", + "calculate_qe_4__working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_4__working_directory->clusterjobflow_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_5__working_directory\n", + "\n", + "calculate_qe_5__working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputscalculate_qe_5__working_directory->clusterjobflow_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__pseudopotentials\n", + "\n", + "get_dict_0__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__pseudopotentials->clusterjobflow_qeget_dict_0Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__kpts\n", + "\n", + "get_dict_0__kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__kpts->clusterjobflow_qeget_dict_0Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__calculation\n", + "\n", + "get_dict_0__calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__calculation->clusterjobflow_qeget_dict_0Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__smearing\n", + "\n", + "get_dict_0__smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_0__smearing->clusterjobflow_qeget_dict_0Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__pseudopotentials\n", + "\n", + "get_dict_1__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__pseudopotentials->clusterjobflow_qeget_dict_1Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__kpts\n", + "\n", + "get_dict_1__kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__kpts->clusterjobflow_qeget_dict_1Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__calculation\n", + "\n", + "get_dict_1__calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__calculation->clusterjobflow_qeget_dict_1Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__smearing\n", + "\n", + "get_dict_1__smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_1__smearing->clusterjobflow_qeget_dict_1Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__pseudopotentials\n", + "\n", + "get_dict_2__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__pseudopotentials->clusterjobflow_qeget_dict_2Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__kpts\n", + "\n", + "get_dict_2__kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__kpts->clusterjobflow_qeget_dict_2Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__calculation\n", + "\n", + "get_dict_2__calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__calculation->clusterjobflow_qeget_dict_2Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__smearing\n", + "\n", + "get_dict_2__smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_2__smearing->clusterjobflow_qeget_dict_2Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__pseudopotentials\n", + "\n", + "get_dict_3__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__pseudopotentials->clusterjobflow_qeget_dict_3Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__kpts\n", + "\n", + "get_dict_3__kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__kpts->clusterjobflow_qeget_dict_3Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__calculation\n", + "\n", + "get_dict_3__calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__calculation->clusterjobflow_qeget_dict_3Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__smearing\n", + "\n", + "get_dict_3__smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_3__smearing->clusterjobflow_qeget_dict_3Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__pseudopotentials\n", + "\n", + "get_dict_4__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__pseudopotentials->clusterjobflow_qeget_dict_4Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__kpts\n", + "\n", + "get_dict_4__kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__kpts->clusterjobflow_qeget_dict_4Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__calculation\n", + "\n", + "get_dict_4__calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__calculation->clusterjobflow_qeget_dict_4Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__smearing\n", + "\n", + "get_dict_4__smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_4__smearing->clusterjobflow_qeget_dict_4Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__pseudopotentials\n", + "\n", + "get_dict_5__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__pseudopotentials->clusterjobflow_qeget_dict_5Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__kpts\n", + "\n", + "get_dict_5__kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__kpts->clusterjobflow_qeget_dict_5Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__calculation\n", + "\n", + "get_dict_5__calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__calculation->clusterjobflow_qeget_dict_5Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__smearing\n", + "\n", + "get_dict_5__smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsget_dict_5__smearing->clusterjobflow_qeget_dict_5Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_5694145002635648325__item\n", + "\n", + "injected_GetItem_5694145002635648325__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_5694145002635648325__item->clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m7622113868385731365__item\n", + "\n", + "injected_GetItem_m7622113868385731365__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m7622113868385731365__item->clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m7790390688026446791__item\n", + "\n", + "injected_GetItem_m7790390688026446791__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m7790390688026446791__item->clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_5456709381594516348__item\n", + "\n", + "injected_GetItem_5456709381594516348__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_5456709381594516348__item->clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_4383803830111319486__item\n", + "\n", + "injected_GetItem_4383803830111319486__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_4383803830111319486__item->clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m3166596768653844834__item\n", + "\n", + "injected_GetItem_m3166596768653844834__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m3166596768653844834__item->clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_4953877338424805303__item\n", + "\n", + "injected_GetItem_4953877338424805303__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_4953877338424805303__item->clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_5783905775072188943__item\n", + "\n", + "injected_GetItem_5783905775072188943__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_5783905775072188943__item->clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_7844378773575257119__item\n", + "\n", + "injected_GetItem_7844378773575257119__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_7844378773575257119__item->clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_7793121321835543799__item\n", + "\n", + "injected_GetItem_7793121321835543799__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_7793121321835543799__item->clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m4457864957213635898__item\n", + "\n", + "injected_GetItem_m4457864957213635898__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m4457864957213635898__item->clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m4756093589586022240__item\n", + "\n", + "injected_GetItem_m4756093589586022240__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m4756093589586022240__item->clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m8892127622114284325__item\n", + "\n", + "injected_GetItem_m8892127622114284325__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m8892127622114284325__item->clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_7481934391931090342__item\n", + "\n", + "injected_GetItem_7481934391931090342__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_7481934391931090342__item->clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_1478812047534775338__item\n", + "\n", + "injected_GetItem_1478812047534775338__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_1478812047534775338__item->clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m6581548438773794138__item\n", + "\n", + "injected_GetItem_m6581548438773794138__item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeInputsinjected_GetItem_m6581548438773794138__item->clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureOutputsWithInjectionget_bulk_structure\n", + "\n", + "get_bulk_structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusterjobflow_qeget_dict_0Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0\n", + "\n", + "calculate_qe_0\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresInputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures\n", + "\n", + "generate_structures\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1\n", + "\n", + "calculate_qe_1\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2\n", + "\n", + "calculate_qe_2\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3\n", + "\n", + "calculate_qe_3\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4\n", + "\n", + "calculate_qe_4\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5\n", + "\n", + "calculate_qe_5\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterjobflow_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "volume_lst\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "energy_lst\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusterjobflow_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0OutputsWithInjectionget_dict_0\n", + "\n", + "get_dict_0\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_0OutputsWithInjectionget_dict_0->clusterjobflow_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1OutputsWithInjectionget_dict_1\n", + "\n", + "get_dict_1\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_1OutputsWithInjectionget_dict_1->clusterjobflow_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2OutputsWithInjectionget_dict_2\n", + "\n", + "get_dict_2\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_2OutputsWithInjectionget_dict_2->clusterjobflow_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3OutputsWithInjectionget_dict_3\n", + "\n", + "get_dict_3\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_3OutputsWithInjectionget_dict_3->clusterjobflow_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4OutputsWithInjectionget_dict_4\n", + "\n", + "get_dict_4\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_4OutputsWithInjectionget_dict_4->clusterjobflow_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5OutputsWithInjectionget_dict_5\n", + "\n", + "get_dict_5\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_dict_5OutputsWithInjectionget_dict_5->clusterjobflow_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0OutputsWithInjectionget_list_0\n", + "\n", + "get_list_0\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_0OutputsWithInjectionget_list_0->clusterjobflow_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1OutputsWithInjectionget_list_1\n", + "\n", + "get_list_1\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeget_list_1OutputsWithInjectionget_list_1->clusterjobflow_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5694145002635648325OutputsWithInjectiongetitem->clusterjobflow_qegenerate_structuresInputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7622113868385731365OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_1Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m7790390688026446791OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_2Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5456709381594516348OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_3Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4383803830111319486OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_4Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m3166596768653844834OutputsWithInjectiongetitem->clusterjobflow_qeget_dict_5Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_4953877338424805303OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_5783905775072188943OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7844378773575257119OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7793121321835543799OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4457864957213635898OutputsWithInjectiongetitem->clusterjobflow_qeget_list_0Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m4756093589586022240OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m8892127622114284325OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_7481934391931090342OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_1478812047534775338OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterjobflow_qeinjected_GetItem_m6581548438773794138OutputsWithInjectiongetitem->clusterjobflow_qeget_list_1Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:02722] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02738] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02748] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02758] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02768] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02778] 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" + ] + }, + { + "data": { + "text/plain": [ + "{'plot_energy_volume_curve__plot_energy_volume_curve': None}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "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=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "wf.run()" + ] + } + ], + "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": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/_sources/example_workflows/quantum_espresso/pyiron_base.ipynb b/_sources/example_workflows/quantum_espresso/pyiron_base.ipynb new file mode 100644 index 00000000..1369193c --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/pyiron_base.ipynb @@ -0,0 +1,5001 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "be2d61b0-0d47-4349-b4b0-1b767c961644", + "metadata": {}, + "source": "# pyiron\n\nThis notebook builds the Quantum Espresso energy-volume-curve workflow with [`pyiron_base`](https://github.com/pyiron/pyiron_base). The `job` decorator turns plain functions into delayed pyiron jobs that are only executed once `.pull()` is called on the final result, and the whole chain of jobs is exported as a PWD `workflow.json`. The second half of the notebook loads that same JSON with `aiida-workgraph`, `jobflow` and `pyiron_workflow`." + }, + { + "cell_type": "markdown", + "id": "0bad2a57-1bd2-4837-94fe-f8c60e211fae", + "metadata": {}, + "source": "## Define workflow with pyiron_base\n\nWe import the `job` decorator from `pyiron_base` and the PWD writer for `pyiron_base`, together with the Quantum Espresso functions from `workflow.py`." + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a2ed2608-9e1b-4a81-81cb-5079573ea2d1", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from pyiron_base import job\n", + "from python_workflow_definition.pyiron_base import write_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ea65c6275f956bdb", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from workflow import (\n", + " calculate_qe as _calculate_qe, \n", + " generate_structures as _generate_structures, \n", + " get_bulk_structure as _get_bulk_structure, \n", + " plot_energy_volume_curve as _plot_energy_volume_curve,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "686a6a5f54a0cef5", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "workflow_json_filename = \"pyiron_base_qe.json\"" + ] + }, + { + "cell_type": "markdown", + "id": "d73d32d1", + "source": "`calculate_qe` returns a dict with `energy`, `volume` and `structure` keys. `job(..., output_key_lst=[...])` tells `pyiron_base` which keys to expose as separate delayed outputs (e.g. `calc_mini.output.structure`), so a single downstream job can depend on just one of them instead of the whole dict.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "208ddfb8-dfda-4227-aa1f-3dc29e34ea82", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "calculate_qe = job(_calculate_qe, output_key_lst=[\"energy\", \"volume\", \"structure\"])\n", + "generate_structures = job(_generate_structures)\n", + "plot_energy_volume_curve = job(_plot_energy_volume_curve)\n", + "get_bulk_structure = job(_get_bulk_structure)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5071d3a0-7c1f-44c5-85e0-dede1566c10c", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "pseudopotentials = {\"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1f1cb12f-4001-478d-8ea0-b369f4f2981a", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "structure = get_bulk_structure(\n", + " element=\"Al\",\n", + " a=4.04,\n", + " cubic=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4140f07b-af54-41ef-be22-df6b5b53bf95", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "calc_mini = calculate_qe(\n", + " working_directory=\"mini\",\n", + " input_dict={\n", + " \"structure\": structure,\n", + " \"pseudopotentials\": pseudopotentials,\n", + " \"kpts\": (3, 3, 3),\n", + " \"calculation\": \"vc-relax\",\n", + " \"smearing\": 0.02,\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1e0aace0", + "source": "`generate_structures` fans out the relaxed structure into `number_of_strains` (5) strained structures. Since `pyiron_base` builds the graph lazily, it cannot know how many items a delayed dict result will contain, so `list_length` is passed explicitly - this lets `structure_lst` be iterated with `enumerate()` below to create one independent `scf` `calculate_qe` job per strained structure, before anything has actually run.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "3c4dae11-8750-42d5-807c-cd19f2b65706", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "number_of_strains = 5\n", + "structure_lst = generate_structures( # the generate_structures() function is not available in the workflow graph\n", + " structure=calc_mini.output.structure,\n", + " strain_lst=np.linspace(0.9, 1.1, number_of_strains),\n", + " list_length=number_of_strains,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fdf3b62d-6cce-4312-8a5b-057224e36aca", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "job_strain_lst = []\n", + "for i, structure_strain in enumerate(structure_lst):\n", + " calc_strain = calculate_qe(\n", + " working_directory=\"strain_\" + str(i),\n", + " input_dict={\n", + " \"structure\": structure_strain,\n", + " \"pseudopotentials\": pseudopotentials,\n", + " \"kpts\": (3, 3, 3),\n", + " \"calculation\": \"scf\",\n", + " \"smearing\": 0.02,\n", + " },\n", + " )\n", + " job_strain_lst.append(calc_strain)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "b2823306-0a8a-4ae6-bb1f-104e90e2fe41", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "plot = plot_energy_volume_curve(\n", + " volume_lst=[job.output.volume for job in job_strain_lst],\n", + " energy_lst=[job.output.energy for job in job_strain_lst],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "e7e789dd", + "source": "`write_workflow_json` only needs the single terminal delayed object (`plot`, the plotting job) - `pyiron_base` walks its dependency chain backwards to discover the full graph, unlike `jobflow`'s `Flow` which needs an explicit list of jobs.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "52646121-335f-48e6-bd5e-a1d69d00e8bc", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "write_workflow_json(delayed_object=plot, file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "72c8e6e6-8e60-4a4f-81f3-968b4b5f36ee", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.plot_energy_volume_curve\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.generate_structures\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 6,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 7,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_bulk_structure\"\n", + " },\n", + " {\n", + " \"id\": 8,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 9,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 10,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 11,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 12,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 13,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 14,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 15,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 16,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 17,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_0\",\n", + " \"value\": \"strain_0\"\n", + " },\n", + " {\n", + " \"id\": 18,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_1\",\n", + " \"value\": \"mini\"\n", + " },\n", + " {\n", + " \"id\": 19,\n", + " \"type\": \"input\",\n", + " \"name\": \"element\",\n", + " \"value\": \"Al\"\n", + " },\n", + " {\n", + " \"id\": 20,\n", + " \"type\": \"input\",\n", + " \"name\": \"a\",\n", + " \"value\": 4.04\n", + " },\n", + " {\n", + " \"id\": 21,\n", + " \"type\": \"input\",\n", + " \"name\": \"cubic\",\n", + " \"value\": true\n", + " },\n", + " {\n", + " \"id\": 22,\n", + " \"type\": \"input\",\n", + " \"name\": \"pseudopotentials\",\n", + " \"value\": {\n", + " \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n", + " }\n", + " },\n", + " {\n", + " \"id\": 23,\n", + " \"type\": \"input\",\n", + " \"name\": \"kpts\",\n", + " \"value\": [\n", + " 3,\n", + " 3,\n", + " 3\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 24,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_0\",\n", + " \"value\": \"vc-relax\"\n", + " },\n", + " {\n", + " \"id\": 25,\n", + " \"type\": \"input\",\n", + " \"name\": \"smearing\",\n", + " \"value\": 0.02\n", + " },\n", + " {\n", + " \"id\": 26,\n", + " \"type\": \"input\",\n", + " \"name\": \"strain_lst\",\n", + " \"value\": [\n", + " 0.9,\n", + " 0.9500000000000001,\n", + " 1.0,\n", + " 1.05,\n", + " 1.1\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 27,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_1\",\n", + " \"value\": \"scf\"\n", + " },\n", + " {\n", + " \"id\": 28,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_2\",\n", + " \"value\": \"strain_1\"\n", + " },\n", + " {\n", + " \"id\": 29,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_3\",\n", + " \"value\": \"strain_2\"\n", + " },\n", + " {\n", + " \"id\": 30,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_4\",\n", + " \"value\": \"strain_3\"\n", + " },\n", + " {\n", + " \"id\": 31,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_5\",\n", + " \"value\": \"strain_4\"\n", + " },\n", + " {\n", + " \"id\": 32,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"volume_lst\",\n", + " \"source\": 1,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 17,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 2,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 3,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"s_0\"\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"structure\"\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 18,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 6,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 7,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"element\",\n", + " \"source\": 19,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"a\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"cubic\",\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\": \"kpts\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 24,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"strain_lst\",\n", + " \"source\": 26,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 8,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 28,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 9,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 9,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"s_1\"\n", + " },\n", + " {\n", + " \"target\": 9,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 9,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 9,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 9,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 10,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 10,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 29,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 10,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 11,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 11,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"s_2\"\n", + " },\n", + " {\n", + " \"target\": 11,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 11,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 11,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 11,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 12,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 12,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 30,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 12,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 13,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"s_3\"\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 1,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 14,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 31,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 15,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 4,\n", + " \"sourcePort\": \"s_4\"\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 22,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 25,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 0,\n", + " \"targetPort\": \"energy_lst\",\n", + " \"source\": 16,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 8,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 10,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 12,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 14,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 32,\n", + " \"targetPort\": null,\n", + " \"source\": 0,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "id": "7d75a2f6-6fad-49c8-bd29-37cca1b84441", + "metadata": {}, + "source": "## Load Workflow with aiida\n\n`load_workflow_json` reconstructs the graph as an `aiida-workgraph` `WorkGraph`. The lattice constant `a` is overridden (4.04 -> 4.05) to show the loaded graph can still be edited like one built natively with `aiida-workgraph`, before running it with `wg.run()`." + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "28760464-2a2c-40c2-9451-20713da2ba2c", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Profile" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from aiida import orm, load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a442fe46-057c-469b-a5e0-173ed4829dfb", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "32fcd4b2-4f0a-442d-b098-827672823796", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wg = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d81a4fb5-a674-41a9-ac19-24c56f952468", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wg.tasks.get_bulk_structure.inputs.a.value = orm.Float(4.05)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a80b59bd-fe30-49c6-92ca-35ef2d77a6fb", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "05/26/2025 04:46:41 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_bulk_structure8\n", + "05/26/2025 04:46:41 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_bulk_structure8, type: PyFunction, finished.\n", + "05/26/2025 04:46:41 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict7\n", + "05/26/2025 04:46:42 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict7, type: PyFunction, finished.\n", + "05/26/2025 04:46:42 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe6\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01776] 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", + "05/26/2025 04:47:34 AM <1688> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['energy', 'volume'])\n", + "05/26/2025 04:47:34 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe6, type: PyFunction, finished.\n", + "05/26/2025 04:47:34 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_structures5\n", + "05/26/2025 04:47:35 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: generate_structures5, type: PyFunction, finished.\n", + "05/26/2025 04:47:35 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict4,get_dict10,get_dict12,get_dict14,get_dict16\n", + "05/26/2025 04:47:36 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict4, type: PyFunction, finished.\n", + "05/26/2025 04:47:36 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe3,get_dict10,get_dict12,get_dict14,get_dict16\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01828] 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", + "05/26/2025 04:47:47 AM <1688> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 04:47:47 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe3, type: PyFunction, finished.\n", + "05/26/2025 04:47:47 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict10,get_dict12,get_dict14,get_dict16\n", + "05/26/2025 04:47:48 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict10, type: PyFunction, finished.\n", + "05/26/2025 04:47:48 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe9,get_dict12,get_dict14,get_dict16\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01860] 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", + "05/26/2025 04:47:59 AM <1688> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 04:48:00 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe9, type: PyFunction, finished.\n", + "05/26/2025 04:48:00 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict12,get_dict14,get_dict16\n", + "05/26/2025 04:48:00 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict12, type: PyFunction, finished.\n", + "05/26/2025 04:48:00 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe11,get_dict14,get_dict16\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01874] 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", + "05/26/2025 04:48:13 AM <1688> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 04:48:13 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe11, type: PyFunction, finished.\n", + "05/26/2025 04:48:13 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict14,get_dict16\n", + "05/26/2025 04:48:14 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict14, type: PyFunction, finished.\n", + "05/26/2025 04:48:14 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe13,get_dict16\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01885] 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", + "05/26/2025 04:48:29 AM <1688> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 04:48:29 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe13, type: PyFunction, finished.\n", + "05/26/2025 04:48:29 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict16\n", + "05/26/2025 04:48:29 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict16, type: PyFunction, finished.\n", + "05/26/2025 04:48:29 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe15\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01895] 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", + "05/26/2025 04:48:44 AM <1688> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 04:48:44 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe15, type: PyFunction, finished.\n", + "05/26/2025 04:48:44 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list2,get_list17\n", + "05/26/2025 04:48:44 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_list2, type: PyFunction, finished.\n", + "05/26/2025 04:48:44 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list17\n", + "05/26/2025 04:48:45 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_list17, type: PyFunction, finished.\n", + "05/26/2025 04:48:45 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_energy_volume_curve1\n", + "05/26/2025 04:48:45 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: plot_energy_volume_curve1, type: PyFunction, finished.\n", + "05/26/2025 04:48:46 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", + "05/26/2025 04:48:46 AM <1688> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|finalize]: Finalize workgraph.\n" + ] + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "id": "c4f5c047-c6da-4b54-9007-415faca7a448", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\nThe same JSON is loaded as a `jobflow` `Flow` and executed locally with `run_locally`, again after overriding the lattice constant `a`." + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "b8e3c2ca-2672-4e9d-aada-63344842dbcf", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "54a24ff6c569094e", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "48a27146-7372-40ab-8b02-e2a9283d4748", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "bf84ef10-e1af-475f-a457-d2703c7276a0", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow[0].function_kwargs[\"a\"] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "98fa5694-2cc6-44e9-a6e7-2cc71b4f48ce", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-05-26 04:48:47,564 INFO Started executing jobs locally\n", + "2025-05-26 04:48:47,751 INFO Starting job - get_bulk_structure (f386f375-fcc9-4700-a077-b8c7b4ed29d4)\n", + "2025-05-26 04:48:47,754 INFO Finished job - get_bulk_structure (f386f375-fcc9-4700-a077-b8c7b4ed29d4)\n", + "2025-05-26 04:48:47,755 INFO Starting job - get_dict (6c1c9b0f-5c14-4ae9-be98-984400228394)\n", + "2025-05-26 04:48:47,757 INFO Finished job - get_dict (6c1c9b0f-5c14-4ae9-be98-984400228394)\n", + "2025-05-26 04:48:47,757 INFO Starting job - calculate_qe (f511b680-fa97-420f-904d-2ae232dbe75b)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:01905] 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-05-26 04:49:37,980 INFO Finished job - calculate_qe (f511b680-fa97-420f-904d-2ae232dbe75b)\n", + "2025-05-26 04:49:37,981 INFO Starting job - generate_structures (d5fc7015-e7fe-4111-bf16-23bdc6755f93)\n", + "2025-05-26 04:49:37,985 INFO Finished job - generate_structures (d5fc7015-e7fe-4111-bf16-23bdc6755f93)\n", + "2025-05-26 04:49:37,986 INFO Starting job - get_dict (49b7b2e8-78ca-4d63-bfa6-f3b47ca3378f)\n", + "2025-05-26 04:49:37,988 INFO Finished job - get_dict (49b7b2e8-78ca-4d63-bfa6-f3b47ca3378f)\n", + "2025-05-26 04:49:37,988 INFO Starting job - get_dict (a45e0be5-c229-4817-8dc8-e2f54c46205f)\n", + "2025-05-26 04:49:37,990 INFO Finished job - get_dict (a45e0be5-c229-4817-8dc8-e2f54c46205f)\n", + "2025-05-26 04:49:37,990 INFO Starting job - get_dict (30bf90f1-57c2-474b-8bd2-d8a18061d85c)\n", + "2025-05-26 04:49:37,992 INFO Finished job - get_dict (30bf90f1-57c2-474b-8bd2-d8a18061d85c)\n", + "2025-05-26 04:49:37,993 INFO Starting job - get_dict (d4b595f2-93a9-42d7-a547-f64be9b4ca80)\n", + "2025-05-26 04:49:37,995 INFO Finished job - get_dict (d4b595f2-93a9-42d7-a547-f64be9b4ca80)\n", + "2025-05-26 04:49:37,996 INFO Starting job - get_dict (8c32a293-38d8-4c3a-82fc-78edd324d64d)\n", + "2025-05-26 04:49:37,998 INFO Finished job - get_dict (8c32a293-38d8-4c3a-82fc-78edd324d64d)\n", + "2025-05-26 04:49:37,998 INFO Starting job - calculate_qe (e747fb6a-e704-44ff-906e-664be75da6fc)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:01923] 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-05-26 04:49:48,629 INFO Finished job - calculate_qe (e747fb6a-e704-44ff-906e-664be75da6fc)\n", + "2025-05-26 04:49:48,630 INFO Starting job - calculate_qe (579fbf80-e6e7-464c-a808-f5cecd9ef430)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01934] 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-05-26 04:50:00,439 INFO Finished job - calculate_qe (579fbf80-e6e7-464c-a808-f5cecd9ef430)\n", + "2025-05-26 04:50:00,439 INFO Starting job - calculate_qe (ceb70e3f-c90a-4aa3-a670-23ecf40fa11b)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01945] 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-05-26 04:50:13,181 INFO Finished job - calculate_qe (ceb70e3f-c90a-4aa3-a670-23ecf40fa11b)\n", + "2025-05-26 04:50:13,182 INFO Starting job - calculate_qe (290a2a1d-9a74-40b1-af28-e4f61b357694)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01955] 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-05-26 04:50:27,249 INFO Finished job - calculate_qe (290a2a1d-9a74-40b1-af28-e4f61b357694)\n", + "2025-05-26 04:50:27,250 INFO Starting job - calculate_qe (a9f810e8-c291-46b9-ab8f-4c59765bf3b9)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---218119f8:01965] 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-05-26 04:50:37,525 INFO Finished job - calculate_qe (a9f810e8-c291-46b9-ab8f-4c59765bf3b9)\n", + "2025-05-26 04:50:37,526 INFO Starting job - get_list (20122c29-0e2d-4a9c-8506-d371390f8042)\n", + "2025-05-26 04:50:37,528 INFO Finished job - get_list (20122c29-0e2d-4a9c-8506-d371390f8042)\n", + "2025-05-26 04:50:37,529 INFO Starting job - get_list (9842e2f0-3ca3-4a23-b82b-a3644a0294a8)\n", + "2025-05-26 04:50:37,531 INFO Finished job - get_list (9842e2f0-3ca3-4a23-b82b-a3644a0294a8)\n", + "2025-05-26 04:50:37,532 INFO Starting job - plot_energy_volume_curve (a1614162-0427-4cd2-a2c4-01837c5ae505)\n", + "2025-05-26 04:50:37,581 INFO Finished job - plot_energy_volume_curve (a1614162-0427-4cd2-a2c4-01837c5ae505)\n", + "2025-05-26 04:50:37,582 INFO Finished executing jobs locally\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n" + ] + }, + { + "data": { + "text/plain": [ + "{'f386f375-fcc9-4700-a077-b8c7b4ed29d4': {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/example_workflows/quantum_espresso'))},\n", + " '6c1c9b0f-5c14-4ae9-be98-984400228394': {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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'vc-relax', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'f511b680-fa97-420f-904d-2ae232dbe75b': {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.045637215946841, 0.0, 0.0], [0.0, 4.045637215946841, 0.0], [0.0, 0.0, 4.045637215946841]], \"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.02281860797342, 2.02281860797342], [2.02281860797342, 0.0, 2.02281860797342], [2.02281860797342, 2.02281860797342, 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.9365262253598, 'volume': 66.21567448236252}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'd5fc7015-e7fe-4111-bf16-23bdc6755f93': {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.906019785962149, 0.0, 0.0], [0.0, 3.906019785962149, 0.0], [0.0, 0.0, 3.906019785962149]], \"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.953009892981074, 1.953009892981074], [1.953009892981074, 0.0, 1.953009892981074], [1.953009892981074, 1.953009892981074, 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.977053844318049, 0.0, 0.0], [0.0, 3.977053844318049, 0.0], [0.0, 0.0, 3.977053844318049]], \"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.988526922159024, 1.988526922159024], [1.988526922159024, 0.0, 1.988526922159024], [1.988526922159024, 1.988526922159024, 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.045637215946841, 0.0, 0.0], [0.0, 4.045637215946841, 0.0], [0.0, 0.0, 4.045637215946841]], \"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.02281860797342, 2.02281860797342], [2.02281860797342, 0.0, 2.02281860797342], [2.02281860797342, 2.02281860797342, 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.111970927282956, 0.0, 0.0], [0.0, 4.111970927282956, 0.0], [0.0, 0.0, 4.111970927282956]], \"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.0559854636414774, 2.0559854636414774], [2.0559854636414774, 0.0, 2.0559854636414774], [2.0559854636414774, 2.0559854636414774, 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.176230852372181, 0.0, 0.0], [0.0, 4.176230852372181, 0.0], [0.0, 0.0, 4.176230852372181]], \"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.08811542618609, 2.08811542618609], [2.08811542618609, 0.0, 2.08811542618609], [2.08811542618609, 2.08811542618609, 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/example_workflows/quantum_espresso'))},\n", + " '49b7b2e8-78ca-4d63-bfa6-f3b47ca3378f': {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.977053844318049, 0.0, 0.0], [0.0, 3.977053844318049, 0.0], [0.0, 0.0, 3.977053844318049]], \"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.988526922159024, 1.988526922159024], [1.988526922159024, 0.0, 1.988526922159024], [1.988526922159024, 1.988526922159024, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'a45e0be5-c229-4817-8dc8-e2f54c46205f': {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.045637215946841, 0.0, 0.0], [0.0, 4.045637215946841, 0.0], [0.0, 0.0, 4.045637215946841]], \"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.02281860797342, 2.02281860797342], [2.02281860797342, 0.0, 2.02281860797342], [2.02281860797342, 2.02281860797342, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '30bf90f1-57c2-474b-8bd2-d8a18061d85c': {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.111970927282956, 0.0, 0.0], [0.0, 4.111970927282956, 0.0], [0.0, 0.0, 4.111970927282956]], \"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.0559854636414774, 2.0559854636414774], [2.0559854636414774, 0.0, 2.0559854636414774], [2.0559854636414774, 2.0559854636414774, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'd4b595f2-93a9-42d7-a547-f64be9b4ca80': {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.176230852372181, 0.0, 0.0], [0.0, 4.176230852372181, 0.0], [0.0, 0.0, 4.176230852372181]], \"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.08811542618609, 2.08811542618609], [2.08811542618609, 0.0, 2.08811542618609], [2.08811542618609, 2.08811542618609, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '8c32a293-38d8-4c3a-82fc-78edd324d64d': {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.906019785962149, 0.0, 0.0], [0.0, 3.906019785962149, 0.0], [0.0, 0.0, 3.906019785962149]], \"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.953009892981074, 1.953009892981074], [1.953009892981074, 0.0, 1.953009892981074], [1.953009892981074, 1.953009892981074, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'e747fb6a-e704-44ff-906e-664be75da6fc': {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.9770538269346, 0.0, 0.0], [0.0, 3.9770538269346, 0.0], [0.0, 0.0, 3.9770538269346]], \"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.9161488594614, 'volume': 62.904889933384574}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '579fbf80-e6e7-464c-a808-f5cecd9ef430': {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.045637198263616, 0.0, 0.0], [0.0, 4.045637198263616, 0.0], [0.0, 0.0, 4.045637198263616]], \"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.9365241668363, 'volume': 66.21567361408889}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'ceb70e3f-c90a-4aa3-a670-23ecf40fa11b': {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.111970909309796, 0.0, 0.0], [0.0, 4.111970909309796, 0.0], [0.0, 0.0, 4.111970909309796]], \"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.9192860025814, 'volume': 69.52645729479359}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '290a2a1d-9a74-40b1-af28-e4f61b357694': {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.17623083411814, 0.0, 0.0], [0.0, 4.17623083411814, 0.0], [0.0, 0.0, 4.17623083411814]], \"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.8737904693417, 'volume': 72.83724097549783}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'a9f810e8-c291-46b9-ab8f-4c59765bf3b9': {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.9060197688891853, 0.0, 0.0], [0.0, 3.9060197688891853, 0.0], [0.0, 0.0, 3.9060197688891853]], \"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.8457446150612, 'volume': 59.59410625268013}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '20122c29-0e2d-4a9c-8506-d371390f8042': {1: Response(output=[-1074.8457446150612, -1074.9161488594614, -1074.9365241668363, -1074.9192860025814, -1074.8737904693417], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '9842e2f0-3ca3-4a23-b82b-a3644a0294a8': {1: Response(output=[59.59410625268013, 62.904889933384574, 66.21567361408889, 69.52645729479359, 72.83724097549783], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'a1614162-0427-4cd2-a2c4-01837c5ae505': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))}}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "406b0429e65b9760", + "metadata": {}, + "source": "## Load Workflow with pyiron_workflow\n\nFinally, the graph is loaded into a `pyiron_workflow` `Workflow`, its lattice constant overridden, drawn with `.draw()`, and executed with `.run()`." + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "1b45a453f593202f", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_workflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "97ef39ae859855ab", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "907dcc6d-97a6-4b6a-8214-4ba96ce26769", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "4368c6921b71e396", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.get_bulk_structure.inputs.a.value = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "659ccc92-a4d9-4876-a63a-be5dac50e295", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qe\n", + "\n", + "pyiron_base_qe: Workflow\n", + "\n", + "clusterpyiron_base_qeInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot_energy_volume_curve: plot_energy_volume_curve\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_0: get_list\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_0: calculate_qe\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_0: get_dict\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structures\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "generate_structures: generate_structures\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_1: calculate_qe\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_1: get_dict\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_bulk_structure: get_bulk_structure\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_2: calculate_qe\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_2: get_dict\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_3: calculate_qe\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_3: get_dict\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_4: calculate_qe\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_4: get_dict\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculate_qe_5: calculate_qe\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_dict_5: get_dict\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "get_list_1: get_list\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_8448190184761347443: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_6888005398033223667: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m2505717702026653208: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m5521004309196267258: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_1374405447673059213: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_4462229027723870602: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2384803467043042276: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_7146740412064090316: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m350772300549240618: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_4087305954482680236: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_4692661231677176: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_1607275248375012074: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_3768223398597047821: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_8054512655741111319: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m5340856505475737312: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m9009035754021092304: GetItem\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_0__working_directory\n", + "\n", + "calculate_qe_0__working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_0__working_directory->clusterpyiron_base_qecalculate_qe_0Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__pseudopotentials\n", + "\n", + "get_dict_0__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__pseudopotentials->clusterpyiron_base_qeget_dict_0Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__kpts\n", + "\n", + "get_dict_0__kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__kpts->clusterpyiron_base_qeget_dict_0Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__calculation\n", + "\n", + "get_dict_0__calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__calculation->clusterpyiron_base_qeget_dict_0Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__smearing\n", + "\n", + "get_dict_0__smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_0__smearing->clusterpyiron_base_qeget_dict_0Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsgenerate_structures__strain_lst\n", + "\n", + "generate_structures__strain_lst\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresInputsstrain_lst\n", + "\n", + "strain_lst\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsgenerate_structures__strain_lst->clusterpyiron_base_qegenerate_structuresInputsstrain_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_1__working_directory\n", + "\n", + "calculate_qe_1__working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_1__working_directory->clusterpyiron_base_qecalculate_qe_1Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__pseudopotentials\n", + "\n", + "get_dict_1__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__pseudopotentials->clusterpyiron_base_qeget_dict_1Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__kpts\n", + "\n", + "get_dict_1__kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__kpts->clusterpyiron_base_qeget_dict_1Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__calculation\n", + "\n", + "get_dict_1__calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__calculation->clusterpyiron_base_qeget_dict_1Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__smearing\n", + "\n", + "get_dict_1__smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_1__smearing->clusterpyiron_base_qeget_dict_1Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_bulk_structure__element\n", + "\n", + "get_bulk_structure__element\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureInputselement\n", + "\n", + "element\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_bulk_structure__element->clusterpyiron_base_qeget_bulk_structureInputselement\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_bulk_structure__a\n", + "\n", + "get_bulk_structure__a\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureInputsa\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_bulk_structure__a->clusterpyiron_base_qeget_bulk_structureInputsa\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_bulk_structure__cubic\n", + "\n", + "get_bulk_structure__cubic\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureInputscubic\n", + "\n", + "cubic\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_bulk_structure__cubic->clusterpyiron_base_qeget_bulk_structureInputscubic\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_2__working_directory\n", + "\n", + "calculate_qe_2__working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_2__working_directory->clusterpyiron_base_qecalculate_qe_2Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__pseudopotentials\n", + "\n", + "get_dict_2__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__pseudopotentials->clusterpyiron_base_qeget_dict_2Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__kpts\n", + "\n", + "get_dict_2__kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__kpts->clusterpyiron_base_qeget_dict_2Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__calculation\n", + "\n", + "get_dict_2__calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__calculation->clusterpyiron_base_qeget_dict_2Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__smearing\n", + "\n", + "get_dict_2__smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_2__smearing->clusterpyiron_base_qeget_dict_2Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_3__working_directory\n", + "\n", + "calculate_qe_3__working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_3__working_directory->clusterpyiron_base_qecalculate_qe_3Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__pseudopotentials\n", + "\n", + "get_dict_3__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__pseudopotentials->clusterpyiron_base_qeget_dict_3Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__kpts\n", + "\n", + "get_dict_3__kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__kpts->clusterpyiron_base_qeget_dict_3Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__calculation\n", + "\n", + "get_dict_3__calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__calculation->clusterpyiron_base_qeget_dict_3Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__smearing\n", + "\n", + "get_dict_3__smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_3__smearing->clusterpyiron_base_qeget_dict_3Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_4__working_directory\n", + "\n", + "calculate_qe_4__working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_4__working_directory->clusterpyiron_base_qecalculate_qe_4Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__pseudopotentials\n", + "\n", + "get_dict_4__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__pseudopotentials->clusterpyiron_base_qeget_dict_4Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__kpts\n", + "\n", + "get_dict_4__kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__kpts->clusterpyiron_base_qeget_dict_4Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__calculation\n", + "\n", + "get_dict_4__calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__calculation->clusterpyiron_base_qeget_dict_4Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__smearing\n", + "\n", + "get_dict_4__smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_4__smearing->clusterpyiron_base_qeget_dict_4Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_5__working_directory\n", + "\n", + "calculate_qe_5__working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputscalculate_qe_5__working_directory->clusterpyiron_base_qecalculate_qe_5Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__pseudopotentials\n", + "\n", + "get_dict_5__pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__pseudopotentials->clusterpyiron_base_qeget_dict_5Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__kpts\n", + "\n", + "get_dict_5__kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__kpts->clusterpyiron_base_qeget_dict_5Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__calculation\n", + "\n", + "get_dict_5__calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__calculation->clusterpyiron_base_qeget_dict_5Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__smearing\n", + "\n", + "get_dict_5__smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsget_dict_5__smearing->clusterpyiron_base_qeget_dict_5Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_8448190184761347443__item\n", + "\n", + "injected_GetItem_8448190184761347443__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_8448190184761347443__item->clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_6888005398033223667__item\n", + "\n", + "injected_GetItem_6888005398033223667__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_6888005398033223667__item->clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m2505717702026653208__item\n", + "\n", + "injected_GetItem_m2505717702026653208__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m2505717702026653208__item->clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m5521004309196267258__item\n", + "\n", + "injected_GetItem_m5521004309196267258__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m5521004309196267258__item->clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_1374405447673059213__item\n", + "\n", + "injected_GetItem_1374405447673059213__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_1374405447673059213__item->clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_4462229027723870602__item\n", + "\n", + "injected_GetItem_4462229027723870602__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_4462229027723870602__item->clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_2384803467043042276__item\n", + "\n", + "injected_GetItem_2384803467043042276__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_2384803467043042276__item->clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_7146740412064090316__item\n", + "\n", + "injected_GetItem_7146740412064090316__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_7146740412064090316__item->clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m350772300549240618__item\n", + "\n", + "injected_GetItem_m350772300549240618__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m350772300549240618__item->clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_4087305954482680236__item\n", + "\n", + "injected_GetItem_4087305954482680236__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_4087305954482680236__item->clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_4692661231677176__item\n", + "\n", + "injected_GetItem_4692661231677176__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_4692661231677176__item->clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_1607275248375012074__item\n", + "\n", + "injected_GetItem_1607275248375012074__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_1607275248375012074__item->clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_3768223398597047821__item\n", + "\n", + "injected_GetItem_3768223398597047821__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_3768223398597047821__item->clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_8054512655741111319__item\n", + "\n", + "injected_GetItem_8054512655741111319__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_8054512655741111319__item->clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m5340856505475737312__item\n", + "\n", + "injected_GetItem_m5340856505475737312__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m5340856505475737312__item->clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m9009035754021092304__item\n", + "\n", + "injected_GetItem_m9009035754021092304__item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeInputsinjected_GetItem_m9009035754021092304__item->clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "volume_lst\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "energy_lst\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeplot_energy_volume_curveOutputsWithInjectionplot_energy_volume_curve->clusterpyiron_base_qeOutputsWithInjectionplot_energy_volume_curve__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0OutputsWithInjectionget_list_0\n", + "\n", + "get_list_0\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_0OutputsWithInjectionget_list_0->clusterpyiron_base_qeplot_energy_volume_curveInputsvolume_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0\n", + "\n", + "calculate_qe_0\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_0OutputsWithInjectioncalculate_qe_0->clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0OutputsWithInjectionget_dict_0\n", + "\n", + "get_dict_0\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_0OutputsWithInjectionget_dict_0->clusterpyiron_base_qecalculate_qe_0Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresInputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures\n", + "\n", + "generate_structures\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qegenerate_structuresOutputsWithInjectiongenerate_structures->clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1\n", + "\n", + "calculate_qe_1\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_1OutputsWithInjectioncalculate_qe_1->clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1OutputsWithInjectionget_dict_1\n", + "\n", + "get_dict_1\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_1OutputsWithInjectionget_dict_1->clusterpyiron_base_qecalculate_qe_1Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionget_bulk_structure\n", + "\n", + "get_bulk_structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_bulk_structureOutputsWithInjectionget_bulk_structure->clusterpyiron_base_qeget_dict_1Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2\n", + "\n", + "calculate_qe_2\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_2OutputsWithInjectioncalculate_qe_2->clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2OutputsWithInjectionget_dict_2\n", + "\n", + "get_dict_2\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_2OutputsWithInjectionget_dict_2->clusterpyiron_base_qecalculate_qe_2Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3\n", + "\n", + "calculate_qe_3\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_3OutputsWithInjectioncalculate_qe_3->clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3OutputsWithInjectionget_dict_3\n", + "\n", + "get_dict_3\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_3OutputsWithInjectionget_dict_3->clusterpyiron_base_qecalculate_qe_3Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4\n", + "\n", + "calculate_qe_4\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_4OutputsWithInjectioncalculate_qe_4->clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4OutputsWithInjectionget_dict_4\n", + "\n", + "get_dict_4\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_4OutputsWithInjectionget_dict_4->clusterpyiron_base_qecalculate_qe_4Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5\n", + "\n", + "calculate_qe_5\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qecalculate_qe_5OutputsWithInjectioncalculate_qe_5->clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5OutputsWithInjectionget_dict_5\n", + "\n", + "get_dict_5\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_dict_5OutputsWithInjectionget_dict_5->clusterpyiron_base_qecalculate_qe_5Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1Inputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1OutputsWithInjectionget_list_1\n", + "\n", + "get_list_1\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeget_list_1OutputsWithInjectionget_list_1->clusterpyiron_base_qeplot_energy_volume_curveInputsenergy_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8448190184761347443OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_6888005398033223667OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_0Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m2505717702026653208OutputsWithInjectiongetitem->clusterpyiron_base_qegenerate_structuresInputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5521004309196267258OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1374405447673059213OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_2Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4462229027723870602OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_2384803467043042276OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_3Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_7146740412064090316OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m350772300549240618OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_4Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4087305954482680236OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_0Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_4692661231677176OutputsWithInjectiongetitem->clusterpyiron_base_qeget_dict_5Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_1607275248375012074OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_3768223398597047821OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_8054512655741111319OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m5340856505475737312OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clusterpyiron_base_qeinjected_GetItem_m9009035754021092304OutputsWithInjectiongetitem->clusterpyiron_base_qeget_list_1Inputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "1007f60c-23eb-4a28-a5c7-ea0c0909be38", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---218119f8:01978] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:01993] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02008] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02018] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02028] 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", + "[jupyter-pythonworkflow-fl--x---218119f8:02039] 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" + ] + }, + { + "data": { + "text/plain": [ + "{'plot_energy_volume_curve__plot_energy_volume_curve': None}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "wf.run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5022eb03-b714-409d-b82b-cada385b351d", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [] + } + ], + "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": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/_sources/example_workflows/quantum_espresso/pyiron_workflow.ipynb b/_sources/example_workflows/quantum_espresso/pyiron_workflow.ipynb new file mode 100644 index 00000000..88d94a23 --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/pyiron_workflow.ipynb @@ -0,0 +1,6042 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "760acc89-8c02-4bc9-a8f6-2572506b7085", + "metadata": {}, + "source": "# pyiron_workflow\n## Define workflow with pyiron_workflow\n\nThis notebook builds the Quantum Espresso energy-volume-curve workflow with [`pyiron_workflow`](https://github.com/pyiron/pyiron_workflow). Plain functions are converted to graph nodes with `to_function_node`, assembled into a `Workflow` via attribute access, and exported as a PWD `workflow.json`. The second half of the notebook loads that same JSON with `aiida-workgraph`, `jobflow` and `pyiron_base`." + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "44aa8e82-2d78-4015-a56d-cd487aefc48f", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from inspect import isfunction\n", + "import numpy as np\n", + "from pyiron_workflow._legacy import Workflow, to_function_node, as_function_node\n", + "from pyiron_workflow._legacy.api import inputs_to_dict\n", + "from python_workflow_definition.pyiron_workflow import write_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "341dab17-b329-42eb-a485-2f9326a048e9", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from workflow import (\n", + " calculate_qe as _calculate_qe, \n", + " generate_structures as _generate_structures, \n", + " get_bulk_structure as _get_bulk_structure, \n", + " plot_energy_volume_curve as _plot_energy_volume_curve,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "2d3f3ba6", + "source": "`pyiron_workflow` has no built-in equivalent of the `get_list` helper the other engines use to collect several outputs into a list, so `get_values_from_dict` is defined here as a custom node with `as_function_node` to turn a dict of energies/volumes into a plain list for the final plot.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "729a1a3a-8377-4148-9b3c-a4a866f9c4ec", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "@as_function_node(\"output_dict\")\n", + "def get_values_from_dict(input_dict):\n", + " return list(input_dict.values())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6c2711ec-25f8-4ecd-9b9a-d9af1ec81316", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "workflow_json_filename = \"pyiron_workflow_qe.json\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3e1492bc-49bd-4f9c-9703-582a5a60579b", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "calculate_qe = to_function_node(\"calculate_qe\", _calculate_qe, \"calculate_qe\")\n", + "generate_structures = to_function_node(\"generate_structures\", _generate_structures, \"generate_structures\")\n", + "get_bulk_structure = to_function_node(\"get_bulk_structure\", _get_bulk_structure, \"get_bulk_structure\")\n", + "plot_energy_volume_curve = to_function_node(\"plot_energy_volume_curve\", _plot_energy_volume_curve, \"plot_energy_volume_curve\", validate_output_labels=False)" + ] + }, + { + "cell_type": "markdown", + "id": "be84f115", + "source": "`to_function_node` wraps each plain Python function into a `pyiron_workflow` node type. `plot_energy_volume_curve` passes `validate_output_labels=False` since it has no return value, so its output cannot be matched to an explicit output label.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a4f2fe6d-bed4-49f8-b903-1ed69ff92eb7", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf = Workflow(\"my_workflow\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "62268668-7f09-4fee-99d2-c770b4e558d9", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.pseudopotentials = {\"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"}" + ] + }, + { + "cell_type": "markdown", + "id": "c117be40", + "source": "Nodes are added to the `Workflow` by assigning their result to an attribute of `wf` (e.g. `wf.structure = get_bulk_structure(...)`), which both registers the node and gives it a name in the graph. Since `calculate_qe` expects a single `input_dict` argument, `inputs_to_dict` is used to bundle the structure, pseudopotentials, k-points, calculation type and smearing into one dict-valued node before the first (`vc-relax`) QE calculation.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b2ea76b0-f79b-461f-8126-7bac3bda4422", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.element = \"Al\"\n", + "wf.a = 4.04\n", + "wf.cubic = True\n", + "wf.structure = get_bulk_structure(\n", + " element=wf.element,\n", + " a=wf.a,\n", + " cubic=wf.cubic,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "01bc824f-c990-448c-a4da-1ff8b519e720", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.working_directory_0 = \"mini\"\n", + "input_dict = {\n", + " \"structure\": wf.structure, \n", + " \"pseudopotentials\": wf.pseudopotentials, \n", + " \"kpts\": (3, 3, 3), \n", + " \"calculation\": \"vc-relax\", \n", + " \"smearing\": 0.02,\n", + "}\n", + "wf.input_dict_0 = inputs_to_dict(\n", + " input_specification=list(input_dict.keys()),\n", + " **input_dict\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "95d168a1-48db-434a-b17d-abea6c1633f5", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.calc_mini = calculate_qe(\n", + " working_directory=wf.working_directory_0,\n", + " input_dict=wf.input_dict_0,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "6d21ce04", + "source": "`generate_structures` fans out the relaxed structure into `number_of_strains` (5) strained structures (`wf.structure_lst[\"s_0\"]` ... `[\"s_4\"]`). The loop below builds one `input_dict` and one independent `scf` `calculate_qe` node per strained structure, so five QE calculations run to sample the energy-volume curve.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fbfb0107-278d-4209-883c-8c0543c5c240", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "number_of_strains = 5\n", + "wf.strain_lst = np.linspace(0.9, 1.1, number_of_strains)\n", + "wf.structure_lst = generate_structures( # the generate_structures() function is not available in the workflow graph\n", + " structure=wf.calc_mini[\"structure\"],\n", + " strain_lst=wf.strain_lst,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "956184d1-887a-4632-9311-b917fb5d7370", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "job_strain_lst = []\n", + "for i in range(number_of_strains):\n", + " setattr(wf, \"input_dict_\" + str(i+1), inputs_to_dict(\n", + " input_specification=[\"structure\", \"pseudopotentials\", \"kpts\", \"calculation\", \"smearing\"],\n", + " structure=wf.structure_lst[\"s_\" + str(i)],\n", + " pseudopotentials=wf.pseudopotentials,\n", + " kpts=(3, 3, 3),\n", + " calculation=\"scf\",\n", + " smearing=0.02,\n", + " ))\n", + " setattr(wf, \"calc_strain_\" + str(i), calculate_qe(\n", + " working_directory=\"strain_\" + str(i),\n", + " input_dict=getattr(wf, \"input_dict_\" + str(i+1)),\n", + " ))\n", + " job_strain_lst.append(getattr(wf, \"calc_strain_\" + str(i)))" + ] + }, + { + "cell_type": "markdown", + "id": "edc600a3", + "source": "The `energy` and `volume` outputs of the five strained calculations are bundled with `inputs_to_dict` and then flattened into two plain lists with the `get_values_from_dict` node defined above, ready to be passed to `plot_energy_volume_curve`.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a0643f87-98f1-440e-9f0d-8cf316a69f0f", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "volume_dict = {\"s_\" + str(i): j[\"volume\"] for i, j in enumerate(job_strain_lst)}\n", + "wf.volume_dict = inputs_to_dict(\n", + " input_specification=list(volume_dict.keys()),\n", + " **volume_dict\n", + ")\n", + "energy_dict = {\"s_\" + str(i): j[\"energy\"] for i, j in enumerate(job_strain_lst)}\n", + "wf.energy_dict = inputs_to_dict(\n", + " input_specification=list(energy_dict.keys()),\n", + " **energy_dict,\n", + ")\n", + "wf.volume_lst = get_values_from_dict(\n", + " input_dict=wf.volume_dict\n", + ")\n", + "wf.energy_lst = get_values_from_dict(\n", + " input_dict=wf.energy_dict\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "96808641-c9e4-4d57-9f9c-8b1a9c1b1356", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wf.plot = plot_energy_volume_curve(volume_lst=wf.volume_lst, energy_lst=wf.energy_lst)" + ] + }, + { + "cell_type": "markdown", + "id": "e5408a80", + "source": "`.draw()` renders the assembled node graph, and `write_workflow_json` exports it - using `wf.graph_as_dict` - to the PWD `workflow.json` format so it can be loaded by another engine.", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "45f45321-dc88-4936-b1e2-6813e0bb63a0", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflow\n", + "\n", + "my_workflow: Workflow\n", + "\n", + "clustermy_workflowInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure: get_bulk_structure\n", + "\n", + "\n", + "clustermy_workflowstructureInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowstructureOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_0: InputsToDict7245513302159894572\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowcalc_mini\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calc_mini: calculate_qe\n", + "\n", + "\n", + "clustermy_workflowcalc_miniInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowcalc_miniOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_7861940023574593993: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowstructure_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_lst: generate_structures\n", + "\n", + "\n", + "clustermy_workflowstructure_lstInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_3639661277350423571: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_1: InputsToDict7245513302159894572\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calc_strain_0: calculate_qe\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7252158415225576841: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_2: InputsToDict7245513302159894572\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calc_strain_1: calculate_qe\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m6988710272709122235: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_3: InputsToDict7245513302159894572\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calc_strain_2: calculate_qe\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m7506669112781170504: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_4: InputsToDict7245513302159894572\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calc_strain_3: calculate_qe\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_2957691736869688386: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_5: InputsToDict7245513302159894572\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calc_strain_4: calculate_qe\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_8710029016672139677: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m1919156955132558363: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_4142543244691876020: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m2782610468716623353: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_6927899509448106427: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowvolume_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "volume_dict: InputsToDictm7167683884169246426\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowvolume_dictOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_7833741598610549781: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m3668946170913939128: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m6511681505733114611: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m2724299995569513242: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "injected_GetItem_m447248367025958054: GetItem\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054Inputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowenergy_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_dict: InputsToDictm7167683884169246426\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowenergy_dictOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowvolume_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "volume_lst: get_values_from_dict\n", + "\n", + "\n", + "clustermy_workflowvolume_lstInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowvolume_lstOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowenergy_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst: get_values_from_dict\n", + "\n", + "\n", + "clustermy_workflowenergy_lstInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowenergy_lstOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "clustermy_workflowplot\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "plot: plot_energy_volume_curve\n", + "\n", + "\n", + "clustermy_workflowplotInputs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Inputs\n", + "\n", + "\n", + "clustermy_workflowplotOutputsWithInjection\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "OutputsWithInjection\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure__element\n", + "\n", + "structure__element\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureInputselement\n", + "\n", + "element\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure__element->clustermy_workflowstructureInputselement\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure__a\n", + "\n", + "structure__a\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureInputsa\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure__a->clustermy_workflowstructureInputsa\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure__cubic\n", + "\n", + "structure__cubic\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureInputscubic\n", + "\n", + "cubic\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure__cubic->clustermy_workflowstructureInputscubic\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__pseudopotentials\n", + "\n", + "input_dict_0__pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__pseudopotentials->clustermy_workflowinput_dict_0Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__kpts\n", + "\n", + "input_dict_0__kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__kpts->clustermy_workflowinput_dict_0Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__calculation\n", + "\n", + "input_dict_0__calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__calculation->clustermy_workflowinput_dict_0Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__smearing\n", + "\n", + "input_dict_0__smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_0__smearing->clustermy_workflowinput_dict_0Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_mini__working_directory\n", + "\n", + "calc_mini__working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniInputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_mini__working_directory->clustermy_workflowcalc_miniInputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_7861940023574593993__item\n", + "\n", + "injected_GetItem_7861940023574593993__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_7861940023574593993__item->clustermy_workflowinjected_GetItem_7861940023574593993Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure_lst__strain_lst\n", + "\n", + "structure_lst__strain_lst\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstInputsstrain_lst\n", + "\n", + "strain_lst\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsstructure_lst__strain_lst->clustermy_workflowstructure_lstInputsstrain_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_3639661277350423571__item\n", + "\n", + "injected_GetItem_3639661277350423571__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_3639661277350423571__item->clustermy_workflowinjected_GetItem_3639661277350423571Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__pseudopotentials\n", + "\n", + "input_dict_1__pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__pseudopotentials->clustermy_workflowinput_dict_1Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__kpts\n", + "\n", + "input_dict_1__kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__kpts->clustermy_workflowinput_dict_1Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__calculation\n", + "\n", + "input_dict_1__calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__calculation->clustermy_workflowinput_dict_1Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__smearing\n", + "\n", + "input_dict_1__smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_1__smearing->clustermy_workflowinput_dict_1Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_0__working_directory\n", + "\n", + "calc_strain_0__working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_0__working_directory->clustermy_workflowcalc_strain_0Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m7252158415225576841__item\n", + "\n", + "injected_GetItem_m7252158415225576841__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m7252158415225576841__item->clustermy_workflowinjected_GetItem_m7252158415225576841Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__pseudopotentials\n", + "\n", + "input_dict_2__pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__pseudopotentials->clustermy_workflowinput_dict_2Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__kpts\n", + "\n", + "input_dict_2__kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__kpts->clustermy_workflowinput_dict_2Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__calculation\n", + "\n", + "input_dict_2__calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__calculation->clustermy_workflowinput_dict_2Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__smearing\n", + "\n", + "input_dict_2__smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_2__smearing->clustermy_workflowinput_dict_2Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_1__working_directory\n", + "\n", + "calc_strain_1__working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_1__working_directory->clustermy_workflowcalc_strain_1Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m6988710272709122235__item\n", + "\n", + "injected_GetItem_m6988710272709122235__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m6988710272709122235__item->clustermy_workflowinjected_GetItem_m6988710272709122235Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__pseudopotentials\n", + "\n", + "input_dict_3__pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__pseudopotentials->clustermy_workflowinput_dict_3Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__kpts\n", + "\n", + "input_dict_3__kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__kpts->clustermy_workflowinput_dict_3Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__calculation\n", + "\n", + "input_dict_3__calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__calculation->clustermy_workflowinput_dict_3Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__smearing\n", + "\n", + "input_dict_3__smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_3__smearing->clustermy_workflowinput_dict_3Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_2__working_directory\n", + "\n", + "calc_strain_2__working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_2__working_directory->clustermy_workflowcalc_strain_2Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m7506669112781170504__item\n", + "\n", + "injected_GetItem_m7506669112781170504__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m7506669112781170504__item->clustermy_workflowinjected_GetItem_m7506669112781170504Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__pseudopotentials\n", + "\n", + "input_dict_4__pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__pseudopotentials->clustermy_workflowinput_dict_4Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__kpts\n", + "\n", + "input_dict_4__kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__kpts->clustermy_workflowinput_dict_4Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__calculation\n", + "\n", + "input_dict_4__calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__calculation->clustermy_workflowinput_dict_4Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__smearing\n", + "\n", + "input_dict_4__smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_4__smearing->clustermy_workflowinput_dict_4Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_3__working_directory\n", + "\n", + "calc_strain_3__working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_3__working_directory->clustermy_workflowcalc_strain_3Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_2957691736869688386__item\n", + "\n", + "injected_GetItem_2957691736869688386__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_2957691736869688386__item->clustermy_workflowinjected_GetItem_2957691736869688386Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__pseudopotentials\n", + "\n", + "input_dict_5__pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputspseudopotentials\n", + "\n", + "pseudopotentials\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__pseudopotentials->clustermy_workflowinput_dict_5Inputspseudopotentials\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__kpts\n", + "\n", + "input_dict_5__kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputskpts\n", + "\n", + "kpts\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__kpts->clustermy_workflowinput_dict_5Inputskpts\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__calculation\n", + "\n", + "input_dict_5__calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputscalculation\n", + "\n", + "calculation\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__calculation->clustermy_workflowinput_dict_5Inputscalculation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__smearing\n", + "\n", + "input_dict_5__smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputssmearing\n", + "\n", + "smearing\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinput_dict_5__smearing->clustermy_workflowinput_dict_5Inputssmearing\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_4__working_directory\n", + "\n", + "calc_strain_4__working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4Inputsworking_directory\n", + "\n", + "working_directory\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputscalc_strain_4__working_directory->clustermy_workflowcalc_strain_4Inputsworking_directory\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_8710029016672139677__item\n", + "\n", + "injected_GetItem_8710029016672139677__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_8710029016672139677__item->clustermy_workflowinjected_GetItem_8710029016672139677Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m1919156955132558363__item\n", + "\n", + "injected_GetItem_m1919156955132558363__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m1919156955132558363__item->clustermy_workflowinjected_GetItem_m1919156955132558363Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_4142543244691876020__item\n", + "\n", + "injected_GetItem_4142543244691876020__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_4142543244691876020__item->clustermy_workflowinjected_GetItem_4142543244691876020Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m2782610468716623353__item\n", + "\n", + "injected_GetItem_m2782610468716623353__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m2782610468716623353__item->clustermy_workflowinjected_GetItem_m2782610468716623353Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_6927899509448106427__item\n", + "\n", + "injected_GetItem_6927899509448106427__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_6927899509448106427__item->clustermy_workflowinjected_GetItem_6927899509448106427Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_7833741598610549781__item\n", + "\n", + "injected_GetItem_7833741598610549781__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_7833741598610549781__item->clustermy_workflowinjected_GetItem_7833741598610549781Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m3668946170913939128__item\n", + "\n", + "injected_GetItem_m3668946170913939128__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m3668946170913939128__item->clustermy_workflowinjected_GetItem_m3668946170913939128Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m6511681505733114611__item\n", + "\n", + "injected_GetItem_m6511681505733114611__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m6511681505733114611__item->clustermy_workflowinjected_GetItem_m6511681505733114611Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m2724299995569513242__item\n", + "\n", + "injected_GetItem_m2724299995569513242__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m2724299995569513242__item->clustermy_workflowinjected_GetItem_m2724299995569513242Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m447248367025958054__item\n", + "\n", + "injected_GetItem_m447248367025958054__item\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054Inputsitem\n", + "\n", + "item\n", + "\n", + "\n", + "\n", + "clustermy_workflowInputsinjected_GetItem_m447248367025958054__item->clustermy_workflowinjected_GetItem_m447248367025958054Inputsitem\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowOutputsWithInjectionplot__plot_energy_volume_curve\n", + "\n", + "plot__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureOutputsWithInjectionget_bulk_structure\n", + "\n", + "get_bulk_structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructureOutputsWithInjectionget_bulk_structure->clustermy_workflowinput_dict_0Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0OutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniInputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_0OutputsWithInjectiondict->clustermy_workflowcalc_miniInputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniOutputsWithInjectioncalculate_qe\n", + "\n", + "calculate_qe\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_miniOutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_7861940023574593993Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstInputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7861940023574593993OutputsWithInjectiongetitem->clustermy_workflowstructure_lstInputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures\n", + "\n", + "generate_structures\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_3639661277350423571Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_m7252158415225576841Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_m6988710272709122235Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_m7506669112781170504Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowstructure_lstOutputsWithInjectiongenerate_structures->clustermy_workflowinjected_GetItem_2957691736869688386Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_3639661277350423571OutputsWithInjectiongetitem->clustermy_workflowinput_dict_1Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1OutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_1OutputsWithInjectiondict->clustermy_workflowcalc_strain_0Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0OutputsWithInjectioncalculate_qe\n", + "\n", + "calculate_qe\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_8710029016672139677Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_0OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_7833741598610549781Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7252158415225576841OutputsWithInjectiongetitem->clustermy_workflowinput_dict_2Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2OutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_2OutputsWithInjectiondict->clustermy_workflowcalc_strain_1Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1OutputsWithInjectioncalculate_qe\n", + "\n", + "calculate_qe\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m1919156955132558363Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_1OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m3668946170913939128Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6988710272709122235OutputsWithInjectiongetitem->clustermy_workflowinput_dict_3Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3OutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_3OutputsWithInjectiondict->clustermy_workflowcalc_strain_2Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2OutputsWithInjectioncalculate_qe\n", + "\n", + "calculate_qe\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_4142543244691876020Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_2OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m6511681505733114611Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m7506669112781170504OutputsWithInjectiongetitem->clustermy_workflowinput_dict_4Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4OutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_4OutputsWithInjectiondict->clustermy_workflowcalc_strain_3Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3OutputsWithInjectioncalculate_qe\n", + "\n", + "calculate_qe\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m2782610468716623353Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_3OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m2724299995569513242Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputsstructure\n", + "\n", + "structure\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_2957691736869688386OutputsWithInjectiongetitem->clustermy_workflowinput_dict_5Inputsstructure\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5OutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4Inputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowinput_dict_5OutputsWithInjectiondict->clustermy_workflowcalc_strain_4Inputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4OutputsWithInjectioncalculate_qe\n", + "\n", + "calculate_qe\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_6927899509448106427Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054Inputsobj\n", + "\n", + "obj\n", + "\n", + "\n", + "\n", + "clustermy_workflowcalc_strain_4OutputsWithInjectioncalculate_qe->clustermy_workflowinjected_GetItem_m447248367025958054Inputsobj\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_8710029016672139677OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m1919156955132558363OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_4142543244691876020OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2782610468716623353OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_6927899509448106427OutputsWithInjectiongetitem->clustermy_workflowvolume_dictInputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictOutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstInputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_dictOutputsWithInjectiondict->clustermy_workflowvolume_lstInputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputss_0\n", + "\n", + "s_0\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_7833741598610549781OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputss_1\n", + "\n", + "s_1\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m3668946170913939128OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputss_2\n", + "\n", + "s_2\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m6511681505733114611OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputss_3\n", + "\n", + "s_3\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m2724299995569513242OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054Inputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054Inputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectiongetitem\n", + "\n", + "getitem\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputss_4\n", + "\n", + "s_4\n", + "\n", + "\n", + "\n", + "clustermy_workflowinjected_GetItem_m447248367025958054OutputsWithInjectiongetitem->clustermy_workflowenergy_dictInputss_4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictOutputsWithInjectiondict\n", + "\n", + "dict: dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstInputsinput_dict\n", + "\n", + "input_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_dictOutputsWithInjectiondict->clustermy_workflowenergy_lstInputsinput_dict\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstOutputsWithInjectionoutput_dict\n", + "\n", + "output_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotInputsvolume_lst\n", + "\n", + "volume_lst\n", + "\n", + "\n", + "\n", + "clustermy_workflowvolume_lstOutputsWithInjectionoutput_dict->clustermy_workflowplotInputsvolume_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstOutputsWithInjectionoutput_dict\n", + "\n", + "output_dict\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotInputsenergy_lst\n", + "\n", + "energy_lst\n", + "\n", + "\n", + "\n", + "clustermy_workflowenergy_lstOutputsWithInjectionoutput_dict->clustermy_workflowplotInputsenergy_lst\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotInputsrun\n", + "\n", + "run\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotOutputsWithInjectionran\n", + "\n", + "ran\n", + "\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotInputsaccumulate_and_run\n", + "\n", + "accumulate_and_run\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotOutputsWithInjectionfailed\n", + "\n", + "failed\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotOutputsWithInjectionplot_energy_volume_curve\n", + "\n", + "plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "clustermy_workflowplotOutputsWithInjectionplot_energy_volume_curve->clustermy_workflowOutputsWithInjectionplot__plot_energy_volume_curve\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wf.draw(size=(10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5bb8c16b-7815-4bb8-b8a1-b0d4aa8528c9", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "write_workflow_json(graph_as_dict=wf.graph_as_dict, file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "944be632-3544-4a22-a105-78dd94c6a25d", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"version\": \"0.1.0\",\n", + " \"nodes\": [\n", + " {\n", + " \"id\": 0,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.get_bulk_structure\"\n", + " },\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 3,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.generate_structures\"\n", + " },\n", + " {\n", + " \"id\": 4,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 5,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 6,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 7,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 8,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 9,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 10,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 11,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 12,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_dict\"\n", + " },\n", + " {\n", + " \"id\": 13,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.calculate_qe\"\n", + " },\n", + " {\n", + " \"id\": 14,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 15,\n", + " \"type\": \"function\",\n", + " \"value\": \"python_workflow_definition.shared.get_list\"\n", + " },\n", + " {\n", + " \"id\": 16,\n", + " \"type\": \"function\",\n", + " \"value\": \"workflow.plot_energy_volume_curve\"\n", + " },\n", + " {\n", + " \"id\": 17,\n", + " \"type\": \"input\",\n", + " \"name\": \"element\",\n", + " \"value\": \"Al\"\n", + " },\n", + " {\n", + " \"id\": 18,\n", + " \"type\": \"input\",\n", + " \"name\": \"a\",\n", + " \"value\": 4.04\n", + " },\n", + " {\n", + " \"id\": 19,\n", + " \"type\": \"input\",\n", + " \"name\": \"cubic\",\n", + " \"value\": true\n", + " },\n", + " {\n", + " \"id\": 20,\n", + " \"type\": \"input\",\n", + " \"name\": \"pseudopotentials\",\n", + " \"value\": {\n", + " \"Al\": \"Al.pbe-n-kjpaw_psl.1.0.0.UPF\"\n", + " }\n", + " },\n", + " {\n", + " \"id\": 21,\n", + " \"type\": \"input\",\n", + " \"name\": \"kpts\",\n", + " \"value\": [\n", + " 3,\n", + " 3,\n", + " 3\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 22,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_0\",\n", + " \"value\": \"vc-relax\"\n", + " },\n", + " {\n", + " \"id\": 23,\n", + " \"type\": \"input\",\n", + " \"name\": \"smearing\",\n", + " \"value\": 0.02\n", + " },\n", + " {\n", + " \"id\": 24,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_0\",\n", + " \"value\": \"mini\"\n", + " },\n", + " {\n", + " \"id\": 25,\n", + " \"type\": \"input\",\n", + " \"name\": \"strain_lst\",\n", + " \"value\": [\n", + " 0.9,\n", + " 0.9500000000000001,\n", + " 1.0,\n", + " 1.05,\n", + " 1.1\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 26,\n", + " \"type\": \"input\",\n", + " \"name\": \"calculation_1\",\n", + " \"value\": \"scf\"\n", + " },\n", + " {\n", + " \"id\": 27,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_1\",\n", + " \"value\": \"strain_0\"\n", + " },\n", + " {\n", + " \"id\": 28,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_2\",\n", + " \"value\": \"strain_1\"\n", + " },\n", + " {\n", + " \"id\": 29,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_3\",\n", + " \"value\": \"strain_2\"\n", + " },\n", + " {\n", + " \"id\": 30,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_4\",\n", + " \"value\": \"strain_3\"\n", + " },\n", + " {\n", + " \"id\": 31,\n", + " \"type\": \"input\",\n", + " \"name\": \"working_directory_5\",\n", + " \"value\": \"strain_4\"\n", + " },\n", + " {\n", + " \"id\": 32,\n", + " \"type\": \"output\",\n", + " \"name\": \"result\"\n", + " }\n", + " ],\n", + " \"edges\": [\n", + " {\n", + " \"target\": 3,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 2,\n", + " \"sourcePort\": \"structure\"\n", + " },\n", + " {\n", + " \"target\": 12,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"s_4\"\n", + " },\n", + " {\n", + " \"target\": 10,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"s_3\"\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"s_2\"\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"s_1\"\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"structure\",\n", + " \"source\": 3,\n", + " \"sourcePort\": \"s_0\"\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"0\",\n", + " \"source\": 5,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 7,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"1\",\n", + " \"source\": 7,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 9,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"2\",\n", + " \"source\": 9,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 11,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"3\",\n", + " \"source\": 11,\n", + " \"sourcePort\": \"volume\"\n", + " },\n", + " {\n", + " \"target\": 15,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 13,\n", + " \"sourcePort\": \"energy\"\n", + " },\n", + " {\n", + " \"target\": 14,\n", + " \"targetPort\": \"4\",\n", + " \"source\": 13,\n", + " \"sourcePort\": \"volume\"\n", + " },\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\": 5,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 4,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 7,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 6,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 9,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 8,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 11,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 10,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 13,\n", + " \"targetPort\": \"input_dict\",\n", + " \"source\": 12,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"volume_lst\",\n", + " \"source\": 14,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 16,\n", + " \"targetPort\": \"energy_lst\",\n", + " \"source\": 15,\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\": \"pseudopotentials\",\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\": \"calculation\",\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\": 4,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 26,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 4,\n", + " \"targetPort\": \"smearing\",\n", + " \"source\": 23,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 5,\n", + " \"targetPort\": \"working_directory\",\n", + " \"source\": 27,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 6,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 26,\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\": 28,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 8,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 26,\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\": 29,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 10,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 10,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 10,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 26,\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\": 30,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 12,\n", + " \"targetPort\": \"pseudopotentials\",\n", + " \"source\": 20,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 12,\n", + " \"targetPort\": \"kpts\",\n", + " \"source\": 21,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 12,\n", + " \"targetPort\": \"calculation\",\n", + " \"source\": 26,\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\": 31,\n", + " \"sourcePort\": null\n", + " },\n", + " {\n", + " \"target\": 32,\n", + " \"targetPort\": null,\n", + " \"source\": 16,\n", + " \"sourcePort\": null\n", + " }\n", + " ]\n", + "}" + ] + } + ], + "source": [ + "!cat {workflow_json_filename}" + ] + }, + { + "cell_type": "markdown", + "id": "fef7107a-5af3-4434-ae4c-a8d45e1d9b61", + "metadata": {}, + "source": "## Load Workflow with aiida\n\n`load_workflow_json` reconstructs the graph as an `aiida-workgraph` `WorkGraph`. The lattice constant `a` is overridden (4.04 -> 4.05) to show the loaded graph can still be edited like one built natively with `aiida-workgraph`, before running it with `wg.run()`." + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "5f4d2243-faf6-4d57-be70-5f7d1292e33e", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Profile" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from aiida import orm, load_profile\n", + "\n", + "load_profile()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "232c9447-8274-4a82-9c8c-468af7ec6c43", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.aiida import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "97150c3d-dd11-4b24-8e19-a088bb85a2c8", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wg = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "539e0245-c31c-4fb6-badd-c6ef155b43fa", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "wg.tasks.get_bulk_structure.inputs.a.value = orm.Float(4.05)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "dac6c4ad-297e-43b1-8d0a-ea841f3d6aa7", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "05/26/2025 05:57:55 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_bulk_structure1\n", + "05/26/2025 05:57:56 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_bulk_structure1, type: PyFunction, finished.\n", + "05/26/2025 05:57:56 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict2\n", + "05/26/2025 05:57:56 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict2, type: PyFunction, finished.\n", + "05/26/2025 05:57:56 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe3\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00217] 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", + "05/26/2025 05:58:48 AM <86> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['energy', 'volume'])\n", + "05/26/2025 05:58:48 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe3, type: PyFunction, finished.\n", + "05/26/2025 05:58:48 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_structures4\n", + "05/26/2025 05:58:49 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: generate_structures4, type: PyFunction, finished.\n", + "05/26/2025 05:58:49 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict5,get_dict7,get_dict9,get_dict11,get_dict13\n", + "05/26/2025 05:58:49 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict5, type: PyFunction, finished.\n", + "05/26/2025 05:58:50 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe6,get_dict7,get_dict9,get_dict11,get_dict13\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00262] 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", + "05/26/2025 05:59:03 AM <86> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:59:04 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe6, type: PyFunction, finished.\n", + "05/26/2025 05:59:04 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict7,get_dict9,get_dict11,get_dict13\n", + "05/26/2025 05:59:04 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict7, type: PyFunction, finished.\n", + "05/26/2025 05:59:05 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe8,get_dict9,get_dict11,get_dict13\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00273] 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", + "05/26/2025 05:59:16 AM <86> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:59:16 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe8, type: PyFunction, finished.\n", + "05/26/2025 05:59:16 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict9,get_dict11,get_dict13\n", + "05/26/2025 05:59:17 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict9, type: PyFunction, finished.\n", + "05/26/2025 05:59:17 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe10,get_dict11,get_dict13\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00285] 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", + "05/26/2025 05:59:28 AM <86> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:59:29 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe10, type: PyFunction, finished.\n", + "05/26/2025 05:59:29 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict11,get_dict13\n", + "05/26/2025 05:59:29 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict11, type: PyFunction, finished.\n", + "05/26/2025 05:59:29 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe12,get_dict13\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00296] 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", + "05/26/2025 05:59:43 AM <86> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:59:43 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe12, type: PyFunction, finished.\n", + "05/26/2025 05:59:43 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict13\n", + "05/26/2025 05:59:44 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_dict13, type: PyFunction, finished.\n", + "05/26/2025 05:59:44 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe14\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00307] 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", + "05/26/2025 05:59:58 AM <86> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n", + "05/26/2025 05:59:59 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: calculate_qe14, type: PyFunction, finished.\n", + "05/26/2025 05:59:59 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list15,get_list16\n", + "05/26/2025 05:59:59 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_list15, type: PyFunction, finished.\n", + "05/26/2025 05:59:59 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list16\n", + "05/26/2025 06:00:00 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: get_list16, type: PyFunction, finished.\n", + "05/26/2025 06:00:00 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_energy_volume_curve17\n", + "05/26/2025 06:00:01 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|update_task_state]: Task: plot_energy_volume_curve17, type: PyFunction, finished.\n", + "05/26/2025 06:00:01 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", + "05/26/2025 06:00:01 AM <86> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [17|WorkGraphEngine|finalize]: Finalize workgraph.\n" + ] + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "wg.run()" + ] + }, + { + "cell_type": "markdown", + "id": "9226d966-d90a-4ab2-9776-df1b50bd6a49", + "metadata": {}, + "source": "## Load Workflow with jobflow\n\nThe same JSON is loaded as a `jobflow` `Flow` and executed locally with `run_locally`, again after overriding the lattice constant `a`." + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "ba32ad83-385d-4f1a-87ea-28a1383e6067", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.jobflow import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "4a39c916-a45b-48ac-b4a9-914688c5d85e", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from jobflow.managers.local import run_locally" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9b03e3e7-3dba-4640-9869-76916413bfc0", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow = load_workflow_json(file_name=workflow_json_filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "a3f050c8-9a29-461e-bb68-b6cdc5e1bb1b", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "flow[0].function_kwargs[\"a\"] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "19df3f74-8c2f-4563-a78a-f5307a9e084d", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-05-26 06:00:02,662 INFO Started executing jobs locally\n", + "2025-05-26 06:00:02,768 INFO Starting job - get_bulk_structure (2521ebff-2219-4e59-9425-4f3ab2851e2a)\n", + "2025-05-26 06:00:02,771 INFO Finished job - get_bulk_structure (2521ebff-2219-4e59-9425-4f3ab2851e2a)\n", + "2025-05-26 06:00:02,772 INFO Starting job - get_dict (16a60b49-6205-418e-a640-7a128111d10c)\n", + "2025-05-26 06:00:02,776 INFO Finished job - get_dict (16a60b49-6205-418e-a640-7a128111d10c)\n", + "2025-05-26 06:00:02,777 INFO Starting job - calculate_qe (ac278a4f-b187-498e-a234-4060e13f5b06)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00319] 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-05-26 06:00:53,435 INFO Finished job - calculate_qe (ac278a4f-b187-498e-a234-4060e13f5b06)\n", + "2025-05-26 06:00:53,436 INFO Starting job - generate_structures (40215563-bfe0-47dc-a31b-124b15688007)\n", + "2025-05-26 06:00:53,440 INFO Finished job - generate_structures (40215563-bfe0-47dc-a31b-124b15688007)\n", + "2025-05-26 06:00:53,440 INFO Starting job - get_dict (65b32304-10b3-4711-9f55-2dcc5c405641)\n", + "2025-05-26 06:00:53,442 INFO Finished job - get_dict (65b32304-10b3-4711-9f55-2dcc5c405641)\n", + "2025-05-26 06:00:53,442 INFO Starting job - get_dict (77f8e7d0-2281-42cc-b39e-d7acc34f5458)\n", + "2025-05-26 06:00:53,444 INFO Finished job - get_dict (77f8e7d0-2281-42cc-b39e-d7acc34f5458)\n", + "2025-05-26 06:00:53,445 INFO Starting job - get_dict (65655d5b-ccf4-44bd-8c8d-6e833b329ede)\n", + "2025-05-26 06:00:53,446 INFO Finished job - get_dict (65655d5b-ccf4-44bd-8c8d-6e833b329ede)\n", + "2025-05-26 06:00:53,447 INFO Starting job - get_dict (bc4172ef-be1c-4ad0-86c0-156181da184a)\n", + "2025-05-26 06:00:53,448 INFO Finished job - get_dict (bc4172ef-be1c-4ad0-86c0-156181da184a)\n", + "2025-05-26 06:00:53,449 INFO Starting job - get_dict (46148184-d180-4a07-95f7-31bd43ada4b2)\n", + "2025-05-26 06:00:53,451 INFO Finished job - get_dict (46148184-d180-4a07-95f7-31bd43ada4b2)\n", + "2025-05-26 06:00:53,452 INFO Starting job - calculate_qe (1bae14bc-f3b4-4be4-a504-7c100cf1b54c)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00344] 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-05-26 06:01:03,461 INFO Finished job - calculate_qe (1bae14bc-f3b4-4be4-a504-7c100cf1b54c)\n", + "2025-05-26 06:01:03,462 INFO Starting job - calculate_qe (8c6e7e3c-4acc-4434-b140-ce8c97100240)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00355] 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-05-26 06:01:16,096 INFO Finished job - calculate_qe (8c6e7e3c-4acc-4434-b140-ce8c97100240)\n", + "2025-05-26 06:01:16,097 INFO Starting job - calculate_qe (45156baf-8ffa-4c3f-8da4-6b9121e77306)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00366] 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-05-26 06:01:28,481 INFO Finished job - calculate_qe (45156baf-8ffa-4c3f-8da4-6b9121e77306)\n", + "2025-05-26 06:01:28,482 INFO Starting job - calculate_qe (7662120d-f6da-415a-9da8-5fbcadf166aa)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n", + "[jupyter-pythonworkflow-fl--x---35e2fba5:00378] 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-05-26 06:01:41,772 INFO Finished job - calculate_qe (7662120d-f6da-415a-9da8-5fbcadf166aa)\n", + "2025-05-26 06:01:41,773 INFO Starting job - calculate_qe (9d38753b-3c9d-40f9-aa27-eceec701734b)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00389] 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-05-26 06:01:54,979 INFO Finished job - calculate_qe (9d38753b-3c9d-40f9-aa27-eceec701734b)\n", + "2025-05-26 06:01:54,980 INFO Starting job - get_list (cd676100-1e89-4293-a77f-7ca752f228cd)\n", + "2025-05-26 06:01:54,983 INFO Finished job - get_list (cd676100-1e89-4293-a77f-7ca752f228cd)\n", + "2025-05-26 06:01:54,984 INFO Starting job - get_list (44aeb1e8-6af4-4b97-8345-fc78009db91c)\n", + "2025-05-26 06:01:54,987 INFO Finished job - get_list (44aeb1e8-6af4-4b97-8345-fc78009db91c)\n", + "2025-05-26 06:01:54,987 INFO Starting job - plot_energy_volume_curve (09bec337-1bd0-434d-a322-14b6485445bf)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-05-26 06:01:55,044 INFO Finished job - plot_energy_volume_curve (09bec337-1bd0-434d-a322-14b6485445bf)\n", + "2025-05-26 06:01:55,045 INFO Finished executing jobs locally\n" + ] + }, + { + "data": { + "text/plain": [ + "{'2521ebff-2219-4e59-9425-4f3ab2851e2a': {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/example_workflows/quantum_espresso'))},\n", + " '16a60b49-6205-418e-a640-7a128111d10c': {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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'vc-relax', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'ac278a4f-b187-498e-a234-4060e13f5b06': {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.045637215946772, 0.0, 0.0], [0.0, 4.045637215946772, 0.0], [0.0, 0.0, 4.045637215946772]], \"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.022818607973386, 2.0228186079733863], [2.022818607973386, 0.0, 2.0228186079733863], [2.022818607973386, 2.022818607973386, 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.9365262253611, 'volume': 66.2156744823591}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '40215563-bfe0-47dc-a31b-124b15688007': {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.9060197859620818, 0.0, 0.0], [0.0, 3.9060197859620818, 0.0], [0.0, 0.0, 3.9060197859620818]], \"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.9530098929810409, 1.9530098929810413], [1.9530098929810409, 0.0, 1.9530098929810413], [1.9530098929810409, 1.9530098929810409, 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.977053844317981, 0.0, 0.0], [0.0, 3.977053844317981, 0.0], [0.0, 0.0, 3.977053844317981]], \"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.9885269221589905, 1.988526922158991], [1.9885269221589905, 0.0, 1.988526922158991], [1.9885269221589905, 1.9885269221589905, 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.045637215946772, 0.0, 0.0], [0.0, 4.045637215946772, 0.0], [0.0, 0.0, 4.045637215946772]], \"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.022818607973386, 2.0228186079733863], [2.022818607973386, 0.0, 2.0228186079733863], [2.022818607973386, 2.022818607973386, 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.1119709272828855, 0.0, 0.0], [0.0, 4.1119709272828855, 0.0], [0.0, 0.0, 4.1119709272828855]], \"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.0559854636414427, 2.055985463641443], [2.0559854636414427, 0.0, 2.055985463641443], [2.0559854636414427, 2.0559854636414427, 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.176230852372109, 0.0, 0.0], [0.0, 4.176230852372109, 0.0], [0.0, 0.0, 4.176230852372109]], \"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.088115426186054, 2.0881154261860546], [2.088115426186054, 0.0, 2.0881154261860546], [2.088115426186054, 2.088115426186054, 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/example_workflows/quantum_espresso'))},\n", + " '65b32304-10b3-4711-9f55-2dcc5c405641': {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.9060197859620818, 0.0, 0.0], [0.0, 3.9060197859620818, 0.0], [0.0, 0.0, 3.9060197859620818]], \"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.9530098929810409, 1.9530098929810413], [1.9530098929810409, 0.0, 1.9530098929810413], [1.9530098929810409, 1.9530098929810409, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '77f8e7d0-2281-42cc-b39e-d7acc34f5458': {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.977053844317981, 0.0, 0.0], [0.0, 3.977053844317981, 0.0], [0.0, 0.0, 3.977053844317981]], \"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.9885269221589905, 1.988526922158991], [1.9885269221589905, 0.0, 1.988526922158991], [1.9885269221589905, 1.9885269221589905, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '65655d5b-ccf4-44bd-8c8d-6e833b329ede': {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.045637215946772, 0.0, 0.0], [0.0, 4.045637215946772, 0.0], [0.0, 0.0, 4.045637215946772]], \"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.022818607973386, 2.0228186079733863], [2.022818607973386, 0.0, 2.0228186079733863], [2.022818607973386, 2.022818607973386, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'bc4172ef-be1c-4ad0-86c0-156181da184a': {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.1119709272828855, 0.0, 0.0], [0.0, 4.1119709272828855, 0.0], [0.0, 0.0, 4.1119709272828855]], \"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.0559854636414427, 2.055985463641443], [2.0559854636414427, 0.0, 2.055985463641443], [2.0559854636414427, 2.0559854636414427, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '46148184-d180-4a07-95f7-31bd43ada4b2': {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.176230852372109, 0.0, 0.0], [0.0, 4.176230852372109, 0.0], [0.0, 0.0, 4.176230852372109]], \"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.088115426186054, 2.0881154261860546], [2.088115426186054, 0.0, 2.0881154261860546], [2.088115426186054, 2.088115426186054, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '1bae14bc-f3b4-4be4-a504-7c100cf1b54c': {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.906019768889115, 0.0, 0.0], [0.0, 3.906019768889115, 0.0], [0.0, 0.0, 3.906019768889115]], \"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.8457446150628, 'volume': 59.59410625267695}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '8c6e7e3c-4acc-4434-b140-ce8c97100240': {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.97705382693453, 0.0, 0.0], [0.0, 3.97705382693453, 0.0], [0.0, 0.0, 3.97705382693453]], \"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.9885269135082746, 1.9885269135082746], [1.9885269135082746, 0.0, 1.9885269135082746], [1.9885269135082746, 1.9885269135082746, 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.9161488594593, 'volume': 62.90488993338123}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '45156baf-8ffa-4c3f-8da4-6b9121e77306': {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.045637198263546, 0.0, 0.0], [0.0, 4.045637198263546, 0.0], [0.0, 0.0, 4.045637198263546]], \"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.936524166837, 'volume': 66.21567361408542}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '7662120d-f6da-415a-9da8-5fbcadf166aa': {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.111970909309726, 0.0, 0.0], [0.0, 4.111970909309726, 0.0], [0.0, 0.0, 4.111970909309726]], \"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.919286002583, 'volume': 69.52645729479006}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '9d38753b-3c9d-40f9-aa27-eceec701734b': {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.17623083411807, 0.0, 0.0], [0.0, 4.17623083411807, 0.0], [0.0, 0.0, 4.17623083411807]], \"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.8737904693417, 'volume': 72.83724097549414}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " 'cd676100-1e89-4293-a77f-7ca752f228cd': {1: Response(output=[59.59410625267695, 62.90488993338123, 66.21567361408542, 69.52645729479006, 72.83724097549414], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '44aeb1e8-6af4-4b97-8345-fc78009db91c': {1: Response(output=[-1074.8457446150628, -1074.9161488594593, -1074.936524166837, -1074.919286002583, -1074.8737904693417], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n", + " '09bec337-1bd0-434d-a322-14b6485445bf': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))}}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "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": {}, + "output_type": "display_data" + } + ], + "source": [ + "result = run_locally(flow)\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "e0c78db2-2ead-45d3-92ed-d087e19952ba", + "metadata": {}, + "source": "## Load Workflow with pyiron_base\n\nFinally, `pyiron_base`'s loader turns the graph into a list of delayed jobs. `.draw()` visualizes the dependency graph and `.pull()` executes the whole chain (relax + 5 strained SCF calculations), after overriding the lattice constant `a`." + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "319f466c-def2-45c3-82ba-fffca5d036db", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "from python_workflow_definition.pyiron_base import load_workflow_json" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "ed2e964d-0251-488c-b623-28b794c46703", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "create_function_job_819583e9e3328a02d26efc433a60218b\n", + "\n", + "create_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994500>\n", + "\n", + "\n", + "\n", + "volume_lst_473b24fac60dad6f79608b1dcecb81c3\n", + "\n", + "volume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994650>\n", + "\n", + "\n", + "\n", + "volume_lst_473b24fac60dad6f79608b1dcecb81c3->create_function_job_819583e9e3328a02d26efc433a60218b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_8b5fadbd9d29d908c534248ef5e9315d\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997950>\n", + "\n", + "\n", + "\n", + "0_8b5fadbd9d29d908c534248ef5e9315d->volume_lst_473b24fac60dad6f79608b1dcecb81c3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add\n", + "\n", + "working_directory=strain_0\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_8b5fadbd9d29d908c534248ef5e9315d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "0_87110ed6b7c4d5bba96c34aeccc74df8\n", + "\n", + "0=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49959a0>\n", + "\n", + "\n", + "\n", + "working_directory_2e9abb255f1a31f7d29b4451ad422add->0_87110ed6b7c4d5bba96c34aeccc74df8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_eac6ea907afb7d28a1e710cf28b1bc21\n", + "\n", + "energy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997920>\n", + "\n", + "\n", + "\n", + "0_87110ed6b7c4d5bba96c34aeccc74df8->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_07bb4c07773ac201d36aae86ae8fe2fb\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994980>\n", + "\n", + "\n", + "\n", + "input_dict_07bb4c07773ac201d36aae86ae8fe2fb->0_8b5fadbd9d29d908c534248ef5e9315d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_07bb4c07773ac201d36aae86ae8fe2fb->0_87110ed6b7c4d5bba96c34aeccc74df8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_d288c970f4f39abdf5917ab0cdda5a74\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49957c0>\n", + "\n", + "\n", + "\n", + "structure_d288c970f4f39abdf5917ab0cdda5a74->input_dict_07bb4c07773ac201d36aae86ae8fe2fb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_24390cb51d2b8733707c1b0720f10ee1\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4660da0>\n", + "\n", + "\n", + "\n", + "structure_24390cb51d2b8733707c1b0720f10ee1->structure_d288c970f4f39abdf5917ab0cdda5a74\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_cd6455098e547b09fab57e4b2675af93\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49955e0>\n", + "\n", + "\n", + "\n", + "structure_24390cb51d2b8733707c1b0720f10ee1->structure_cd6455098e547b09fab57e4b2675af93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_f8eea3d580ba67799a85fc572d29ff35\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4996fc0>\n", + "\n", + "\n", + "\n", + "structure_24390cb51d2b8733707c1b0720f10ee1->structure_f8eea3d580ba67799a85fc572d29ff35\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_739f727cd683f52942cc877709ac6a2b\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994170>\n", + "\n", + "\n", + "\n", + "structure_24390cb51d2b8733707c1b0720f10ee1->structure_739f727cd683f52942cc877709ac6a2b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_f3b0da6e211f75868023edb2cb868ac4\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4995250>\n", + "\n", + "\n", + "\n", + "structure_24390cb51d2b8733707c1b0720f10ee1->structure_f3b0da6e211f75868023edb2cb868ac4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_e3cba9a9960659f9dc41632e5327206e\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49955b0>\n", + "\n", + "\n", + "\n", + "structure_cd6455098e547b09fab57e4b2675af93->input_dict_e3cba9a9960659f9dc41632e5327206e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_e93f22327a731a96309da7daa63359ec\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994710>\n", + "\n", + "\n", + "\n", + "structure_f8eea3d580ba67799a85fc572d29ff35->input_dict_e93f22327a731a96309da7daa63359ec\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_d66fbd538cf924fb2a8253bd48ef5c13\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49979b0>\n", + "\n", + "\n", + "\n", + "structure_739f727cd683f52942cc877709ac6a2b->input_dict_d66fbd538cf924fb2a8253bd48ef5c13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_7460bcb220d21c38a74f47f27eb9de2a\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4994b00>\n", + "\n", + "\n", + "\n", + "structure_f3b0da6e211f75868023edb2cb868ac4->input_dict_7460bcb220d21c38a74f47f27eb9de2a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7\n", + "\n", + "working_directory=mini\n", + "\n", + "\n", + "\n", + "working_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_24390cb51d2b8733707c1b0720f10ee1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "input_dict_100eb1069a97b70f80697e03d6e0582d\n", + "\n", + "input_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997d10>\n", + "\n", + "\n", + "\n", + "input_dict_100eb1069a97b70f80697e03d6e0582d->structure_24390cb51d2b8733707c1b0720f10ee1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "structure_719a0b45b126422daa0a45939db22a79\n", + "\n", + "structure=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4996990>\n", + "\n", + "\n", + "\n", + "structure_719a0b45b126422daa0a45939db22a79->input_dict_100eb1069a97b70f80697e03d6e0582d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0\n", + "\n", + "element=Al\n", + "\n", + "\n", + "\n", + "element_467734216d9bd2497ffd28d5cd6daba0->structure_719a0b45b126422daa0a45939db22a79\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "a_aea0574e321c6f75f923c059730e9537\n", + "\n", + "a=4.05\n", + "\n", + "\n", + "\n", + "a_aea0574e321c6f75f923c059730e9537->structure_719a0b45b126422daa0a45939db22a79\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a\n", + "\n", + "cubic=True\n", + "\n", + "\n", + "\n", + "cubic_bad787c53fa02a5559fe570238fdb23a->structure_719a0b45b126422daa0a45939db22a79\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10\n", + "\n", + "pseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_07bb4c07773ac201d36aae86ae8fe2fb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_100eb1069a97b70f80697e03d6e0582d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e3cba9a9960659f9dc41632e5327206e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e93f22327a731a96309da7daa63359ec\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_d66fbd538cf924fb2a8253bd48ef5c13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_7460bcb220d21c38a74f47f27eb9de2a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_94302ebcb371a379af51f312ddde4842\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4996090>\n", + "\n", + "\n", + "\n", + "input_dict_e3cba9a9960659f9dc41632e5327206e->1_94302ebcb371a379af51f312ddde4842\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_e7c02b63ee60e6027e07408744058bb7\n", + "\n", + "1=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4995eb0>\n", + "\n", + "\n", + "\n", + "input_dict_e3cba9a9960659f9dc41632e5327206e->1_e7c02b63ee60e6027e07408744058bb7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_dda2e9a60d8da7b2145dfb00de5c55c7\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49950d0>\n", + "\n", + "\n", + "\n", + "input_dict_e93f22327a731a96309da7daa63359ec->2_dda2e9a60d8da7b2145dfb00de5c55c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_af768fbc51beefdd7dbf069476fb362c\n", + "\n", + "2=<pyiron_base.project.delayed.DelayedObject object at 0x7c99dbbc7d70>\n", + "\n", + "\n", + "\n", + "input_dict_e93f22327a731a96309da7daa63359ec->2_af768fbc51beefdd7dbf069476fb362c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_fa9d99441c09b3d51ecb159095ac606c\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e49969f0>\n", + "\n", + "\n", + "\n", + "input_dict_d66fbd538cf924fb2a8253bd48ef5c13->3_fa9d99441c09b3d51ecb159095ac606c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_9c4338c233da3f7fbf2bd1577209c8a4\n", + "\n", + "3=<pyiron_base.project.delayed.DelayedObject object at 0x7c99dbb7a5a0>\n", + "\n", + "\n", + "\n", + "input_dict_d66fbd538cf924fb2a8253bd48ef5c13->3_9c4338c233da3f7fbf2bd1577209c8a4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_7c7d811c8847195569c2105c938c464a\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e4997230>\n", + "\n", + "\n", + "\n", + "input_dict_7460bcb220d21c38a74f47f27eb9de2a->4_7c7d811c8847195569c2105c938c464a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_3e48dd53dfddd2346d05b7b64e55ab38\n", + "\n", + "4=<pyiron_base.project.delayed.DelayedObject object at 0x7c99e446b770>\n", + "\n", + "\n", + "\n", + "input_dict_7460bcb220d21c38a74f47f27eb9de2a->4_3e48dd53dfddd2346d05b7b64e55ab38\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa\n", + "\n", + "kpts=[3, 3, 3]\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_07bb4c07773ac201d36aae86ae8fe2fb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_100eb1069a97b70f80697e03d6e0582d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e3cba9a9960659f9dc41632e5327206e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e93f22327a731a96309da7daa63359ec\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_d66fbd538cf924fb2a8253bd48ef5c13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "kpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_7460bcb220d21c38a74f47f27eb9de2a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34\n", + "\n", + "calculation=vc-relax\n", + "\n", + "\n", + "\n", + "calculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_100eb1069a97b70f80697e03d6e0582d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9\n", + "\n", + "smearing=0.02\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_07bb4c07773ac201d36aae86ae8fe2fb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_100eb1069a97b70f80697e03d6e0582d\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e3cba9a9960659f9dc41632e5327206e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e93f22327a731a96309da7daa63359ec\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_d66fbd538cf924fb2a8253bd48ef5c13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "smearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_7460bcb220d21c38a74f47f27eb9de2a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781\n", + "\n", + "strain_lst=[0.9, 0.95, 1.0, 1.05, 1.1]\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_d288c970f4f39abdf5917ab0cdda5a74\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_cd6455098e547b09fab57e4b2675af93\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_f8eea3d580ba67799a85fc572d29ff35\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_739f727cd683f52942cc877709ac6a2b\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "strain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_f3b0da6e211f75868023edb2cb868ac4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83\n", + "\n", + "calculation=scf\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_07bb4c07773ac201d36aae86ae8fe2fb\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_e3cba9a9960659f9dc41632e5327206e\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_e93f22327a731a96309da7daa63359ec\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_d66fbd538cf924fb2a8253bd48ef5c13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "calculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_7460bcb220d21c38a74f47f27eb9de2a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_94302ebcb371a379af51f312ddde4842->volume_lst_473b24fac60dad6f79608b1dcecb81c3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd\n", + "\n", + "working_directory=strain_1\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_94302ebcb371a379af51f312ddde4842\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_5423d2cc67129a6d0383af6f347df5bd->1_e7c02b63ee60e6027e07408744058bb7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1_e7c02b63ee60e6027e07408744058bb7->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_dda2e9a60d8da7b2145dfb00de5c55c7->volume_lst_473b24fac60dad6f79608b1dcecb81c3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992\n", + "\n", + "working_directory=strain_2\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_dda2e9a60d8da7b2145dfb00de5c55c7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_cc646e064ddfc4b2811aba3d86d27992->2_af768fbc51beefdd7dbf069476fb362c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2_af768fbc51beefdd7dbf069476fb362c->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_fa9d99441c09b3d51ecb159095ac606c->volume_lst_473b24fac60dad6f79608b1dcecb81c3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f\n", + "\n", + "working_directory=strain_3\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_fa9d99441c09b3d51ecb159095ac606c\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_e27768d53df6cd8dc245c52054ecf31f->3_9c4338c233da3f7fbf2bd1577209c8a4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3_9c4338c233da3f7fbf2bd1577209c8a4->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_7c7d811c8847195569c2105c938c464a->volume_lst_473b24fac60dad6f79608b1dcecb81c3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7\n", + "\n", + "working_directory=strain_4\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_7c7d811c8847195569c2105c938c464a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "working_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_3e48dd53dfddd2346d05b7b64e55ab38\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4_3e48dd53dfddd2346d05b7b64e55ab38->energy_lst_eac6ea907afb7d28a1e710cf28b1bc21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "energy_lst_eac6ea907afb7d28a1e710cf28b1bc21->create_function_job_819583e9e3328a02d26efc433a60218b\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst = load_workflow_json(file_name=\"workflow.json\")\n", + "delayed_object_lst[-1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "476f0c22-564a-4e4b-8bd8-d68582a68710", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [ + "delayed_object_lst[0].input['a'] = 4.05" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "8bf584f4-52f5-41eb-9ce3-13847436e0a0", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The job get_bulk_structure_2ca4aeae204ceaa28593c93054b07908 was saved and received the ID: 1\n", + "The job get_dict_1e47509b88d63a21fd421686554c8f4a was saved and received the ID: 2\n", + "The job calculate_qe_411e578f2700d09ba2df9a4c682b4582 was saved and received the ID: 3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00404] 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_4d77d481fc8ea55229ec1ece04d63682 was saved and received the ID: 4\n", + "The job get_dict_83639a473c5a24b39cda4262a11ce660 was saved and received the ID: 5\n", + "The job calculate_qe_bc7507e47b3777418bec8bd6a10e8db9 was saved and received the ID: 6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00423] 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_8911ea3b715c48fd9e6ebfd933827ad8 was saved and received the ID: 7\n", + "The job calculate_qe_3bf1743787b6db34eb1482e0cb2b49f2 was saved and received the ID: 8\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00435] 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_b30dd89506e55e06e63a020a5033af19 was saved and received the ID: 9\n", + "The job calculate_qe_7fdc96db9da025b4936748f5616be588 was saved and received the ID: 10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00446] 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_899289e3717fb81edaca9c5c2b5d8f48 was saved and received the ID: 11\n", + "The job calculate_qe_9bb68591280fb0b90a58521fd3c6bc9d was saved and received the ID: 12\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00457] 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_12373ab37ecdba93cf91b2a4c3c016d6 was saved and received the ID: 13\n", + "The job calculate_qe_c41612cee84a2bc87674f7f0720f27af was saved and received the ID: 14\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[jupyter-pythonworkflow-fl--x---35e2fba5:00468] 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_4a53d87f56ee9d519ca6c738ae2cef3f was saved and received the ID: 15\n", + "The job get_list_5a5af7c495c3bd034f3904760535ba3e was saved and received the ID: 16\n", + "The job plot_energy_volume_curve_aea478ca6598efbe0596a61e39e1154d was saved and received the ID: 17\n" + ] + }, + { + "data": { + "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=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "delayed_object_lst[-1].pull()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "92a9efbb-b592-4888-a2a4-310acde774c9", + "metadata": { + "trusted": true + }, + "outputs": [], + "source": [] + } + ], + "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": 4, + "nbformat_minor": 5 +} diff --git a/_sources/example_workflows/quantum_espresso/universal_workflow.ipynb b/_sources/example_workflows/quantum_espresso/universal_workflow.ipynb new file mode 100644 index 00000000..6e834b72 --- /dev/null +++ b/_sources/example_workflows/quantum_espresso/universal_workflow.ipynb @@ -0,0 +1,505 @@ +{ + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.8", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 4, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "# Load Quantum Espresso Energy Volume Curve Workflow\n\nThis notebook loads the same, already-exported [`workflow.json`](workflow.json) with six different backends in turn - `aiida-workgraph`, `executorlib`, `jobflow`, `pyiron_base`, `pyiron_workflow` and plain Python - to demonstrate that the PWD format is interoperable regardless of which engine originally produced it.", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Plot\n\n`python_workflow_definition.plot.plot` renders the raw node/edge structure of `workflow.json` as a graph, independent of any workflow engine - useful to inspect the relax -> strain -> 5x scf -> plot pipeline before executing it.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.plot import plot", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "source": "plot(file_name='workflow.json')", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\n0\n\nworkflow.get_bulk_structure\n\n\n\n13\n\npython_workflow_definition.shared.get_dict\n\n\n\n0->13\n\n\nstructure\n\n\n\n1\n\nworkflow.calculate_qe\n\n\n\n13->1\n\n\ninput_dict\n\n\n\n2\n\nworkflow.generate_structures\n\n\n\n1->2\n\n\nstructure=result[structure]\n\n\n\n20\n\npython_workflow_definition.shared.get_dict\n\n\n\n2->20\n\n\nstructure=result[s_0]\n\n\n\n23\n\npython_workflow_definition.shared.get_dict\n\n\n\n2->23\n\n\nstructure=result[s_1]\n\n\n\n25\n\npython_workflow_definition.shared.get_dict\n\n\n\n2->25\n\n\nstructure=result[s_2]\n\n\n\n27\n\npython_workflow_definition.shared.get_dict\n\n\n\n2->27\n\n\nstructure=result[s_3]\n\n\n\n29\n\npython_workflow_definition.shared.get_dict\n\n\n\n2->29\n\n\nstructure=result[s_4]\n\n\n\n3\n\nworkflow.calculate_qe\n\n\n\n20->3\n\n\ninput_dict\n\n\n\n4\n\nworkflow.calculate_qe\n\n\n\n23->4\n\n\ninput_dict\n\n\n\n5\n\nworkflow.calculate_qe\n\n\n\n25->5\n\n\ninput_dict\n\n\n\n6\n\nworkflow.calculate_qe\n\n\n\n27->6\n\n\ninput_dict\n\n\n\n7\n\nworkflow.calculate_qe\n\n\n\n29->7\n\n\ninput_dict\n\n\n\n30\n\npython_workflow_definition.shared.get_list\n\n\n\n3->30\n\n\n0=result[volume]\n\n\n\n31\n\npython_workflow_definition.shared.get_list\n\n\n\n3->31\n\n\n0=result[energy]\n\n\n\n8\n\nworkflow.plot_energy_volume_curve\n\n\n\n30->8\n\n\nvolume_lst\n\n\n\n31->8\n\n\nenergy_lst\n\n\n\n4->30\n\n\n1=result[volume]\n\n\n\n4->31\n\n\n1=result[energy]\n\n\n\n5->30\n\n\n2=result[volume]\n\n\n\n5->31\n\n\n2=result[energy]\n\n\n\n6->30\n\n\n3=result[volume]\n\n\n\n6->31\n\n\n3=result[energy]\n\n\n\n7->30\n\n\n4=result[volume]\n\n\n\n7->31\n\n\n4=result[energy]\n\n\n\n32\n\nresult\n\n\n\n8->32\n\n\n\n\n\n9\n\nAl\n\n\n\n9->0\n\n\nelement\n\n\n\n10\n\n4.05\n\n\n\n10->0\n\n\na\n\n\n\n11\n\nTrue\n\n\n\n11->0\n\n\ncubic\n\n\n\n12\n\nmini\n\n\n\n12->1\n\n\nworking_directory\n\n\n\n14\n\n{'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}\n\n\n\n14->13\n\n\npseudopotentials\n\n\n\n14->20\n\n\npseudopotentials\n\n\n\n14->23\n\n\npseudopotentials\n\n\n\n14->25\n\n\npseudopotentials\n\n\n\n14->27\n\n\npseudopotentials\n\n\n\n14->29\n\n\npseudopotentials\n\n\n\n15\n\n[3, 3, 3]\n\n\n\n15->13\n\n\nkpts\n\n\n\n15->20\n\n\nkpts\n\n\n\n15->23\n\n\nkpts\n\n\n\n15->25\n\n\nkpts\n\n\n\n15->27\n\n\nkpts\n\n\n\n15->29\n\n\nkpts\n\n\n\n16\n\nvc-relax\n\n\n\n16->13\n\n\ncalculation\n\n\n\n17\n\n0.02\n\n\n\n17->13\n\n\nsmearing\n\n\n\n17->20\n\n\nsmearing\n\n\n\n17->23\n\n\nsmearing\n\n\n\n17->25\n\n\nsmearing\n\n\n\n17->27\n\n\nsmearing\n\n\n\n17->29\n\n\nsmearing\n\n\n\n18\n\n[0.9, 0.95, 1.0, 1.05, 1.1]\n\n\n\n18->2\n\n\nstrain_lst\n\n\n\n19\n\nstrain_0\n\n\n\n19->3\n\n\nworking_directory\n\n\n\n21\n\nscf\n\n\n\n21->20\n\n\ncalculation\n\n\n\n21->23\n\n\ncalculation\n\n\n\n21->25\n\n\ncalculation\n\n\n\n21->27\n\n\ncalculation\n\n\n\n21->29\n\n\ncalculation\n\n\n\n22\n\nstrain_1\n\n\n\n22->4\n\n\nworking_directory\n\n\n\n24\n\nstrain_2\n\n\n\n24->5\n\n\nworking_directory\n\n\n\n26\n\nstrain_3\n\n\n\n26->6\n\n\nworking_directory\n\n\n\n28\n\nstrain_4\n\n\n\n28->7\n\n\nworking_directory\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": "## Aiida\n\n`load_workflow_json` reconstructs the graph as an `aiida-workgraph` `WorkGraph`, after connecting to the local AiiDA profile with `load_profile()`. `wg.run()` executes the relax step followed by the 5 parallel strained SCF calculations and the final plot.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.aiida import load_workflow_json\nfrom aiida import load_profile\nload_profile()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 3, + "output_type": "execute_result", + "data": { + "text/plain": "Profile" + }, + "metadata": {} + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "source": "wg = load_workflow_json(file_name='workflow.json')", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "source": "wg", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "execution_count": 5, + "output_type": "execute_result", + "data": { + "text/plain": "NodeGraphWidget(settings={'minimap': True}, style={'width': '90%', 'height': '600px'}, value={'name': 'WorkGra…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 1, + "model_id": "ee61bd4c7d90449593a86d50e9eb6acc" + } + }, + "metadata": {} + } + ], + "execution_count": 5 + }, + { + "cell_type": "code", + "source": "wg.run()\n", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "05/24/2025 06:05:21 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_bulk_structure1\n05/24/2025 06:05:21 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_bulk_structure1, type: PyFunction, finished.\n05/24/2025 06:05:21 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict10\n05/24/2025 06:05:22 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_dict10, type: PyFunction, finished.\n05/24/2025 06:05:22 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe2\n[jupyter-pythonworkflow-fl--x---d7231032:10748] 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\n05/24/2025 06:06:12 AM <10674> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['energy', 'volume'])\n05/24/2025 06:06:12 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: calculate_qe2, type: PyFunction, finished.\n05/24/2025 06:06:12 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: generate_structures3\n05/24/2025 06:06:13 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: generate_structures3, type: PyFunction, finished.\n05/24/2025 06:06:13 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict11,get_dict12,get_dict13,get_dict14,get_dict15\n05/24/2025 06:06:14 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_dict11, type: PyFunction, finished.\n05/24/2025 06:06:14 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe4,get_dict12,get_dict13,get_dict14,get_dict15\n[jupyter-pythonworkflow-fl--x---d7231032:10760] 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\n05/24/2025 06:06:24 AM <10674> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n05/24/2025 06:06:24 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: calculate_qe4, type: PyFunction, finished.\n05/24/2025 06:06:24 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict12,get_dict13,get_dict14,get_dict15\n05/24/2025 06:06:25 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_dict12, type: PyFunction, finished.\n05/24/2025 06:06:25 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe5,get_dict13,get_dict14,get_dict15\n[jupyter-pythonworkflow-fl--x---d7231032:10770] 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\n05/24/2025 06:06:36 AM <10674> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n05/24/2025 06:06:36 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: calculate_qe5, type: PyFunction, finished.\n05/24/2025 06:06:36 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict13,get_dict14,get_dict15\n05/24/2025 06:06:37 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_dict13, type: PyFunction, finished.\n05/24/2025 06:06:37 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe6,get_dict14,get_dict15\n[jupyter-pythonworkflow-fl--x---d7231032:10781] 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\n05/24/2025 06:06:49 AM <10674> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n05/24/2025 06:06:49 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: calculate_qe6, type: PyFunction, finished.\n05/24/2025 06:06:49 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict14,get_dict15\n05/24/2025 06:06:50 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_dict14, type: PyFunction, finished.\n05/24/2025 06:06:50 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe7,get_dict15\n[jupyter-pythonworkflow-fl--x---d7231032:10792] 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\n05/24/2025 06:07:05 AM <10674> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n05/24/2025 06:07:06 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: calculate_qe7, type: PyFunction, finished.\n05/24/2025 06:07:06 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_dict15\n05/24/2025 06:07:06 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_dict15, type: PyFunction, finished.\n05/24/2025 06:07:06 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: calculate_qe8\n[jupyter-pythonworkflow-fl--x---d7231032:10804] 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\n05/24/2025 06:07:21 AM <10674> aiida.orm.nodes.process.calculation.calcfunction.CalcFunctionNode: [WARNING] Found extra results that are not included in the output: dict_keys(['structure'])\n05/24/2025 06:07:21 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: calculate_qe8, type: PyFunction, finished.\n05/24/2025 06:07:21 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list16,get_list17\n05/24/2025 06:07:22 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_list16, type: PyFunction, finished.\n05/24/2025 06:07:22 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: get_list17\n05/24/2025 06:07:22 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: get_list17, type: PyFunction, finished.\n05/24/2025 06:07:22 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: plot_energy_volume_curve9\n05/24/2025 06:07:23 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|update_task_state]: Task: plot_energy_volume_curve9, type: PyFunction, finished.\n05/24/2025 06:07:23 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n05/24/2025 06:07:23 AM <10674> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [342|WorkGraphEngine|finalize]: Finalize workgraph.\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=" + }, + "metadata": {} + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": "## executorlib\n\nHere `load_workflow_json` takes a live `exe` (a `SingleNodeExecutor`) and submits the whole graph to it, returning a `Future` for the final result; `.result()` blocks until every node - including the 5 fanned-out SCF calculations - has finished executing.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from executorlib import SingleNodeExecutor", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.executorlib import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 8 + }, + { + "cell_type": "code", + "source": "with SingleNodeExecutor(max_workers=1) as exe:\n result = load_workflow_json(file_name=\"workflow.json\", exe=exe).result()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:10932] 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[jupyter-pythonworkflow-fl--x---d7231032:11164] 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[jupyter-pythonworkflow-fl--x---d7231032:11230] 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[jupyter-pythonworkflow-fl--x---d7231032:11301] 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[jupyter-pythonworkflow-fl--x---d7231032:11367] 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[jupyter-pythonworkflow-fl--x---d7231032:11433] 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" + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "source": "result", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": "## jobflow\n\nThe graph is loaded as a `jobflow` `Flow` and executed locally with `run_locally`, which runs the relax job, the 5 strained SCF jobs and the plotting job in dependency order.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from jobflow.managers.local import run_locally", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 11 + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.jobflow import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 12 + }, + { + "cell_type": "code", + "source": "flow = load_workflow_json(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 13 + }, + { + "cell_type": "code", + "source": "result = run_locally(flow)\nresult", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 06:11:19,085 INFO Started executing jobs locally\n2025-05-24 06:11:19,088 INFO Starting job - get_bulk_structure (13fb19e6-ff0a-4b2e-9cdd-391f43580ede)\n2025-05-24 06:11:19,091 INFO Finished job - get_bulk_structure (13fb19e6-ff0a-4b2e-9cdd-391f43580ede)\n2025-05-24 06:11:19,091 INFO Starting job - get_dict (9d93f23c-2f31-4943-95eb-c30d527e0a7c)\n2025-05-24 06:11:19,093 INFO Finished job - get_dict (9d93f23c-2f31-4943-95eb-c30d527e0a7c)\n2025-05-24 06:11:19,093 INFO Starting job - calculate_qe (031ec4f2-37b7-4837-941d-943eb1a3a36f)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12088] 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-05-24 06:12:09,004 INFO Finished job - calculate_qe (031ec4f2-37b7-4837-941d-943eb1a3a36f)\n2025-05-24 06:12:09,005 INFO Starting job - generate_structures (c26bc0f8-4833-4913-ae54-676004a2cee5)\n2025-05-24 06:12:09,009 INFO Finished job - generate_structures (c26bc0f8-4833-4913-ae54-676004a2cee5)\n2025-05-24 06:12:09,009 INFO Starting job - get_dict (d68d9722-53d8-489e-b3dd-831637c677ce)\n2025-05-24 06:12:09,011 INFO Finished job - get_dict (d68d9722-53d8-489e-b3dd-831637c677ce)\n2025-05-24 06:12:09,011 INFO Starting job - get_dict (a2a5e5ca-2862-48d4-a3d2-3090bc48ee44)\n2025-05-24 06:12:09,013 INFO Finished job - get_dict (a2a5e5ca-2862-48d4-a3d2-3090bc48ee44)\n2025-05-24 06:12:09,014 INFO Starting job - get_dict (752bccfa-8200-4fee-bcae-799506e75b3f)\n2025-05-24 06:12:09,015 INFO Finished job - get_dict (752bccfa-8200-4fee-bcae-799506e75b3f)\n2025-05-24 06:12:09,016 INFO Starting job - get_dict (8f26bac2-370b-431a-8e67-16205b118a8e)\n2025-05-24 06:12:09,017 INFO Finished job - get_dict (8f26bac2-370b-431a-8e67-16205b118a8e)\n2025-05-24 06:12:09,018 INFO Starting job - get_dict (86078da3-b1d1-47e5-98b6-666c8d1c925f)\n2025-05-24 06:12:09,019 INFO Finished job - get_dict (86078da3-b1d1-47e5-98b6-666c8d1c925f)\n2025-05-24 06:12:09,020 INFO Starting job - calculate_qe (8bf26748-191f-48c0-b55a-3c00dc23cbd4)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pythonworkflow-fl--x---d7231032:12101] 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-05-24 06:12:19,833 INFO Finished job - calculate_qe (8bf26748-191f-48c0-b55a-3c00dc23cbd4)\n2025-05-24 06:12:19,834 INFO Starting job - calculate_qe (e248cdb3-3984-4c9e-8ed9-2d8ea4d0053b)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pythonworkflow-fl--x---d7231032:12111] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 06:12:30,295 INFO Finished job - calculate_qe (e248cdb3-3984-4c9e-8ed9-2d8ea4d0053b)\n2025-05-24 06:12:30,296 INFO Starting job - calculate_qe (b99732df-2c29-471a-a9dd-b43cf0765295)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12121] 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-05-24 06:12:42,189 INFO Finished job - calculate_qe (b99732df-2c29-471a-a9dd-b43cf0765295)\n2025-05-24 06:12:42,189 INFO Starting job - calculate_qe (5316d29c-cdf2-4a43-934d-02518422acf5)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pythonworkflow-fl--x---d7231032:12131] 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-05-24 06:12:55,607 INFO Finished job - calculate_qe (5316d29c-cdf2-4a43-934d-02518422acf5)\n2025-05-24 06:12:55,608 INFO Starting job - calculate_qe (dc161c3a-22d0-456d-9a79-bc0126f7296b)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n[jupyter-pythonworkflow-fl--x---d7231032:12141] 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-05-24 06:13:09,051 INFO Finished job - calculate_qe (dc161c3a-22d0-456d-9a79-bc0126f7296b)\n2025-05-24 06:13:09,052 INFO Starting job - get_list (a23aaea4-d7dc-4223-bedc-213cbf38f436)\n2025-05-24 06:13:09,054 INFO Finished job - get_list (a23aaea4-d7dc-4223-bedc-213cbf38f436)\n2025-05-24 06:13:09,055 INFO Starting job - get_list (09e90050-8621-403e-8f78-c50a7180f23c)\n2025-05-24 06:13:09,057 INFO Finished job - get_list (09e90050-8621-403e-8f78-c50a7180f23c)\n2025-05-24 06:13:09,058 INFO Starting job - plot_energy_volume_curve (1e007ae5-e596-4e71-baa0-7ac7a604a5fd)\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG\n" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "2025-05-24 06:13:09,114 INFO Finished job - plot_energy_volume_curve (1e007ae5-e596-4e71-baa0-7ac7a604a5fd)\n2025-05-24 06:13:09,115 INFO Finished executing jobs locally\n" + }, + { + "execution_count": 14, + "output_type": "execute_result", + "data": { + "text/plain": "{'13fb19e6-ff0a-4b2e-9cdd-391f43580ede': {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/example_workflows/quantum_espresso'))},\n '9d93f23c-2f31-4943-95eb-c30d527e0a7c': {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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'vc-relax', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '031ec4f2-37b7-4837-941d-943eb1a3a36f': {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.045637215947026, 0.0, 0.0], [0.0, 4.045637215947026, 0.0], [0.0, 0.0, 4.045637215947025]], \"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.0228186079735124, 2.0228186079735124], [2.0228186079735124, 0.0, 2.0228186079735124], [2.0228186079735124, 2.0228186079735124, 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.9365262253532, 'volume': 66.21567448237158}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n 'c26bc0f8-4833-4913-ae54-676004a2cee5': {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.906019785962327, 0.0, 0.0], [0.0, 3.906019785962327, 0.0], [0.0, 0.0, 3.906019785962326]], \"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.953009892981163, 1.9530098929811628], [1.953009892981163, 0.0, 1.9530098929811628], [1.953009892981163, 1.953009892981163, 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.9770538443182306, 0.0, 0.0], [0.0, 3.9770538443182306, 0.0], [0.0, 0.0, 3.9770538443182297]], \"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.9885269221591149, 1.9885269221591149], [1.9885269221591149, 0.0, 1.9885269221591149], [1.9885269221591149, 1.9885269221591149, 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.045637215947026, 0.0, 0.0], [0.0, 4.045637215947026, 0.0], [0.0, 0.0, 4.045637215947025]], \"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.0228186079735124, 2.0228186079735124], [2.0228186079735124, 0.0, 2.0228186079735124], [2.0228186079735124, 2.0228186079735124, 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.111970927283144, 0.0, 0.0], [0.0, 4.111970927283144, 0.0], [0.0, 0.0, 4.111970927283143]], \"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.0559854636415715, 2.0559854636415715], [2.0559854636415715, 0.0, 2.0559854636415715], [2.0559854636415715, 2.0559854636415715, 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.176230852372372, 0.0, 0.0], [0.0, 4.176230852372372, 0.0], [0.0, 0.0, 4.176230852372371]], \"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.0881154261861856, 2.0881154261861856], [2.0881154261861856, 0.0, 2.0881154261861856], [2.0881154261861856, 2.0881154261861856, 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/example_workflows/quantum_espresso'))},\n 'd68d9722-53d8-489e-b3dd-831637c677ce': {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.906019785962327, 0.0, 0.0], [0.0, 3.906019785962327, 0.0], [0.0, 0.0, 3.906019785962326]], \"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.953009892981163, 1.9530098929811628], [1.953009892981163, 0.0, 1.9530098929811628], [1.953009892981163, 1.953009892981163, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n 'a2a5e5ca-2862-48d4-a3d2-3090bc48ee44': {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.9770538443182306, 0.0, 0.0], [0.0, 3.9770538443182306, 0.0], [0.0, 0.0, 3.9770538443182297]], \"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.9885269221591149, 1.9885269221591149], [1.9885269221591149, 0.0, 1.9885269221591149], [1.9885269221591149, 1.9885269221591149, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '752bccfa-8200-4fee-bcae-799506e75b3f': {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.045637215947026, 0.0, 0.0], [0.0, 4.045637215947026, 0.0], [0.0, 0.0, 4.045637215947025]], \"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.0228186079735124, 2.0228186079735124], [2.0228186079735124, 0.0, 2.0228186079735124], [2.0228186079735124, 2.0228186079735124, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '8f26bac2-370b-431a-8e67-16205b118a8e': {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.111970927283144, 0.0, 0.0], [0.0, 4.111970927283144, 0.0], [0.0, 0.0, 4.111970927283143]], \"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.0559854636415715, 2.0559854636415715], [2.0559854636415715, 0.0, 2.0559854636415715], [2.0559854636415715, 2.0559854636415715, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '86078da3-b1d1-47e5-98b6-666c8d1c925f': {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.176230852372372, 0.0, 0.0], [0.0, 4.176230852372372, 0.0], [0.0, 0.0, 4.176230852372371]], \"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.0881154261861856, 2.0881154261861856], [2.0881154261861856, 0.0, 2.0881154261861856], [2.0881154261861856, 2.0881154261861856, 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\": []}', 'pseudopotentials': {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}, 'kpts': [3, 3, 3], 'calculation': 'scf', 'smearing': 0.02}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '8bf26748-191f-48c0-b55a-3c00dc23cbd4': {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.906019768889365, 0.0, 0.0], [0.0, 3.906019768889365, 0.0], [0.0, 0.0, 3.906019768889365]], \"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.8457446150635, 'volume': 59.594106252688384}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n 'e248cdb3-3984-4c9e-8ed9-2d8ea4d0053b': {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.97705382693478, 0.0, 0.0], [0.0, 3.97705382693478, 0.0], [0.0, 0.0, 3.97705382693478]], \"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.9885269135082746, 1.9885269135082746], [1.9885269135082746, 0.0, 1.9885269135082746], [1.9885269135082746, 1.9885269135082746, 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.916148859456, 'volume': 62.90488993339307}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n 'b99732df-2c29-471a-a9dd-b43cf0765295': {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.045637198263806, 0.0, 0.0], [0.0, 4.045637198263806, 0.0], [0.0, 0.0, 4.045637198263797]], \"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.0228185991583887, 2.0228185991583887], [2.0228185991583887, 0.0, 2.0228185991583887], [2.0228185991583887, 2.0228185991583887, 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.9365241668336, 'volume': 66.21567361409807}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '5316d29c-cdf2-4a43-934d-02518422acf5': {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.111970909309976, 0.0, 0.0], [0.0, 4.111970909309976, 0.0], [0.0, 0.0, 4.111970909309976]], \"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.9192860025798, 'volume': 69.52645729480278}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n 'dc161c3a-22d0-456d-9a79-bc0126f7296b': {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.17623083411833, 0.0, 0.0], [0.0, 4.17623083411833, 0.0], [0.0, 0.0, 4.17623083411833]], \"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.8737904693403, 'volume': 72.8372409755078}, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n 'a23aaea4-d7dc-4223-bedc-213cbf38f436': {1: Response(output=[59.594106252688384, 62.90488993339307, 66.21567361409807, 69.52645729480278, 72.8372409755078], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '09e90050-8621-403e-8f78-c50a7180f23c': {1: Response(output=[-1074.8457446150635, -1074.916148859456, -1074.9365241668336, -1074.9192860025798, -1074.8737904693403], detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))},\n '1e007ae5-e596-4e71-baa0-7ac7a604a5fd': {1: Response(output=None, detour=None, addition=None, replace=None, stored_data=None, stop_children=False, stop_jobflow=False, job_dir=PosixPath('/home/jovyan/example_workflows/quantum_espresso'))}}" + }, + "metadata": {} + }, + { + "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=" + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": "## pyiron_base\n\n`load_workflow_json` turns the graph into a list of delayed pyiron jobs; `.draw()` visualizes the dependency graph (including the fan-out into 5 strained SCF jobs) and `.pull()` executes the whole chain.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.pyiron_base import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "source": "delayed_object_lst = load_workflow_json(file_name=\"workflow.json\")\ndelayed_object_lst[-1].draw()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "image/svg+xml": "\n\n\n\n\ncreate_function_job_9adf79b116ef7d1bd6234b8bd3fb8790\n\ncreate_function_job=<pyiron_base.project.delayed.DelayedObject object at 0x768578177f50>\n\n\n\nvolume_lst_9ecc37695722ff26a909e7df66fad761\n\nvolume_lst=<pyiron_base.project.delayed.DelayedObject object at 0x768578177ec0>\n\n\n\nvolume_lst_9ecc37695722ff26a909e7df66fad761->create_function_job_9adf79b116ef7d1bd6234b8bd3fb8790\n\n\n\n\n\n0_9ec2b766eb40591013f27b281c10fdf6\n\n0=<pyiron_base.project.delayed.DelayedObject object at 0x7685781761e0>\n\n\n\n0_9ec2b766eb40591013f27b281c10fdf6->volume_lst_9ecc37695722ff26a909e7df66fad761\n\n\n\n\n\nworking_directory_2e9abb255f1a31f7d29b4451ad422add\n\nworking_directory=strain_0\n\n\n\nworking_directory_2e9abb255f1a31f7d29b4451ad422add->0_9ec2b766eb40591013f27b281c10fdf6\n\n\n\n\n\n0_2ee29abc84e19e2a89c493d954bca047\n\n0=<pyiron_base.project.delayed.DelayedObject object at 0x768578177470>\n\n\n\nworking_directory_2e9abb255f1a31f7d29b4451ad422add->0_2ee29abc84e19e2a89c493d954bca047\n\n\n\n\n\nenergy_lst_d41078de6fda3484043c8f3407845d97\n\nenergy_lst=<pyiron_base.project.delayed.DelayedObject object at 0x768578176240>\n\n\n\n0_2ee29abc84e19e2a89c493d954bca047->energy_lst_d41078de6fda3484043c8f3407845d97\n\n\n\n\n\ninput_dict_87f4e1381ab79d513e7ddd2deecdd386\n\ninput_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7685781773b0>\n\n\n\ninput_dict_87f4e1381ab79d513e7ddd2deecdd386->0_9ec2b766eb40591013f27b281c10fdf6\n\n\n\n\n\ninput_dict_87f4e1381ab79d513e7ddd2deecdd386->0_2ee29abc84e19e2a89c493d954bca047\n\n\n\n\n\nstructure_24283480cde4a82cb11a95ad8315004b\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x7685781770b0>\n\n\n\nstructure_24283480cde4a82cb11a95ad8315004b->input_dict_87f4e1381ab79d513e7ddd2deecdd386\n\n\n\n\n\nstructure_199228a058c6c2abd4059cca704f33e6\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x7685780d7170>\n\n\n\nstructure_199228a058c6c2abd4059cca704f33e6->structure_24283480cde4a82cb11a95ad8315004b\n\n\n\n\n\nstructure_02eea1a3dae4b8a2111c575ca7b757e4\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176db0>\n\n\n\nstructure_199228a058c6c2abd4059cca704f33e6->structure_02eea1a3dae4b8a2111c575ca7b757e4\n\n\n\n\n\nstructure_f70fbf61dbacde3f86dbc99a31f544d6\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176a80>\n\n\n\nstructure_199228a058c6c2abd4059cca704f33e6->structure_f70fbf61dbacde3f86dbc99a31f544d6\n\n\n\n\n\nstructure_5bb5ba75f27ad166411ec7f96a67d795\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176750>\n\n\n\nstructure_199228a058c6c2abd4059cca704f33e6->structure_5bb5ba75f27ad166411ec7f96a67d795\n\n\n\n\n\nstructure_2a68a68e8c70db7870ac8e42f8b1865d\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x768578176420>\n\n\n\nstructure_199228a058c6c2abd4059cca704f33e6->structure_2a68a68e8c70db7870ac8e42f8b1865d\n\n\n\n\n\ninput_dict_adda488913baad1684ada5811fc1bf07\n\ninput_dict=<pyiron_base.project.delayed.DelayedObject object at 0x768578177020>\n\n\n\nstructure_02eea1a3dae4b8a2111c575ca7b757e4->input_dict_adda488913baad1684ada5811fc1bf07\n\n\n\n\n\ninput_dict_d5e1009e9a3698a7a581d7920d3308ba\n\ninput_dict=<pyiron_base.project.delayed.DelayedObject object at 0x768578176d20>\n\n\n\nstructure_f70fbf61dbacde3f86dbc99a31f544d6->input_dict_d5e1009e9a3698a7a581d7920d3308ba\n\n\n\n\n\ninput_dict_e4951879c0adfc1ee95c3f213d3670aa\n\ninput_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7685781769f0>\n\n\n\nstructure_5bb5ba75f27ad166411ec7f96a67d795->input_dict_e4951879c0adfc1ee95c3f213d3670aa\n\n\n\n\n\ninput_dict_a404d97e273a3ac600efe8c07b153592\n\ninput_dict=<pyiron_base.project.delayed.DelayedObject object at 0x7685781766c0>\n\n\n\nstructure_2a68a68e8c70db7870ac8e42f8b1865d->input_dict_a404d97e273a3ac600efe8c07b153592\n\n\n\n\n\nworking_directory_a17ade9a563d8dcadb655fb2e1c743a7\n\nworking_directory=mini\n\n\n\nworking_directory_a17ade9a563d8dcadb655fb2e1c743a7->structure_199228a058c6c2abd4059cca704f33e6\n\n\n\n\n\ninput_dict_537467c3235749e6bbce7787ac63fcf2\n\ninput_dict=<pyiron_base.project.delayed.DelayedObject object at 0x768578175910>\n\n\n\ninput_dict_537467c3235749e6bbce7787ac63fcf2->structure_199228a058c6c2abd4059cca704f33e6\n\n\n\n\n\nstructure_1143d046335e4294dac52196bc2767db\n\nstructure=<pyiron_base.project.delayed.DelayedObject object at 0x768578175b50>\n\n\n\nstructure_1143d046335e4294dac52196bc2767db->input_dict_537467c3235749e6bbce7787ac63fcf2\n\n\n\n\n\nelement_467734216d9bd2497ffd28d5cd6daba0\n\nelement=Al\n\n\n\nelement_467734216d9bd2497ffd28d5cd6daba0->structure_1143d046335e4294dac52196bc2767db\n\n\n\n\n\na_aea0574e321c6f75f923c059730e9537\n\na=4.05\n\n\n\na_aea0574e321c6f75f923c059730e9537->structure_1143d046335e4294dac52196bc2767db\n\n\n\n\n\ncubic_bad787c53fa02a5559fe570238fdb23a\n\ncubic=True\n\n\n\ncubic_bad787c53fa02a5559fe570238fdb23a->structure_1143d046335e4294dac52196bc2767db\n\n\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10\n\npseudopotentials={'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'}\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_87f4e1381ab79d513e7ddd2deecdd386\n\n\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_537467c3235749e6bbce7787ac63fcf2\n\n\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_adda488913baad1684ada5811fc1bf07\n\n\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_d5e1009e9a3698a7a581d7920d3308ba\n\n\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_e4951879c0adfc1ee95c3f213d3670aa\n\n\n\n\n\npseudopotentials_453cdcc0d627a851e196cd899d956d10->input_dict_a404d97e273a3ac600efe8c07b153592\n\n\n\n\n\n1_191bdde6d29a8110f9185c2dc2f36d40\n\n1=<pyiron_base.project.delayed.DelayedObject object at 0x768578176210>\n\n\n\ninput_dict_adda488913baad1684ada5811fc1bf07->1_191bdde6d29a8110f9185c2dc2f36d40\n\n\n\n\n\n1_4fc4ea22f90e9c5395aebcd832723a0b\n\n1=<pyiron_base.project.delayed.DelayedObject object at 0x768578177740>\n\n\n\ninput_dict_adda488913baad1684ada5811fc1bf07->1_4fc4ea22f90e9c5395aebcd832723a0b\n\n\n\n\n\n2_19f8c443d3f233fce65b180b8671f9d3\n\n2=<pyiron_base.project.delayed.DelayedObject object at 0x768578176810>\n\n\n\ninput_dict_d5e1009e9a3698a7a581d7920d3308ba->2_19f8c443d3f233fce65b180b8671f9d3\n\n\n\n\n\n2_a91f85ab07dda5e77e64539693175399\n\n2=<pyiron_base.project.delayed.DelayedObject object at 0x7685781771a0>\n\n\n\ninput_dict_d5e1009e9a3698a7a581d7920d3308ba->2_a91f85ab07dda5e77e64539693175399\n\n\n\n\n\n3_3ede2f537cf839143078e1512ff2ef2f\n\n3=<pyiron_base.project.delayed.DelayedObject object at 0x7685781759d0>\n\n\n\ninput_dict_e4951879c0adfc1ee95c3f213d3670aa->3_3ede2f537cf839143078e1512ff2ef2f\n\n\n\n\n\n3_5d8eeb1260eb131e15c0788d790e6449\n\n3=<pyiron_base.project.delayed.DelayedObject object at 0x768578176ed0>\n\n\n\ninput_dict_e4951879c0adfc1ee95c3f213d3670aa->3_5d8eeb1260eb131e15c0788d790e6449\n\n\n\n\n\n4_25a83d640c1b83e1d1be6ab4ab2fe22d\n\n4=<pyiron_base.project.delayed.DelayedObject object at 0x768578177c50>\n\n\n\ninput_dict_a404d97e273a3ac600efe8c07b153592->4_25a83d640c1b83e1d1be6ab4ab2fe22d\n\n\n\n\n\n4_24178a0d53ab74cdcd2d82759a89311b\n\n4=<pyiron_base.project.delayed.DelayedObject object at 0x768578177140>\n\n\n\ninput_dict_a404d97e273a3ac600efe8c07b153592->4_24178a0d53ab74cdcd2d82759a89311b\n\n\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa\n\nkpts=[3, 3, 3]\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_87f4e1381ab79d513e7ddd2deecdd386\n\n\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_537467c3235749e6bbce7787ac63fcf2\n\n\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_adda488913baad1684ada5811fc1bf07\n\n\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_d5e1009e9a3698a7a581d7920d3308ba\n\n\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_e4951879c0adfc1ee95c3f213d3670aa\n\n\n\n\n\nkpts_e961a9390797b0f6f8887a402ea3e9aa->input_dict_a404d97e273a3ac600efe8c07b153592\n\n\n\n\n\ncalculation_77b75a01e65d83962d14fa8a882d6c34\n\ncalculation=vc-relax\n\n\n\ncalculation_77b75a01e65d83962d14fa8a882d6c34->input_dict_537467c3235749e6bbce7787ac63fcf2\n\n\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9\n\nsmearing=0.02\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_87f4e1381ab79d513e7ddd2deecdd386\n\n\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_537467c3235749e6bbce7787ac63fcf2\n\n\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_adda488913baad1684ada5811fc1bf07\n\n\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_d5e1009e9a3698a7a581d7920d3308ba\n\n\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_e4951879c0adfc1ee95c3f213d3670aa\n\n\n\n\n\nsmearing_64a632a7e5bfbb7d0c6face9b82082a9->input_dict_a404d97e273a3ac600efe8c07b153592\n\n\n\n\n\nstrain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781\n\nstrain_lst=[0.9, 0.95, 1.0, 1.05, 1.1]\n\n\n\nstrain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_24283480cde4a82cb11a95ad8315004b\n\n\n\n\n\nstrain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_02eea1a3dae4b8a2111c575ca7b757e4\n\n\n\n\n\nstrain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_f70fbf61dbacde3f86dbc99a31f544d6\n\n\n\n\n\nstrain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_5bb5ba75f27ad166411ec7f96a67d795\n\n\n\n\n\nstrain_lst_2d8c38dac8f1aeeeecfa3c0b1cc8a781->structure_2a68a68e8c70db7870ac8e42f8b1865d\n\n\n\n\n\ncalculation_bc91e0ce7227762f507f47b85f2f0a83\n\ncalculation=scf\n\n\n\ncalculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_87f4e1381ab79d513e7ddd2deecdd386\n\n\n\n\n\ncalculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_adda488913baad1684ada5811fc1bf07\n\n\n\n\n\ncalculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_d5e1009e9a3698a7a581d7920d3308ba\n\n\n\n\n\ncalculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_e4951879c0adfc1ee95c3f213d3670aa\n\n\n\n\n\ncalculation_bc91e0ce7227762f507f47b85f2f0a83->input_dict_a404d97e273a3ac600efe8c07b153592\n\n\n\n\n\n1_191bdde6d29a8110f9185c2dc2f36d40->volume_lst_9ecc37695722ff26a909e7df66fad761\n\n\n\n\n\nworking_directory_5423d2cc67129a6d0383af6f347df5bd\n\nworking_directory=strain_1\n\n\n\nworking_directory_5423d2cc67129a6d0383af6f347df5bd->1_191bdde6d29a8110f9185c2dc2f36d40\n\n\n\n\n\nworking_directory_5423d2cc67129a6d0383af6f347df5bd->1_4fc4ea22f90e9c5395aebcd832723a0b\n\n\n\n\n\n1_4fc4ea22f90e9c5395aebcd832723a0b->energy_lst_d41078de6fda3484043c8f3407845d97\n\n\n\n\n\n2_19f8c443d3f233fce65b180b8671f9d3->volume_lst_9ecc37695722ff26a909e7df66fad761\n\n\n\n\n\nworking_directory_cc646e064ddfc4b2811aba3d86d27992\n\nworking_directory=strain_2\n\n\n\nworking_directory_cc646e064ddfc4b2811aba3d86d27992->2_19f8c443d3f233fce65b180b8671f9d3\n\n\n\n\n\nworking_directory_cc646e064ddfc4b2811aba3d86d27992->2_a91f85ab07dda5e77e64539693175399\n\n\n\n\n\n2_a91f85ab07dda5e77e64539693175399->energy_lst_d41078de6fda3484043c8f3407845d97\n\n\n\n\n\n3_3ede2f537cf839143078e1512ff2ef2f->volume_lst_9ecc37695722ff26a909e7df66fad761\n\n\n\n\n\nworking_directory_e27768d53df6cd8dc245c52054ecf31f\n\nworking_directory=strain_3\n\n\n\nworking_directory_e27768d53df6cd8dc245c52054ecf31f->3_3ede2f537cf839143078e1512ff2ef2f\n\n\n\n\n\nworking_directory_e27768d53df6cd8dc245c52054ecf31f->3_5d8eeb1260eb131e15c0788d790e6449\n\n\n\n\n\n3_5d8eeb1260eb131e15c0788d790e6449->energy_lst_d41078de6fda3484043c8f3407845d97\n\n\n\n\n\n4_25a83d640c1b83e1d1be6ab4ab2fe22d->volume_lst_9ecc37695722ff26a909e7df66fad761\n\n\n\n\n\nworking_directory_72bba39b22d2b7ce154d37c7e8c658b7\n\nworking_directory=strain_4\n\n\n\nworking_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_25a83d640c1b83e1d1be6ab4ab2fe22d\n\n\n\n\n\nworking_directory_72bba39b22d2b7ce154d37c7e8c658b7->4_24178a0d53ab74cdcd2d82759a89311b\n\n\n\n\n\n4_24178a0d53ab74cdcd2d82759a89311b->energy_lst_d41078de6fda3484043c8f3407845d97\n\n\n\n\n\nenergy_lst_d41078de6fda3484043c8f3407845d97->create_function_job_9adf79b116ef7d1bd6234b8bd3fb8790\n\n\n\n\n" + }, + "metadata": {} + } + ], + "execution_count": 16 + }, + { + "cell_type": "code", + "source": "delayed_object_lst[-1].pull()", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_bulk_structure_2ca4aeae204ceaa28593c93054b07908 was saved and received the ID: 1\nThe job get_dict_1e47509b88d63a21fd421686554c8f4a was saved and received the ID: 2\nThe job calculate_qe_411e578f2700d09ba2df9a4c682b4582 was saved and received the ID: 3\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12175] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "The job generate_structures_29f44e1952b8f5678d84a2b016899fce was saved and received the ID: 4\nThe job get_dict_ef87933d61756398c7394b1132327107 was saved and received the ID: 5\nThe job calculate_qe_7a90048d1de9ecbd9a0d65912ce16a05 was saved and received the ID: 6\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12194] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_dict_8df97e882e2a6b51191dddf174e87731 was saved and received the ID: 7\nThe job calculate_qe_78019c29f3a9ab2782b972a871cf7b97 was saved and received the ID: 8\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12205] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_dict_be1c027670e9498836f67834851d04cc was saved and received the ID: 9\nThe job calculate_qe_aaa66ba36e55a9cc577037576b1e6ccb was saved and received the ID: 10\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12216] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_dict_52b5c75d597a1c4b528615e1125a0896 was saved and received the ID: 11\nThe job calculate_qe_62d76f231acf9ea944e9c695277ff831 was saved and received the ID: 12\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12227] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_dict_1c3ed4191b35cf54ac773bb8172f6947 was saved and received the ID: 13\nThe job calculate_qe_2589d637ad774f38e26fdd2b4529fcca was saved and received the ID: 14\n" + }, + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12237] 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" + }, + { + "name": "stdout", + "output_type": "stream", + "text": "The job get_list_274bff6e81bec86553cdd07a055e2b5e was saved and received the ID: 15\nThe job get_list_4457d79d3504f678b6f74963dd8f0e4c was saved and received the ID: 16\nThe job plot_energy_volume_curve_33e1f4fbca145ac4d2a72d20544cad9d 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=" + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Load Workflow with pyiron_workflow\n\nThe graph is loaded into a `pyiron_workflow` `Workflow`, drawn with `.draw()`, and executed with `.run()`." + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "from python_workflow_definition.pyiron_workflow import load_workflow_json" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf = load_workflow_json(file_name=\"workflow.json\")" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.draw(size=(10,10))" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "wf.run()" + }, + { + "cell_type": "markdown", + "source": "## Python\n\n`python_workflow_definition.purepython.load_workflow_json` is a minimal reference implementation with no external workflow engine: it topologically sorts the nodes by their edges and calls each function directly in plain Python, returning the final result.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from python_workflow_definition.purepython import load_workflow_json", + "metadata": { + "trusted": true + }, + "outputs": [], + "execution_count": 18 + }, + { + "cell_type": "code", + "source": "load_workflow_json(file_name=\"workflow.json\")", + "metadata": { + "trusted": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": "[jupyter-pythonworkflow-fl--x---d7231032:12248] 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[jupyter-pythonworkflow-fl--x---d7231032:12262] 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[jupyter-pythonworkflow-fl--x---d7231032:12277] 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[jupyter-pythonworkflow-fl--x---d7231032:12289] 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[jupyter-pythonworkflow-fl--x---d7231032:12299] 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[jupyter-pythonworkflow-fl--x---d7231032:12309] 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" + }, + { + "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=" + }, + "metadata": {} + } + ], + "execution_count": 19 + } + ] +} \ No newline at end of file diff --git a/_sources/intro.md b/_sources/intro.md new file mode 100644 index 00000000..4ad92284 --- /dev/null +++ b/_sources/intro.md @@ -0,0 +1,24 @@ +# Definition +In the Python Workflow Definition (PWD) each node represents a Python function, with the edges defining the connection +between input and output of the different Python functions. + +## Format +Each workflow consists of three files, a Python module which defines the individual Pythons, a JSON file which defines +the connections between the different Python functions and a conda environment file to define the software dependencies. +The files are not intended to be human readable, but rather interact as a machine readable exchange format between the +different workflow engines to enable interoperability. + +## Workflow Engines +Currently supported workflow engines: +* [aiida-workgraph](https://github.com/aiidateam/aiida-workgraph) +* [jobflow](https://github.com/materialsproject/jobflow) +* [pyiron_base](https://github.com/pyiron/pyiron_base) +* [pyiron_workflow](https://github.com/pyiron/pyiron_workflow) +* [executorlib](https://github.com/pyiron/executorlib) +* [CWL](https://www.commonwl.org/) via [cwltool](https://github.com/common-workflow-language/cwltool) + +## Example Workflows +Three workflows are implemented: +* Simple workflow coupling two python functions +* Calculation of an [energy volume curve with quantum espresso](https://materialdigital.github.io/ADIS2023/) +* File based workflow benchmark from [NFDI4Ing](https://www.inggrid.org/article/id/3726/) diff --git a/_sources/nfdi.md b/_sources/nfdi.md new file mode 100644 index 00000000..1fa6a863 --- /dev/null +++ b/_sources/nfdi.md @@ -0,0 +1,61 @@ +# NFDI4Ing Benchmark +To demonstrate the compatibility of the Python Workflow Definition to file based workflows, the workflow benchmark +developed as part of [NFDI4Ing](https://www.inggrid.org/article/id/3726/) is implemented for all workflow engines +based on the Python Workflow Definition. + +## Workflow +Unlike the [arithmetic](arithmetic.md) and energy-volume-curve examples, which pass Python objects between functions, +this benchmark chains together external command line tools that each require their own conda environment (defined in +`source/envs/*.yaml`) and communicate through files rather than in-memory values. The +pipeline is defined by six Python functions in [workflow.py](example_workflows/nfdi/workflow.py), each of which +copies its inputs into a stage-specific subdirectory (`preprocessing`, `processing` or `postprocessing`) and calls +its external tool with `conda_subprocess.check_output`: +```python +def generate_mesh(domain_size: float, source_directory: str) -> str: ... +def convert_to_xdmf(gmsh_output_file: str) -> dict: ... +def poisson(meshio_output_xdmf: str, meshio_output_h5: str, source_directory: str) -> dict: ... +def plot_over_line(poisson_output_pvd_file: str, poisson_output_vtu_file: str, source_directory: str) -> str: ... +def substitute_macros(pvbatch_output_file: str, ndofs: int, domain_size: float, source_directory: str) -> str: ... +def compile_paper(macros_tex: str, plot_file: str, source_directory: str) -> str: ... +``` +* `generate_mesh` runs [`gmsh`](https://gmsh.info) on `unit_square.geo` to mesh a 2D square whose side length is set + by the `domain_size` parameter, producing a `.msh` file. +* `convert_to_xdmf` runs `meshio convert` to turn the gmsh mesh into an XDMF/H5 file pair that the FEM solver can read. +* `poisson` runs a [FEniCS](https://fenicsproject.org)-based `poisson.py` script that solves the Poisson equation on + the mesh, returning the number of degrees of freedom (`numdofs`) alongside the `.pvd`/`.vtu` result files. +* `plot_over_line` runs ParaView's `pvbatch` with `postprocessing.py` to sample the FEM solution along a line and + write it out as a CSV file. +* `substitute_macros` runs `prepare_paper_macros.py` to fill a LaTeX macro template with the plot data path, the + domain size and the number of degrees of freedom. +* `compile_paper` runs [`tectonic`](https://tectonic-typesetting.github.io) to compile `paper.tex`, which references + those macros and the plot, into `paper.pdf`. + +The connection of these Python functions is stored in the [workflow.json](example_workflows/nfdi/workflow.json) +JSON file, following the same `nodes`/`edges` structure as the other examples. Each function is a `function` node, +`domain_size` and `source_directory` are `input` nodes, and edges connect a function's input port either to another +function's output port or directly to an input node: +``` +{ + "version": "0.1.0", + "nodes": [ + {"id": 0, "type": "function", "value": "workflow.generate_mesh"}, + {"id": 1, "type": "function", "value": "workflow.convert_to_xdmf"}, + {"id": 6, "type": "input", "value": 2.0, "name": "domain_size"}, + {"id": 7, "type": "input", "value": "source", "name": "source_directory"}, + {"id": 8, "type": "output", "name": "result"} + ], + "edges": [ + {"target": 0, "targetPort": "domain_size", "source": 6, "sourcePort": null}, + {"target": 0, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 1, "targetPort": "gmsh_output_file", "source": 0, "sourcePort": null} + ] +} +``` +Since `convert_to_xdmf` and `poisson` return a `dict` instead of a single value, the edges that read their output +set `sourcePort` to the specific dictionary key (e.g. `"xdmf_file"` or `"numdofs"`) rather than `null`. + +Because every stage shells out to a different external tool in a different conda environment and passes file paths +along the graph, this benchmark exercises a different part of the Python Workflow Definition than the arithmetic and +energy-volume-curve examples: it shows that the same `workflow.json` produced by one engine can be handed to another +engine, an execution manager like [CWL](https://www.commonwl.org)/`cwltool`, or plain Python, and still reproduce the +same chain of `gmsh`, `meshio`, FEniCS, `pvbatch` and `tectonic` calls end to end. diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000..b25bd6a4 --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_sphinx_design_static/sphinx-design.min.css b/_sphinx_design_static/sphinx-design.min.css new file mode 100644 index 00000000..860c36da --- /dev/null +++ b/_sphinx_design_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..f316efcb --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 00000000..2ea7ff3e --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 00000000..b25bd6a4 --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..4d67807d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..dab586c0 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/images/logo_binder.svg b/_static/images/logo_binder.svg new file mode 100644 index 00000000..45fecf75 --- /dev/null +++ b/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/_static/images/logo_colab.png b/_static/images/logo_colab.png new file mode 100644 index 00000000..b7560ec2 Binary files /dev/null and b/_static/images/logo_colab.png differ diff --git a/_static/images/logo_deepnote.svg b/_static/images/logo_deepnote.svg new file mode 100644 index 00000000..fa77ebfc --- /dev/null +++ b/_static/images/logo_deepnote.svg @@ -0,0 +1 @@ + diff --git a/_static/images/logo_jupyterhub.svg b/_static/images/logo_jupyterhub.svg new file mode 100644 index 00000000..60cfe9f2 --- /dev/null +++ b/_static/images/logo_jupyterhub.svg @@ -0,0 +1 @@ +logo_jupyterhubHub diff --git a/_static/images/logo_jupyterlite.svg b/_static/images/logo_jupyterlite.svg new file mode 100644 index 00000000..09e821f6 --- /dev/null +++ b/_static/images/logo_jupyterlite.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..367b8ed8 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/locales/ar/LC_MESSAGES/booktheme.mo b/_static/locales/ar/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..15541a6a Binary files /dev/null and b/_static/locales/ar/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ar/LC_MESSAGES/booktheme.po b/_static/locales/ar/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..066f20f9 --- /dev/null +++ b/_static/locales/ar/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "بواسطة" + +msgid "By" +msgstr "بواسطة" + +msgid "Contents" +msgstr "محتويات" + +msgid "Copyright" +msgstr "حقوق النشر" + +msgid "Download notebook file" +msgstr "تنزيل ملف دفتر الملاحظات" + +msgid "Download source file" +msgstr "تنزيل ملف المصدر" + +msgid "Download this page" +msgstr "قم بتنزيل هذه الصفحة" + +msgid "Edit this page" +msgstr "قم بتحرير هذه الصفحة" + +msgid "Fullscreen mode" +msgstr "وضع ملء الشاشة" + +msgid "Last updated on" +msgstr "آخر تحديث في" + +msgid "Launch" +msgstr "إطلاق" + +msgid "Open an issue" +msgstr "افتح قضية" + +msgid "Print to PDF" +msgstr "طباعة إلى PDF" + +msgid "Source repository" +msgstr "مستودع المصدر" + +msgid "Sphinx Book Theme" +msgstr "موضوع كتاب أبو الهول" + +msgid "Theme by the" +msgstr "موضوع بواسطة" + +msgid "Toggle navigation" +msgstr "تبديل التنقل" + +msgid "next page" +msgstr "الصفحة التالية" + +msgid "open issue" +msgstr "قضية مفتوحة" + +msgid "previous page" +msgstr "الصفحة السابقة" + +msgid "repository" +msgstr "مخزن" + +msgid "suggest edit" +msgstr "أقترح تحرير" diff --git a/_static/locales/bg/LC_MESSAGES/booktheme.mo b/_static/locales/bg/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..da951200 Binary files /dev/null and b/_static/locales/bg/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/bg/LC_MESSAGES/booktheme.po b/_static/locales/bg/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..0f22f49a --- /dev/null +++ b/_static/locales/bg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "По" + +msgid "By" +msgstr "От" + +msgid "Contents" +msgstr "Съдържание" + +msgid "Copyright" +msgstr "Авторско право" + +msgid "Download notebook file" +msgstr "Изтеглете файла на бележника" + +msgid "Download source file" +msgstr "Изтеглете изходния файл" + +msgid "Download this page" +msgstr "Изтеглете тази страница" + +msgid "Edit this page" +msgstr "Редактирайте тази страница" + +msgid "Fullscreen mode" +msgstr "Режим на цял екран" + +msgid "Last updated on" +msgstr "Последна актуализация на" + +msgid "Launch" +msgstr "Стартиране" + +msgid "Open an issue" +msgstr "Отворете проблем" + +msgid "Print to PDF" +msgstr "Печат в PDF" + +msgid "Source repository" +msgstr "Хранилище на източника" + +msgid "Sphinx Book Theme" +msgstr "Тема на книгата Sphinx" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Toggle navigation" +msgstr "Превключване на навигацията" + +msgid "next page" +msgstr "Следваща страница" + +msgid "open issue" +msgstr "отворен брой" + +msgid "previous page" +msgstr "предишна страница" + +msgid "repository" +msgstr "хранилище" + +msgid "suggest edit" +msgstr "предложи редактиране" diff --git a/_static/locales/bn/LC_MESSAGES/booktheme.mo b/_static/locales/bn/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..6b96639b Binary files /dev/null and b/_static/locales/bn/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/bn/LC_MESSAGES/booktheme.po b/_static/locales/bn/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..7202a5f3 --- /dev/null +++ b/_static/locales/bn/LC_MESSAGES/booktheme.po @@ -0,0 +1,63 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "দ্বারা" + +msgid "By" +msgstr "দ্বারা" + +msgid "Copyright" +msgstr "কপিরাইট" + +msgid "Download notebook file" +msgstr "নোটবুক ফাইল ডাউনলোড করুন" + +msgid "Download source file" +msgstr "উত্স ফাইল ডাউনলোড করুন" + +msgid "Download this page" +msgstr "এই পৃষ্ঠাটি ডাউনলোড করুন" + +msgid "Edit this page" +msgstr "এই পৃষ্ঠাটি সম্পাদনা করুন" + +msgid "Last updated on" +msgstr "সর্বশেষ আপডেট" + +msgid "Launch" +msgstr "শুরু করা" + +msgid "Open an issue" +msgstr "একটি সমস্যা খুলুন" + +msgid "Print to PDF" +msgstr "পিডিএফ প্রিন্ট করুন" + +msgid "Source repository" +msgstr "উত্স সংগ্রহস্থল" + +msgid "Sphinx Book Theme" +msgstr "স্পিনিক্স বুক থিম" + +msgid "Theme by the" +msgstr "থিম দ্বারা" + +msgid "Toggle navigation" +msgstr "নেভিগেশন টগল করুন" + +msgid "next page" +msgstr "পরবর্তী পৃষ্ঠা" + +msgid "open issue" +msgstr "খোলা সমস্যা" + +msgid "previous page" +msgstr "আগের পৃষ্ঠা" diff --git a/_static/locales/ca/LC_MESSAGES/booktheme.mo b/_static/locales/ca/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..a4dd30e9 Binary files /dev/null and b/_static/locales/ca/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ca/LC_MESSAGES/booktheme.po b/_static/locales/ca/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..a325041f --- /dev/null +++ b/_static/locales/ca/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Per la" + +msgid "By" +msgstr "Per" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download notebook file" +msgstr "Descarregar fitxer de quadern" + +msgid "Download source file" +msgstr "Baixeu el fitxer font" + +msgid "Download this page" +msgstr "Descarregueu aquesta pàgina" + +msgid "Edit this page" +msgstr "Editeu aquesta pàgina" + +msgid "Last updated on" +msgstr "Darrera actualització el" + +msgid "Launch" +msgstr "Llançament" + +msgid "Open an issue" +msgstr "Obriu un número" + +msgid "Print to PDF" +msgstr "Imprimeix a PDF" + +msgid "Source repository" +msgstr "Dipòsit de fonts" + +msgid "Sphinx Book Theme" +msgstr "Tema del llibre Esfinx" + +msgid "Theme by the" +msgstr "Tema del" + +msgid "Toggle navigation" +msgstr "Commuta la navegació" + +msgid "next page" +msgstr "pàgina següent" + +msgid "open issue" +msgstr "número obert" + +msgid "previous page" +msgstr "Pàgina anterior" + +msgid "suggest edit" +msgstr "suggerir edició" diff --git a/_static/locales/cs/LC_MESSAGES/booktheme.mo b/_static/locales/cs/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..c39e01a6 Binary files /dev/null and b/_static/locales/cs/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/cs/LC_MESSAGES/booktheme.po b/_static/locales/cs/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..97e52e8a --- /dev/null +++ b/_static/locales/cs/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Podle" + +msgid "By" +msgstr "Podle" + +msgid "Contents" +msgstr "Obsah" + +msgid "Copyright" +msgstr "autorská práva" + +msgid "Download notebook file" +msgstr "Stáhnout soubor poznámkového bloku" + +msgid "Download source file" +msgstr "Stáhněte si zdrojový soubor" + +msgid "Download this page" +msgstr "Stáhněte si tuto stránku" + +msgid "Edit this page" +msgstr "Upravit tuto stránku" + +msgid "Fullscreen mode" +msgstr "Režim celé obrazovky" + +msgid "Last updated on" +msgstr "Naposledy aktualizováno" + +msgid "Launch" +msgstr "Zahájení" + +msgid "Open an issue" +msgstr "Otevřete problém" + +msgid "Print to PDF" +msgstr "Tisk do PDF" + +msgid "Source repository" +msgstr "Zdrojové úložiště" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Toggle navigation" +msgstr "Přepnout navigaci" + +msgid "next page" +msgstr "další strana" + +msgid "open issue" +msgstr "otevřené číslo" + +msgid "previous page" +msgstr "předchozí stránka" + +msgid "repository" +msgstr "úložiště" + +msgid "suggest edit" +msgstr "navrhnout úpravy" diff --git a/_static/locales/da/LC_MESSAGES/booktheme.mo b/_static/locales/da/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..f43157d7 Binary files /dev/null and b/_static/locales/da/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/da/LC_MESSAGES/booktheme.po b/_static/locales/da/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..084b4e57 --- /dev/null +++ b/_static/locales/da/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Ved" + +msgid "By" +msgstr "Ved" + +msgid "Contents" +msgstr "Indhold" + +msgid "Copyright" +msgstr "ophavsret" + +msgid "Download notebook file" +msgstr "Download notesbog-fil" + +msgid "Download source file" +msgstr "Download kildefil" + +msgid "Download this page" +msgstr "Download denne side" + +msgid "Edit this page" +msgstr "Rediger denne side" + +msgid "Fullscreen mode" +msgstr "Fuldskærmstilstand" + +msgid "Last updated on" +msgstr "Sidst opdateret den" + +msgid "Launch" +msgstr "Start" + +msgid "Open an issue" +msgstr "Åbn et problem" + +msgid "Print to PDF" +msgstr "Udskriv til PDF" + +msgid "Source repository" +msgstr "Kildelager" + +msgid "Sphinx Book Theme" +msgstr "Sphinx bogtema" + +msgid "Theme by the" +msgstr "Tema af" + +msgid "Toggle navigation" +msgstr "Skift navigation" + +msgid "next page" +msgstr "Næste side" + +msgid "open issue" +msgstr "åbent nummer" + +msgid "previous page" +msgstr "forrige side" + +msgid "repository" +msgstr "lager" + +msgid "suggest edit" +msgstr "foreslå redigering" diff --git a/_static/locales/de/LC_MESSAGES/booktheme.mo b/_static/locales/de/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..648b565c Binary files /dev/null and b/_static/locales/de/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/de/LC_MESSAGES/booktheme.po b/_static/locales/de/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..1ed1dc16 --- /dev/null +++ b/_static/locales/de/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Bis zum" + +msgid "By" +msgstr "Durch" + +msgid "Contents" +msgstr "Inhalt" + +msgid "Copyright" +msgstr "Urheberrechte ©" + +msgid "Download notebook file" +msgstr "Notebook-Datei herunterladen" + +msgid "Download source file" +msgstr "Quelldatei herunterladen" + +msgid "Download this page" +msgstr "Laden Sie diese Seite herunter" + +msgid "Edit this page" +msgstr "Bearbeite diese Seite" + +msgid "Fullscreen mode" +msgstr "Vollbildmodus" + +msgid "Last updated on" +msgstr "Zuletzt aktualisiert am" + +msgid "Launch" +msgstr "Starten" + +msgid "Open an issue" +msgstr "Öffnen Sie ein Problem" + +msgid "Print to PDF" +msgstr "In PDF drucken" + +msgid "Source repository" +msgstr "Quell-Repository" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-Buch-Thema" + +msgid "Theme by the" +msgstr "Thema von der" + +msgid "Toggle navigation" +msgstr "Navigation umschalten" + +msgid "next page" +msgstr "Nächste Seite" + +msgid "open issue" +msgstr "offenes Thema" + +msgid "previous page" +msgstr "vorherige Seite" + +msgid "repository" +msgstr "Repository" + +msgid "suggest edit" +msgstr "vorschlagen zu bearbeiten" diff --git a/_static/locales/el/LC_MESSAGES/booktheme.mo b/_static/locales/el/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..fca6e935 Binary files /dev/null and b/_static/locales/el/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/el/LC_MESSAGES/booktheme.po b/_static/locales/el/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..27d1274a --- /dev/null +++ b/_static/locales/el/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Από το" + +msgid "By" +msgstr "Με" + +msgid "Contents" +msgstr "Περιεχόμενα" + +msgid "Copyright" +msgstr "Πνευματική ιδιοκτησία" + +msgid "Download notebook file" +msgstr "Λήψη αρχείου σημειωματάριου" + +msgid "Download source file" +msgstr "Λήψη αρχείου προέλευσης" + +msgid "Download this page" +msgstr "Λήψη αυτής της σελίδας" + +msgid "Edit this page" +msgstr "Επεξεργαστείτε αυτήν τη σελίδα" + +msgid "Fullscreen mode" +msgstr "ΛΕΙΤΟΥΡΓΙΑ ΠΛΗΡΟΥΣ ΟΘΟΝΗΣ" + +msgid "Last updated on" +msgstr "Τελευταία ενημέρωση στις" + +msgid "Launch" +msgstr "Εκτόξευση" + +msgid "Open an issue" +msgstr "Ανοίξτε ένα ζήτημα" + +msgid "Print to PDF" +msgstr "Εκτύπωση σε PDF" + +msgid "Source repository" +msgstr "Αποθήκη πηγής" + +msgid "Sphinx Book Theme" +msgstr "Θέμα βιβλίου Sphinx" + +msgid "Theme by the" +msgstr "Θέμα από το" + +msgid "Toggle navigation" +msgstr "Εναλλαγή πλοήγησης" + +msgid "next page" +msgstr "επόμενη σελίδα" + +msgid "open issue" +msgstr "ανοιχτό ζήτημα" + +msgid "previous page" +msgstr "προηγούμενη σελίδα" + +msgid "repository" +msgstr "αποθήκη" + +msgid "suggest edit" +msgstr "προτείνω επεξεργασία" diff --git a/_static/locales/eo/LC_MESSAGES/booktheme.mo b/_static/locales/eo/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..d1072bbe Binary files /dev/null and b/_static/locales/eo/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/eo/LC_MESSAGES/booktheme.po b/_static/locales/eo/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..1fda1bcd --- /dev/null +++ b/_static/locales/eo/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Per la" + +msgid "By" +msgstr "De" + +msgid "Contents" +msgstr "Enhavo" + +msgid "Copyright" +msgstr "Kopirajto" + +msgid "Download notebook file" +msgstr "Elŝutu kajeran dosieron" + +msgid "Download source file" +msgstr "Elŝutu fontodosieron" + +msgid "Download this page" +msgstr "Elŝutu ĉi tiun paĝon" + +msgid "Edit this page" +msgstr "Redaktu ĉi tiun paĝon" + +msgid "Fullscreen mode" +msgstr "Plenekrana reĝimo" + +msgid "Last updated on" +msgstr "Laste ĝisdatigita la" + +msgid "Launch" +msgstr "Lanĉo" + +msgid "Open an issue" +msgstr "Malfermu numeron" + +msgid "Print to PDF" +msgstr "Presi al PDF" + +msgid "Source repository" +msgstr "Fonto-deponejo" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa Libro-Temo" + +msgid "Theme by the" +msgstr "Temo de la" + +msgid "Toggle navigation" +msgstr "Ŝalti navigadon" + +msgid "next page" +msgstr "sekva paĝo" + +msgid "open issue" +msgstr "malferma numero" + +msgid "previous page" +msgstr "antaŭa paĝo" + +msgid "repository" +msgstr "deponejo" + +msgid "suggest edit" +msgstr "sugesti redaktadon" diff --git a/_static/locales/es/LC_MESSAGES/booktheme.mo b/_static/locales/es/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..ba2ee4dc Binary files /dev/null and b/_static/locales/es/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/es/LC_MESSAGES/booktheme.po b/_static/locales/es/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..c91b41b9 --- /dev/null +++ b/_static/locales/es/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Por el" + +msgid "By" +msgstr "Por" + +msgid "Contents" +msgstr "Contenido" + +msgid "Copyright" +msgstr "Derechos de autor" + +msgid "Download notebook file" +msgstr "Descargar archivo de cuaderno" + +msgid "Download source file" +msgstr "Descargar archivo fuente" + +msgid "Download this page" +msgstr "Descarga esta pagina" + +msgid "Edit this page" +msgstr "Edita esta página" + +msgid "Fullscreen mode" +msgstr "Modo de pantalla completa" + +msgid "Last updated on" +msgstr "Ultima actualización en" + +msgid "Launch" +msgstr "Lanzamiento" + +msgid "Open an issue" +msgstr "Abrir un problema" + +msgid "Print to PDF" +msgstr "Imprimir en PDF" + +msgid "Source repository" +msgstr "Repositorio de origen" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro de la esfinge" + +msgid "Theme by the" +msgstr "Tema por el" + +msgid "Toggle navigation" +msgstr "Navegación de palanca" + +msgid "next page" +msgstr "siguiente página" + +msgid "open issue" +msgstr "Tema abierto" + +msgid "previous page" +msgstr "pagina anterior" + +msgid "repository" +msgstr "repositorio" + +msgid "suggest edit" +msgstr "sugerir editar" diff --git a/_static/locales/et/LC_MESSAGES/booktheme.mo b/_static/locales/et/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..983b8239 Binary files /dev/null and b/_static/locales/et/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/et/LC_MESSAGES/booktheme.po b/_static/locales/et/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..2fd1ea20 --- /dev/null +++ b/_static/locales/et/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Autor" + +msgid "By" +msgstr "Kõrval" + +msgid "Contents" +msgstr "Sisu" + +msgid "Copyright" +msgstr "Autoriõigus" + +msgid "Download notebook file" +msgstr "Laadige sülearvuti fail alla" + +msgid "Download source file" +msgstr "Laadige alla lähtefail" + +msgid "Download this page" +msgstr "Laadige see leht alla" + +msgid "Edit this page" +msgstr "Muutke seda lehte" + +msgid "Fullscreen mode" +msgstr "Täisekraanirežiim" + +msgid "Last updated on" +msgstr "Viimati uuendatud" + +msgid "Launch" +msgstr "Käivitage" + +msgid "Open an issue" +msgstr "Avage probleem" + +msgid "Print to PDF" +msgstr "Prindi PDF-i" + +msgid "Source repository" +msgstr "Allikahoidla" + +msgid "Sphinx Book Theme" +msgstr "Sfinksiraamatu teema" + +msgid "Theme by the" +msgstr "Teema" + +msgid "Toggle navigation" +msgstr "Lülita navigeerimine sisse" + +msgid "next page" +msgstr "järgmine leht" + +msgid "open issue" +msgstr "avatud küsimus" + +msgid "previous page" +msgstr "eelmine leht" + +msgid "repository" +msgstr "hoidla" + +msgid "suggest edit" +msgstr "soovita muuta" diff --git a/_static/locales/fi/LC_MESSAGES/booktheme.mo b/_static/locales/fi/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..d8ac0545 Binary files /dev/null and b/_static/locales/fi/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/fi/LC_MESSAGES/booktheme.po b/_static/locales/fi/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..2843f2c7 --- /dev/null +++ b/_static/locales/fi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Mukaan" + +msgid "By" +msgstr "Tekijä" + +msgid "Contents" +msgstr "Sisällys" + +msgid "Copyright" +msgstr "Tekijänoikeus" + +msgid "Download notebook file" +msgstr "Lataa muistikirjatiedosto" + +msgid "Download source file" +msgstr "Lataa lähdetiedosto" + +msgid "Download this page" +msgstr "Lataa tämä sivu" + +msgid "Edit this page" +msgstr "Muokkaa tätä sivua" + +msgid "Fullscreen mode" +msgstr "Koko näytön tila" + +msgid "Last updated on" +msgstr "Viimeksi päivitetty" + +msgid "Launch" +msgstr "Tuoda markkinoille" + +msgid "Open an issue" +msgstr "Avaa ongelma" + +msgid "Print to PDF" +msgstr "Tulosta PDF-tiedostoon" + +msgid "Source repository" +msgstr "Lähteen arkisto" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-kirjan teema" + +msgid "Theme by the" +msgstr "Teeman tekijä" + +msgid "Toggle navigation" +msgstr "Vaihda navigointia" + +msgid "next page" +msgstr "seuraava sivu" + +msgid "open issue" +msgstr "avoin ongelma" + +msgid "previous page" +msgstr "Edellinen sivu" + +msgid "repository" +msgstr "arkisto" + +msgid "suggest edit" +msgstr "ehdottaa muokkausta" diff --git a/_static/locales/fr/LC_MESSAGES/booktheme.mo b/_static/locales/fr/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..f663d39f Binary files /dev/null and b/_static/locales/fr/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/fr/LC_MESSAGES/booktheme.po b/_static/locales/fr/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..351cddd6 --- /dev/null +++ b/_static/locales/fr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Par le" + +msgid "By" +msgstr "Par" + +msgid "Contents" +msgstr "Contenu" + +msgid "Copyright" +msgstr "droits d'auteur" + +msgid "Download notebook file" +msgstr "Télécharger le fichier notebook" + +msgid "Download source file" +msgstr "Télécharger le fichier source" + +msgid "Download this page" +msgstr "Téléchargez cette page" + +msgid "Edit this page" +msgstr "Modifier cette page" + +msgid "Fullscreen mode" +msgstr "Mode plein écran" + +msgid "Last updated on" +msgstr "Dernière mise à jour le" + +msgid "Launch" +msgstr "lancement" + +msgid "Open an issue" +msgstr "Ouvrez un problème" + +msgid "Print to PDF" +msgstr "Imprimer au format PDF" + +msgid "Source repository" +msgstr "Dépôt source" + +msgid "Sphinx Book Theme" +msgstr "Thème du livre Sphinx" + +msgid "Theme by the" +msgstr "Thème par le" + +msgid "Toggle navigation" +msgstr "Basculer la navigation" + +msgid "next page" +msgstr "page suivante" + +msgid "open issue" +msgstr "signaler un problème" + +msgid "previous page" +msgstr "page précédente" + +msgid "repository" +msgstr "dépôt" + +msgid "suggest edit" +msgstr "suggestion de modification" diff --git a/_static/locales/hr/LC_MESSAGES/booktheme.mo b/_static/locales/hr/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..eca4a1a2 Binary files /dev/null and b/_static/locales/hr/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/hr/LC_MESSAGES/booktheme.po b/_static/locales/hr/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..3c1cf079 --- /dev/null +++ b/_static/locales/hr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Od strane" + +msgid "By" +msgstr "Po" + +msgid "Contents" +msgstr "Sadržaj" + +msgid "Copyright" +msgstr "Autorska prava" + +msgid "Download notebook file" +msgstr "Preuzmi datoteku bilježnice" + +msgid "Download source file" +msgstr "Preuzmi izvornu datoteku" + +msgid "Download this page" +msgstr "Preuzmite ovu stranicu" + +msgid "Edit this page" +msgstr "Uredite ovu stranicu" + +msgid "Fullscreen mode" +msgstr "Način preko cijelog zaslona" + +msgid "Last updated on" +msgstr "Posljednje ažuriranje:" + +msgid "Launch" +msgstr "Pokrenite" + +msgid "Open an issue" +msgstr "Otvorite izdanje" + +msgid "Print to PDF" +msgstr "Ispis u PDF" + +msgid "Source repository" +msgstr "Izvorno spremište" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "Theme by the" +msgstr "Tema autora" + +msgid "Toggle navigation" +msgstr "Uključi / isključi navigaciju" + +msgid "next page" +msgstr "sljedeća stranica" + +msgid "open issue" +msgstr "otvoreno izdanje" + +msgid "previous page" +msgstr "Prethodna stranica" + +msgid "repository" +msgstr "spremište" + +msgid "suggest edit" +msgstr "predloži uređivanje" diff --git a/_static/locales/id/LC_MESSAGES/booktheme.mo b/_static/locales/id/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..d07a06a9 Binary files /dev/null and b/_static/locales/id/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/id/LC_MESSAGES/booktheme.po b/_static/locales/id/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..809498c7 --- /dev/null +++ b/_static/locales/id/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Oleh" + +msgid "By" +msgstr "Oleh" + +msgid "Contents" +msgstr "Isi" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Download notebook file" +msgstr "Unduh file notebook" + +msgid "Download source file" +msgstr "Unduh file sumber" + +msgid "Download this page" +msgstr "Unduh halaman ini" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "Fullscreen mode" +msgstr "Mode layar penuh" + +msgid "Last updated on" +msgstr "Terakhir diperbarui saat" + +msgid "Launch" +msgstr "Meluncurkan" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Toggle navigation" +msgstr "Alihkan navigasi" + +msgid "next page" +msgstr "halaman selanjutnya" + +msgid "open issue" +msgstr "masalah terbuka" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "repository" +msgstr "gudang" + +msgid "suggest edit" +msgstr "menyarankan edit" diff --git a/_static/locales/it/LC_MESSAGES/booktheme.mo b/_static/locales/it/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..53ba476e Binary files /dev/null and b/_static/locales/it/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/it/LC_MESSAGES/booktheme.po b/_static/locales/it/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..fbc8d03b --- /dev/null +++ b/_static/locales/it/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Dal" + +msgid "By" +msgstr "Di" + +msgid "Contents" +msgstr "Contenuti" + +msgid "Copyright" +msgstr "Diritto d'autore" + +msgid "Download notebook file" +msgstr "Scarica il file del taccuino" + +msgid "Download source file" +msgstr "Scarica il file sorgente" + +msgid "Download this page" +msgstr "Scarica questa pagina" + +msgid "Edit this page" +msgstr "Modifica questa pagina" + +msgid "Fullscreen mode" +msgstr "Modalità schermo intero" + +msgid "Last updated on" +msgstr "Ultimo aggiornamento il" + +msgid "Launch" +msgstr "Lanciare" + +msgid "Open an issue" +msgstr "Apri un problema" + +msgid "Print to PDF" +msgstr "Stampa in PDF" + +msgid "Source repository" +msgstr "Repository di origine" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro della Sfinge" + +msgid "Theme by the" +msgstr "Tema di" + +msgid "Toggle navigation" +msgstr "Attiva / disattiva la navigazione" + +msgid "next page" +msgstr "pagina successiva" + +msgid "open issue" +msgstr "questione aperta" + +msgid "previous page" +msgstr "pagina precedente" + +msgid "repository" +msgstr "repository" + +msgid "suggest edit" +msgstr "suggerisci modifica" diff --git a/_static/locales/iw/LC_MESSAGES/booktheme.mo b/_static/locales/iw/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..a45c6575 Binary files /dev/null and b/_static/locales/iw/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/iw/LC_MESSAGES/booktheme.po b/_static/locales/iw/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..a82f3512 --- /dev/null +++ b/_static/locales/iw/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: iw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "דרך" + +msgid "By" +msgstr "על ידי" + +msgid "Contents" +msgstr "תוכן" + +msgid "Copyright" +msgstr "זכויות יוצרים" + +msgid "Download notebook file" +msgstr "הורד קובץ מחברת" + +msgid "Download source file" +msgstr "הורד את קובץ המקור" + +msgid "Download this page" +msgstr "הורד דף זה" + +msgid "Edit this page" +msgstr "ערוך דף זה" + +msgid "Fullscreen mode" +msgstr "מצב מסך מלא" + +msgid "Last updated on" +msgstr "עודכן לאחרונה ב" + +msgid "Launch" +msgstr "לְהַשִׁיק" + +msgid "Open an issue" +msgstr "פתח גיליון" + +msgid "Print to PDF" +msgstr "הדפס לקובץ PDF" + +msgid "Source repository" +msgstr "מאגר המקורות" + +msgid "Sphinx Book Theme" +msgstr "נושא ספר ספינקס" + +msgid "Theme by the" +msgstr "נושא מאת" + +msgid "Toggle navigation" +msgstr "החלף ניווט" + +msgid "next page" +msgstr "עמוד הבא" + +msgid "open issue" +msgstr "בעיה פתוחה" + +msgid "previous page" +msgstr "עמוד קודם" + +msgid "repository" +msgstr "מאגר" + +msgid "suggest edit" +msgstr "מציע לערוך" diff --git a/_static/locales/ja/LC_MESSAGES/booktheme.mo b/_static/locales/ja/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..1cefd29c Binary files /dev/null and b/_static/locales/ja/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ja/LC_MESSAGES/booktheme.po b/_static/locales/ja/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..3caab09e --- /dev/null +++ b/_static/locales/ja/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "によって" + +msgid "By" +msgstr "著者" + +msgid "Contents" +msgstr "目次" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download notebook file" +msgstr "ノートブックファイルをダウンロード" + +msgid "Download source file" +msgstr "ソースファイルをダウンロード" + +msgid "Download this page" +msgstr "このページをダウンロード" + +msgid "Edit this page" +msgstr "このページを編集" + +msgid "Fullscreen mode" +msgstr "全画面モード" + +msgid "Last updated on" +msgstr "最終更新日" + +msgid "Launch" +msgstr "起動" + +msgid "Open an issue" +msgstr "問題を報告" + +msgid "Print to PDF" +msgstr "PDFに印刷" + +msgid "Source repository" +msgstr "ソースリポジトリ" + +msgid "Sphinx Book Theme" +msgstr "スフィンクスの本のテーマ" + +msgid "Theme by the" +msgstr "のテーマ" + +msgid "Toggle navigation" +msgstr "ナビゲーションを切り替え" + +msgid "next page" +msgstr "次のページ" + +msgid "open issue" +msgstr "未解決の問題" + +msgid "previous page" +msgstr "前のページ" + +msgid "repository" +msgstr "リポジトリ" + +msgid "suggest edit" +msgstr "編集を提案する" diff --git a/_static/locales/ko/LC_MESSAGES/booktheme.mo b/_static/locales/ko/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..06c7ec93 Binary files /dev/null and b/_static/locales/ko/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ko/LC_MESSAGES/booktheme.po b/_static/locales/ko/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..2db12a1b --- /dev/null +++ b/_static/locales/ko/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "에 의해" + +msgid "By" +msgstr "으로" + +msgid "Contents" +msgstr "내용" + +msgid "Copyright" +msgstr "저작권" + +msgid "Download notebook file" +msgstr "노트북 파일 다운로드" + +msgid "Download source file" +msgstr "소스 파일 다운로드" + +msgid "Download this page" +msgstr "이 페이지 다운로드" + +msgid "Edit this page" +msgstr "이 페이지 편집" + +msgid "Fullscreen mode" +msgstr "전체 화면으로보기" + +msgid "Last updated on" +msgstr "마지막 업데이트" + +msgid "Launch" +msgstr "시작하다" + +msgid "Open an issue" +msgstr "이슈 열기" + +msgid "Print to PDF" +msgstr "PDF로 인쇄" + +msgid "Source repository" +msgstr "소스 저장소" + +msgid "Sphinx Book Theme" +msgstr "스핑크스 도서 테마" + +msgid "Theme by the" +msgstr "테마별" + +msgid "Toggle navigation" +msgstr "탐색 전환" + +msgid "next page" +msgstr "다음 페이지" + +msgid "open issue" +msgstr "열린 문제" + +msgid "previous page" +msgstr "이전 페이지" + +msgid "repository" +msgstr "저장소" + +msgid "suggest edit" +msgstr "편집 제안" diff --git a/_static/locales/lt/LC_MESSAGES/booktheme.mo b/_static/locales/lt/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..4468ba04 Binary files /dev/null and b/_static/locales/lt/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/lt/LC_MESSAGES/booktheme.po b/_static/locales/lt/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..07b64680 --- /dev/null +++ b/_static/locales/lt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Prie" + +msgid "By" +msgstr "Iki" + +msgid "Contents" +msgstr "Turinys" + +msgid "Copyright" +msgstr "Autorių teisės" + +msgid "Download notebook file" +msgstr "Atsisiųsti nešiojamojo kompiuterio failą" + +msgid "Download source file" +msgstr "Atsisiųsti šaltinio failą" + +msgid "Download this page" +msgstr "Atsisiųskite šį puslapį" + +msgid "Edit this page" +msgstr "Redaguoti šį puslapį" + +msgid "Fullscreen mode" +msgstr "Pilno ekrano režimas" + +msgid "Last updated on" +msgstr "Paskutinį kartą atnaujinta" + +msgid "Launch" +msgstr "Paleiskite" + +msgid "Open an issue" +msgstr "Atidarykite problemą" + +msgid "Print to PDF" +msgstr "Spausdinti į PDF" + +msgid "Source repository" +msgstr "Šaltinio saugykla" + +msgid "Sphinx Book Theme" +msgstr "Sfinkso knygos tema" + +msgid "Theme by the" +msgstr "Tema" + +msgid "Toggle navigation" +msgstr "Perjungti naršymą" + +msgid "next page" +msgstr "Kitas puslapis" + +msgid "open issue" +msgstr "atviras klausimas" + +msgid "previous page" +msgstr "Ankstesnis puslapis" + +msgid "repository" +msgstr "saugykla" + +msgid "suggest edit" +msgstr "pasiūlyti redaguoti" diff --git a/_static/locales/lv/LC_MESSAGES/booktheme.mo b/_static/locales/lv/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..74aa4d89 Binary files /dev/null and b/_static/locales/lv/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/lv/LC_MESSAGES/booktheme.po b/_static/locales/lv/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..b741c289 --- /dev/null +++ b/_static/locales/lv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Ar" + +msgid "By" +msgstr "Autors" + +msgid "Contents" +msgstr "Saturs" + +msgid "Copyright" +msgstr "Autortiesības" + +msgid "Download notebook file" +msgstr "Lejupielādēt piezīmju grāmatiņu" + +msgid "Download source file" +msgstr "Lejupielādēt avota failu" + +msgid "Download this page" +msgstr "Lejupielādējiet šo lapu" + +msgid "Edit this page" +msgstr "Rediģēt šo lapu" + +msgid "Fullscreen mode" +msgstr "Pilnekrāna režīms" + +msgid "Last updated on" +msgstr "Pēdējoreiz atjaunināts" + +msgid "Launch" +msgstr "Uzsākt" + +msgid "Open an issue" +msgstr "Atveriet problēmu" + +msgid "Print to PDF" +msgstr "Drukāt PDF formātā" + +msgid "Source repository" +msgstr "Avota krātuve" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa grāmatas tēma" + +msgid "Theme by the" +msgstr "Autora tēma" + +msgid "Toggle navigation" +msgstr "Pārslēgt navigāciju" + +msgid "next page" +msgstr "nākamā lapaspuse" + +msgid "open issue" +msgstr "atklāts jautājums" + +msgid "previous page" +msgstr "iepriekšējā lapa" + +msgid "repository" +msgstr "krātuve" + +msgid "suggest edit" +msgstr "ieteikt rediģēt" diff --git a/_static/locales/ml/LC_MESSAGES/booktheme.mo b/_static/locales/ml/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..2736e8fc Binary files /dev/null and b/_static/locales/ml/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ml/LC_MESSAGES/booktheme.po b/_static/locales/ml/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..bdad3de2 --- /dev/null +++ b/_static/locales/ml/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "എഴുതിയത്" + +msgid "By" +msgstr "എഴുതിയത്" + +msgid "Copyright" +msgstr "പകർപ്പവകാശം" + +msgid "Download notebook file" +msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക" + +msgid "Download source file" +msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക" + +msgid "Download this page" +msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക" + +msgid "Edit this page" +msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക" + +msgid "Last updated on" +msgstr "അവസാനം അപ്‌ഡേറ്റുചെയ്‌തത്" + +msgid "Launch" +msgstr "സമാരംഭിക്കുക" + +msgid "Open an issue" +msgstr "ഒരു പ്രശ്നം തുറക്കുക" + +msgid "Print to PDF" +msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക" + +msgid "Source repository" +msgstr "ഉറവിട ശേഖരം" + +msgid "Sphinx Book Theme" +msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം" + +msgid "Theme by the" +msgstr "പ്രമേയം" + +msgid "Toggle navigation" +msgstr "നാവിഗേഷൻ ടോഗിൾ ചെയ്യുക" + +msgid "next page" +msgstr "അടുത്ത പേജ്" + +msgid "open issue" +msgstr "തുറന്ന പ്രശ്നം" + +msgid "previous page" +msgstr "മുൻപത്തെ താൾ" + +msgid "suggest edit" +msgstr "എഡിറ്റുചെയ്യാൻ നിർദ്ദേശിക്കുക" diff --git a/_static/locales/mr/LC_MESSAGES/booktheme.mo b/_static/locales/mr/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..fe530100 Binary files /dev/null and b/_static/locales/mr/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/mr/LC_MESSAGES/booktheme.po b/_static/locales/mr/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..61bfad4d --- /dev/null +++ b/_static/locales/mr/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "द्वारा" + +msgid "By" +msgstr "द्वारा" + +msgid "Copyright" +msgstr "कॉपीराइट" + +msgid "Download notebook file" +msgstr "नोटबुक फाईल डाउनलोड करा" + +msgid "Download source file" +msgstr "स्त्रोत फाइल डाउनलोड करा" + +msgid "Download this page" +msgstr "हे पृष्ठ डाउनलोड करा" + +msgid "Edit this page" +msgstr "हे पृष्ठ संपादित करा" + +msgid "Last updated on" +msgstr "अखेरचे अद्यतनित" + +msgid "Launch" +msgstr "लाँच करा" + +msgid "Open an issue" +msgstr "एक मुद्दा उघडा" + +msgid "Print to PDF" +msgstr "पीडीएफवर मुद्रित करा" + +msgid "Source repository" +msgstr "स्त्रोत भांडार" + +msgid "Sphinx Book Theme" +msgstr "स्फिंक्स बुक थीम" + +msgid "Theme by the" +msgstr "द्वारा थीम" + +msgid "Toggle navigation" +msgstr "नेव्हिगेशन टॉगल करा" + +msgid "next page" +msgstr "पुढील पृष्ठ" + +msgid "open issue" +msgstr "खुला मुद्दा" + +msgid "previous page" +msgstr "मागील पान" + +msgid "suggest edit" +msgstr "संपादन सुचवा" diff --git a/_static/locales/ms/LC_MESSAGES/booktheme.mo b/_static/locales/ms/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..f02603fa Binary files /dev/null and b/_static/locales/ms/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ms/LC_MESSAGES/booktheme.po b/_static/locales/ms/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..ade6515a --- /dev/null +++ b/_static/locales/ms/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Oleh" + +msgid "By" +msgstr "Oleh" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Download notebook file" +msgstr "Muat turun fail buku nota" + +msgid "Download source file" +msgstr "Muat turun fail sumber" + +msgid "Download this page" +msgstr "Muat turun halaman ini" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "Last updated on" +msgstr "Terakhir dikemas kini pada" + +msgid "Launch" +msgstr "Lancarkan" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Toggle navigation" +msgstr "Togol navigasi" + +msgid "next page" +msgstr "muka surat seterusnya" + +msgid "open issue" +msgstr "isu terbuka" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "suggest edit" +msgstr "cadangkan edit" diff --git a/_static/locales/nl/LC_MESSAGES/booktheme.mo b/_static/locales/nl/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..e59e7ecb Binary files /dev/null and b/_static/locales/nl/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/nl/LC_MESSAGES/booktheme.po b/_static/locales/nl/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..e114611d --- /dev/null +++ b/_static/locales/nl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Door de" + +msgid "By" +msgstr "Door" + +msgid "Contents" +msgstr "Inhoud" + +msgid "Copyright" +msgstr "auteursrechten" + +msgid "Download notebook file" +msgstr "Download notebookbestand" + +msgid "Download source file" +msgstr "Download het bronbestand" + +msgid "Download this page" +msgstr "Download deze pagina" + +msgid "Edit this page" +msgstr "bewerk deze pagina" + +msgid "Fullscreen mode" +msgstr "Volledig scherm" + +msgid "Last updated on" +msgstr "Laatst geupdate op" + +msgid "Launch" +msgstr "Lancering" + +msgid "Open an issue" +msgstr "Open een probleem" + +msgid "Print to PDF" +msgstr "Afdrukken naar pdf" + +msgid "Source repository" +msgstr "Bronopslagplaats" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-boekthema" + +msgid "Theme by the" +msgstr "Thema door de" + +msgid "Toggle navigation" +msgstr "Schakel navigatie" + +msgid "next page" +msgstr "volgende bladzijde" + +msgid "open issue" +msgstr "open probleem" + +msgid "previous page" +msgstr "vorige pagina" + +msgid "repository" +msgstr "repository" + +msgid "suggest edit" +msgstr "suggereren bewerken" diff --git a/_static/locales/no/LC_MESSAGES/booktheme.mo b/_static/locales/no/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..6cd15c88 Binary files /dev/null and b/_static/locales/no/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/no/LC_MESSAGES/booktheme.po b/_static/locales/no/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..53fa9fc3 --- /dev/null +++ b/_static/locales/no/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: no\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Ved" + +msgid "By" +msgstr "Av" + +msgid "Contents" +msgstr "Innhold" + +msgid "Copyright" +msgstr "opphavsrett" + +msgid "Download notebook file" +msgstr "Last ned notatbokfilen" + +msgid "Download source file" +msgstr "Last ned kildefilen" + +msgid "Download this page" +msgstr "Last ned denne siden" + +msgid "Edit this page" +msgstr "Rediger denne siden" + +msgid "Fullscreen mode" +msgstr "Fullskjerm-modus" + +msgid "Last updated on" +msgstr "Sist oppdatert den" + +msgid "Launch" +msgstr "Start" + +msgid "Open an issue" +msgstr "Åpne et problem" + +msgid "Print to PDF" +msgstr "Skriv ut til PDF" + +msgid "Source repository" +msgstr "Kildedepot" + +msgid "Sphinx Book Theme" +msgstr "Sphinx boktema" + +msgid "Theme by the" +msgstr "Tema av" + +msgid "Toggle navigation" +msgstr "Bytt navigasjon" + +msgid "next page" +msgstr "neste side" + +msgid "open issue" +msgstr "åpent nummer" + +msgid "previous page" +msgstr "forrige side" + +msgid "repository" +msgstr "oppbevaringssted" + +msgid "suggest edit" +msgstr "foreslå redigering" diff --git a/_static/locales/pl/LC_MESSAGES/booktheme.mo b/_static/locales/pl/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..9ebb584f Binary files /dev/null and b/_static/locales/pl/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/pl/LC_MESSAGES/booktheme.po b/_static/locales/pl/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..a4822159 --- /dev/null +++ b/_static/locales/pl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Przez" + +msgid "By" +msgstr "Przez" + +msgid "Contents" +msgstr "Zawartość" + +msgid "Copyright" +msgstr "prawa autorskie" + +msgid "Download notebook file" +msgstr "Pobierz plik notatnika" + +msgid "Download source file" +msgstr "Pobierz plik źródłowy" + +msgid "Download this page" +msgstr "Pobierz tę stronę" + +msgid "Edit this page" +msgstr "Edytuj tę strone" + +msgid "Fullscreen mode" +msgstr "Pełny ekran" + +msgid "Last updated on" +msgstr "Ostatnia aktualizacja" + +msgid "Launch" +msgstr "Uruchomić" + +msgid "Open an issue" +msgstr "Otwórz problem" + +msgid "Print to PDF" +msgstr "Drukuj do PDF" + +msgid "Source repository" +msgstr "Repozytorium źródłowe" + +msgid "Sphinx Book Theme" +msgstr "Motyw książki Sphinx" + +msgid "Theme by the" +msgstr "Motyw autorstwa" + +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +msgid "next page" +msgstr "Następna strona" + +msgid "open issue" +msgstr "otwarty problem" + +msgid "previous page" +msgstr "Poprzednia strona" + +msgid "repository" +msgstr "magazyn" + +msgid "suggest edit" +msgstr "zaproponuj edycję" diff --git a/_static/locales/pt/LC_MESSAGES/booktheme.mo b/_static/locales/pt/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..d0ddb872 Binary files /dev/null and b/_static/locales/pt/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/pt/LC_MESSAGES/booktheme.po b/_static/locales/pt/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..bbc872d0 --- /dev/null +++ b/_static/locales/pt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Pelo" + +msgid "By" +msgstr "De" + +msgid "Contents" +msgstr "Conteúdo" + +msgid "Copyright" +msgstr "direito autoral" + +msgid "Download notebook file" +msgstr "Baixar arquivo de notebook" + +msgid "Download source file" +msgstr "Baixar arquivo fonte" + +msgid "Download this page" +msgstr "Baixe esta página" + +msgid "Edit this page" +msgstr "Edite essa página" + +msgid "Fullscreen mode" +msgstr "Modo tela cheia" + +msgid "Last updated on" +msgstr "Última atualização em" + +msgid "Launch" +msgstr "Lançamento" + +msgid "Open an issue" +msgstr "Abra um problema" + +msgid "Print to PDF" +msgstr "Imprimir em PDF" + +msgid "Source repository" +msgstr "Repositório fonte" + +msgid "Sphinx Book Theme" +msgstr "Tema do livro Sphinx" + +msgid "Theme by the" +msgstr "Tema por" + +msgid "Toggle navigation" +msgstr "Alternar de navegação" + +msgid "next page" +msgstr "próxima página" + +msgid "open issue" +msgstr "questão aberta" + +msgid "previous page" +msgstr "página anterior" + +msgid "repository" +msgstr "repositório" + +msgid "suggest edit" +msgstr "sugerir edição" diff --git a/_static/locales/ro/LC_MESSAGES/booktheme.mo b/_static/locales/ro/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..3c36ab1d Binary files /dev/null and b/_static/locales/ro/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ro/LC_MESSAGES/booktheme.po b/_static/locales/ro/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..b9b8b4f3 --- /dev/null +++ b/_static/locales/ro/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Langa" + +msgid "By" +msgstr "De" + +msgid "Contents" +msgstr "Cuprins" + +msgid "Copyright" +msgstr "Drepturi de autor" + +msgid "Download notebook file" +msgstr "Descărcați fișierul notebook" + +msgid "Download source file" +msgstr "Descărcați fișierul sursă" + +msgid "Download this page" +msgstr "Descarcă această pagină" + +msgid "Edit this page" +msgstr "Editați această pagină" + +msgid "Fullscreen mode" +msgstr "Modul ecran întreg" + +msgid "Last updated on" +msgstr "Ultima actualizare la" + +msgid "Launch" +msgstr "Lansa" + +msgid "Open an issue" +msgstr "Deschideți o problemă" + +msgid "Print to PDF" +msgstr "Imprimați în PDF" + +msgid "Source repository" +msgstr "Depozit sursă" + +msgid "Sphinx Book Theme" +msgstr "Tema Sphinx Book" + +msgid "Theme by the" +msgstr "Tema de" + +msgid "Toggle navigation" +msgstr "Comutare navigare" + +msgid "next page" +msgstr "pagina următoare" + +msgid "open issue" +msgstr "problema deschisă" + +msgid "previous page" +msgstr "pagina anterioară" + +msgid "repository" +msgstr "repertoriu" + +msgid "suggest edit" +msgstr "sugerează editare" diff --git a/_static/locales/ru/LC_MESSAGES/booktheme.mo b/_static/locales/ru/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..5ea2e5c9 Binary files /dev/null and b/_static/locales/ru/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ru/LC_MESSAGES/booktheme.po b/_static/locales/ru/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..e0f35551 --- /dev/null +++ b/_static/locales/ru/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Посредством" + +msgid "By" +msgstr "Автор:" + +msgid "Contents" +msgstr "Содержание" + +msgid "Copyright" +msgstr "авторское право" + +msgid "Download notebook file" +msgstr "Скачать файл записной книжки" + +msgid "Download source file" +msgstr "Скачать исходный файл" + +msgid "Download this page" +msgstr "Загрузите эту страницу" + +msgid "Edit this page" +msgstr "Редактировать эту страницу" + +msgid "Fullscreen mode" +msgstr "Полноэкранный режим" + +msgid "Last updated on" +msgstr "Последнее обновление" + +msgid "Launch" +msgstr "Запуск" + +msgid "Open an issue" +msgstr "Открыть вопрос" + +msgid "Print to PDF" +msgstr "Распечатать в PDF" + +msgid "Source repository" +msgstr "Исходный репозиторий" + +msgid "Sphinx Book Theme" +msgstr "Тема книги Сфинкс" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Toggle navigation" +msgstr "Переключить навигацию" + +msgid "next page" +msgstr "Следующая страница" + +msgid "open issue" +msgstr "открытый вопрос" + +msgid "previous page" +msgstr "Предыдущая страница" + +msgid "repository" +msgstr "хранилище" + +msgid "suggest edit" +msgstr "предложить редактировать" diff --git a/_static/locales/sk/LC_MESSAGES/booktheme.mo b/_static/locales/sk/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..59bd0ddf Binary files /dev/null and b/_static/locales/sk/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/sk/LC_MESSAGES/booktheme.po b/_static/locales/sk/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..4b5225a3 --- /dev/null +++ b/_static/locales/sk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Podľa" + +msgid "By" +msgstr "Autor:" + +msgid "Contents" +msgstr "Obsah" + +msgid "Copyright" +msgstr "Autorské práva" + +msgid "Download notebook file" +msgstr "Stiahnite si zošit" + +msgid "Download source file" +msgstr "Stiahnite si zdrojový súbor" + +msgid "Download this page" +msgstr "Stiahnite si túto stránku" + +msgid "Edit this page" +msgstr "Upraviť túto stránku" + +msgid "Fullscreen mode" +msgstr "Režim celej obrazovky" + +msgid "Last updated on" +msgstr "Posledná aktualizácia dňa" + +msgid "Launch" +msgstr "Spustiť" + +msgid "Open an issue" +msgstr "Otvorte problém" + +msgid "Print to PDF" +msgstr "Tlač do PDF" + +msgid "Source repository" +msgstr "Zdrojové úložisko" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Toggle navigation" +msgstr "Prepnúť navigáciu" + +msgid "next page" +msgstr "ďalšia strana" + +msgid "open issue" +msgstr "otvorené vydanie" + +msgid "previous page" +msgstr "predchádzajúca strana" + +msgid "repository" +msgstr "Úložisko" + +msgid "suggest edit" +msgstr "navrhnúť úpravu" diff --git a/_static/locales/sl/LC_MESSAGES/booktheme.mo b/_static/locales/sl/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..87bf26de Binary files /dev/null and b/_static/locales/sl/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/sl/LC_MESSAGES/booktheme.po b/_static/locales/sl/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..45592e71 --- /dev/null +++ b/_static/locales/sl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Avtor" + +msgid "By" +msgstr "Avtor" + +msgid "Contents" +msgstr "Vsebina" + +msgid "Copyright" +msgstr "avtorske pravice" + +msgid "Download notebook file" +msgstr "Prenesite datoteko zvezka" + +msgid "Download source file" +msgstr "Prenesite izvorno datoteko" + +msgid "Download this page" +msgstr "Prenesite to stran" + +msgid "Edit this page" +msgstr "Uredite to stran" + +msgid "Fullscreen mode" +msgstr "Celozaslonski način" + +msgid "Last updated on" +msgstr "Nazadnje posodobljeno dne" + +msgid "Launch" +msgstr "Kosilo" + +msgid "Open an issue" +msgstr "Odprite številko" + +msgid "Print to PDF" +msgstr "Natisni v PDF" + +msgid "Source repository" +msgstr "Izvorno skladišče" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "Theme by the" +msgstr "Tema avtorja" + +msgid "Toggle navigation" +msgstr "Preklopi navigacijo" + +msgid "next page" +msgstr "Naslednja stran" + +msgid "open issue" +msgstr "odprto vprašanje" + +msgid "previous page" +msgstr "Prejšnja stran" + +msgid "repository" +msgstr "odlagališče" + +msgid "suggest edit" +msgstr "predlagajte urejanje" diff --git a/_static/locales/sr/LC_MESSAGES/booktheme.mo b/_static/locales/sr/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..ec740f48 Binary files /dev/null and b/_static/locales/sr/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/sr/LC_MESSAGES/booktheme.po b/_static/locales/sr/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..4ddf693d --- /dev/null +++ b/_static/locales/sr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Од" + +msgid "By" +msgstr "Од стране" + +msgid "Contents" +msgstr "Садржај" + +msgid "Copyright" +msgstr "Ауторско право" + +msgid "Download notebook file" +msgstr "Преузмите датотеку бележнице" + +msgid "Download source file" +msgstr "Преузми изворну датотеку" + +msgid "Download this page" +msgstr "Преузмите ову страницу" + +msgid "Edit this page" +msgstr "Уредите ову страницу" + +msgid "Fullscreen mode" +msgstr "Режим целог екрана" + +msgid "Last updated on" +msgstr "Последње ажурирање" + +msgid "Launch" +msgstr "Лансирање" + +msgid "Open an issue" +msgstr "Отворите издање" + +msgid "Print to PDF" +msgstr "Испис у ПДФ" + +msgid "Source repository" +msgstr "Изворно спремиште" + +msgid "Sphinx Book Theme" +msgstr "Тема књиге Спхинк" + +msgid "Theme by the" +msgstr "Тхеме би" + +msgid "Toggle navigation" +msgstr "Укључи / искључи навигацију" + +msgid "next page" +msgstr "Следећа страна" + +msgid "open issue" +msgstr "отворено издање" + +msgid "previous page" +msgstr "Претходна страница" + +msgid "repository" +msgstr "спремиште" + +msgid "suggest edit" +msgstr "предложи уређивање" diff --git a/_static/locales/sv/LC_MESSAGES/booktheme.mo b/_static/locales/sv/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..b07dc76f Binary files /dev/null and b/_static/locales/sv/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/sv/LC_MESSAGES/booktheme.po b/_static/locales/sv/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..a5587a56 --- /dev/null +++ b/_static/locales/sv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Av den" + +msgid "By" +msgstr "Av" + +msgid "Contents" +msgstr "Innehåll" + +msgid "Copyright" +msgstr "Upphovsrätt" + +msgid "Download notebook file" +msgstr "Ladda ner notebook-fil" + +msgid "Download source file" +msgstr "Ladda ner källfil" + +msgid "Download this page" +msgstr "Ladda ner den här sidan" + +msgid "Edit this page" +msgstr "Redigera den här sidan" + +msgid "Fullscreen mode" +msgstr "Fullskärmsläge" + +msgid "Last updated on" +msgstr "Senast uppdaterad den" + +msgid "Launch" +msgstr "Öppna" + +msgid "Open an issue" +msgstr "Öppna en problemrapport" + +msgid "Print to PDF" +msgstr "Skriv ut till PDF" + +msgid "Source repository" +msgstr "Källkodsrepositorium" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Boktema" + +msgid "Theme by the" +msgstr "Tema av" + +msgid "Toggle navigation" +msgstr "Växla navigering" + +msgid "next page" +msgstr "nästa sida" + +msgid "open issue" +msgstr "öppna problemrapport" + +msgid "previous page" +msgstr "föregående sida" + +msgid "repository" +msgstr "repositorium" + +msgid "suggest edit" +msgstr "föreslå ändring" diff --git a/_static/locales/ta/LC_MESSAGES/booktheme.mo b/_static/locales/ta/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..29f52e1f Binary files /dev/null and b/_static/locales/ta/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ta/LC_MESSAGES/booktheme.po b/_static/locales/ta/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..fb871e23 --- /dev/null +++ b/_static/locales/ta/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "மூலம்" + +msgid "By" +msgstr "வழங்கியவர்" + +msgid "Copyright" +msgstr "பதிப்புரிமை" + +msgid "Download notebook file" +msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்" + +msgid "Download source file" +msgstr "மூல கோப்பைப் பதிவிறக்குக" + +msgid "Download this page" +msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்" + +msgid "Edit this page" +msgstr "இந்தப் பக்கத்தைத் திருத்தவும்" + +msgid "Last updated on" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +msgid "Launch" +msgstr "தொடங்க" + +msgid "Open an issue" +msgstr "சிக்கலைத் திறக்கவும்" + +msgid "Print to PDF" +msgstr "PDF இல் அச்சிடுக" + +msgid "Source repository" +msgstr "மூல களஞ்சியம்" + +msgid "Sphinx Book Theme" +msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்" + +msgid "Theme by the" +msgstr "வழங்கிய தீம்" + +msgid "Toggle navigation" +msgstr "வழிசெலுத்தலை நிலைமாற்று" + +msgid "next page" +msgstr "அடுத்த பக்கம்" + +msgid "open issue" +msgstr "திறந்த பிரச்சினை" + +msgid "previous page" +msgstr "முந்தைய பக்கம்" + +msgid "suggest edit" +msgstr "திருத்த பரிந்துரைக்கவும்" diff --git a/_static/locales/te/LC_MESSAGES/booktheme.mo b/_static/locales/te/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..0a5f4b46 Binary files /dev/null and b/_static/locales/te/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/te/LC_MESSAGES/booktheme.po b/_static/locales/te/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..22ab77c1 --- /dev/null +++ b/_static/locales/te/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "ద్వారా" + +msgid "By" +msgstr "ద్వారా" + +msgid "Copyright" +msgstr "కాపీరైట్" + +msgid "Download notebook file" +msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి" + +msgid "Download source file" +msgstr "మూల ఫైల్‌ను డౌన్‌లోడ్ చేయండి" + +msgid "Download this page" +msgstr "ఈ పేజీని డౌన్‌లోడ్ చేయండి" + +msgid "Edit this page" +msgstr "ఈ పేజీని సవరించండి" + +msgid "Last updated on" +msgstr "చివరిగా నవీకరించబడింది" + +msgid "Launch" +msgstr "ప్రారంభించండి" + +msgid "Open an issue" +msgstr "సమస్యను తెరవండి" + +msgid "Print to PDF" +msgstr "PDF కి ముద్రించండి" + +msgid "Source repository" +msgstr "మూల రిపోజిటరీ" + +msgid "Sphinx Book Theme" +msgstr "సింహిక పుస్తక థీమ్" + +msgid "Theme by the" +msgstr "ద్వారా థీమ్" + +msgid "Toggle navigation" +msgstr "నావిగేషన్‌ను టోగుల్ చేయండి" + +msgid "next page" +msgstr "తరువాతి పేజీ" + +msgid "open issue" +msgstr "ఓపెన్ ఇష్యూ" + +msgid "previous page" +msgstr "ముందు పేజి" + +msgid "suggest edit" +msgstr "సవరించమని సూచించండి" diff --git a/_static/locales/tg/LC_MESSAGES/booktheme.mo b/_static/locales/tg/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..b21c6c63 Binary files /dev/null and b/_static/locales/tg/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/tg/LC_MESSAGES/booktheme.po b/_static/locales/tg/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..e499352d --- /dev/null +++ b/_static/locales/tg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Бо" + +msgid "By" +msgstr "Бо" + +msgid "Contents" +msgstr "Мундариҷа" + +msgid "Copyright" +msgstr "Ҳуқуқи муаллиф" + +msgid "Download notebook file" +msgstr "Файли дафтарро зеркашӣ кунед" + +msgid "Download source file" +msgstr "Файли манбаъро зеркашӣ кунед" + +msgid "Download this page" +msgstr "Ин саҳифаро зеркашӣ кунед" + +msgid "Edit this page" +msgstr "Ин саҳифаро таҳрир кунед" + +msgid "Fullscreen mode" +msgstr "Ҳолати экрани пурра" + +msgid "Last updated on" +msgstr "Last навсозӣ дар" + +msgid "Launch" +msgstr "Оғоз" + +msgid "Open an issue" +msgstr "Масъаларо кушоед" + +msgid "Print to PDF" +msgstr "Чоп ба PDF" + +msgid "Source repository" +msgstr "Анбори манбаъ" + +msgid "Sphinx Book Theme" +msgstr "Сфинкс Мавзӯи китоб" + +msgid "Theme by the" +msgstr "Мавзӯъи аз" + +msgid "Toggle navigation" +msgstr "Гузаришро иваз кунед" + +msgid "next page" +msgstr "саҳифаи оянда" + +msgid "open issue" +msgstr "барориши кушод" + +msgid "previous page" +msgstr "саҳифаи қаблӣ" + +msgid "repository" +msgstr "анбор" + +msgid "suggest edit" +msgstr "пешниҳод вироиш" diff --git a/_static/locales/th/LC_MESSAGES/booktheme.mo b/_static/locales/th/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..abede98a Binary files /dev/null and b/_static/locales/th/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/th/LC_MESSAGES/booktheme.po b/_static/locales/th/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..6f0103ea --- /dev/null +++ b/_static/locales/th/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "โดย" + +msgid "By" +msgstr "โดย" + +msgid "Contents" +msgstr "สารบัญ" + +msgid "Copyright" +msgstr "ลิขสิทธิ์" + +msgid "Download notebook file" +msgstr "ดาวน์โหลดไฟล์สมุดบันทึก" + +msgid "Download source file" +msgstr "ดาวน์โหลดไฟล์ต้นฉบับ" + +msgid "Download this page" +msgstr "ดาวน์โหลดหน้านี้" + +msgid "Edit this page" +msgstr "แก้ไขหน้านี้" + +msgid "Fullscreen mode" +msgstr "โหมดเต็มหน้าจอ" + +msgid "Last updated on" +msgstr "ปรับปรุงล่าสุดเมื่อ" + +msgid "Launch" +msgstr "เปิด" + +msgid "Open an issue" +msgstr "เปิดปัญหา" + +msgid "Print to PDF" +msgstr "พิมพ์เป็น PDF" + +msgid "Source repository" +msgstr "ที่เก็บซอร์ส" + +msgid "Sphinx Book Theme" +msgstr "ธีมหนังสือสฟิงซ์" + +msgid "Theme by the" +msgstr "ธีมโดย" + +msgid "Toggle navigation" +msgstr "ไม่ต้องสลับช่องทาง" + +msgid "next page" +msgstr "หน้าต่อไป" + +msgid "open issue" +msgstr "เปิดปัญหา" + +msgid "previous page" +msgstr "หน้าที่แล้ว" + +msgid "repository" +msgstr "ที่เก็บ" + +msgid "suggest edit" +msgstr "แนะนำแก้ไข" diff --git a/_static/locales/tl/LC_MESSAGES/booktheme.mo b/_static/locales/tl/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..8df1b733 Binary files /dev/null and b/_static/locales/tl/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/tl/LC_MESSAGES/booktheme.po b/_static/locales/tl/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..dbeb2565 --- /dev/null +++ b/_static/locales/tl/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Sa pamamagitan ng" + +msgid "By" +msgstr "Ni" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download notebook file" +msgstr "Mag-download ng file ng notebook" + +msgid "Download source file" +msgstr "Mag-download ng file ng pinagmulan" + +msgid "Download this page" +msgstr "I-download ang pahinang ito" + +msgid "Edit this page" +msgstr "I-edit ang pahinang ito" + +msgid "Last updated on" +msgstr "Huling na-update noong" + +msgid "Launch" +msgstr "Ilunsad" + +msgid "Open an issue" +msgstr "Magbukas ng isyu" + +msgid "Print to PDF" +msgstr "I-print sa PDF" + +msgid "Source repository" +msgstr "Pinagmulan ng imbakan" + +msgid "Sphinx Book Theme" +msgstr "Tema ng Sphinx Book" + +msgid "Theme by the" +msgstr "Tema ng" + +msgid "Toggle navigation" +msgstr "I-toggle ang pag-navigate" + +msgid "next page" +msgstr "Susunod na pahina" + +msgid "open issue" +msgstr "bukas na isyu" + +msgid "previous page" +msgstr "Nakaraang pahina" + +msgid "suggest edit" +msgstr "iminumungkahi i-edit" diff --git a/_static/locales/tr/LC_MESSAGES/booktheme.mo b/_static/locales/tr/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..029ae18a Binary files /dev/null and b/_static/locales/tr/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/tr/LC_MESSAGES/booktheme.po b/_static/locales/tr/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..610c1ab0 --- /dev/null +++ b/_static/locales/tr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Tarafından" + +msgid "By" +msgstr "Tarafından" + +msgid "Contents" +msgstr "İçindekiler" + +msgid "Copyright" +msgstr "Telif hakkı" + +msgid "Download notebook file" +msgstr "Defter dosyasını indirin" + +msgid "Download source file" +msgstr "Kaynak dosyayı indirin" + +msgid "Download this page" +msgstr "Bu sayfayı indirin" + +msgid "Edit this page" +msgstr "Bu sayfayı düzenle" + +msgid "Fullscreen mode" +msgstr "Tam ekran modu" + +msgid "Last updated on" +msgstr "Son güncelleme tarihi" + +msgid "Launch" +msgstr "Başlatmak" + +msgid "Open an issue" +msgstr "Bir sorunu açın" + +msgid "Print to PDF" +msgstr "PDF olarak yazdır" + +msgid "Source repository" +msgstr "Kaynak kod deposu" + +msgid "Sphinx Book Theme" +msgstr "Sfenks Kitap Teması" + +msgid "Theme by the" +msgstr "Tarafından tema" + +msgid "Toggle navigation" +msgstr "Gezinmeyi değiştir" + +msgid "next page" +msgstr "sonraki Sayfa" + +msgid "open issue" +msgstr "Açık konu" + +msgid "previous page" +msgstr "önceki sayfa" + +msgid "repository" +msgstr "depo" + +msgid "suggest edit" +msgstr "düzenleme öner" diff --git a/_static/locales/uk/LC_MESSAGES/booktheme.mo b/_static/locales/uk/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..16ab7890 Binary files /dev/null and b/_static/locales/uk/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/uk/LC_MESSAGES/booktheme.po b/_static/locales/uk/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..8ae61c48 --- /dev/null +++ b/_static/locales/uk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "По" + +msgid "By" +msgstr "Автор" + +msgid "Contents" +msgstr "Зміст" + +msgid "Copyright" +msgstr "Авторське право" + +msgid "Download notebook file" +msgstr "Завантажте файл блокнота" + +msgid "Download source file" +msgstr "Завантажити вихідний файл" + +msgid "Download this page" +msgstr "Завантажте цю сторінку" + +msgid "Edit this page" +msgstr "Редагувати цю сторінку" + +msgid "Fullscreen mode" +msgstr "Повноекранний режим" + +msgid "Last updated on" +msgstr "Останнє оновлення:" + +msgid "Launch" +msgstr "Запуск" + +msgid "Open an issue" +msgstr "Відкрийте випуск" + +msgid "Print to PDF" +msgstr "Друк у форматі PDF" + +msgid "Source repository" +msgstr "Джерело сховища" + +msgid "Sphinx Book Theme" +msgstr "Тема книги \"Сфінкс\"" + +msgid "Theme by the" +msgstr "Тема від" + +msgid "Toggle navigation" +msgstr "Переключити навігацію" + +msgid "next page" +msgstr "Наступна сторінка" + +msgid "open issue" +msgstr "відкритий випуск" + +msgid "previous page" +msgstr "Попередня сторінка" + +msgid "repository" +msgstr "сховище" + +msgid "suggest edit" +msgstr "запропонувати редагувати" diff --git a/_static/locales/ur/LC_MESSAGES/booktheme.mo b/_static/locales/ur/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..de8c84b9 Binary files /dev/null and b/_static/locales/ur/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/ur/LC_MESSAGES/booktheme.po b/_static/locales/ur/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..63018eae --- /dev/null +++ b/_static/locales/ur/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "کی طرف" + +msgid "By" +msgstr "بذریعہ" + +msgid "Copyright" +msgstr "کاپی رائٹ" + +msgid "Download notebook file" +msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں" + +msgid "Download source file" +msgstr "سورس فائل ڈاؤن لوڈ کریں" + +msgid "Download this page" +msgstr "اس صفحے کو ڈاؤن لوڈ کریں" + +msgid "Edit this page" +msgstr "اس صفحے میں ترمیم کریں" + +msgid "Last updated on" +msgstr "آخری بار تازہ کاری ہوئی" + +msgid "Launch" +msgstr "لانچ کریں" + +msgid "Open an issue" +msgstr "ایک مسئلہ کھولیں" + +msgid "Print to PDF" +msgstr "پی ڈی ایف پرنٹ کریں" + +msgid "Source repository" +msgstr "ماخذ ذخیرہ" + +msgid "Sphinx Book Theme" +msgstr "سپنکس بک تھیم" + +msgid "Theme by the" +msgstr "کے ذریعہ تھیم" + +msgid "Toggle navigation" +msgstr "نیویگیشن ٹوگل کریں" + +msgid "next page" +msgstr "اگلا صفحہ" + +msgid "open issue" +msgstr "کھلا مسئلہ" + +msgid "previous page" +msgstr "سابقہ ​​صفحہ" + +msgid "suggest edit" +msgstr "ترمیم کی تجویز کریں" diff --git a/_static/locales/vi/LC_MESSAGES/booktheme.mo b/_static/locales/vi/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..2bb32555 Binary files /dev/null and b/_static/locales/vi/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/vi/LC_MESSAGES/booktheme.po b/_static/locales/vi/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..ac91b0f1 --- /dev/null +++ b/_static/locales/vi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "Bằng" + +msgid "By" +msgstr "Bởi" + +msgid "Contents" +msgstr "Nội dung" + +msgid "Copyright" +msgstr "Bản quyền" + +msgid "Download notebook file" +msgstr "Tải xuống tệp sổ tay" + +msgid "Download source file" +msgstr "Tải xuống tệp nguồn" + +msgid "Download this page" +msgstr "Tải xuống trang này" + +msgid "Edit this page" +msgstr "chỉnh sửa trang này" + +msgid "Fullscreen mode" +msgstr "Chế độ toàn màn hình" + +msgid "Last updated on" +msgstr "Cập nhật lần cuối vào" + +msgid "Launch" +msgstr "Phóng" + +msgid "Open an issue" +msgstr "Mở một vấn đề" + +msgid "Print to PDF" +msgstr "In sang PDF" + +msgid "Source repository" +msgstr "Kho nguồn" + +msgid "Sphinx Book Theme" +msgstr "Chủ đề sách nhân sư" + +msgid "Theme by the" +msgstr "Chủ đề của" + +msgid "Toggle navigation" +msgstr "Chuyển đổi điều hướng thành" + +msgid "next page" +msgstr "Trang tiếp theo" + +msgid "open issue" +msgstr "vấn đề mở" + +msgid "previous page" +msgstr "trang trước" + +msgid "repository" +msgstr "kho" + +msgid "suggest edit" +msgstr "đề nghị chỉnh sửa" diff --git a/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo b/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..0e3235d0 Binary files /dev/null and b/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/zh_CN/LC_MESSAGES/booktheme.po b/_static/locales/zh_CN/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..ff1c9383 --- /dev/null +++ b/_static/locales/zh_CN/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "作者:" + +msgid "By" +msgstr "作者:" + +msgid "Contents" +msgstr "目录" + +msgid "Copyright" +msgstr "版权" + +msgid "Download notebook file" +msgstr "下载笔记本文件" + +msgid "Download source file" +msgstr "下载源文件" + +msgid "Download this page" +msgstr "下载此页面" + +msgid "Edit this page" +msgstr "编辑此页面" + +msgid "Fullscreen mode" +msgstr "全屏模式" + +msgid "Last updated on" +msgstr "上次更新时间:" + +msgid "Launch" +msgstr "启动" + +msgid "Open an issue" +msgstr "创建议题" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "Source repository" +msgstr "源码库" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 主题" + +msgid "Theme by the" +msgstr "主题作者:" + +msgid "Toggle navigation" +msgstr "显示或隐藏导航栏" + +msgid "next page" +msgstr "下一页" + +msgid "open issue" +msgstr "创建议题" + +msgid "previous page" +msgstr "上一页" + +msgid "repository" +msgstr "仓库" + +msgid "suggest edit" +msgstr "提出修改建议" diff --git a/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo b/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo new file mode 100644 index 00000000..9116fa95 Binary files /dev/null and b/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo differ diff --git a/_static/locales/zh_TW/LC_MESSAGES/booktheme.po b/_static/locales/zh_TW/LC_MESSAGES/booktheme.po new file mode 100644 index 00000000..f2b300fa --- /dev/null +++ b/_static/locales/zh_TW/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "By the" +msgstr "作者:" + +msgid "By" +msgstr "作者:" + +msgid "Contents" +msgstr "目錄" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download notebook file" +msgstr "下載 Notebook 檔案" + +msgid "Download source file" +msgstr "下載原始檔" + +msgid "Download this page" +msgstr "下載此頁面" + +msgid "Edit this page" +msgstr "編輯此頁面" + +msgid "Fullscreen mode" +msgstr "全螢幕模式" + +msgid "Last updated on" +msgstr "最後更新時間:" + +msgid "Launch" +msgstr "啟動" + +msgid "Open an issue" +msgstr "開啟議題" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "Source repository" +msgstr "來源儲存庫" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 佈景主題" + +msgid "Theme by the" +msgstr "佈景主題作者:" + +msgid "Toggle navigation" +msgstr "顯示或隱藏導覽列" + +msgid "next page" +msgstr "下一頁" + +msgid "open issue" +msgstr "公開的問題" + +msgid "previous page" +msgstr "上一頁" + +msgid "repository" +msgstr "儲存庫" + +msgid "suggest edit" +msgstr "提出修改建議" diff --git a/_static/logo.png b/_static/logo.png new file mode 100644 index 00000000..8389c11f Binary files /dev/null and b/_static/logo.png differ diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/mystnb.11b39860a7a0cbfd473a3ad8a317855267ff0bd372690045ca344a6b62be495e.css b/_static/mystnb.11b39860a7a0cbfd473a3ad8a317855267ff0bd372690045ca344a6b62be495e.css new file mode 100644 index 00000000..9f3d7646 --- /dev/null +++ b/_static/mystnb.11b39860a7a0cbfd473a3ad8a317855267ff0bd372690045ca344a6b62be495e.css @@ -0,0 +1,2449 @@ +/* Dark mode support: + * if (e.g. Furo theme) or (e.g. PyData theme) has `data-theme` set, respect it. + * else default to the system color scheme + */ +@media (prefers-color-scheme: dark) { + :root { + --light: ; + --dark: initial; + } +} + +@media (prefers-color-scheme: light) { + :root { + --dark: ; + --light: initial; + } +} + +:is(html, body)[data-theme="dark"] { + --light: ; + --dark: initial; +} + +:is(html, body)[data-theme="light"] { + --dark: ; + --light: initial; +} + +/* Variables */ +:root { + /* + Following palettes are generated by using https://m2.material.io/design/color/the-color-system.html#tools-for-picking-colors + - neutral palette with #fcfcfc and danger palette with #ffdddd as base colors. + 50 means lightest, 900 means darkest; less used intermediate shades are omitted + but can be added when needed by accessing full palette from the above link. + */ + --mystnb-neutral-palette-50: #fcfcfc; + --mystnb-neutral-palette-100: #f7f7f7; + --mystnb-neutral-palette-400: #cccccc; + --mystnb-neutral-palette-500: #afafaf; + --mystnb-neutral-palette-800: #505050; + --mystnb-neutral-palette-900: #2d2d2d; + + --mystnb-danger-palette-50: #ffdddd; + --mystnb-danger-palette-100: #f5acad; + --mystnb-danger-palette-400: #c42029; + --mystnb-danger-palette-500: #b40008; + --mystnb-danger-palette-800: #850010; + --mystnb-danger-palette-900: #680010; + + /* MyST-NB specific variables; colors should be logically picked from palettes */ + --mystnb-source-bg-color: var(--light, var(--mystnb-neutral-palette-100)) var(--dark, var(--mystnb-neutral-palette-800)); + --mystnb-stdout-bg-color: var(--light, var(--mystnb-neutral-palette-50)) var(--dark, var(--mystnb-neutral-palette-900)); + --mystnb-stderr-bg-color: var(--light, var(--mystnb-danger-palette-50)) var(--dark, var(--mystnb-danger-palette-900)); + --mystnb-traceback-bg-color: var(--light, var(--mystnb-neutral-palette-50)) var(--dark, var(--mystnb-neutral-palette-900)); + --mystnb-source-border-color: var(--light, var(--mystnb-neutral-palette-400)) var(--dark, var(--mystnb-neutral-palette-500)); + --mystnb-source-margin-color: green; + --mystnb-stdout-border-color: var(--light, var(--mystnb-neutral-palette-100)) var(--dark, var(--mystnb-neutral-palette-800)); + --mystnb-stderr-border-color: var(--light, var(--mystnb-neutral-palette-100)) var(--dark, var(--mystnb-neutral-palette-800)); + --mystnb-traceback-border-color: var(--light, var(--mystnb-danger-palette-100)) var(--dark, var(--mystnb-danger-palette-800)); + --mystnb-hide-prompt-opacity: 70%; + --mystnb-source-border-radius: .4em; + --mystnb-source-border-width: 1px; + --mystnb-scrollbar-width: 0.3rem; + --mystnb-scrollbar-height: 0.3rem; + --mystnb-scrollbar-thumb-color: var(--light, var(--mystnb-neutral-palette-400)) var(--dark, var(--mystnb-neutral-palette-500)); + --mystnb-scrollbar-thumb-hover-color: var(--light, var(--mystnb-neutral-palette-500)) var(--dark, var(--mystnb-neutral-palette-400)); + --mystnb-scrollbar-thumb-border-radius: 0.25rem; +} + + +/* Whole cell */ +div.container.cell { + padding-left: 0; + margin-bottom: 1em; +} + +/* Removing all background formatting so we can control at the div level */ +.cell_input div.highlight, +.cell_output pre, +.cell_input pre, +.cell_output .output { + border: none; + box-shadow: none; +} + +.cell_output .output pre, +.cell_input pre { + margin: 0px; +} + +/* Input cells */ +div.cell > div.cell_input { + padding-left: 0em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + background-color: var(--mystnb-source-bg-color); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; + border-radius: var(--mystnb-source-border-radius); +} + +div.cell_input>div, +div.cell_output div.output>div.highlight { + margin: 0em !important; + border: none !important; +} + +/* All cell outputs */ +.cell_output { + padding-left: 1em; + padding-right: 0em; + margin-top: 1em; +} + +/* Text outputs from cells */ +.cell_output .output.text_plain, +.cell_output .output.traceback, +.cell_output .output.stream, +.cell_output .output.stderr { + margin-top: 1em; + margin-bottom: 0em; + box-shadow: none; +} + +.cell_output .output.text_plain:not(:has(.highlight)), +.cell_output .output.stream:not(:has(.highlight)) { + /* plain (or stream of) output, not containing a pygments-highlighted block */ + background: var(--mystnb-stdout-bg-color); + border: 1px solid var(--mystnb-stdout-border-color); +} + +.cell_output .output.stderr { + background: var(--mystnb-stderr-bg-color); + border: 1px solid var(--mystnb-stderr-border-color); +} + +.cell_output .output.traceback { + background: var(--mystnb-traceback-bg-color); + border: 1px solid var(--mystnb-traceback-border-color); +} + +/* --- Collapsible cell content --- */ + +/* +encourage summary container to blend in with its parent. +p.admonition-title should hold the title styles. +*/ +div.cell details.hide summary { + border-left: unset; + padding: inherit; + margin: inherit; + background-color: inherit; +} + +/* Neighboring input/output elements - spacing, borders */ +div.cell details.hide.above-input + details.below-input, +div.cell div.cell_input + details.below-input +{ + margin-top: 0; +} + +div.cell details.hide.above-input:has(+ details.below-input), +div.cell div.cell_input:has(+ details.below-input) +{ + margin-bottom: 0; +} + +div.cell:has(> *:nth-child(2)) div.cell_input:first-child, +div.cell:has(> *:nth-child(2)) details:first-child +{ + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +div.cell:has(> *:nth-child(2)) div.cell_input:last-child, +div.cell:has(> *:nth-child(2)) details:last-child +{ + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +/* intra-label styles for collapsibles */ +div.cell.container details.hide.above-input>summary, +div.cell.container details.hide.below-input>summary, +div.cell.container details.hide.above-output>summary +{ + display: block; + border-left: none; +} + +div.cell details.hide>summary>p.admonition-title { + display: list-item; + margin-bottom: 0; +} + +div.cell details.hide:not([open]) { + padding-bottom: 0; +} + +div.cell details.hide[open]>summary>p.collapsed { + display: none; +} + +div.cell details.hide:not([open])>summary>p.expanded { + display: none; +} + +@keyframes collapsed-fade-in { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} +div.cell details.hide[open]>summary~* { + -moz-animation: collapsed-fade-in 0.3s ease-in-out; + -webkit-animation: collapsed-fade-in 0.3s ease-in-out; + animation: collapsed-fade-in 0.3s ease-in-out; +} + +/* Clear conflicting styles for details and admonitions set by some themes */ +div.cell details.admonition summary::before { + content: unset; +} + +/* Math align to the left */ +.cell_output .MathJax_Display { + text-align: left !important; +} + +/** source code line numbers **/ +span.linenos { + opacity: 0.5; +} + +/* Inline text from `paste` operation */ + +span.pasted-text { + font-weight: bold; +} + +span.pasted-inline img { + max-height: 2em; +} + +tbody span.pasted-inline img { + max-height: none; +} + + +/* Adding scroll bars if tags: output_scroll, scroll-output, and scroll-input + * On screens, we want to scroll, but on print show all + * + * It was before in https://github.com/executablebooks/sphinx-book-theme/blob/eb1b6baf098b27605e8f2b7b2979b17ebf1b9540/src/sphinx_book_theme/assets/styles/extensions/_myst-nb.scss +*/ +div.cell:is( + .tag_output_scroll, + .tag_scroll-output, + .config_scroll_outputs + ) + div.cell_output, +div.cell.tag_scroll-input div.cell_input { + max-height: 24em; + overflow-y: auto; + max-width: 100%; + overflow-x: auto; +} + +div.cell.config_scroll_outputs div.cell_output:has(img) { + /* If the output cell has image(s), allow it to take 90% of viewport height + but still bounded between 24em and 60em */ + max-height: clamp(24em, 90vh, 60em); +} + +/* Custom scrollbars */ +div.cell:is( + .tag_output_scroll, + .tag_scroll-output, + .config_scroll_outputs + ) + div.cell_output::-webkit-scrollbar, +div.cell.tag_scroll-input div.cell_input::-webkit-scrollbar { + width: var(--mystnb-scrollbar-width); + height: var(--mystnb-scrollbar-height); +} + +div.cell:is( + .tag_output_scroll, + .tag_scroll-output, + .config_scroll_outputs + ) + div.cell_output::-webkit-scrollbar-thumb, +div.cell.tag_scroll-input div.cell_input::-webkit-scrollbar-thumb { + background: var(--mystnb-scrollbar-thumb-color); + border-radius: var(--mystnb-scrollbar-thumb-border-radius); +} + +div.cell:is( + .tag_output_scroll, + .tag_scroll-output, + .config_scroll_outputs + ) + div.cell_output::-webkit-scrollbar-thumb:hover, +div.cell.tag_scroll-input div.cell_input::-webkit-scrollbar-thumb:hover { + background: var(--mystnb-scrollbar-thumb-hover-color); +} + +/* In print mode, unset scroll styles */ +@media print { + div.cell:is( + .tag_output_scroll, + .tag_scroll-output, + .config_scroll_outputs + ) + div.cell_output, + div.cell.tag_scroll-input div.cell_input { + max-height: unset; + overflow-y: visible; + max-width: unset; + overflow-x: visible; + } +} + +/* Font colors for translated ANSI escape sequences +Color values are copied from Jupyter Notebook +https://github.com/jupyter/notebook/blob/52581f8eda9b319eb0390ac77fe5903c38f81e3e/notebook/static/notebook/less/ansicolors.less#L14-L21 +Background colors from +https://nbsphinx.readthedocs.io/en/latest/code-cells.html#ANSI-Colors +*/ +div.highlight .-Color-Bold { + font-weight: bold; +} + +div.highlight .-Color[class*=-Black] { + color: #3E424D +} + +div.highlight .-Color[class*=-Red] { + color: #E75C58 +} + +div.highlight .-Color[class*=-Green] { + color: #00A250 +} + +div.highlight .-Color[class*=-Yellow] { + color: #DDB62B +} + +div.highlight .-Color[class*=-Blue] { + color: #208FFB +} + +div.highlight .-Color[class*=-Magenta] { + color: #D160C4 +} + +div.highlight .-Color[class*=-Cyan] { + color: #60C6C8 +} + +div.highlight .-Color[class*=-White] { + color: #C5C1B4 +} + +div.highlight .-Color[class*=-BGBlack] { + background-color: #3E424D +} + +div.highlight .-Color[class*=-BGRed] { + background-color: #E75C58 +} + +div.highlight .-Color[class*=-BGGreen] { + background-color: #00A250 +} + +div.highlight .-Color[class*=-BGYellow] { + background-color: #DDB62B +} + +div.highlight .-Color[class*=-BGBlue] { + background-color: #208FFB +} + +div.highlight .-Color[class*=-BGMagenta] { + background-color: #D160C4 +} + +div.highlight .-Color[class*=-BGCyan] { + background-color: #60C6C8 +} + +div.highlight .-Color[class*=-BGWhite] { + background-color: #C5C1B4 +} + +/* Font colors for 8-bit ANSI */ + +div.highlight .-Color[class*=-C0] { + color: #000000 +} + +div.highlight .-Color[class*=-BGC0] { + background-color: #000000 +} + +div.highlight .-Color[class*=-C1] { + color: #800000 +} + +div.highlight .-Color[class*=-BGC1] { + background-color: #800000 +} + +div.highlight .-Color[class*=-C2] { + color: #008000 +} + +div.highlight .-Color[class*=-BGC2] { + background-color: #008000 +} + +div.highlight .-Color[class*=-C3] { + color: #808000 +} + +div.highlight .-Color[class*=-BGC3] { + background-color: #808000 +} + +div.highlight .-Color[class*=-C4] { + color: #000080 +} + +div.highlight .-Color[class*=-BGC4] { + background-color: #000080 +} + +div.highlight .-Color[class*=-C5] { + color: #800080 +} + +div.highlight .-Color[class*=-BGC5] { + background-color: #800080 +} + +div.highlight .-Color[class*=-C6] { + color: #008080 +} + +div.highlight .-Color[class*=-BGC6] { + background-color: #008080 +} + +div.highlight .-Color[class*=-C7] { + color: #C0C0C0 +} + +div.highlight .-Color[class*=-BGC7] { + background-color: #C0C0C0 +} + +div.highlight .-Color[class*=-C8] { + color: #808080 +} + +div.highlight .-Color[class*=-BGC8] { + background-color: #808080 +} + +div.highlight .-Color[class*=-C9] { + color: #FF0000 +} + +div.highlight .-Color[class*=-BGC9] { + background-color: #FF0000 +} + +div.highlight .-Color[class*=-C10] { + color: #00FF00 +} + +div.highlight .-Color[class*=-BGC10] { + background-color: #00FF00 +} + +div.highlight .-Color[class*=-C11] { + color: #FFFF00 +} + +div.highlight .-Color[class*=-BGC11] { + background-color: #FFFF00 +} + +div.highlight .-Color[class*=-C12] { + color: #0000FF +} + +div.highlight .-Color[class*=-BGC12] { + background-color: #0000FF +} + +div.highlight .-Color[class*=-C13] { + color: #FF00FF +} + +div.highlight .-Color[class*=-BGC13] { + background-color: #FF00FF +} + +div.highlight .-Color[class*=-C14] { + color: #00FFFF +} + +div.highlight .-Color[class*=-BGC14] { + background-color: #00FFFF +} + +div.highlight .-Color[class*=-C15] { + color: #FFFFFF +} + +div.highlight .-Color[class*=-BGC15] { + background-color: #FFFFFF +} + +div.highlight .-Color[class*=-C16] { + color: #000000 +} + +div.highlight .-Color[class*=-BGC16] { + background-color: #000000 +} + +div.highlight .-Color[class*=-C17] { + color: #00005F +} + +div.highlight .-Color[class*=-BGC17] { + background-color: #00005F +} + +div.highlight .-Color[class*=-C18] { + color: #000087 +} + +div.highlight .-Color[class*=-BGC18] { + background-color: #000087 +} + +div.highlight .-Color[class*=-C19] { + color: #0000AF +} + +div.highlight .-Color[class*=-BGC19] { + background-color: #0000AF +} + +div.highlight .-Color[class*=-C20] { + color: #0000D7 +} + +div.highlight .-Color[class*=-BGC20] { + background-color: #0000D7 +} + +div.highlight .-Color[class*=-C21] { + color: #0000FF +} + +div.highlight .-Color[class*=-BGC21] { + background-color: #0000FF +} + +div.highlight .-Color[class*=-C22] { + color: #005F00 +} + +div.highlight .-Color[class*=-BGC22] { + background-color: #005F00 +} + +div.highlight .-Color[class*=-C23] { + color: #005F5F +} + +div.highlight .-Color[class*=-BGC23] { + background-color: #005F5F +} + +div.highlight .-Color[class*=-C24] { + color: #005F87 +} + +div.highlight .-Color[class*=-BGC24] { + background-color: #005F87 +} + +div.highlight .-Color[class*=-C25] { + color: #005FAF +} + +div.highlight .-Color[class*=-BGC25] { + background-color: #005FAF +} + +div.highlight .-Color[class*=-C26] { + color: #005FD7 +} + +div.highlight .-Color[class*=-BGC26] { + background-color: #005FD7 +} + +div.highlight .-Color[class*=-C27] { + color: #005FFF +} + +div.highlight .-Color[class*=-BGC27] { + background-color: #005FFF +} + +div.highlight .-Color[class*=-C28] { + color: #008700 +} + +div.highlight .-Color[class*=-BGC28] { + background-color: #008700 +} + +div.highlight .-Color[class*=-C29] { + color: #00875F +} + +div.highlight .-Color[class*=-BGC29] { + background-color: #00875F +} + +div.highlight .-Color[class*=-C30] { + color: #008787 +} + +div.highlight .-Color[class*=-BGC30] { + background-color: #008787 +} + +div.highlight .-Color[class*=-C31] { + color: #0087AF +} + +div.highlight .-Color[class*=-BGC31] { + background-color: #0087AF +} + +div.highlight .-Color[class*=-C32] { + color: #0087D7 +} + +div.highlight .-Color[class*=-BGC32] { + background-color: #0087D7 +} + +div.highlight .-Color[class*=-C33] { + color: #0087FF +} + +div.highlight .-Color[class*=-BGC33] { + background-color: #0087FF +} + +div.highlight .-Color[class*=-C34] { + color: #00AF00 +} + +div.highlight .-Color[class*=-BGC34] { + background-color: #00AF00 +} + +div.highlight .-Color[class*=-C35] { + color: #00AF5F +} + +div.highlight .-Color[class*=-BGC35] { + background-color: #00AF5F +} + +div.highlight .-Color[class*=-C36] { + color: #00AF87 +} + +div.highlight .-Color[class*=-BGC36] { + background-color: #00AF87 +} + +div.highlight .-Color[class*=-C37] { + color: #00AFAF +} + +div.highlight .-Color[class*=-BGC37] { + background-color: #00AFAF +} + +div.highlight .-Color[class*=-C38] { + color: #00AFD7 +} + +div.highlight .-Color[class*=-BGC38] { + background-color: #00AFD7 +} + +div.highlight .-Color[class*=-C39] { + color: #00AFFF +} + +div.highlight .-Color[class*=-BGC39] { + background-color: #00AFFF +} + +div.highlight .-Color[class*=-C40] { + color: #00D700 +} + +div.highlight .-Color[class*=-BGC40] { + background-color: #00D700 +} + +div.highlight .-Color[class*=-C41] { + color: #00D75F +} + +div.highlight .-Color[class*=-BGC41] { + background-color: #00D75F +} + +div.highlight .-Color[class*=-C42] { + color: #00D787 +} + +div.highlight .-Color[class*=-BGC42] { + background-color: #00D787 +} + +div.highlight .-Color[class*=-C43] { + color: #00D7AF +} + +div.highlight .-Color[class*=-BGC43] { + background-color: #00D7AF +} + +div.highlight .-Color[class*=-C44] { + color: #00D7D7 +} + +div.highlight .-Color[class*=-BGC44] { + background-color: #00D7D7 +} + +div.highlight .-Color[class*=-C45] { + color: #00D7FF +} + +div.highlight .-Color[class*=-BGC45] { + background-color: #00D7FF +} + +div.highlight .-Color[class*=-C46] { + color: #00FF00 +} + +div.highlight .-Color[class*=-BGC46] { + background-color: #00FF00 +} + +div.highlight .-Color[class*=-C47] { + color: #00FF5F +} + +div.highlight .-Color[class*=-BGC47] { + background-color: #00FF5F +} + +div.highlight .-Color[class*=-C48] { + color: #00FF87 +} + +div.highlight .-Color[class*=-BGC48] { + background-color: #00FF87 +} + +div.highlight .-Color[class*=-C49] { + color: #00FFAF +} + +div.highlight .-Color[class*=-BGC49] { + background-color: #00FFAF +} + +div.highlight .-Color[class*=-C50] { + color: #00FFD7 +} + +div.highlight .-Color[class*=-BGC50] { + background-color: #00FFD7 +} + +div.highlight .-Color[class*=-C51] { + color: #00FFFF +} + +div.highlight .-Color[class*=-BGC51] { + background-color: #00FFFF +} + +div.highlight .-Color[class*=-C52] { + color: #5F0000 +} + +div.highlight .-Color[class*=-BGC52] { + background-color: #5F0000 +} + +div.highlight .-Color[class*=-C53] { + color: #5F005F +} + +div.highlight .-Color[class*=-BGC53] { + background-color: #5F005F +} + +div.highlight .-Color[class*=-C54] { + color: #5F0087 +} + +div.highlight .-Color[class*=-BGC54] { + background-color: #5F0087 +} + +div.highlight .-Color[class*=-C55] { + color: #5F00AF +} + +div.highlight .-Color[class*=-BGC55] { + background-color: #5F00AF +} + +div.highlight .-Color[class*=-C56] { + color: #5F00D7 +} + +div.highlight .-Color[class*=-BGC56] { + background-color: #5F00D7 +} + +div.highlight .-Color[class*=-C57] { + color: #5F00FF +} + +div.highlight .-Color[class*=-BGC57] { + background-color: #5F00FF +} + +div.highlight .-Color[class*=-C58] { + color: #5F5F00 +} + +div.highlight .-Color[class*=-BGC58] { + background-color: #5F5F00 +} + +div.highlight .-Color[class*=-C59] { + color: #5F5F5F +} + +div.highlight .-Color[class*=-BGC59] { + background-color: #5F5F5F +} + +div.highlight .-Color[class*=-C60] { + color: #5F5F87 +} + +div.highlight .-Color[class*=-BGC60] { + background-color: #5F5F87 +} + +div.highlight .-Color[class*=-C61] { + color: #5F5FAF +} + +div.highlight .-Color[class*=-BGC61] { + background-color: #5F5FAF +} + +div.highlight .-Color[class*=-C62] { + color: #5F5FD7 +} + +div.highlight .-Color[class*=-BGC62] { + background-color: #5F5FD7 +} + +div.highlight .-Color[class*=-C63] { + color: #5F5FFF +} + +div.highlight .-Color[class*=-BGC63] { + background-color: #5F5FFF +} + +div.highlight .-Color[class*=-C64] { + color: #5F8700 +} + +div.highlight .-Color[class*=-BGC64] { + background-color: #5F8700 +} + +div.highlight .-Color[class*=-C65] { + color: #5F875F +} + +div.highlight .-Color[class*=-BGC65] { + background-color: #5F875F +} + +div.highlight .-Color[class*=-C66] { + color: #5F8787 +} + +div.highlight .-Color[class*=-BGC66] { + background-color: #5F8787 +} + +div.highlight .-Color[class*=-C67] { + color: #5F87AF +} + +div.highlight .-Color[class*=-BGC67] { + background-color: #5F87AF +} + +div.highlight .-Color[class*=-C68] { + color: #5F87D7 +} + +div.highlight .-Color[class*=-BGC68] { + background-color: #5F87D7 +} + +div.highlight .-Color[class*=-C69] { + color: #5F87FF +} + +div.highlight .-Color[class*=-BGC69] { + background-color: #5F87FF +} + +div.highlight .-Color[class*=-C70] { + color: #5FAF00 +} + +div.highlight .-Color[class*=-BGC70] { + background-color: #5FAF00 +} + +div.highlight .-Color[class*=-C71] { + color: #5FAF5F +} + +div.highlight .-Color[class*=-BGC71] { + background-color: #5FAF5F +} + +div.highlight .-Color[class*=-C72] { + color: #5FAF87 +} + +div.highlight .-Color[class*=-BGC72] { + background-color: #5FAF87 +} + +div.highlight .-Color[class*=-C73] { + color: #5FAFAF +} + +div.highlight .-Color[class*=-BGC73] { + background-color: #5FAFAF +} + +div.highlight .-Color[class*=-C74] { + color: #5FAFD7 +} + +div.highlight .-Color[class*=-BGC74] { + background-color: #5FAFD7 +} + +div.highlight .-Color[class*=-C75] { + color: #5FAFFF +} + +div.highlight .-Color[class*=-BGC75] { + background-color: #5FAFFF +} + +div.highlight .-Color[class*=-C76] { + color: #5FD700 +} + +div.highlight .-Color[class*=-BGC76] { + background-color: #5FD700 +} + +div.highlight .-Color[class*=-C77] { + color: #5FD75F +} + +div.highlight .-Color[class*=-BGC77] { + background-color: #5FD75F +} + +div.highlight .-Color[class*=-C78] { + color: #5FD787 +} + +div.highlight .-Color[class*=-BGC78] { + background-color: #5FD787 +} + +div.highlight .-Color[class*=-C79] { + color: #5FD7AF +} + +div.highlight .-Color[class*=-BGC79] { + background-color: #5FD7AF +} + +div.highlight .-Color[class*=-C80] { + color: #5FD7D7 +} + +div.highlight .-Color[class*=-BGC80] { + background-color: #5FD7D7 +} + +div.highlight .-Color[class*=-C81] { + color: #5FD7FF +} + +div.highlight .-Color[class*=-BGC81] { + background-color: #5FD7FF +} + +div.highlight .-Color[class*=-C82] { + color: #5FFF00 +} + +div.highlight .-Color[class*=-BGC82] { + background-color: #5FFF00 +} + +div.highlight .-Color[class*=-C83] { + color: #5FFF5F +} + +div.highlight .-Color[class*=-BGC83] { + background-color: #5FFF5F +} + +div.highlight .-Color[class*=-C84] { + color: #5FFF87 +} + +div.highlight .-Color[class*=-BGC84] { + background-color: #5FFF87 +} + +div.highlight .-Color[class*=-C85] { + color: #5FFFAF +} + +div.highlight .-Color[class*=-BGC85] { + background-color: #5FFFAF +} + +div.highlight .-Color[class*=-C86] { + color: #5FFFD7 +} + +div.highlight .-Color[class*=-BGC86] { + background-color: #5FFFD7 +} + +div.highlight .-Color[class*=-C87] { + color: #5FFFFF +} + +div.highlight .-Color[class*=-BGC87] { + background-color: #5FFFFF +} + +div.highlight .-Color[class*=-C88] { + color: #870000 +} + +div.highlight .-Color[class*=-BGC88] { + background-color: #870000 +} + +div.highlight .-Color[class*=-C89] { + color: #87005F +} + +div.highlight .-Color[class*=-BGC89] { + background-color: #87005F +} + +div.highlight .-Color[class*=-C90] { + color: #870087 +} + +div.highlight .-Color[class*=-BGC90] { + background-color: #870087 +} + +div.highlight .-Color[class*=-C91] { + color: #8700AF +} + +div.highlight .-Color[class*=-BGC91] { + background-color: #8700AF +} + +div.highlight .-Color[class*=-C92] { + color: #8700D7 +} + +div.highlight .-Color[class*=-BGC92] { + background-color: #8700D7 +} + +div.highlight .-Color[class*=-C93] { + color: #8700FF +} + +div.highlight .-Color[class*=-BGC93] { + background-color: #8700FF +} + +div.highlight .-Color[class*=-C94] { + color: #875F00 +} + +div.highlight .-Color[class*=-BGC94] { + background-color: #875F00 +} + +div.highlight .-Color[class*=-C95] { + color: #875F5F +} + +div.highlight .-Color[class*=-BGC95] { + background-color: #875F5F +} + +div.highlight .-Color[class*=-C96] { + color: #875F87 +} + +div.highlight .-Color[class*=-BGC96] { + background-color: #875F87 +} + +div.highlight .-Color[class*=-C97] { + color: #875FAF +} + +div.highlight .-Color[class*=-BGC97] { + background-color: #875FAF +} + +div.highlight .-Color[class*=-C98] { + color: #875FD7 +} + +div.highlight .-Color[class*=-BGC98] { + background-color: #875FD7 +} + +div.highlight .-Color[class*=-C99] { + color: #875FFF +} + +div.highlight .-Color[class*=-BGC99] { + background-color: #875FFF +} + +div.highlight .-Color[class*=-C100] { + color: #878700 +} + +div.highlight .-Color[class*=-BGC100] { + background-color: #878700 +} + +div.highlight .-Color[class*=-C101] { + color: #87875F +} + +div.highlight .-Color[class*=-BGC101] { + background-color: #87875F +} + +div.highlight .-Color[class*=-C102] { + color: #878787 +} + +div.highlight .-Color[class*=-BGC102] { + background-color: #878787 +} + +div.highlight .-Color[class*=-C103] { + color: #8787AF +} + +div.highlight .-Color[class*=-BGC103] { + background-color: #8787AF +} + +div.highlight .-Color[class*=-C104] { + color: #8787D7 +} + +div.highlight .-Color[class*=-BGC104] { + background-color: #8787D7 +} + +div.highlight .-Color[class*=-C105] { + color: #8787FF +} + +div.highlight .-Color[class*=-BGC105] { + background-color: #8787FF +} + +div.highlight .-Color[class*=-C106] { + color: #87AF00 +} + +div.highlight .-Color[class*=-BGC106] { + background-color: #87AF00 +} + +div.highlight .-Color[class*=-C107] { + color: #87AF5F +} + +div.highlight .-Color[class*=-BGC107] { + background-color: #87AF5F +} + +div.highlight .-Color[class*=-C108] { + color: #87AF87 +} + +div.highlight .-Color[class*=-BGC108] { + background-color: #87AF87 +} + +div.highlight .-Color[class*=-C109] { + color: #87AFAF +} + +div.highlight .-Color[class*=-BGC109] { + background-color: #87AFAF +} + +div.highlight .-Color[class*=-C110] { + color: #87AFD7 +} + +div.highlight .-Color[class*=-BGC110] { + background-color: #87AFD7 +} + +div.highlight .-Color[class*=-C111] { + color: #87AFFF +} + +div.highlight .-Color[class*=-BGC111] { + background-color: #87AFFF +} + +div.highlight .-Color[class*=-C112] { + color: #87D700 +} + +div.highlight .-Color[class*=-BGC112] { + background-color: #87D700 +} + +div.highlight .-Color[class*=-C113] { + color: #87D75F +} + +div.highlight .-Color[class*=-BGC113] { + background-color: #87D75F +} + +div.highlight .-Color[class*=-C114] { + color: #87D787 +} + +div.highlight .-Color[class*=-BGC114] { + background-color: #87D787 +} + +div.highlight .-Color[class*=-C115] { + color: #87D7AF +} + +div.highlight .-Color[class*=-BGC115] { + background-color: #87D7AF +} + +div.highlight .-Color[class*=-C116] { + color: #87D7D7 +} + +div.highlight .-Color[class*=-BGC116] { + background-color: #87D7D7 +} + +div.highlight .-Color[class*=-C117] { + color: #87D7FF +} + +div.highlight .-Color[class*=-BGC117] { + background-color: #87D7FF +} + +div.highlight .-Color[class*=-C118] { + color: #87FF00 +} + +div.highlight .-Color[class*=-BGC118] { + background-color: #87FF00 +} + +div.highlight .-Color[class*=-C119] { + color: #87FF5F +} + +div.highlight .-Color[class*=-BGC119] { + background-color: #87FF5F +} + +div.highlight .-Color[class*=-C120] { + color: #87FF87 +} + +div.highlight .-Color[class*=-BGC120] { + background-color: #87FF87 +} + +div.highlight .-Color[class*=-C121] { + color: #87FFAF +} + +div.highlight .-Color[class*=-BGC121] { + background-color: #87FFAF +} + +div.highlight .-Color[class*=-C122] { + color: #87FFD7 +} + +div.highlight .-Color[class*=-BGC122] { + background-color: #87FFD7 +} + +div.highlight .-Color[class*=-C123] { + color: #87FFFF +} + +div.highlight .-Color[class*=-BGC123] { + background-color: #87FFFF +} + +div.highlight .-Color[class*=-C124] { + color: #AF0000 +} + +div.highlight .-Color[class*=-BGC124] { + background-color: #AF0000 +} + +div.highlight .-Color[class*=-C125] { + color: #AF005F +} + +div.highlight .-Color[class*=-BGC125] { + background-color: #AF005F +} + +div.highlight .-Color[class*=-C126] { + color: #AF0087 +} + +div.highlight .-Color[class*=-BGC126] { + background-color: #AF0087 +} + +div.highlight .-Color[class*=-C127] { + color: #AF00AF +} + +div.highlight .-Color[class*=-BGC127] { + background-color: #AF00AF +} + +div.highlight .-Color[class*=-C128] { + color: #AF00D7 +} + +div.highlight .-Color[class*=-BGC128] { + background-color: #AF00D7 +} + +div.highlight .-Color[class*=-C129] { + color: #AF00FF +} + +div.highlight .-Color[class*=-BGC129] { + background-color: #AF00FF +} + +div.highlight .-Color[class*=-C130] { + color: #AF5F00 +} + +div.highlight .-Color[class*=-BGC130] { + background-color: #AF5F00 +} + +div.highlight .-Color[class*=-C131] { + color: #AF5F5F +} + +div.highlight .-Color[class*=-BGC131] { + background-color: #AF5F5F +} + +div.highlight .-Color[class*=-C132] { + color: #AF5F87 +} + +div.highlight .-Color[class*=-BGC132] { + background-color: #AF5F87 +} + +div.highlight .-Color[class*=-C133] { + color: #AF5FAF +} + +div.highlight .-Color[class*=-BGC133] { + background-color: #AF5FAF +} + +div.highlight .-Color[class*=-C134] { + color: #AF5FD7 +} + +div.highlight .-Color[class*=-BGC134] { + background-color: #AF5FD7 +} + +div.highlight .-Color[class*=-C135] { + color: #AF5FFF +} + +div.highlight .-Color[class*=-BGC135] { + background-color: #AF5FFF +} + +div.highlight .-Color[class*=-C136] { + color: #AF8700 +} + +div.highlight .-Color[class*=-BGC136] { + background-color: #AF8700 +} + +div.highlight .-Color[class*=-C137] { + color: #AF875F +} + +div.highlight .-Color[class*=-BGC137] { + background-color: #AF875F +} + +div.highlight .-Color[class*=-C138] { + color: #AF8787 +} + +div.highlight .-Color[class*=-BGC138] { + background-color: #AF8787 +} + +div.highlight .-Color[class*=-C139] { + color: #AF87AF +} + +div.highlight .-Color[class*=-BGC139] { + background-color: #AF87AF +} + +div.highlight .-Color[class*=-C140] { + color: #AF87D7 +} + +div.highlight .-Color[class*=-BGC140] { + background-color: #AF87D7 +} + +div.highlight .-Color[class*=-C141] { + color: #AF87FF +} + +div.highlight .-Color[class*=-BGC141] { + background-color: #AF87FF +} + +div.highlight .-Color[class*=-C142] { + color: #AFAF00 +} + +div.highlight .-Color[class*=-BGC142] { + background-color: #AFAF00 +} + +div.highlight .-Color[class*=-C143] { + color: #AFAF5F +} + +div.highlight .-Color[class*=-BGC143] { + background-color: #AFAF5F +} + +div.highlight .-Color[class*=-C144] { + color: #AFAF87 +} + +div.highlight .-Color[class*=-BGC144] { + background-color: #AFAF87 +} + +div.highlight .-Color[class*=-C145] { + color: #AFAFAF +} + +div.highlight .-Color[class*=-BGC145] { + background-color: #AFAFAF +} + +div.highlight .-Color[class*=-C146] { + color: #AFAFD7 +} + +div.highlight .-Color[class*=-BGC146] { + background-color: #AFAFD7 +} + +div.highlight .-Color[class*=-C147] { + color: #AFAFFF +} + +div.highlight .-Color[class*=-BGC147] { + background-color: #AFAFFF +} + +div.highlight .-Color[class*=-C148] { + color: #AFD700 +} + +div.highlight .-Color[class*=-BGC148] { + background-color: #AFD700 +} + +div.highlight .-Color[class*=-C149] { + color: #AFD75F +} + +div.highlight .-Color[class*=-BGC149] { + background-color: #AFD75F +} + +div.highlight .-Color[class*=-C150] { + color: #AFD787 +} + +div.highlight .-Color[class*=-BGC150] { + background-color: #AFD787 +} + +div.highlight .-Color[class*=-C151] { + color: #AFD7AF +} + +div.highlight .-Color[class*=-BGC151] { + background-color: #AFD7AF +} + +div.highlight .-Color[class*=-C152] { + color: #AFD7D7 +} + +div.highlight .-Color[class*=-BGC152] { + background-color: #AFD7D7 +} + +div.highlight .-Color[class*=-C153] { + color: #AFD7FF +} + +div.highlight .-Color[class*=-BGC153] { + background-color: #AFD7FF +} + +div.highlight .-Color[class*=-C154] { + color: #AFFF00 +} + +div.highlight .-Color[class*=-BGC154] { + background-color: #AFFF00 +} + +div.highlight .-Color[class*=-C155] { + color: #AFFF5F +} + +div.highlight .-Color[class*=-BGC155] { + background-color: #AFFF5F +} + +div.highlight .-Color[class*=-C156] { + color: #AFFF87 +} + +div.highlight .-Color[class*=-BGC156] { + background-color: #AFFF87 +} + +div.highlight .-Color[class*=-C157] { + color: #AFFFAF +} + +div.highlight .-Color[class*=-BGC157] { + background-color: #AFFFAF +} + +div.highlight .-Color[class*=-C158] { + color: #AFFFD7 +} + +div.highlight .-Color[class*=-BGC158] { + background-color: #AFFFD7 +} + +div.highlight .-Color[class*=-C159] { + color: #AFFFFF +} + +div.highlight .-Color[class*=-BGC159] { + background-color: #AFFFFF +} + +div.highlight .-Color[class*=-C160] { + color: #D70000 +} + +div.highlight .-Color[class*=-BGC160] { + background-color: #D70000 +} + +div.highlight .-Color[class*=-C161] { + color: #D7005F +} + +div.highlight .-Color[class*=-BGC161] { + background-color: #D7005F +} + +div.highlight .-Color[class*=-C162] { + color: #D70087 +} + +div.highlight .-Color[class*=-BGC162] { + background-color: #D70087 +} + +div.highlight .-Color[class*=-C163] { + color: #D700AF +} + +div.highlight .-Color[class*=-BGC163] { + background-color: #D700AF +} + +div.highlight .-Color[class*=-C164] { + color: #D700D7 +} + +div.highlight .-Color[class*=-BGC164] { + background-color: #D700D7 +} + +div.highlight .-Color[class*=-C165] { + color: #D700FF +} + +div.highlight .-Color[class*=-BGC165] { + background-color: #D700FF +} + +div.highlight .-Color[class*=-C166] { + color: #D75F00 +} + +div.highlight .-Color[class*=-BGC166] { + background-color: #D75F00 +} + +div.highlight .-Color[class*=-C167] { + color: #D75F5F +} + +div.highlight .-Color[class*=-BGC167] { + background-color: #D75F5F +} + +div.highlight .-Color[class*=-C168] { + color: #D75F87 +} + +div.highlight .-Color[class*=-BGC168] { + background-color: #D75F87 +} + +div.highlight .-Color[class*=-C169] { + color: #D75FAF +} + +div.highlight .-Color[class*=-BGC169] { + background-color: #D75FAF +} + +div.highlight .-Color[class*=-C170] { + color: #D75FD7 +} + +div.highlight .-Color[class*=-BGC170] { + background-color: #D75FD7 +} + +div.highlight .-Color[class*=-C171] { + color: #D75FFF +} + +div.highlight .-Color[class*=-BGC171] { + background-color: #D75FFF +} + +div.highlight .-Color[class*=-C172] { + color: #D78700 +} + +div.highlight .-Color[class*=-BGC172] { + background-color: #D78700 +} + +div.highlight .-Color[class*=-C173] { + color: #D7875F +} + +div.highlight .-Color[class*=-BGC173] { + background-color: #D7875F +} + +div.highlight .-Color[class*=-C174] { + color: #D78787 +} + +div.highlight .-Color[class*=-BGC174] { + background-color: #D78787 +} + +div.highlight .-Color[class*=-C175] { + color: #D787AF +} + +div.highlight .-Color[class*=-BGC175] { + background-color: #D787AF +} + +div.highlight .-Color[class*=-C176] { + color: #D787D7 +} + +div.highlight .-Color[class*=-BGC176] { + background-color: #D787D7 +} + +div.highlight .-Color[class*=-C177] { + color: #D787FF +} + +div.highlight .-Color[class*=-BGC177] { + background-color: #D787FF +} + +div.highlight .-Color[class*=-C178] { + color: #D7AF00 +} + +div.highlight .-Color[class*=-BGC178] { + background-color: #D7AF00 +} + +div.highlight .-Color[class*=-C179] { + color: #D7AF5F +} + +div.highlight .-Color[class*=-BGC179] { + background-color: #D7AF5F +} + +div.highlight .-Color[class*=-C180] { + color: #D7AF87 +} + +div.highlight .-Color[class*=-BGC180] { + background-color: #D7AF87 +} + +div.highlight .-Color[class*=-C181] { + color: #D7AFAF +} + +div.highlight .-Color[class*=-BGC181] { + background-color: #D7AFAF +} + +div.highlight .-Color[class*=-C182] { + color: #D7AFD7 +} + +div.highlight .-Color[class*=-BGC182] { + background-color: #D7AFD7 +} + +div.highlight .-Color[class*=-C183] { + color: #D7AFFF +} + +div.highlight .-Color[class*=-BGC183] { + background-color: #D7AFFF +} + +div.highlight .-Color[class*=-C184] { + color: #D7D700 +} + +div.highlight .-Color[class*=-BGC184] { + background-color: #D7D700 +} + +div.highlight .-Color[class*=-C185] { + color: #D7D75F +} + +div.highlight .-Color[class*=-BGC185] { + background-color: #D7D75F +} + +div.highlight .-Color[class*=-C186] { + color: #D7D787 +} + +div.highlight .-Color[class*=-BGC186] { + background-color: #D7D787 +} + +div.highlight .-Color[class*=-C187] { + color: #D7D7AF +} + +div.highlight .-Color[class*=-BGC187] { + background-color: #D7D7AF +} + +div.highlight .-Color[class*=-C188] { + color: #D7D7D7 +} + +div.highlight .-Color[class*=-BGC188] { + background-color: #D7D7D7 +} + +div.highlight .-Color[class*=-C189] { + color: #D7D7FF +} + +div.highlight .-Color[class*=-BGC189] { + background-color: #D7D7FF +} + +div.highlight .-Color[class*=-C190] { + color: #D7FF00 +} + +div.highlight .-Color[class*=-BGC190] { + background-color: #D7FF00 +} + +div.highlight .-Color[class*=-C191] { + color: #D7FF5F +} + +div.highlight .-Color[class*=-BGC191] { + background-color: #D7FF5F +} + +div.highlight .-Color[class*=-C192] { + color: #D7FF87 +} + +div.highlight .-Color[class*=-BGC192] { + background-color: #D7FF87 +} + +div.highlight .-Color[class*=-C193] { + color: #D7FFAF +} + +div.highlight .-Color[class*=-BGC193] { + background-color: #D7FFAF +} + +div.highlight .-Color[class*=-C194] { + color: #D7FFD7 +} + +div.highlight .-Color[class*=-BGC194] { + background-color: #D7FFD7 +} + +div.highlight .-Color[class*=-C195] { + color: #D7FFFF +} + +div.highlight .-Color[class*=-BGC195] { + background-color: #D7FFFF +} + +div.highlight .-Color[class*=-C196] { + color: #FF0000 +} + +div.highlight .-Color[class*=-BGC196] { + background-color: #FF0000 +} + +div.highlight .-Color[class*=-C197] { + color: #FF005F +} + +div.highlight .-Color[class*=-BGC197] { + background-color: #FF005F +} + +div.highlight .-Color[class*=-C198] { + color: #FF0087 +} + +div.highlight .-Color[class*=-BGC198] { + background-color: #FF0087 +} + +div.highlight .-Color[class*=-C199] { + color: #FF00AF +} + +div.highlight .-Color[class*=-BGC199] { + background-color: #FF00AF +} + +div.highlight .-Color[class*=-C200] { + color: #FF00D7 +} + +div.highlight .-Color[class*=-BGC200] { + background-color: #FF00D7 +} + +div.highlight .-Color[class*=-C201] { + color: #FF00FF +} + +div.highlight .-Color[class*=-BGC201] { + background-color: #FF00FF +} + +div.highlight .-Color[class*=-C202] { + color: #FF5F00 +} + +div.highlight .-Color[class*=-BGC202] { + background-color: #FF5F00 +} + +div.highlight .-Color[class*=-C203] { + color: #FF5F5F +} + +div.highlight .-Color[class*=-BGC203] { + background-color: #FF5F5F +} + +div.highlight .-Color[class*=-C204] { + color: #FF5F87 +} + +div.highlight .-Color[class*=-BGC204] { + background-color: #FF5F87 +} + +div.highlight .-Color[class*=-C205] { + color: #FF5FAF +} + +div.highlight .-Color[class*=-BGC205] { + background-color: #FF5FAF +} + +div.highlight .-Color[class*=-C206] { + color: #FF5FD7 +} + +div.highlight .-Color[class*=-BGC206] { + background-color: #FF5FD7 +} + +div.highlight .-Color[class*=-C207] { + color: #FF5FFF +} + +div.highlight .-Color[class*=-BGC207] { + background-color: #FF5FFF +} + +div.highlight .-Color[class*=-C208] { + color: #FF8700 +} + +div.highlight .-Color[class*=-BGC208] { + background-color: #FF8700 +} + +div.highlight .-Color[class*=-C209] { + color: #FF875F +} + +div.highlight .-Color[class*=-BGC209] { + background-color: #FF875F +} + +div.highlight .-Color[class*=-C210] { + color: #FF8787 +} + +div.highlight .-Color[class*=-BGC210] { + background-color: #FF8787 +} + +div.highlight .-Color[class*=-C211] { + color: #FF87AF +} + +div.highlight .-Color[class*=-BGC211] { + background-color: #FF87AF +} + +div.highlight .-Color[class*=-C212] { + color: #FF87D7 +} + +div.highlight .-Color[class*=-BGC212] { + background-color: #FF87D7 +} + +div.highlight .-Color[class*=-C213] { + color: #FF87FF +} + +div.highlight .-Color[class*=-BGC213] { + background-color: #FF87FF +} + +div.highlight .-Color[class*=-C214] { + color: #FFAF00 +} + +div.highlight .-Color[class*=-BGC214] { + background-color: #FFAF00 +} + +div.highlight .-Color[class*=-C215] { + color: #FFAF5F +} + +div.highlight .-Color[class*=-BGC215] { + background-color: #FFAF5F +} + +div.highlight .-Color[class*=-C216] { + color: #FFAF87 +} + +div.highlight .-Color[class*=-BGC216] { + background-color: #FFAF87 +} + +div.highlight .-Color[class*=-C217] { + color: #FFAFAF +} + +div.highlight .-Color[class*=-BGC217] { + background-color: #FFAFAF +} + +div.highlight .-Color[class*=-C218] { + color: #FFAFD7 +} + +div.highlight .-Color[class*=-BGC218] { + background-color: #FFAFD7 +} + +div.highlight .-Color[class*=-C219] { + color: #FFAFFF +} + +div.highlight .-Color[class*=-BGC219] { + background-color: #FFAFFF +} + +div.highlight .-Color[class*=-C220] { + color: #FFD700 +} + +div.highlight .-Color[class*=-BGC220] { + background-color: #FFD700 +} + +div.highlight .-Color[class*=-C221] { + color: #FFD75F +} + +div.highlight .-Color[class*=-BGC221] { + background-color: #FFD75F +} + +div.highlight .-Color[class*=-C222] { + color: #FFD787 +} + +div.highlight .-Color[class*=-BGC222] { + background-color: #FFD787 +} + +div.highlight .-Color[class*=-C223] { + color: #FFD7AF +} + +div.highlight .-Color[class*=-BGC223] { + background-color: #FFD7AF +} + +div.highlight .-Color[class*=-C224] { + color: #FFD7D7 +} + +div.highlight .-Color[class*=-BGC224] { + background-color: #FFD7D7 +} + +div.highlight .-Color[class*=-C225] { + color: #FFD7FF +} + +div.highlight .-Color[class*=-BGC225] { + background-color: #FFD7FF +} + +div.highlight .-Color[class*=-C226] { + color: #FFFF00 +} + +div.highlight .-Color[class*=-BGC226] { + background-color: #FFFF00 +} + +div.highlight .-Color[class*=-C227] { + color: #FFFF5F +} + +div.highlight .-Color[class*=-BGC227] { + background-color: #FFFF5F +} + +div.highlight .-Color[class*=-C228] { + color: #FFFF87 +} + +div.highlight .-Color[class*=-BGC228] { + background-color: #FFFF87 +} + +div.highlight .-Color[class*=-C229] { + color: #FFFFAF +} + +div.highlight .-Color[class*=-BGC229] { + background-color: #FFFFAF +} + +div.highlight .-Color[class*=-C230] { + color: #FFFFD7 +} + +div.highlight .-Color[class*=-BGC230] { + background-color: #FFFFD7 +} + +div.highlight .-Color[class*=-C231] { + color: #FFFFFF +} + +div.highlight .-Color[class*=-BGC231] { + background-color: #FFFFFF +} + +div.highlight .-Color[class*=-C232] { + color: #080808 +} + +div.highlight .-Color[class*=-BGC232] { + background-color: #080808 +} + +div.highlight .-Color[class*=-C233] { + color: #121212 +} + +div.highlight .-Color[class*=-BGC233] { + background-color: #121212 +} + +div.highlight .-Color[class*=-C234] { + color: #1C1C1C +} + +div.highlight .-Color[class*=-BGC234] { + background-color: #1C1C1C +} + +div.highlight .-Color[class*=-C235] { + color: #262626 +} + +div.highlight .-Color[class*=-BGC235] { + background-color: #262626 +} + +div.highlight .-Color[class*=-C236] { + color: #303030 +} + +div.highlight .-Color[class*=-BGC236] { + background-color: #303030 +} + +div.highlight .-Color[class*=-C237] { + color: #3A3A3A +} + +div.highlight .-Color[class*=-BGC237] { + background-color: #3A3A3A +} + +div.highlight .-Color[class*=-C238] { + color: #444444 +} + +div.highlight .-Color[class*=-BGC238] { + background-color: #444444 +} + +div.highlight .-Color[class*=-C239] { + color: #4E4E4E +} + +div.highlight .-Color[class*=-BGC239] { + background-color: #4E4E4E +} + +div.highlight .-Color[class*=-C240] { + color: #585858 +} + +div.highlight .-Color[class*=-BGC240] { + background-color: #585858 +} + +div.highlight .-Color[class*=-C241] { + color: #626262 +} + +div.highlight .-Color[class*=-BGC241] { + background-color: #626262 +} + +div.highlight .-Color[class*=-C242] { + color: #6C6C6C +} + +div.highlight .-Color[class*=-BGC242] { + background-color: #6C6C6C +} + +div.highlight .-Color[class*=-C243] { + color: #767676 +} + +div.highlight .-Color[class*=-BGC243] { + background-color: #767676 +} + +div.highlight .-Color[class*=-C244] { + color: #808080 +} + +div.highlight .-Color[class*=-BGC244] { + background-color: #808080 +} + +div.highlight .-Color[class*=-C245] { + color: #8A8A8A +} + +div.highlight .-Color[class*=-BGC245] { + background-color: #8A8A8A +} + +div.highlight .-Color[class*=-C246] { + color: #949494 +} + +div.highlight .-Color[class*=-BGC246] { + background-color: #949494 +} + +div.highlight .-Color[class*=-C247] { + color: #9E9E9E +} + +div.highlight .-Color[class*=-BGC247] { + background-color: #9E9E9E +} + +div.highlight .-Color[class*=-C248] { + color: #A8A8A8 +} + +div.highlight .-Color[class*=-BGC248] { + background-color: #A8A8A8 +} + +div.highlight .-Color[class*=-C249] { + color: #B2B2B2 +} + +div.highlight .-Color[class*=-BGC249] { + background-color: #B2B2B2 +} + +div.highlight .-Color[class*=-C250] { + color: #BCBCBC +} + +div.highlight .-Color[class*=-BGC250] { + background-color: #BCBCBC +} + +div.highlight .-Color[class*=-C251] { + color: #C6C6C6 +} + +div.highlight .-Color[class*=-BGC251] { + background-color: #C6C6C6 +} + +div.highlight .-Color[class*=-C252] { + color: #D0D0D0 +} + +div.highlight .-Color[class*=-BGC252] { + background-color: #D0D0D0 +} + +div.highlight .-Color[class*=-C253] { + color: #DADADA +} + +div.highlight .-Color[class*=-BGC253] { + background-color: #DADADA +} + +div.highlight .-Color[class*=-C254] { + color: #E4E4E4 +} + +div.highlight .-Color[class*=-BGC254] { + background-color: #E4E4E4 +} + +div.highlight .-Color[class*=-C255] { + color: #EEEEEE +} + +div.highlight .-Color[class*=-BGC255] { + background-color: #EEEEEE +} diff --git a/_static/play-solid.svg b/_static/play-solid.svg new file mode 100644 index 00000000..bcd81f7a --- /dev/null +++ b/_static/play-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..d7dd5778 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } +html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } +html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #A12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730C5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7F4707 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ +html[data-theme="light"] .highlight .o { color: #00622F } /* Operator */ +html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #005B82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #005B82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #005B82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730C5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730C5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730C5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730C5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730C5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7F4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7F4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7F4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622F } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #7F4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005B82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005B82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7F4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622F } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730C5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005B82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7F4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #005B82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005B82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #A12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730C5 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #7F4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7F4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7F4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7F4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7F4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622F } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622F } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622F } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622F } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622F } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622F } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622F } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622F } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622F } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622F } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #A12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622F } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005B82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005B82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #A12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #A12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #A12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7F4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #F8F8F2 } +html[data-theme="dark"] .highlight .c { color: #FFD900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #FFA07A } /* Error */ +html[data-theme="dark"] .highlight .k { color: #DCC6E0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #FFD900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #F8F8F2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #ABE338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #F8F8F2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #FFD900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #FFD900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #FFD900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #FFD900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #FFD900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #FFD900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00E0E0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00E0E0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00E0E0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #DCC6E0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #DCC6E0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #DCC6E0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #DCC6E0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #DCC6E0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #FFD900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #FFD900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #FFD900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #ABE338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #FFD900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #FFD900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00E0E0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00E0E0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #FFD900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #ABE338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #DCC6E0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00E0E0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #FFD900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #F8F8F2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #F8F8F2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00E0E0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00E0E0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #FFA07A } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #DCC6E0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #F8F8F2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #FFD900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #FFD900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #FFD900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #FFD900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #FFD900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #ABE338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #ABE338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #ABE338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #ABE338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #ABE338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #ABE338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #ABE338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #ABE338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #ABE338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #ABE338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #FFA07A } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #ABE338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00E0E0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #FFD900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00E0E0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #FFA07A } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #FFA07A } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #FFA07A } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #FFD900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #FFD900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/sbt-webpack-macros.html b/_static/sbt-webpack-macros.html new file mode 100644 index 00000000..6cbf559f --- /dev/null +++ b/_static/sbt-webpack-macros.html @@ -0,0 +1,11 @@ + +{% macro head_pre_bootstrap() %} + +{% endmacro %} + +{% macro body_post() %} + +{% endmacro %} diff --git a/_static/scripts/bootstrap.js b/_static/scripts/bootstrap.js new file mode 100644 index 00000000..c8178deb --- /dev/null +++ b/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>li,Collapse:()=>Ei,Dropdown:()=>Ki,Modal:()=>Ln,Offcanvas:()=>Kn,Popover:()=>bs,ScrollSpy:()=>Ls,Tab:()=>Js,Toast:()=>po,Tooltip:()=>fs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=X(T,O,C),k=f;i.modifiersData[a]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const it={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:I(e.placement),variation:Z(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,et(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,et(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var nt={passive:!0};const st={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=Ft(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map((t=>Mt(t))).join(","):null},we={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Xt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Fe=".bs.carousel",He=".data-api",Be="ArrowLeft",We="ArrowRight",ze="next",Re="prev",qe="left",Ve="right",Ye=`slide${Fe}`,Ke=`slid${Fe}`,Qe=`keydown${Fe}`,Xe=`mouseenter${Fe}`,Ue=`mouseleave${Fe}`,Ge=`dragstart${Fe}`,Je=`load${Fe}${He}`,Ze=`click${Fe}${He}`,ti="carousel",ei="active",ii=".active",ni=".carousel-item",si=ii+ni,oi={[Be]:Ve,[We]:qe},ri={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ai={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class li extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===ti&&this.cycle()}static get Default(){return ri}static get DefaultType(){return ai}static get NAME(){return"carousel"}next(){this._slide(ze)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Re)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ke,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ke,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ze:Re;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&fe.on(this._element,Qe,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Xe,(()=>this.pause())),fe.on(this._element,Ue,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Ge,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(qe)),rightCallback:()=>this._slide(this._directionToOrder(Ve)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=oi[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=we.findOne(ii,this._indicatorsElement);e.classList.remove(ei),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(ei),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===ze,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Ye).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Ke)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(si,this._element)}_getItems(){return we.find(ni,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===qe?Re:ze:t===qe?ze:Re}_orderToDirection(t){return Kt()?t===Re?qe:Ve:t===Re?Ve:qe}static jQueryInterface(t){return this.each((function(){const e=li.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}fe.on(document,Ze,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(ti))return;t.preventDefault();const i=li.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Je,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)li.getOrCreateInstance(e)})),Qt(li);const ci=".bs.collapse",hi=`show${ci}`,di=`shown${ci}`,ui=`hide${ci}`,fi=`hidden${ci}`,pi=`click${ci}.data-api`,mi="show",gi="collapse",_i="collapsing",bi=`:scope .${gi} .${gi}`,vi='[data-bs-toggle="collapse"]',yi={parent:null,toggle:!0},wi={parent:"(null|element)",toggle:"boolean"};class Ei extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(vi);for(const t of i){const e=we.getSelectorFromElement(t),i=we.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return yi}static get DefaultType(){return wi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Ei.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,hi).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(gi),this._element.classList.add(_i),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(_i),this._element.classList.add(gi,mi),this._element.style[e]="",fe.trigger(this._element,di)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,ui).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(_i),this._element.classList.remove(gi,mi);for(const t of this._triggerArray){const e=we.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(_i),this._element.classList.add(gi),fe.trigger(this._element,fi)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(mi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(vi);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(bi,this._config.parent);return we.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Ei.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,pi,vi,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))Ei.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(Ei);const Ai="dropdown",Ti=".bs.dropdown",Ci=".data-api",Oi="ArrowUp",xi="ArrowDown",ki=`hide${Ti}`,Li=`hidden${Ti}`,Si=`show${Ti}`,Di=`shown${Ti}`,$i=`click${Ti}${Ci}`,Ii=`keydown${Ti}${Ci}`,Ni=`keyup${Ti}${Ci}`,Pi="show",Mi='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Mi}.${Pi}`,Fi=".dropdown-menu",Hi=Kt()?"top-end":"top-start",Bi=Kt()?"top-start":"top-end",Wi=Kt()?"bottom-end":"bottom-start",zi=Kt()?"bottom-start":"bottom-end",Ri=Kt()?"left-start":"right-start",qi=Kt()?"right-start":"left-start",Vi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Yi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Fi)[0]||we.prev(this._element,Fi)[0]||we.findOne(Fi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Vi}static get DefaultType(){return Yi}static get NAME(){return Ai}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,Si,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),fe.trigger(this._element,Di,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!fe.trigger(this._element,ki,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,Li,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ai.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Ri;if(t.classList.contains("dropstart"))return qi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Bi:Hi:e?zi:Wi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===xi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Ki.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=we.find(ji);for(const i of e){const e=Ki.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Oi,xi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Mi)?this:we.prev(this,Mi)[0]||we.next(this,Mi)[0]||we.findOne(Mi,t.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Ii,Mi,Ki.dataApiKeydownHandler),fe.on(document,Ii,Fi,Ki.dataApiKeydownHandler),fe.on(document,$i,Ki.clearMenus),fe.on(document,Ni,Ki.clearMenus),fe.on(document,$i,Mi,(function(t){t.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qt(Ki);const Qi="backdrop",Xi="show",Ui=`mousedown.bs.${Qi}`,Gi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ji={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Zi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Gi}static get DefaultType(){return Ji}static get NAME(){return Qi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Xi),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Ui),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Ui,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const tn=".bs.focustrap",en=`focusin${tn}`,nn=`keydown.tab${tn}`,sn="backward",on={autofocus:!0,trapElement:null},rn={autofocus:"boolean",trapElement:"element"};class an extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,tn),fe.on(document,en,(t=>this._handleFocusin(t))),fe.on(document,nn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,tn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===sn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?sn:"forward")}}const ln=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",cn=".sticky-top",hn="padding-right",dn="margin-right";class un{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,hn,(e=>e+t)),this._setElementAttributes(ln,hn,(e=>e+t)),this._setElementAttributes(cn,dn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,hn),this._resetElementAttributes(ln,hn),this._resetElementAttributes(cn,dn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const fn=".bs.modal",pn=`hide${fn}`,mn=`hidePrevented${fn}`,gn=`hidden${fn}`,_n=`show${fn}`,bn=`shown${fn}`,vn=`resize${fn}`,yn=`click.dismiss${fn}`,wn=`mousedown.dismiss${fn}`,En=`keydown.dismiss${fn}`,An=`click${fn}.data-api`,Tn="modal-open",Cn="show",On="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},kn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ln extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new un,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return kn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,_n,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Tn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,pn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,fn),fe.off(this._dialog,fn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Zi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new an({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,bn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,En,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,vn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,wn,(t=>{fe.one(this._element,yn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Tn),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,gn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,mn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(On)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(On),this._queueCallback((()=>{this._element.classList.remove(On),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,An,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,_n,(t=>{t.defaultPrevented||fe.one(e,gn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&Ln.getInstance(i).hide(),Ln.getOrCreateInstance(e).toggle(this)})),Ee(Ln),Qt(Ln);const Sn=".bs.offcanvas",Dn=".data-api",$n=`load${Sn}${Dn}`,In="show",Nn="showing",Pn="hiding",Mn=".offcanvas.show",jn=`show${Sn}`,Fn=`shown${Sn}`,Hn=`hide${Sn}`,Bn=`hidePrevented${Sn}`,Wn=`hidden${Sn}`,zn=`resize${Sn}`,Rn=`click${Sn}${Dn}`,qn=`keydown.dismiss${Sn}`,Vn={backdrop:!0,keyboard:!0,scroll:!1},Yn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Vn}static get DefaultType(){return Yn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new un).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Nn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(In),this._element.classList.remove(Nn),fe.trigger(this._element,Fn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,Hn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(In,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new un).reset(),fe.trigger(this._element,Wn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Zi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Bn)}:null})}_initializeFocusTrap(){return new an({trapElement:this._element})}_addEventListeners(){fe.on(this._element,qn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Bn))}))}static jQueryInterface(t){return this.each((function(){const e=Kn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}fe.on(document,Rn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Wn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Mn);i&&i!==e&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(e).toggle(this)})),fe.on(window,$n,(()=>{for(const t of we.find(Mn))Kn.getOrCreateInstance(t).show()})),fe.on(window,zn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Kn.getOrCreateInstance(t).hide()})),Ee(Kn),Qt(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Un=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Gn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Xn.has(i)||Boolean(Un.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Jn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Zn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ts={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Jn}static get DefaultType(){return Zn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},ts)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Gn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const is=new Set(["sanitize","allowList","sanitizeFn"]),ns="fade",ss="show",os=".tooltip-inner",rs=".modal",as="hide.bs.modal",ls="hover",cs="focus",hs={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ds={allowList:Qn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},us={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class fs extends ve{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ds}static get DefaultType(){return us}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),fe.off(this._element.closest(rs),as,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ns,ss),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ns),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new es({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[os]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ns)}_isShown(){return this.tip&&this.tip.classList.contains(ss)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=hs[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Xt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ls?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ls?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?cs:ls]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?cs:ls]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(rs),as,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=_e.getDataAttributes(this._element);for(const t of Object.keys(e))is.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".popover-header",ms=".popover-body",gs={...fs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},_s={...fs.DefaultType,content:"(null|string|element|function)"};class bs extends fs{static get Default(){return gs}static get DefaultType(){return _s}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ps]:this._getTitle(),[ms]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=bs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(bs);const vs=".bs.scrollspy",ys=`activate${vs}`,ws=`click${vs}`,Es=`load${vs}.data-api`,As="active",Ts="[href]",Cs=".nav-link",Os=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},ks={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ls extends ve{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return xs}static get DefaultType(){return ks}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(fe.off(this._config.target,ws),fe.on(this._config.target,ws,Ts,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=we.find(Ts,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(As),this._activateParents(t),fe.trigger(this._element,ys,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(As);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,Os))t.classList.add(As)}_clearActiveClass(t){t.classList.remove(As);const e=we.find(`${Ts}.${As}`,t);for(const t of e)t.classList.remove(As)}static jQueryInterface(t){return this.each((function(){const e=Ls.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(window,Es,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ls.getOrCreateInstance(t)})),Qt(Ls);const Ss=".bs.tab",Ds=`hide${Ss}`,$s=`hidden${Ss}`,Is=`show${Ss}`,Ns=`shown${Ss}`,Ps=`click${Ss}`,Ms=`keydown${Ss}`,js=`load${Ss}`,Fs="ArrowLeft",Hs="ArrowRight",Bs="ArrowUp",Ws="ArrowDown",zs="Home",Rs="End",qs="active",Vs="fade",Ys="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Us=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Gs=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Js extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ms,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?fe.trigger(e,Ds,{relatedTarget:t}):null;fe.trigger(t,Is,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(qs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ns,{relatedTarget:e})):t.classList.add(Ys)}),t,t.classList.contains(Vs)))}_deactivate(t,e){t&&(t.classList.remove(qs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,$s,{relatedTarget:e})):t.classList.remove(Ys)}),t,t.classList.contains(Vs)))}_keydown(t){if(![Fs,Hs,Bs,Ws,zs,Rs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([zs,Rs].includes(t.key))i=e[t.key===zs?0:e.length-1];else{const n=[Hs,Ws].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Js.getOrCreateInstance(i).show())}_getChildren(){return we.find(Us,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=we.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ks,qs),n(".dropdown-menu",Ys),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(qs)}_getInnerElement(t){return t.matches(Us)?t:we.findOne(Us,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Js.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ps,Xs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Js.getOrCreateInstance(this).show()})),fe.on(window,js,(()=>{for(const t of we.find(Gs))Js.getOrCreateInstance(t)})),Qt(Js);const Zs=".bs.toast",to=`mouseover${Zs}`,eo=`mouseout${Zs}`,io=`focusin${Zs}`,no=`focusout${Zs}`,so=`hide${Zs}`,oo=`hidden${Zs}`,ro=`show${Zs}`,ao=`shown${Zs}`,lo="hide",co="show",ho="showing",uo={animation:"boolean",autohide:"boolean",delay:"number"},fo={animation:!0,autohide:!0,delay:5e3};class po extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fo}static get DefaultType(){return uo}static get NAME(){return"toast"}show(){fe.trigger(this._element,ro).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(lo),qt(this._element),this._element.classList.add(co,ho),this._queueCallback((()=>{this._element.classList.remove(ho),fe.trigger(this._element,ao),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,so).defaultPrevented||(this._element.classList.add(ho),this._queueCallback((()=>{this._element.classList.add(lo),this._element.classList.remove(ho,co),fe.trigger(this._element,oo)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(co),super.dispose()}isShown(){return this._element.classList.contains(co)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){fe.on(this._element,to,(t=>this._onInteraction(t,!0))),fe.on(this._element,eo,(t=>this._onInteraction(t,!1))),fe.on(this._element,io,(t=>this._onInteraction(t,!0))),fe.on(this._element,no,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=po.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function mo(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(po),Qt(po),mo((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new fs(t,{delay:{show:500,hide:100}})}))})),mo((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),mo((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/_static/scripts/bootstrap.js.LICENSE.txt b/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 00000000..28755c2c --- /dev/null +++ b/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/_static/scripts/bootstrap.js.map b/_static/scripts/bootstrap.js.map new file mode 100644 index 00000000..4a3502ae --- /dev/null +++ b/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' + '
' + '
' + '
',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' + '
' + '

' + '
' + '
',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
    and