Skip to main content

Design flexible node-based workflow for AiiDA calculation.

Project description

AiiDA-WorkTree

PyPI version Unit test Docs status

Provides the third workflow component: WorkTree, to design flexible node-based workflows using AiiDA.

In AiiDA, there are two workflow components: workfunction and WorkChain. Workfunction is easy to implement but it does not support automatic checkpointing, which is important for long-running calculations. Workchain supports automatic checkpointing but it is difficult to implement and also not as flexible as the workfunction. AiiDA-WorkTree provides the third component: WorkTree. It is easy to implement and supports automatic checkpointing. It is also flexible and can be used to design complex workflows.

Here is a detailed comparison between the WorkTree with two AiiDA built-in workflow components.

Aspect WorkFunction WorkChain WorkTree
Use Case Short-running jobs Long-running jobs Long-running jobs
Checkpointing No Yes Yes
Execution order Sequential Hybrid Sequential-Parallel Directed Acyclic Graph
Non-blocking No Yes Yes
Implementation Easy Difficult Easy
Dynamic No No Yes
Ready to Use Yes Need PYTHONPATH Yes
Subprocesses Handling No Launches & waits Launches & waits
Flow Control All if, while if, while, match
Termination Hard exit ExitCode ExitCode
Data Passing Direct passing Context Link & Context
Output Recording Limited support Out & validates Out
Port Exposing Limited support Manual & automatic Manual

Installation

    pip install aiida-worktree

To install the latest version from source, first clone the repository and then install using pip:

git clone https://github.com/superstar54/aiida-worktree
cd aiida-worktree
pip install -e .

In order to use the widget, you also need to run:

cd aiida_worktree/widget/
npm install
npm run build

Documentation

Check the docs and learn about the features.

Examples

Create calcfunction nodes:

from aiida_worktree import node

# define add calcfunction node
@node.calcfunction()
def add(x, y):
    return x + y

# define multiply calcfunction node
@node.calcfunction()
def multiply(x, y):
    return x*y

Create a worktree to link the nodes.

from aiida_worktree import WorkTree
from aiida import load_profile
from aiida.orm import Int
load_profile()


wt = WorkTree("test_add_multiply")
wt.nodes.new(add, name="add1", x=Int(2.0), y=Int(3.0))
wt.nodes.new(multiply, name="multiply1", y=Int(4.0))
wt.links.new(wt.nodes["add1"].outputs[0], wt.nodes["multiply1"].inputs["x"])
wt.submit(wait=True)

Start the web app, open a terminal and run:

worktree web start

Then visit the page http://127.0.0.1:8000/worktree, you should find a first_workflow Worktree, click the pk and view the WorkTree.

One can also generate the node graph from the process:

verdi node generate pk

Development

Pre-commit and Tests

To contribute to this repository, please enable pre-commit so the code in commits are conform to the standards.

pip install -e .[tests, pre-commit]
pre-commit install

Web app

See the README.md

Build and publish

Build package:

pip install build
python -m build

Upload to PyPI:

pip install twine
twine upload dist/*

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiida_worktree-0.1.8.tar.gz (5.7 MB view hashes)

Uploaded Source

Built Distribution

aiida_worktree-0.1.8-py3-none-any.whl (5.8 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page