Skip to content

IN LIST: treat signed zeros as equal - #25186

Merged
alamb merged 9 commits into
apache:mainfrom
geoffreyclaude:codex/in-list-signed-zero
Nov 7, 2026
Merged

alamb merged 9 commits into
apache:mainfrom
geoffreyclaude:codex/in-list-signed-zero

Conversation

@geoffreyclaude

@geoffreyclaude geoffreyclaude commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

DataFusion equality treats +0.0 and -0.0 as equal, but the optimized IN filters compare or hash floating-point bit patterns. Because the two zeros have different encodings, an IN predicate could therefore return a different result depending on whether the optimizer retained it or rewrote it into equality comparisons.

This signed-zero limitation predates the IN-list optimization epic #19241: #7378 already used bit-pattern equality for floating-point membership in August 2023. #22835 corrected ordinary comparisons in June 2026 but did not fix IN membership. This PR addresses that remaining correctness gap.

This PR makes Float16, Float32, and Float64 IN predicates, including floats inside nested and encoded values, follow the same signed-zero equality as ordinary comparisons. The shared static-filter factory adds the missing zero encoding before choosing a primitive filter. Strategy selection uses the expanded physical non-null list length, so both encodings count toward the existing cutoffs. Generic static filters and non-static lists use the shared normalize_floats and recursive ScalarValue::normalize APIs before comparison. Distinct NaN payloads remain distinct, preserving the existing bit-equality behavior for NaNs.

What changes are included in this PR?

  • Add the missing signed-zero encoding once in the shared static-filter factory, after flattening dictionary lists.
  • Select branchless, bitmap, or hash-set lookup using the expanded physical non-null key count.
  • Extend ScalarValue::normalize to nested and encoded values, and use float_semantics::normalize_floats for arrays in dynamic comparisons and generic static filters.
  • Prevent structural literal equality from driving IN-list set-operation rewrites for types containing floating-point values.
  • Preserve null behavior, dictionary inputs, IN, and NOT IN.

What is the testing strategy for this PR?

SQL regressions in negative_zero.slt cover both signed-zero directions, static filters, dynamic scalar and array operands, nested values, IN-list intersection/difference, IN, NOT IN, and nulls. Focused Rust tests cover dictionary inputs, distinct NaN payloads, encoded scalar metadata, and sliced values. Factory tests exercise both zero signs immediately below and at each floating-point branchless cutoff, including dispatch after adding the missing physical key. SQL tests also check constant nested scalar self-membership; an existing Rust test covers nested dictionary scalar inputs.

Validation after rebasing onto upstream/main (4bf32cb46d): formatting, CI Clippy with its standard feature set, all 111 focused Rust tests, and all 546 sqllogictest files (including Parquet encryption) passed.

Are there any user-facing changes?

Yes. Floating-point IN and NOT IN, including nested and encoded values, now treat +0.0 and -0.0 as equal, consistently with ordinary DataFusion equality. ScalarValue::normalize now applies these rules recursively; public API signatures are unchanged.

Prepared with AI assistance.

@github-actions github-actions Bot added physical-expr Changes to the physical-expr crates sqllogictest SQL Logic Tests (.slt) common Related to common crate labels Sep 11, 2026
@geoffreyclaude
geoffreyclaude force-pushed the codex/in-list-signed-zero branch 5 times, most recently from 12098fc to 474474f Compare September 11, 2026 13:58
@codecov-commenter

codecov-commenter commented Sep 11, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.37209% with 25 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.58%. Comparing base (6924c6a) to head (6ea876b).
⚠️ Report is 9 commits behind head on main.

Files with missing lines Patch % Lines
...atafusion/physical-expr/src/expressions/in_list.rs 76.08% 0 Missing and 11 partials ⚠️
datafusion/common/src/utils/mod.rs 90.47% 8 Missing and 2 partials ⚠️
...l-expr/src/expressions/in_list/primitive_filter.rs 91.17% 0 Missing and 3 partials ⚠️
...-expr/src/expressions/in_list/branchless_filter.rs 95.23% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #25186      +/-   ##
==========================================
- Coverage   82.60%   82.58%   -0.02%     
==========================================
  Files        1144     1144              
  Lines      442793   443398     +605     
  Branches   442793   443398     +605     
==========================================
+ Hits       365779   366191     +412     
- Misses      54863    54991     +128     
- Partials    22151    22216      +65     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@geoffreyclaude
geoffreyclaude force-pushed the codex/in-list-signed-zero branch 3 times, most recently from aa5a037 to eaee11e Compare September 11, 2026 15:02
@geoffreyclaude
geoffreyclaude marked this pull request as ready for review September 14, 2026 11:39
@geoffreyclaude
geoffreyclaude force-pushed the codex/in-list-signed-zero branch from eaee11e to 8713a66 Compare September 14, 2026 11:40
@geoffreyclaude

Copy link
Copy Markdown
Contributor Author

run benchmark in_list_strategy

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5663371304-2348-b2dgc 6.12.94+ #1 SMP Tue Aug 4 08:44:15 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing codex/in-list-signed-zero (8713a66) to 7b00b63 (merge-base) diff

Run configuration
run benchmark in_list_strategy

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing codex/in-list-signed-zero (8713a66) to 7b00b63 (merge-base) diff

