src.neurodags.nodes

Node registry and built-in node discovery.

Every module in this package is imported by discover() when neurodags.nodes is first imported, i.e. on every CLI invocation and in every worker process. Node modules must therefore stay cheap to import:

  • Import heavy third-party packages (e.g. antropy, neurokit2, fooof, matplotlib, mne.export, mne_bids) inside the node function or a small helper it calls, never at module level. Base mne, numpy, xarray and scipy are fine at module level.

  • When a node wraps functions of a heavy library, bind the function name and resolve it with getattr at call time (see antropy.py/neurokit.py).

  • If the dependency is missing, the node is still registered and raises an actionable ImportError when called.

tests/test_import_weight.py guards this convention.

Submodules

Functions

register_node(→ NodeCallable)

Register a callable node factory.

get_node(→ NodeCallable)

Return a registered node by name.

iter_nodes(→ collections.abc.Iterable[tuple[str, ...)

Yield registered nodes as (name, callable) pairs.

list_nodes(→ tuple[str, ...])

Return the registered node names sorted alphabetically.

clear_node_registry(→ None)

Remove all registered nodes (primarily useful for tests).

unregister_node(→ None)

Remove a node from the registry if present.

discover(→ None)

Import all modules in the package to trigger registrations.

register_node_with_name(→ None)

Package Contents

src.neurodags.nodes.register_node(func: NodeCallable | None = None, *, name: str | None = None, override: bool = False) → NodeCallable

Register a callable node factory.

Can be used as @register_node or @register_node(name="alias").

src.neurodags.nodes.get_node(name: str) → NodeCallable

Return a registered node by name.

src.neurodags.nodes.iter_nodes() → collections.abc.Iterable[tuple[str, NodeCallable]]

Yield registered nodes as (name, callable) pairs.

src.neurodags.nodes.list_nodes() → tuple[str, ...]

Return the registered node names sorted alphabetically.

src.neurodags.nodes.clear_node_registry() → None

Remove all registered nodes (primarily useful for tests).

src.neurodags.nodes.unregister_node(name: str) → None

Remove a node from the registry if present.

src.neurodags.nodes.discover(package: str | None = None) → None

Import all modules in the package to trigger registrations.

src.neurodags.nodes.register_node_with_name(name: str, func: collections.abc.Callable) → None