pyiron#

Define workflow with pyiron_base#

from pyiron_base import job
from python_workflow_definition.pyiron_base import write_workflow_json
from workflow import (
    get_sum as _get_sum,
    get_prod_and_div as _get_prod_and_div,
    get_square as _get_square,
)
workflow_json_filename = "pyiron_arithmetic.json"
get_sum = job(_get_sum)
get_prod_and_div = job(_get_prod_and_div, output_key_lst=["prod", "div"])
get_square = job(_get_square)
prod_and_div = get_prod_and_div(x=1, y=2)
tmp_sum = get_sum(x=prod_and_div.output.prod, y=prod_and_div.output.div)
result = get_square(x=tmp_sum)
write_workflow_json(delayed_object=result, file_name=workflow_json_filename)
!cat {workflow_json_filename}
{
  "version": "0.1.0",
  "nodes": [
    {
      "id": 0,
      "type": "function",
      "value": "workflow.get_square"
    },
    {
      "id": 1,
      "type": "function",
      "value": "workflow.get_sum"
    },
    {
      "id": 2,
      "type": "function",
      "value": "workflow.get_prod_and_div"
    },
    {
      "id": 3,
      "type": "input",
      "name": "x",
      "value": 1
    },
    {
      "id": 4,
      "type": "input",
      "name": "y",
      "value": 2
    },
    {
      "id": 5,
      "type": "output",
      "name": "result"
    }
  ],
  "edges": [
    {
      "target": 0,
      "targetPort": "x",
      "source": 1,
      "sourcePort": null
    },
    {
      "target": 1,
      "targetPort": "x",
      "source": 2,
      "sourcePort": "prod"
    },
    {
      "target": 2,
      "targetPort": "x",
      "source": 3,
      "sourcePort": null
    },
    {
      "target": 2,
      "targetPort": "y",
      "source": 4,
      "sourcePort": null
    },
    {
      "target": 1,
      "targetPort": "y",
      "source": 2,
      "sourcePort": "div"
    },
    {
      "target": 5,
      "targetPort": null,
      "source": 0,
      "sourcePort": null
    }
  ]
}

Load Workflow with aiida#

from aiida import load_profile

load_profile()
Profile<uuid='3ce302a995914d2e8a7b6327a10fe381' name='pwd'>
from python_workflow_definition.aiida import load_workflow_json
wg = load_workflow_json(file_name=workflow_json_filename)
wg
wg.run()
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
05/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.
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_sum2
05/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.
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_square1
05/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.
05/24/2025 05:39:22 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|continue_workgraph]: tasks ready to run: 
05/24/2025 05:39:22 AM <524> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [19|WorkGraphEngine|finalize]: Finalize workgraph.

Load Workflow with jobflow#

from python_workflow_definition.jobflow import load_workflow_json
from jobflow.managers.local import run_locally
flow = load_workflow_json(file_name=workflow_json_filename)
result = run_locally(flow)
result
2025-05-24 05:39:22,893 INFO Started executing jobs locally
2025-05-24 05:39:23,184 INFO Starting job - get_prod_and_div (82cb13d7-d7c8-4bd1-84d1-c301d4ee2422)
2025-05-24 05:39:23,187 INFO Finished job - get_prod_and_div (82cb13d7-d7c8-4bd1-84d1-c301d4ee2422)
2025-05-24 05:39:23,187 INFO Starting job - get_sum (19c0830c-e918-44d2-82f1-b9418463c057)
2025-05-24 05:39:23,189 INFO Finished job - get_sum (19c0830c-e918-44d2-82f1-b9418463c057)
2025-05-24 05:39:23,189 INFO Starting job - get_square (78fc4e6e-2a99-490e-b829-fae9704296c2)
2025-05-24 05:39:23,190 INFO Finished job - get_square (78fc4e6e-2a99-490e-b829-fae9704296c2)
2025-05-24 05:39:23,191 INFO Finished executing jobs locally
{'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'))},
 '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'))},
 '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'))}}