Run configuration
run benchmark in_list_strategy
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                                HEAD                                   codex_in-list-signed-zero
-----                                                                ----                                   -------------------------
dictionary/i32/dict=10/list=16                                       1.00      7.6±0.01µs        ? ?/sec    1.00      7.6±0.01µs        ? ?/sec
dictionary/i32/dict=100/list=16                                      1.00      7.7±0.01µs        ? ?/sec    1.01      7.7±0.01µs        ? ?/sec
dictionary/i32/dict=100/list=16/NOT_IN                               1.00      7.7±0.02µs        ? ?/sec    1.00      7.8±0.01µs        ? ?/sec
dictionary/i32/dict=100/list=4                                       1.00      7.6±0.01µs        ? ?/sec    1.00      7.6±0.01µs        ? ?/sec
dictionary/i32/dict=100/list=64                                      1.00      7.7±0.01µs        ? ?/sec    1.00      7.7±0.01µs        ? ?/sec
dictionary/i32/dict=1000/list=16                                     1.00      8.6±0.01µs        ? ?/sec    1.01      8.7±0.01µs        ? ?/sec
dictionary/utf8_long/dict=100/list=16                                1.00      8.3±0.03µs        ? ?/sec    1.00      8.3±0.01µs        ? ?/sec
dictionary/utf8_short/dict=50/list=32                                1.00      8.0±0.01µs        ? ?/sec    1.00      8.1±0.01µs        ? ?/sec
dictionary/utf8_short/dict=50/list=8                                 1.00      7.9±0.01µs        ? ?/sec    1.00      7.9±0.01µs        ? ?/sec
dictionary/utf8_short/dict=500/list=20                               1.00      9.6±0.01µs        ? ?/sec    1.00      9.6±0.01µs        ? ?/sec
dictionary_dispatch/i32/branchless/dictionary/list=4/batch=1         1.00    333.6±2.29ns        ? ?/sec    1.02    339.5±2.59ns        ? ?/sec
dictionary_dispatch/i32/branchless/dictionary/list=4/batch=64        1.00    389.5±3.02ns        ? ?/sec    1.00    390.0±3.01ns        ? ?/sec
dictionary_dispatch/i32/branchless/dictionary/list=4/batch=8         1.00    338.6±2.16ns        ? ?/sec    1.02    347.0±3.22ns        ? ?/sec
dictionary_dispatch/i32/branchless/dictionary/list=4/batch=8192      1.00      7.6±0.02µs        ? ?/sec    1.00      7.6±0.01µs        ? ?/sec
dictionary_dispatch/i32/branchless/plain/list=4/batch=1              1.00    157.3±0.81ns        ? ?/sec    1.01    159.2±3.10ns        ? ?/sec
dictionary_dispatch/i32/branchless/plain/list=4/batch=64             1.00    173.1±0.83ns        ? ?/sec    1.00    173.6±1.92ns        ? ?/sec
dictionary_dispatch/i32/branchless/plain/list=4/batch=8              1.00    159.4±0.92ns        ? ?/sec    1.01    161.8±3.03ns        ? ?/sec
dictionary_dispatch/i32/branchless/plain/list=4/batch=8192           1.00      3.4±0.01µs        ? ?/sec    1.00      3.4±0.00µs        ? ?/sec
dictionary_dispatch/i32/hash_set/dictionary/list=64/batch=1          1.00    282.2±2.90ns        ? ?/sec    1.02    287.2±2.43ns        ? ?/sec
dictionary_dispatch/i32/hash_set/dictionary/list=64/batch=64         1.00    336.3±2.27ns        ? ?/sec    1.04    350.2±8.15ns        ? ?/sec
dictionary_dispatch/i32/hash_set/dictionary/list=64/batch=8          1.00    290.6±3.12ns        ? ?/sec    1.03    299.2±2.09ns        ? ?/sec
dictionary_dispatch/i32/hash_set/dictionary/list=64/batch=8192       1.00      7.5±0.01µs        ? ?/sec    1.00      7.6±0.01µs        ? ?/sec
dictionary_dispatch/i32/hash_set/plain/list=64/batch=1               1.00    121.0±1.61ns        ? ?/sec    1.01    121.8±1.04ns        ? ?/sec
dictionary_dispatch/i32/hash_set/plain/list=64/batch=64              1.00    228.4±1.04ns        ? ?/sec    1.01    231.0±0.63ns        ? ?/sec
dictionary_dispatch/i32/hash_set/plain/list=64/batch=8               1.00    131.7±0.74ns        ? ?/sec    1.01    133.2±0.93ns        ? ?/sec
dictionary_dispatch/i32/hash_set/plain/list=64/batch=8192            1.01     14.6±0.01µs        ? ?/sec    1.00     14.5±0.02µs        ? ?/sec
f32/large_list/list=64/match=0%                                      1.00     15.2±0.04µs        ? ?/sec    1.00     15.3±0.02µs        ? ?/sec
f32/large_list/list=64/match=50%                                     1.00     22.4±0.33µs        ? ?/sec    1.18     26.4±0.20µs        ? ?/sec
f32/small_list/list=32/match=0%                                      1.00     16.4±0.01µs        ? ?/sec    1.00     16.4±0.02µs        ? ?/sec
f32/small_list/list=32/match=50%                                     1.00     16.4±0.01µs        ? ?/sec    1.00     16.4±0.01µs        ? ?/sec
f32/small_list/list=4/match=0%                                       1.00      3.4±0.00µs        ? ?/sec    1.00      3.4±0.00µs        ? ?/sec
f32/small_list/list=4/match=50%                                      1.00      3.4±0.00µs        ? ?/sec    1.01      3.4±0.01µs        ? ?/sec
fixed_size_binary/fsb1/list=16/match=0%                              1.00      4.7±0.00µs        ? ?/sec    1.00      4.7±0.01µs        ? ?/sec
fixed_size_binary/fsb1/list=16/match=50%                             1.00      4.7±0.00µs        ? ?/sec    1.00      4.7±0.01µs        ? ?/sec
fixed_size_binary/fsb16/list=10000/match=0%                          1.00     14.4±0.04µs        ? ?/sec    1.01     14.5±0.03µs        ? ?/sec
fixed_size_binary/fsb16/list=10000/match=50%                         1.01     18.9±0.25µs        ? ?/sec    1.00     18.7±0.12µs        ? ?/sec
fixed_size_binary/fsb16/list=256/match=0%                            1.03     13.5±0.01µs        ? ?/sec    1.00     13.0±0.01µs        ? ?/sec
fixed_size_binary/fsb16/list=256/match=50%                           1.07     22.9±0.28µs        ? ?/sec    1.00     21.4±0.26µs        ? ?/sec
fixed_size_binary/fsb16/list=4/match=0%                              1.00     11.6±0.01µs        ? ?/sec    1.01     11.6±0.05µs        ? ?/sec
fixed_size_binary/fsb16/list=4/match=50%                             1.00     11.6±0.01µs        ? ?/sec    1.00     11.6±0.01µs        ? ?/sec
fixed_size_binary/fsb16/list=64/match=0%                             1.00     12.9±0.02µs        ? ?/sec    1.00     13.0±0.02µs        ? ?/sec
fixed_size_binary/fsb16/list=64/match=0%/input=unaligned             1.02     15.1±0.02µs        ? ?/sec    1.00     14.8±0.03µs        ? ?/sec
fixed_size_binary/fsb16/list=64/match=50%                            1.04     23.0±0.33µs        ? ?/sec    1.00     22.2±0.25µs        ? ?/sec
fixed_size_binary/fsb16/list=64/match=50%/input=unaligned            1.00     24.2±0.35µs        ? ?/sec    1.12     27.1±0.93µs        ? ?/sec
fixed_size_binary/fsb2/list=64/match=0%                              1.00      5.3±0.00µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
fixed_size_binary/fsb2/list=64/match=50%                             1.00      5.3±0.00µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
interval_month_day_nano/small_list/list=4/match=0%                   1.00     14.5±0.01µs        ? ?/sec    1.00     14.6±0.01µs        ? ?/sec
interval_month_day_nano/small_list/list=4/match=50%                  1.00     20.8±0.07µs        ? ?/sec    1.02     21.2±0.07µs        ? ?/sec
narrow_integer/f16/list=256/match=0%                                 1.00      5.2±0.00µs        ? ?/sec    1.01      5.2±0.00µs        ? ?/sec
narrow_integer/f16/list=256/match=50%                                1.00      5.2±0.00µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
narrow_integer/f16/list=4/match=0%                                   1.00      3.6±0.01µs        ? ?/sec    1.00      3.6±0.00µs        ? ?/sec
narrow_integer/f16/list=4/match=50%                                  1.00      3.6±0.00µs        ? ?/sec    1.00      3.6±0.00µs        ? ?/sec
narrow_integer/f16/list=64/match=0%                                  1.00      5.2±0.02µs        ? ?/sec    1.00      5.2±0.00µs        ? ?/sec
narrow_integer/f16/list=64/match=50%                                 1.00      5.2±0.00µs        ? ?/sec    1.00      5.2±0.00µs        ? ?/sec
narrow_integer/i16/list=256/match=0%                                 1.00      5.2±0.00µs        ? ?/sec    1.00      5.2±0.00µs        ? ?/sec
narrow_integer/i16/list=256/match=50%                                1.00      5.2±0.00µs        ? ?/sec    1.00      5.2±0.00µs        ? ?/sec
narrow_integer/i16/list=4/match=0%                                   1.00      3.6±0.00µs        ? ?/sec    1.00      3.6±0.00µs        ? ?/sec
narrow_integer/i16/list=4/match=50%                                  1.00      3.5±0.00µs        ? ?/sec    1.00      3.6±0.00µs        ? ?/sec
narrow_integer/i16/list=64/match=0%                                  1.00      5.2±0.01µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
narrow_integer/i16/list=64/match=50%                                 1.00      5.2±0.00µs        ? ?/sec    1.00      5.2±0.00µs        ? ?/sec
narrow_integer/u8/list=16/match=0%                                   1.00      4.6±0.00µs        ? ?/sec    1.00      4.6±0.00µs        ? ?/sec
narrow_integer/u8/list=16/match=50%                                  1.00      4.6±0.00µs        ? ?/sec    1.00      4.6±0.00µs        ? ?/sec
narrow_integer/u8/list=4/match=0%                                    1.00      3.2±0.00µs        ? ?/sec    1.00      3.2±0.00µs        ? ?/sec
narrow_integer/u8/list=4/match=50%                                   1.00      3.2±0.00µs        ? ?/sec    1.00      3.2±0.01µs        ? ?/sec
nulls/narrow_integer/u8/list=16/match=50%/nulls=20%                  1.00      4.6±0.01µs        ? ?/sec    1.00      4.6±0.01µs        ? ?/sec
nulls/primitive/i32/large_list/list=64/match=50%/nulls=20%           1.00     15.3±0.25µs        ? ?/sec    1.52     23.3±0.13µs        ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20%           1.00      9.0±0.01µs        ? ?/sec    1.00      9.0±0.01µs        ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20%/NOT_IN    1.00      9.1±0.02µs        ? ?/sec    1.00      9.1±0.00µs        ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=50%           1.00      9.0±0.00µs        ? ?/sec    1.00      9.0±0.01µs        ? ?/sec
nulls/utf8/long_24b/list=16/match=50%/nulls=20%                      1.00     72.2±0.20µs        ? ?/sec    1.01     73.1±0.25µs        ? ?/sec
nulls/utf8/short_8b/list=16/match=50%/nulls=20%                      1.00     60.1±0.68µs        ? ?/sec    1.04     62.5±0.40µs        ? ?/sec
nulls/utf8view/long_24b/list=16/match=50%/nulls=20%                  1.11     87.4±0.21µs        ? ?/sec    1.00     78.8±0.43µs        ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%                  1.01     24.4±0.20µs        ? ?/sec    1.00     24.1±0.12µs        ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%/NOT_IN           1.00     18.1±0.18µs        ? ?/sec    1.33     24.2±0.13µs        ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=50%                  1.00     16.8±0.08µs        ? ?/sec    1.09     18.2±0.07µs        ? ?/sec
primitive/decimal128/large_list/list=5/match=0%                      1.01     13.0±0.02µs        ? ?/sec    1.00     12.9±0.02µs        ? ?/sec
primitive/decimal128/large_list/list=5/match=50%                     1.00     23.3±0.21µs        ? ?/sec    1.03     24.0±0.29µs        ? ?/sec
primitive/decimal128/large_list/list=64/match=0%                     1.00     12.8±0.01µs        ? ?/sec    1.02     13.1±0.03µs        ? ?/sec
primitive/decimal128/large_list/list=64/match=50%                    1.03     22.7±0.30µs        ? ?/sec    1.00     22.1±0.38µs        ? ?/sec
primitive/i32/large_list/list=256/match=0%                           1.01     12.6±0.04µs        ? ?/sec    1.00     12.6±0.06µs        ? ?/sec
primitive/i32/large_list/list=256/match=50%                          1.00     17.9±1.04µs        ? ?/sec    1.27     22.7±0.27µs        ? ?/sec
primitive/i32/large_list/list=64/match=0%                            1.06     12.9±0.04µs        ? ?/sec    1.00     12.2±0.01µs        ? ?/sec
primitive/i32/large_list/list=64/match=50%                           1.00     19.5±0.23µs        ? ?/sec    1.17     22.8±0.42µs        ? ?/sec
primitive/i32/small_list/list=16/match=50%/NOT_IN                    1.00      9.0±0.01µs        ? ?/sec    1.00      9.0±0.01µs        ? ?/sec
primitive/i32/small_list/list=32/match=0%                            1.00     16.4±0.01µs        ? ?/sec    1.00     16.4±0.01µs        ? ?/sec
primitive/i32/small_list/list=32/match=50%                           1.00     16.4±0.01µs        ? ?/sec    1.00     16.4±0.01µs        ? ?/sec
primitive/i32/small_list/list=4/match=0%                             1.00      3.4±0.00µs        ? ?/sec    1.00      3.4±0.00µs        ? ?/sec
primitive/i32/small_list/list=4/match=50%                            1.00      3.4±0.00µs        ? ?/sec    1.00      3.4±0.01µs        ? ?/sec
primitive/i64/large_list/list=128/match=0%                           1.04     12.4±0.08µs        ? ?/sec    1.00     12.0±0.01µs        ? ?/sec
primitive/i64/large_list/list=128/match=50%                          1.15     22.8±0.25µs        ? ?/sec    1.00     19.8±0.13µs        ? ?/sec
primitive/i64/large_list/list=32/match=0%                            1.05     12.5±0.07µs        ? ?/sec    1.00     12.0±0.04µs        ? ?/sec
primitive/i64/large_list/list=32/match=50%                           1.60     28.2±0.34µs        ? ?/sec    1.00     17.7±0.16µs        ? ?/sec
primitive/i64/small_list/list=16/match=0%                            1.00     16.3±0.03µs        ? ?/sec    1.00     16.2±0.02µs        ? ?/sec
primitive/i64/small_list/list=16/match=50%                           1.01     16.3±0.02µs        ? ?/sec    1.00     16.1±0.04µs        ? ?/sec
primitive/i64/small_list/list=4/match=0%                             1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
primitive/i64/small_list/list=4/match=50%                            1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
timestamp_ns/large_list/list=32/match=0%                             1.01     17.7±0.04µs        ? ?/sec    1.00     17.5±0.05µs        ? ?/sec
timestamp_ns/large_list/list=32/match=50%                            1.15     34.6±0.67µs        ? ?/sec    1.00     30.0±0.16µs        ? ?/sec
timestamp_ns/small_list/list=16/match=0%                             1.01     16.2±0.02µs        ? ?/sec    1.00     16.0±0.15µs        ? ?/sec
timestamp_ns/small_list/list=16/match=50%                            1.00     16.2±0.08µs        ? ?/sec    1.00     16.2±0.01µs        ? ?/sec
timestamp_ns/small_list/list=4/match=0%                              1.00      4.3±0.00µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
timestamp_ns/small_list/list=4/match=50%                             1.00      4.2±0.00µs        ? ?/sec    1.00      4.2±0.00µs        ? ?/sec
utf8/long_24b/list=256/match=0%                                      1.00     35.1±0.09µs        ? ?/sec    1.00     35.1±0.07µs        ? ?/sec
utf8/long_24b/list=256/match=50%                                     1.01     71.3±0.61µs        ? ?/sec    1.00     70.9±0.59µs        ? ?/sec
utf8/long_24b/list=4/match=0%                                        1.01     35.2±0.04µs        ? ?/sec    1.00     34.9±0.06µs        ? ?/sec
utf8/long_24b/list=4/match=50%                                       1.02     74.3±0.43µs        ? ?/sec    1.00     72.6±0.35µs        ? ?/sec
utf8/long_24b/list=64/match=0%                                       1.01     35.0±0.04µs        ? ?/sec    1.00     34.6±0.07µs        ? ?/sec
utf8/long_24b/list=64/match=50%                                      1.00     71.9±0.31µs        ? ?/sec    1.01     72.4±0.21µs        ? ?/sec
utf8/mixed_len/list=16/match=0%                                      1.07     37.6±0.11µs        ? ?/sec    1.00     35.3±0.12µs        ? ?/sec
utf8/mixed_len/list=16/match=50%                                     1.08    106.2±0.44µs        ? ?/sec    1.00     98.5±0.59µs        ? ?/sec
utf8/mixed_len/list=64/match=0%                                      1.02     38.9±0.08µs        ? ?/sec    1.00     38.0±0.07µs        ? ?/sec
utf8/mixed_len/list=64/match=50%                                     1.13    116.7±0.50µs        ? ?/sec    1.00    102.9±0.56µs        ? ?/sec
utf8/shared_prefix/pfx=12/list=32/match=50%                          1.00     71.6±0.32µs        ? ?/sec    1.00     71.6±0.66µs        ? ?/sec
utf8/short_8b/list=16/match=50%/NOT_IN                               1.00     64.7±0.25µs        ? ?/sec    1.00     64.7±0.28µs        ? ?/sec
utf8/short_8b/list=256/match=0%                                      1.02     27.3±0.13µs        ? ?/sec    1.00     26.8±0.04µs        ? ?/sec
utf8/short_8b/list=256/match=50%                                     1.00     64.6±0.31µs        ? ?/sec    1.00     64.5±0.80µs        ? ?/sec
utf8/short_8b/list=4/match=0%                                        1.01     27.2±0.05µs        ? ?/sec    1.00     26.8±0.04µs        ? ?/sec
utf8/short_8b/list=4/match=50%                                       1.00     65.3±0.71µs        ? ?/sec    1.00     65.5±0.38µs        ? ?/sec
utf8/short_8b/list=64/match=0%                                       1.01     27.1±0.03µs        ? ?/sec    1.00     26.8±0.04µs        ? ?/sec
utf8/short_8b/list=64/match=50%                                      1.00     63.1±0.49µs        ? ?/sec    1.00     62.8±0.48µs        ? ?/sec
utf8view/len_12b/list=16/match=0%                                    1.00     12.9±0.01µs        ? ?/sec    1.02     13.1±0.06µs        ? ?/sec
utf8view/len_12b/list=16/match=50%                                   1.00     25.0±0.49µs        ? ?/sec    1.02     25.5±0.30µs        ? ?/sec
utf8view/len_12b/list=64/match=0%                                    1.01     13.1±0.02µs        ? ?/sec    1.00     12.9±0.01µs        ? ?/sec
utf8view/len_12b/list=64/match=50%                                   1.13     20.5±0.38µs        ? ?/sec    1.00     18.2±0.22µs        ? ?/sec
utf8view/long_24b/list=16/match=0%                                   1.00     40.9±0.07µs        ? ?/sec    1.00     40.8±0.04µs        ? ?/sec
utf8view/long_24b/list=16/match=50%                                  1.00     86.2±0.25µs        ? ?/sec    1.00     86.5±0.24µs        ? ?/sec
utf8view/long_24b/list=256/match=0%                                  1.00     40.5±0.08µs        ? ?/sec    1.02     41.2±0.13µs        ? ?/sec
utf8view/long_24b/list=256/match=50%                                 1.01     87.3±0.36µs        ? ?/sec    1.00     86.6±0.24µs        ? ?/sec
utf8view/long_24b/list=4/match=0%                                    1.00     40.9±0.04µs        ? ?/sec    1.00     40.7±0.06µs        ? ?/sec
utf8view/long_24b/list=4/match=50%                                   1.01     86.6±0.47µs        ? ?/sec    1.00     85.9±0.16µs        ? ?/sec
utf8view/long_24b/list=64/match=0%                                   1.00     40.6±0.05µs        ? ?/sec    1.02     41.4±0.28µs        ? ?/sec
utf8view/long_24b/list=64/match=50%                                  1.00     85.4±0.62µs        ? ?/sec    1.00     85.5±0.33µs        ? ?/sec
utf8view/mixed_len/list=16/match=0%                                  1.00     28.5±0.07µs        ? ?/sec    1.17     33.3±0.07µs        ? ?/sec
utf8view/mixed_len/list=16/match=50%                                 1.00     69.8±0.37µs        ? ?/sec    1.18     82.6±0.46µs        ? ?/sec
utf8view/mixed_len/list=64/match=0%                                  1.00     28.5±0.04µs        ? ?/sec    1.15     32.8±0.09µs        ? ?/sec
utf8view/mixed_len/list=64/match=50%                                 1.00     84.2±0.64µs        ? ?/sec    1.08     91.3±0.74µs        ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=0%                       1.00     42.8±0.06µs        ? ?/sec    1.00     42.7±0.07µs        ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=50%                      1.00     87.6±0.28µs        ? ?/sec    1.00     87.8±0.27µs        ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=0%                       1.00     40.8±0.18µs        ? ?/sec    1.00     40.7±0.12µs        ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=50%                      1.00     84.8±0.40µs        ? ?/sec    1.01     85.3±0.24µs        ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=0%                        1.00     29.9±0.07µs        ? ?/sec    1.01     30.1±0.19µs        ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=50%                       1.01     74.3±0.48µs        ? ?/sec    1.00     73.8±0.18µs        ? ?/sec
utf8view/short_8b/list=16/match=0%                                   1.00     13.0±0.01µs        ? ?/sec    1.03     13.3±0.02µs        ? ?/sec
utf8view/short_8b/list=16/match=50%                                  1.33     24.3±0.38µs        ? ?/sec    1.00     18.3±0.27µs        ? ?/sec
utf8view/short_8b/list=256/match=0%                                  1.01     13.0±0.04µs        ? ?/sec    1.00     12.9±0.03µs        ? ?/sec
utf8view/short_8b/list=256/match=50%                                 1.00     19.2±0.26µs        ? ?/sec    1.17     22.4±0.19µs        ? ?/sec
utf8view/short_8b/list=4/match=0%                                    1.01     11.6±0.01µs        ? ?/sec    1.00     11.5±0.01µs        ? ?/sec
utf8view/short_8b/list=4/match=50%                                   1.00     11.5±0.03µs        ? ?/sec    1.00     11.5±0.01µs        ? ?/sec
utf8view/short_8b/list=64/match=0%                                   1.00     12.8±0.01µs        ? ?/sec    1.01     12.9±0.02µs        ? ?/sec
utf8view/short_8b/list=64/match=50%                                  1.00     18.4±0.14µs        ? ?/sec    1.24     22.9±0.34µs        ? ?/sec

