From e8b087253caaa5887e7eae4b782e0596dea8d0c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Thu, 8 Jan 2026 21:24:56 +0100 Subject: [PATCH 1/4] Add tests for workflow frameworks --- .github/workflows/pipeline.yml | 1 + tests/test_aiida.py | 44 ++++++++++++++++++++++++++++++++++ tests/test_jobflow.py | 35 +++++++++++++++++++++++++++ tests/test_pyiron_base.py | 33 +++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 tests/test_aiida.py create mode 100644 tests/test_jobflow.py create mode 100644 tests/test_pyiron_base.py diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 1b2865d..19a8f56 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -216,6 +216,7 @@ jobs: shell: bash -l {0} timeout-minutes: 30 run: | + verdi presto --profile-name pwd pip install . --no-deps --no-build-isolation coverage run coverage xml diff --git a/tests/test_aiida.py b/tests/test_aiida.py new file mode 100644 index 0000000..26be604 --- /dev/null +++ b/tests/test_aiida.py @@ -0,0 +1,44 @@ +import unittest +import os +from aiida_workgraph import WorkGraph, task +from aiida import orm, load_profile +load_profile() + +from python_workflow_definition.aiida import load_workflow_json, write_workflow_json + + +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 + + +class TestAiiDA(unittest.TestCase): + def test_aiida(self): + workflow_json_filename = "aiida_simple.json" + wg = WorkGraph("arithmetic") + get_prod_and_div_task = wg.add_task( + task(outputs=['prod', 'div'])(get_prod_and_div), + x=orm.Float(1), + y=orm.Float(2), + ) + get_sum_task = wg.add_task( + get_sum, + x=get_prod_and_div_task.outputs.prod, + y=get_prod_and_div_task.outputs.div, + ) + get_square_task = wg.add_task( + get_square, + x=get_sum_task.outputs.result, + ) + write_workflow_json(wg=wg, file_name=workflow_json_filename) + workgraph = load_workflow_json(file_name='workflow.json') + workgraph.run() + + self.assertTrue(os.path.exists(workflow_json_filename)) \ No newline at end of file diff --git a/tests/test_jobflow.py b/tests/test_jobflow.py new file mode 100644 index 0000000..879d842 --- /dev/null +++ b/tests/test_jobflow.py @@ -0,0 +1,35 @@ +import unittest +import os +from jobflow import job, Flow +from jobflow.managers.local import run_locally +from python_workflow_definition.jobflow import load_workflow_json, write_workflow_json + + +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 + + +class TestJobflow(unittest.TestCase): + def test_jobflow(self): + workflow_json_filename = "jobflow_simple.json" + get_sum_job = job(get_sum) + get_prod_and_div_job = job(get_prod_and_div) + get_square_job = job(get_square) + prod_and_div = get_prod_and_div_job(x=1, y=2) + tmp_sum = get_sum_job(x=prod_and_div.output.prod, y=prod_and_div.output.div) + result = get_square_job(x=tmp_sum.output) + flow = Flow([prod_and_div, tmp_sum, result]) + write_workflow_json(flow=flow, file_name=workflow_json_filename) + flow = load_workflow_json(file_name=workflow_json_filename) + result = run_locally(flow) + + self.assertTrue(os.path.exists(workflow_json_filename)) + self.assertEqual(result[result.keys()[-1]][1].output, 6.25) diff --git a/tests/test_pyiron_base.py b/tests/test_pyiron_base.py new file mode 100644 index 0000000..4be8589 --- /dev/null +++ b/tests/test_pyiron_base.py @@ -0,0 +1,33 @@ +import unittest +import os +from pyiron_base import job +from python_workflow_definition.pyiron_base import load_workflow_json, write_workflow_json + + +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 + + +class TestPyironBase(unittest.TestCase): + def test_pyiron_base(self): + workflow_json_filename = "pyiron_arithmetic.json" + get_sum_job_wrapper = job(get_sum) + get_prod_and_div_job_wrapper = job(get_prod_and_div, output_key_lst=["prod", "div"]) + get_square_job_wrapper = job(get_square) + + prod_and_div = get_prod_and_div_job_wrapper(x=1, y=2) + tmp_sum = get_sum_job_wrapper(x=prod_and_div.output.prod, y=prod_and_div.output.div) + result = get_square_job_wrapper(x=tmp_sum) + write_workflow_json(delayed_object=result, file_name=workflow_json_filename) + delayed_object_lst = load_workflow_json(file_name=workflow_json_filename) + + self.assertTrue(os.path.exists(workflow_json_filename)) + self.assertEqual(delayed_object_lst[-1].pull(), 6.25) From f6f07c7677dd027fb28c5efb3be8904f2b6055ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Thu, 8 Jan 2026 21:27:28 +0100 Subject: [PATCH 2/4] index fix --- tests/test_jobflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_jobflow.py b/tests/test_jobflow.py index 879d842..12f9433 100644 --- a/tests/test_jobflow.py +++ b/tests/test_jobflow.py @@ -32,4 +32,4 @@ def test_jobflow(self): result = run_locally(flow) self.assertTrue(os.path.exists(workflow_json_filename)) - self.assertEqual(result[result.keys()[-1]][1].output, 6.25) + self.assertEqual(result[list(result.keys())[-1]][1].output, 6.25) From cae9eee70bbb157ae5e774a92a7e4ebd5a666442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Thu, 8 Jan 2026 21:28:18 +0100 Subject: [PATCH 3/4] install Aiida --- .github/workflows/pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 19a8f56..f60c7cf 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -192,6 +192,7 @@ jobs: shell: bash -l {0} timeout-minutes: 30 run: | + verdi presto --profile-name pwd pip install . --no-deps --no-build-isolation python -m unittest discover tests From 679871d914ea7f70271eec4223743ec4ba02c2b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Thu, 8 Jan 2026 21:30:27 +0100 Subject: [PATCH 4/4] fix aiida --- tests/test_aiida.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_aiida.py b/tests/test_aiida.py index 26be604..1b71b94 100644 --- a/tests/test_aiida.py +++ b/tests/test_aiida.py @@ -38,7 +38,7 @@ def test_aiida(self): x=get_sum_task.outputs.result, ) write_workflow_json(wg=wg, file_name=workflow_json_filename) - workgraph = load_workflow_json(file_name='workflow.json') + workgraph = load_workflow_json(file_name=workflow_json_filename) workgraph.run() self.assertTrue(os.path.exists(workflow_json_filename)) \ No newline at end of file