dossett opened a new pull request, #3655:
URL: https://github.com/apache/iceberg-python/pull/3655

   <p dir="auto" style="box-sizing: border-box; margin-top: 0px !important; 
margin-bottom: 16px; color: rgb(240, 246, 252); font-family: &quot;Mona Sans 
VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; 
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;"><em style="box-sizing: border-box;">I used 
CODEX to analyze this problem and create this PR. I've reviewed the code and 
test and stand by them. This summary is written completely by a human (me) 
other than very light copy editing by an
  LLM.</em></p><p dir="auto" style="box-sizing: border-box; margin-top: 0px; 
margin-bottom: 16px; color: rgb(240, 246, 252); font-family: &quot;Mona Sans 
VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; 
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">Profiling with py-spy showed that a great deal 
of time was being spent constructing the<span> </span><code class="notranslate" 
style="box-sizing: border-box; font-family: &quot;Monaspace Neon&quot;, 
ui-monospace, SFMono-Regular, &quo
 t;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace; 
font-size: 11.9px; tab-size: 4; white-space: break-spaces; background-color: 
rgba(101, 108, 118, 0.2); border-radius: 6px; margin: 0px; padding: 0.2em 
0.4em;">_InclusiveMetricsEvaluator</code><span> </span>object. This object is 
used to interpret file statistics and determine whether a file might contain 
rows matching the scan predicate.</p><p dir="auto" style="box-sizing: 
border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(240, 246, 252); 
font-family: &quot;Mona Sans VF&quot;, -apple-system, &quot;system-ui&quot;, 
&quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, 
&quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; 
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; 
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; 
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; 
-webkit-text-stroke
 -width: 0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">This PR does two things:</p><ul dir="auto" 
style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; padding: 
0px; position: relative; color: rgb(240, 246, 252); font-family: &quot;Mona 
Sans VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; 
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;"><li style="box-
 sizing: border-box; margin-left: 24px;">Allows reuse of the same object for 
different files within the same manifest</li><li style="box-sizing: border-box; 
margin-top: 0.25em; margin-left: 24px;">Lazily constructs the object so that 
it's only constructed if it's actually needed</li></ul><p dir="auto" 
style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: 
rgb(240, 246, 252); font-family: &quot;Mona Sans VF&quot;, -apple-system, 
&quot;system-ui&quot;, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, 
Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; 
font-size: 14px; font-style: normal; font-variant-ligatures: normal; 
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 
2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; 
word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; 
background-color: rgb(13, 17, 23); text-decoration-thickness: initial; 
text-decoration-style: in
 itial; text-decoration-color: initial;">CODEX summary follows:</p><hr 
style="box-sizing: border-box; height: 0.25em; overflow: hidden; border: 0px; 
background: 0px 0px rgb(61, 68, 77); margin: 24px 0px; padding: 0px; 
font-family: &quot;Mona Sans VF&quot;, -apple-system, &quot;system-ui&quot;, 
&quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, 
&quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; 
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; 
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; 
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: 
initial; text-decoration-style: initial; text-decoration-color: initial;"><p 
dir="auto" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; 
color: rgb(240, 246, 252); font-family: &quot;Mona Sans VF&quot;, 
-apple-system, &quot;system
 -ui&quot;, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, 
sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; 
font-size: 14px; font-style: normal; font-variant-ligatures: normal; 
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 
2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; 
word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; 
background-color: rgb(13, 17, 23); text-decoration-thickness: initial; 
text-decoration-style: initial; text-decoration-color: initial;">Local scan 
planning applies Iceberg file metrics after partition filtering to determine 
whether each data file might contain matching rows. PyIceberg currently 
rebuilds the schema struct and rebinds the scan predicate every time that 
metrics evaluator is called. For manifests with many files, this repeats 
identical setup work and can dominate planning time.</p><p dir="auto" 
style="box-sizing: border-box; margin-top: 0px;
  margin-bottom: 16px; color: rgb(240, 246, 252); font-family: &quot;Mona Sans 
VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; 
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">This change reuses one<span> </span><code 
class="notranslate" style="box-sizing: border-box; font-family: &quot;Monaspace 
Neon&quot;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, 
&quot;Liberation Mono&quot;, monospace; font-size: 11.9px; tab-size: 4; 
white-space: break-spaces; backgro
 und-color: rgba(101, 108, 118, 0.2); border-radius: 6px; margin: 0px; padding: 
0.2em 0.4em;">_InclusiveMetricsEvaluator</code><span> </span>within each 
manifest task. The evaluator is initialized lazily when the first file survives 
partition filtering, then reused across that manifest's sequential entries. 
Each manifest receives a separate closure and evaluator, so the mutable 
file-metrics state is never shared across worker threads.</p><h2 dir="auto" 
style="box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; 
font-size: 1.5em; font-weight: 600; line-height: 1.25; border-bottom: 1px solid 
rgba(61, 68, 77, 0.7); padding-bottom: 0.3em; color: rgb(240, 246, 252); 
font-family: &quot;Mona Sans VF&quot;, -apple-system, &quot;system-ui&quot;, 
&quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, 
&quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: 
normal; orp
 hans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; 
word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; 
background-color: rgb(13, 17, 23); text-decoration-thickness: initial; 
text-decoration-style: initial; text-decoration-color: 
initial;">Performance</h2><p dir="auto" style="box-sizing: border-box; 
margin-top: 0px; margin-bottom: 16px; color: rgb(240, 246, 252); font-family: 
&quot;Mona Sans VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe 
UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple 
Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: 
normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 
400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decor
 ation-style: initial; text-decoration-color: initial;">The focused benchmark 
