test(gfql): stop test_index.py fabricating 20 failures without cudf_polars - #1811
Conversation
Update: the first CI run found what this PR exists to find
The polars lane resolves pandas 3.0.3; local dev and
So Filed as #1812. Not fixed here: it needs an owner call on which mapping is correct (Neo4j uses Java's full mapping; openCypher does not pin the algorithm; matching it on pandas 3 costs a Pinned with Worth stating plainly, because it is the argument for this PR: that divergence has been in the tree with a test already written for it, and the test never ran. |
458498f to
66a462f
Compare
…olars
`_engines()` appended `"polars-gpu"` when **`cudf`** imported. But `polars-gpu`
is the `cudf_polars` GPU collect target and raises
ImportError: GFQL engine='polars-gpu' requires the RAPIDS cudf_polars stack
without it. So any box with cuDF installed and `cudf_polars` absent — a common
developer configuration — got 20 failures indistinguishable from product
breakage, in a file that IS listed in `bin/test-polars.sh`. CI never caught it
because that lane installs neither package, so the parameter did not exist
there: a gate can only fabricate failures where it is never exercised.
Measured on a box with cuDF 25.10 and no `cudf_polars`:
before 20 failed, 116 passed
after 0 failed, 105 passed
SCOPE NOTE. This branch originally carried the whole CA4 allowlist change
(seven files added to `bin/test-polars.sh`). PR #1805
(`fix/gfql-polars-lane-invisible-tests`), opened concurrently, is a SUPERSET of
that list AND adds `test_polars_lane_completeness.py`, a guard that fails when a
polars-parametrized file is missing from the lane — which makes the fix
permanent rather than one-time. It also lands the same pandas-3 case-mapping
xfail, against the same issue. Reduced to the one hunk #1805 does not contain,
so the owner reviews the allowlist once instead of twice.
RUNTIME DELTA: zero. One test file's engine list and a CHANGELOG line; no
pyg-bench lane run required (CB5), checkable from the diff.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YsqAZQLbqjSDrYSFz2GoB
66a462f to
cee1dd0
Compare
Resolves the CHANGELOG.md conflict: master added an Infrastructure section and new Changed/Fixed/Documentation entries under [Development] while this branch added one Changed entry. Took master's file and re-inserted this branch's entry at the head of ### Changed. graphistry/tests/compute/gfql/index/test_index.py is untouched on master, so the branch side carries through unchanged. Verified against master: test_index.py IS listed (exactly once) in bin/test-polars.sh POLARS_TEST_FILES, and the test-polars lane installs the `test,polars` extras only, so the CHANGELOG claims still hold.
Resolves the CHANGELOG.md conflict only. Master added an Infrastructure section plus new Changed/Fixed/Documentation entries under [Development]; this branch adds one ### Changed entry. Took master's file verbatim and re-inserted this branch's entry at the head of ### Changed. graphistry/tests/compute/gfql/index/test_index.py is untouched on master, so the branch side carries through unchanged. This branch does not modify bin/test-polars.sh. Verified against this master: test_index.py is listed exactly once in bin/test-polars.sh POLARS_TEST_FILES (so the CHANGELOG's "a file that IS in the polars lane" claim holds), and the test-polars lane installs the `test,polars` extras only on ubuntu-latest, so "that lane installs neither package" holds too.
Only CHANGELOG.md changed on both sides. Resolved structurally, not textually: took master#\s file whole and re-inserted this branch#\s single ### Changed entry at the top of that section, so the diff vs master is +1/-0 on CHANGELOG. The eight source files this branch retypes were untouched by #1811 (which only moved test_index.py and the CHANGELOG), so they carry through unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYZRXegrALuXd3NHH5evqx
The remaining change
graphistry/tests/compute/gfql/index/test_index.pybuilt its engine list by appending"polars-gpu"whencudfimported:But
polars-gpuis thecudf_polarsGPU collect target, and without it GFQL raises:So any box with cuDF installed and
cudf_polarsabsent — a common developer configuration, and mine — gets 20 failures indistinguishable from product breakage, in a file that is listed inbin/test-polars.sh.CI never caught it because that lane installs neither package, so the
polars-gpuparameter did not exist there. A gate can only fabricate failures where it is never exercised — which is the same blind spot as #1795, one level down: not "a file that runs nowhere", but "a parameter that exists only where nobody looks".Measured
Box with cuDF 25.10, no
cudf_polars:The 15-test difference is the
polars-gpuparameters correctly no longer being generated; they still generate — and pass — on a box with the full RAPIDS stack.Runtime delta: zero
One test file's engine list and a CHANGELOG line. Per CB5 no pyg-bench lane run is required, and that is checkable from the diff.
What the (now-withdrawn) allowlist work found, for the record
Running the assembled lane locally and on GPU before rescoping produced evidence worth keeping, since #1805 will inherit these files:
2658 passed, 58 skipped, 0 failedin 160s, plus the appended cypher-lowering pass at49 passed. The lane's timeout is 10 min and it runs twice (plain + coverage); the added files cost ~15s per run.graphistry/test-rapids-official:26.02-gfql-polars,docker run --gpus all, cuDF 26.02.01 / polars 1.35.2, every cuDF and polars-gpu parameter live:394 passed, 0 failed, 0 skipped.test_indexed_bindings.py::test_explicit_polars_gpu_declines_indexed_helper_and_falls_backhas no GPU guard — building polars frames does not need the RAPIDS stack, so the graph constructs fine and the run dies later inside.gfql(). test(gfql): make the polars lane see the 280 tests it was skipping everywhere #1805 fixes this in the same file; flagging it so it is not lost.cudfimportable butlibnvrtc.so.12missing are that environment, not the product — they reproduce nowhere with a working CUDA runtime. Re-running on real hardware before reporting is why the conclusion is "no product failures" rather than seven issues.🤖 Generated with Claude Code
https://claude.ai/code/session_015YsqAZQLbqjSDrYSFz2GoB