Resource Usage

in_list_strategy — base (merge-base)

Metric Value
Wall time 1770.4s
Peak memory 41.7 MiB
Avg memory 28.4 MiB
CPU user 1828.5s
CPU sys 1.6s
Peak spill 0 B

in_list_strategy — branch

Metric Value
Wall time 1670.4s
Peak memory 43.4 MiB
Avg memory 31.8 MiB
CPU user 1824.5s
CPU sys 1.9s
Peak spill 0 B

File an issue against this benchmark runner

@neilconway neilconway left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @geoffreyclaude. I think this is heading in the right direction but it seems there is a lot more work we need to do if we want zeros to be handled correctly throughout DF. We don't need to take all of that work on in this PR but hopefully we can find a self-consistent subset...

Comment thread datafusion/common/src/utils/mod.rs Resolved
Comment thread datafusion/common/src/utils/mod.rs Outdated
Comment on lines 1569 to 1573
ScalarValue::Dictionary(key, mut value) => {
*value = normalize_float_zero_scalar(*value);
ScalarValue::Dictionary(key, value)
}
other => other,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we handle other nested types, like REEs, unions, lists, ...?

@geoffreyclaude geoffreyclaude Sep 30, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll see if I can squeeze those in without blowing up the PR. Otherwise I'd prefer keeping the broader fixes in a new PR or series of PRs.

