Files
docs/libs/dagpipe/site/index.html
Vishesh 'ironeagle' Bangotra 0e49f02c4c
All checks were successful
continuous-integration/drone/push Build is passing
updated mcp
2026-03-08 17:57:34 +05:30

5254 lines
157 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="next" href="state/">
<link rel="icon" href="assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>dagpipe</title>
<link rel="stylesheet" href="assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style>
<link rel="stylesheet" href="assets/_mkdocstrings.css">
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="cyan">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#dagpipe_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="." title="dagpipe" class="md-header__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
dagpipe
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Home
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="cyan" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="." title="dagpipe" class="md-nav__button md-logo" aria-label="dagpipe" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
dagpipe
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Home
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="." class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Home
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#dagpipe" class="md-nav__link">
<span class="md-ellipsis">
dagpipe
</span>
</a>
<nav class="md-nav" aria-label="dagpipe">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe--summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--installation" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--quick-start" class="md-nav__link">
<span class="md-ellipsis">
Quick Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--public-api" class="md-nav__link">
<span class="md-ellipsis">
Public API
</span>
</a>
<nav class="md-nav" aria-label="Public API">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe--execution-core" class="md-nav__link">
<span class="md-ellipsis">
Execution Core
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--state-data" class="md-nav__link">
<span class="md-ellipsis">
State &amp; Data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--declarative-pipelines" class="md-nav__link">
<span class="md-ellipsis">
Declarative Pipelines
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe-classes" class="md-nav__link">
<span class="md-ellipsis">
Classes
</span>
</a>
<nav class="md-nav" aria-label="Classes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine" class="md-nav__link">
<span class="md-ellipsis">
Engine
</span>
</a>
<nav class="md-nav" aria-label="Engine">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine-attributes" class="md-nav__link">
<span class="md-ellipsis">
Attributes
</span>
</a>
<nav class="md-nav" aria-label="Attributes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine.nodes" class="md-nav__link">
<span class="md-ellipsis">
nodes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Engine-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Engine.run" class="md-nav__link">
<span class="md-ellipsis">
run
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph" class="md-nav__link">
<span class="md-ellipsis">
Graph
</span>
</a>
<nav class="md-nav" aria-label="Graph">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Graph--initializes-node-registry-and-edge-mappings" class="md-nav__link">
<span class="md-ellipsis">
Initializes node registry and edge mappings.
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Graph.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.__repr__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.add_edge" class="md-nav__link">
<span class="md-ellipsis">
add_edge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.add_root" class="md-nav__link">
<span class="md-ellipsis">
add_root
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.children" class="md-nav__link">
<span class="md-ellipsis">
children
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.nodes" class="md-nav__link">
<span class="md-ellipsis">
nodes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.parents" class="md-nav__link">
<span class="md-ellipsis">
parents
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.roots" class="md-nav__link">
<span class="md-ellipsis">
roots
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node" class="md-nav__link">
<span class="md-ellipsis">
Node
</span>
</a>
<nav class="md-nav" aria-label="Node">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Node-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Node.__hash__" class="md-nav__link">
<span class="md-ellipsis">
__hash__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__hash__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__new__" class="md-nav__link">
<span class="md-ellipsis">
__new__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__repr__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__str__" class="md-nav__link">
<span class="md-ellipsis">
__str__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__str__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.clean_id_and_name" class="md-nav__link">
<span class="md-ellipsis">
clean_id_and_name
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.fork" class="md-nav__link">
<span class="md-ellipsis">
fork
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.node_id_to_name" class="md-nav__link">
<span class="md-ellipsis">
node_id_to_name
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.resolve" class="md-nav__link">
<span class="md-ellipsis">
resolve
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.run" class="md-nav__link">
<span class="md-ellipsis">
run
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload" class="md-nav__link">
<span class="md-ellipsis">
Payload
</span>
</a>
<nav class="md-nav" aria-label="Payload">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Payload-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Payload.as_dict" class="md-nav__link">
<span class="md-ellipsis">
as_dict
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.get" class="md-nav__link">
<span class="md-ellipsis">
get
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.has" class="md-nav__link">
<span class="md-ellipsis">
has
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.iter_paths" class="md-nav__link">
<span class="md-ellipsis">
iter_paths
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.keys" class="md-nav__link">
<span class="md-ellipsis">
keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.update" class="md-nav__link">
<span class="md-ellipsis">
update
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Pipeline" class="md-nav__link">
<span class="md-ellipsis">
Pipeline
</span>
</a>
<nav class="md-nav" aria-label="Pipeline">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Pipeline-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Pipeline.run" class="md-nav__link">
<span class="md-ellipsis">
run
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Schema" class="md-nav__link">
<span class="md-ellipsis">
Schema
</span>
</a>
<nav class="md-nav" aria-label="Schema">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Schema-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Schema.validate_payload" class="md-nav__link">
<span class="md-ellipsis">
validate_payload
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Schema.validate_update" class="md-nav__link">
<span class="md-ellipsis">
validate_update
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.SchemaError" class="md-nav__link">
<span class="md-ellipsis">
SchemaError
</span>
</a>
<nav class="md-nav" aria-label="SchemaError">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.SchemaError--indicates-invalid-structure-invalid-path-or-invalid-type" class="md-nav__link">
<span class="md-ellipsis">
Indicates invalid structure, invalid path, or invalid type.
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State" class="md-nav__link">
<span class="md-ellipsis">
State
</span>
</a>
<nav class="md-nav" aria-label="State">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.State-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.State.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.fork" class="md-nav__link">
<span class="md-ellipsis">
fork
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.get" class="md-nav__link">
<span class="md-ellipsis">
get
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.has" class="md-nav__link">
<span class="md-ellipsis">
has
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.lineage" class="md-nav__link">
<span class="md-ellipsis">
lineage
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.load_pipeline" class="md-nav__link">
<span class="md-ellipsis">
load_pipeline
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
State
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
State
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="state/" class="md-nav__link">
<span class="md-ellipsis">
State
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-ellipsis">
Node
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Node
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="node/" class="md-nav__link">
<span class="md-ellipsis">
Node
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-ellipsis">
Graph
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Graph
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="graph/" class="md-nav__link">
<span class="md-ellipsis">
Graph
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
<span class="md-ellipsis">
Engine
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Engine
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="engine/" class="md-nav__link">
<span class="md-ellipsis">
Engine
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="">
<span class="md-ellipsis">
Yaml
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Yaml
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="yaml_loader/" class="md-nav__link">
<span class="md-ellipsis">
Yaml Loader
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#dagpipe" class="md-nav__link">
<span class="md-ellipsis">
dagpipe
</span>
</a>
<nav class="md-nav" aria-label="dagpipe">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe--summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--installation" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--quick-start" class="md-nav__link">
<span class="md-ellipsis">
Quick Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--public-api" class="md-nav__link">
<span class="md-ellipsis">
Public API
</span>
</a>
<nav class="md-nav" aria-label="Public API">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe--execution-core" class="md-nav__link">
<span class="md-ellipsis">
Execution Core
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--state-data" class="md-nav__link">
<span class="md-ellipsis">
State &amp; Data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe--declarative-pipelines" class="md-nav__link">
<span class="md-ellipsis">
Declarative Pipelines
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe-classes" class="md-nav__link">
<span class="md-ellipsis">
Classes
</span>
</a>
<nav class="md-nav" aria-label="Classes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine" class="md-nav__link">
<span class="md-ellipsis">
Engine
</span>
</a>
<nav class="md-nav" aria-label="Engine">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine-attributes" class="md-nav__link">
<span class="md-ellipsis">
Attributes
</span>
</a>
<nav class="md-nav" aria-label="Attributes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine.nodes" class="md-nav__link">
<span class="md-ellipsis">
nodes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Engine-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Engine.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Engine.run" class="md-nav__link">
<span class="md-ellipsis">
run
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph" class="md-nav__link">
<span class="md-ellipsis">
Graph
</span>
</a>
<nav class="md-nav" aria-label="Graph">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Graph--initializes-node-registry-and-edge-mappings" class="md-nav__link">
<span class="md-ellipsis">
Initializes node registry and edge mappings.
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Graph.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.__repr__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.add_edge" class="md-nav__link">
<span class="md-ellipsis">
add_edge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.add_root" class="md-nav__link">
<span class="md-ellipsis">
add_root
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.children" class="md-nav__link">
<span class="md-ellipsis">
children
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.nodes" class="md-nav__link">
<span class="md-ellipsis">
nodes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.parents" class="md-nav__link">
<span class="md-ellipsis">
parents
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Graph.roots" class="md-nav__link">
<span class="md-ellipsis">
roots
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node" class="md-nav__link">
<span class="md-ellipsis">
Node
</span>
</a>
<nav class="md-nav" aria-label="Node">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Node-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Node.__hash__" class="md-nav__link">
<span class="md-ellipsis">
__hash__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__hash__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__new__" class="md-nav__link">
<span class="md-ellipsis">
__new__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__repr__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__str__" class="md-nav__link">
<span class="md-ellipsis">
__str__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.__str__--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.clean_id_and_name" class="md-nav__link">
<span class="md-ellipsis">
clean_id_and_name
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.fork" class="md-nav__link">
<span class="md-ellipsis">
fork
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.node_id_to_name" class="md-nav__link">
<span class="md-ellipsis">
node_id_to_name
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.resolve" class="md-nav__link">
<span class="md-ellipsis">
resolve
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Node.run" class="md-nav__link">
<span class="md-ellipsis">
run
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload" class="md-nav__link">
<span class="md-ellipsis">
Payload
</span>
</a>
<nav class="md-nav" aria-label="Payload">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Payload-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Payload.as_dict" class="md-nav__link">
<span class="md-ellipsis">
as_dict
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.get" class="md-nav__link">
<span class="md-ellipsis">
get
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.has" class="md-nav__link">
<span class="md-ellipsis">
has
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.iter_paths" class="md-nav__link">
<span class="md-ellipsis">
iter_paths
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.keys" class="md-nav__link">
<span class="md-ellipsis">
keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Payload.update" class="md-nav__link">
<span class="md-ellipsis">
update
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Pipeline" class="md-nav__link">
<span class="md-ellipsis">
Pipeline
</span>
</a>
<nav class="md-nav" aria-label="Pipeline">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Pipeline-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Pipeline.run" class="md-nav__link">
<span class="md-ellipsis">
run
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Schema" class="md-nav__link">
<span class="md-ellipsis">
Schema
</span>
</a>
<nav class="md-nav" aria-label="Schema">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Schema-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.Schema.validate_payload" class="md-nav__link">
<span class="md-ellipsis">
validate_payload
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.Schema.validate_update" class="md-nav__link">
<span class="md-ellipsis">
validate_update
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.SchemaError" class="md-nav__link">
<span class="md-ellipsis">
SchemaError
</span>
</a>
<nav class="md-nav" aria-label="SchemaError">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.SchemaError--indicates-invalid-structure-invalid-path-or-invalid-type" class="md-nav__link">
<span class="md-ellipsis">
Indicates invalid structure, invalid path, or invalid type.
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State" class="md-nav__link">
<span class="md-ellipsis">
State
</span>
</a>
<nav class="md-nav" aria-label="State">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.State-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.State.__repr__" class="md-nav__link">
<span class="md-ellipsis">
__repr__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.fork" class="md-nav__link">
<span class="md-ellipsis">
fork
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.get" class="md-nav__link">
<span class="md-ellipsis">
get
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.has" class="md-nav__link">
<span class="md-ellipsis">
has
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dagpipe.State.lineage" class="md-nav__link">
<span class="md-ellipsis">
lineage
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dagpipe-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#dagpipe.load_pipeline" class="md-nav__link">
<span class="md-ellipsis">
load_pipeline
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="dagpipe_1">dagpipe</h1>
<div class="doc doc-object doc-module">
<h2 id="dagpipe" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">dagpipe</span>
</h2>
<div class="doc doc-contents first">
<h3 id="dagpipe--summary">Summary</h3>
<p>Directed acyclic graph execution framework for deterministic state propagation.</p>
<p><code>dagpipe</code> executes pipelines composed of nodes connected in a directed acyclic
graph (DAG). Each node receives an immutable <code>State</code> and optionally produces
derived states for downstream nodes.</p>
<h3 id="dagpipe--installation">Installation</h3>
<p>Install using pip:</p>
<div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a>pip<span class="w"> </span>install<span class="w"> </span>dagpipe
</span></code></pre></div></td></tr></table></div>
<hr />
<h3 id="dagpipe--quick-start">Quick Start</h3>
<div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-1-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-1-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-1-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-1-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-1-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-1-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-1-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-1-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-1-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-1-10">10</a></span>
<span class="normal"><a href="#__codelineno-1-11">11</a></span>
<span class="normal"><a href="#__codelineno-1-12">12</a></span>
<span class="normal"><a href="#__codelineno-1-13">13</a></span>
<span class="normal"><a href="#__codelineno-1-14">14</a></span>
<span class="normal"><a href="#__codelineno-1-15">15</a></span>
<span class="normal"><a href="#__codelineno-1-16">16</a></span>
<span class="normal"><a href="#__codelineno-1-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">dagpipe</span><span class="w"> </span><span class="kn">import</span> <span class="n">State</span><span class="p">,</span> <span class="n">Payload</span><span class="p">,</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">Graph</span><span class="p">,</span> <span class="n">Engine</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">dagpipe.node</span><span class="w"> </span><span class="kn">import</span> <span class="n">Node</span>
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3"></a>
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4"></a><span class="k">class</span><span class="w"> </span><span class="nc">HelloNode</span><span class="p">(</span><span class="n">Node</span><span class="p">):</span>
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5"></a> <span class="nb">id</span> <span class="o">=</span> <span class="s2">&quot;hello&quot;</span>
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6"></a> <span class="k">def</span><span class="w"> </span><span class="nf">resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
</span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7"></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">fork</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">payload_update</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;hello&quot;</span><span class="p">})</span>
</span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8"></a>
</span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9"></a><span class="c1"># Build and run</span>
</span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10"></a><span class="n">graph</span> <span class="o">=</span> <span class="n">Graph</span><span class="p">()</span>
</span><span id="__span-1-11"><a id="__codelineno-1-11" name="__codelineno-1-11"></a><span class="n">graph</span><span class="o">.</span><span class="n">add_root</span><span class="p">(</span><span class="n">HelloNode</span><span class="p">())</span>
</span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12"></a><span class="n">engine</span> <span class="o">=</span> <span class="n">Engine</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
</span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13"></a>
</span><span id="__span-1-14"><a id="__codelineno-1-14" name="__codelineno-1-14"></a><span class="k">class</span><span class="w"> </span><span class="nc">MyState</span><span class="p">(</span><span class="n">State</span><span class="p">):</span>
</span><span id="__span-1-15"><a id="__codelineno-1-15" name="__codelineno-1-15"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({})</span>
</span><span id="__span-1-16"><a id="__codelineno-1-16" name="__codelineno-1-16"></a>
</span><span id="__span-1-17"><a id="__codelineno-1-17" name="__codelineno-1-17"></a><span class="n">results</span> <span class="o">=</span> <span class="n">engine</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">MyState</span><span class="p">(</span><span class="n">payload</span><span class="o">=</span><span class="n">Payload</span><span class="p">({})))</span>
</span></code></pre></div></td></tr></table></div>
<hr />
<h3 id="dagpipe--public-api">Public API</h3>
<p>This package re-exports the <strong>core pipeline components</strong>.
Consumers should import from this namespace for standard usage.</p>
<h4 id="dagpipe--execution-core">Execution Core</h4>
<ul>
<li><code>Engine</code>: Responsible for orchestrating node execution and state propagation.</li>
<li><code>Graph</code>: Defines the execution topology and node relationships.</li>
<li><code>Node</code>: Base class for defining execution logic and transformations.</li>
</ul>
<h4 id="dagpipe--state-data">State &amp; Data</h4>
<ul>
<li><code>State</code>: Represents an immutable execution snapshot at a point in time.</li>
<li><code>Payload</code>: Immutable hierarchical container for execution data.</li>
<li><code>Schema</code>: Defines and validates the allowed structure of payloads.</li>
<li><code>SchemaError</code>: Raised when data violates the declared schema.</li>
</ul>
<h4 id="dagpipe--declarative-pipelines">Declarative Pipelines</h4>
<ul>
<li><code>Pipeline</code>: High-level wrapper for an engine, state type, and initial payload.</li>
<li><code>load_pipeline</code>: Factory function to create a pipeline from YAML.</li>
</ul>
<hr />
<div class="doc doc-children">
<h3 id="dagpipe-classes">Classes</h3>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.Engine" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Engine</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Engine</span><span class="p">(</span><span class="n">nodes_or_graph</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="n">Node</span><span class="p">],</span> <span class="n">Graph</span><span class="p">])</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Execution engine responsible for running pipeline logic.</p>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><code>- Accepts either a linear sequence of `Node` objects or a `Graph`
defining execution topology.
- Propagates immutable `State` objects through `Node` objects and
collects terminal states.
</code></pre></div></td></tr></table></div>
<p><strong>Guarantees:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><code>- Never mutates `State`, `Node`, or `Graph` instances.
- `State` objects are never modified in place; each branch produces
independent instances.
- Execution order is deterministic and follows graph or pipeline topology.
- Thread-safe for concurrent execution.
</code></pre></div></td></tr></table></div>
</details>
<p>Initialize the execution engine.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>nodes_or_graph</code></td>
<td>
<code><span title="typing.Sequence">Sequence</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a>] | <a class="autorefs autorefs-internal" title="dagpipe.graph.Graph" href="graph/#dagpipe.graph.Graph">Graph</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Pipeline definition. May be a linear sequence or a DAG.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>TypeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If input is not a <code>Sequence[Node]</code> or <code>Graph</code>, or contains
invalid node types.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Detects execution mode (linear or DAG) and validates node
types and structure.
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="dagpipe.Engine-attributes">Attributes</h5>
<div class="doc doc-object doc-attribute">
<h6 id="dagpipe.Engine.nodes" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">nodes</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="n">nodes</span><span class="p">:</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return nodes managed by this engine.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>tuple[Node, ...]:
Ordered sequence in linear mode or all nodes in graph mode.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h5 id="dagpipe.Engine-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Engine.__repr__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__repr__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__repr__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">str</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return the canonical string representation of the object.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Representation that uniquely identifies the object and its configuration.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Engine.run" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">run</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">run</span><span class="p">(</span><span class="n">root</span><span class="p">:</span> <span class="n">State</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">State</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Execute the pipeline starting from a root <code>State</code>.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>root</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Initial execution state.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.List">List</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>list[State]:
Terminal execution states produced by the pipeline.</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>TypeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If <code>root</code> is not a <code>State</code> instance.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>RuntimeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If the engine execution mode is invalid.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Selects execution mode, propagates state through nodes, creates
new instances for branches, and collects terminal states.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.Graph" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Graph</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Graph</span><span class="p">()</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Directed Acyclic Graph defining execution topology of <code>Node</code> objects.</p>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Stores node connectivity and validates that the topology remains acyclic.
- Structure determines how `State` flows between nodes during execution.
</code></pre></div></td></tr></table></div>
<p><strong>Guarantees:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Topology is acyclic. Node relationships remain consistent.
- Thread-safe for concurrent reads after construction.
</code></pre></div></td></tr></table></div>
</details>
<p>Create an empty Graph.</p>
<h6 id="dagpipe.Graph--initializes-node-registry-and-edge-mappings">Initializes node registry and edge mappings.</h6>
<div class="doc doc-children">
<h5 id="dagpipe.Graph-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.__repr__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__repr__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__repr__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">str</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return debug representation.</p>
<h6 id="dagpipe.Graph.__repr__--returns">Returns</h6>
<p>str</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.add_edge" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">add_edge</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">add_edge</span><span class="p">(</span><span class="n">src</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span> <span class="n">dst</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Add a directed edge from <code>src</code> to <code>dst</code>.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>src</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Source node.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>dst</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Destination node.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>TypeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If <code>src</code> or <code>dst</code> is not a <code>Node</code>.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>ValueError</code>
</td>
<td>
<div class="doc-md-description">
<p>If the edge would create a cycle or if <code>src</code> and <code>dst</code> are common.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<ul>
<li>Validates node types.</li>
<li>Prevents cycles.</li>
<li>Registers nodes if not present.</li>
<li>Updates parent and child mappings.</li>
</ul>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.add_root" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">add_root</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">add_root</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Add a root node with no parents.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>node</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Node to add as a root.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>TypeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If node is not a Node instance.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.children" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">children</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">children</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return child nodes of a node.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>node</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Node to query.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[Node, ...]:
Outgoing neighbors.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.nodes" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">nodes</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">nodes</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return all nodes in the graph.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[Node, ...]:
All registered nodes.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.parents" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">parents</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">parents</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return parent nodes of a node.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>node</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Node to query.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[Node, ...]:
Incoming neighbors.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Graph.roots" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">roots</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">roots</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Node</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return root nodes (nodes with no incoming edges).</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[Node, ...]:
Entry point nodes.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.Node" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Node</span>
</h4>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><span title="abc.ABC">ABC</span></code></p>
<p>Base class for all dagpipe execution nodes.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Node.id">id</span></code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Unique identifier of the node (snake_case dotted format).</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Node.name">name</span></code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Human-readable display name.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- Represents a deterministic unit of execution in the pipeline graph.
- Consumes one `State` and produces zero, one, or many derived states.
- Defines execution logic and enables branching, filtering, and transformation.
</code></pre></div></td></tr></table></div>
<p><strong>Guarantees:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Nodes must never mutate the input `State`.
- Instances are singletons per subclass and reused across executions.
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="dagpipe.Node-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.__hash__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__hash__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__hash__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">int</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return stable hash based on node ID.</p>
<h6 id="dagpipe.Node.__hash__--returns">Returns</h6>
<p>int</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.__new__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__new__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__new__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nf">Node</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Create or reuse singleton instance of the Node subclass.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>Node</code></td> <td>
<code><a class="autorefs autorefs-internal" title="dagpipe.node.Node" href="node/#dagpipe.node.Node">Node</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Singleton instance of the subclass.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.__repr__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__repr__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__repr__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">str</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return debug representation.</p>
<h6 id="dagpipe.Node.__repr__--returns">Returns</h6>
<p>str</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.__str__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__str__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__str__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">str</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return display representation.</p>
<h6 id="dagpipe.Node.__str__--returns">Returns</h6>
<p>str</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.clean_id_and_name" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">clean_id_and_name</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">clean_id_and_name</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Normalize and validate node ID and display name.</p>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>TypeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If ID is not a string.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>ValueError</code>
</td>
<td>
<div class="doc-md-description">
<p>If ID format is invalid.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Guarantees:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- Generates ID from module and class name if missing.
- Validates ID format.
- Generates human-readable name if missing.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.fork" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">fork</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">fork</span><span class="p">(</span><span class="n">state</span><span class="p">:</span> <span class="n">State</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">payload_update</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">confidence_delta</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">metadata_update</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">State</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Create a child <code>State</code> attributed to this node.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>state</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Parent execution state.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>payload_update</code></td>
<td>
<code>Mapping[str, Any]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-path payload updates.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>confidence_delta</code></td>
<td>
<code>float</code>
</td>
<td>
<div class="doc-md-description">
<p>Confidence adjustment.</p>
</div>
</td>
<td>
<code>0.0</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>metadata_update</code></td>
<td>
<code>Mapping[str, Any]</code>
</td>
<td>
<div class="doc-md-description">
<p>Metadata updates.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>State</code></td> <td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a></code>
</td>
<td>
<div class="doc-md-description">
<p>New child execution state.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Convenience wrapper around `State.fork()` that automatically
records this node&#39;s ID in state history.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.node_id_to_name" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">node_id_to_name</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">node_id_to_name</span><span class="p">(</span><span class="n">node_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Convert a dotted snake_case node ID into a human-readable name.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>node_id</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Unique node identifier (e.g., 'entity.resolve.numeric_merchant').</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Human-readable display name (e.g., 'Entity Resolve Numeric Merchant').</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.resolve" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">resolve</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">resolve</span><span class="p">(</span><span class="n">state</span><span class="p">:</span> <span class="n">State</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">State</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Execute node logic.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>state</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Input execution state.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Yields:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>State</code></td> <td>
<code><span title="typing.Iterable">Iterable</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Derived execution state(s).</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><code>- Subclasses implement specific resolution behavior.
- Must not mutate input state.
- Should use `fork()` to create child states.
- May yield zero states to terminate a branch.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Node.run" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">run</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">run</span><span class="p">(</span><span class="n">state</span><span class="p">:</span> <span class="n">State</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="n">State</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Execute this node on a <code>State</code>.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>state</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Input execution state.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>tuple[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>tuple[State, ...]:
Derived execution states.</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>TypeError</code>
</td>
<td>
<div class="doc-md-description">
<p>If <code>resolve()</code> yields a non-<code>State</code> object.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.Payload" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Payload</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Payload</span><span class="p">(</span><span class="n">_data</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Immutable hierarchical container with dot-path access.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Payload._data">_data</span></code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Immutable hierarchical data structure.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- Stores execution data used by `State`.
- Supports efficient atomic updates without modifying existing instances.
- `Payload` instances are fully thread-safe due to immutability.
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="dagpipe.Payload-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Payload.as_dict" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">as_dict</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">as_dict</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return underlying mapping.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Mapping[str, Any]:
Read-only view of the underlying data.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Payload.get" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">get</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">Any</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Retrieve value using dot-path.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>path</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-separated path to the value.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>default</code></td>
<td>
<code><span title="typing.Any">Any</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Default value if path doesn't exist.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>Any</code></td> <td>
<code><span title="typing.Any">Any</span></code>
</td>
<td>
<div class="doc-md-description">
<p>The retrieved value or default.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Payload.has" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">has</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">has</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return True if path exists.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>path</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-separated path to check.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>bool</code></td> <td>
<code>bool</code>
</td>
<td>
<div class="doc-md-description">
<p>Existence of the path.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Payload.iter_paths" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">iter_paths</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">iter_paths</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Recursively yield dot-paths for all leaf nodes.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>data</code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The mapping to iterate over.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>prefix</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Current path prefix.</p>
</div>
</td>
<td>
<code>&#39;&#39;</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Iterable">Iterable</span>[str]</code>
</td>
<td>
<div class="doc-md-description">
<p>Iterable[str]:
Generator yielding dot-paths.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Payload.keys" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">keys</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">keys</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return top-level keys.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Iterable">Iterable</span>[str]</code>
</td>
<td>
<div class="doc-md-description">
<p>Iterable[str]:
Iterator over top-level keys.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Payload.update" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">update</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">update</span><span class="p">(</span><span class="n">updates</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Payload</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Create a new <code>Payload</code> with dot-path updates applied.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>updates</code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-path to value mapping.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>Payload</code></td> <td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.Payload" href="state/#dagpipe.state.Payload">Payload</a></code>
</td>
<td>
<div class="doc-md-description">
<p>New immutable payload instance with updates.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Guarantees:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Preserves existing data by copying only modified branches.
- Returns a new immutable `Payload`.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.Pipeline" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Pipeline</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Pipeline</span><span class="p">(</span><span class="n">engine</span><span class="p">:</span> <span class="n">Engine</span><span class="p">,</span> <span class="n">state_cls</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="n">State</span><span class="p">],</span> <span class="n">initial_payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">)</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Executable pipeline created from YAML configuration.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Pipeline.engine">engine</span></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.engine.Engine" href="engine/#dagpipe.engine.Engine">Engine</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Execution engine responsible for running the pipeline.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Pipeline.state_cls">state_cls</span></code></td>
<td>
<code><span title="typing.Type">Type</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dynamically created <code>State</code> subclass with configured schema.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Pipeline.initial_payload">initial_payload</span></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.Payload" href="state/#dagpipe.state.Payload">Payload</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Default payload used when execution begins.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- Encapsulates engine, state type, and initial payload.
- Provides a simplified interface for executing configured pipelines.
- Safe for concurrent execution if underlying nodes are thread-safe.
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="dagpipe.Pipeline-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Pipeline.run" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">run</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">run</span><span class="p">(</span><span class="n">payload_override</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">State</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Execute the pipeline.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>payload_override</code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Payload values overriding initial payload.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>list[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>list[State]:
Terminal execution states.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code>- Merges override payload with initial payload.
- Creates root `State` and executes engine.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.Schema" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Schema</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">Schema</span><span class="p">(</span><span class="n">tree</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">SchemaNode</span><span class="p">])</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Immutable hierarchical schema defining allowed payload structure.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="dagpipe.Schema.tree">tree</span></code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="dagpipe.state.SchemaNode">SchemaNode</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Hierarchical schema definition.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- Validates `State` payloads and updates.
- Reusable across all `State` instances.
- Fully thread-safe due to immutability.
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="dagpipe.Schema-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Schema.validate_payload" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">validate_payload</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">validate_payload</span><span class="p">(</span><span class="n">payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Validate complete payload structure.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>payload</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.Payload" href="state/#dagpipe.state.Payload">Payload</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Payload to validate.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.SchemaError" href="state/#dagpipe.state.SchemaError">SchemaError</a></code>
</td>
<td>
<div class="doc-md-description">
<p>If payload violates schema.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.Schema.validate_update" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">validate_update</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">validate_update</span><span class="p">(</span><span class="n">updates</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Validate payload update paths.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>updates</code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-path updates to validate.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.SchemaError" href="state/#dagpipe.state.SchemaError">SchemaError</a></code>
</td>
<td>
<div class="doc-md-description">
<p>If any path is invalid according to the schema.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.SchemaError" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SchemaError</span>
</h4>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code>Exception</code></p>
<p>Raised when payload data violates the declared schema.</p>
<h6 id="dagpipe.SchemaError--indicates-invalid-structure-invalid-path-or-invalid-type">Indicates invalid structure, invalid path, or invalid type.</h6>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="dagpipe.State" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">State</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">State</span><span class="p">(</span><span class="n">payload</span><span class="p">:</span> <span class="n">Payload</span><span class="p">,</span> <span class="n">confidence</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">parent</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">State</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">history</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(),</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">())</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Immutable execution state propagated through dagpipe pipeline.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.payload">payload</span></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.Payload" href="state/#dagpipe.state.Payload">Payload</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Execution data container.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.schema">schema</span></code></td>
<td>
<code><span title="typing.ClassVar">ClassVar</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.Schema" href="state/#dagpipe.state.Schema">Schema</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Payload validation schema.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.confidence">confidence</span></code></td>
<td>
<code>float</code>
</td>
<td>
<div class="doc-md-description">
<p>Execution confidence score.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.parent">parent</span></code></td>
<td>
<code><span title="typing.Optional">Optional</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Parent state reference.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.depth">depth</span></code></td>
<td>
<code>int</code>
</td>
<td>
<div class="doc-md-description">
<p>Execution depth.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.history">history</span></code></td>
<td>
<code><span title="typing.Tuple">Tuple</span>[str, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Ordered node execution lineage.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="dagpipe.State.metadata">metadata</span></code></td>
<td>
<code><span title="typing.Dict">Dict</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Execution metadata.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><code>- Represents a complete execution snapshot at a specific point in
pipeline traversal.
- Fundamental unit of execution in `dagpipe`.
- Fully thread-safe due to immutability.
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="dagpipe.State-functions">Functions</h5>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.State.__repr__" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">__repr__</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="fm">__repr__</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">str</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Concise debug representation.</p>
<p>Avoids printing full data for large states.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.State.fork" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">fork</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">fork</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">payload_update</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">confidence_delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">node_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">metadata_update</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">State</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Create a new child <code>State</code> derived from this state.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>payload_update</code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-path updates applied to the payload.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>confidence_delta</code></td>
<td>
<code>float</code>
</td>
<td>
<div class="doc-md-description">
<p>Adjustment applied to current confidence.</p>
</div>
</td>
<td>
<code>0.0</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>node_id</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Identifier of the node creating this state.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>metadata_update</code></td>
<td>
<code><span title="typing.Mapping">Mapping</span>[str, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Updates merged into state metadata.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>State</code></td> <td>
<code><a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a></code>
</td>
<td>
<div class="doc-md-description">
<p>A new immutable <code>State</code> instance.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Guarantees:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- This is the only supported mechanism for modifying execution data.
- Validates payload updates, preserves lineage, increments depth,
and appends to history.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.State.get" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">get</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">Any</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Retrieve payload value.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>key</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-path key.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>default</code></td>
<td>
<code><span title="typing.Any">Any</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Fallback value.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>Any</code></td> <td>
<code><span title="typing.Any">Any</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Stored value or default.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.State.has" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">has</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">has</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Check whether payload contains key.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>key</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Dot-path key.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>bool</code></td> <td>
<code>bool</code>
</td>
<td>
<div class="doc-md-description">
<p>Existence of the key.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="dagpipe.State.lineage" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">lineage</span>
</h6>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">lineage</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">State</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Return lineage from root to this State.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="dagpipe.state.State" href="state/#dagpipe.state.State">State</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[State, ...]:
Ordered execution lineage (root first).</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<h3 id="dagpipe-functions">Functions</h3>
<div class="doc doc-object doc-function">
<h4 id="dagpipe.load_pipeline" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">load_pipeline</span>
</h4>
<div class="language-python doc-signature highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="nf">load_pipeline</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Pipeline</span>
</span></code></pre></div></td></tr></table></div>
<div class="doc doc-contents ">
<p>Load pipeline from YAML file.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>path</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Path to YAML configuration file.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>Pipeline</code></td> <td>
<code><a class="autorefs autorefs-internal" title="dagpipe.yaml_loader.Pipeline" href="yaml_loader/#dagpipe.yaml_loader.Pipeline">Pipeline</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Executable pipeline instance.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="notes" open>
<summary>Notes</summary>
<p><strong>Responsibilities:</strong></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code>- Loads YAML configuration and builds schema.
- Creates `State` subclass and loads `Node` instances.
- Builds `Graph` topology and initializes `Engine`.
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
</html>