Files
smallpond/api/nodes.html
2025-03-06 02:23:52 +08:00

758 lines
49 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. 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" data-content_root="" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Nodes &#8212; smallpond documentation</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "light";
</script>
<!-- Loaded before other Sphinx assets -->
<link href="../_static/styles/theme.css?digest=5b4479735964841361fd" rel="stylesheet" />
<link href="../_static/styles/bootstrap.css?digest=5b4479735964841361fd" rel="stylesheet" />
<link href="../_static/styles/pydata-sphinx-theme.css?digest=5b4479735964841361fd" rel="stylesheet" />
<link href="../_static/vendor/fontawesome/6.1.2/css/all.min.css?digest=5b4479735964841361fd" rel="stylesheet" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../_static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../_static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../_static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.woff2" />
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=8f2a1f02" />
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../_static/scripts/bootstrap.js?digest=5b4479735964841361fd" />
<link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=5b4479735964841361fd" />
<script src="../_static/vendor/fontawesome/6.1.2/js/all.min.js?digest=5b4479735964841361fd"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=b3ba4146"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'api/nodes';</script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="smallpond.logical.node.Context" href="../generated/smallpond.logical.node.Context.html" />
<link rel="prev" title="smallpond.logical.dataset.SqlQueryDataSet" href="../generated/smallpond.logical.dataset.SqlQueryDataSet.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<a class="skip-link" href="#main-content">Skip to main content</a>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>
Back to top
</button>
<input type="checkbox"
class="sidebar-toggle"
name="__primary"
id="__primary"/>
<label class="overlay overlay-primary" for="__primary"></label>
<input type="checkbox"
class="sidebar-toggle"
name="__secondary"
id="__secondary"/>
<label class="overlay overlay-secondary" for="__secondary"></label>
<div class="search-button__wrapper">
<div class="search-button__overlay"></div>
<div class="search-button__search-container">
<form class="bd-search d-flex align-items-center"
action="../search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
id="search-input"
placeholder="Search the docs ..."
aria-label="Search the docs ..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form></div>
</div>
<nav class="bd-header navbar navbar-expand-lg bd-navbar">
<div class="bd-header__inner bd-page-width">
<label class="sidebar-toggle primary-toggle" for="__primary">
<span class="fa-solid fa-bars"></span>
</label>
<div class="col-lg-3 navbar-header-items__start">
<div class="navbar-item">
<a class="navbar-brand logo" href="../index.html">
<p class="title logo__title">smallpond documentation</p>
</a></div>
</div>
<div class="col-lg-9 navbar-header-items">
<div class="me-auto navbar-header-items__center">
<div class="navbar-item">
<nav class="navbar-nav">
<p class="sidebar-header-items__title"
role="heading"
aria-level="1"
aria-label="Site Navigation">
Site Navigation
</p>
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item">
<a class="nav-link nav-internal" href="../getstarted.html">
Getting Started
</a>
</li>
<li class="nav-item">
<a class="nav-link nav-internal" href="../internals.html">
Internals
</a>
</li>
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../api.html">
API Reference
</a>
</li>
</ul>
</nav></div>
</div>
<div class="navbar-header-items__end">
<div class="navbar-item navbar-persistent--container">
<script>
document.write(`
<button class="btn navbar-btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script>
</div>
<div class="navbar-item">
<script>
document.write(`
<button class="btn btn-sm navbar-btn theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch nav-link" data-mode="light"><i class="fa-solid fa-sun fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="dark"><i class="fa-solid fa-moon fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg"></i></span>
</button>
`);
</script></div>
<div class="navbar-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/deepseek-ai/smallpond" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">GitHub</span></a>
</li>
</ul></div>
</div>
</div>
<div class="navbar-persistent--mobile">
<script>
document.write(`
<button class="btn navbar-btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script>
</div>
<label class="sidebar-toggle secondary-toggle" for="__secondary" tabindex="0">
<span class="fa-solid fa-outdent"></span>
</label>
</div>
</nav>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<div class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
<div class="sidebar-header-items__center">
<div class="navbar-item">
<nav class="navbar-nav">
<p class="sidebar-header-items__title"
role="heading"
aria-level="1"
aria-label="Site Navigation">
Site Navigation
</p>
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item">
<a class="nav-link nav-internal" href="../getstarted.html">
Getting Started
</a>
</li>
<li class="nav-item">
<a class="nav-link nav-internal" href="../internals.html">
Internals
</a>
</li>
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../api.html">
API Reference
</a>
</li>
</ul>
</nav></div>
</div>
<div class="sidebar-header-items__end">
<div class="navbar-item">
<script>
document.write(`
<button class="btn btn-sm navbar-btn theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch nav-link" data-mode="light"><i class="fa-solid fa-sun fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="dark"><i class="fa-solid fa-moon fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg"></i></span>
</button>
`);
</script></div>
<div class="navbar-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/deepseek-ai/smallpond" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">GitHub</span></a>
</li>
</ul></div>
</div>
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<nav class="bd-docs-nav bd-links"
aria-label="Section Navigation">
<p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p>
<div class="bd-toc-item navbar-nav"><ul class="nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="dataframe.html">DataFrame</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-1"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.init.html">smallpond.init</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.from_items.html">smallpond.dataframe.Session.from_items</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.from_arrow.html">smallpond.dataframe.Session.from_arrow</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.from_pandas.html">smallpond.dataframe.Session.from_pandas</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.read_csv.html">smallpond.dataframe.Session.read_csv</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.read_json.html">smallpond.dataframe.Session.read_json</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.read_parquet.html">smallpond.dataframe.Session.read_parquet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.repartition.html">smallpond.dataframe.DataFrame.repartition</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.partial_sql.html">smallpond.dataframe.Session.partial_sql</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.map.html">smallpond.dataframe.DataFrame.map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.map_batches.html">smallpond.dataframe.DataFrame.map_batches</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.flat_map.html">smallpond.dataframe.DataFrame.flat_map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.filter.html">smallpond.dataframe.DataFrame.filter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.limit.html">smallpond.dataframe.DataFrame.limit</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.partial_sort.html">smallpond.dataframe.DataFrame.partial_sort</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.random_shuffle.html">smallpond.dataframe.DataFrame.random_shuffle</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.count.html">smallpond.dataframe.DataFrame.count</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.take.html">smallpond.dataframe.DataFrame.take</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.take_all.html">smallpond.dataframe.DataFrame.take_all</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.to_arrow.html">smallpond.dataframe.DataFrame.to_arrow</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.to_pandas.html">smallpond.dataframe.DataFrame.to_pandas</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.write_parquet.html">smallpond.dataframe.DataFrame.write_parquet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.write_parquet_lazy.html">smallpond.dataframe.DataFrame.write_parquet_lazy</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.compute.html">smallpond.dataframe.DataFrame.compute</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.is_computed.html">smallpond.dataframe.DataFrame.is_computed</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.DataFrame.recompute.html">smallpond.dataframe.DataFrame.recompute</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.dataframe.Session.wait.html">smallpond.dataframe.Session.wait</a></li>
</ul>
</li>
</ul>
<ul class="current nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="dataset.html">Dataset</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-2"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.DataSet.html">smallpond.logical.dataset.DataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.FileSet.html">smallpond.logical.dataset.FileSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.ParquetDataSet.html">smallpond.logical.dataset.ParquetDataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.CsvDataSet.html">smallpond.logical.dataset.CsvDataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.JsonDataSet.html">smallpond.logical.dataset.JsonDataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.ArrowTableDataSet.html">smallpond.logical.dataset.ArrowTableDataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.PandasDataSet.html">smallpond.logical.dataset.PandasDataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.PartitionedDataSet.html">smallpond.logical.dataset.PartitionedDataSet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.dataset.SqlQueryDataSet.html">smallpond.logical.dataset.SqlQueryDataSet</a></li>
</ul>
</li>
<li class="toctree-l1 current active has-children"><a class="current reference internal" href="#">Nodes</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-3"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.Context.html">smallpond.logical.node.Context</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.NodeId.html">smallpond.logical.node.NodeId</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.LogicalPlan.html">smallpond.logical.node.LogicalPlan</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.LogicalPlanVisitor.html">smallpond.logical.node.LogicalPlanVisitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.Node.html">smallpond.logical.node.Node</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.DataSetPartitionNode.html">smallpond.logical.node.DataSetPartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.ArrowBatchNode.html">smallpond.logical.node.ArrowBatchNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.ArrowComputeNode.html">smallpond.logical.node.ArrowComputeNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.ArrowStreamNode.html">smallpond.logical.node.ArrowStreamNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.ConsolidateNode.html">smallpond.logical.node.ConsolidateNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.DataSinkNode.html">smallpond.logical.node.DataSinkNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.DataSourceNode.html">smallpond.logical.node.DataSourceNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.EvenlyDistributedPartitionNode.html">smallpond.logical.node.EvenlyDistributedPartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.HashPartitionNode.html">smallpond.logical.node.HashPartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.LimitNode.html">smallpond.logical.node.LimitNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.LoadPartitionedDataSetNode.html">smallpond.logical.node.LoadPartitionedDataSetNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.PandasBatchNode.html">smallpond.logical.node.PandasBatchNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.PandasComputeNode.html">smallpond.logical.node.PandasComputeNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.PartitionNode.html">smallpond.logical.node.PartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.ProjectionNode.html">smallpond.logical.node.ProjectionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.PythonScriptNode.html">smallpond.logical.node.PythonScriptNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.RangePartitionNode.html">smallpond.logical.node.RangePartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.RepeatPartitionNode.html">smallpond.logical.node.RepeatPartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.RootNode.html">smallpond.logical.node.RootNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.ShuffleNode.html">smallpond.logical.node.ShuffleNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.SqlEngineNode.html">smallpond.logical.node.SqlEngineNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.UnionNode.html">smallpond.logical.node.UnionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.UserDefinedPartitionNode.html">smallpond.logical.node.UserDefinedPartitionNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.logical.node.UserPartitionedDataSourceNode.html">smallpond.logical.node.UserPartitionedDataSourceNode</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="tasks.html">Tasks</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-4"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.RuntimeContext.html">smallpond.execution.task.RuntimeContext</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.JobId.html">smallpond.execution.task.JobId</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.TaskId.html">smallpond.execution.task.TaskId</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.TaskRuntimeId.html">smallpond.execution.task.TaskRuntimeId</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PartitionInfo.html">smallpond.execution.task.PartitionInfo</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PerfStats.html">smallpond.execution.task.PerfStats</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.ExecutionPlan.html">smallpond.execution.task.ExecutionPlan</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.Task.html">smallpond.execution.task.Task</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.ArrowBatchTask.html">smallpond.execution.task.ArrowBatchTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.ArrowComputeTask.html">smallpond.execution.task.ArrowComputeTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.ArrowStreamTask.html">smallpond.execution.task.ArrowStreamTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.DataSinkTask.html">smallpond.execution.task.DataSinkTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.DataSourceTask.html">smallpond.execution.task.DataSourceTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.EvenlyDistributedPartitionProducerTask.html">smallpond.execution.task.EvenlyDistributedPartitionProducerTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.HashPartitionArrowTask.html">smallpond.execution.task.HashPartitionArrowTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.HashPartitionDuckDbTask.html">smallpond.execution.task.HashPartitionDuckDbTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.HashPartitionTask.html">smallpond.execution.task.HashPartitionTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.LoadPartitionedDataSetProducerTask.html">smallpond.execution.task.LoadPartitionedDataSetProducerTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.MergeDataSetsTask.html">smallpond.execution.task.MergeDataSetsTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PandasBatchTask.html">smallpond.execution.task.PandasBatchTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PandasComputeTask.html">smallpond.execution.task.PandasComputeTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PartitionConsumerTask.html">smallpond.execution.task.PartitionConsumerTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PartitionProducerTask.html">smallpond.execution.task.PartitionProducerTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.ProjectionTask.html">smallpond.execution.task.ProjectionTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.PythonScriptTask.html">smallpond.execution.task.PythonScriptTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.RangePartitionTask.html">smallpond.execution.task.RangePartitionTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.RepeatPartitionProducerTask.html">smallpond.execution.task.RepeatPartitionProducerTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.RootTask.html">smallpond.execution.task.RootTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.SplitDataSetTask.html">smallpond.execution.task.SplitDataSetTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.SqlEngineTask.html">smallpond.execution.task.SqlEngineTask</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.task.UserDefinedPartitionProducerTask.html">smallpond.execution.task.UserDefinedPartitionProducerTask</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="execution.html">Execution</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-5"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.driver.Driver.html">smallpond.execution.driver.Driver</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.manager.JobManager.html">smallpond.execution.manager.JobManager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.scheduler.Scheduler.html">smallpond.execution.scheduler.Scheduler</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.execution.executor.Executor.html">smallpond.execution.executor.Executor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.platform.Platform.html">smallpond.platform.Platform</a></li>
<li class="toctree-l2"><a class="reference internal" href="../generated/smallpond.platform.MPI.html">smallpond.platform.MPI</a></li>
</ul>
</li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
</div>
<div id="rtd-footer-container"></div>
</div>
<main id="main-content" class="bd-main">
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item">
<nav aria-label="Breadcrumb">
<ul class="bd-breadcrumbs">
<li class="breadcrumb-item breadcrumb-home">
<a href="../index.html" class="nav-link" aria-label="Home">
<i class="fa-solid fa-home"></i>
</a>
</li>
<li class="breadcrumb-item"><a href="../api.html" class="nav-link">API Reference</a></li>
<li class="breadcrumb-item active" aria-current="page">Nodes</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article" role="main">
<section id="nodes">
<span id="id1"></span><h1>Nodes<a class="headerlink" href="#nodes" title="Permalink to this heading">#</a></h1>
<p>Nodes represent the fundamental building blocks of a data processing pipeline. Each node encapsulates a specific operation or transformation that can be applied to a dataset.
Nodes can be chained together to form a logical plan, which is a directed acyclic graph (DAG) of nodes that represent the overall data processing workflow.</p>
<p>A typical workflow to create a logical plan is as follows:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create a global context</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">Context</span><span class="p">()</span>
<span class="c1"># Create a dataset</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="n">ParquetDataSet</span><span class="p">(</span><span class="s2">&quot;path/to/dataset/*.parquet&quot;</span><span class="p">)</span>
<span class="c1"># Create a data source node</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">DataSourceNode</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">dataset</span><span class="p">)</span>
<span class="c1"># Partition the data</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">DataSetPartitionNode</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="p">(</span><span class="n">node</span><span class="p">,),</span> <span class="n">npartitions</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="c1"># Create a SQL engine node to transform the data</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">SqlEngineNode</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="p">(</span><span class="n">node</span><span class="p">,),</span> <span class="s2">&quot;SELECT * FROM </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># Create a logical plan from the root node</span>
<span class="n">plan</span> <span class="o">=</span> <span class="n">LogicalPlan</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
</pre></div>
</div>
<p>You can then create tasks from the logical plan, see <a class="reference internal" href="tasks.html#tasks"><span class="std std-ref">Tasks</span></a>.</p>
<p>Notable properties of Node:</p>
<ol class="arabic simple">
<li><p>Nodes are partitioned. Each Node generates a series of tasks, with each task processing one partition of data.</p></li>
<li><p>The input and output of a Node are a series of partitioned Datasets. A Node may write data to shared storage and return a new Dataset, or it may simply recombine the input Datasets.</p></li>
</ol>
<section id="context">
<h2>Context<a class="headerlink" href="#context" title="Permalink to this heading">#</a></h2>
<table class="autosummary longtable table autosummary">
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.Context.html#smallpond.logical.node.Context" title="smallpond.logical.node.Context"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Context</span></code></a>()</p></td>
<td><p>Global context for each logical plan.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.NodeId.html#smallpond.logical.node.NodeId" title="smallpond.logical.node.NodeId"><code class="xref py py-obj docutils literal notranslate"><span class="pre">NodeId</span></code></a></p></td>
<td><p>A unique identifier for each node.</p></td>
</tr>
</tbody>
</table>
</section>
<section id="logicalplan">
<h2>LogicalPlan<a class="headerlink" href="#logicalplan" title="Permalink to this heading">#</a></h2>
<table class="autosummary longtable table autosummary">
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.LogicalPlan.html#smallpond.logical.node.LogicalPlan" title="smallpond.logical.node.LogicalPlan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LogicalPlan</span></code></a>(ctx, root_node)</p></td>
<td><p>The logical plan that defines a directed acyclic computation graph.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.LogicalPlanVisitor.html#smallpond.logical.node.LogicalPlanVisitor" title="smallpond.logical.node.LogicalPlanVisitor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LogicalPlanVisitor</span></code></a>(*args, **kwds)</p></td>
<td><p>Visit the nodes of a logcial plan in depth-first order.</p></td>
</tr>
</tbody>
</table>
</section>
<section id="id2">
<h2>Nodes<a class="headerlink" href="#id2" title="Permalink to this heading">#</a></h2>
<table class="autosummary longtable table autosummary">
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.Node.html#smallpond.logical.node.Node" title="smallpond.logical.node.Node"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Node</span></code></a>(ctx, input_deps[, output_name, ...])</p></td>
<td><p>The base class for all nodes.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.DataSetPartitionNode.html#smallpond.logical.node.DataSetPartitionNode" title="smallpond.logical.node.DataSetPartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">DataSetPartitionNode</span></code></a>(ctx, input_deps, ...[, ...])</p></td>
<td><p>Partition the outputs of <cite>input_deps</cite> into n partitions.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.ArrowBatchNode.html#smallpond.logical.node.ArrowBatchNode" title="smallpond.logical.node.ArrowBatchNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ArrowBatchNode</span></code></a>(ctx, input_deps, *[, ...])</p></td>
<td><p>Run user-defined code to process the input datasets as a series of arrow tables.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.ArrowComputeNode.html#smallpond.logical.node.ArrowComputeNode" title="smallpond.logical.node.ArrowComputeNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ArrowComputeNode</span></code></a>(ctx, input_deps, *[, ...])</p></td>
<td><p>Run Python code to process the input datasets, which have been loaded as Apache Arrow tables.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.ArrowStreamNode.html#smallpond.logical.node.ArrowStreamNode" title="smallpond.logical.node.ArrowStreamNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ArrowStreamNode</span></code></a>(ctx, input_deps, *[, ...])</p></td>
<td><p>Run Python code to process the input datasets, which have been loaded as RecordBatchReader.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.ConsolidateNode.html#smallpond.logical.node.ConsolidateNode" title="smallpond.logical.node.ConsolidateNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ConsolidateNode</span></code></a>(ctx, input_dep, dimensions)</p></td>
<td><p>Consolidate partitions into larger ones.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.DataSinkNode.html#smallpond.logical.node.DataSinkNode" title="smallpond.logical.node.DataSinkNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">DataSinkNode</span></code></a>(ctx, input_deps, output_path[, ...])</p></td>
<td><p>Collect the output files of <cite>input_deps</cite> to <cite>output_path</cite>.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.DataSourceNode.html#smallpond.logical.node.DataSourceNode" title="smallpond.logical.node.DataSourceNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">DataSourceNode</span></code></a>(ctx, dataset)</p></td>
<td><p>All inputs of a logical plan are represented as <cite>DataSourceNode</cite>.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.EvenlyDistributedPartitionNode.html#smallpond.logical.node.EvenlyDistributedPartitionNode" title="smallpond.logical.node.EvenlyDistributedPartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">EvenlyDistributedPartitionNode</span></code></a>(ctx, ...[, ...])</p></td>
<td><p>Evenly distribute the output files or rows of <cite>input_deps</cite> into n partitions.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.HashPartitionNode.html#smallpond.logical.node.HashPartitionNode" title="smallpond.logical.node.HashPartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">HashPartitionNode</span></code></a>(ctx, input_deps, npartitions)</p></td>
<td><p>Partition the outputs of <cite>input_deps</cite> into n partitions based on the hash values of <cite>hash_columns</cite>.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.LimitNode.html#smallpond.logical.node.LimitNode" title="smallpond.logical.node.LimitNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LimitNode</span></code></a>(ctx, input_dep, limit)</p></td>
<td><p>Limit the number of rows of the output of an input node.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.LoadPartitionedDataSetNode.html#smallpond.logical.node.LoadPartitionedDataSetNode" title="smallpond.logical.node.LoadPartitionedDataSetNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LoadPartitionedDataSetNode</span></code></a>(ctx, input_deps, ...)</p></td>
<td><p>Load existing partitioned dataset (only parquet files are supported).</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.PandasBatchNode.html#smallpond.logical.node.PandasBatchNode" title="smallpond.logical.node.PandasBatchNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PandasBatchNode</span></code></a>(ctx, input_deps, *[, ...])</p></td>
<td><p>Run Python code to process the input datasets as a series of pandas DataFrames.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.PandasComputeNode.html#smallpond.logical.node.PandasComputeNode" title="smallpond.logical.node.PandasComputeNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PandasComputeNode</span></code></a>(ctx, input_deps, *[, ...])</p></td>
<td><p>Run Python code to process the input datasets as a single pandas DataFrame.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.PartitionNode.html#smallpond.logical.node.PartitionNode" title="smallpond.logical.node.PartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PartitionNode</span></code></a>(ctx, input_deps, npartitions)</p></td>
<td><p>The base class for all partition nodes.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.ProjectionNode.html#smallpond.logical.node.ProjectionNode" title="smallpond.logical.node.ProjectionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProjectionNode</span></code></a>(ctx, input_dep[, columns, ...])</p></td>
<td><p>Select columns from output of an input node.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.PythonScriptNode.html#smallpond.logical.node.PythonScriptNode" title="smallpond.logical.node.PythonScriptNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PythonScriptNode</span></code></a>(ctx, input_deps, *[, ...])</p></td>
<td><p>Run Python code to process the input datasets with <cite>PythonScriptNode.process(...)</cite>.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.RangePartitionNode.html#smallpond.logical.node.RangePartitionNode" title="smallpond.logical.node.RangePartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RangePartitionNode</span></code></a>(ctx, input_deps, split_points)</p></td>
<td><p>Partition the outputs of <cite>input_deps</cite> into partitions defined by <cite>split_points</cite>.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.RepeatPartitionNode.html#smallpond.logical.node.RepeatPartitionNode" title="smallpond.logical.node.RepeatPartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RepeatPartitionNode</span></code></a>(ctx, input_deps, ...[, ...])</p></td>
<td><p>Create a new partition dimension by repeating the <cite>input_deps</cite>.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.RootNode.html#smallpond.logical.node.RootNode" title="smallpond.logical.node.RootNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RootNode</span></code></a>(ctx, input_deps)</p></td>
<td><p>A virtual node that assembles multiple nodes and outputs nothing.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.ShuffleNode.html#smallpond.logical.node.ShuffleNode" title="smallpond.logical.node.ShuffleNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ShuffleNode</span></code></a>(ctx, input_deps, npartitions[, ...])</p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.SqlEngineNode.html#smallpond.logical.node.SqlEngineNode" title="smallpond.logical.node.SqlEngineNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SqlEngineNode</span></code></a>(ctx, input_deps, sql_query, *)</p></td>
<td><p>Run SQL query against the outputs of input_deps.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.UnionNode.html#smallpond.logical.node.UnionNode" title="smallpond.logical.node.UnionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UnionNode</span></code></a>(ctx, input_deps)</p></td>
<td><p>Union two or more nodes into one flow of data.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.UserDefinedPartitionNode.html#smallpond.logical.node.UserDefinedPartitionNode" title="smallpond.logical.node.UserDefinedPartitionNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UserDefinedPartitionNode</span></code></a>(ctx, input_deps, ...)</p></td>
<td><p>Distribute the output files or rows of <cite>input_deps</cite> into n partitions based on user code.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../generated/smallpond.logical.node.UserPartitionedDataSourceNode.html#smallpond.logical.node.UserPartitionedDataSourceNode" title="smallpond.logical.node.UserPartitionedDataSourceNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UserPartitionedDataSourceNode</span></code></a>(ctx, ...[, ...])</p></td>
<td><p></p></td>
</tr>
</tbody>
</table>
</section>
</section>
</article>
<footer class="prev-next-footer">
<div class="prev-next-area">
<a class="left-prev"
href="../generated/smallpond.logical.dataset.SqlQueryDataSet.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">smallpond.logical.dataset.SqlQueryDataSet</p>
</div>
</a>
<a class="right-next"
href="../generated/smallpond.logical.node.Context.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">smallpond.logical.node.Context</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> On this page
</div>
<nav class="bd-toc-nav page-toc">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#context">Context</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#logicalplan">LogicalPlan</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#id2">Nodes</a></li>
</ul>
</nav></div>
<div class="sidebar-secondary-item">
<div class="tocsection sourcelink">
<a href="../_sources/api/nodes.rst.txt">
<i class="fa-solid fa-file-lines"></i> Show Source
</a>
</div>
</div>
</div></div>
</div>
<footer class="bd-footer-content">
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script src="../_static/scripts/bootstrap.js?digest=5b4479735964841361fd"></script>
<script src="../_static/scripts/pydata-sphinx-theme.js?digest=5b4479735964841361fd"></script>
<footer class="bd-footer">
<div class="bd-footer__inner bd-page-width">
<div class="footer-items__start">
<div class="footer-item">
<p class="copyright">
© Copyright 2025, deepseek.
<br/>
</p>
</div>
<div class="footer-item">
<p class="sphinx-version">
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.1.2.
<br/>
</p>
</div>
</div>
<div class="footer-items__end">
<div class="footer-item">
<p class="theme-version">
Built with the <a href="https://pydata-sphinx-theme.readthedocs.io/en/stable/index.html">PyData Sphinx Theme</a> 0.14.4.
</p></div>
</div>
</div>
</footer>
</body>
</html>