@geoffreyclaude geoffreyclaude Oct 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in 6ea876b: all nested scalar types now normalize recursively, including unions and REEs. The array-backed variants reuse the existing array normalizer.

fn normalize_in_list_float_zero_value(value: ColumnarValue) -> ColumnarValue {
match value {
ColumnarValue::Array(array)
if dictionary_value_type(array.data_type()).is_floating() =>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is_floating seems like too shallow of a check for nested types. What if we just did

ColumnarValue::Array(array) => ColumnarValue::Array(normalize_float_zero(&array)),

@geoffreyclaude geoffreyclaude Oct 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, I've used your suggested array arm in 6ea876b.

geoffreyclaude and others added 3 commits November 7, 2026 07:22
Add the missing signed-zero encoding once in the shared static-filter
factory after dictionary flattening. Select the filter using the expanded
physical non-null list length.

Remove per-filter zero insertion and extra-length branchless kernels.
Cover both signs across cutoffs and preserve nulls, NaN payloads and slices.
Normalize dynamic and generic IN operands through normalize_floats and
recursive ScalarValue::normalize. Keep primitive static filters on
constructor-time signed-zero expansion and use the shared negative-zero
predicate before selecting their lookup strategy.

Move normalization regressions to the shared module and cover nested scalar
self-membership and encoded scalar needles.
@geoffreyclaude
geoffreyclaude force-pushed the codex/in-list-signed-zero branch from a17cf88 to 4a60604 Compare November 7, 2026 06:43
@geoffreyclaude

Copy link
Copy Markdown
Contributor Author

run benchmark in_list

1 similar comment
@geoffreyclaude

Copy link
Copy Markdown
Contributor Author

run benchmark in_list

@github-actions github-actions Bot removed the auto detected api change Auto detected API change label Nov 7, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c6703511777-4583-hzcx2 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing codex/in-list-signed-zero (4a60604) to 4bf32cb (merge-base) diff

Run configuration
run benchmark in_list

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c6703511615-4584-wm4sp 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing codex/in-list-signed-zero (4a60604) to 4bf32cb (merge-base) diff

Run configuration
run benchmark in_list

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing codex/in-list-signed-zero (4a60604) to 4bf32cb (merge-base) diff

Run configuration
run benchmark in_list
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                  HEAD                                   codex_in-list-signed-zero
-----                                                  ----                                   -------------------------
in_list/Float32/list=100/nulls=0%                      1.00     22.4±0.62µs        ? ?/sec    1.24     27.8±1.00µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.00     16.7±0.14µs        ? ?/sec    1.04     17.4±0.18µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       1.00     14.7±0.03µs        ? ?/sec    1.00     14.6±0.02µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      1.00     14.8±0.03µs        ? ?/sec    1.00     14.7±0.02µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        1.00      3.0±0.01µs        ? ?/sec    1.00      3.0±0.01µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       1.00      3.1±0.01µs        ? ?/sec    1.00      3.1±0.01µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        1.00      4.8±0.01µs        ? ?/sec    1.00      4.7±0.01µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       1.01      4.9±0.01µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        1.00      5.2±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       1.00      5.3±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         1.00      5.2±0.02µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        1.00      5.3±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          1.01      3.4±0.01µs        ? ?/sec    1.00      3.4±0.01µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         1.00      3.5±0.01µs        ? ?/sec    1.00      3.5±0.01µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.02µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         1.00      4.4±0.03µs        ? ?/sec    1.00      4.4±0.01µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.00     33.0±1.12µs        ? ?/sec    1.65     54.4±1.79µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.08     22.9±1.55µs        ? ?/sec    1.00     21.1±1.83µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         1.00     14.7±0.04µs        ? ?/sec    1.00     14.6±0.03µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        1.00     14.8±0.04µs        ? ?/sec    1.00     14.8±0.03µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          1.00      3.0±0.01µs        ? ?/sec    1.00      3.0±0.01µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         1.01      3.1±0.01µs        ? ?/sec    1.00      3.1±0.01µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          1.00      4.8±0.01µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         1.00      4.9±0.01µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.04     54.5±0.82µs        ? ?/sec    1.00     52.4±0.54µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 1.01     63.3±0.91µs        ? ?/sec    1.00     62.6±2.32µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.01     31.3±0.96µs        ? ?/sec    1.00     31.0±1.05µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.16     47.9±3.23µs        ? ?/sec    1.00     41.5±1.27µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    1.00      3.6±0.01µs        ? ?/sec    1.01      3.6±0.01µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   1.00      3.7±0.01µs        ? ?/sec    1.00      3.7±0.01µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    1.00      7.2±0.01µs        ? ?/sec    1.00      7.2±0.02µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   1.00      7.3±0.02µs        ? ?/sec    1.00      7.3±0.01µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        1.00      5.2±0.01µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       1.00      5.3±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         1.00      5.2±0.01µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        1.00      5.3±0.01µs        ? ?/sec    1.00      5.3±0.04µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          1.00      3.2±0.01µs        ? ?/sec    1.00      3.2±0.01µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         1.00      3.3±0.01µs        ? ?/sec    1.00      3.3±0.01µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          1.00      3.7±0.01µs        ? ?/sec    1.00      3.7±0.01µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         1.00      3.8±0.02µs        ? ?/sec    1.00      3.8±0.01µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.01     87.2±0.64µs        ? ?/sec    1.00     86.3±1.71µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.05     54.7±3.76µs        ? ?/sec    1.00     52.2±0.56µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00     95.4±0.72µs        ? ?/sec    1.06    100.8±0.96µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.03     76.8±0.48µs        ? ?/sec    1.00     74.7±0.61µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.00     54.3±1.70µs        ? ?/sec    1.01     55.0±1.28µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.00     47.9±0.64µs        ? ?/sec    1.04     49.8±1.13µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    123.6±0.74µs        ? ?/sec    1.04    128.8±1.43µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.00     59.3±1.73µs        ? ?/sec    1.01     60.0±0.89µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00     88.4±0.92µs        ? ?/sec    1.07     95.0±2.58µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.00    118.9±2.82µs        ? ?/sec    1.03    122.2±0.99µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.01     69.1±0.69µs        ? ?/sec    1.00     68.6±0.55µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.03     78.0±1.50µs        ? ?/sec    1.00     76.0±0.52µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00     69.8±0.41µs        ? ?/sec    1.01     70.3±0.42µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     28.8±0.10µs        ? ?/sec    1.01     29.0±0.17µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     31.0±0.11µs        ? ?/sec    1.01     31.4±0.07µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.00     66.5±0.39µs        ? ?/sec    1.01     67.1±0.16µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.00     29.2±0.09µs        ? ?/sec    1.01     29.6±0.06µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.00     31.6±0.07µs        ? ?/sec    1.01     31.8±0.12µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00     70.5±0.52µs        ? ?/sec    1.00     70.3±0.24µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     29.5±1.01µs        ? ?/sec    1.00     29.4±0.15µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     31.6±0.12µs        ? ?/sec    1.01     32.0±0.08µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.00     67.5±0.53µs        ? ?/sec    1.01     68.0±0.37µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.00     29.7±0.04µs        ? ?/sec    1.01     30.1±0.08µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.00     32.2±0.09µs        ? ?/sec    1.00     32.3±0.08µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%          1.23     71.9±1.63µs        ? ?/sec    1.00     58.5±1.11µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%         1.00     72.9±1.50µs        ? ?/sec    1.02     74.7±1.26µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%         1.03    121.7±2.33µs        ? ?/sec    1.00    118.7±1.71µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%        1.03    134.0±3.52µs        ? ?/sec    1.00    130.3±2.39µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%         1.02    159.8±2.56µs        ? ?/sec    1.00    156.3±1.52µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%        1.02    148.5±2.32µs        ? ?/sec    1.00    145.5±3.03µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%           1.13    133.3±0.97µs        ? ?/sec    1.00    118.0±1.86µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%          1.00     66.0±1.54µs        ? ?/sec    1.00     66.0±2.03µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%          1.06    151.1±1.41µs        ? ?/sec    1.00    143.1±2.32µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%         1.00    105.5±2.80µs        ? ?/sec    1.00    105.6±2.25µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%          1.02    161.4±1.58µs        ? ?/sec    1.00    158.8±1.42µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%         1.03    154.3±2.73µs        ? ?/sec    1.00    150.3±3.11µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%            1.02     48.0±0.46µs        ? ?/sec    1.00     46.9±0.58µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%           1.08     46.3±2.27µs        ? ?/sec    1.00     42.8±2.62µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%           1.00     67.5±0.89µs        ? ?/sec    1.18     79.7±1.18µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%          1.01     52.0±2.88µs        ? ?/sec    1.00     51.4±3.00µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%           1.00    104.0±0.94µs        ? ?/sec    1.16    121.0±0.84µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%          1.00    111.3±1.56µs        ? ?/sec    1.00    110.9±2.26µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%            1.00     48.4±0.90µs        ? ?/sec    1.02     49.5±1.13µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%           1.02     38.3±1.14µs        ? ?/sec    1.00     37.7±1.28µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%           1.00     78.7±1.17µs        ? ?/sec    1.18     93.2±1.58µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%          1.01     58.4±3.15µs        ? ?/sec    1.00     58.0±3.79µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%           1.00    134.1±1.48µs        ? ?/sec    1.08    144.4±1.30µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%          1.05    114.3±2.04µs        ? ?/sec    1.00    109.3±1.67µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             1.00    103.7±2.64µs        ? ?/sec    1.00    103.4±2.07µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.00     20.4±0.86µs        ? ?/sec    1.85     37.7±1.00µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               2.82     68.9±0.70µs        ? ?/sec    1.00     24.5±1.88µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            1.00    106.2±2.13µs        ? ?/sec    1.05    111.5±1.91µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             4.11     59.7±2.73µs        ? ?/sec    1.00     14.5±0.27µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              1.00     16.8±0.59µs        ? ?/sec    2.87     48.1±0.36µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              1.05    115.9±1.64µs        ? ?/sec    1.00    110.3±1.27µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.00     52.0±0.97µs        ? ?/sec    1.20     62.2±0.69µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                1.00     61.6±1.03µs        ? ?/sec    1.04     64.0±1.47µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             1.00     87.5±0.72µs        ? ?/sec    1.04     91.2±1.03µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              1.11     38.0±1.10µs        ? ?/sec    1.00     34.2±0.89µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               1.00     14.6±0.41µs        ? ?/sec    2.59     37.9±0.61µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               1.00     75.3±0.43µs        ? ?/sec    1.01     76.1±0.24µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                1.00      9.6±0.02µs        ? ?/sec    1.00      9.6±0.03µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 1.00      9.6±0.02µs        ? ?/sec    1.00      9.6±0.03µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              1.01     69.4±0.53µs        ? ?/sec    1.00     69.0±0.40µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               1.00      9.7±0.02µs        ? ?/sec    1.00      9.8±0.43µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                1.00      9.8±0.02µs        ? ?/sec    1.00      9.8±0.02µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               1.00     75.5±0.44µs        ? ?/sec    1.01     76.0±0.16µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.00     13.0±0.04µs        ? ?/sec    1.01     13.2±0.05µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.00     13.2±0.04µs        ? ?/sec    1.00     13.2±0.04µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              1.00     69.5±0.41µs        ? ?/sec    1.00     69.4±0.25µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               1.00     13.2±0.02µs        ? ?/sec    1.01     13.3±0.06µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                1.01     13.3±0.04µs        ? ?/sec    1.00     13.2±0.03µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%      1.00     65.3±1.44µs        ? ?/sec    1.28     83.6±1.00µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%     1.00     63.6±2.07µs        ? ?/sec    1.31     83.5±1.23µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%     1.05     89.7±2.39µs        ? ?/sec    1.00     85.6±1.78µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%    1.00     93.6±1.90µs        ? ?/sec    1.05     98.3±2.18µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%     1.05    115.4±1.87µs        ? ?/sec    1.00    110.0±2.21µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%    1.06    124.7±2.06µs        ? ?/sec    1.00    117.8±2.41µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%       1.00     88.1±1.23µs        ? ?/sec    1.21    107.0±1.33µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%      1.00     79.0±2.45µs        ? ?/sec    1.27    100.5±1.52µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%      1.02    122.0±3.03µs        ? ?/sec    1.00    119.9±1.87µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%     1.00     76.0±2.42µs        ? ?/sec    1.02     77.4±2.92µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%      1.04    126.3±4.02µs        ? ?/sec    1.00    121.4±3.14µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%     1.07    116.4±2.76µs        ? ?/sec    1.00    109.1±2.23µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%        1.00     34.0±1.37µs        ? ?/sec    1.02     34.5±0.38µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%       1.00     30.3±0.06µs        ? ?/sec    1.00     30.2±0.08µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%       1.20     70.5±0.97µs        ? ?/sec    1.00     58.7±1.39µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%      1.31     58.1±1.14µs        ? ?/sec    1.00     44.5±0.93µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%       1.10     81.3±1.15µs        ? ?/sec    1.00     74.0±1.06µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%      1.11    103.8±1.22µs        ? ?/sec    1.00     93.2±2.91µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%        1.04     35.5±0.65µs        ? ?/sec    1.00     34.1±1.09µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%       1.00     30.3±0.16µs        ? ?/sec    1.00     30.2±0.09µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%       1.25     65.8±0.87µs        ? ?/sec    1.00     52.6±1.44µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%      1.32     50.9±1.02µs        ? ?/sec    1.00     38.7±0.35µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%       1.12     74.5±1.45µs        ? ?/sec    1.00     66.3±1.36µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%      1.15     96.7±2.39µs        ? ?/sec    1.00     84.0±3.04µs        ? ?/sec
in_list_cols/Int32/list=28/match=0%/nulls=0%           1.00     49.6±0.51µs        ? ?/sec    1.02     50.7±0.50µs        ? ?/sec
in_list_cols/Int32/list=28/match=0%/nulls=20%          1.00     64.9±0.24µs        ? ?/sec    1.02     65.9±0.22µs        ? ?/sec
in_list_cols/Int32/list=28/match=100%/nulls=0%         1.00  1804.6±10.39ns        ? ?/sec    1.01   1827.9±7.70ns        ? ?/sec
in_list_cols/Int32/list=28/match=100%/nulls=20%        1.00     64.7±0.29µs        ? ?/sec    1.02     65.9±0.25µs        ? ?/sec
in_list_cols/Int32/list=28/match=50%/nulls=0%          1.00     26.7±0.12µs        ? ?/sec    1.01     27.0±0.13µs        ? ?/sec
in_list_cols/Int32/list=28/match=50%/nulls=20%         1.00     65.1±0.17µs        ? ?/sec    1.01     65.6±0.36µs        ? ?/sec
in_list_cols/Int32/list=3/match=0%/nulls=0%            1.00      5.3±0.02µs        ? ?/sec    1.02      5.4±0.01µs        ? ?/sec
in_list_cols/Int32/list=3/match=0%/nulls=20%           1.00      6.5±0.02µs        ? ?/sec    1.01      6.6±0.03µs        ? ?/sec
in_list_cols/Int32/list=3/match=100%/nulls=0%          1.00  1793.9±10.10ns        ? ?/sec    1.02   1827.8±5.97ns        ? ?/sec
in_list_cols/Int32/list=3/match=100%/nulls=20%         1.00      6.5±0.02µs        ? ?/sec    1.01      6.6±0.02µs        ? ?/sec
in_list_cols/Int32/list=3/match=50%/nulls=0%           1.00      5.4±0.02µs        ? ?/sec    1.01      5.4±0.02µs        ? ?/sec
in_list_cols/Int32/list=3/match=50%/nulls=20%          1.00      6.6±0.02µs        ? ?/sec    1.00      6.6±0.05µs        ? ?/sec
in_list_cols/Int32/list=8/match=0%/nulls=0%            1.00     14.1±0.04µs        ? ?/sec    1.02     14.3±0.04µs        ? ?/sec
in_list_cols/Int32/list=8/match=0%/nulls=20%           1.00     18.0±0.04µs        ? ?/sec    1.01     18.3±0.11µs        ? ?/sec
in_list_cols/Int32/list=8/match=100%/nulls=0%          1.00   1801.5±6.18ns        ? ?/sec    1.02   1829.2±6.52ns        ? ?/sec
in_list_cols/Int32/list=8/match=100%/nulls=20%         1.00     17.9±0.05µs        ? ?/sec    1.02     18.3±0.06µs        ? ?/sec
in_list_cols/Int32/list=8/match=50%/nulls=0%           1.00     14.2±0.04µs        ? ?/sec    1.02     14.4±0.05µs        ? ?/sec
in_list_cols/Int32/list=8/match=50%/nulls=20%          1.00     18.0±0.08µs        ? ?/sec    1.02     18.3±0.05µs        ? ?/sec
in_list_cols/Utf8/list=28/match=0%                     1.00    179.4±0.25µs        ? ?/sec    1.00    179.5±0.43µs        ? ?/sec
in_list_cols/Utf8/list=28/match=100%                   1.00    757.0±1.31µs        ? ?/sec    1.03    780.8±2.62µs        ? ?/sec
in_list_cols/Utf8/list=28/match=50%                    1.00   1162.8±1.84µs        ? ?/sec    1.00   1166.3±2.41µs        ? ?/sec
in_list_cols/Utf8/list=3/match=0%                      1.00     18.7±0.04µs        ? ?/sec    1.01     18.9±0.26µs        ? ?/sec
in_list_cols/Utf8/list=3/match=100%                    1.00     78.9±0.18µs        ? ?/sec    1.04     82.2±0.24µs        ? ?/sec
in_list_cols/Utf8/list=3/match=50%                     1.00    116.3±1.77µs        ? ?/sec    1.00    116.1±0.86µs        ? ?/sec
in_list_cols/Utf8/list=8/match=0%                      1.00     50.6±0.14µs        ? ?/sec    1.01     50.9±0.29µs        ? ?/sec
in_list_cols/Utf8/list=8/match=100%                    1.00    205.3±2.93µs        ? ?/sec    1.07    220.0±0.31µs        ? ?/sec
in_list_cols/Utf8/list=8/match=50%                     1.00    326.7±0.66µs        ? ?/sec    1.00    325.3±0.67µs        ? ?/sec

Resource Usage

in_list — base (merge-base)

Metric Value
Wall time 270.1s
Peak memory 47.1 MiB
Avg memory 23.5 MiB
CPU user 579.8s
CPU sys 1.7s
Peak spill 0 B

in_list — branch

Metric Value
Wall time 340.1s
Peak memory 43.9 MiB
Avg memory 17.0 MiB
CPU user 577.5s
CPU sys 1.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing codex/in-list-signed-zero (4a60604) to 4bf32cb (merge-base) diff

Run configuration
run benchmark in_list
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                  HEAD                                   codex_in-list-signed-zero
-----                                                  ----                                   -------------------------
in_list/Float32/list=100/nulls=0%                      1.05     27.8±0.97µs        ? ?/sec    1.00     26.4±0.70µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.34     68.4±0.98µs        ? ?/sec    1.00     50.8±1.13µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       1.00     14.7±0.04µs        ? ?/sec    1.00     14.7±0.04µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      1.00     14.7±0.04µs        ? ?/sec    1.00     14.7±0.06µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        1.00      3.0±0.01µs        ? ?/sec    1.00      3.0±0.01µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       1.00      3.1±0.01µs        ? ?/sec    1.00      3.1±0.01µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        1.00      4.7±0.01µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       1.00      4.8±0.01µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        1.01      5.3±0.02µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       1.01      5.4±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         1.01      5.3±0.01µs        ? ?/sec    1.00      5.2±0.02µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        1.01      5.3±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          1.00      3.4±0.01µs        ? ?/sec    1.00      3.4±0.02µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         1.00      3.5±0.01µs        ? ?/sec    1.00      3.5±0.01µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         1.00      4.4±0.01µs        ? ?/sec    1.00      4.4±0.01µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.00     25.0±1.49µs        ? ?/sec    1.09     27.4±1.11µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.83     54.0±0.76µs        ? ?/sec    1.00     29.4±0.70µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         1.00     14.7±0.05µs        ? ?/sec    1.00     14.6±0.02µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        1.00     14.7±0.03µs        ? ?/sec    1.00     14.7±0.04µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          1.00      3.0±0.01µs        ? ?/sec    1.00      3.0±0.01µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         1.00      3.1±0.01µs        ? ?/sec    1.00      3.1±0.01µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          1.00      4.8±0.02µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         1.00      4.8±0.02µs        ? ?/sec    1.00      4.8±0.01µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.05     55.2±0.53µs        ? ?/sec    1.00     52.6±0.50µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 1.01     62.1±0.89µs        ? ?/sec    1.00     61.6±0.93µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.05     31.2±1.10µs        ? ?/sec    1.00     29.7±0.74µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.15     48.1±1.82µs        ? ?/sec    1.00     41.6±1.01µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    1.00      3.6±0.01µs        ? ?/sec    1.00      3.6±0.01µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   1.00      3.7±0.01µs        ? ?/sec    1.00      3.7±0.01µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    1.00      7.2±0.02µs        ? ?/sec    1.00      7.2±0.01µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   1.00      7.3±0.02µs        ? ?/sec    1.00      7.3±0.01µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        1.01      5.3±0.07µs        ? ?/sec    1.00      5.3±0.07µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       1.00      5.3±0.01µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         1.00      5.2±0.01µs        ? ?/sec    1.00      5.2±0.01µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        1.00      5.3±0.03µs        ? ?/sec    1.00      5.3±0.01µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          1.00      3.2±0.00µs        ? ?/sec    1.00      3.2±0.01µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         1.00      3.3±0.01µs        ? ?/sec    1.00      3.3±0.01µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          1.00      3.7±0.01µs        ? ?/sec    1.00      3.7±0.01µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         1.00      3.8±0.01µs        ? ?/sec    1.00      3.8±0.01µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.00     86.4±0.59µs        ? ?/sec    1.00     86.7±1.18µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00     51.0±2.22µs        ? ?/sec    1.01     51.5±1.74µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00     97.5±1.05µs        ? ?/sec    1.05    101.9±1.17µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.01     77.6±1.06µs        ? ?/sec    1.00     76.9±0.85µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.00     53.6±0.50µs        ? ?/sec    1.02     54.8±0.71µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.00     48.2±0.58µs        ? ?/sec    1.03     49.8±2.22µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    124.4±2.51µs        ? ?/sec    1.04    129.8±1.28µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.00     56.6±0.49µs        ? ?/sec    1.05     59.3±1.46µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00     90.6±1.75µs        ? ?/sec    1.05     95.0±2.87µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.00    116.5±0.47µs        ? ?/sec    1.07    124.6±0.72µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.00     66.9±0.67µs        ? ?/sec    1.05     70.1±1.06µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.00     75.7±0.63µs        ? ?/sec    1.06     79.9±1.40µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00     70.1±0.57µs        ? ?/sec    1.02     71.8±0.66µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     28.5±0.12µs        ? ?/sec    1.01     28.8±0.07µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     31.0±0.12µs        ? ?/sec    1.01     31.5±0.08µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.00     66.4±0.25µs        ? ?/sec    1.01     66.9±0.21µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.00     29.3±0.08µs        ? ?/sec    1.01     29.6±0.07µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.00     31.6±0.22µs        ? ?/sec    1.00     31.7±0.06µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00     70.0±0.41µs        ? ?/sec    1.01     70.7±0.38µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     29.2±0.29µs        ? ?/sec    1.01     29.5±0.06µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     32.0±0.13µs        ? ?/sec    1.01     32.3±0.15µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.00     68.0±0.36µs        ? ?/sec    1.00     68.3±0.24µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.00     29.9±0.15µs        ? ?/sec    1.01     30.2±0.10µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.01     32.5±0.58µs        ? ?/sec    1.00     32.4±0.07µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%          1.25     70.3±0.93µs        ? ?/sec    1.00     56.1±1.79µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%         1.00     71.4±1.05µs        ? ?/sec    1.04     74.3±1.83µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%         1.05    122.5±1.81µs        ? ?/sec    1.00    116.4±1.01µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%        1.02    130.0±2.81µs        ? ?/sec    1.00    128.0±2.78µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%         1.02    158.1±1.75µs        ? ?/sec    1.00    155.6±2.00µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%        1.01    146.7±2.51µs        ? ?/sec    1.00    145.2±2.58µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%           1.17    135.9±1.26µs        ? ?/sec    1.00    115.8±1.49µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%          1.00     64.1±0.92µs        ? ?/sec    1.03     66.3±1.97µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%          1.06    150.3±1.45µs        ? ?/sec    1.00    141.8±1.89µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%         1.00    103.8±2.44µs        ? ?/sec    1.02    106.3±2.06µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%          1.01    160.4±1.62µs        ? ?/sec    1.00    158.5±1.81µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%         1.00    151.6±2.70µs        ? ?/sec    1.00    151.2±3.04µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%            1.00     48.4±0.39µs        ? ?/sec    1.00     48.3±0.51µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%           1.00     43.8±1.07µs        ? ?/sec    1.02     44.8±2.91µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%           1.00     66.5±0.85µs        ? ?/sec    1.18     78.5±0.72µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%          1.00     51.0±2.20µs        ? ?/sec    1.03     52.6±2.94µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%           1.00    104.1±2.28µs        ? ?/sec    1.15    119.5±0.58µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%          1.01    109.3±2.01µs        ? ?/sec    1.00    107.7±1.79µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%            1.00     49.0±0.87µs        ? ?/sec    1.00     48.8±1.20µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%           1.01     37.4±0.29µs        ? ?/sec    1.00     36.9±0.57µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%           1.00     81.2±2.04µs        ? ?/sec    1.14     92.5±0.98µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%          1.00     56.7±2.59µs        ? ?/sec    1.00     57.0±2.90µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%           1.00    134.5±2.36µs        ? ?/sec    1.05    141.9±4.51µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%          1.04    113.7±1.78µs        ? ?/sec    1.00    109.1±1.95µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             1.03    103.3±0.73µs        ? ?/sec    1.00    100.3±1.58µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.00     29.1±0.73µs        ? ?/sec    1.52     44.2±0.81µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               1.03     33.2±1.96µs        ? ?/sec    1.00     32.2±2.76µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            1.00    108.4±2.34µs        ? ?/sec    1.01    109.0±0.91µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             1.14     30.8±0.87µs        ? ?/sec    1.00     27.1±1.47µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              1.89     27.2±1.38µs        ? ?/sec    1.00     14.4±0.32µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              1.05    115.5±1.04µs        ? ?/sec    1.00    110.3±1.12µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.00     35.6±1.91µs        ? ?/sec    1.64     58.5±0.61µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                1.00     29.7±1.37µs        ? ?/sec    1.70     50.6±0.33µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             1.00     88.6±2.08µs        ? ?/sec    1.03     91.4±0.69µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              2.17     49.7±0.71µs        ? ?/sec    1.00     22.9±1.37µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               3.38     60.5±0.50µs        ? ?/sec    1.00     17.9±0.57µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               1.00     75.6±0.27µs        ? ?/sec    1.00     75.6±0.29µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                1.00      9.7±0.04µs        ? ?/sec    1.00      9.6±0.02µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 1.00      9.6±0.02µs        ? ?/sec    1.00      9.7±0.02µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              1.02     70.0±0.36µs        ? ?/sec    1.00     68.9±0.22µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               1.00      9.7±0.03µs        ? ?/sec    1.00      9.7±0.02µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                1.00      9.8±0.08µs        ? ?/sec    1.00      9.7±0.02µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               1.00     76.2±0.64µs        ? ?/sec    1.00     76.2±0.68µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.00     13.1±0.04µs        ? ?/sec    1.01     13.2±0.03µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.01     13.1±0.04µs        ? ?/sec    1.00     13.0±0.02µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              1.01     70.2±0.38µs        ? ?/sec    1.00     69.3±0.28µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               1.66     22.0±3.82µs        ? ?/sec    1.00     13.3±0.05µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                1.03     13.5±0.07µs        ? ?/sec    1.00     13.1±0.04µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%      1.00     65.6±1.27µs        ? ?/sec    1.25     82.3±1.42µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%     1.00     62.3±1.18µs        ? ?/sec    1.34     83.4±1.37µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%     1.01     86.4±1.90µs        ? ?/sec    1.00     85.7±2.49µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%    1.00     93.6±1.40µs        ? ?/sec    1.03     96.7±1.65µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%     1.07    116.0±2.46µs        ? ?/sec    1.00    108.4±2.51µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%    1.04    123.3±2.12µs        ? ?/sec    1.00    118.7±2.47µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%       1.00     89.0±1.32µs        ? ?/sec    1.19    105.9±0.94µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%      1.00     77.5±1.32µs        ? ?/sec    1.29    100.1±1.82µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%      1.00    119.0±1.73µs        ? ?/sec    1.01    120.2±1.94µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%     1.00     76.3±1.52µs        ? ?/sec    1.00     76.2±3.41µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%      1.04    121.9±1.95µs        ? ?/sec    1.00    117.4±1.43µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%     1.07    116.1±2.97µs        ? ?/sec    1.00    108.3±4.19µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%        1.00     34.5±0.62µs        ? ?/sec    1.01     34.9±0.45µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%       1.00     30.3±0.22µs        ? ?/sec    1.00     30.3±0.19µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%       1.19     69.4±0.70µs        ? ?/sec    1.00     58.2±0.95µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%      1.31     59.7±1.20µs        ? ?/sec    1.00     45.4±1.99µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%       1.11     81.4±1.21µs        ? ?/sec    1.00     73.1±1.19µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%      1.17    106.2±1.77µs        ? ?/sec    1.00     91.0±1.09µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%        1.02     35.4±0.43µs        ? ?/sec    1.00     34.8±0.46µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%       1.00     30.3±0.18µs        ? ?/sec    1.00     30.2±0.17µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%       1.31     66.3±1.19µs        ? ?/sec    1.00     50.8±2.92µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%      1.33     51.6±0.83µs        ? ?/sec    1.00     38.9±0.46µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%       1.12     73.7±1.01µs        ? ?/sec    1.00     65.9±1.41µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%      1.19     96.1±2.20µs        ? ?/sec    1.00     81.0±1.33µs        ? ?/sec
in_list_cols/Int32/list=28/match=0%/nulls=0%           1.00     50.3±0.30µs        ? ?/sec    1.02     51.4±0.46µs        ? ?/sec
in_list_cols/Int32/list=28/match=0%/nulls=20%          1.00     65.5±0.42µs        ? ?/sec    1.01     66.1±0.31µs        ? ?/sec
in_list_cols/Int32/list=28/match=100%/nulls=0%         1.00   1787.8±8.42ns        ? ?/sec    1.02  1830.6±10.64ns        ? ?/sec
in_list_cols/Int32/list=28/match=100%/nulls=20%        1.00     64.9±0.40µs        ? ?/sec    1.01     65.7±0.30µs        ? ?/sec
in_list_cols/Int32/list=28/match=50%/nulls=0%          1.00     26.8±0.21µs        ? ?/sec    1.01     27.1±0.06µs        ? ?/sec
in_list_cols/Int32/list=28/match=50%/nulls=20%         1.00     65.5±0.39µs        ? ?/sec    1.01     66.1±0.54µs        ? ?/sec
in_list_cols/Int32/list=3/match=0%/nulls=0%            1.00      5.3±0.01µs        ? ?/sec    1.01      5.4±0.01µs        ? ?/sec
in_list_cols/Int32/list=3/match=0%/nulls=20%           1.00      6.5±0.02µs        ? ?/sec    1.01      6.6±0.04µs        ? ?/sec
in_list_cols/Int32/list=3/match=100%/nulls=0%          1.00   1794.2±7.40ns        ? ?/sec    1.02   1831.1±5.34ns        ? ?/sec
in_list_cols/Int32/list=3/match=100%/nulls=20%         1.00      6.6±0.03µs        ? ?/sec    1.00      6.6±0.02µs        ? ?/sec
in_list_cols/Int32/list=3/match=50%/nulls=0%           1.00      5.4±0.02µs        ? ?/sec    1.01      5.4±0.03µs        ? ?/sec
in_list_cols/Int32/list=3/match=50%/nulls=20%          1.00      6.5±0.02µs        ? ?/sec    1.01      6.6±0.03µs        ? ?/sec
in_list_cols/Int32/list=8/match=0%/nulls=0%            1.01     14.5±0.06µs        ? ?/sec    1.00     14.4±0.05µs        ? ?/sec
in_list_cols/Int32/list=8/match=0%/nulls=20%           1.01     18.2±0.07µs        ? ?/sec    1.00     18.1±0.07µs        ? ?/sec
in_list_cols/Int32/list=8/match=100%/nulls=0%          1.00   1787.0±6.03ns        ? ?/sec    1.02   1828.9±6.84ns        ? ?/sec
in_list_cols/Int32/list=8/match=100%/nulls=20%         1.00     18.1±0.07µs        ? ?/sec    1.01     18.3±0.10µs        ? ?/sec
in_list_cols/Int32/list=8/match=50%/nulls=0%           1.00     14.2±0.04µs        ? ?/sec    1.01     14.4±0.07µs        ? ?/sec
in_list_cols/Int32/list=8/match=50%/nulls=20%          1.01     18.1±0.07µs        ? ?/sec    1.00     18.0±0.07µs        ? ?/sec
in_list_cols/Utf8/list=28/match=0%                     1.00    179.1±0.77µs        ? ?/sec    1.00    179.2±1.16µs        ? ?/sec
in_list_cols/Utf8/list=28/match=100%                   1.05    762.9±1.17µs        ? ?/sec    1.00    727.5±1.60µs        ? ?/sec
in_list_cols/Utf8/list=28/match=50%                    1.00   1165.0±2.15µs        ? ?/sec    1.00   1162.2±1.86µs        ? ?/sec
in_list_cols/Utf8/list=3/match=0%                      1.00     18.8±0.06µs        ? ?/sec    1.00     18.9±0.04µs        ? ?/sec
in_list_cols/Utf8/list=3/match=100%                    1.01     78.3±0.23µs        ? ?/sec    1.00     77.7±0.32µs        ? ?/sec
in_list_cols/Utf8/list=3/match=50%                     1.00    114.2±0.56µs        ? ?/sec    1.00    114.2±1.07µs        ? ?/sec
in_list_cols/Utf8/list=8/match=0%                      1.00     50.6±0.15µs        ? ?/sec    1.01     51.2±0.36µs        ? ?/sec
in_list_cols/Utf8/list=8/match=100%                    1.03    211.2±3.26µs        ? ?/sec    1.00    205.0±0.41µs        ? ?/sec
in_list_cols/Utf8/list=8/match=50%                     1.01    329.4±0.68µs        ? ?/sec    1.00    324.6±0.80µs        ? ?/sec

Resource Usage

in_list — base (merge-base)

Metric Value
Wall time 275.1s
Peak memory 47.7 MiB
Avg memory 23.1 MiB
CPU user 579.0s
CPU sys 1.9s
Peak spill 0 B

in_list — branch

Metric Value
Wall time 335.1s
Peak memory 41.5 MiB
Avg memory 17.1 MiB
CPU user 579.6s
CPU sys 1.9s
Peak spill 0 B

File an issue against this benchmark runner

@alamb alamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @geoffreyclaude -- this looks good to me.

It is also nice that it doesn't suffer the slowdown of my attempt. I merged this up from main and added a small slt test update. I think it is ready to go

pub fn normalize(mut self) -> Self {
use crate::float_semantics::{normalize_float, normalize_floats};

fn normalize_array<A: Array + From<ArrayData> + 'static>(array: &mut Arc<A>) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found this overly complicated -- I think it is working around the fact you can't pass an owned array to normalize_floats. Here is a proposed follow on PR to fix it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That does seem cleaner 😅

}

/// SQL membership equates the zero signs, while the primitive filters compare bits.
fn add_missing_signed_zero<T: ArrowPrimitiveType>(in_array: ArrayRef) -> Result<ArrayRef>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice

}
}

