blob: 8fbc92cd5e5f28faccc95e76817e6cf0a3b192ac [file]
<!DOCTYPE html>
<html lang="en" data-content_root="../../../" data-theme="auto">
<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>datafusion.user_defined &#8212; Apache DataFusion in Python documentation</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "auto";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<!--
this give us a css class that will be invisible only if js is disabled
-->
<noscript>
<style>
.pst-js-only { display: none !important; }
</style>
</noscript>
<!-- Loaded before other Sphinx assets -->
<link href="../../../_static/styles/theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link href="../../../_static/styles/pydata-sphinx-theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=8f2a1f02" />
<link rel="stylesheet" type="text/css" href="../../../_static/mystnb.11b39860a7a0cbfd473a3ad8a317855267ff0bd372690045ca344a6b62be495e.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/graphviz.css?v=4ae1632d" />
<link rel="stylesheet" type="text/css" href="../../../_static/theme_overrides.css?v=4af573bc" />
<!-- So that users can add custom icons -->
<script src="../../../_static/scripts/fontawesome.js?digest=8878045cc6db502f8baf"></script>
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../../../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" />
<link rel="preload" as="script" href="../../../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
<script src="../../../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'autoapi/datafusion/user_defined/index';</script>
<script src="../../../_static/toc-toggle.js?v=36375f01"></script>
<link rel="icon" href="../../../_static/favicon.svg"/>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="Links" href="../../../links.html" />
<link rel="prev" title="datafusion.unparser" href="../unparser/index.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
<meta name="docsearch:version" content="" />
</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="auto">
<div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
<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>
<dialog id="pst-search-dialog">
<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"
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>
</dialog>
<div class="pst-async-banner-revealer d-none">
<aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
<div class="bd-header__inner bd-page-width">
<button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation">
<span class="fa-solid fa-bars"></span>
</button>
<div class="col-lg-3 navbar-header-items__start">
<div class="navbar-item">
<a class="navbar-brand logo" href="../../../index.html">
<img src="../../../_static/original.svg" class="logo__image only-light" alt="Apache DataFusion in Python"/>
<img src="../../../_static/original_dark.svg" class="logo__image only-dark pst-js-only" alt="Apache DataFusion in Python"/>
</a></div>
</div>
<div class="col-lg-9 navbar-header-items">
<div class="me-auto navbar-header-items__center">
<div class="navbar-item">
<nav>
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../../user-guide/index.html">
User Guide
</a>
</li>
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../../contributor-guide/index.html">
Contributor Guide
</a>
</li>
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../../index.html">
API Reference
</a>
</li>
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../../links.html">
Links
</a>
</li>
</ul>
</nav></div>
</div>
<div class="navbar-header-items__end">
<div class="navbar-item navbar-persistent--container">
<button class="btn search-button-field search-button__button pst-js-only" 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>
</div>
<div class="navbar-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/datafusion-python" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-github fa-lg" aria-hidden="true"></i>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://docs.rs/datafusion/latest/datafusion/" title="Rust API docs (docs.rs)" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-rust fa-lg" aria-hidden="true"></i>
<span class="sr-only">Rust API docs (docs.rs)</span></a>
</li>
</ul></div>
<div class="navbar-item">
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Color mode" data-bs-title="Color mode" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Light"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Dark"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="System Settings"></i>
</button></div>
</div>
</div>
<div class="navbar-persistent--mobile">
<button class="btn search-button-field search-button__button pst-js-only" 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>
</div>
<button class="pst-navbar-icon sidebar-toggle secondary-toggle" aria-label="On this page">
<span class="fa-solid fa-outdent"></span>
</button>
</div>
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<dialog id="pst-primary-sidebar-modal"></dialog>
<div id="pst-primary-sidebar" 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>
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../../user-guide/index.html">
User Guide
</a>
</li>
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../../contributor-guide/index.html">
Contributor Guide
</a>
</li>
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../../index.html">
API Reference
</a>
</li>
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../../links.html">
Links
</a>
</li>
</ul>
</nav></div>
</div>
<div class="sidebar-header-items__end">
<div class="navbar-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/datafusion-python" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-github fa-lg" aria-hidden="true"></i>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://docs.rs/datafusion/latest/datafusion/" title="Rust API docs (docs.rs)" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-rust fa-lg" aria-hidden="true"></i>
<span class="sr-only">Rust API docs (docs.rs)</span></a>
</li>
</ul></div>
<div class="navbar-item">
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Color mode" data-bs-title="Color mode" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Light"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Dark"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="System Settings"></i>
</button></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="current nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../user-guide/index.html">User Guide</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/basics.html">Concepts</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/data-sources.html">Data Sources</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../../user-guide/dataframe/index.html">DataFrames</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/dataframe/rendering.html">DataFrame Rendering</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/dataframe/execution-metrics.html">Execution Metrics</a></li>
</ul>
</details></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../../user-guide/common-operations/index.html">Common Operations</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/views.html">Registering Views</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/basic-info.html">Basic Operations</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/select-and-filter.html">Column Selections</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/expressions.html">Expressions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/joins.html">Joins</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/functions.html">Functions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/spark-functions.html">Spark-Compatible Functions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/aggregations.html">Aggregation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/windows.html">Window Functions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/common-operations/udf-and-udfa.html">User-Defined Functions</a></li>
</ul>
</details></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../../user-guide/io/index.html">IO</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/io/arrow.html">Arrow</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/io/avro.html">Avro</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/io/csv.html">CSV</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/io/json.html">JSON</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/io/parquet.html">Parquet</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../user-guide/io/table_provider.html">Custom Table Provider</a></li>
</ul>
</details></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/configuration.html">Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/distributing-work.html">Distributing work</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/sql.html">SQL</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/upgrade-guides.html">Upgrade Guides</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../user-guide/ai-coding-assistants.html">Using AI Coding Assistants</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../contributor-guide/index.html">Contributor Guide</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../contributor-guide/introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../contributor-guide/ffi.html">Python Extensions</a></li>
</ul>
</details></li>
<li class="toctree-l1 current active has-children"><a class="reference internal" href="../../index.html">API Reference</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l2 current active has-children"><a class="reference internal" href="../index.html">datafusion</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../catalog/index.html">datafusion.catalog</a></li>
<li class="toctree-l3"><a class="reference internal" href="../context/index.html">datafusion.context</a></li>
<li class="toctree-l3"><a class="reference internal" href="../dataframe/index.html">datafusion.dataframe</a></li>
<li class="toctree-l3"><a class="reference internal" href="../dataframe_formatter/index.html">datafusion.dataframe_formatter</a></li>
<li class="toctree-l3"><a class="reference internal" href="../expr/index.html">datafusion.expr</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../functions/index.html">datafusion.functions</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../functions/spark/index.html">datafusion.functions.spark</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../input/index.html">datafusion.input</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../input/base/index.html">datafusion.input.base</a></li>
<li class="toctree-l4"><a class="reference internal" href="../input/location/index.html">datafusion.input.location</a></li>
</ul>
</details></li>
<li class="toctree-l3"><a class="reference internal" href="../io/index.html">datafusion.io</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ipc/index.html">datafusion.ipc</a></li>
<li class="toctree-l3"><a class="reference internal" href="../object_store/index.html">datafusion.object_store</a></li>
<li class="toctree-l3"><a class="reference internal" href="../options/index.html">datafusion.options</a></li>
<li class="toctree-l3"><a class="reference internal" href="../plan/index.html">datafusion.plan</a></li>
<li class="toctree-l3"><a class="reference internal" href="../record_batch/index.html">datafusion.record_batch</a></li>
<li class="toctree-l3"><a class="reference internal" href="../substrait/index.html">datafusion.substrait</a></li>
<li class="toctree-l3"><a class="reference internal" href="../unparser/index.html">datafusion.unparser</a></li>
<li class="toctree-l3 current active"><a class="current reference internal" href="#">datafusion.user_defined</a></li>
</ul>
</details></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../links.html">Links</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference external" href="https://github.com/apache/datafusion-python">GitHub and Issue Tracker</a></li>
<li class="toctree-l2"><a class="reference external" href="https://docs.rs/datafusion/latest/datafusion/">Rust API Docs</a></li>
<li class="toctree-l2"><a class="reference external" href="https://github.com/apache/datafusion/blob/main/CODE_OF_CONDUCT.md">Code of Conduct</a></li>
<li class="toctree-l2"><a class="reference external" href="https://github.com/apache/datafusion-python/tree/main/examples">Examples</a></li>
</ul>
</details></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
<div class="sidebar-primary-item">
<div id="ethical-ad-placement"
class="flat"
data-ea-publisher="readthedocs"
data-ea-type="readthedocs-sidebar"
data-ea-manual="true">
</div></div>
</div>
</div>
<main id="main-content" class="bd-main" role="main">
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article d-print-none">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item">
<nav aria-label="Breadcrumb" class="d-print-none">
<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="../../index.html" class="nav-link">API Reference</a></li>
<li class="breadcrumb-item"><a href="../index.html" class="nav-link">datafusion</a></li>
<li class="breadcrumb-item active" aria-current="page"><span class="ellipsis">datafusion.user_defined</span></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="module-datafusion.user_defined">
<span id="datafusion-user-defined"></span><h1>datafusion.user_defined<a class="headerlink" href="#module-datafusion.user_defined" title="Link to this heading">#</a></h1>
<p>Provides the user-defined functions for evaluation of dataframes.</p>
<section id="attributes">
<h2>Attributes<a class="headerlink" href="#attributes" title="Link to this heading">#</a></h2>
<div class="pst-scrollable-table-container"><table class="autosummary longtable table autosummary">
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined._R" title="datafusion.user_defined._R"><code class="xref py py-obj docutils literal notranslate"><span class="pre">_R</span></code></a></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.udaf" title="datafusion.user_defined.udaf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">udaf</span></code></a></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.udf" title="datafusion.user_defined.udf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">udf</span></code></a></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.udtf" title="datafusion.user_defined.udtf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">udtf</span></code></a></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.udwf" title="datafusion.user_defined.udwf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">udwf</span></code></a></p></td>
<td><p></p></td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="classes">
<h2>Classes<a class="headerlink" href="#classes" title="Link to this heading">#</a></h2>
<div class="pst-scrollable-table-container"><table class="autosummary longtable table autosummary">
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.Accumulator" title="datafusion.user_defined.Accumulator"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Accumulator</span></code></a></p></td>
<td><p>Defines how an <a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregateUDF</span></code></a> accumulates values.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><code class="xref py py-obj docutils literal notranslate"><span class="pre">AggregateUDF</span></code></a></p></td>
<td><p>Class for performing scalar user-defined functions (UDF).</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.AggregateUDFExportable" title="datafusion.user_defined.AggregateUDFExportable"><code class="xref py py-obj docutils literal notranslate"><span class="pre">AggregateUDFExportable</span></code></a></p></td>
<td><p>Type hint for object that has __datafusion_aggregate_udf__ PyCapsule.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.LogicalExtensionCodecExportable" title="datafusion.user_defined.LogicalExtensionCodecExportable"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LogicalExtensionCodecExportable</span></code></a></p></td>
<td><p>Type hint for objects exposing <code class="docutils literal notranslate"><span class="pre">__datafusion_logical_extension_codec__</span></code>.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.PhysicalExtensionCodecExportable" title="datafusion.user_defined.PhysicalExtensionCodecExportable"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PhysicalExtensionCodecExportable</span></code></a></p></td>
<td><p>Type hint for objects exposing <code class="docutils literal notranslate"><span class="pre">__datafusion_physical_extension_codec__</span></code>.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ScalarUDF</span></code></a></p></td>
<td><p>Class for performing scalar user-defined functions (UDF).</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.ScalarUDFExportable" title="datafusion.user_defined.ScalarUDFExportable"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ScalarUDFExportable</span></code></a></p></td>
<td><p>Type hint for object that has __datafusion_scalar_udf__ PyCapsule.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.TableFunction" title="datafusion.user_defined.TableFunction"><code class="xref py py-obj docutils literal notranslate"><span class="pre">TableFunction</span></code></a></p></td>
<td><p>Class for performing user-defined table functions (UDTF).</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Volatility</span></code></a></p></td>
<td><p>Defines how stable or volatile a function is.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.WindowEvaluator" title="datafusion.user_defined.WindowEvaluator"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WindowEvaluator</span></code></a></p></td>
<td><p>Evaluator class for user-defined window functions (UDWF).</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.WindowUDF" title="datafusion.user_defined.WindowUDF"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WindowUDF</span></code></a></p></td>
<td><p>Class for performing window user-defined functions (UDF).</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.WindowUDFExportable" title="datafusion.user_defined.WindowUDFExportable"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WindowUDFExportable</span></code></a></p></td>
<td><p>Type hint for object that has __datafusion_window_udf__ PyCapsule.</p></td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="functions">
<h2>Functions<a class="headerlink" href="#functions" title="Link to this heading">#</a></h2>
<div class="pst-scrollable-table-container"><table class="autosummary longtable table autosummary">
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined._is_pycapsule" title="datafusion.user_defined._is_pycapsule"><code class="xref py py-obj docutils literal notranslate"><span class="pre">_is_pycapsule</span></code></a>(→ TypeGuard[_typeshed.CapsuleType])</p></td>
<td><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> when <code class="docutils literal notranslate"><span class="pre">value</span></code> is a CPython <code class="docutils literal notranslate"><span class="pre">PyCapsule</span></code>.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined._wrap_session_kwarg_for_udtf" title="datafusion.user_defined._wrap_session_kwarg_for_udtf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">_wrap_session_kwarg_for_udtf</span></code></a>(...)</p></td>
<td><p>Adapt the raw internal session pyo3 object back to a Python wrapper.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#datafusion.user_defined.data_type_or_field_to_field" title="datafusion.user_defined.data_type_or_field_to_field"><code class="xref py py-obj docutils literal notranslate"><span class="pre">data_type_or_field_to_field</span></code></a>(→ pyarrow.Field)</p></td>
<td><p>Helper function to return a Field from either a Field or DataType.</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#datafusion.user_defined.data_types_or_fields_to_field_list" title="datafusion.user_defined.data_types_or_fields_to_field_list"><code class="xref py py-obj docutils literal notranslate"><span class="pre">data_types_or_fields_to_field_list</span></code></a>(→ list[pyarrow.Field])</p></td>
<td><p>Helper function to return a list of Fields.</p></td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="module-contents">
<h2>Module Contents<a class="headerlink" href="#module-contents" title="Link to this heading">#</a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.Accumulator">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">Accumulator</span></span><a class="headerlink" href="#datafusion.user_defined.Accumulator" title="Link to this definition">#</a></dt>
<dd><p>Defines how an <a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregateUDF</span></code></a> accumulates values.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.Accumulator.evaluate">
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">evaluate</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">pyarrow.Scalar</span></span></span><a class="headerlink" href="#datafusion.user_defined.Accumulator.evaluate" title="Link to this definition">#</a></dt>
<dd><p>Return the resultant value.</p>
<p>While this function template expects a PyArrow Scalar value return type,
you can return any value that can be converted into a Scalar. This
includes basic Python data types such as integers and strings. In
addition to primitive types, we currently support PyArrow, nanoarrow,
and arro3 objects in addition to primitive data types. Other objects
that support the Arrow FFI standard will be given a “best attempt” at
conversion to scalar objects.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.Accumulator.merge">
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">merge</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">states</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Array</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#datafusion.user_defined.Accumulator.merge" title="Link to this definition">#</a></dt>
<dd><p>Merge a set of states.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.Accumulator.state">
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">state</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Scalar</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.Accumulator.state" title="Link to this definition">#</a></dt>
<dd><p>Return the current state.</p>
<p>While this function template expects PyArrow Scalar values return type,
you can return any value that can be converted into a Scalar. This
includes basic Python data types such as integers and strings. In
addition to primitive types, we currently support PyArrow, nanoarrow,
and arro3 objects in addition to primitive data types. Other objects
that support the Arrow FFI standard will be given a “best attempt” at
conversion to scalar objects.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.Accumulator.update">
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">values</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.Array</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#datafusion.user_defined.Accumulator.update" title="Link to this definition">#</a></dt>
<dd><p>Evaluate an array of values and update state.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">AggregateUDF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">accumulator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.Accumulator" title="datafusion.user_defined.Accumulator"><span class="pre">Accumulator</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">state_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF" title="Link to this definition">#</a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">AggregateUDF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">accumulator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.AggregateUDFExportable" title="datafusion.user_defined.AggregateUDFExportable"><span class="pre">AggregateUDFExportable</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">...</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">...</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">state_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">...</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">...</span></span></em><span class="sig-paren">)</span></dt>
<dd><p>Class for performing scalar user-defined functions (UDF).</p>
<p>Aggregate UDFs operate on a group of rows and return a single value. See
also <a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScalarUDF</span></code></a> for operating on a row by row basis.</p>
<p>Instantiate a user-defined aggregate function (UDAF).</p>
<p>See <a class="reference internal" href="#datafusion.user_defined.udaf" title="datafusion.user_defined.udaf"><code class="xref py py-func docutils literal notranslate"><span class="pre">udaf()</span></code></a> for a convenience function and argument
descriptions.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF.__call__">
<span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF.__call__" title="Link to this definition">#</a></dt>
<dd><p>Execute the UDAF.</p>
<p>This function is not typically called by an end user. These calls will
occur during the evaluation of the dataframe.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF.__repr__">
<span class="sig-name descname"><span class="pre">__repr__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF.__repr__" title="Link to this definition">#</a></dt>
<dd><p>Print a string representation of the Aggregate UDF.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF._from_internal">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_from_internal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">internal</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datafusion._internal.AggregateUDF</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><span class="pre">AggregateUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF._from_internal" title="Link to this definition">#</a></dt>
<dd><p>Wrap an already-constructed internal <code class="docutils literal notranslate"><span class="pre">AggregateUDF</span></code> handle.</p>
<p>Used by <code class="xref py py-meth docutils literal notranslate"><span class="pre">SessionContext.udaf()</span></code> to surface a function looked
up from the session’s function registry without re-running
<code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code>.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF.from_pycapsule">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_pycapsule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.AggregateUDFExportable" title="datafusion.user_defined.AggregateUDFExportable"><span class="pre">AggregateUDFExportable</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">_typeshed.CapsuleType</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><span class="pre">AggregateUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF.from_pycapsule" title="Link to this definition">#</a></dt>
<dd><p>Create an Aggregate UDF from AggregateUDF PyCapsule object.</p>
<p>This function will instantiate a Aggregate UDF that uses a DataFusion
AggregateUDF that is exported via the FFI bindings.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF.udaf">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udaf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">state_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><span class="pre">AggregateUDF</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF.udaf" title="Link to this definition">#</a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udaf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.Accumulator" title="datafusion.user_defined.Accumulator"><span class="pre">Accumulator</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">state_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><span class="pre">AggregateUDF</span></a></span></span></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udaf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.AggregateUDFExportable" title="datafusion.user_defined.AggregateUDFExportable"><span class="pre">AggregateUDFExportable</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><span class="pre">AggregateUDF</span></a></span></span></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udaf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">_typeshed.CapsuleType</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><span class="pre">AggregateUDF</span></a></span></span></dt>
<dd><p>Create a new User-Defined Aggregate Function (UDAF).</p>
<p>This class allows you to define an aggregate function that can be used in
data aggregation or window function calls.</p>
<dl class="simple">
<dt>Usage:</dt><dd><ul class="simple">
<li><p>As a function: <code class="docutils literal notranslate"><span class="pre">udaf(accum,</span> <span class="pre">input_types,</span> <span class="pre">return_type,</span> <span class="pre">state_type,</span> <span class="pre">volatility,</span> <span class="pre">name)</span></code>.</p></li>
<li><p>As a decorator: <code class="docutils literal notranslate"><span class="pre">&#64;udaf(input_types,</span> <span class="pre">return_type,</span> <span class="pre">state_type,</span> <span class="pre">volatility,</span> <span class="pre">name)</span></code>.
When using <code class="docutils literal notranslate"><span class="pre">udaf</span></code> as a decorator, do not pass <code class="docutils literal notranslate"><span class="pre">accum</span></code> explicitly.</p></li>
</ul>
</dd>
</dl>
<p>If your <a class="reference internal" href="#datafusion.user_defined.Accumulator" title="datafusion.user_defined.Accumulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">Accumulator</span></code></a> can be instantiated with no arguments, you
can simply pass its type as <code class="docutils literal notranslate"><span class="pre">accum</span></code>. If you need to pass additional
arguments to its constructor, you can define a lambda or a factory method.
During runtime the <a class="reference internal" href="#datafusion.user_defined.Accumulator" title="datafusion.user_defined.Accumulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">Accumulator</span></code></a> will be constructed for every
instance in which this UDAF is used.</p>
<p class="rubric">Examples</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">pyarrow.compute</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pc</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">datafusion.user_defined</span><span class="w"> </span><span class="kn">import</span> <span class="n">AggregateUDF</span><span class="p">,</span> <span class="n">Accumulator</span><span class="p">,</span> <span class="n">udaf</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">Summarize</span><span class="p">(</span><span class="n">Accumulator</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bias</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="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">_sum</span> <span class="o">=</span> <span class="n">pa</span><span class="o">.</span><span class="n">scalar</span><span class="p">(</span><span class="n">bias</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_sum</span><span class="p">]</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">_sum</span> <span class="o">=</span> <span class="n">pa</span><span class="o">.</span><span class="n">scalar</span><span class="p">(</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">_sum</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span> <span class="o">+</span> <span class="n">pc</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">values</span><span class="p">)</span><span class="o">.</span><span class="n">as_py</span><span class="p">())</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="nf">merge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">states</span><span class="p">):</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">_sum</span> <span class="o">=</span> <span class="n">pa</span><span class="o">.</span><span class="n">scalar</span><span class="p">(</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">_sum</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span> <span class="o">+</span> <span class="n">pc</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">states</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">as_py</span><span class="p">())</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="nf">evaluate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sum</span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">udaf</span></code> as a function:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">udaf1</span> <span class="o">=</span> <span class="n">AggregateUDF</span><span class="o">.</span><span class="n">udaf</span><span class="p">(</span>
<span class="gp">... </span> <span class="n">Summarize</span><span class="p">,</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span>
<span class="gp">... </span> <span class="p">[</span><span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">()],</span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Wrapping <code class="docutils literal notranslate"><span class="pre">udaf</span></code> with a function:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span><span class="w"> </span><span class="nf">sum_bias_10</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Summarize</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">Summarize</span><span class="p">(</span><span class="mf">10.0</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">udaf2</span> <span class="o">=</span> <span class="n">udaf</span><span class="p">(</span><span class="n">sum_bias_10</span><span class="p">,</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span> <span class="p">[</span><span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">()],</span>
<span class="gp">... </span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">udaf</span></code> with lambda:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">udaf3</span> <span class="o">=</span> <span class="n">udaf</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">Summarize</span><span class="p">(</span><span class="mf">20.0</span><span class="p">),</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span>
<span class="gp">... </span> <span class="p">[</span><span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">()],</span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">udaf</span></code> as a decorator:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nd">@AggregateUDF</span><span class="o">.</span><span class="n">udaf</span><span class="p">(</span>
<span class="gp">... </span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">(),</span>
<span class="gp">... </span> <span class="p">[</span><span class="n">pa</span><span class="o">.</span><span class="n">float64</span><span class="p">()],</span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
<span class="gp">... </span><span class="k">def</span><span class="w"> </span><span class="nf">udaf4</span><span class="p">():</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">Summarize</span><span class="p">(</span><span class="mf">10.0</span><span class="p">)</span>
</pre></div>
</div>
<p>Apply to a dataframe:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ctx</span> <span class="o">=</span> <span class="n">dfn</span><span class="o">.</span><span class="n">SessionContext</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">from_pydict</span><span class="p">({</span><span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">]})</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">aggregate</span><span class="p">([],</span> <span class="p">[</span><span class="n">udaf1</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;total&quot;</span><span class="p">)])</span><span class="o">.</span><span class="n">collect_column</span><span class="p">(</span>
<span class="gp">... </span> <span class="s2">&quot;total&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span>
<span class="go">6.0</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">aggregate</span><span class="p">([],</span> <span class="p">[</span><span class="n">udaf2</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;total&quot;</span><span class="p">)])</span><span class="o">.</span><span class="n">collect_column</span><span class="p">(</span>
<span class="gp">... </span> <span class="s2">&quot;total&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span>
<span class="go">16.0</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">aggregate</span><span class="p">([],</span> <span class="p">[</span><span class="n">udaf3</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;total&quot;</span><span class="p">)])</span><span class="o">.</span><span class="n">collect_column</span><span class="p">(</span>
<span class="gp">... </span> <span class="s2">&quot;total&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span>
<span class="go">26.0</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">aggregate</span><span class="p">([],</span> <span class="p">[</span><span class="n">udaf4</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;total&quot;</span><span class="p">)])</span><span class="o">.</span><span class="n">collect_column</span><span class="p">(</span>
<span class="gp">... </span> <span class="s2">&quot;total&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span>
<span class="go">16.0</span>
</pre></div>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>accum</strong> – The accumulator python function. Only needed when calling as a
function. Skip this argument when using <code class="docutils literal notranslate"><span class="pre">udaf</span></code> as a decorator.
If you have a Rust backed AggregateUDF within a PyCapsule, you can
pass this parameter and ignore the rest. They will be determined
directly from the underlying function. See the online documentation
for more information.</p></li>
<li><p><strong>input_types</strong> – The data types of the arguments to <code class="docutils literal notranslate"><span class="pre">accum</span></code>.</p></li>
<li><p><strong>return_type</strong> – The data type of the return value.</p></li>
<li><p><strong>state_type</strong> – The data types of the intermediate accumulation.</p></li>
<li><p><strong>volatility</strong> – See <a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><code class="xref py py-class docutils literal notranslate"><span class="pre">Volatility</span></code></a> for allowed values.</p></li>
<li><p><strong>name</strong> – A descriptive name for the function.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A user-defined aggregate function, which can be used in either data
aggregation or window function calls.</p>
</dd>
</dl>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF._udaf">
<span class="sig-name descname"><span class="pre">_udaf</span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDF._udaf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDF.name">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#datafusion.user_defined.AggregateUDF.name" title="Link to this definition">#</a></dt>
<dd><p>Return the registered name of this UDAF.</p>
<p>For UDAFs imported via the FFI capsule protocol, this is the
name the capsule itself reports — not the <code class="docutils literal notranslate"><span class="pre">name</span></code> argument
passed to the constructor (which is ignored on the FFI path).</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDFExportable">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">AggregateUDFExportable</span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDFExportable" title="Link to this definition">#</a></dt>
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">Protocol</span></code></p>
<p>Type hint for object that has __datafusion_aggregate_udf__ PyCapsule.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.AggregateUDFExportable.__datafusion_aggregate_udf__">
<span class="sig-name descname"><span class="pre">__datafusion_aggregate_udf__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">object</span></span></span><a class="headerlink" href="#datafusion.user_defined.AggregateUDFExportable.__datafusion_aggregate_udf__" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.LogicalExtensionCodecExportable">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">LogicalExtensionCodecExportable</span></span><a class="headerlink" href="#datafusion.user_defined.LogicalExtensionCodecExportable" title="Link to this definition">#</a></dt>
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">Protocol</span></code></p>
<p>Type hint for objects exposing <code class="docutils literal notranslate"><span class="pre">__datafusion_logical_extension_codec__</span></code>.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.LogicalExtensionCodecExportable.__datafusion_logical_extension_codec__">
<span class="sig-name descname"><span class="pre">__datafusion_logical_extension_codec__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">object</span></span></span><a class="headerlink" href="#datafusion.user_defined.LogicalExtensionCodecExportable.__datafusion_logical_extension_codec__" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.PhysicalExtensionCodecExportable">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">PhysicalExtensionCodecExportable</span></span><a class="headerlink" href="#datafusion.user_defined.PhysicalExtensionCodecExportable" title="Link to this definition">#</a></dt>
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">Protocol</span></code></p>
<p>Type hint for objects exposing <code class="docutils literal notranslate"><span class="pre">__datafusion_physical_extension_codec__</span></code>.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.PhysicalExtensionCodecExportable.__datafusion_physical_extension_codec__">
<span class="sig-name descname"><span class="pre">__datafusion_physical_extension_codec__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">object</span></span></span><a class="headerlink" href="#datafusion.user_defined.PhysicalExtensionCodecExportable.__datafusion_physical_extension_codec__" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">ScalarUDF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">_R</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_fields</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Field</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_field</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.Field</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF" title="Link to this definition">#</a></dt>
<dd><p>Class for performing scalar user-defined functions (UDF).</p>
<p>Scalar UDFs operate on a row by row basis. See also <a class="reference internal" href="#datafusion.user_defined.AggregateUDF" title="datafusion.user_defined.AggregateUDF"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregateUDF</span></code></a> for
operating on a group of rows.</p>
<p>Instantiate a scalar user-defined function (UDF).</p>
<p>See helper method <a class="reference internal" href="#datafusion.user_defined.udf" title="datafusion.user_defined.udf"><code class="xref py py-func docutils literal notranslate"><span class="pre">udf()</span></code></a> for argument details.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF.__call__">
<span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF.__call__" title="Link to this definition">#</a></dt>
<dd><p>Execute the UDF.</p>
<p>This function is not typically called by an end user. These calls will
occur during the evaluation of the dataframe.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF.__repr__">
<span class="sig-name descname"><span class="pre">__repr__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF.__repr__" title="Link to this definition">#</a></dt>
<dd><p>Print a string representation of the Scalar UDF.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF._from_internal">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_from_internal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">internal</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datafusion._internal.ScalarUDF</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><span class="pre">ScalarUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF._from_internal" title="Link to this definition">#</a></dt>
<dd><p>Wrap an already-constructed internal <code class="docutils literal notranslate"><span class="pre">ScalarUDF</span></code> handle.</p>
<p>Used by <code class="xref py py-meth docutils literal notranslate"><span class="pre">SessionContext.udf()</span></code> to surface a function looked
up from the session’s function registry without re-running
<code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code>.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF.from_pycapsule">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_pycapsule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.ScalarUDFExportable" title="datafusion.user_defined.ScalarUDFExportable"><span class="pre">ScalarUDFExportable</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><span class="pre">ScalarUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF.from_pycapsule" title="Link to this definition">#</a></dt>
<dd><p>Create a Scalar UDF from ScalarUDF PyCapsule object.</p>
<p>This function will instantiate a Scalar UDF that uses a DataFusion
ScalarUDF that is exported via the FFI bindings.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF.udf">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input_fields</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_field</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><span class="pre">ScalarUDF</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF.udf" title="Link to this definition">#</a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">_R</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_fields</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_field</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><span class="pre">ScalarUDF</span></a></span></span></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.ScalarUDFExportable" title="datafusion.user_defined.ScalarUDFExportable"><span class="pre">ScalarUDFExportable</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><span class="pre">ScalarUDF</span></a></span></span></dt>
<dd><p>Create a new User-Defined Function (UDF).</p>
<p>This class can be used both as either a function or a decorator.</p>
<dl class="simple">
<dt>Usage:</dt><dd><ul class="simple">
<li><p>As a function: <code class="docutils literal notranslate"><span class="pre">udf(func,</span> <span class="pre">input_fields,</span> <span class="pre">return_field,</span>
<span class="pre">volatility,</span> <span class="pre">name)</span></code>.</p></li>
<li><p>As a decorator: <code class="docutils literal notranslate"><span class="pre">&#64;udf(input_fields,</span> <span class="pre">return_field,</span> <span class="pre">volatility,</span> <span class="pre">name)</span></code>.
When used a decorator, do <strong>not</strong> pass <code class="docutils literal notranslate"><span class="pre">func</span></code> explicitly.</p></li>
</ul>
</dd>
</dl>
<p>In lieu of passing a PyArrow Field, you can pass a DataType for simplicity.
When you do so, it will be assumed that the nullability of the inputs and
output are True and that they have no metadata.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>func</strong> (<em>Callable</em><em>, </em><em>optional</em>) – Only needed when calling as a function.
Skip this argument when using <cite>udf</cite> as a decorator. If you have a Rust
backed ScalarUDF within a PyCapsule, you can pass this parameter
and ignore the rest. They will be determined directly from the
underlying function. See the online documentation for more information.</p></li>
<li><p><strong>input_fields</strong> (<em>list</em><em>[</em><em>pa.Field</em><em> | </em><em>pa.DataType</em><em>]</em>) – The data types or Fields
of the arguments to <code class="docutils literal notranslate"><span class="pre">func</span></code>. This list must be of the same length
as the number of arguments.</p></li>
<li><p><strong>return_field</strong> (<em>_R</em>) – The field of the return value from the function.</p></li>
<li><p><strong>volatility</strong> (<a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><em>Volatility</em></a><em> | </em><em>str</em>) – See <cite>Volatility</cite> for allowed values.</p></li>
<li><p><strong>name</strong> (<em>Optional</em><em>[</em><em>str</em><em>]</em>) – A descriptive name for the function.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A user-defined function that can be used in SQL expressions,
data aggregation, or window function calls.</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<p>Using <code class="docutils literal notranslate"><span class="pre">udf</span></code> as a function:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">pyarrow.compute</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pc</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">datafusion.user_defined</span><span class="w"> </span><span class="kn">import</span> <span class="n">ScalarUDF</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">def</span><span class="w"> </span><span class="nf">double_func</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">pc</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">double_udf</span> <span class="o">=</span> <span class="n">ScalarUDF</span><span class="o">.</span><span class="n">udf</span><span class="p">(</span>
<span class="gp">... </span> <span class="n">double_func</span><span class="p">,</span> <span class="p">[</span><span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">()],</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span>
<span class="gp">... </span> <span class="s2">&quot;volatile&quot;</span><span class="p">,</span> <span class="s2">&quot;double_it&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">udf</span></code> as a decorator:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nd">@ScalarUDF</span><span class="o">.</span><span class="n">udf</span><span class="p">([</span><span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">()],</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="s2">&quot;volatile&quot;</span><span class="p">)</span>
<span class="gp">... </span><span class="k">def</span><span class="w"> </span><span class="nf">decorator_double_udf</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">pc</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
</pre></div>
</div>
<p>Apply to a dataframe:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ctx</span> <span class="o">=</span> <span class="n">dfn</span><span class="o">.</span><span class="n">SessionContext</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">from_pydict</span><span class="p">({</span><span class="s2">&quot;x&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]})</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">double_udf</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;result&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_pydict</span><span class="p">()</span>
<span class="go">{&#39;result&#39;: [2, 4, 6]}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">decorator_double_udf</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;result&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_pydict</span><span class="p">()</span>
<span class="go">{&#39;result&#39;: [3, 6, 9]}</span>
</pre></div>
</div>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF._udf">
<span class="sig-name descname"><span class="pre">_udf</span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDF._udf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDF.name">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#datafusion.user_defined.ScalarUDF.name" title="Link to this definition">#</a></dt>
<dd><p>Return the registered name of this UDF.</p>
<p>For UDFs imported via the FFI capsule protocol, this is the
name the capsule itself reports — not the <code class="docutils literal notranslate"><span class="pre">name</span></code> argument
passed to the constructor (which is ignored on the FFI path).</p>
<p class="rubric">Examples</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">pyarrow</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pa</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">datafusion</span><span class="w"> </span><span class="kn">import</span> <span class="n">udf</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">double</span> <span class="o">=</span> <span class="n">udf</span><span class="p">(</span>
<span class="gp">... </span> <span class="k">lambda</span> <span class="n">arr</span><span class="p">:</span> <span class="n">pa</span><span class="o">.</span><span class="n">array</span><span class="p">([(</span><span class="n">v</span><span class="o">.</span><span class="n">as_py</span><span class="p">()</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">arr</span><span class="p">]),</span>
<span class="gp">... </span> <span class="p">[</span><span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">()],</span>
<span class="gp">... </span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span>
<span class="gp">... </span> <span class="n">volatility</span><span class="o">=</span><span class="s2">&quot;immutable&quot;</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;double&quot;</span><span class="p">,</span>
<span class="gp">... </span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">double</span><span class="o">.</span><span class="n">name</span>
<span class="go">&#39;double&#39;</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDFExportable">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">ScalarUDFExportable</span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDFExportable" title="Link to this definition">#</a></dt>
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">Protocol</span></code></p>
<p>Type hint for object that has __datafusion_scalar_udf__ PyCapsule.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.ScalarUDFExportable.__datafusion_scalar_udf__">
<span class="sig-name descname"><span class="pre">__datafusion_scalar_udf__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">object</span></span></span><a class="headerlink" href="#datafusion.user_defined.ScalarUDFExportable.__datafusion_scalar_udf__" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">TableFunction</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datafusion.SessionContext</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_session</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#datafusion.user_defined.TableFunction" title="Link to this definition">#</a></dt>
<dd><p>Class for performing user-defined table functions (UDTF).</p>
<p>Table functions generate new table providers based on the
input expressions.</p>
<p>Instantiate a user-defined table function (UDTF).</p>
<p>Set <code class="docutils literal notranslate"><span class="pre">with_session=True</span></code> to have the calling
<code class="xref py py-class docutils literal notranslate"><span class="pre">SessionContext</span></code> passed as a <code class="docutils literal notranslate"><span class="pre">session</span></code> keyword argument
on each invocation. Use it inside the callback to look up
registered tables, UDFs, or session configuration. When
<code class="docutils literal notranslate"><span class="pre">with_session</span></code> is <code class="docutils literal notranslate"><span class="pre">False</span></code> (the default), <code class="docutils literal notranslate"><span class="pre">func</span></code> is invoked
with the positional expression arguments only.</p>
<p><code class="docutils literal notranslate"><span class="pre">with_session=True</span></code> is only supported for pure-Python callables.
Passing it together with an FFI-exported table function (one
exposing <code class="docutils literal notranslate"><span class="pre">__datafusion_table_function__</span></code>) raises
<code class="xref py py-class docutils literal notranslate"><span class="pre">TypeError</span></code>.</p>
<p>Registry mutations performed through the injected session (such
as registering tables or UDFs) propagate to the caller’s
<code class="xref py py-class docutils literal notranslate"><span class="pre">SessionContext</span></code> because the registries are shared.
Configuration changes do <strong>not</strong> propagate; the wrapper holds
its own clone of the session config.</p>
<p>See <a class="reference internal" href="#datafusion.user_defined.udtf" title="datafusion.user_defined.udtf"><code class="xref py py-func docutils literal notranslate"><span class="pre">udtf()</span></code></a> for a convenience function and argument
descriptions.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction.__call__">
<span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Any</span></span></span><a class="headerlink" href="#datafusion.user_defined.TableFunction.__call__" title="Link to this definition">#</a></dt>
<dd><p>Execute the UDTF and return a table provider.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction.__repr__">
<span class="sig-name descname"><span class="pre">__repr__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#datafusion.user_defined.TableFunction.__repr__" title="Link to this definition">#</a></dt>
<dd><p>User printable representation.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction._create_table_udf">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_create_table_udf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_session</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.TableFunction" title="datafusion.user_defined.TableFunction"><span class="pre">TableFunction</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.TableFunction._create_table_udf" title="Link to this definition">#</a></dt>
<dd><p>Create a TableFunction instance from function arguments.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction._create_table_udf_decorator">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_create_table_udf_decorator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_session</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.TableFunction" title="datafusion.user_defined.TableFunction"><span class="pre">TableFunction</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.TableFunction._create_table_udf_decorator" title="Link to this definition">#</a></dt>
<dd><p>Create a decorator for a TableFunction.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction.udtf">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udtf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_session</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.TableFunction.udtf" title="Link to this definition">#</a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udtf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_session</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.TableFunction" title="datafusion.user_defined.TableFunction"><span class="pre">TableFunction</span></a></span></span></dt>
<dd><p>Create a new User-Defined Table Function (UDTF).</p>
<p>Pass <code class="docutils literal notranslate"><span class="pre">with_session=True</span></code> to have the calling
<code class="xref py py-class docutils literal notranslate"><span class="pre">SessionContext</span></code> injected as a <code class="docutils literal notranslate"><span class="pre">session</span></code> keyword
argument on each invocation.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.TableFunction._udtf">
<span class="sig-name descname"><span class="pre">_udtf</span></span><a class="headerlink" href="#datafusion.user_defined.TableFunction._udtf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.Volatility">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">Volatility</span></span><a class="headerlink" href="#datafusion.user_defined.Volatility" title="Link to this definition">#</a></dt>
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
<p>Defines how stable or volatile a function is.</p>
<p>When setting the volatility of a function, you can either pass this
enumeration or a <code class="docutils literal notranslate"><span class="pre">str</span></code>. The <code class="docutils literal notranslate"><span class="pre">str</span></code> equivalent is the lower case value of the
name (<cite>“immutable”</cite>, <cite>“stable”</cite>, or <cite>“volatile”</cite>).</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.Volatility.__str__">
<span class="sig-name descname"><span class="pre">__str__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#datafusion.user_defined.Volatility.__str__" title="Link to this definition">#</a></dt>
<dd><p>Returns the string equivalent.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.Volatility.Immutable">
<span class="sig-name descname"><span class="pre">Immutable</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1</span></em><a class="headerlink" href="#datafusion.user_defined.Volatility.Immutable" title="Link to this definition">#</a></dt>
<dd><p>An immutable function will always return the same output when given the
same input.</p>
<p>DataFusion will attempt to inline immutable functions during planning.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.Volatility.Stable">
<span class="sig-name descname"><span class="pre">Stable</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#datafusion.user_defined.Volatility.Stable" title="Link to this definition">#</a></dt>
<dd><p>Returns the same value for a given input within a single queries.</p>
<p>A stable function may return different values given the same input across
different queries but must return the same value for a given input within a
query. An example of this is the <code class="docutils literal notranslate"><span class="pre">Now</span></code> function. DataFusion will attempt to
inline <code class="docutils literal notranslate"><span class="pre">Stable</span></code> functions during planning, when possible. For query
<code class="docutils literal notranslate"><span class="pre">select</span> <span class="pre">col1,</span> <span class="pre">now()</span> <span class="pre">from</span> <span class="pre">t1</span></code>, it might take a while to execute but <code class="docutils literal notranslate"><span class="pre">now()</span></code>
column will be the same for each output row, which is evaluated during
planning.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.Volatility.Volatile">
<span class="sig-name descname"><span class="pre">Volatile</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">3</span></em><a class="headerlink" href="#datafusion.user_defined.Volatility.Volatile" title="Link to this definition">#</a></dt>
<dd><p>A volatile function may change the return value from evaluation to
evaluation.</p>
<p>Multiple invocations of a volatile function may return different results
when used in the same query. An example of this is the random() function.
DataFusion can not evaluate such functions during planning. In the query
<code class="docutils literal notranslate"><span class="pre">select</span> <span class="pre">col1,</span> <span class="pre">random()</span> <span class="pre">from</span> <span class="pre">t1</span></code>, <code class="docutils literal notranslate"><span class="pre">random()</span></code> function will be evaluated
for each output row, resulting in a unique random value for each row.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">WindowEvaluator</span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator" title="Link to this definition">#</a></dt>
<dd><p>Evaluator class for user-defined window functions (UDWF).</p>
<p>It is up to the user to decide which evaluate function is appropriate.</p>
<div class="pst-scrollable-table-container"><table class="table">
<thead>
<tr class="row-odd"><th class="head"><p><code class="docutils literal notranslate"><span class="pre">uses_window_frame</span></code></p></th>
<th class="head"><p><code class="docutils literal notranslate"><span class="pre">supports_bounded_execution</span></code></p></th>
<th class="head"><p><code class="docutils literal notranslate"><span class="pre">include_rank</span></code></p></th>
<th class="head"><p>function_to_implement</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>False (default)</p></td>
<td><p>False (default)</p></td>
<td><p>False (default)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">evaluate_all</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>False</p></td>
<td><p>True</p></td>
<td><p>False</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">evaluate</span></code></p></td>
</tr>
<tr class="row-even"><td><p>False</p></td>
<td><p>True/False</p></td>
<td><p>True</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">evaluate_all_with_rank</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>True</p></td>
<td><p>True/False</p></td>
<td><p>True/False</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">evaluate</span></code></p></td>
</tr>
</tbody>
</table>
</div>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.evaluate">
<span class="sig-name descname"><span class="pre">evaluate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">values</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Array</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eval_range</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">pyarrow.Scalar</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.evaluate" title="Link to this definition">#</a></dt>
<dd><p>Evaluate window function on a range of rows in an input partition.</p>
<p>This is the simplest and most general function to implement
but also the least performant as it creates output one row at
a time. It is typically much faster to implement stateful
evaluation using one of the other specialized methods on this
trait.</p>
<p>Returns a [<cite>ScalarValue</cite>] that is the value of the window
function within <cite>range</cite> for the entire partition. Argument
<cite>values</cite> contains the evaluation result of function arguments
and evaluation results of ORDER BY expressions. If function has a
single argument, <cite>values[1..]</cite> will contain ORDER BY expression results.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.evaluate_all">
<span class="sig-name descname"><span class="pre">evaluate_all</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">values</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Array</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">num_rows</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">pyarrow.Array</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.evaluate_all" title="Link to this definition">#</a></dt>
<dd><p>Evaluate a window function on an entire input partition.</p>
<p>This function is called once per input <em>partition</em> for window functions that
<em>do not use</em> values from the window frame, such as
<a class="reference internal" href="../functions/index.html#datafusion.functions.row_number" title="datafusion.functions.row_number"><code class="xref py py-func docutils literal notranslate"><span class="pre">row_number()</span></code></a>,
<a class="reference internal" href="../functions/index.html#datafusion.functions.rank" title="datafusion.functions.rank"><code class="xref py py-func docutils literal notranslate"><span class="pre">rank()</span></code></a>,
<a class="reference internal" href="../functions/index.html#datafusion.functions.dense_rank" title="datafusion.functions.dense_rank"><code class="xref py py-func docutils literal notranslate"><span class="pre">dense_rank()</span></code></a>,
<a class="reference internal" href="../functions/index.html#datafusion.functions.percent_rank" title="datafusion.functions.percent_rank"><code class="xref py py-func docutils literal notranslate"><span class="pre">percent_rank()</span></code></a>,
<a class="reference internal" href="../functions/index.html#datafusion.functions.cume_dist" title="datafusion.functions.cume_dist"><code class="xref py py-func docutils literal notranslate"><span class="pre">cume_dist()</span></code></a>,
<a class="reference internal" href="../functions/index.html#datafusion.functions.lead" title="datafusion.functions.lead"><code class="xref py py-func docutils literal notranslate"><span class="pre">lead()</span></code></a>,
and <a class="reference internal" href="../functions/index.html#datafusion.functions.lag" title="datafusion.functions.lag"><code class="xref py py-func docutils literal notranslate"><span class="pre">lag()</span></code></a>.</p>
<p>It produces the result of all rows in a single pass. It
expects to receive the entire partition as the <code class="docutils literal notranslate"><span class="pre">value</span></code> and
must produce an output column with one output row for every
input row.</p>
<p><code class="docutils literal notranslate"><span class="pre">num_rows</span></code> is required to correctly compute the output in case
<code class="docutils literal notranslate"><span class="pre">len(values)</span> <span class="pre">==</span> <span class="pre">0</span></code></p>
<p>Implementing this function is an optimization. Certain window
functions are not affected by the window frame definition or
the query doesn’t have a frame, and <code class="docutils literal notranslate"><span class="pre">evaluate</span></code> skips the
(costly) window frame boundary calculation and the overhead of
calling <code class="docutils literal notranslate"><span class="pre">evaluate</span></code> for each output row.</p>
<p>For example, the <cite>LAG</cite> built in window function does not use
the values of its window frame (it can be computed in one shot
on the entire partition with <code class="docutils literal notranslate"><span class="pre">Self::evaluate_all</span></code> regardless of the
window defined in the <code class="docutils literal notranslate"><span class="pre">OVER</span></code> clause)</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>lag(x, 1) OVER (ORDER BY z ROWS BETWEEN 2 PRECEDING AND 3 FOLLOWING)
</pre></div>
</div>
<p>However, <code class="docutils literal notranslate"><span class="pre">avg()</span></code> computes the average in the window and thus
does use its window frame.</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>avg(x) OVER (PARTITION BY y ORDER BY z ROWS BETWEEN 2 PRECEDING AND 3 FOLLOWING)
</pre></div>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.evaluate_all_with_rank">
<span class="sig-name descname"><span class="pre">evaluate_all_with_rank</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">num_rows</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ranks_in_partition</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">pyarrow.Array</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.evaluate_all_with_rank" title="Link to this definition">#</a></dt>
<dd><p>Called for window functions that only need the rank of a row.</p>
<p>Evaluate the partition evaluator against the partition using
the row ranks. For example, <code class="docutils literal notranslate"><span class="pre">rank(col(&quot;a&quot;))</span></code> produces</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>a | rank
- + ----
A | 1
A | 1
C | 3
D | 4
D | 4
</pre></div>
</div>
<p>For this case, <cite>num_rows</cite> would be <cite>5</cite> and the
<cite>ranks_in_partition</cite> would be called with</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[
(0,1),
(2,2),
(3,4),
]
</pre></div>
</div>
<p>The user must implement this method if <code class="docutils literal notranslate"><span class="pre">include_rank</span></code> returns True.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.get_range">
<span class="sig-name descname"><span class="pre">get_range</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">idx</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">num_rows</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.get_range" title="Link to this definition">#</a></dt>
<dd><p>Return the range for the window function.</p>
<p>If <cite>uses_window_frame</cite> flag is <cite>false</cite>. This method is used to
calculate required range for the window function during
stateful execution.</p>
<p>Generally there is no required range, hence by default this
returns smallest range(current row). e.g seeing current row is
enough to calculate window result (such as row_number, rank,
etc)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>idx:</strong> – Current index:</p></li>
<li><p><strong>num_rows</strong> – Number of rows.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.include_rank">
<span class="sig-name descname"><span class="pre">include_rank</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.include_rank" title="Link to this definition">#</a></dt>
<dd><p>Can this function be evaluated with (only) rank?</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.is_causal">
<span class="sig-name descname"><span class="pre">is_causal</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.is_causal" title="Link to this definition">#</a></dt>
<dd><p>Get whether evaluator needs future data for its result.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.memoize">
<span class="sig-name descname"><span class="pre">memoize</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.memoize" title="Link to this definition">#</a></dt>
<dd><p>Perform a memoize operation to improve performance.</p>
<p>When the window frame has a fixed beginning (e.g UNBOUNDED
PRECEDING), some functions such as FIRST_VALUE and
NTH_VALUE do not need the (unbounded) input once they have
seen a certain amount of input.</p>
<p><cite>memoize</cite> is called after each input batch is processed, and
such functions can save whatever they need</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.supports_bounded_execution">
<span class="sig-name descname"><span class="pre">supports_bounded_execution</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.supports_bounded_execution" title="Link to this definition">#</a></dt>
<dd><p>Can the window function be incrementally computed using bounded memory?</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowEvaluator.uses_window_frame">
<span class="sig-name descname"><span class="pre">uses_window_frame</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowEvaluator.uses_window_frame" title="Link to this definition">#</a></dt>
<dd><p>Does the window function use the values from the window frame?</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">WindowUDF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.WindowEvaluator" title="datafusion.user_defined.WindowEvaluator"><span class="pre">WindowEvaluator</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#datafusion.user_defined.WindowUDF" title="Link to this definition">#</a></dt>
<dd><p>Class for performing window user-defined functions (UDF).</p>
<p>Window UDFs operate on a partition of rows. See
also <a class="reference internal" href="#datafusion.user_defined.ScalarUDF" title="datafusion.user_defined.ScalarUDF"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScalarUDF</span></code></a> for operating on a row by row basis.</p>
<p>Instantiate a user-defined window function (UDWF).</p>
<p>See <a class="reference internal" href="#datafusion.user_defined.udwf" title="datafusion.user_defined.udwf"><code class="xref py py-func docutils literal notranslate"><span class="pre">udwf()</span></code></a> for a convenience function and argument
descriptions.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF.__call__">
<span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF.__call__" title="Link to this definition">#</a></dt>
<dd><p>Execute the UDWF.</p>
<p>This function is not typically called by an end user. These calls will
occur during the evaluation of the dataframe.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF.__repr__">
<span class="sig-name descname"><span class="pre">__repr__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF.__repr__" title="Link to this definition">#</a></dt>
<dd><p>Print a string representation of the Window UDF.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF._create_window_udf">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_create_window_udf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.WindowEvaluator" title="datafusion.user_defined.WindowEvaluator"><span class="pre">WindowEvaluator</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.WindowUDF" title="datafusion.user_defined.WindowUDF"><span class="pre">WindowUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF._create_window_udf" title="Link to this definition">#</a></dt>
<dd><p>Create a WindowUDF instance from function arguments.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF._create_window_udf_decorator">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_create_window_udf_decorator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.WindowEvaluator" title="datafusion.user_defined.WindowEvaluator"><span class="pre">WindowEvaluator</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="../expr/index.html#datafusion.expr.Expr" title="datafusion.expr.Expr"><span class="pre">datafusion.expr.Expr</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF._create_window_udf_decorator" title="Link to this definition">#</a></dt>
<dd><p>Create a decorator for a WindowUDF.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF._from_internal">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_from_internal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">internal</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datafusion._internal.WindowUDF</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.WindowUDF" title="datafusion.user_defined.WindowUDF"><span class="pre">WindowUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF._from_internal" title="Link to this definition">#</a></dt>
<dd><p>Wrap an already-constructed internal <code class="docutils literal notranslate"><span class="pre">WindowUDF</span></code> handle.</p>
<p>Used by <code class="xref py py-meth docutils literal notranslate"><span class="pre">SessionContext.udwf()</span></code> to surface a function looked
up from the session’s function registry without re-running
<code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code>.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF._get_default_name">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_get_default_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF._get_default_name" title="Link to this definition">#</a></dt>
<dd><p>Get the default name for a function based on its attributes.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF._normalize_input_types">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">_normalize_input_types</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF._normalize_input_types" title="Link to this definition">#</a></dt>
<dd><p>Convert a single DataType to a list if needed.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF.from_pycapsule">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_pycapsule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.WindowUDFExportable" title="datafusion.user_defined.WindowUDFExportable"><span class="pre">WindowUDFExportable</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.WindowUDF" title="datafusion.user_defined.WindowUDF"><span class="pre">WindowUDF</span></a></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF.from_pycapsule" title="Link to this definition">#</a></dt>
<dd><p>Create a Window UDF from WindowUDF PyCapsule object.</p>
<p>This function will instantiate a Window UDF that uses a DataFusion
WindowUDF that is exported via the FFI bindings.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF.udwf">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udwf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.WindowUDF" title="datafusion.user_defined.WindowUDF"><span class="pre">WindowUDF</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF.udwf" title="Link to this definition">#</a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">udwf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">[</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#datafusion.user_defined.WindowEvaluator" title="datafusion.user_defined.WindowEvaluator"><span class="pre">WindowEvaluator</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">volatility</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><span class="pre">Volatility</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#datafusion.user_defined.WindowUDF" title="datafusion.user_defined.WindowUDF"><span class="pre">WindowUDF</span></a></span></span></dt>
<dd><p>Create a new User-Defined Window Function (UDWF).</p>
<p>This class can be used both as either a function or a decorator.</p>
<dl class="simple">
<dt>Usage:</dt><dd><ul class="simple">
<li><p>As a function: <code class="docutils literal notranslate"><span class="pre">udwf(func,</span> <span class="pre">input_types,</span> <span class="pre">return_type,</span> <span class="pre">volatility,</span> <span class="pre">name)</span></code>.</p></li>
<li><p>As a decorator: <code class="docutils literal notranslate"><span class="pre">&#64;udwf(input_types,</span> <span class="pre">return_type,</span> <span class="pre">volatility,</span> <span class="pre">name)</span></code>.
When using <code class="docutils literal notranslate"><span class="pre">udwf</span></code> as a decorator, do not pass <code class="docutils literal notranslate"><span class="pre">func</span></code> explicitly.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Examples</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">datafusion.user_defined</span><span class="w"> </span><span class="kn">import</span> <span class="n">WindowUDF</span><span class="p">,</span> <span class="n">WindowEvaluator</span><span class="p">,</span> <span class="n">udwf</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">BiasedNumbers</span><span class="p">(</span><span class="n">WindowEvaluator</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</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="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
<span class="gp">... </span> <span class="k">def</span><span class="w"> </span><span class="nf">evaluate_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">num_rows</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">pa</span><span class="o">.</span><span class="n">array</span><span class="p">(</span>
<span class="gp">... </span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">+</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_rows</span><span class="p">)])</span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">udwf</span></code> as a function:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">udwf1</span> <span class="o">=</span> <span class="n">WindowUDF</span><span class="o">.</span><span class="n">udwf</span><span class="p">(</span>
<span class="gp">... </span> <span class="n">BiasedNumbers</span><span class="p">,</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">def</span><span class="w"> </span><span class="nf">bias_10</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">BiasedNumbers</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">BiasedNumbers</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">udwf2</span> <span class="o">=</span> <span class="n">udwf</span><span class="p">(</span><span class="n">bias_10</span><span class="p">,</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">udwf3</span> <span class="o">=</span> <span class="n">udwf</span><span class="p">(</span>
<span class="gp">... </span> <span class="k">lambda</span><span class="p">:</span> <span class="n">BiasedNumbers</span><span class="p">(</span><span class="mi">20</span><span class="p">),</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="s2">&quot;immutable&quot;</span>
<span class="gp">... </span><span class="p">)</span>
</pre></div>
</div>
<p>Using <code class="docutils literal notranslate"><span class="pre">udwf</span></code> as a decorator:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nd">@WindowUDF</span><span class="o">.</span><span class="n">udwf</span><span class="p">(</span><span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">pa</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="s2">&quot;immutable&quot;</span><span class="p">)</span>
<span class="gp">... </span><span class="k">def</span><span class="w"> </span><span class="nf">biased_numbers</span><span class="p">():</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">BiasedNumbers</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
</pre></div>
</div>
<p>Apply to a dataframe:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ctx</span> <span class="o">=</span> <span class="n">dfn</span><span class="o">.</span><span class="n">SessionContext</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">from_pydict</span><span class="p">({</span><span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">10</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">30</span><span class="p">]})</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">udwf1</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;result&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_pydict</span><span class="p">()</span>
<span class="go">{&#39;result&#39;: [0, 1, 2]}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">udwf2</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;result&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_pydict</span><span class="p">()</span>
<span class="go">{&#39;result&#39;: [10, 11, 12]}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">udwf3</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;result&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_pydict</span><span class="p">()</span>
<span class="go">{&#39;result&#39;: [20, 21, 22]}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">biased_numbers</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;result&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_pydict</span><span class="p">()</span>
<span class="go">{&#39;result&#39;: [10, 11, 12]}</span>
</pre></div>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>func</strong> – Only needed when calling as a function. Skip this argument when
using <code class="docutils literal notranslate"><span class="pre">udwf</span></code> as a decorator. If you have a Rust backed WindowUDF
within a PyCapsule, you can pass this parameter and ignore the rest.
They will be determined directly from the underlying function. See
the online documentation for more information.</p></li>
<li><p><strong>input_types</strong> – The data types of the arguments.</p></li>
<li><p><strong>return_type</strong> – The data type of the return value.</p></li>
<li><p><strong>volatility</strong> – See <a class="reference internal" href="#datafusion.user_defined.Volatility" title="datafusion.user_defined.Volatility"><code class="xref py py-class docutils literal notranslate"><span class="pre">Volatility</span></code></a> for allowed values.</p></li>
<li><p><strong>name</strong> – A descriptive name for the function.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A user-defined window function that can be used in window function calls.</p>
</dd>
</dl>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF._udwf">
<span class="sig-name descname"><span class="pre">_udwf</span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDF._udwf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDF.name">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#datafusion.user_defined.WindowUDF.name" title="Link to this definition">#</a></dt>
<dd><p>Return the registered name of this UDWF.</p>
<p>For UDWFs imported via the FFI capsule protocol, this is the
name the capsule itself reports — not the <code class="docutils literal notranslate"><span class="pre">name</span></code> argument
passed to the constructor (which is ignored on the FFI path).</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDFExportable">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">WindowUDFExportable</span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDFExportable" title="Link to this definition">#</a></dt>
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">Protocol</span></code></p>
<p>Type hint for object that has __datafusion_window_udf__ PyCapsule.</p>
<dl class="py method">
<dt class="sig sig-object py" id="datafusion.user_defined.WindowUDFExportable.__datafusion_window_udf__">
<span class="sig-name descname"><span class="pre">__datafusion_window_udf__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">object</span></span></span><a class="headerlink" href="#datafusion.user_defined.WindowUDFExportable.__datafusion_window_udf__" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="datafusion.user_defined._is_pycapsule">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">_is_pycapsule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">TypeGuard</span><span class="p"><span class="pre">[</span></span><span class="pre">_typeshed.CapsuleType</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined._is_pycapsule" title="Link to this definition">#</a></dt>
<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> when <code class="docutils literal notranslate"><span class="pre">value</span></code> is a CPython <code class="docutils literal notranslate"><span class="pre">PyCapsule</span></code>.</p>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="datafusion.user_defined._wrap_session_kwarg_for_udtf">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">_wrap_session_kwarg_for_udtf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">collections.abc.Callable</span><span class="p"><span class="pre">[</span></span><span class="pre">Ellipsis</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined._wrap_session_kwarg_for_udtf" title="Link to this definition">#</a></dt>
<dd><p>Adapt the raw internal session pyo3 object back to a Python wrapper.</p>
<p>The Rust call site forwards a <code class="docutils literal notranslate"><span class="pre">datafusion._internal.SessionContext</span></code>,
but UDTF authors expect to interact with the public
<code class="xref py py-class docutils literal notranslate"><span class="pre">datafusion.SessionContext</span></code> wrapper. This closure wraps the
internal object once per call before delegating to <code class="docutils literal notranslate"><span class="pre">func</span></code>.</p>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="datafusion.user_defined.data_type_or_field_to_field">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">data_type_or_field_to_field</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pyarrow.DataType</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">pyarrow.Field</span></span></span><a class="headerlink" href="#datafusion.user_defined.data_type_or_field_to_field" title="Link to this definition">#</a></dt>
<dd><p>Helper function to return a Field from either a Field or DataType.</p>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="datafusion.user_defined.data_types_or_fields_to_field_list">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">data_types_or_fields_to_field_list</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inputs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">collections.abc.Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Field</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.DataType</span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.Field</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">pyarrow.DataType</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">pyarrow.Field</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#datafusion.user_defined.data_types_or_fields_to_field_list" title="Link to this definition">#</a></dt>
<dd><p>Helper function to return a list of Fields.</p>
</dd></dl>
<dl class="py data">
<dt class="sig sig-object py" id="datafusion.user_defined._R">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">_R</span></span><a class="headerlink" href="#datafusion.user_defined._R" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py data">
<dt class="sig sig-object py" id="datafusion.user_defined.udaf">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">udaf</span></span><a class="headerlink" href="#datafusion.user_defined.udaf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py data">
<dt class="sig sig-object py" id="datafusion.user_defined.udf">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">udf</span></span><a class="headerlink" href="#datafusion.user_defined.udf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py data">
<dt class="sig sig-object py" id="datafusion.user_defined.udtf">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">udtf</span></span><a class="headerlink" href="#datafusion.user_defined.udtf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
<dl class="py data">
<dt class="sig sig-object py" id="datafusion.user_defined.udwf">
<span class="sig-prename descclassname"><span class="pre">datafusion.user_defined.</span></span><span class="sig-name descname"><span class="pre">udwf</span></span><a class="headerlink" href="#datafusion.user_defined.udwf" title="Link to this definition">#</a></dt>
<dd></dd></dl>
</section>
</section>
</article>
<footer class="prev-next-footer d-print-none">
<div class="prev-next-area">
<a class="left-prev"
href="../unparser/index.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">datafusion.unparser</p>
</div>
</a>
<a class="right-next"
href="../../../links.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">Links</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<dialog id="pst-secondary-sidebar-modal"></dialog>
<div id="pst-secondary-sidebar" class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div
id="pst-page-navigation-heading-2"
class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> On this page
</div>
<nav class="bd-toc-nav page-toc" aria-labelledby="pst-page-navigation-heading-2">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#attributes">Attributes</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#classes">Classes</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#functions">Functions</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#module-contents">Module Contents</a><ul class="visible nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Accumulator"><code class="docutils literal notranslate"><span class="pre">Accumulator</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Accumulator.evaluate"><code class="docutils literal notranslate"><span class="pre">Accumulator.evaluate()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Accumulator.merge"><code class="docutils literal notranslate"><span class="pre">Accumulator.merge()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Accumulator.state"><code class="docutils literal notranslate"><span class="pre">Accumulator.state()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Accumulator.update"><code class="docutils literal notranslate"><span class="pre">Accumulator.update()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF"><code class="docutils literal notranslate"><span class="pre">AggregateUDF</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF.__call__"><code class="docutils literal notranslate"><span class="pre">AggregateUDF.__call__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF.__repr__"><code class="docutils literal notranslate"><span class="pre">AggregateUDF.__repr__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF._from_internal"><code class="docutils literal notranslate"><span class="pre">AggregateUDF._from_internal()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF.from_pycapsule"><code class="docutils literal notranslate"><span class="pre">AggregateUDF.from_pycapsule()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF.udaf"><code class="docutils literal notranslate"><span class="pre">AggregateUDF.udaf()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF._udaf"><code class="docutils literal notranslate"><span class="pre">AggregateUDF._udaf</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDF.name"><code class="docutils literal notranslate"><span class="pre">AggregateUDF.name</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDFExportable"><code class="docutils literal notranslate"><span class="pre">AggregateUDFExportable</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.AggregateUDFExportable.__datafusion_aggregate_udf__"><code class="docutils literal notranslate"><span class="pre">AggregateUDFExportable.__datafusion_aggregate_udf__()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.LogicalExtensionCodecExportable"><code class="docutils literal notranslate"><span class="pre">LogicalExtensionCodecExportable</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.LogicalExtensionCodecExportable.__datafusion_logical_extension_codec__"><code class="docutils literal notranslate"><span class="pre">LogicalExtensionCodecExportable.__datafusion_logical_extension_codec__()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.PhysicalExtensionCodecExportable"><code class="docutils literal notranslate"><span class="pre">PhysicalExtensionCodecExportable</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.PhysicalExtensionCodecExportable.__datafusion_physical_extension_codec__"><code class="docutils literal notranslate"><span class="pre">PhysicalExtensionCodecExportable.__datafusion_physical_extension_codec__()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF"><code class="docutils literal notranslate"><span class="pre">ScalarUDF</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF.__call__"><code class="docutils literal notranslate"><span class="pre">ScalarUDF.__call__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF.__repr__"><code class="docutils literal notranslate"><span class="pre">ScalarUDF.__repr__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF._from_internal"><code class="docutils literal notranslate"><span class="pre">ScalarUDF._from_internal()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF.from_pycapsule"><code class="docutils literal notranslate"><span class="pre">ScalarUDF.from_pycapsule()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF.udf"><code class="docutils literal notranslate"><span class="pre">ScalarUDF.udf()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF._udf"><code class="docutils literal notranslate"><span class="pre">ScalarUDF._udf</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDF.name"><code class="docutils literal notranslate"><span class="pre">ScalarUDF.name</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDFExportable"><code class="docutils literal notranslate"><span class="pre">ScalarUDFExportable</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.ScalarUDFExportable.__datafusion_scalar_udf__"><code class="docutils literal notranslate"><span class="pre">ScalarUDFExportable.__datafusion_scalar_udf__()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction"><code class="docutils literal notranslate"><span class="pre">TableFunction</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction.__call__"><code class="docutils literal notranslate"><span class="pre">TableFunction.__call__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction.__repr__"><code class="docutils literal notranslate"><span class="pre">TableFunction.__repr__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction._create_table_udf"><code class="docutils literal notranslate"><span class="pre">TableFunction._create_table_udf()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction._create_table_udf_decorator"><code class="docutils literal notranslate"><span class="pre">TableFunction._create_table_udf_decorator()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction.udtf"><code class="docutils literal notranslate"><span class="pre">TableFunction.udtf()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.TableFunction._udtf"><code class="docutils literal notranslate"><span class="pre">TableFunction._udtf</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Volatility"><code class="docutils literal notranslate"><span class="pre">Volatility</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Volatility.__str__"><code class="docutils literal notranslate"><span class="pre">Volatility.__str__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Volatility.Immutable"><code class="docutils literal notranslate"><span class="pre">Volatility.Immutable</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Volatility.Stable"><code class="docutils literal notranslate"><span class="pre">Volatility.Stable</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.Volatility.Volatile"><code class="docutils literal notranslate"><span class="pre">Volatility.Volatile</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.evaluate"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.evaluate()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.evaluate_all"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.evaluate_all()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.evaluate_all_with_rank"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.evaluate_all_with_rank()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.get_range"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.get_range()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.include_rank"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.include_rank()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.is_causal"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.is_causal()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.memoize"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.memoize()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.supports_bounded_execution"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.supports_bounded_execution()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowEvaluator.uses_window_frame"><code class="docutils literal notranslate"><span class="pre">WindowEvaluator.uses_window_frame()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF"><code class="docutils literal notranslate"><span class="pre">WindowUDF</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF.__call__"><code class="docutils literal notranslate"><span class="pre">WindowUDF.__call__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF.__repr__"><code class="docutils literal notranslate"><span class="pre">WindowUDF.__repr__()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF._create_window_udf"><code class="docutils literal notranslate"><span class="pre">WindowUDF._create_window_udf()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF._create_window_udf_decorator"><code class="docutils literal notranslate"><span class="pre">WindowUDF._create_window_udf_decorator()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF._from_internal"><code class="docutils literal notranslate"><span class="pre">WindowUDF._from_internal()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF._get_default_name"><code class="docutils literal notranslate"><span class="pre">WindowUDF._get_default_name()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF._normalize_input_types"><code class="docutils literal notranslate"><span class="pre">WindowUDF._normalize_input_types()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF.from_pycapsule"><code class="docutils literal notranslate"><span class="pre">WindowUDF.from_pycapsule()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF.udwf"><code class="docutils literal notranslate"><span class="pre">WindowUDF.udwf()</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF._udwf"><code class="docutils literal notranslate"><span class="pre">WindowUDF._udwf</span></code></a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDF.name"><code class="docutils literal notranslate"><span class="pre">WindowUDF.name</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDFExportable"><code class="docutils literal notranslate"><span class="pre">WindowUDFExportable</span></code></a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.WindowUDFExportable.__datafusion_window_udf__"><code class="docutils literal notranslate"><span class="pre">WindowUDFExportable.__datafusion_window_udf__()</span></code></a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined._is_pycapsule"><code class="docutils literal notranslate"><span class="pre">_is_pycapsule()</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined._wrap_session_kwarg_for_udtf"><code class="docutils literal notranslate"><span class="pre">_wrap_session_kwarg_for_udtf()</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.data_type_or_field_to_field"><code class="docutils literal notranslate"><span class="pre">data_type_or_field_to_field()</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.data_types_or_fields_to_field_list"><code class="docutils literal notranslate"><span class="pre">data_types_or_fields_to_field_list()</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined._R"><code class="docutils literal notranslate"><span class="pre">_R</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.udaf"><code class="docutils literal notranslate"><span class="pre">udaf</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.udf"><code class="docutils literal notranslate"><span class="pre">udf</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.udtf"><code class="docutils literal notranslate"><span class="pre">udtf</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#datafusion.user_defined.udwf"><code class="docutils literal notranslate"><span class="pre">udwf</span></code></a></li>
</ul>
</li>
</ul>
</nav></div>
</div></div>
</div>
<footer class="bd-footer-content">
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script defer src="../../../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf"></script>
<script defer src="../../../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf"></script>
<!-- Based on pydata_sphinx_theme/footer.html -->
<footer class="footer mt-5 mt-md-0">
<div class="container">
<div class="footer-item">
<p>Apache Arrow DataFusion, Arrow DataFusion, Apache, the Apache feather logo, and the Apache Arrow DataFusion project logo</p>
<p>are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p>
</div>
</div>
</footer>
</body>
</html>