Execution Graph#

Directed acyclic graph (DAG) that composes pipeline modules, resolves dependencies, and drives execution in the correct order.

Execution graph node.

Each node wraps a module and tracks its position in the DAG: which nodes it depends on (must complete before this node runs) and which nodes depend on it (notified when this node completes).

class adapt.execution.graph.node.Node(module)#

Bases: object

A node in the execution graph.

Parameters:

module (BaseModule) – The processing module this node wraps.

module#
Type:

BaseModule

inputs#

Data keys required by this module.

Type:

list[str]

outputs#

Data keys produced by this module.

Type:

list[str]

dependencies#

Upstream nodes that must complete before this one runs.

Type:

list[Node]

dependents#

Downstream nodes that are unblocked when this one completes.

Type:

list[Node]

property name: str#

Module registry — discover and instantiate registered modules.

Modules register their class at import time by calling registry.register(). The controller calls registry.create_modules() to get instantiated modules ready for graph construction.

Usage:

# In a module file (modules/detection/module.py):
from adapt.execution.module_registry import registry

class DetectModule(BaseModule):
    name = "detection"
    inputs = ["grid_volume"]
    outputs = ["storm_cells"]
    ...

registry.register(DetectModule)

# In the controller:
modules = registry.create_modules()
nodes = GraphBuilder(modules).build()
GraphExecutor(nodes).run(context)
class adapt.execution.module_registry.ModuleRegistry#

Bases: object

Central registry for Adapt modules and extensions.

Stores module classes. Instantiates them on demand via create_modules(). This allows each module to be configured with constructor arguments at runtime while keeping registration declarative.

Raises:
  • RuntimeError – If the same module name is registered twice.

  • KeyError – If get() is called with an unregistered name.

clear()#

Remove all registered modules (primarily for testing).

Return type:

None

create_modules()#

Instantiate and return all registered modules.

Returns:

One instance per registered module class, in registration order.

Return type:

list[BaseModule]

get(name)#

Return the module class registered under name.

Raises:

KeyError – If no module with that name is registered.

Return type:

type[BaseModule]

Parameters:

name (str)

list_modules()#

Return names of all registered modules.

Return type:

list[str]

register(module_class)#

Register a module class by its name attribute.

Parameters:

module_class (type[BaseModule]) – The module class to register. Must have a non-empty name.

Raises:
  • RuntimeError – If a module with the same name is already registered.

  • ValueError – If module_class.name is empty.

Return type:

None

unregister(name)#

Remove a module from the registry (primarily for testing).

Return type:

None

Parameters:

name (str)