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'))}}