Quick Start

Installation

Let’s first install node-graph via pip:

$ pip install node-graph

First workflow

Suppose we want to calculate (x + y) * z in two steps.

  • step 1: add x and y

  • step 2: then multiply the result with z.

Create task

Task is the basic building block of a workflow. One can create a task from a Python function using the decorator:

from node_graph.decorator import task


@task()
def add(x, y):
    return x + y


@task()
def multiply(x, y):
    return x * y


@task.graph()
def AddMultiply(x, y, z):
    the_sum = add(x=x, y=y).result
    return multiply(x=the_sum, y=z).result


ng = AddMultiply.build(x=1, y=2, z=3)
ng


Engines and provenance Run graphs directly in Python:

from node_graph.engine.local import LocalEngine

graph = AddMultiply.build(x=1, y=2, z=3)

engine = LocalEngine()
results = engine.run(graph)
print("results:", results)
results: {'result': 9}

Provenance for visualization

In interactive notebooks you can display the provenance graph inline

engine.recorder
provenance proc:dc72b6093a1b4088b58ffaf01a3d8db3 AddMultiply (dc72b60...) state=FINISHED proc:16c4400a1fc74294adc76020522f737d add (16c4400...) state=FINISHED proc:dc72b6093a1b4088b58ffaf01a3d8db3->proc:16c4400a1fc74294adc76020522f737d CALL proc:590188bc1b3d43ec97035f2bf8af8096 multiply (590188b...) state=FINISHED proc:dc72b6093a1b4088b58ffaf01a3d8db3->proc:590188bc1b3d43ec97035f2bf8af8096 CALL data:f6ede8c7-bdef-4913-ba88-dc36013a2df2 int (f6ede8c...) proc:dc72b6093a1b4088b58ffaf01a3d8db3->data:f6ede8c7-bdef-4913-ba88-dc36013a2df2 RETURN result data:57a10c80-5bc9-4be9-b433-eeb760331621 int (57a10c8...) proc:16c4400a1fc74294adc76020522f737d->data:57a10c80-5bc9-4be9-b433-eeb760331621 CREATE result proc:590188bc1b3d43ec97035f2bf8af8096->data:f6ede8c7-bdef-4913-ba88-dc36013a2df2 CREATE result data:cd368f2e-0018-4a6f-9ed9-9a1db121d2d3 int (cd368f2...) data:cd368f2e-0018-4a6f-9ed9-9a1db121d2d3->proc:dc72b6093a1b4088b58ffaf01a3d8db3 INPUT x data:cd368f2e-0018-4a6f-9ed9-9a1db121d2d3->proc:16c4400a1fc74294adc76020522f737d INPUT x data:b824ca6b-e885-427a-b110-752b7857e3e6 int (b824ca6...) data:b824ca6b-e885-427a-b110-752b7857e3e6->proc:dc72b6093a1b4088b58ffaf01a3d8db3 INPUT y data:b824ca6b-e885-427a-b110-752b7857e3e6->proc:16c4400a1fc74294adc76020522f737d INPUT y data:2878b978-1ce6-4fe4-8a64-15e582175ebc int (2878b97...) data:2878b978-1ce6-4fe4-8a64-15e582175ebc->proc:dc72b6093a1b4088b58ffaf01a3d8db3 INPUT z data:2878b978-1ce6-4fe4-8a64-15e582175ebc->proc:590188bc1b3d43ec97035f2bf8af8096 INPUT y data:57a10c80-5bc9-4be9-b433-eeb760331621->proc:590188bc1b3d43ec97035f2bf8af8096 INPUT x


Node graph programming

You can also create a graph programmatically. Three steps:

  • create a empty Graph

  • add nodes: add and multiply.

  • link the output of the add task to one of the x input of the multiply task.

from node_graph import Graph

ng = Graph("first_workflow")
ng.add_task(add, name="add", x=2, y=3)
ng.add_task(multiply, name="multiply", y=4)
ng.add_link(ng.tasks.add.outputs.result, ng.tasks.multiply.inputs.x)
ng


What’s Next

Total running time of the script: (0 minutes 0.487 seconds)

Gallery generated by Sphinx-Gallery