evaluates 1,000 files from one manifest-shaped batch using a 102-column schema 
and a 66-leaf predicate. Results are the mean of three in-process 
runs:</p><markdown-accessiblity-table data-catalyst="" style="box-sizing: 
border-box; display: block; color: rgb(240, 246, 252); font-family: &quot;Mona 
Sans VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; 
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">
   Revision | Mean | Best
   -- | -- | --
   main | 1.491 s | 1.467 s
   This PR | 0.105 s | 0.104 s
   
   </markdown-accessiblity-table><p dir="auto" style="box-sizing: border-box; 
margin-top: 0px; margin-bottom: 16px; color: rgb(240, 246, 252); font-family: 
&quot;Mona Sans VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe 
UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple 
Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: 
normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 
400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">That is approximately<span> </span><strong 
style="box-sizing: border-box; font-weight: 600;">14.2x faster</strong><span> 
</span>for the isolated metrics-evaluation hot path.</p><p dir="auto" 
style="box-sizing: bord
 er-box; margin-top: 0px; margin-bottom: 16px; color: rgb(240, 246, 252); 
font-family: &quot;Mona Sans VF&quot;, -apple-system, &quot;system-ui&quot;, 
&quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, 
&quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; 
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; 
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; 
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(13, 
17, 23); text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">The benchmark includes evaluator construction 
and file-metrics evaluation, but excludes catalog access, manifest I/O, 
partition filtering, residual computation, and downstream data reads. It is not 
an end-to-end query-runtime claim.</p><h2 dir="auto" style="box-sizing: 
border-box; mar
 gin-top: 24px; margin-bottom: 16px; font-size: 1.5em; font-weight: 600; 
line-height: 1.25; border-bottom: 1px solid rgba(61, 68, 77, 0.7); 
padding-bottom: 0.3em; color: rgb(240, 246, 252); font-family: &quot;Mona Sans 
VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: 
normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; 
widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: 
normal; background-color: rgb(13, 17, 23); text-decoration-thickness: initial; 
text-decoration-style: initial; text-decoration-color: 
initial;">Testing</h2><ul dir="auto" style="box-sizing: border-box; margin-top: 
0px; margin-bottom: 16px; padding: 0px; position: relative; color: rgb(240, 
246, 252); font-family: &quot;Mona Sans VF&quot;, -apple-s
 ystem, &quot;system-ui&quot;, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, 
Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI 
Emoji&quot;; font-size: 14px; font-style: normal; font-variant-ligatures: 
normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; 
orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 
2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; 
background-color: rgb(13, 17, 23); text-decoration-thickness: initial; 
text-decoration-style: initial; text-decoration-color: initial;"><li 
style="box-sizing: border-box; margin-left: 24px;">Added coverage proving a 
callable constructs one evaluator and reuses it across files.</li><li 
style="box-sizing: border-box; margin-top: 0.25em; margin-left: 24px;">Added 
coverage proving separate callables receive separate evaluator 
instances.</li><li style="box-sizing: border-box; margin-top: 0.25em; 
margin-left: 24px;">Added coverage proving re
 used evaluators replace their mutable bounds and count state between files, 
including files with missing metrics.</li><li style="box-sizing: border-box; 
margin-top: 0.25em; margin-left: 24px;">Added a reproducible focused 
benchmark.</li><li style="box-sizing: border-box; margin-top: 0.25em; 
margin-left: 24px;">Planner and evaluator tests: 182 passed.</li><li 
style="box-sizing: border-box; margin-top: 0.25em; margin-left: 24px;">Full 
unit suite: 3,767 passed, 1,561 deselected.</li><li style="box-sizing: 
border-box; margin-top: 0.25em; margin-left: 24px;">All repository hooks pass, 
including Ruff, mypy, pydocstyle, codespell, and lockfile 
validation.</li></ul><p dir="auto" style="box-sizing: border-box; margin-top: 
0px; margin-bottom: 16px; color: rgb(240, 246, 252); font-family: &quot;Mona 
Sans VF&quot;, -apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, 
&quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color 
Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size:
  14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: 
normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: 
start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(13, 
17, 23); text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">There are no API or result-semantics 
changes.</p><h2 dir="auto" style="box-sizing: border-box; margin-top: 24px; 
margin-bottom: 16px; font-size: 1.5em; font-weight: 600; line-height: 1.25; 
border-bottom: 1px solid rgba(61, 68, 77, 0.7); padding-bottom: 0.3em; color: 
rgb(240, 246, 252); font-family: &quot;Mona Sans VF&quot;, -apple-system, 
&quot;system-ui&quot;, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, 
Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; 
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; 
le
 tter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); 
text-decoration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">AI assistance</h2><p dir="auto" 
style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px !important; 
color: rgb(240, 246, 252); font-family: &quot;Mona Sans VF&quot;, 
-apple-system, &quot;system-ui&quot;, &quot;Segoe UI&quot;, &quot;Noto 
Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, 
&quot;Segoe UI Emoji&quot;; font-size: 14px; font-style: normal; 
font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; 
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; 
text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 
0px; white-space: normal; background-color: rgb(13, 17, 23); text-deco
 ration-thickness: initial; text-decoration-style: initial; 
text-decoration-color: initial;">Codex assisted with implementation, test 
scaffolding, benchmark design, validation, and PR drafting.</p>
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to