break[array]: Remove unimplemented child() method from VTable implementations#8870
Conversation
Both Patched and PythonVTable overrode VTable::child with behavior identical to the trait default: all four Patched slots are required (always Some), so the default idx-th non-None slot lookup returns exactly slots[idx], and PythonArray has no slots with nchildren() == 0, so its panicking override was unreachable behind the idx < nchildren guard in every caller. Signed-off-by: Claude <noreply@anthropic.com> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbjnDVZQ9KqXgAAhxy9g7D
Merging this PR will not alter performance
Comparing Footnotes
|
Every encoding used the default "idx-th non-None slot" definition, so the trait method was not a real customization point. Inline that definition into the DynArrayData children/nth_child/named_children implementations and drop the method from the vtable. Signed-off-by: Claude <noreply@anthropic.com> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbjnDVZQ9KqXgAAhxy9g7D
Polar Signals Profiling ResultsLatest Run
Previous Runs (5)
Powered by Polar Signals Cloud |
Benchmarks: Vortex queries 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.245x ❌, 0↑ 2↓)
datafusion / parquet (1.173x ❌, 0↑ 1↓)
duckdb / vortex-file-compressed (1.124x ❌, 0↑ 2↓)
duckdb / parquet (1.046x ➖, 0↑ 0↓)
No file size changes detected. |
Same treatment as VTable::child: the only override (PythonVTable) matched the default, so the method was not a real customization point. Signed-off-by: Claude <noreply@anthropic.com> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbjnDVZQ9KqXgAAhxy9g7D
children/nchildren/nth_child/named_children no longer need the encoding vtable: implement them directly on ArrayRef over a single children_iter helper (the non-None slots in order) and drop them from DynArrayData. Only children_names still dispatches, for VTable::child_name. Signed-off-by: Claude <noreply@anthropic.com> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbjnDVZQ9KqXgAAhxy9g7D
d39327e to
83dbd9d
Compare
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 1.047x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (1.047x ➖, 0↑ 3↓)
No file size changes detected. |
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.926x ➖, 4↑ 0↓)
datafusion / vortex-compact (0.921x ➖, 1↑ 0↓)
datafusion / parquet (0.899x ✅, 5↑ 0↓)
duckdb / vortex-file-compressed (0.945x ➖, 2↑ 0↓)
duckdb / vortex-compact (0.932x ➖, 1↑ 0↓)
duckdb / parquet (0.943x ➖, 0↑ 0↓)
No file size changes detected. |
The default child_name was just slot_name of the idx-th non-None slot, and the only override (PythonVTable) was unreachable. children_names now lives on ArrayRef next to the other child accessors, leaving slot_name as the single vtable source of child names. named_children stays as the public zip of children_names and children_iter for its external users. Signed-off-by: Claude <noreply@anthropic.com> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbjnDVZQ9KqXgAAhxy9g7D
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.041x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.996x ➖, 0↑ 0↓)
datafusion / parquet (1.002x ➖, 1↑ 0↓)
datafusion / arrow (1.042x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed (0.999x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.008x ➖, 0↑ 0↓)
duckdb / parquet (0.964x ➖, 4↑ 1↓)
duckdb / duckdb (0.969x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.995x ➖, 2↑ 0↓)
datafusion / vortex-compact (0.962x ➖, 17↑ 0↓)
datafusion / parquet (1.007x ➖, 1↑ 4↓)
duckdb / vortex-file-compressed (0.968x ➖, 14↑ 0↓)
duckdb / vortex-compact (0.991x ➖, 5↑ 2↓)
duckdb / parquet (1.006x ➖, 2↑ 2↓)
duckdb / duckdb (1.007x ➖, 1↑ 2↓)
No file size changes detected. |
Benchmarks: FineWeb S3 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.911x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.996x ➖, 0↑ 0↓)
datafusion / parquet (1.004x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.037x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.052x ➖, 0↑ 1↓)
duckdb / parquet (0.970x ➖, 0↑ 0↓)
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (1.017x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.012x ➖, 0↑ 0↓)
duckdb / parquet (1.014x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.871x ✅, 8↑ 1↓)
datafusion / parquet (0.866x ✅, 8↑ 0↓)
duckdb / vortex-file-compressed (0.876x ✅, 8↑ 0↓)
duckdb / parquet (0.892x ✅, 3↑ 0↓)
duckdb / duckdb (0.906x ➖, 3↑ 0↓)
File Size Changes (201 files changed, +0.0% overall, 102↑ 99↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.004x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.994x ➖, 0↑ 0↓)
datafusion / parquet (0.993x ➖, 0↑ 0↓)
datafusion / arrow (0.983x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.994x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.991x ➖, 0↑ 0↓)
duckdb / parquet (0.995x ➖, 0↑ 0↓)
duckdb / duckdb (0.997x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.994x ➖, 2↑ 1↓)
datafusion / parquet (0.997x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (0.992x ➖, 0↑ 2↓)
duckdb / parquet (0.996x ➖, 0↑ 1↓)
duckdb / duckdb (0.996x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.990x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.971x ➖, 1↑ 0↓)
datafusion / parquet (1.029x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (0.982x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.019x ➖, 0↑ 0↓)
duckdb / parquet (0.978x ➖, 0↑ 0↓)
|
Benchmarks: Appian on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.950x ➖, 0↑ 0↓)
datafusion / parquet (0.940x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.957x ➖, 0↑ 0↓)
duckdb / parquet (0.965x ➖, 0↑ 0↓)
duckdb / duckdb (0.956x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=10 on S3 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.035x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.981x ➖, 0↑ 0↓)
datafusion / parquet (1.016x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.034x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.035x ➖, 0↑ 0↓)
duckdb / parquet (1.039x ➖, 0↑ 0↓)
|
Benchmarks: Random Access 📖Vortex (geomean): 0.980x ➖ How to read Verdict and Engines
unknown / unknown (0.984x ➖, 0↑ 0↓)
|
Benchmarks: Compression 📖Vortex (geomean): 1.004x ➖ How to read Verdict and Engines
unknown / unknown (1.002x ➖, 0↑ 2↓)
|
Remove unneeded methods
childandnchildrenfrom the vtable these always have a default impl and so are uneeded.Break
While this is a VTable break it likely used outside of vortex.