blob: 808092cd9a07cb8a6dae255f737985b5e4b581b8 [file] [log] [blame]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://py.iceberg.apache.org/reference/pyiceberg/expressions/visitors/">
<link rel="prev" href="../parser/">
<link rel="next" href="../../io/">
<link rel="icon" href="../../../../assets/images/iceberg-logo-icon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.21">
<title>visitors - PyIceberg</title>
<link rel="stylesheet" href="../../../../assets/stylesheets/main.2a3383ac.min.css">
<link rel="stylesheet" href="../../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Lato";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(["setDoNotTrack", true]);
_paq.push(["disableCookies"]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '82']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo -->
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#pyiceberg.expressions.visitors" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../../.." title="PyIceberg" class="md-header__button md-logo" aria-label="PyIceberg" data-md-component="logo">
<img src="../../../../assets/images/iceberg-logo-icon.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
PyIceberg
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
visitors
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/apache/iceberg-python" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
apache/iceberg-python
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../../.." class="md-tabs__link">
Getting started
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../configuration/" class="md-tabs__link">
Configuration
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../cli/" class="md-tabs__link">
CLI
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../api/" class="md-tabs__link">
API
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../contributing/" class="md-tabs__link">
Contributing
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../community/" class="md-tabs__link">
Community
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../verify-release/" class="md-tabs__link">
Releases
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../" class="md-tabs__link">
Code Reference
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../../.." title="PyIceberg" class="md-nav__button md-logo" aria-label="PyIceberg" data-md-component="logo">
<img src="../../../../assets/images/iceberg-logo-icon.png" alt="logo">
</a>
PyIceberg
</label>
<div class="md-nav__source">
<a href="https://github.com/apache/iceberg-python" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
apache/iceberg-python
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../.." class="md-nav__link">
<span class="md-ellipsis">
Getting started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../cli/" class="md-nav__link">
<span class="md-ellipsis">
CLI
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<div class="md-nav__link md-nav__container">
<a href="../../../../api/" class="md-nav__link ">
<span class="md-ellipsis">
API
</span>
</a>
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
API
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../../row-filter-syntax/" class="md-nav__link">
<span class="md-ellipsis">
Row Filter Syntax
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../expression-dsl/" class="md-nav__link">
<span class="md-ellipsis">
Expression DSL
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../contributing/" class="md-nav__link">
<span class="md-ellipsis">
Contributing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../community/" class="md-nav__link">
<span class="md-ellipsis">
Community
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Releases
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../../verify-release/" class="md-nav__link">
<span class="md-ellipsis">
Verify a release
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../how-to-release/" class="md-nav__link">
<span class="md-ellipsis">
How to release
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://github.com/apache/iceberg-python/releases" class="md-nav__link">
<span class="md-ellipsis">
Release Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../nightly-build/" class="md-nav__link">
<span class="md-ellipsis">
Nightly Build
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked>
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="">
<span class="md-ellipsis">
Code Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Code Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1" checked>
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
pyiceberg
</span>
</a>
<label class="md-nav__link " for="__nav_8_1" id="__nav_8_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_1_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8_1">
<span class="md-nav__icon md-icon"></span>
pyiceberg
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_1" >
<div class="md-nav__link md-nav__container">
<a href="../../avro/" class="md-nav__link ">
<span class="md-ellipsis">
avro
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_1" id="__nav_8_1_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_1">
<span class="md-nav__icon md-icon"></span>
avro
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_1_1" >
<div class="md-nav__link md-nav__container">
<a href="../../avro/codecs/" class="md-nav__link ">
<span class="md-ellipsis">
codecs
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_1_1" id="__nav_8_1_1_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_8_1_1_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_1_1">
<span class="md-nav__icon md-icon"></span>
codecs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../avro/codecs/bzip2/" class="md-nav__link">
<span class="md-ellipsis">
bzip2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/codec/" class="md-nav__link">
<span class="md-ellipsis">
codec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/deflate/" class="md-nav__link">
<span class="md-ellipsis">
deflate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/snappy_codec/" class="md-nav__link">
<span class="md-ellipsis">
snappy_codec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/zstandard_codec/" class="md-nav__link">
<span class="md-ellipsis">
zstandard_codec
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../avro/decoder/" class="md-nav__link">
<span class="md-ellipsis">
decoder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/encoder/" class="md-nav__link">
<span class="md-ellipsis">
encoder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/file/" class="md-nav__link">
<span class="md-ellipsis">
file
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/reader/" class="md-nav__link">
<span class="md-ellipsis">
reader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/resolver/" class="md-nav__link">
<span class="md-ellipsis">
resolver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/writer/" class="md-nav__link">
<span class="md-ellipsis">
writer
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_2" >
<div class="md-nav__link md-nav__container">
<a href="../../catalog/" class="md-nav__link ">
<span class="md-ellipsis">
catalog
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_2" id="__nav_8_1_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_2">
<span class="md-nav__icon md-icon"></span>
catalog
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../catalog/bigquery_metastore/" class="md-nav__link">
<span class="md-ellipsis">
bigquery_metastore
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/dynamodb/" class="md-nav__link">
<span class="md-ellipsis">
dynamodb
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/glue/" class="md-nav__link">
<span class="md-ellipsis">
glue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/hive/" class="md-nav__link">
<span class="md-ellipsis">
hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/memory/" class="md-nav__link">
<span class="md-ellipsis">
memory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/noop/" class="md-nav__link">
<span class="md-ellipsis">
noop
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_2_7" >
<div class="md-nav__link md-nav__container">
<a href="../../catalog/rest/" class="md-nav__link ">
<span class="md-ellipsis">
rest
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_2_7" id="__nav_8_1_2_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_8_1_2_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_2_7">
<span class="md-nav__icon md-icon"></span>
rest
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../catalog/rest/auth/" class="md-nav__link">
<span class="md-ellipsis">
auth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/rest/response/" class="md-nav__link">
<span class="md-ellipsis">
response
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../catalog/sql/" class="md-nav__link">
<span class="md-ellipsis">
sql
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_3" >
<div class="md-nav__link md-nav__container">
<a href="../../cli/" class="md-nav__link ">
<span class="md-ellipsis">
cli
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_3" id="__nav_8_1_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_3">
<span class="md-nav__icon md-icon"></span>
cli
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../cli/console/" class="md-nav__link">
<span class="md-ellipsis">
console
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../cli/output/" class="md-nav__link">
<span class="md-ellipsis">
output
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../conversions/" class="md-nav__link">
<span class="md-ellipsis">
conversions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../exceptions/" class="md-nav__link">
<span class="md-ellipsis">
exceptions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_6" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
expressions
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_6" id="__nav_8_1_6_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8_1_6">
<span class="md-nav__icon md-icon"></span>
expressions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../literals/" class="md-nav__link">
<span class="md-ellipsis">
literals
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../parser/" class="md-nav__link">
<span class="md-ellipsis">
parser
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
visitors
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
visitors
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors" class="md-nav__link">
<span class="md-ellipsis">
visitors
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BindVisitor" class="md-nav__link">
<span class="md-ellipsis">
BindVisitor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor" class="md-nav__link">
<span class="md-ellipsis">
BooleanExpressionVisitor
</span>
</a>
<nav class="md-nav" aria-label="BooleanExpressionVisitor">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_and" class="md-nav__link">
<span class="md-ellipsis">
visit_and
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_bound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_bound_predicate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_false" class="md-nav__link">
<span class="md-ellipsis">
visit_false
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_not" class="md-nav__link">
<span class="md-ellipsis">
visit_not
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_or" class="md-nav__link">
<span class="md-ellipsis">
visit_or
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_true" class="md-nav__link">
<span class="md-ellipsis">
visit_true
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_unbound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_unbound_predicate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor" class="md-nav__link">
<span class="md-ellipsis">
BoundBooleanExpressionVisitor
</span>
</a>
<nav class="md-nav" aria-label="BoundBooleanExpressionVisitor">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_and" class="md-nav__link">
<span class="md-ellipsis">
visit_and
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_bound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_bound_predicate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_false" class="md-nav__link">
<span class="md-ellipsis">
visit_false
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than" class="md-nav__link">
<span class="md-ellipsis">
visit_greater_than
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than_or_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_greater_than_or_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_in" class="md-nav__link">
<span class="md-ellipsis">
visit_in
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_nan" class="md-nav__link">
<span class="md-ellipsis">
visit_is_nan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_null" class="md-nav__link">
<span class="md-ellipsis">
visit_is_null
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than" class="md-nav__link">
<span class="md-ellipsis">
visit_less_than
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than_or_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_less_than_or_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not" class="md-nav__link">
<span class="md-ellipsis">
visit_not
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_not_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_in" class="md-nav__link">
<span class="md-ellipsis">
visit_not_in
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_nan" class="md-nav__link">
<span class="md-ellipsis">
visit_not_nan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_null" class="md-nav__link">
<span class="md-ellipsis">
visit_not_null
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_starts_with" class="md-nav__link">
<span class="md-ellipsis">
visit_not_starts_with
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_or" class="md-nav__link">
<span class="md-ellipsis">
visit_or
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_starts_with" class="md-nav__link">
<span class="md-ellipsis">
visit_starts_with
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_true" class="md-nav__link">
<span class="md-ellipsis">
visit_true
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_unbound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_unbound_predicate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.ResidualVisitor" class="md-nav__link">
<span class="md-ellipsis">
ResidualVisitor
</span>
</a>
<nav class="md-nav" aria-label="ResidualVisitor">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.ResidualVisitor.visit_bound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_bound_predicate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.bind" class="md-nav__link">
<span class="md-ellipsis">
bind
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.expression_to_plain_format" class="md-nav__link">
<span class="md-ellipsis">
expression_to_plain_format
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.visit" class="md-nav__link">
<span class="md-ellipsis">
visit
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_7" >
<div class="md-nav__link md-nav__container">
<a href="../../io/" class="md-nav__link ">
<span class="md-ellipsis">
io
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_7" id="__nav_8_1_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_7">
<span class="md-nav__icon md-icon"></span>
io
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../io/fsspec/" class="md-nav__link">
<span class="md-ellipsis">
fsspec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../io/pyarrow/" class="md-nav__link">
<span class="md-ellipsis">
pyarrow
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../manifest/" class="md-nav__link">
<span class="md-ellipsis">
manifest
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../partitioning/" class="md-nav__link">
<span class="md-ellipsis">
partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../schema/" class="md-nav__link">
<span class="md-ellipsis">
schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../serializers/" class="md-nav__link">
<span class="md-ellipsis">
serializers
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_12" >
<div class="md-nav__link md-nav__container">
<a href="../../table/" class="md-nav__link ">
<span class="md-ellipsis">
table
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_12" id="__nav_8_1_12_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_12">
<span class="md-nav__icon md-icon"></span>
table
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../table/inspect/" class="md-nav__link">
<span class="md-ellipsis">
inspect
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/locations/" class="md-nav__link">
<span class="md-ellipsis">
locations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/metadata/" class="md-nav__link">
<span class="md-ellipsis">
metadata
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/name_mapping/" class="md-nav__link">
<span class="md-ellipsis">
name_mapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/puffin/" class="md-nav__link">
<span class="md-ellipsis">
puffin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/refs/" class="md-nav__link">
<span class="md-ellipsis">
refs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/snapshots/" class="md-nav__link">
<span class="md-ellipsis">
snapshots
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/sorting/" class="md-nav__link">
<span class="md-ellipsis">
sorting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/statistics/" class="md-nav__link">
<span class="md-ellipsis">
statistics
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_12_11" >
<div class="md-nav__link md-nav__container">
<a href="../../table/update/" class="md-nav__link ">
<span class="md-ellipsis">
update
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_12_11" id="__nav_8_1_12_11_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_8_1_12_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_12_11">
<span class="md-nav__icon md-icon"></span>
update
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../table/update/schema/" class="md-nav__link">
<span class="md-ellipsis">
schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/update/snapshot/" class="md-nav__link">
<span class="md-ellipsis">
snapshot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/update/sorting/" class="md-nav__link">
<span class="md-ellipsis">
sorting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/update/spec/" class="md-nav__link">
<span class="md-ellipsis">
spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/update/statistics/" class="md-nav__link">
<span class="md-ellipsis">
statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../table/update/validate/" class="md-nav__link">
<span class="md-ellipsis">
validate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../table/upsert_util/" class="md-nav__link">
<span class="md-ellipsis">
upsert_util
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../transforms/" class="md-nav__link">
<span class="md-ellipsis">
transforms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../typedef/" class="md-nav__link">
<span class="md-ellipsis">
typedef
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../types/" class="md-nav__link">
<span class="md-ellipsis">
types
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_16" >
<div class="md-nav__link md-nav__container">
<a href="../../utils/" class="md-nav__link ">
<span class="md-ellipsis">
utils
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_16" id="__nav_8_1_16_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_16">
<span class="md-nav__icon md-icon"></span>
utils
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../utils/bin_packing/" class="md-nav__link">
<span class="md-ellipsis">
bin_packing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/concurrent/" class="md-nav__link">
<span class="md-ellipsis">
concurrent
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/config/" class="md-nav__link">
<span class="md-ellipsis">
config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/datetime/" class="md-nav__link">
<span class="md-ellipsis">
datetime
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/decimal/" class="md-nav__link">
<span class="md-ellipsis">
decimal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/deprecated/" class="md-nav__link">
<span class="md-ellipsis">
deprecated
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/lazydict/" class="md-nav__link">
<span class="md-ellipsis">
lazydict
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/parsing/" class="md-nav__link">
<span class="md-ellipsis">
parsing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/properties/" class="md-nav__link">
<span class="md-ellipsis">
properties
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/schema_conversion/" class="md-nav__link">
<span class="md-ellipsis">
schema_conversion
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/singleton/" class="md-nav__link">
<span class="md-ellipsis">
singleton
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/truncate/" class="md-nav__link">
<span class="md-ellipsis">
truncate
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors" class="md-nav__link">
<span class="md-ellipsis">
visitors
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BindVisitor" class="md-nav__link">
<span class="md-ellipsis">
BindVisitor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor" class="md-nav__link">
<span class="md-ellipsis">
BooleanExpressionVisitor
</span>
</a>
<nav class="md-nav" aria-label="BooleanExpressionVisitor">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_and" class="md-nav__link">
<span class="md-ellipsis">
visit_and
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_bound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_bound_predicate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_false" class="md-nav__link">
<span class="md-ellipsis">
visit_false
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_not" class="md-nav__link">
<span class="md-ellipsis">
visit_not
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_or" class="md-nav__link">
<span class="md-ellipsis">
visit_or
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_true" class="md-nav__link">
<span class="md-ellipsis">
visit_true
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_unbound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_unbound_predicate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor" class="md-nav__link">
<span class="md-ellipsis">
BoundBooleanExpressionVisitor
</span>
</a>
<nav class="md-nav" aria-label="BoundBooleanExpressionVisitor">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_and" class="md-nav__link">
<span class="md-ellipsis">
visit_and
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_bound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_bound_predicate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_false" class="md-nav__link">
<span class="md-ellipsis">
visit_false
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than" class="md-nav__link">
<span class="md-ellipsis">
visit_greater_than
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than_or_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_greater_than_or_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_in" class="md-nav__link">
<span class="md-ellipsis">
visit_in
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_nan" class="md-nav__link">
<span class="md-ellipsis">
visit_is_nan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_null" class="md-nav__link">
<span class="md-ellipsis">
visit_is_null
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than" class="md-nav__link">
<span class="md-ellipsis">
visit_less_than
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than_or_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_less_than_or_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not" class="md-nav__link">
<span class="md-ellipsis">
visit_not
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_equal" class="md-nav__link">
<span class="md-ellipsis">
visit_not_equal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_in" class="md-nav__link">
<span class="md-ellipsis">
visit_not_in
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_nan" class="md-nav__link">
<span class="md-ellipsis">
visit_not_nan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_null" class="md-nav__link">
<span class="md-ellipsis">
visit_not_null
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_starts_with" class="md-nav__link">
<span class="md-ellipsis">
visit_not_starts_with
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_or" class="md-nav__link">
<span class="md-ellipsis">
visit_or
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_starts_with" class="md-nav__link">
<span class="md-ellipsis">
visit_starts_with
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_true" class="md-nav__link">
<span class="md-ellipsis">
visit_true
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_unbound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_unbound_predicate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.ResidualVisitor" class="md-nav__link">
<span class="md-ellipsis">
ResidualVisitor
</span>
</a>
<nav class="md-nav" aria-label="ResidualVisitor">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.ResidualVisitor.visit_bound_predicate" class="md-nav__link">
<span class="md-ellipsis">
visit_bound_predicate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.bind" class="md-nav__link">
<span class="md-ellipsis">
bind
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.expression_to_plain_format" class="md-nav__link">
<span class="md-ellipsis">
expression_to_plain_format
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.expressions.visitors.visit" class="md-nav__link">
<span class="md-ellipsis">
visit
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>visitors</h1>
<div class="doc doc-object doc-module">
<a id="pyiceberg.expressions.visitors"></a>
<div class="doc doc-contents first">
<div class="doc doc-children">
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.expressions.visitors.BindVisitor" class="doc doc-heading">
<code>BindVisitor</code>
<a href="#pyiceberg.expressions.visitors.BindVisitor" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="BooleanExpressionVisitor (pyiceberg.expressions.visitors.BooleanExpressionVisitor)" href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor">BooleanExpressionVisitor</a>[<a class="autorefs autorefs-internal" title="BooleanExpression (pyiceberg.expressions.BooleanExpression)" href="../#pyiceberg.expressions.BooleanExpression">BooleanExpression</a>]</code></p>
<p>Rewrites a boolean expression by replacing unbound references with references to fields in a struct schema.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>schema</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="Schema (pyiceberg.schema.Schema)" href="../../schema/#pyiceberg.schema.Schema">Schema</a></code>
</td>
<td>
<div class="doc-md-description">
<p>A schema to use when binding the expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>case_sensitive</code>
</td>
<td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Whether to consider case when binding a reference to a field in a schema, defaults to True.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="TypeError">TypeError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>In the case a predicate is already bound.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-217">217</a></span>
<span class="normal"><a href="#__codelineno-0-218">218</a></span>
<span class="normal"><a href="#__codelineno-0-219">219</a></span>
<span class="normal"><a href="#__codelineno-0-220">220</a></span>
<span class="normal"><a href="#__codelineno-0-221">221</a></span>
<span class="normal"><a href="#__codelineno-0-222">222</a></span>
<span class="normal"><a href="#__codelineno-0-223">223</a></span>
<span class="normal"><a href="#__codelineno-0-224">224</a></span>
<span class="normal"><a href="#__codelineno-0-225">225</a></span>
<span class="normal"><a href="#__codelineno-0-226">226</a></span>
<span class="normal"><a href="#__codelineno-0-227">227</a></span>
<span class="normal"><a href="#__codelineno-0-228">228</a></span>
<span class="normal"><a href="#__codelineno-0-229">229</a></span>
<span class="normal"><a href="#__codelineno-0-230">230</a></span>
<span class="normal"><a href="#__codelineno-0-231">231</a></span>
<span class="normal"><a href="#__codelineno-0-232">232</a></span>
<span class="normal"><a href="#__codelineno-0-233">233</a></span>
<span class="normal"><a href="#__codelineno-0-234">234</a></span>
<span class="normal"><a href="#__codelineno-0-235">235</a></span>
<span class="normal"><a href="#__codelineno-0-236">236</a></span>
<span class="normal"><a href="#__codelineno-0-237">237</a></span>
<span class="normal"><a href="#__codelineno-0-238">238</a></span>
<span class="normal"><a href="#__codelineno-0-239">239</a></span>
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
<span class="normal"><a href="#__codelineno-0-241">241</a></span>
<span class="normal"><a href="#__codelineno-0-242">242</a></span>
<span class="normal"><a href="#__codelineno-0-243">243</a></span>
<span class="normal"><a href="#__codelineno-0-244">244</a></span>
<span class="normal"><a href="#__codelineno-0-245">245</a></span>
<span class="normal"><a href="#__codelineno-0-246">246</a></span>
<span class="normal"><a href="#__codelineno-0-247">247</a></span>
<span class="normal"><a href="#__codelineno-0-248">248</a></span>
<span class="normal"><a href="#__codelineno-0-249">249</a></span>
<span class="normal"><a href="#__codelineno-0-250">250</a></span>
<span class="normal"><a href="#__codelineno-0-251">251</a></span>
<span class="normal"><a href="#__codelineno-0-252">252</a></span>
<span class="normal"><a href="#__codelineno-0-253">253</a></span>
<span class="normal"><a href="#__codelineno-0-254">254</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-217" name="__codelineno-0-217"></a><span class="k">class</span><span class="w"> </span><span class="nc">BindVisitor</span><span class="p">(</span><span class="n">BooleanExpressionVisitor</span><span class="p">[</span><span class="n">BooleanExpression</span><span class="p">]):</span>
<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rewrites a boolean expression by replacing unbound references with references to fields in a struct schema.</span>
<a id="__codelineno-0-219" name="__codelineno-0-219"></a>
<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> schema (Schema): A schema to use when binding the expression.</span>
<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> case_sensitive (bool): Whether to consider case when binding a reference to a field in a schema, defaults to True.</span>
<a id="__codelineno-0-223" name="__codelineno-0-223"></a>
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-225" name="__codelineno-0-225"></a><span class="sd"> TypeError: In the case a predicate is already bound.</span>
<a id="__codelineno-0-226" name="__codelineno-0-226"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-227" name="__codelineno-0-227"></a>
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span>
<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="n">case_sensitive</span><span class="p">:</span> <span class="nb">bool</span>
<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <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">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span> <span class="o">=</span> <span class="n">case_sensitive</span>
<a id="__codelineno-0-234" name="__codelineno-0-234"></a>
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_true</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-237" name="__codelineno-0-237"></a>
<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_false</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-240" name="__codelineno-0-240"></a>
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">child_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="k">return</span> <span class="n">Not</span><span class="p">(</span><span class="n">child</span><span class="o">=</span><span class="n">child_result</span><span class="p">)</span>
<a id="__codelineno-0-243" name="__codelineno-0-243"></a>
<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_and</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">return</span> <span class="n">And</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">right_result</span><span class="p">)</span>
<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_or</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-248" name="__codelineno-0-248"></a> <span class="k">return</span> <span class="n">Or</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">right_result</span><span class="p">)</span>
<a id="__codelineno-0-249" name="__codelineno-0-249"></a>
<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_unbound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">UnboundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="k">return</span> <span class="n">predicate</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">)</span>
<a id="__codelineno-0-252" name="__codelineno-0-252"></a>
<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Found already bound predicate: </span><span class="si">{</span><span class="n">predicate</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor" class="doc doc-heading">
<code>BooleanExpressionVisitor</code>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><span title="typing.Generic">Generic</span>[<span title="pyiceberg.expressions.visitors.T">T</span>]</code>, <code><span title="abc.ABC">ABC</span></code></p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
<span class="normal"><a href="#__codelineno-0-100">100</a></span>
<span class="normal"><a href="#__codelineno-0-101">101</a></span>
<span class="normal"><a href="#__codelineno-0-102">102</a></span>
<span class="normal"><a href="#__codelineno-0-103">103</a></span>
<span class="normal"><a href="#__codelineno-0-104">104</a></span>
<span class="normal"><a href="#__codelineno-0-105">105</a></span>
<span class="normal"><a href="#__codelineno-0-106">106</a></span>
<span class="normal"><a href="#__codelineno-0-107">107</a></span>
<span class="normal"><a href="#__codelineno-0-108">108</a></span>
<span class="normal"><a href="#__codelineno-0-109">109</a></span>
<span class="normal"><a href="#__codelineno-0-110">110</a></span>
<span class="normal"><a href="#__codelineno-0-111">111</a></span>
<span class="normal"><a href="#__codelineno-0-112">112</a></span>
<span class="normal"><a href="#__codelineno-0-113">113</a></span>
<span class="normal"><a href="#__codelineno-0-114">114</a></span>
<span class="normal"><a href="#__codelineno-0-115">115</a></span>
<span class="normal"><a href="#__codelineno-0-116">116</a></span>
<span class="normal"><a href="#__codelineno-0-117">117</a></span>
<span class="normal"><a href="#__codelineno-0-118">118</a></span>
<span class="normal"><a href="#__codelineno-0-119">119</a></span>
<span class="normal"><a href="#__codelineno-0-120">120</a></span>
<span class="normal"><a href="#__codelineno-0-121">121</a></span>
<span class="normal"><a href="#__codelineno-0-122">122</a></span>
<span class="normal"><a href="#__codelineno-0-123">123</a></span>
<span class="normal"><a href="#__codelineno-0-124">124</a></span>
<span class="normal"><a href="#__codelineno-0-125">125</a></span>
<span class="normal"><a href="#__codelineno-0-126">126</a></span>
<span class="normal"><a href="#__codelineno-0-127">127</a></span>
<span class="normal"><a href="#__codelineno-0-128">128</a></span>
<span class="normal"><a href="#__codelineno-0-129">129</a></span>
<span class="normal"><a href="#__codelineno-0-130">130</a></span>
<span class="normal"><a href="#__codelineno-0-131">131</a></span>
<span class="normal"><a href="#__codelineno-0-132">132</a></span>
<span class="normal"><a href="#__codelineno-0-133">133</a></span>
<span class="normal"><a href="#__codelineno-0-134">134</a></span>
<span class="normal"><a href="#__codelineno-0-135">135</a></span>
<span class="normal"><a href="#__codelineno-0-136">136</a></span>
<span class="normal"><a href="#__codelineno-0-137">137</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="k">class</span><span class="w"> </span><span class="nc">BooleanExpressionVisitor</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">],</span> <span class="n">ABC</span><span class="p">):</span>
<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_true</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an AlwaysTrue boolean expression.</span>
<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Note: This visit method has no arguments since AlwaysTrue instances have no context.</span>
<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_false</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an AlwaysFalse boolean expression.</span>
<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> Note: This visit method has no arguments since AlwaysFalse instances have no context.</span>
<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">child_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for a Not boolean expression.</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> child_result (T): The result of visiting the child of the Not boolean expression.</span>
<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_and</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an And boolean expression.</span>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> left_result (T): The result of visiting the left side of the expression.</span>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> right_result (T): The result of visiting the right side of the expression.</span>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-113" name="__codelineno-0-113"></a>
<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_or</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an Or boolean expression.</span>
<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> left_result (T): The result of visiting the left side of the expression.</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> right_result (T): The result of visiting the right side of the expression.</span>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_unbound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">UnboundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an unbound predicate in an expression tree.</span>
<a id="__codelineno-0-126" name="__codelineno-0-126"></a>
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> predicate (UnboundPredicate[L): An instance of an UnboundPredicate.</span>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for a bound predicate in an expression tree.</span>
<a id="__codelineno-0-134" name="__codelineno-0-134"></a>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> predicate (BoundPredicate[L]): An instance of a BoundPredicate.</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_and" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_and</span><span class="p">(</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right_result</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_and" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for an And boolean expression.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>left_result</code>
</td>
<td>
<code><span title="pyiceberg.expressions.visitors.T">T</span></code>
</td>
<td>
<div class="doc-md-description">
<p>The result of visiting the left side of the expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>right_result</code>
</td>
<td>
<code><span title="pyiceberg.expressions.visitors.T">T</span></code>
</td>
<td>
<div class="doc-md-description">
<p>The result of visiting the right side of the expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-105">105</a></span>
<span class="normal"><a href="#__codelineno-0-106">106</a></span>
<span class="normal"><a href="#__codelineno-0-107">107</a></span>
<span class="normal"><a href="#__codelineno-0-108">108</a></span>
<span class="normal"><a href="#__codelineno-0-109">109</a></span>
<span class="normal"><a href="#__codelineno-0-110">110</a></span>
<span class="normal"><a href="#__codelineno-0-111">111</a></span>
<span class="normal"><a href="#__codelineno-0-112">112</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_and</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an And boolean expression.</span>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> left_result (T): The result of visiting the left side of the expression.</span>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> right_result (T): The result of visiting the right side of the expression.</span>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_bound_predicate" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_bound_predicate" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for a bound predicate in an expression tree.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>predicate</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="BoundPredicate (pyiceberg.expressions.BoundPredicate)" href="../#pyiceberg.expressions.BoundPredicate">BoundPredicate</a>[<span title="pyiceberg.typedef.L">L</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>An instance of a BoundPredicate.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-131">131</a></span>
<span class="normal"><a href="#__codelineno-0-132">132</a></span>
<span class="normal"><a href="#__codelineno-0-133">133</a></span>
<span class="normal"><a href="#__codelineno-0-134">134</a></span>
<span class="normal"><a href="#__codelineno-0-135">135</a></span>
<span class="normal"><a href="#__codelineno-0-136">136</a></span>
<span class="normal"><a href="#__codelineno-0-137">137</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for a bound predicate in an expression tree.</span>
<a id="__codelineno-0-134" name="__codelineno-0-134"></a>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> predicate (BoundPredicate[L]): An instance of a BoundPredicate.</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_false" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_false</span><span class="p">()</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_false" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for an AlwaysFalse boolean expression.</p>
<p>Note: This visit method has no arguments since AlwaysFalse instances have no context.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-90">90</a></span>
<span class="normal"><a href="#__codelineno-0-91">91</a></span>
<span class="normal"><a href="#__codelineno-0-92">92</a></span>
<span class="normal"><a href="#__codelineno-0-93">93</a></span>
<span class="normal"><a href="#__codelineno-0-94">94</a></span>
<span class="normal"><a href="#__codelineno-0-95">95</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_false</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an AlwaysFalse boolean expression.</span>
<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> Note: This visit method has no arguments since AlwaysFalse instances have no context.</span>
<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_not" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not</span><span class="p">(</span><span class="n">child_result</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_not" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for a Not boolean expression.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>child_result</code>
</td>
<td>
<code><span title="pyiceberg.expressions.visitors.T">T</span></code>
</td>
<td>
<div class="doc-md-description">
<p>The result of visiting the child of the Not boolean expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
<span class="normal"><a href="#__codelineno-0-100">100</a></span>
<span class="normal"><a href="#__codelineno-0-101">101</a></span>
<span class="normal"><a href="#__codelineno-0-102">102</a></span>
<span class="normal"><a href="#__codelineno-0-103">103</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">child_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for a Not boolean expression.</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> child_result (T): The result of visiting the child of the Not boolean expression.</span>
<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_or" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_or</span><span class="p">(</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right_result</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_or" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for an Or boolean expression.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>left_result</code>
</td>
<td>
<code><span title="pyiceberg.expressions.visitors.T">T</span></code>
</td>
<td>
<div class="doc-md-description">
<p>The result of visiting the left side of the expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>right_result</code>
</td>
<td>
<code><span title="pyiceberg.expressions.visitors.T">T</span></code>
</td>
<td>
<div class="doc-md-description">
<p>The result of visiting the right side of the expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-114">114</a></span>
<span class="normal"><a href="#__codelineno-0-115">115</a></span>
<span class="normal"><a href="#__codelineno-0-116">116</a></span>
<span class="normal"><a href="#__codelineno-0-117">117</a></span>
<span class="normal"><a href="#__codelineno-0-118">118</a></span>
<span class="normal"><a href="#__codelineno-0-119">119</a></span>
<span class="normal"><a href="#__codelineno-0-120">120</a></span>
<span class="normal"><a href="#__codelineno-0-121">121</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_or</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an Or boolean expression.</span>
<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> left_result (T): The result of visiting the left side of the expression.</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> right_result (T): The result of visiting the right side of the expression.</span>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_true" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_true</span><span class="p">()</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_true" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for an AlwaysTrue boolean expression.</p>
<p>Note: This visit method has no arguments since AlwaysTrue instances have no context.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-83">83</a></span>
<span class="normal"><a href="#__codelineno-0-84">84</a></span>
<span class="normal"><a href="#__codelineno-0-85">85</a></span>
<span class="normal"><a href="#__codelineno-0-86">86</a></span>
<span class="normal"><a href="#__codelineno-0-87">87</a></span>
<span class="normal"><a href="#__codelineno-0-88">88</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_true</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an AlwaysTrue boolean expression.</span>
<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Note: This visit method has no arguments since AlwaysTrue instances have no context.</span>
<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_unbound_predicate" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_unbound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor.visit_unbound_predicate" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit method for an unbound predicate in an expression tree.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>predicate</code>
</td>
<td>
<code>UnboundPredicate[L</code>
</td>
<td>
<div class="doc-md-description">
<p>An instance of an UnboundPredicate.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-123">123</a></span>
<span class="normal"><a href="#__codelineno-0-124">124</a></span>
<span class="normal"><a href="#__codelineno-0-125">125</a></span>
<span class="normal"><a href="#__codelineno-0-126">126</a></span>
<span class="normal"><a href="#__codelineno-0-127">127</a></span>
<span class="normal"><a href="#__codelineno-0-128">128</a></span>
<span class="normal"><a href="#__codelineno-0-129">129</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_unbound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">UnboundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit method for an unbound predicate in an expression tree.</span>
<a id="__codelineno-0-126" name="__codelineno-0-126"></a>
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> predicate (UnboundPredicate[L): An instance of an UnboundPredicate.</span>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor" class="doc doc-heading">
<code>BoundBooleanExpressionVisitor</code>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="BooleanExpressionVisitor (pyiceberg.expressions.visitors.BooleanExpressionVisitor)" href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor">BooleanExpressionVisitor</a>[<span title="pyiceberg.expressions.visitors.T">T</span>]</code>, <code><span title="abc.ABC">ABC</span></code></p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-257">257</a></span>
<span class="normal"><a href="#__codelineno-0-258">258</a></span>
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
<span class="normal"><a href="#__codelineno-0-260">260</a></span>
<span class="normal"><a href="#__codelineno-0-261">261</a></span>
<span class="normal"><a href="#__codelineno-0-262">262</a></span>
<span class="normal"><a href="#__codelineno-0-263">263</a></span>
<span class="normal"><a href="#__codelineno-0-264">264</a></span>
<span class="normal"><a href="#__codelineno-0-265">265</a></span>
<span class="normal"><a href="#__codelineno-0-266">266</a></span>
<span class="normal"><a href="#__codelineno-0-267">267</a></span>
<span class="normal"><a href="#__codelineno-0-268">268</a></span>
<span class="normal"><a href="#__codelineno-0-269">269</a></span>
<span class="normal"><a href="#__codelineno-0-270">270</a></span>
<span class="normal"><a href="#__codelineno-0-271">271</a></span>
<span class="normal"><a href="#__codelineno-0-272">272</a></span>
<span class="normal"><a href="#__codelineno-0-273">273</a></span>
<span class="normal"><a href="#__codelineno-0-274">274</a></span>
<span class="normal"><a href="#__codelineno-0-275">275</a></span>
<span class="normal"><a href="#__codelineno-0-276">276</a></span>
<span class="normal"><a href="#__codelineno-0-277">277</a></span>
<span class="normal"><a href="#__codelineno-0-278">278</a></span>
<span class="normal"><a href="#__codelineno-0-279">279</a></span>
<span class="normal"><a href="#__codelineno-0-280">280</a></span>
<span class="normal"><a href="#__codelineno-0-281">281</a></span>
<span class="normal"><a href="#__codelineno-0-282">282</a></span>
<span class="normal"><a href="#__codelineno-0-283">283</a></span>
<span class="normal"><a href="#__codelineno-0-284">284</a></span>
<span class="normal"><a href="#__codelineno-0-285">285</a></span>
<span class="normal"><a href="#__codelineno-0-286">286</a></span>
<span class="normal"><a href="#__codelineno-0-287">287</a></span>
<span class="normal"><a href="#__codelineno-0-288">288</a></span>
<span class="normal"><a href="#__codelineno-0-289">289</a></span>
<span class="normal"><a href="#__codelineno-0-290">290</a></span>
<span class="normal"><a href="#__codelineno-0-291">291</a></span>
<span class="normal"><a href="#__codelineno-0-292">292</a></span>
<span class="normal"><a href="#__codelineno-0-293">293</a></span>
<span class="normal"><a href="#__codelineno-0-294">294</a></span>
<span class="normal"><a href="#__codelineno-0-295">295</a></span>
<span class="normal"><a href="#__codelineno-0-296">296</a></span>
<span class="normal"><a href="#__codelineno-0-297">297</a></span>
<span class="normal"><a href="#__codelineno-0-298">298</a></span>
<span class="normal"><a href="#__codelineno-0-299">299</a></span>
<span class="normal"><a href="#__codelineno-0-300">300</a></span>
<span class="normal"><a href="#__codelineno-0-301">301</a></span>
<span class="normal"><a href="#__codelineno-0-302">302</a></span>
<span class="normal"><a href="#__codelineno-0-303">303</a></span>
<span class="normal"><a href="#__codelineno-0-304">304</a></span>
<span class="normal"><a href="#__codelineno-0-305">305</a></span>
<span class="normal"><a href="#__codelineno-0-306">306</a></span>
<span class="normal"><a href="#__codelineno-0-307">307</a></span>
<span class="normal"><a href="#__codelineno-0-308">308</a></span>
<span class="normal"><a href="#__codelineno-0-309">309</a></span>
<span class="normal"><a href="#__codelineno-0-310">310</a></span>
<span class="normal"><a href="#__codelineno-0-311">311</a></span>
<span class="normal"><a href="#__codelineno-0-312">312</a></span>
<span class="normal"><a href="#__codelineno-0-313">313</a></span>
<span class="normal"><a href="#__codelineno-0-314">314</a></span>
<span class="normal"><a href="#__codelineno-0-315">315</a></span>
<span class="normal"><a href="#__codelineno-0-316">316</a></span>
<span class="normal"><a href="#__codelineno-0-317">317</a></span>
<span class="normal"><a href="#__codelineno-0-318">318</a></span>
<span class="normal"><a href="#__codelineno-0-319">319</a></span>
<span class="normal"><a href="#__codelineno-0-320">320</a></span>
<span class="normal"><a href="#__codelineno-0-321">321</a></span>
<span class="normal"><a href="#__codelineno-0-322">322</a></span>
<span class="normal"><a href="#__codelineno-0-323">323</a></span>
<span class="normal"><a href="#__codelineno-0-324">324</a></span>
<span class="normal"><a href="#__codelineno-0-325">325</a></span>
<span class="normal"><a href="#__codelineno-0-326">326</a></span>
<span class="normal"><a href="#__codelineno-0-327">327</a></span>
<span class="normal"><a href="#__codelineno-0-328">328</a></span>
<span class="normal"><a href="#__codelineno-0-329">329</a></span>
<span class="normal"><a href="#__codelineno-0-330">330</a></span>
<span class="normal"><a href="#__codelineno-0-331">331</a></span>
<span class="normal"><a href="#__codelineno-0-332">332</a></span>
<span class="normal"><a href="#__codelineno-0-333">333</a></span>
<span class="normal"><a href="#__codelineno-0-334">334</a></span>
<span class="normal"><a href="#__codelineno-0-335">335</a></span>
<span class="normal"><a href="#__codelineno-0-336">336</a></span>
<span class="normal"><a href="#__codelineno-0-337">337</a></span>
<span class="normal"><a href="#__codelineno-0-338">338</a></span>
<span class="normal"><a href="#__codelineno-0-339">339</a></span>
<span class="normal"><a href="#__codelineno-0-340">340</a></span>
<span class="normal"><a href="#__codelineno-0-341">341</a></span>
<span class="normal"><a href="#__codelineno-0-342">342</a></span>
<span class="normal"><a href="#__codelineno-0-343">343</a></span>
<span class="normal"><a href="#__codelineno-0-344">344</a></span>
<span class="normal"><a href="#__codelineno-0-345">345</a></span>
<span class="normal"><a href="#__codelineno-0-346">346</a></span>
<span class="normal"><a href="#__codelineno-0-347">347</a></span>
<span class="normal"><a href="#__codelineno-0-348">348</a></span>
<span class="normal"><a href="#__codelineno-0-349">349</a></span>
<span class="normal"><a href="#__codelineno-0-350">350</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-257" name="__codelineno-0-257"></a><span class="k">class</span><span class="w"> </span><span class="nc">BoundBooleanExpressionVisitor</span><span class="p">(</span><span class="n">BooleanExpressionVisitor</span><span class="p">[</span><span class="n">T</span><span class="p">],</span> <span class="n">ABC</span><span class="p">):</span>
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literals</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-260" name="__codelineno-0-260"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound In predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literals</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-264" name="__codelineno-0-264"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotIn predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-265" name="__codelineno-0-265"></a>
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_is_nan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-268" name="__codelineno-0-268"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound IsNan predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-269" name="__codelineno-0-269"></a>
<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_nan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotNan predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-273" name="__codelineno-0-273"></a>
<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_is_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound IsNull predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-277" name="__codelineno-0-277"></a>
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-280" name="__codelineno-0-280"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotNull predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-281" name="__codelineno-0-281"></a>
<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-284" name="__codelineno-0-284"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound Equal predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-288" name="__codelineno-0-288"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotEqual predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-289" name="__codelineno-0-289"></a>
<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_greater_than_or_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-292" name="__codelineno-0-292"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound GreaterThanOrEqual predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-293" name="__codelineno-0-293"></a>
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_greater_than</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-296" name="__codelineno-0-296"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound GreaterThan predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-297" name="__codelineno-0-297"></a>
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_less_than</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-300" name="__codelineno-0-300"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound LessThan predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-301" name="__codelineno-0-301"></a>
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_less_than_or_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-304" name="__codelineno-0-304"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound LessThanOrEqual predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-305" name="__codelineno-0-305"></a>
<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_true</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound True predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-309" name="__codelineno-0-309"></a>
<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-311" name="__codelineno-0-311"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_false</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound False predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-313" name="__codelineno-0-313"></a>
<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-315" name="__codelineno-0-315"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">child_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-316" name="__codelineno-0-316"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound Not predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-317" name="__codelineno-0-317"></a>
<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_and</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-320" name="__codelineno-0-320"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound And predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-321" name="__codelineno-0-321"></a>
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_or</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-324" name="__codelineno-0-324"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound Or predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-325" name="__codelineno-0-325"></a>
<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_starts_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit bound StartsWith predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-329" name="__codelineno-0-329"></a>
<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="nd">@abstractmethod</span>
<a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_starts_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit bound NotStartsWith predicate.&quot;&quot;&quot;</span>
<a id="__codelineno-0-333" name="__codelineno-0-333"></a>
<a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_unbound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">UnboundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit an unbound predicate.</span>
<a id="__codelineno-0-336" name="__codelineno-0-336"></a>
<a id="__codelineno-0-337" name="__codelineno-0-337"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="sd"> predicate (UnboundPredicate[L]): An unbound predicate.</span>
<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> TypeError: This always raises since an unbound predicate is not expected in a bound boolean expression.</span>
<a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not a bound predicate: </span><span class="si">{</span><span class="n">predicate</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<a id="__codelineno-0-343" name="__codelineno-0-343"></a>
<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-345" name="__codelineno-0-345"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound predicate.</span>
<a id="__codelineno-0-346" name="__codelineno-0-346"></a>
<a id="__codelineno-0-347" name="__codelineno-0-347"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-348" name="__codelineno-0-348"></a><span class="sd"> predicate (BoundPredicate[L]): A bound predicate.</span>
<a id="__codelineno-0-349" name="__codelineno-0-349"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-350" name="__codelineno-0-350"></a> <span class="k">return</span> <span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_and" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_and</span><span class="p">(</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right_result</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_and" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound And predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-318">318</a></span>
<span class="normal"><a href="#__codelineno-0-319">319</a></span>
<span class="normal"><a href="#__codelineno-0-320">320</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-318" name="__codelineno-0-318"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-319" name="__codelineno-0-319"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_and</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-320" name="__codelineno-0-320"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound And predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_bound_predicate" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span></code>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_bound_predicate" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound predicate.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>predicate</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="BoundPredicate (pyiceberg.expressions.BoundPredicate)" href="../#pyiceberg.expressions.BoundPredicate">BoundPredicate</a>[<span title="pyiceberg.typedef.L">L</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>A bound predicate.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-344">344</a></span>
<span class="normal"><a href="#__codelineno-0-345">345</a></span>
<span class="normal"><a href="#__codelineno-0-346">346</a></span>
<span class="normal"><a href="#__codelineno-0-347">347</a></span>
<span class="normal"><a href="#__codelineno-0-348">348</a></span>
<span class="normal"><a href="#__codelineno-0-349">349</a></span>
<span class="normal"><a href="#__codelineno-0-350">350</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-344" name="__codelineno-0-344"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-345" name="__codelineno-0-345"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound predicate.</span>
<a id="__codelineno-0-346" name="__codelineno-0-346"></a>
<a id="__codelineno-0-347" name="__codelineno-0-347"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-348" name="__codelineno-0-348"></a><span class="sd"> predicate (BoundPredicate[L]): A bound predicate.</span>
<a id="__codelineno-0-349" name="__codelineno-0-349"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-350" name="__codelineno-0-350"></a> <span class="k">return</span> <span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_equal" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_equal</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_equal" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound Equal predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-282">282</a></span>
<span class="normal"><a href="#__codelineno-0-283">283</a></span>
<span class="normal"><a href="#__codelineno-0-284">284</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-282" name="__codelineno-0-282"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-283" name="__codelineno-0-283"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-284" name="__codelineno-0-284"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound Equal predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_false" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_false</span><span class="p">()</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_false" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound False predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-310">310</a></span>
<span class="normal"><a href="#__codelineno-0-311">311</a></span>
<span class="normal"><a href="#__codelineno-0-312">312</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_false</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound False predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_greater_than</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound GreaterThan predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-294">294</a></span>
<span class="normal"><a href="#__codelineno-0-295">295</a></span>
<span class="normal"><a href="#__codelineno-0-296">296</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-294" name="__codelineno-0-294"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-295" name="__codelineno-0-295"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_greater_than</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-296" name="__codelineno-0-296"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound GreaterThan predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than_or_equal" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_greater_than_or_equal</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_greater_than_or_equal" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound GreaterThanOrEqual predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-290">290</a></span>
<span class="normal"><a href="#__codelineno-0-291">291</a></span>
<span class="normal"><a href="#__codelineno-0-292">292</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-290" name="__codelineno-0-290"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-291" name="__codelineno-0-291"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_greater_than_or_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-292" name="__codelineno-0-292"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound GreaterThanOrEqual predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_in" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_in</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literals</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_in" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound In predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-258">258</a></span>
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
<span class="normal"><a href="#__codelineno-0-260">260</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literals</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-260" name="__codelineno-0-260"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound In predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_nan" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_is_nan</span><span class="p">(</span><span class="n">term</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_nan" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound IsNan predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-266">266</a></span>
<span class="normal"><a href="#__codelineno-0-267">267</a></span>
<span class="normal"><a href="#__codelineno-0-268">268</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-266" name="__codelineno-0-266"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-267" name="__codelineno-0-267"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_is_nan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-268" name="__codelineno-0-268"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound IsNan predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_null" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_is_null</span><span class="p">(</span><span class="n">term</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_is_null" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound IsNull predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-274">274</a></span>
<span class="normal"><a href="#__codelineno-0-275">275</a></span>
<span class="normal"><a href="#__codelineno-0-276">276</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-274" name="__codelineno-0-274"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-275" name="__codelineno-0-275"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_is_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound IsNull predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_less_than</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound LessThan predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-298">298</a></span>
<span class="normal"><a href="#__codelineno-0-299">299</a></span>
<span class="normal"><a href="#__codelineno-0-300">300</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-298" name="__codelineno-0-298"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-299" name="__codelineno-0-299"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_less_than</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-300" name="__codelineno-0-300"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound LessThan predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than_or_equal" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_less_than_or_equal</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_less_than_or_equal" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound LessThanOrEqual predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-302">302</a></span>
<span class="normal"><a href="#__codelineno-0-303">303</a></span>
<span class="normal"><a href="#__codelineno-0-304">304</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-302" name="__codelineno-0-302"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-303" name="__codelineno-0-303"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_less_than_or_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-304" name="__codelineno-0-304"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound LessThanOrEqual predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not</span><span class="p">(</span><span class="n">child_result</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound Not predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-314">314</a></span>
<span class="normal"><a href="#__codelineno-0-315">315</a></span>
<span class="normal"><a href="#__codelineno-0-316">316</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">child_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-316" name="__codelineno-0-316"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound Not predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_equal" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not_equal</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_equal" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound NotEqual predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-286">286</a></span>
<span class="normal"><a href="#__codelineno-0-287">287</a></span>
<span class="normal"><a href="#__codelineno-0-288">288</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-286" name="__codelineno-0-286"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-287" name="__codelineno-0-287"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-288" name="__codelineno-0-288"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotEqual predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_in" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not_in</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literals</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_in" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound NotIn predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-262">262</a></span>
<span class="normal"><a href="#__codelineno-0-263">263</a></span>
<span class="normal"><a href="#__codelineno-0-264">264</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-262" name="__codelineno-0-262"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-263" name="__codelineno-0-263"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literals</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-264" name="__codelineno-0-264"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotIn predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_nan" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not_nan</span><span class="p">(</span><span class="n">term</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_nan" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound NotNan predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-270">270</a></span>
<span class="normal"><a href="#__codelineno-0-271">271</a></span>
<span class="normal"><a href="#__codelineno-0-272">272</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-270" name="__codelineno-0-270"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-271" name="__codelineno-0-271"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not_nan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotNan predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_null" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not_null</span><span class="p">(</span><span class="n">term</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_null" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound NotNull predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-278">278</a></span>
<span class="normal"><a href="#__codelineno-0-279">279</a></span>
<span class="normal"><a href="#__codelineno-0-280">280</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-279" name="__codelineno-0-279"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-280" name="__codelineno-0-280"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound NotNull predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_starts_with" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_not_starts_with</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_not_starts_with" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit bound NotStartsWith predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-330">330</a></span>
<span class="normal"><a href="#__codelineno-0-331">331</a></span>
<span class="normal"><a href="#__codelineno-0-332">332</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_not_starts_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit bound NotStartsWith predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_or" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_or</span><span class="p">(</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right_result</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_or" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound Or predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-322">322</a></span>
<span class="normal"><a href="#__codelineno-0-323">323</a></span>
<span class="normal"><a href="#__codelineno-0-324">324</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-322" name="__codelineno-0-322"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-323" name="__codelineno-0-323"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_or</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-324" name="__codelineno-0-324"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound Or predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_starts_with" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_starts_with</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_starts_with" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit bound StartsWith predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-326">326</a></span>
<span class="normal"><a href="#__codelineno-0-327">327</a></span>
<span class="normal"><a href="#__codelineno-0-328">328</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-326" name="__codelineno-0-326"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_starts_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit bound StartsWith predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_true" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_true</span><span class="p">()</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
</span>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_true" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit a bound True predicate.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-306">306</a></span>
<span class="normal"><a href="#__codelineno-0-307">307</a></span>
<span class="normal"><a href="#__codelineno-0-308">308</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-306" name="__codelineno-0-306"></a><span class="nd">@abstractmethod</span>
<a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_true</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit a bound True predicate.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_unbound_predicate" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_unbound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span></code>
<a href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor.visit_unbound_predicate" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Visit an unbound predicate.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>predicate</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="UnboundPredicate (pyiceberg.expressions.UnboundPredicate)" href="../#pyiceberg.expressions.UnboundPredicate">UnboundPredicate</a>[<span title="pyiceberg.typedef.L">L</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>An unbound predicate.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p>Raises:
TypeError: This always raises since an unbound predicate is not expected in a bound boolean expression.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-334">334</a></span>
<span class="normal"><a href="#__codelineno-0-335">335</a></span>
<span class="normal"><a href="#__codelineno-0-336">336</a></span>
<span class="normal"><a href="#__codelineno-0-337">337</a></span>
<span class="normal"><a href="#__codelineno-0-338">338</a></span>
<span class="normal"><a href="#__codelineno-0-339">339</a></span>
<span class="normal"><a href="#__codelineno-0-340">340</a></span>
<span class="normal"><a href="#__codelineno-0-341">341</a></span>
<span class="normal"><a href="#__codelineno-0-342">342</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_unbound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">UnboundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Visit an unbound predicate.</span>
<a id="__codelineno-0-336" name="__codelineno-0-336"></a>
<a id="__codelineno-0-337" name="__codelineno-0-337"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="sd"> predicate (UnboundPredicate[L]): An unbound predicate.</span>
<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> TypeError: This always raises since an unbound predicate is not expected in a bound boolean expression.</span>
<a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not a bound predicate: </span><span class="si">{</span><span class="n">predicate</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.expressions.visitors.ResidualVisitor" class="doc doc-heading">
<code>ResidualVisitor</code>
<a href="#pyiceberg.expressions.visitors.ResidualVisitor" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="BoundBooleanExpressionVisitor (pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor)" href="#pyiceberg.expressions.visitors.BoundBooleanExpressionVisitor">BoundBooleanExpressionVisitor</a>[<a class="autorefs autorefs-internal" title="BooleanExpression (pyiceberg.expressions.BooleanExpression)" href="../#pyiceberg.expressions.BooleanExpression">BooleanExpression</a>]</code>, <code><span title="abc.ABC">ABC</span></code></p>
<p>Finds the residuals for an Expression the partitions in the given PartitionSpec.</p>
<p>A residual expression is made by partially evaluating an expression using partition values.
For example, if a table is partitioned by day(utc_timestamp) and is read with a filter expression
utc_timestamp &gt; a and utc_timestamp &lt; b, then there are 4 possible residuals expressions
for the partition data, d:</p>
<ol>
<li>If d &gt; day(a) and d &lt; day(b), the residual is always true</li>
<li>If d == day(a) and d != day(b), the residual is utc_timestamp &gt; a</li>
<li>if d == day(b) and d != day(a), the residual is utc_timestamp &lt; b</li>
<li>If d == day(a) == day(b), the residual is utc_timestamp &gt; a and utc_timestamp &lt; b
Partition data is passed using StructLike. Residuals are returned by residualFor(StructLike).</li>
</ol>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1761">1761</a></span>
<span class="normal"><a href="#__codelineno-0-1762">1762</a></span>
<span class="normal"><a href="#__codelineno-0-1763">1763</a></span>
<span class="normal"><a href="#__codelineno-0-1764">1764</a></span>
<span class="normal"><a href="#__codelineno-0-1765">1765</a></span>
<span class="normal"><a href="#__codelineno-0-1766">1766</a></span>
<span class="normal"><a href="#__codelineno-0-1767">1767</a></span>
<span class="normal"><a href="#__codelineno-0-1768">1768</a></span>
<span class="normal"><a href="#__codelineno-0-1769">1769</a></span>
<span class="normal"><a href="#__codelineno-0-1770">1770</a></span>
<span class="normal"><a href="#__codelineno-0-1771">1771</a></span>
<span class="normal"><a href="#__codelineno-0-1772">1772</a></span>
<span class="normal"><a href="#__codelineno-0-1773">1773</a></span>
<span class="normal"><a href="#__codelineno-0-1774">1774</a></span>
<span class="normal"><a href="#__codelineno-0-1775">1775</a></span>
<span class="normal"><a href="#__codelineno-0-1776">1776</a></span>
<span class="normal"><a href="#__codelineno-0-1777">1777</a></span>
<span class="normal"><a href="#__codelineno-0-1778">1778</a></span>
<span class="normal"><a href="#__codelineno-0-1779">1779</a></span>
<span class="normal"><a href="#__codelineno-0-1780">1780</a></span>
<span class="normal"><a href="#__codelineno-0-1781">1781</a></span>
<span class="normal"><a href="#__codelineno-0-1782">1782</a></span>
<span class="normal"><a href="#__codelineno-0-1783">1783</a></span>
<span class="normal"><a href="#__codelineno-0-1784">1784</a></span>
<span class="normal"><a href="#__codelineno-0-1785">1785</a></span>
<span class="normal"><a href="#__codelineno-0-1786">1786</a></span>
<span class="normal"><a href="#__codelineno-0-1787">1787</a></span>
<span class="normal"><a href="#__codelineno-0-1788">1788</a></span>
<span class="normal"><a href="#__codelineno-0-1789">1789</a></span>
<span class="normal"><a href="#__codelineno-0-1790">1790</a></span>
<span class="normal"><a href="#__codelineno-0-1791">1791</a></span>
<span class="normal"><a href="#__codelineno-0-1792">1792</a></span>
<span class="normal"><a href="#__codelineno-0-1793">1793</a></span>
<span class="normal"><a href="#__codelineno-0-1794">1794</a></span>
<span class="normal"><a href="#__codelineno-0-1795">1795</a></span>
<span class="normal"><a href="#__codelineno-0-1796">1796</a></span>
<span class="normal"><a href="#__codelineno-0-1797">1797</a></span>
<span class="normal"><a href="#__codelineno-0-1798">1798</a></span>
<span class="normal"><a href="#__codelineno-0-1799">1799</a></span>
<span class="normal"><a href="#__codelineno-0-1800">1800</a></span>
<span class="normal"><a href="#__codelineno-0-1801">1801</a></span>
<span class="normal"><a href="#__codelineno-0-1802">1802</a></span>
<span class="normal"><a href="#__codelineno-0-1803">1803</a></span>
<span class="normal"><a href="#__codelineno-0-1804">1804</a></span>
<span class="normal"><a href="#__codelineno-0-1805">1805</a></span>
<span class="normal"><a href="#__codelineno-0-1806">1806</a></span>
<span class="normal"><a href="#__codelineno-0-1807">1807</a></span>
<span class="normal"><a href="#__codelineno-0-1808">1808</a></span>
<span class="normal"><a href="#__codelineno-0-1809">1809</a></span>
<span class="normal"><a href="#__codelineno-0-1810">1810</a></span>
<span class="normal"><a href="#__codelineno-0-1811">1811</a></span>
<span class="normal"><a href="#__codelineno-0-1812">1812</a></span>
<span class="normal"><a href="#__codelineno-0-1813">1813</a></span>
<span class="normal"><a href="#__codelineno-0-1814">1814</a></span>
<span class="normal"><a href="#__codelineno-0-1815">1815</a></span>
<span class="normal"><a href="#__codelineno-0-1816">1816</a></span>
<span class="normal"><a href="#__codelineno-0-1817">1817</a></span>
<span class="normal"><a href="#__codelineno-0-1818">1818</a></span>
<span class="normal"><a href="#__codelineno-0-1819">1819</a></span>
<span class="normal"><a href="#__codelineno-0-1820">1820</a></span>
<span class="normal"><a href="#__codelineno-0-1821">1821</a></span>
<span class="normal"><a href="#__codelineno-0-1822">1822</a></span>
<span class="normal"><a href="#__codelineno-0-1823">1823</a></span>
<span class="normal"><a href="#__codelineno-0-1824">1824</a></span>
<span class="normal"><a href="#__codelineno-0-1825">1825</a></span>
<span class="normal"><a href="#__codelineno-0-1826">1826</a></span>
<span class="normal"><a href="#__codelineno-0-1827">1827</a></span>
<span class="normal"><a href="#__codelineno-0-1828">1828</a></span>
<span class="normal"><a href="#__codelineno-0-1829">1829</a></span>
<span class="normal"><a href="#__codelineno-0-1830">1830</a></span>
<span class="normal"><a href="#__codelineno-0-1831">1831</a></span>
<span class="normal"><a href="#__codelineno-0-1832">1832</a></span>
<span class="normal"><a href="#__codelineno-0-1833">1833</a></span>
<span class="normal"><a href="#__codelineno-0-1834">1834</a></span>
<span class="normal"><a href="#__codelineno-0-1835">1835</a></span>
<span class="normal"><a href="#__codelineno-0-1836">1836</a></span>
<span class="normal"><a href="#__codelineno-0-1837">1837</a></span>
<span class="normal"><a href="#__codelineno-0-1838">1838</a></span>
<span class="normal"><a href="#__codelineno-0-1839">1839</a></span>
<span class="normal"><a href="#__codelineno-0-1840">1840</a></span>
<span class="normal"><a href="#__codelineno-0-1841">1841</a></span>
<span class="normal"><a href="#__codelineno-0-1842">1842</a></span>
<span class="normal"><a href="#__codelineno-0-1843">1843</a></span>
<span class="normal"><a href="#__codelineno-0-1844">1844</a></span>
<span class="normal"><a href="#__codelineno-0-1845">1845</a></span>
<span class="normal"><a href="#__codelineno-0-1846">1846</a></span>
<span class="normal"><a href="#__codelineno-0-1847">1847</a></span>
<span class="normal"><a href="#__codelineno-0-1848">1848</a></span>
<span class="normal"><a href="#__codelineno-0-1849">1849</a></span>
<span class="normal"><a href="#__codelineno-0-1850">1850</a></span>
<span class="normal"><a href="#__codelineno-0-1851">1851</a></span>
<span class="normal"><a href="#__codelineno-0-1852">1852</a></span>
<span class="normal"><a href="#__codelineno-0-1853">1853</a></span>
<span class="normal"><a href="#__codelineno-0-1854">1854</a></span>
<span class="normal"><a href="#__codelineno-0-1855">1855</a></span>
<span class="normal"><a href="#__codelineno-0-1856">1856</a></span>
<span class="normal"><a href="#__codelineno-0-1857">1857</a></span>
<span class="normal"><a href="#__codelineno-0-1858">1858</a></span>
<span class="normal"><a href="#__codelineno-0-1859">1859</a></span>
<span class="normal"><a href="#__codelineno-0-1860">1860</a></span>
<span class="normal"><a href="#__codelineno-0-1861">1861</a></span>
<span class="normal"><a href="#__codelineno-0-1862">1862</a></span>
<span class="normal"><a href="#__codelineno-0-1863">1863</a></span>
<span class="normal"><a href="#__codelineno-0-1864">1864</a></span>
<span class="normal"><a href="#__codelineno-0-1865">1865</a></span>
<span class="normal"><a href="#__codelineno-0-1866">1866</a></span>
<span class="normal"><a href="#__codelineno-0-1867">1867</a></span>
<span class="normal"><a href="#__codelineno-0-1868">1868</a></span>
<span class="normal"><a href="#__codelineno-0-1869">1869</a></span>
<span class="normal"><a href="#__codelineno-0-1870">1870</a></span>
<span class="normal"><a href="#__codelineno-0-1871">1871</a></span>
<span class="normal"><a href="#__codelineno-0-1872">1872</a></span>
<span class="normal"><a href="#__codelineno-0-1873">1873</a></span>
<span class="normal"><a href="#__codelineno-0-1874">1874</a></span>
<span class="normal"><a href="#__codelineno-0-1875">1875</a></span>
<span class="normal"><a href="#__codelineno-0-1876">1876</a></span>
<span class="normal"><a href="#__codelineno-0-1877">1877</a></span>
<span class="normal"><a href="#__codelineno-0-1878">1878</a></span>
<span class="normal"><a href="#__codelineno-0-1879">1879</a></span>
<span class="normal"><a href="#__codelineno-0-1880">1880</a></span>
<span class="normal"><a href="#__codelineno-0-1881">1881</a></span>
<span class="normal"><a href="#__codelineno-0-1882">1882</a></span>
<span class="normal"><a href="#__codelineno-0-1883">1883</a></span>
<span class="normal"><a href="#__codelineno-0-1884">1884</a></span>
<span class="normal"><a href="#__codelineno-0-1885">1885</a></span>
<span class="normal"><a href="#__codelineno-0-1886">1886</a></span>
<span class="normal"><a href="#__codelineno-0-1887">1887</a></span>
<span class="normal"><a href="#__codelineno-0-1888">1888</a></span>
<span class="normal"><a href="#__codelineno-0-1889">1889</a></span>
<span class="normal"><a href="#__codelineno-0-1890">1890</a></span>
<span class="normal"><a href="#__codelineno-0-1891">1891</a></span>
<span class="normal"><a href="#__codelineno-0-1892">1892</a></span>
<span class="normal"><a href="#__codelineno-0-1893">1893</a></span>
<span class="normal"><a href="#__codelineno-0-1894">1894</a></span>
<span class="normal"><a href="#__codelineno-0-1895">1895</a></span>
<span class="normal"><a href="#__codelineno-0-1896">1896</a></span>
<span class="normal"><a href="#__codelineno-0-1897">1897</a></span>
<span class="normal"><a href="#__codelineno-0-1898">1898</a></span>
<span class="normal"><a href="#__codelineno-0-1899">1899</a></span>
<span class="normal"><a href="#__codelineno-0-1900">1900</a></span>
<span class="normal"><a href="#__codelineno-0-1901">1901</a></span>
<span class="normal"><a href="#__codelineno-0-1902">1902</a></span>
<span class="normal"><a href="#__codelineno-0-1903">1903</a></span>
<span class="normal"><a href="#__codelineno-0-1904">1904</a></span>
<span class="normal"><a href="#__codelineno-0-1905">1905</a></span>
<span class="normal"><a href="#__codelineno-0-1906">1906</a></span>
<span class="normal"><a href="#__codelineno-0-1907">1907</a></span>
<span class="normal"><a href="#__codelineno-0-1908">1908</a></span>
<span class="normal"><a href="#__codelineno-0-1909">1909</a></span>
<span class="normal"><a href="#__codelineno-0-1910">1910</a></span>
<span class="normal"><a href="#__codelineno-0-1911">1911</a></span>
<span class="normal"><a href="#__codelineno-0-1912">1912</a></span>
<span class="normal"><a href="#__codelineno-0-1913">1913</a></span>
<span class="normal"><a href="#__codelineno-0-1914">1914</a></span>
<span class="normal"><a href="#__codelineno-0-1915">1915</a></span>
<span class="normal"><a href="#__codelineno-0-1916">1916</a></span>
<span class="normal"><a href="#__codelineno-0-1917">1917</a></span>
<span class="normal"><a href="#__codelineno-0-1918">1918</a></span>
<span class="normal"><a href="#__codelineno-0-1919">1919</a></span>
<span class="normal"><a href="#__codelineno-0-1920">1920</a></span>
<span class="normal"><a href="#__codelineno-0-1921">1921</a></span>
<span class="normal"><a href="#__codelineno-0-1922">1922</a></span>
<span class="normal"><a href="#__codelineno-0-1923">1923</a></span>
<span class="normal"><a href="#__codelineno-0-1924">1924</a></span>
<span class="normal"><a href="#__codelineno-0-1925">1925</a></span>
<span class="normal"><a href="#__codelineno-0-1926">1926</a></span>
<span class="normal"><a href="#__codelineno-0-1927">1927</a></span>
<span class="normal"><a href="#__codelineno-0-1928">1928</a></span>
<span class="normal"><a href="#__codelineno-0-1929">1929</a></span>
<span class="normal"><a href="#__codelineno-0-1930">1930</a></span>
<span class="normal"><a href="#__codelineno-0-1931">1931</a></span>
<span class="normal"><a href="#__codelineno-0-1932">1932</a></span>
<span class="normal"><a href="#__codelineno-0-1933">1933</a></span>
<span class="normal"><a href="#__codelineno-0-1934">1934</a></span>
<span class="normal"><a href="#__codelineno-0-1935">1935</a></span>
<span class="normal"><a href="#__codelineno-0-1936">1936</a></span>
<span class="normal"><a href="#__codelineno-0-1937">1937</a></span>
<span class="normal"><a href="#__codelineno-0-1938">1938</a></span>
<span class="normal"><a href="#__codelineno-0-1939">1939</a></span>
<span class="normal"><a href="#__codelineno-0-1940">1940</a></span>
<span class="normal"><a href="#__codelineno-0-1941">1941</a></span>
<span class="normal"><a href="#__codelineno-0-1942">1942</a></span>
<span class="normal"><a href="#__codelineno-0-1943">1943</a></span>
<span class="normal"><a href="#__codelineno-0-1944">1944</a></span>
<span class="normal"><a href="#__codelineno-0-1945">1945</a></span>
<span class="normal"><a href="#__codelineno-0-1946">1946</a></span>
<span class="normal"><a href="#__codelineno-0-1947">1947</a></span>
<span class="normal"><a href="#__codelineno-0-1948">1948</a></span>
<span class="normal"><a href="#__codelineno-0-1949">1949</a></span>
<span class="normal"><a href="#__codelineno-0-1950">1950</a></span>
<span class="normal"><a href="#__codelineno-0-1951">1951</a></span>
<span class="normal"><a href="#__codelineno-0-1952">1952</a></span>
<span class="normal"><a href="#__codelineno-0-1953">1953</a></span>
<span class="normal"><a href="#__codelineno-0-1954">1954</a></span>
<span class="normal"><a href="#__codelineno-0-1955">1955</a></span>
<span class="normal"><a href="#__codelineno-0-1956">1956</a></span>
<span class="normal"><a href="#__codelineno-0-1957">1957</a></span>
<span class="normal"><a href="#__codelineno-0-1958">1958</a></span>
<span class="normal"><a href="#__codelineno-0-1959">1959</a></span>
<span class="normal"><a href="#__codelineno-0-1960">1960</a></span>
<span class="normal"><a href="#__codelineno-0-1961">1961</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-1761" name="__codelineno-0-1761"></a><span class="k">class</span><span class="w"> </span><span class="nc">ResidualVisitor</span><span class="p">(</span><span class="n">BoundBooleanExpressionVisitor</span><span class="p">[</span><span class="n">BooleanExpression</span><span class="p">],</span> <span class="n">ABC</span><span class="p">):</span>
<a id="__codelineno-0-1762" name="__codelineno-0-1762"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Finds the residuals for an Expression the partitions in the given PartitionSpec.</span>
<a id="__codelineno-0-1763" name="__codelineno-0-1763"></a>
<a id="__codelineno-0-1764" name="__codelineno-0-1764"></a><span class="sd"> A residual expression is made by partially evaluating an expression using partition values.</span>
<a id="__codelineno-0-1765" name="__codelineno-0-1765"></a><span class="sd"> For example, if a table is partitioned by day(utc_timestamp) and is read with a filter expression</span>
<a id="__codelineno-0-1766" name="__codelineno-0-1766"></a><span class="sd"> utc_timestamp &gt; a and utc_timestamp &lt; b, then there are 4 possible residuals expressions</span>
<a id="__codelineno-0-1767" name="__codelineno-0-1767"></a><span class="sd"> for the partition data, d:</span>
<a id="__codelineno-0-1768" name="__codelineno-0-1768"></a>
<a id="__codelineno-0-1769" name="__codelineno-0-1769"></a>
<a id="__codelineno-0-1770" name="__codelineno-0-1770"></a><span class="sd"> 1. If d &gt; day(a) and d &amp;lt; day(b), the residual is always true</span>
<a id="__codelineno-0-1771" name="__codelineno-0-1771"></a><span class="sd"> 2. If d == day(a) and d != day(b), the residual is utc_timestamp &gt; a</span>
<a id="__codelineno-0-1772" name="__codelineno-0-1772"></a><span class="sd"> 3. if d == day(b) and d != day(a), the residual is utc_timestamp &lt; b</span>
<a id="__codelineno-0-1773" name="__codelineno-0-1773"></a><span class="sd"> 4. If d == day(a) == day(b), the residual is utc_timestamp &gt; a and utc_timestamp &lt; b</span>
<a id="__codelineno-0-1774" name="__codelineno-0-1774"></a><span class="sd"> Partition data is passed using StructLike. Residuals are returned by residualFor(StructLike).</span>
<a id="__codelineno-0-1775" name="__codelineno-0-1775"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-1776" name="__codelineno-0-1776"></a>
<a id="__codelineno-0-1777" name="__codelineno-0-1777"></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span>
<a id="__codelineno-0-1778" name="__codelineno-0-1778"></a> <span class="n">spec</span><span class="p">:</span> <span class="n">PartitionSpec</span>
<a id="__codelineno-0-1779" name="__codelineno-0-1779"></a> <span class="n">case_sensitive</span><span class="p">:</span> <span class="nb">bool</span>
<a id="__codelineno-0-1780" name="__codelineno-0-1780"></a> <span class="n">expr</span><span class="p">:</span> <span class="n">BooleanExpression</span>
<a id="__codelineno-0-1781" name="__codelineno-0-1781"></a>
<a id="__codelineno-0-1782" name="__codelineno-0-1782"></a> <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">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">spec</span><span class="p">:</span> <span class="n">PartitionSpec</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">expr</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1783" name="__codelineno-0-1783"></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
<a id="__codelineno-0-1784" name="__codelineno-0-1784"></a> <span class="bp">self</span><span class="o">.</span><span class="n">spec</span> <span class="o">=</span> <span class="n">spec</span>
<a id="__codelineno-0-1785" name="__codelineno-0-1785"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span> <span class="o">=</span> <span class="n">case_sensitive</span>
<a id="__codelineno-0-1786" name="__codelineno-0-1786"></a> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span>
<a id="__codelineno-0-1787" name="__codelineno-0-1787"></a>
<a id="__codelineno-0-1788" name="__codelineno-0-1788"></a> <span class="k">def</span><span class="w"> </span><span class="nf">eval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partition_data</span><span class="p">:</span> <span class="n">Record</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1789" name="__codelineno-0-1789"></a> <span class="bp">self</span><span class="o">.</span><span class="n">struct</span> <span class="o">=</span> <span class="n">partition_data</span>
<a id="__codelineno-0-1790" name="__codelineno-0-1790"></a> <span class="k">return</span> <span class="n">visit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">visitor</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-1791" name="__codelineno-0-1791"></a>
<a id="__codelineno-0-1792" name="__codelineno-0-1792"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_true</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1793" name="__codelineno-0-1793"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1794" name="__codelineno-0-1794"></a>
<a id="__codelineno-0-1795" name="__codelineno-0-1795"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_false</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1796" name="__codelineno-0-1796"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1797" name="__codelineno-0-1797"></a>
<a id="__codelineno-0-1798" name="__codelineno-0-1798"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">child_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1799" name="__codelineno-0-1799"></a> <span class="k">return</span> <span class="n">Not</span><span class="p">(</span><span class="n">child_result</span><span class="p">)</span>
<a id="__codelineno-0-1800" name="__codelineno-0-1800"></a>
<a id="__codelineno-0-1801" name="__codelineno-0-1801"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_and</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1802" name="__codelineno-0-1802"></a> <span class="k">return</span> <span class="n">And</span><span class="p">(</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right_result</span><span class="p">)</span>
<a id="__codelineno-0-1803" name="__codelineno-0-1803"></a>
<a id="__codelineno-0-1804" name="__codelineno-0-1804"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_or</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">,</span> <span class="n">right_result</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1805" name="__codelineno-0-1805"></a> <span class="k">return</span> <span class="n">Or</span><span class="p">(</span><span class="n">left_result</span><span class="p">,</span> <span class="n">right_result</span><span class="p">)</span>
<a id="__codelineno-0-1806" name="__codelineno-0-1806"></a>
<a id="__codelineno-0-1807" name="__codelineno-0-1807"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_is_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1808" name="__codelineno-0-1808"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1809" name="__codelineno-0-1809"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1810" name="__codelineno-0-1810"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1811" name="__codelineno-0-1811"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1812" name="__codelineno-0-1812"></a>
<a id="__codelineno-0-1813" name="__codelineno-0-1813"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1814" name="__codelineno-0-1814"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1815" name="__codelineno-0-1815"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1816" name="__codelineno-0-1816"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1817" name="__codelineno-0-1817"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1818" name="__codelineno-0-1818"></a>
<a id="__codelineno-0-1819" name="__codelineno-0-1819"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_is_nan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1820" name="__codelineno-0-1820"></a> <span class="n">val</span> <span class="o">=</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span>
<a id="__codelineno-0-1821" name="__codelineno-0-1821"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">SupportsFloat</span><span class="p">)</span> <span class="ow">and</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
<a id="__codelineno-0-1822" name="__codelineno-0-1822"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1823" name="__codelineno-0-1823"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1824" name="__codelineno-0-1824"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1825" name="__codelineno-0-1825"></a>
<a id="__codelineno-0-1826" name="__codelineno-0-1826"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_nan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1827" name="__codelineno-0-1827"></a> <span class="n">val</span> <span class="o">=</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span>
<a id="__codelineno-0-1828" name="__codelineno-0-1828"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">SupportsFloat</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
<a id="__codelineno-0-1829" name="__codelineno-0-1829"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1830" name="__codelineno-0-1830"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1831" name="__codelineno-0-1831"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1832" name="__codelineno-0-1832"></a>
<a id="__codelineno-0-1833" name="__codelineno-0-1833"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_less_than</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1834" name="__codelineno-0-1834"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
<a id="__codelineno-0-1835" name="__codelineno-0-1835"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1836" name="__codelineno-0-1836"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1837" name="__codelineno-0-1837"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1838" name="__codelineno-0-1838"></a>
<a id="__codelineno-0-1839" name="__codelineno-0-1839"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_less_than_or_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1840" name="__codelineno-0-1840"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
<a id="__codelineno-0-1841" name="__codelineno-0-1841"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1842" name="__codelineno-0-1842"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1843" name="__codelineno-0-1843"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1844" name="__codelineno-0-1844"></a>
<a id="__codelineno-0-1845" name="__codelineno-0-1845"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_greater_than</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1846" name="__codelineno-0-1846"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
<a id="__codelineno-0-1847" name="__codelineno-0-1847"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1848" name="__codelineno-0-1848"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1849" name="__codelineno-0-1849"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1850" name="__codelineno-0-1850"></a>
<a id="__codelineno-0-1851" name="__codelineno-0-1851"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_greater_than_or_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1852" name="__codelineno-0-1852"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
<a id="__codelineno-0-1853" name="__codelineno-0-1853"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1854" name="__codelineno-0-1854"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1855" name="__codelineno-0-1855"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1856" name="__codelineno-0-1856"></a>
<a id="__codelineno-0-1857" name="__codelineno-0-1857"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1858" name="__codelineno-0-1858"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="o">==</span> <span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
<a id="__codelineno-0-1859" name="__codelineno-0-1859"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1860" name="__codelineno-0-1860"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1861" name="__codelineno-0-1861"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1862" name="__codelineno-0-1862"></a>
<a id="__codelineno-0-1863" name="__codelineno-0-1863"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_equal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1864" name="__codelineno-0-1864"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="o">!=</span> <span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
<a id="__codelineno-0-1865" name="__codelineno-0-1865"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1866" name="__codelineno-0-1866"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1867" name="__codelineno-0-1867"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1868" name="__codelineno-0-1868"></a>
<a id="__codelineno-0-1869" name="__codelineno-0-1869"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literals</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1870" name="__codelineno-0-1870"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="ow">in</span> <span class="n">literals</span><span class="p">:</span>
<a id="__codelineno-0-1871" name="__codelineno-0-1871"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1872" name="__codelineno-0-1872"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1873" name="__codelineno-0-1873"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1874" name="__codelineno-0-1874"></a>
<a id="__codelineno-0-1875" name="__codelineno-0-1875"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literals</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1876" name="__codelineno-0-1876"></a> <span class="k">if</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">literals</span><span class="p">:</span>
<a id="__codelineno-0-1877" name="__codelineno-0-1877"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_true</span><span class="p">()</span>
<a id="__codelineno-0-1878" name="__codelineno-0-1878"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1879" name="__codelineno-0-1879"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_false</span><span class="p">()</span>
<a id="__codelineno-0-1880" name="__codelineno-0-1880"></a>
<a id="__codelineno-0-1881" name="__codelineno-0-1881"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_starts_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1882" name="__codelineno-0-1882"></a> <span class="n">eval_res</span> <span class="o">=</span> <span class="n">term</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">struct</span><span class="p">)</span>
<a id="__codelineno-0-1883" name="__codelineno-0-1883"></a> <span class="k">if</span> <span class="n">eval_res</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">(</span><span class="n">eval_res</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">literal</span><span class="o">.</span><span class="n">value</span><span class="p">)):</span>
<a id="__codelineno-0-1884" name="__codelineno-0-1884"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1885" name="__codelineno-0-1885"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1886" name="__codelineno-0-1886"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1887" name="__codelineno-0-1887"></a>
<a id="__codelineno-0-1888" name="__codelineno-0-1888"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_not_starts_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">term</span><span class="p">:</span> <span class="n">BoundTerm</span><span class="p">[</span><span class="n">L</span><span class="p">],</span> <span class="n">literal</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1889" name="__codelineno-0-1889"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_starts_with</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">literal</span><span class="p">):</span>
<a id="__codelineno-0-1890" name="__codelineno-0-1890"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1891" name="__codelineno-0-1891"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1892" name="__codelineno-0-1892"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1893" name="__codelineno-0-1893"></a>
<a id="__codelineno-0-1894" name="__codelineno-0-1894"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1895" name="__codelineno-0-1895"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<a id="__codelineno-0-1896" name="__codelineno-0-1896"></a><span class="sd"> If there is no strict projection or if it evaluates to false, then return the predicate.</span>
<a id="__codelineno-0-1897" name="__codelineno-0-1897"></a>
<a id="__codelineno-0-1898" name="__codelineno-0-1898"></a><span class="sd"> Get the strict projection and inclusive projection of this predicate in partition data,</span>
<a id="__codelineno-0-1899" name="__codelineno-0-1899"></a><span class="sd"> then use them to determine whether to return the original predicate. The strict projection</span>
<a id="__codelineno-0-1900" name="__codelineno-0-1900"></a><span class="sd"> returns true iff the original predicate would have returned true, so the predicate can be</span>
<a id="__codelineno-0-1901" name="__codelineno-0-1901"></a><span class="sd"> eliminated if the strict projection evaluates to true. Similarly the inclusive projection</span>
<a id="__codelineno-0-1902" name="__codelineno-0-1902"></a><span class="sd"> returns false iff the original predicate would have returned false, so the predicate can</span>
<a id="__codelineno-0-1903" name="__codelineno-0-1903"></a><span class="sd"> also be eliminated if the inclusive projection evaluates to false.</span>
<a id="__codelineno-0-1904" name="__codelineno-0-1904"></a>
<a id="__codelineno-0-1905" name="__codelineno-0-1905"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-1906" name="__codelineno-0-1906"></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">spec</span><span class="o">.</span><span class="n">fields_by_source_id</span><span class="p">(</span><span class="n">predicate</span><span class="o">.</span><span class="n">term</span><span class="o">.</span><span class="n">ref</span><span class="p">()</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">field_id</span><span class="p">)</span>
<a id="__codelineno-0-1907" name="__codelineno-0-1907"></a> <span class="k">if</span> <span class="n">parts</span> <span class="o">==</span> <span class="p">[]:</span>
<a id="__codelineno-0-1908" name="__codelineno-0-1908"></a> <span class="k">return</span> <span class="n">predicate</span>
<a id="__codelineno-0-1909" name="__codelineno-0-1909"></a>
<a id="__codelineno-0-1910" name="__codelineno-0-1910"></a> <span class="k">def</span><span class="w"> </span><span class="nf">struct_to_schema</span><span class="p">(</span><span class="n">struct</span><span class="p">:</span> <span class="n">StructType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
<a id="__codelineno-0-1911" name="__codelineno-0-1911"></a> <span class="k">return</span> <span class="n">Schema</span><span class="p">(</span><span class="o">*</span><span class="n">struct</span><span class="o">.</span><span class="n">fields</span><span class="p">)</span>
<a id="__codelineno-0-1912" name="__codelineno-0-1912"></a>
<a id="__codelineno-0-1913" name="__codelineno-0-1913"></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">:</span>
<a id="__codelineno-0-1914" name="__codelineno-0-1914"></a> <span class="n">strict_projection</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">strict_project</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">predicate</span><span class="p">)</span>
<a id="__codelineno-0-1915" name="__codelineno-0-1915"></a> <span class="n">strict_result</span> <span class="o">=</span> <span class="kc">None</span>
<a id="__codelineno-0-1916" name="__codelineno-0-1916"></a>
<a id="__codelineno-0-1917" name="__codelineno-0-1917"></a> <span class="k">if</span> <span class="n">strict_projection</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1918" name="__codelineno-0-1918"></a> <span class="n">bound</span> <span class="o">=</span> <span class="n">strict_projection</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span>
<a id="__codelineno-0-1919" name="__codelineno-0-1919"></a> <span class="n">struct_to_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spec</span><span class="o">.</span><span class="n">partition_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)),</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span>
<a id="__codelineno-0-1920" name="__codelineno-0-1920"></a> <span class="p">)</span>
<a id="__codelineno-0-1921" name="__codelineno-0-1921"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bound</span><span class="p">,</span> <span class="n">BoundPredicate</span><span class="p">):</span>
<a id="__codelineno-0-1922" name="__codelineno-0-1922"></a> <span class="n">strict_result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">bound</span><span class="p">)</span>
<a id="__codelineno-0-1923" name="__codelineno-0-1923"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1924" name="__codelineno-0-1924"></a> <span class="c1"># if the result is not a predicate, then it must be a constant like alwaysTrue or alwaysFalse</span>
<a id="__codelineno-0-1925" name="__codelineno-0-1925"></a> <span class="n">strict_result</span> <span class="o">=</span> <span class="n">bound</span>
<a id="__codelineno-0-1926" name="__codelineno-0-1926"></a>
<a id="__codelineno-0-1927" name="__codelineno-0-1927"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">strict_result</span><span class="p">,</span> <span class="n">AlwaysTrue</span><span class="p">):</span>
<a id="__codelineno-0-1928" name="__codelineno-0-1928"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1929" name="__codelineno-0-1929"></a>
<a id="__codelineno-0-1930" name="__codelineno-0-1930"></a> <span class="n">inclusive_projection</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">project</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">predicate</span><span class="p">)</span>
<a id="__codelineno-0-1931" name="__codelineno-0-1931"></a> <span class="n">inclusive_result</span> <span class="o">=</span> <span class="kc">None</span>
<a id="__codelineno-0-1932" name="__codelineno-0-1932"></a> <span class="k">if</span> <span class="n">inclusive_projection</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1933" name="__codelineno-0-1933"></a> <span class="n">bound_inclusive</span> <span class="o">=</span> <span class="n">inclusive_projection</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span>
<a id="__codelineno-0-1934" name="__codelineno-0-1934"></a> <span class="n">struct_to_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spec</span><span class="o">.</span><span class="n">partition_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)),</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span>
<a id="__codelineno-0-1935" name="__codelineno-0-1935"></a> <span class="p">)</span>
<a id="__codelineno-0-1936" name="__codelineno-0-1936"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bound_inclusive</span><span class="p">,</span> <span class="n">BoundPredicate</span><span class="p">):</span>
<a id="__codelineno-0-1937" name="__codelineno-0-1937"></a> <span class="c1"># using predicate method specific to inclusive</span>
<a id="__codelineno-0-1938" name="__codelineno-0-1938"></a> <span class="n">inclusive_result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">bound_inclusive</span><span class="p">)</span>
<a id="__codelineno-0-1939" name="__codelineno-0-1939"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1940" name="__codelineno-0-1940"></a> <span class="c1"># if the result is not a predicate, then it must be a constant like alwaysTrue or</span>
<a id="__codelineno-0-1941" name="__codelineno-0-1941"></a> <span class="c1"># alwaysFalse</span>
<a id="__codelineno-0-1942" name="__codelineno-0-1942"></a> <span class="n">inclusive_result</span> <span class="o">=</span> <span class="n">bound_inclusive</span>
<a id="__codelineno-0-1943" name="__codelineno-0-1943"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inclusive_result</span><span class="p">,</span> <span class="n">AlwaysFalse</span><span class="p">):</span>
<a id="__codelineno-0-1944" name="__codelineno-0-1944"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1945" name="__codelineno-0-1945"></a>
<a id="__codelineno-0-1946" name="__codelineno-0-1946"></a> <span class="k">return</span> <span class="n">predicate</span>
<a id="__codelineno-0-1947" name="__codelineno-0-1947"></a>
<a id="__codelineno-0-1948" name="__codelineno-0-1948"></a> <span class="k">def</span><span class="w"> </span><span class="nf">visit_unbound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">UnboundPredicate</span><span class="p">[</span><span class="n">L</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1949" name="__codelineno-0-1949"></a> <span class="n">bound</span> <span class="o">=</span> <span class="n">predicate</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">)</span>
<a id="__codelineno-0-1950" name="__codelineno-0-1950"></a>
<a id="__codelineno-0-1951" name="__codelineno-0-1951"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bound</span><span class="p">,</span> <span class="n">BoundPredicate</span><span class="p">):</span>
<a id="__codelineno-0-1952" name="__codelineno-0-1952"></a> <span class="n">bound_residual</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="o">=</span><span class="n">bound</span><span class="p">)</span>
<a id="__codelineno-0-1953" name="__codelineno-0-1953"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bound_residual</span><span class="p">,</span> <span class="p">(</span><span class="n">AlwaysFalse</span><span class="p">,</span> <span class="n">AlwaysTrue</span><span class="p">)):</span>
<a id="__codelineno-0-1954" name="__codelineno-0-1954"></a> <span class="c1"># replace inclusive original unbound predicate</span>
<a id="__codelineno-0-1955" name="__codelineno-0-1955"></a> <span class="k">return</span> <span class="n">predicate</span>
<a id="__codelineno-0-1956" name="__codelineno-0-1956"></a>
<a id="__codelineno-0-1957" name="__codelineno-0-1957"></a> <span class="c1"># use the non-predicate residual (e.g. alwaysTrue)</span>
<a id="__codelineno-0-1958" name="__codelineno-0-1958"></a> <span class="k">return</span> <span class="n">bound_residual</span>
<a id="__codelineno-0-1959" name="__codelineno-0-1959"></a>
<a id="__codelineno-0-1960" name="__codelineno-0-1960"></a> <span class="c1"># if binding didn&#39;t result in a Predicate, return the expression</span>
<a id="__codelineno-0-1961" name="__codelineno-0-1961"></a> <span class="k">return</span> <span class="n">bound</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.expressions.visitors.ResidualVisitor.visit_bound_predicate" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span></code>
<a href="#pyiceberg.expressions.visitors.ResidualVisitor.visit_bound_predicate" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>If there is no strict projection or if it evaluates to false, then return the predicate.</p>
<p>Get the strict projection and inclusive projection of this predicate in partition data,
then use them to determine whether to return the original predicate. The strict projection
returns true iff the original predicate would have returned true, so the predicate can be
eliminated if the strict projection evaluates to true. Similarly the inclusive projection
returns false iff the original predicate would have returned false, so the predicate can
also be eliminated if the inclusive projection evaluates to false.</p>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1894">1894</a></span>
<span class="normal"><a href="#__codelineno-0-1895">1895</a></span>
<span class="normal"><a href="#__codelineno-0-1896">1896</a></span>
<span class="normal"><a href="#__codelineno-0-1897">1897</a></span>
<span class="normal"><a href="#__codelineno-0-1898">1898</a></span>
<span class="normal"><a href="#__codelineno-0-1899">1899</a></span>
<span class="normal"><a href="#__codelineno-0-1900">1900</a></span>
<span class="normal"><a href="#__codelineno-0-1901">1901</a></span>
<span class="normal"><a href="#__codelineno-0-1902">1902</a></span>
<span class="normal"><a href="#__codelineno-0-1903">1903</a></span>
<span class="normal"><a href="#__codelineno-0-1904">1904</a></span>
<span class="normal"><a href="#__codelineno-0-1905">1905</a></span>
<span class="normal"><a href="#__codelineno-0-1906">1906</a></span>
<span class="normal"><a href="#__codelineno-0-1907">1907</a></span>
<span class="normal"><a href="#__codelineno-0-1908">1908</a></span>
<span class="normal"><a href="#__codelineno-0-1909">1909</a></span>
<span class="normal"><a href="#__codelineno-0-1910">1910</a></span>
<span class="normal"><a href="#__codelineno-0-1911">1911</a></span>
<span class="normal"><a href="#__codelineno-0-1912">1912</a></span>
<span class="normal"><a href="#__codelineno-0-1913">1913</a></span>
<span class="normal"><a href="#__codelineno-0-1914">1914</a></span>
<span class="normal"><a href="#__codelineno-0-1915">1915</a></span>
<span class="normal"><a href="#__codelineno-0-1916">1916</a></span>
<span class="normal"><a href="#__codelineno-0-1917">1917</a></span>
<span class="normal"><a href="#__codelineno-0-1918">1918</a></span>
<span class="normal"><a href="#__codelineno-0-1919">1919</a></span>
<span class="normal"><a href="#__codelineno-0-1920">1920</a></span>
<span class="normal"><a href="#__codelineno-0-1921">1921</a></span>
<span class="normal"><a href="#__codelineno-0-1922">1922</a></span>
<span class="normal"><a href="#__codelineno-0-1923">1923</a></span>
<span class="normal"><a href="#__codelineno-0-1924">1924</a></span>
<span class="normal"><a href="#__codelineno-0-1925">1925</a></span>
<span class="normal"><a href="#__codelineno-0-1926">1926</a></span>
<span class="normal"><a href="#__codelineno-0-1927">1927</a></span>
<span class="normal"><a href="#__codelineno-0-1928">1928</a></span>
<span class="normal"><a href="#__codelineno-0-1929">1929</a></span>
<span class="normal"><a href="#__codelineno-0-1930">1930</a></span>
<span class="normal"><a href="#__codelineno-0-1931">1931</a></span>
<span class="normal"><a href="#__codelineno-0-1932">1932</a></span>
<span class="normal"><a href="#__codelineno-0-1933">1933</a></span>
<span class="normal"><a href="#__codelineno-0-1934">1934</a></span>
<span class="normal"><a href="#__codelineno-0-1935">1935</a></span>
<span class="normal"><a href="#__codelineno-0-1936">1936</a></span>
<span class="normal"><a href="#__codelineno-0-1937">1937</a></span>
<span class="normal"><a href="#__codelineno-0-1938">1938</a></span>
<span class="normal"><a href="#__codelineno-0-1939">1939</a></span>
<span class="normal"><a href="#__codelineno-0-1940">1940</a></span>
<span class="normal"><a href="#__codelineno-0-1941">1941</a></span>
<span class="normal"><a href="#__codelineno-0-1942">1942</a></span>
<span class="normal"><a href="#__codelineno-0-1943">1943</a></span>
<span class="normal"><a href="#__codelineno-0-1944">1944</a></span>
<span class="normal"><a href="#__codelineno-0-1945">1945</a></span>
<span class="normal"><a href="#__codelineno-0-1946">1946</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-1894" name="__codelineno-0-1894"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit_bound_predicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">BoundPredicate</span><span class="p">[</span><span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-1895" name="__codelineno-0-1895"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<a id="__codelineno-0-1896" name="__codelineno-0-1896"></a><span class="sd"> If there is no strict projection or if it evaluates to false, then return the predicate.</span>
<a id="__codelineno-0-1897" name="__codelineno-0-1897"></a>
<a id="__codelineno-0-1898" name="__codelineno-0-1898"></a><span class="sd"> Get the strict projection and inclusive projection of this predicate in partition data,</span>
<a id="__codelineno-0-1899" name="__codelineno-0-1899"></a><span class="sd"> then use them to determine whether to return the original predicate. The strict projection</span>
<a id="__codelineno-0-1900" name="__codelineno-0-1900"></a><span class="sd"> returns true iff the original predicate would have returned true, so the predicate can be</span>
<a id="__codelineno-0-1901" name="__codelineno-0-1901"></a><span class="sd"> eliminated if the strict projection evaluates to true. Similarly the inclusive projection</span>
<a id="__codelineno-0-1902" name="__codelineno-0-1902"></a><span class="sd"> returns false iff the original predicate would have returned false, so the predicate can</span>
<a id="__codelineno-0-1903" name="__codelineno-0-1903"></a><span class="sd"> also be eliminated if the inclusive projection evaluates to false.</span>
<a id="__codelineno-0-1904" name="__codelineno-0-1904"></a>
<a id="__codelineno-0-1905" name="__codelineno-0-1905"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-1906" name="__codelineno-0-1906"></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">spec</span><span class="o">.</span><span class="n">fields_by_source_id</span><span class="p">(</span><span class="n">predicate</span><span class="o">.</span><span class="n">term</span><span class="o">.</span><span class="n">ref</span><span class="p">()</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">field_id</span><span class="p">)</span>
<a id="__codelineno-0-1907" name="__codelineno-0-1907"></a> <span class="k">if</span> <span class="n">parts</span> <span class="o">==</span> <span class="p">[]:</span>
<a id="__codelineno-0-1908" name="__codelineno-0-1908"></a> <span class="k">return</span> <span class="n">predicate</span>
<a id="__codelineno-0-1909" name="__codelineno-0-1909"></a>
<a id="__codelineno-0-1910" name="__codelineno-0-1910"></a> <span class="k">def</span><span class="w"> </span><span class="nf">struct_to_schema</span><span class="p">(</span><span class="n">struct</span><span class="p">:</span> <span class="n">StructType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
<a id="__codelineno-0-1911" name="__codelineno-0-1911"></a> <span class="k">return</span> <span class="n">Schema</span><span class="p">(</span><span class="o">*</span><span class="n">struct</span><span class="o">.</span><span class="n">fields</span><span class="p">)</span>
<a id="__codelineno-0-1912" name="__codelineno-0-1912"></a>
<a id="__codelineno-0-1913" name="__codelineno-0-1913"></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">:</span>
<a id="__codelineno-0-1914" name="__codelineno-0-1914"></a> <span class="n">strict_projection</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">strict_project</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">predicate</span><span class="p">)</span>
<a id="__codelineno-0-1915" name="__codelineno-0-1915"></a> <span class="n">strict_result</span> <span class="o">=</span> <span class="kc">None</span>
<a id="__codelineno-0-1916" name="__codelineno-0-1916"></a>
<a id="__codelineno-0-1917" name="__codelineno-0-1917"></a> <span class="k">if</span> <span class="n">strict_projection</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1918" name="__codelineno-0-1918"></a> <span class="n">bound</span> <span class="o">=</span> <span class="n">strict_projection</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span>
<a id="__codelineno-0-1919" name="__codelineno-0-1919"></a> <span class="n">struct_to_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spec</span><span class="o">.</span><span class="n">partition_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)),</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span>
<a id="__codelineno-0-1920" name="__codelineno-0-1920"></a> <span class="p">)</span>
<a id="__codelineno-0-1921" name="__codelineno-0-1921"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bound</span><span class="p">,</span> <span class="n">BoundPredicate</span><span class="p">):</span>
<a id="__codelineno-0-1922" name="__codelineno-0-1922"></a> <span class="n">strict_result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">bound</span><span class="p">)</span>
<a id="__codelineno-0-1923" name="__codelineno-0-1923"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1924" name="__codelineno-0-1924"></a> <span class="c1"># if the result is not a predicate, then it must be a constant like alwaysTrue or alwaysFalse</span>
<a id="__codelineno-0-1925" name="__codelineno-0-1925"></a> <span class="n">strict_result</span> <span class="o">=</span> <span class="n">bound</span>
<a id="__codelineno-0-1926" name="__codelineno-0-1926"></a>
<a id="__codelineno-0-1927" name="__codelineno-0-1927"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">strict_result</span><span class="p">,</span> <span class="n">AlwaysTrue</span><span class="p">):</span>
<a id="__codelineno-0-1928" name="__codelineno-0-1928"></a> <span class="k">return</span> <span class="n">AlwaysTrue</span><span class="p">()</span>
<a id="__codelineno-0-1929" name="__codelineno-0-1929"></a>
<a id="__codelineno-0-1930" name="__codelineno-0-1930"></a> <span class="n">inclusive_projection</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">project</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">predicate</span><span class="p">)</span>
<a id="__codelineno-0-1931" name="__codelineno-0-1931"></a> <span class="n">inclusive_result</span> <span class="o">=</span> <span class="kc">None</span>
<a id="__codelineno-0-1932" name="__codelineno-0-1932"></a> <span class="k">if</span> <span class="n">inclusive_projection</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-1933" name="__codelineno-0-1933"></a> <span class="n">bound_inclusive</span> <span class="o">=</span> <span class="n">inclusive_projection</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span>
<a id="__codelineno-0-1934" name="__codelineno-0-1934"></a> <span class="n">struct_to_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spec</span><span class="o">.</span><span class="n">partition_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)),</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span>
<a id="__codelineno-0-1935" name="__codelineno-0-1935"></a> <span class="p">)</span>
<a id="__codelineno-0-1936" name="__codelineno-0-1936"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bound_inclusive</span><span class="p">,</span> <span class="n">BoundPredicate</span><span class="p">):</span>
<a id="__codelineno-0-1937" name="__codelineno-0-1937"></a> <span class="c1"># using predicate method specific to inclusive</span>
<a id="__codelineno-0-1938" name="__codelineno-0-1938"></a> <span class="n">inclusive_result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">visit_bound_predicate</span><span class="p">(</span><span class="n">bound_inclusive</span><span class="p">)</span>
<a id="__codelineno-0-1939" name="__codelineno-0-1939"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-1940" name="__codelineno-0-1940"></a> <span class="c1"># if the result is not a predicate, then it must be a constant like alwaysTrue or</span>
<a id="__codelineno-0-1941" name="__codelineno-0-1941"></a> <span class="c1"># alwaysFalse</span>
<a id="__codelineno-0-1942" name="__codelineno-0-1942"></a> <span class="n">inclusive_result</span> <span class="o">=</span> <span class="n">bound_inclusive</span>
<a id="__codelineno-0-1943" name="__codelineno-0-1943"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inclusive_result</span><span class="p">,</span> <span class="n">AlwaysFalse</span><span class="p">):</span>
<a id="__codelineno-0-1944" name="__codelineno-0-1944"></a> <span class="k">return</span> <span class="n">AlwaysFalse</span><span class="p">()</span>
<a id="__codelineno-0-1945" name="__codelineno-0-1945"></a>
<a id="__codelineno-0-1946" name="__codelineno-0-1946"></a> <span class="k">return</span> <span class="n">predicate</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.expressions.visitors.bind" class="doc doc-heading">
<code class="highlight language-python"><span class="n">bind</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="p">)</span></code>
<a href="#pyiceberg.expressions.visitors.bind" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Travers over an expression to bind the predicates to the schema.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>schema</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="Schema (pyiceberg.schema.Schema)" href="../../schema/#pyiceberg.schema.Schema">Schema</a></code>
</td>
<td>
<div class="doc-md-description">
<p>A schema to use when binding the expression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>expression</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="BooleanExpression (pyiceberg.expressions.BooleanExpression)" href="../#pyiceberg.expressions.BooleanExpression">BooleanExpression</a></code>
</td>
<td>
<div class="doc-md-description">
<p>An expression containing UnboundPredicates that can be bound.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>case_sensitive</code>
</td>
<td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Whether to consider case when binding a reference to a field in a schema, defaults to True.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="TypeError">TypeError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>In the case a predicate is already bound.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-203">203</a></span>
<span class="normal"><a href="#__codelineno-0-204">204</a></span>
<span class="normal"><a href="#__codelineno-0-205">205</a></span>
<span class="normal"><a href="#__codelineno-0-206">206</a></span>
<span class="normal"><a href="#__codelineno-0-207">207</a></span>
<span class="normal"><a href="#__codelineno-0-208">208</a></span>
<span class="normal"><a href="#__codelineno-0-209">209</a></span>
<span class="normal"><a href="#__codelineno-0-210">210</a></span>
<span class="normal"><a href="#__codelineno-0-211">211</a></span>
<span class="normal"><a href="#__codelineno-0-212">212</a></span>
<span class="normal"><a href="#__codelineno-0-213">213</a></span>
<span class="normal"><a href="#__codelineno-0-214">214</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="k">def</span><span class="w"> </span><span class="nf">bind</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BooleanExpression</span><span class="p">:</span>
<a id="__codelineno-0-204" name="__codelineno-0-204"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Travers over an expression to bind the predicates to the schema.</span>
<a id="__codelineno-0-205" name="__codelineno-0-205"></a>
<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="sd"> schema (Schema): A schema to use when binding the expression.</span>
<a id="__codelineno-0-208" name="__codelineno-0-208"></a><span class="sd"> expression (BooleanExpression): An expression containing UnboundPredicates that can be bound.</span>
<a id="__codelineno-0-209" name="__codelineno-0-209"></a><span class="sd"> case_sensitive (bool): Whether to consider case when binding a reference to a field in a schema, defaults to True.</span>
<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-212" name="__codelineno-0-212"></a><span class="sd"> TypeError: In the case a predicate is already bound.</span>
<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="k">return</span> <span class="n">visit</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">BindVisitor</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="p">))</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.expressions.visitors.expression_to_plain_format" class="doc doc-heading">
<code class="highlight language-python"><span class="n">expression_to_plain_format</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">cast_int_to_datetime</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
<a href="#pyiceberg.expressions.visitors.expression_to_plain_format" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Format a Disjunctive Normal Form expression.</p>
<p>These are the formats that the expression can be fed into:</p>
<ul>
<li>https://arrow.apache.org/docs/python/generated/pyarrow.parquet.read_table.html</li>
<li>https://docs.dask.org/en/stable/generated/dask.dataframe.read_parquet.html</li>
</ul>
<p>Contrary to normal DNF that may contain Not expressions, but here they should have
been rewritten. This can be done using <code>rewrite_not(...)</code>.</p>
<p>Keep in mind that this is only used for page skipping, and still needs to filter
on a row level.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>expressions</code>
</td>
<td>
<code><span title="typing.Tuple">Tuple</span>[<a class="autorefs autorefs-internal" title="BooleanExpression (pyiceberg.expressions.BooleanExpression)" href="../#pyiceberg.expressions.BooleanExpression">BooleanExpression</a>, ...]</code>
</td>
<td>
<div class="doc-md-description">
<p>Expression in Disjunctive Normal Form.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.List">List</span>[<span title="typing.List">List</span>[<span title="typing.Tuple">Tuple</span>[<span title="str">str</span>, <span title="str">str</span>, <span title="typing.Any">Any</span>]]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Formatter filter compatible with Dask and PyArrow.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1093">1093</a></span>
<span class="normal"><a href="#__codelineno-0-1094">1094</a></span>
<span class="normal"><a href="#__codelineno-0-1095">1095</a></span>
<span class="normal"><a href="#__codelineno-0-1096">1096</a></span>
<span class="normal"><a href="#__codelineno-0-1097">1097</a></span>
<span class="normal"><a href="#__codelineno-0-1098">1098</a></span>
<span class="normal"><a href="#__codelineno-0-1099">1099</a></span>
<span class="normal"><a href="#__codelineno-0-1100">1100</a></span>
<span class="normal"><a href="#__codelineno-0-1101">1101</a></span>
<span class="normal"><a href="#__codelineno-0-1102">1102</a></span>
<span class="normal"><a href="#__codelineno-0-1103">1103</a></span>
<span class="normal"><a href="#__codelineno-0-1104">1104</a></span>
<span class="normal"><a href="#__codelineno-0-1105">1105</a></span>
<span class="normal"><a href="#__codelineno-0-1106">1106</a></span>
<span class="normal"><a href="#__codelineno-0-1107">1107</a></span>
<span class="normal"><a href="#__codelineno-0-1108">1108</a></span>
<span class="normal"><a href="#__codelineno-0-1109">1109</a></span>
<span class="normal"><a href="#__codelineno-0-1110">1110</a></span>
<span class="normal"><a href="#__codelineno-0-1111">1111</a></span>
<span class="normal"><a href="#__codelineno-0-1112">1112</a></span>
<span class="normal"><a href="#__codelineno-0-1113">1113</a></span>
<span class="normal"><a href="#__codelineno-0-1114">1114</a></span>
<span class="normal"><a href="#__codelineno-0-1115">1115</a></span>
<span class="normal"><a href="#__codelineno-0-1116">1116</a></span>
<span class="normal"><a href="#__codelineno-0-1117">1117</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-1093" name="__codelineno-0-1093"></a><span class="k">def</span><span class="w"> </span><span class="nf">expression_to_plain_format</span><span class="p">(</span>
<a id="__codelineno-0-1094" name="__codelineno-0-1094"></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">BooleanExpression</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span> <span class="n">cast_int_to_datetime</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
<a id="__codelineno-0-1095" name="__codelineno-0-1095"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]]:</span>
<a id="__codelineno-0-1096" name="__codelineno-0-1096"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Format a Disjunctive Normal Form expression.</span>
<a id="__codelineno-0-1097" name="__codelineno-0-1097"></a>
<a id="__codelineno-0-1098" name="__codelineno-0-1098"></a><span class="sd"> These are the formats that the expression can be fed into:</span>
<a id="__codelineno-0-1099" name="__codelineno-0-1099"></a>
<a id="__codelineno-0-1100" name="__codelineno-0-1100"></a><span class="sd"> - https://arrow.apache.org/docs/python/generated/pyarrow.parquet.read_table.html</span>
<a id="__codelineno-0-1101" name="__codelineno-0-1101"></a><span class="sd"> - https://docs.dask.org/en/stable/generated/dask.dataframe.read_parquet.html</span>
<a id="__codelineno-0-1102" name="__codelineno-0-1102"></a>
<a id="__codelineno-0-1103" name="__codelineno-0-1103"></a><span class="sd"> Contrary to normal DNF that may contain Not expressions, but here they should have</span>
<a id="__codelineno-0-1104" name="__codelineno-0-1104"></a><span class="sd"> been rewritten. This can be done using ``rewrite_not(...)``.</span>
<a id="__codelineno-0-1105" name="__codelineno-0-1105"></a>
<a id="__codelineno-0-1106" name="__codelineno-0-1106"></a><span class="sd"> Keep in mind that this is only used for page skipping, and still needs to filter</span>
<a id="__codelineno-0-1107" name="__codelineno-0-1107"></a><span class="sd"> on a row level.</span>
<a id="__codelineno-0-1108" name="__codelineno-0-1108"></a>
<a id="__codelineno-0-1109" name="__codelineno-0-1109"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-1110" name="__codelineno-0-1110"></a><span class="sd"> expressions: Expression in Disjunctive Normal Form.</span>
<a id="__codelineno-0-1111" name="__codelineno-0-1111"></a>
<a id="__codelineno-0-1112" name="__codelineno-0-1112"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-1113" name="__codelineno-0-1113"></a><span class="sd"> Formatter filter compatible with Dask and PyArrow.</span>
<a id="__codelineno-0-1114" name="__codelineno-0-1114"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-1115" name="__codelineno-0-1115"></a> <span class="c1"># In the form of expr1 ∨ expr2 ∨ ... ∨ exprN</span>
<a id="__codelineno-0-1116" name="__codelineno-0-1116"></a> <span class="n">visitor</span> <span class="o">=</span> <span class="n">ExpressionToPlainFormat</span><span class="p">(</span><span class="n">cast_int_to_datetime</span><span class="p">)</span>
<a id="__codelineno-0-1117" name="__codelineno-0-1117"></a> <span class="k">return</span> <span class="p">[</span><span class="n">visit</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">visitor</span><span class="p">)</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.expressions.visitors.visit" class="doc doc-heading">
<code class="highlight language-python"><span class="n">visit</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">visitor</span><span class="p">)</span></code>
<a href="#pyiceberg.expressions.visitors.visit" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Apply a boolean expression visitor to any point within an expression.</p>
<p>The function traverses the expression in post-order fashion.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>obj</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="BooleanExpression (pyiceberg.expressions.BooleanExpression)" href="../#pyiceberg.expressions.BooleanExpression">BooleanExpression</a></code>
</td>
<td>
<div class="doc-md-description">
<p>An instance of a BooleanExpression.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>visitor</code>
</td>
<td>
<code><a class="autorefs autorefs-internal" title="BooleanExpressionVisitor (pyiceberg.expressions.visitors.BooleanExpressionVisitor)" href="#pyiceberg.expressions.visitors.BooleanExpressionVisitor">BooleanExpressionVisitor</a>[<span title="pyiceberg.expressions.visitors.T">T</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>An instance of an implementation of the generic BooleanExpressionVisitor base class.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="NotImplementedError">NotImplementedError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>If attempting to visit an unsupported expression.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>pyiceberg/expressions/visitors.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-140">140</a></span>
<span class="normal"><a href="#__codelineno-0-141">141</a></span>
<span class="normal"><a href="#__codelineno-0-142">142</a></span>
<span class="normal"><a href="#__codelineno-0-143">143</a></span>
<span class="normal"><a href="#__codelineno-0-144">144</a></span>
<span class="normal"><a href="#__codelineno-0-145">145</a></span>
<span class="normal"><a href="#__codelineno-0-146">146</a></span>
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
<span class="normal"><a href="#__codelineno-0-148">148</a></span>
<span class="normal"><a href="#__codelineno-0-149">149</a></span>
<span class="normal"><a href="#__codelineno-0-150">150</a></span>
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
<span class="normal"><a href="#__codelineno-0-152">152</a></span>
<span class="normal"><a href="#__codelineno-0-153">153</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="nd">@singledispatch</span>
<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="k">def</span><span class="w"> </span><span class="nf">visit</span><span class="p">(</span><span class="n">obj</span><span class="p">:</span> <span class="n">BooleanExpression</span><span class="p">,</span> <span class="n">visitor</span><span class="p">:</span> <span class="n">BooleanExpressionVisitor</span><span class="p">[</span><span class="n">T</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply a boolean expression visitor to any point within an expression.</span>
<a id="__codelineno-0-143" name="__codelineno-0-143"></a>
<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> The function traverses the expression in post-order fashion.</span>
<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> obj (BooleanExpression): An instance of a BooleanExpression.</span>
<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> visitor (BooleanExpressionVisitor[T]): An instance of an implementation of the generic BooleanExpressionVisitor base class.</span>
<a id="__codelineno-0-149" name="__codelineno-0-149"></a>
<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> NotImplementedError: If attempting to visit an unsupported expression.</span>
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot visit unsupported expression: </span><span class="si">{</span><span class="n">obj</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../../..", "features": ["navigation.top", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "content.code.copy"], "search": "../../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
</html>