This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/sedona-db.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 725338b  Deployed 90ba5b4 to latest-snapshot with MkDocs 1.6.1 and 
mike 2.1.3
725338b is described below

commit 725338b302661764015075412cd08c3b35b916b6
Author: GitHub Actions <[email protected]>
AuthorDate: Sat Oct 25 01:38:54 2025 +0000

    Deployed 90ba5b4 to latest-snapshot with MkDocs 1.6.1 and mike 2.1.3
---
 latest-snapshot/objects.inv                 | Bin 994 -> 1102 bytes
 latest-snapshot/reference/python/index.html | 745 +++++++++++++++++++++++++++-
 latest-snapshot/search/search_index.json    |   2 +-
 latest-snapshot/sitemap.xml                 |  24 +-
 latest-snapshot/sitemap.xml.gz              | Bin 323 -> 323 bytes
 5 files changed, 757 insertions(+), 14 deletions(-)

diff --git a/latest-snapshot/objects.inv b/latest-snapshot/objects.inv
index afa62fd..1fc6a7b 100644
Binary files a/latest-snapshot/objects.inv and b/latest-snapshot/objects.inv 
differ
diff --git a/latest-snapshot/reference/python/index.html 
b/latest-snapshot/reference/python/index.html
index e8d3293..24634e2 100644
--- a/latest-snapshot/reference/python/index.html
+++ b/latest-snapshot/reference/python/index.html
@@ -1119,6 +1119,102 @@
       </ul>
     </nav>
   
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#sedonadb.udf" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-module"></code>&nbsp;udf
+    </span>
+  </a>
+  
+    <nav class="md-nav" aria-label="&nbsp;udf">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.BINARY" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;BINARY
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.BOOLEAN" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;BOOLEAN
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.GEOGRAPHY" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;GEOGRAPHY
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.GEOMETRY" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;GEOMETRY
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.NUMERIC" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;NUMERIC
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.STRING" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;STRING
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.ScalarUdfImpl" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-class"></code>&nbsp;ScalarUdfImpl
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.TypeMatcher" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-class"></code>&nbsp;TypeMatcher
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.arrow_udf" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-function"></code>&nbsp;arrow_udf
+    </span>
+  </a>
+  
+</li>
+        
+      </ul>
+    </nav>
+  
 </li>
       
     </ul>
@@ -1507,6 +1603,102 @@
       </ul>
     </nav>
   
+</li>
+      
+        <li class="md-nav__item">
+  <a href="#sedonadb.udf" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-module"></code>&nbsp;udf
+    </span>
+  </a>
+  
+    <nav class="md-nav" aria-label="&nbsp;udf">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.BINARY" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;BINARY
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.BOOLEAN" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;BOOLEAN
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.GEOGRAPHY" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;GEOGRAPHY
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.GEOMETRY" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;GEOMETRY
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.NUMERIC" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;NUMERIC
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.STRING" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-attribute"></code>&nbsp;STRING
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.ScalarUdfImpl" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-class"></code>&nbsp;ScalarUdfImpl
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.TypeMatcher" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-class"></code>&nbsp;TypeMatcher
+    </span>
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#sedonadb.udf.arrow_udf" class="md-nav__link">
+    <span class="md-ellipsis">
+      <code class="doc-symbol doc-symbol-toc 
doc-symbol-function"></code>&nbsp;arrow_udf
+    </span>
+  </a>
+  
+</li>
+        
+      </ul>
+    </nav>
+  
 </li>
       
     </ul>
@@ -1802,6 +1994,63 @@ For S3 access, use {"aws.skip_signature": True, 
"aws.region": "us-west-2"} for a
 <div class="doc doc-object doc-function">
 
 
+<h4 id="sedonadb.context.SedonaContext.register_udf" class="doc doc-heading">
+            <span class="doc doc-object-name 
doc-function-name">register_udf</span>
+
+
+<a href="#sedonadb.context.SedonaContext.register_udf" class="headerlink" 
title="Permanent link">¶</a></h4>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="nf">register_udf</span><span class="p">(</span><span 
class="n">udf</span><span class="p">:</span> <span class="n"><a class="autorefs 
autorefs-external" title="typing.Any" 
href="https://docs.python.org/3/library/typing.html#typing.Any";>Any</a></span><span
 class="p">)</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Register a user-defined function</p>