fn normalize_in_list_value(value: ColumnarValue) -> ColumnarValue {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this I also think should be a method on ColumnarValue. I will try and refactor it

@alamb
alamb enabled auto-merge November 7, 2026 10:49
@alamb
alamb added this pull request to the merge queue Nov 7, 2026
alamb added a commit to alamb/datafusion that referenced this pull request Nov 7, 2026
…ize` in `InListExpr`

Rebased on apache#25186. Its `normalize_in_list_value` helper, `ArrayStaticFilter`
and `ScalarValue::normalize` now call the owned `float_semantics::normalize`
and `ColumnarValue::normalize`. Drop the upgrade guide entry.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Merged via the queue into apache:main with commit 94486b1 Nov 7, 2026
43 of 44 checks passed
@alamb

alamb commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

Here is my proposal for cleaning up the floating point code:

xudong963 pushed a commit that referenced this pull request Nov 9, 2026
…27204)

## Which issue does this PR close?
- part of #24461
- Backport of #25186 to `branch-56`
- Related to #27121.

Co-authored-by: Geoffrey Claude <[email protected]>
robertmu added a commit to lagodb/lagodb that referenced this pull request Nov 10, 2026
Push float comparisons to Iceberg as exact predicates. Arrow and
Iceberg order floats by IEEE totalOrder, while PostgreSQL treats -0 and
0 as equal and orders every NaN above every number. The new
`predicate::float` rewrites each comparison so it accepts exactly the
rows PostgreSQL accepts:

- A zero constant gets the sign that puts both zeros on the correct
  side.
- `>` and `>=` also accept `isnan`, and `<` and `<=` reject it.
- A double value compared with a real column is rounded to the
  neighbouring real on the side each operator keeps.

The planner costs `>` and `>=` as the OR with `isnan` that they bind
to.

Query offload now accepts float comparisons, GROUP BY keys and join
keys. It no longer rejects float join keys. DataFusion folds -0 into +0
and keeps NaN payloads apart, which is an accepted engine difference.
Float ORDER BY stays in PostgreSQL.

Comments now record the upstream defects that are not worked around
here:

- DataFusion 55's float IN-list, and the IN-list dynamic filter built
  from a small hash-join build side, compare float bits and miss -0
  rows (apache/datafusion#25186).
- The sort-merge semi/anti/mark fallback panics on a NaN key at a batch
  boundary (apache/datafusion#25134).
- Iceberg filters on files written before a type promotion round the
  literal down to the old type (apache/iceberg-rust#3122, #3540).

SUM(int8) now casts its input to Decimal128(38,0) before DataFusion's
native SUM, because the native Int64 SUM wraps on overflow. The sum
stays exact and can be compared in HAVING. Remove the now-unused
`NumericFromInt64` output codec.
limadog9 pushed a commit to limadog9/datafusion that referenced this pull request Nov 11, 2026
…apache#27202)

## Which issue does this PR close?

- Related tof apache#27121
- Split out of apache#27181

## Rationale for this change

DataFusion normalizes `-0.0` to `+0.0` via
`float_semantics::normalize_floats(&ArrayRef)`.

@mkleen centralized the float normalization in 
- apache#26595

Thanks to @jayzhan211 for responding

However, because it borrows its argument, any array that contains `-0.0`
is copied into a new buffer, even if there are no other users. Also it
forces a bunch of unecessary (Arc) clones;

It would be nice to reuse the allocation if possible

## What changes are included in this PR?

Add `float_semantics::normalize` that takes an owned array and reuses
the allocation if possible
deprecaate the old dversion

## What is the testing strategy for this PR?

Added some new tests

## Are there any user-facing changes?

* `float_semantics::normalize_floats` is deprecated in favor of
`float_semantics::normalize`,
* `ColumnarValue::normalize` is new.

## Follow ons
- I think we can clean up a non trivial amount of
apache#25186 with this function,
specifically:
https://github.com/apache/datafusion/pull/25186/changes#r4501319899

---------

Co-authored-by: Claude Fable 5.1 <[email protected]>
Co-authored-by: Jay Zhan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

common Related to common crate optimizer Optimizer rules physical-expr Changes to the physical-expr crates sqllogictest SQL Logic Tests (.slt) v57.0.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Regression: short floating-point IN lists mishandle signed zero

5 participants