You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add the four parent-reduction rules that push an `Eval` into the operator
below it, and drive them from a top-down optimizer:
Eval x Concat push into every chunk, unless the expression reads
row indices, which are relative to the whole domain
Eval x Take evaluate over dictionary values instead of codes, only
when the expression is strict, infallible, and boolean
Eval x Pack partition per field, push each partition into its field,
and prune fields the expression never reads
Eval x RowIdx partition between generated row indices and the data
child, evaluating each independently
Two operators support the row-index rule: `RowIdxValues` generates global
row indices over a domain, and `RowIdxPartition` pairs an independently
evaluated row-index branch with a data branch.
The optimizer becomes top-down, driven from `Eval` nodes. A rewrite can
leave a residual expression above the same operator kind, so the driver
tracks the child it just reduced and does not immediately re-fire the same
rule on that residual. This replaces the bottom-up rewriter, whose two
rules (identity elimination and expression fusion) are subsumed by it.
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012obBhJ8oPZoBbKyeS79yMv
0 commit comments