+
+
+<p><span class="doc-section-title">Parameters:</span></p>
+    <ul>
+        <li class="doc-section-item field-body">
+            <b><code>udf</code></b>
+              (<code><a class="autorefs autorefs-external" title="typing.Any" 
href="https://docs.python.org/3/library/typing.html#typing.Any";>Any</a></code>)
+          –
+          <div class="doc-md-description">
+            <p>An object implementing the DataFusion PyCapsule protocol
+(i.e., <code>__datafusion_scalar_udf__</code>) or a function annotated
+with <a class="autorefs autorefs-internal" title="arrow_udf" 
href="#sedonadb.udf.arrow_udf">arrow_udf</a>.</p>
+          </div>
+        </li>
+    </ul>
+        <p>Examples:</p>
+<div class="codehilite"><pre><span></span><code><span 
class="o">&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="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span 
class="w"> </span><span class="nn">sedonadb</span><span class="w"> </span><span 
class="kn">import</span> <span class="n">udf</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span> <span 
class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span 
class="n">db</span><span class="o">.</span><span class="n">connect</span><span 
class="p">()</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nd">@udf</span><span 
class="o">.</span><span class="n">arrow_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="p">[</span><span class="n">udf</span><span 
class="o">.</span><span class="n">STRING</span><span class="p">])</span>
+<span class="o">...</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">char_count</span><span class="p">(</span><span 
class="n">arg0</span><span class="p">):</span>
+<span class="o">...</span>     <span class="n">arg0</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">array</span><span class="p">(</span><span class="n">arg0</span><span 
class="o">.</span><span class="n">to_array</span><span class="p">())</span>
+<span class="o">...</span>
+<span class="o">...</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="o">...</span>         <span class="p">(</span><span 
class="nb">len</span><span class="p">(</span><span class="n">item</span><span 
class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span 
class="ow">in</span> <span class="n">arg0</span><span class="o">.</span><span 
class="n">to_pylist</span><span class="p">()),</span>
+<span class="o">...</span>         <span class="n">pa</span><span 
class="o">.</span><span class="n">int64</span><span class="p">()</span>
+<span class="o">...</span>     <span class="p">)</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">register_udf</span><span 
class="p">(</span><span class="n">char_count</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT char_count('abcde') as col"</span><span 
class="p">)</span><span class="o">.</span><span class="n">show</span><span 
class="p">()</span>
+<span class="err">┌───────┐</span>
+<span class="err">│</span>  <span class="n">col</span>  <span 
class="err">│</span>
+<span class="err">│</span> <span class="n">int64</span> <span 
class="err">│</span>
+<span class="err">╞═══════╡</span>
+<span class="err">│</span>     <span class="mi">5</span> <span 
class="err">│</span>
+<span class="err">└───────┘</span>
+</code></pre></div>
+
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-function">
+
+
 <h4 id="sedonadb.context.SedonaContext.sql" class="doc doc-heading">
             <span class="doc doc-object-name doc-function-name">sql</span>
 
@@ -3777,6 +4026,500 @@ DBAPI is experimental.</p>
 
 </div>
 
