[PERF] Update reverse starts-match aggregation boundary - #1684
[PERF] Update reverse starts-match aggregation boundary#1684samukweku wants to merge 14 commits into
Conversation
|
|
Resolved the CI failures from the released The pyjanitor test environment currently installs a released Rust extension whose starts+matches Focused verification: |
Strict empty-tape contractThe Rust reverse match kernels intentionally reject an empty For non-empty tapes, Rust validates the tape shape. Pyjanitor remains responsible for supplying the binary 0/1 match values. This test covers the all-zero-width path so the strict Rust contract is enforced at the integration boundary rather than only documented. |
Empty-tape dispatch fixThe strict Rust contract remains intentional: direct reverse match kernels reject an empty ELI5: Python checks whether there are any tickets to hand to Rust. If there are no tickets, it returns an empty answer itself; Rust only receives a real tape that it can validate. Covered by the existing all-zero-width regression test. Targeted result: |
Summary
starts + matchesaggregation acrosssum,min,max,prod, andsizelengthargument for the new janitor-rs APIlengthContract
The Rust kernels validate the starts/matches tape contract.
start == index.len()is a valid zero-width suffix and consumes no matches entries. Negative starts remain invalid. Empty-input behavior is disclosed in janitor-rs issue #79.Verification
The focused reverse aggregation suite passes:
pixi run pytest tests/functions/test_conditional_join.py -k agg_rev -q(20 passed).Rust test and boundary changes are tracked in janitor-rs PRs #87, #88, #91, #92, and #93. Full old-vs-compact runtime and memory tables, including tiny through super-large duplicate/unique cases, are documented in janitor-rs issue #85.
Closes #85
Part of #23