+<div class="doc doc-object doc-module">
+
+
+
+<h2 id="sedonadb.udf" class="doc doc-heading">
+            <span class="doc doc-object-name 
doc-module-name">sedonadb.udf</span>
+
+
+<a href="#sedonadb.udf" class="headerlink" title="Permanent link">¶</a></h2>
+
+    <div class="doc doc-contents first">
+
+
+
+
+
+
+
+
+
+
+  <div class="doc doc-children">
+
+
+
+
+
+
+
+<div class="doc doc-object doc-attribute">
+
+
+
+<h3 id="sedonadb.udf.BINARY" class="doc doc-heading">
+            <span class="doc doc-object-name doc-attribute-name">BINARY</span>
+
+
+  <span class="doc doc-labels">
+      <small class="doc doc-label 
doc-label-module-attribute"><code>module-attribute</code></small>
+  </span>
+
+<a href="#sedonadb.udf.BINARY" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="n">BINARY</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" 
href="#sedonadb.udf.TypeMatcher">TypeMatcher</a></span> <span 
class="o">=</span> <span class="s1">'binary'</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Match any binary argument (i.e., binary, binary view, large binary,
+fixed-size binary)</p>
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-attribute">
+
+
+
+<h3 id="sedonadb.udf.BOOLEAN" class="doc doc-heading">
+            <span class="doc doc-object-name doc-attribute-name">BOOLEAN</span>
+
+
+  <span class="doc doc-labels">
+      <small class="doc doc-label 
doc-label-module-attribute"><code>module-attribute</code></small>
+  </span>
+
+<a href="#sedonadb.udf.BOOLEAN" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="n">BOOLEAN</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" 
href="#sedonadb.udf.TypeMatcher">TypeMatcher</a></span> <span 
class="o">=</span> <span class="s1">'boolean'</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Match a boolean argument</p>
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-attribute">
+
+
+
+<h3 id="sedonadb.udf.GEOGRAPHY" class="doc doc-heading">
+            <span class="doc doc-object-name 
doc-attribute-name">GEOGRAPHY</span>
+
+
+  <span class="doc doc-labels">
+      <small class="doc doc-label 
doc-label-module-attribute"><code>module-attribute</code></small>
+  </span>
+
+<a href="#sedonadb.udf.GEOGRAPHY" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="n">GEOGRAPHY</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" 
href="#sedonadb.udf.TypeMatcher">TypeMatcher</a></span> <span 
class="o">=</span> <span class="s1">'geography'</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Match a geography argument</p>
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-attribute">
+
+
+
+<h3 id="sedonadb.udf.GEOMETRY" class="doc doc-heading">
+            <span class="doc doc-object-name 
doc-attribute-name">GEOMETRY</span>
+
+
+  <span class="doc doc-labels">
+      <small class="doc doc-label 
doc-label-module-attribute"><code>module-attribute</code></small>
+  </span>
+
+<a href="#sedonadb.udf.GEOMETRY" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="n">GEOMETRY</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" 
href="#sedonadb.udf.TypeMatcher">TypeMatcher</a></span> <span 
class="o">=</span> <span class="s1">'geometry'</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Match a geometry argument</p>
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-attribute">
+
+
+
+<h3 id="sedonadb.udf.NUMERIC" class="doc doc-heading">
+            <span class="doc doc-object-name doc-attribute-name">NUMERIC</span>
+
+
+  <span class="doc doc-labels">
+      <small class="doc doc-label 
doc-label-module-attribute"><code>module-attribute</code></small>
+  </span>
+
+<a href="#sedonadb.udf.NUMERIC" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="n">NUMERIC</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" 
href="#sedonadb.udf.TypeMatcher">TypeMatcher</a></span> <span 
class="o">=</span> <span class="s1">'numeric'</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Match any numeric argument</p>
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-attribute">
+
+
+
+<h3 id="sedonadb.udf.STRING" class="doc doc-heading">
+            <span class="doc doc-object-name doc-attribute-name">STRING</span>
+
+
+  <span class="doc doc-labels">
+      <small class="doc doc-label 
doc-label-module-attribute"><code>module-attribute</code></small>
+  </span>
+
+<a href="#sedonadb.udf.STRING" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="n">STRING</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" 
href="#sedonadb.udf.TypeMatcher">TypeMatcher</a></span> <span 
class="o">=</span> <span class="s1">'string'</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Match any string argument (i.e., string, string view, large 
string)</p>
+
+    </div>
+
+</div>
+
+
+
+<div class="doc doc-object doc-class">
+
+
+
+<h3 id="sedonadb.udf.ScalarUdfImpl" class="doc doc-heading">
+            <span class="doc doc-object-name 
doc-class-name">ScalarUdfImpl</span>
+
+
+<a href="#sedonadb.udf.ScalarUdfImpl" class="headerlink" title="Permanent 
link">¶</a></h3>
+
+
+    <div class="doc doc-contents ">
+
+
+        <p>Scalar user-defined function wrapper</p>
+<p>This class is a wrapper class used as the return value for user-defined
+function constructors. This wrapper allows the UDF to be registered with
+a SedonaDB context or any context that accepts DataFusion Python
+Scalar UDFs. This object is not intended to be used to call a UDF.</p>
+
+
+
+
+
+
+
+
+
+
+
+  <div class="doc doc-children">
+
+
+
+
+
+
+
+
+
+
+
+
+  </div>
+
+    </div>
+
+</div>
+
+<div class="doc doc-object doc-class">
+
+
+
+<h3 id="sedonadb.udf.TypeMatcher" class="doc doc-heading">
+            <span class="doc doc-object-name doc-class-name">TypeMatcher</span>
+
+
+<a href="#sedonadb.udf.TypeMatcher" class="headerlink" title="Permanent 
link">¶</a></h3>
+
+
+    <div class="doc doc-contents ">
+            <p class="doc doc-class-bases">
+              Bases: <code><a class="autorefs autorefs-external" 
href="https://docs.python.org/3/library/stdtypes.html#str";>str</a></code></p>
+
+
+        <p>Helper class to mark type matchers that can be used as the 
<code>input_types</code> for
+user-defined functions</p>
+<p>Note that the internal storage of the type matcher (currently a string) is
+arbitrary and may change in a future release. Use the constants provided by
+the <code>udf</code> module.</p>
+
+
+
+
+
+
+
+
+
+    </div>
+
+</div>
+
+
+<div class="doc doc-object doc-function">
+
+
+<h3 id="sedonadb.udf.arrow_udf" class="doc doc-heading">
+            <span class="doc doc-object-name 
doc-function-name">arrow_udf</span>
+
+
+<a href="#sedonadb.udf.arrow_udf" class="headerlink" title="Permanent 
link">¶</a></h3>
+<div class="doc-signature highlight"><pre><span></span><code><span 
class="nf">arrow_udf</span><span class="p">(</span>
+    <span class="n">return_type</span><span class="p">:</span> <span 
class="n"><a class="autorefs autorefs-external" title="typing.Any" 
href="https://docs.python.org/3/library/typing.html#typing.Any";>Any</a></span><span
 class="p">,</span>
+    <span class="n">input_types</span><span class="p">:</span> <span 
class="n"><a class="autorefs autorefs-external" title="typing.List" 
href="https://docs.python.org/3/library/typing.html#typing.List";>List</a></span><span
 class="p">[</span><span class="n"><a class="autorefs autorefs-external" 
title="typing.Union" 
href="https://docs.python.org/3/library/typing.html#typing.Union";>Union</a></span><span
 class="p">[</span><span class="n"><a class="autorefs autorefs-internal" 
title="TypeMatch [...]
+    <span class="n">volatility</span><span class="p">:</span> <span 
class="n"><a class="autorefs autorefs-external" title="typing.Literal" 
href="https://docs.python.org/3/library/typing.html#typing.Literal";>Literal</a></span><span
 class="p">[</span><span class="s2">"immutable"</span><span class="p">,</span> 
<span class="s2">"stable"</span><span class="p">,</span> <span 
class="s2">"volatile"</span><span class="p">]</span> <span class="o">=</span> 
<span class="s2">"immutable"</span><span c [...]
+    <span class="n">name</span><span class="p">:</span> <span class="n"><a 
class="autorefs autorefs-external" title="typing.Optional" 
href="https://docs.python.org/3/library/typing.html#typing.Optional";>Optional</a></span><span
 class="p">[</span><span class="n"><a class="autorefs autorefs-external" 
href="https://docs.python.org/3/library/stdtypes.html#str";>str</a></span><span 
class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span 
class="p">,</span>
+<span class="p">)</span>
+</code></pre></div>
+
+    <div class="doc doc-contents ">
+
+        <p>Generic Arrow-based user-defined scalar function decorator</p>
+<p>This decorator may be used to annotate a function that accepts arguments as
+Arrow array wrappers implementing the
+<a 
href="https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html";>Arrow
 PyCapsule Interface</a>.
+The annotated function must return a value of a consistent length of the
+appropriate type.</p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
+<p>SedonaDB will call the provided function from multiple threads. Attempts
+to modify shared state from the body of the function may crash or cause
+unusual behaviour.</p>
+</div>
+<p>SedonaDB Python UDFs are experimental and this interface may change based on
+user feedback.</p>
+
+
+<p><span class="doc-section-title">Parameters:</span></p>
+    <ul>
+        <li class="doc-section-item field-body">
+            <b><code>return_type</code></b>
+              (<code><a class="autorefs autorefs-external" title="typing.Any" 
href="https://docs.python.org/3/library/typing.html#typing.Any";>Any</a></code>)
+          –
+          <div class="doc-md-description">
+            <p>One of
+- A data type (e.g., pyarrow.DataType, arro3.core.DataType, nanoarrow.Schema)
+  if this function returns the same type regardless of its inputs.
+- A function of <code>arg_types</code> (list of data types) and 
<code>scalar_args</code> (list of
+  optional scalars) that returns a data type. This function is also
+  responsible for returning <code>None</code> if this function does not apply 
to the
+  input types.</p>
+          </div>
+        </li>
+        <li class="doc-section-item field-body">
+            <b><code>input_types</code></b>
+              (<code><a class="autorefs autorefs-external" title="typing.List" 
href="https://docs.python.org/3/library/typing.html#typing.List";>List</a>[<a 
class="autorefs autorefs-external" title="typing.Union" 
href="https://docs.python.org/3/library/typing.html#typing.Union";>Union</a>[<a 
class="autorefs autorefs-internal" title="TypeMatcher 
(sedonadb.udf.TypeMatcher)" href="#sedonadb.udf.TypeMatcher">TypeMatcher</a>, 
<a class="autorefs autorefs-external" title="typing.Any" href="https: [...]
+                  <code>None</code>
+)
+          –
+          <div class="doc-md-description">
+            <p>One of
+- A list where each member is a data type or a <code>TypeMatcher</code>. The
+  <code>udf.GEOMETRY</code> and <code>udf.GEOGRAPHY</code> type matchers are 
the most useful
+  because otherwise the function will only match spatial data types whose
+  coordinate reference system (CRS) also matches (i.e., based on simple
+  equality). Using these type matchers will also ensure input CRS consistency
+  and will automatically propagate input CRSes into the output.
+- <code>None</code>, indicating that this function can accept any number of 
arguments
+  of any type. Usually this is paired with a functional 
<code>return_type</code> that
+  dynamically computes a return type or returns <code>None</code> if the 
number or
+  types of arguments do not match.</p>
+          </div>
+        </li>
+        <li class="doc-section-item field-body">
+            <b><code>volatility</code></b>
+              (<code><a class="autorefs autorefs-external" 
title="typing.Literal" 
href="https://docs.python.org/3/library/typing.html#typing.Literal";>Literal</a>['immutable',
 'stable', 'volatile']</code>, default:
+                  <code>'immutable'</code>
+)
+          –
+          <div class="doc-md-description">
+            <p>Use "immutable" for functions whose output is always consistent
+for the same inputs (even between queries); use "stable" for functions
+whose output is always consistent for the same inputs but only within
+the same query, and use "volatile" for functions that generate random
+or otherwise non-deterministic output.</p>
+          </div>
+        </li>
+        <li class="doc-section-item field-body">
+            <b><code>name</code></b>
+              (<code><a class="autorefs autorefs-external" 
title="typing.Optional" 
href="https://docs.python.org/3/library/typing.html#typing.Optional";>Optional</a>[<a
 class="autorefs autorefs-external" 
href="https://docs.python.org/3/library/stdtypes.html#str";>str</a>]</code>, 
default:
+                  <code>None</code>
+)
+          –
+          <div class="doc-md-description">
+            <p>An optional name for the UDF. If not given, it will be derived 
from
+the name of the provided function.</p>
+          </div>
+        </li>
+    </ul>
+        <p>Examples:</p>
+<div class="codehilite"><pre><span></span><code><span 
class="o">&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="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span 
class="w"> </span><span class="nn">sedonadb</span><span class="w"> </span><span 
class="kn">import</span> <span class="n">udf</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span> <span 
class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span 
class="n">db</span><span class="o">.</span><span class="n">connect</span><span 
class="p">()</span>
+
+<span class="n">The</span> <span class="n">simplest</span> <span 
class="n">scalar</span> <span class="n">UDF</span> <span class="n">only</span> 
<span class="n">specifies</span> <span class="k">return</span> <span 
class="n">types</span><span class="o">.</span> <span class="n">This</span> 
<span class="n">implies</span> <span class="n">that</span>
+<span class="n">the</span> <span class="n">function</span> <span 
class="n">can</span> <span class="n">handle</span> <span 
class="nb">input</span> <span class="n">of</span> <span class="nb">any</span> 
<span class="nb">type</span><span class="o">.</span>
+
+<span class="o">&gt;&gt;&gt;</span> <span class="nd">@udf</span><span 
class="o">.</span><span class="n">arrow_udf</span><span class="p">(</span><span 
class="n">pa</span><span class="o">.</span><span class="n">string</span><span 
class="p">())</span>
+<span class="o">...</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">some_udf</span><span class="p">(</span><span 
class="n">arg0</span><span class="p">,</span> <span class="n">arg1</span><span 
class="p">):</span>
+<span class="o">...</span>     <span class="n">arg0</span><span 
class="p">,</span> <span class="n">arg1</span> <span class="o">=</span> <span 
class="p">(</span>
+<span class="o">...</span>         <span class="n">pa</span><span 
class="o">.</span><span class="n">array</span><span class="p">(</span><span 
class="n">arg0</span><span class="o">.</span><span 
class="n">to_array</span><span class="p">())</span><span 
class="o">.</span><span class="n">to_pylist</span><span class="p">(),</span>
+<span class="o">...</span>         <span class="n">pa</span><span 
class="o">.</span><span class="n">array</span><span class="p">(</span><span 
class="n">arg1</span><span class="o">.</span><span 
class="n">to_array</span><span class="p">())</span><span 
class="o">.</span><span class="n">to_pylist</span><span class="p">(),</span>
+<span class="o">...</span>     <span class="p">)</span>
+<span class="o">...</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="o">...</span>         <span class="p">(</span><span 
class="sa">f</span><span class="s2">"</span><span class="si">{</span><span 
class="n">item0</span><span class="si">}</span><span class="s2"> / </span><span 
class="si">{</span><span class="n">item1</span><span class="si">}</span><span 
class="s2">"</span> <span class="k">for</span> <span 
class="n">item0</span><span class="p">,</span> <span class="n">item1</span> 
<span class="ow">in</span> <span class="nb">zip</span><span class [...]
+<span class="o">...</span>         <span class="n">pa</span><span 
class="o">.</span><span class="n">string</span><span class="p">(),</span>
+<span class="o">...</span>     <span class="p">)</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">register_udf</span><span 
class="p">(</span><span class="n">some_udf</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT some_udf(123, 'abc') as col"</span><span 
class="p">)</span><span class="o">.</span><span class="n">show</span><span 
class="p">()</span>
+<span class="err">┌───────────┐</span>
+<span class="err">│</span>    <span class="n">col</span>    <span 
class="err">│</span>
+<span class="err">│</span>    <span class="n">utf8</span>   <span 
class="err">│</span>
+<span class="err">╞═══════════╡</span>
+<span class="err">│</span> <span class="mi">123</span> <span 
class="o">/</span> <span class="n">abc</span> <span class="err">│</span>
+<span class="err">└───────────┘</span>
+
+<span class="n">Use</span> <span class="n">the</span> <span 
class="err">`</span><span class="n">TypeMatcher</span><span 
class="err">`</span> <span class="n">constants</span> <span 
class="n">where</span> <span class="n">possible</span> <span 
class="n">to</span> <span class="n">specify</span> <span 
class="nb">input</span><span class="o">.</span>
+<span class="n">This</span> <span class="n">ensures</span> <span 
class="n">that</span> <span class="n">the</span> <span 
class="n">function</span> <span class="n">can</span> <span 
class="n">handle</span> <span class="n">the</span> <span class="n">usual</span> 
<span class="nb">range</span> <span class="n">of</span> <span 
class="nb">input</span>
+<span class="n">types</span> <span class="n">that</span> <span 
class="n">might</span> <span class="n">exist</span> <span class="k">for</span> 
<span class="n">a</span> <span class="n">given</span> <span 
class="nb">input</span><span class="o">.</span>
+
+<span class="o">&gt;&gt;&gt;</span> <span class="nd">@udf</span><span 
class="o">.</span><span class="n">arrow_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="p">[</span><span class="n">udf</span><span 
class="o">.</span><span class="n">STRING</span><span class="p">])</span>
+<span class="o">...</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">char_count</span><span class="p">(</span><span 
class="n">arg0</span><span class="p">):</span>
+<span class="o">...</span>     <span class="n">arg0</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">array</span><span class="p">(</span><span class="n">arg0</span><span 
class="o">.</span><span class="n">to_array</span><span class="p">())</span>
+<span class="o">...</span>
+<span class="o">...</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="o">...</span>         <span class="p">(</span><span 
class="nb">len</span><span class="p">(</span><span class="n">item</span><span 
class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span 
class="ow">in</span> <span class="n">arg0</span><span class="o">.</span><span 
class="n">to_pylist</span><span class="p">()),</span>
+<span class="o">...</span>         <span class="n">pa</span><span 
class="o">.</span><span class="n">int64</span><span class="p">()</span>
+<span class="o">...</span>     <span class="p">)</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">register_udf</span><span 
class="p">(</span><span class="n">char_count</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT char_count('abcde') as col"</span><span 
class="p">)</span><span class="o">.</span><span class="n">show</span><span 
class="p">()</span>
+<span class="err">┌───────┐</span>
+<span class="err">│</span>  <span class="n">col</span>  <span 
class="err">│</span>
+<span class="err">│</span> <span class="n">int64</span> <span 
class="err">│</span>
+<span class="err">╞═══════╡</span>
+<span class="err">│</span>     <span class="mi">5</span> <span 
class="err">│</span>
+<span class="err">└───────┘</span>
+
+<span class="n">In</span> <span class="n">this</span> <span 
class="n">case</span><span class="p">,</span> <span class="n">the</span> <span 
class="nb">type</span> <span class="n">matcher</span> <span 
class="n">ensures</span> <span class="n">we</span> <span class="n">can</span> 
<span class="n">also</span> <span class="n">use</span> <span 
class="n">the</span> <span class="n">function</span>
+<span class="k">for</span> <span class="n">string</span> <span 
class="n">view</span> <span class="nb">input</span> <span 
class="n">which</span> <span class="ow">is</span> <span class="n">the</span> 
<span class="n">usual</span> <span class="nb">type</span> <span 
class="n">SedonaDB</span> <span class="n">emits</span> <span 
class="n">when</span>
+<span class="n">reading</span> <span class="n">Parquet</span> <span 
class="n">files</span><span class="o">.</span>
+
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT char_count(arrow_cast('abcde', 'Utf8View')) as 
col"</span><span class="p">)</span><span class="o">.</span><span 
class="n">show</span><span class="p">()</span>
+<span class="err">┌───────┐</span>
+<span class="err">│</span>  <span class="n">col</span>  <span 
class="err">│</span>
+<span class="err">│</span> <span class="n">int64</span> <span 
class="err">│</span>
+<span class="err">╞═══════╡</span>
+<span class="err">│</span>     <span class="mi">5</span> <span 
class="err">│</span>
+<span class="err">└───────┘</span>
+
+<span class="n">Geometry</span> <span class="n">UDFs</span> <span 
class="n">are</span> <span class="n">best</span> <span class="n">written</span> 
<span class="n">using</span> <span class="n">Shapely</span> <span 
class="n">because</span> <span class="n">pyproj</span> <span 
class="p">(</span><span class="n">including</span> <span class="n">its</span> 
<span class="n">use</span>
+<span class="ow">in</span> <span class="n">GeoPandas</span><span 
class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span 
class="n">thread</span> <span class="n">safe</span> <span class="ow">and</span> 
<span class="n">can</span> <span class="n">crash</span> <span 
class="n">when</span> <span class="n">attempting</span> <span 
class="n">to</span> <span class="n">look</span> <span class="n">up</span>
+<span class="n">CRSes</span> <span class="n">when</span> <span 
class="n">importing</span> <span class="n">an</span> <span 
class="n">Arrow</span> <span class="n">array</span><span class="o">.</span> 
<span class="n">The</span> <span class="n">UDF</span> <span 
class="n">framework</span> <span class="n">supports</span> <span 
class="n">returning</span>
+<span class="n">geometry</span> <span class="n">storage</span> <span 
class="n">to</span> <span class="n">make</span> <span class="n">this</span> 
<span class="n">possible</span><span class="o">.</span> <span 
class="n">Coordinate</span> <span class="n">reference</span> <span 
class="n">system</span> <span class="n">metadata</span>
+<span class="ow">is</span> <span class="n">propagated</span> <span 
class="n">automatically</span> <span class="kn">from</span><span class="w"> 
</span><span class="nn">the</span> <span class="nb">input</span><span 
class="o">.</span>
+
+<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span><span 
class="w"> </span><span class="nn">shapely</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span><span 
class="w"> </span><span class="nn">geoarrow.pyarrow</span><span class="w"> 
</span><span class="k">as</span><span class="w"> </span><span 
class="nn">ga</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nd">@udf</span><span 
class="o">.</span><span class="n">arrow_udf</span><span class="p">(</span><span 
class="n">ga</span><span class="o">.</span><span class="n">wkb</span><span 
class="p">(),</span> <span class="p">[</span><span class="n">udf</span><span 
class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span> <span 
class="n">udf</span><span class="o">.</span><span class="n">NUMERIC</span><span 
class="p">])</span>
+<span class="o">...</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">shapely_udf</span><span class="p">(</span><span 
class="n">geom</span><span class="p">,</span> <span 
class="n">distance</span><span class="p">):</span>
+<span class="o">...</span>     <span class="n">geom_wkb</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">array</span><span class="p">(</span><span class="n">geom</span><span 
class="o">.</span><span class="n">storage</span><span class="o">.</span><span 
class="n">to_array</span><span class="p">())</span>
+<span class="o">...</span>     <span class="n">distance</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">array</span><span class="p">(</span><span 
class="n">distance</span><span class="o">.</span><span 
class="n">to_array</span><span class="p">())</span>
+<span class="o">...</span>     <span class="n">geom</span> <span 
class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span 
class="n">from_wkb</span><span class="p">(</span><span 
class="n">geom_wkb</span><span class="p">)</span>
+<span class="o">...</span>     <span class="n">result_shapely</span> <span 
class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span 
class="n">buffer</span><span class="p">(</span><span class="n">geom</span><span 
class="p">,</span> <span class="n">distance</span><span class="p">)</span>
+<span class="o">...</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="n">shapely</span><span class="o">.</span><span 
class="n">to_wkb</span><span class="p">(</span><span 
class="n">result_shapely</span><span class="p">))</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">register_udf</span><span 
class="p">(</span><span class="n">shapely_udf</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT ST_SRID(shapely_udf(ST_Point(0, 0), 2.0)) as 
col"</span><span class="p">)</span><span class="o">.</span><span 
class="n">show</span><span class="p">()</span>
+<span class="err">┌────────┐</span>
+<span class="err">│</span>   <span class="n">col</span>  <span 
class="err">│</span>
+<span class="err">│</span> <span class="n">uint32</span> <span 
class="err">│</span>
+<span class="err">╞════════╡</span>
+<span class="err">│</span>      <span class="mi">0</span> <span 
class="err">│</span>
+<span class="err">└────────┘</span>
+
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT ST_SRID(shapely_udf(ST_SetSRID(ST_Point(0, 0), 3857), 2.0)) 
as col"</span><span class="p">)</span><span class="o">.</span><span 
class="n">show</span><span class="p">()</span>
+<span class="err">┌────────┐</span>
+<span class="err">│</span>   <span class="n">col</span>  <span 
class="err">│</span>
+<span class="err">│</span> <span class="n">uint32</span> <span 
class="err">│</span>
+<span class="err">╞════════╡</span>
+<span class="err">│</span>   <span class="mi">3857</span> <span 
class="err">│</span>
+<span class="err">└────────┘</span>
+
+<span class="n">Annotated</span> <span class="n">functions</span> <span 
class="n">may</span> <span class="n">also</span> <span class="n">declare</span> 
<span class="n">keyword</span> <span class="n">arguments</span> <span 
class="err">`</span><span class="n">return_type</span><span 
class="err">`</span> <span class="ow">and</span><span class="o">/</span><span 
class="ow">or</span> <span class="err">`</span><span 
class="n">num_rows</span><span class="err">`</span><span class="p">,</span>
+<span class="n">which</span> <span class="n">will</span> <span 
class="n">be</span> <span class="n">passed</span> <span class="n">the</span> 
<span class="n">appropriate</span> <span class="n">value</span> <span 
class="n">by</span> <span class="n">the</span> <span class="n">UDF</span> <span 
class="n">framework</span><span class="o">.</span> <span class="n">This</span> 
<span class="n">facilitates</span> <span class="n">writing</span>
+<span class="n">generic</span> <span class="n">UDFs</span> <span 
class="ow">and</span><span class="o">/</span><span class="ow">or</span> <span 
class="n">UDFs</span> <span class="k">with</span> <span class="n">no</span> 
<span class="n">arguments</span><span class="o">.</span>
+
+<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span><span 
class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span 
class="k">as</span><span class="w"> </span><span class="nn">np</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">random_impl</span><span class="p">(</span><span 
class="n">return_type</span><span class="p">,</span> <span 
class="n">num_rows</span><span class="p">):</span>
+<span class="o">...</span>     <span class="n">pa_type</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">field</span><span class="p">(</span><span 
class="n">return_type</span><span class="p">)</span><span 
class="o">.</span><span class="n">type</span>
+<span class="o">...</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="n">np</span><span class="o">.</span><span 
class="n">random</span><span class="o">.</span><span 
class="n">random</span><span class="p">(</span><span 
class="n">num_rows</span><span class="p">),</span> <span 
class="n">pa_type</span><span class="p">)</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nd">@udf</span><span 
class="o">.</span><span class="n">arrow_udf</span><span class="p">(</span><span 
class="n">pa</span><span class="o">.</span><span class="n">float32</span><span 
class="p">(),</span> <span class="p">[])</span>
+<span class="o">...</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">random_f32</span><span class="p">(</span><span 
class="o">*</span><span class="p">,</span> <span 
class="n">return_type</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span> <span 
class="n">num_rows</span><span class="o">=</span><span 
class="kc">None</span><span class="p">):</span>
+<span class="o">...</span>     <span class="k">return</span> <span 
class="n">random_impl</span><span class="p">(</span><span 
class="n">return_type</span><span class="p">,</span> <span 
class="n">num_rows</span><span class="p">)</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nd">@udf</span><span 
class="o">.</span><span class="n">arrow_udf</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="o">...</span> <span class="k">def</span><span class="w"> 
</span><span class="nf">random_f64</span><span class="p">(</span><span 
class="o">*</span><span class="p">,</span> <span 
class="n">return_type</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span> <span 
class="n">num_rows</span><span class="o">=</span><span 
class="kc">None</span><span class="p">):</span>
+<span class="o">...</span>     <span class="k">return</span> <span 
class="n">random_impl</span><span class="p">(</span><span 
class="n">return_type</span><span class="p">,</span> <span 
class="n">num_rows</span><span class="p">)</span>
+<span class="o">...</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">np</span><span 
class="o">.</span><span class="n">random</span><span class="o">.</span><span 
class="n">seed</span><span class="p">(</span><span class="mi">487</span><span 
class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">register_udf</span><span 
class="p">(</span><span class="n">random_f32</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">register_udf</span><span 
class="p">(</span><span class="n">random_f64</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="n">sd</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">"SELECT random_f32() AS f32, random_f64() as f64;"</span><span 
class="p">)</span><span class="o">.</span><span class="n">show</span><span 
class="p">()</span>
+<span class="err">┌────────────┬─────────────────────┐</span>
+<span class="err">│</span>     <span class="n">f32</span>    <span 
class="err">┆</span>         <span class="n">f64</span>         <span 
class="err">│</span>
+<span class="err">│</span>   <span class="n">float32</span>  <span 
class="err">┆</span>       <span class="n">float64</span>       <span 
class="err">│</span>
+<span class="err">╞════════════╪═════════════════════╡</span>
+<span class="err">│</span> <span class="mf">0.35385555</span> <span 
class="err">┆</span> <span class="mf">0.24793247139474195</span> <span 
class="err">│</span>
+<span class="err">└────────────┴─────────────────────┘</span>
+</code></pre></div>
+
+
+    </div>
+
+</div>
+
+
+
+  </div>
+
+    </div>
+
+</div>
+
 
 
 
@@ -3796,7 +4539,7 @@ DBAPI is experimental.</p>
     <span class="md-icon" title="Last update">
       <svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 24 24"><path d="M21 
13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 
0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 
2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 
9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 
7.5 7.1 7.9l-.1.2z"></path></svg>
     </span>
-    <span class="git-revision-date-localized-plugin 
git-revision-date-localized-plugin-datetime" title="September 17, 2025 16:24:18 
UTC">September 17, 2025 16:24:18</span>
+    <span class="git-revision-date-localized-plugin 
git-revision-date-localized-plugin-datetime" title="October 25, 2025 01:34:00 
UTC">October 25, 2025 01:34:00</span>
   </span>
 
     
diff --git a/latest-snapshot/search/search_index.json 
b/latest-snapshot/search/search_index.json
index 850c6fc..3008697 100644
--- a/latest-snapshot/search/search_index.json
+++ b/latest-snapshot/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introducing
 SedonaDB","text":"<p>SedonaDB is an open-source single-node analytical 
database engine with geospatial as a first-class citizen. It aims to deliver 
the fastest spatial analytics query speed and the most comprehensive function 
coverage available.</p> <p>SedonaDB is perfect for processing smaller to medium 
datasets on local machines or cloud instances. For distributed [...]
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introducing
 SedonaDB","text":"<p>SedonaDB is an open-source single-node analytical 
database engine with geospatial as a first-class citizen. It aims to deliver 
the fastest spatial analytics query speed and the most comprehensive function 
coverage available.</p> <p>SedonaDB is perfect for processing smaller to medium 
datasets on local machines or cloud instances. For distributed [...]
\ No newline at end of file
diff --git a/latest-snapshot/sitemap.xml b/latest-snapshot/sitemap.xml
index aa30dd3..488de04 100644
--- a/latest-snapshot/sitemap.xml
+++ b/latest-snapshot/sitemap.xml
@@ -2,50 +2,50 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";>
     <url>
          <loc>https://sedona.apache.org/sedonadb/latest/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/contributors-guide/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          <loc>https://sedona.apache.org/sedonadb/latest/crs-examples/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/geopandas-interop/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/overture-examples/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/programming-guide/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/quickstart-python/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/working-with-parquet-files/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/working-with-sql-sedonadb/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          <loc>https://sedona.apache.org/sedonadb/latest/reference/python/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          
<loc>https://sedona.apache.org/sedonadb/latest/reference/sql-joins/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
     <url>
          <loc>https://sedona.apache.org/sedonadb/latest/reference/sql/</loc>
-         <lastmod>2025-10-24</lastmod>
+         <lastmod>2025-10-25</lastmod>
     </url>
 </urlset>
\ No newline at end of file
diff --git a/latest-snapshot/sitemap.xml.gz b/latest-snapshot/sitemap.xml.gz
index 39c0cac..927e3c5 100644
Binary files a/latest-snapshot/sitemap.xml.gz and 
b/latest-snapshot/sitemap.xml.gz differ

Reply via email to