Commit 458498f
test(gfql): pin the pandas-3 case-mapping divergence the new lane coverage found (#1812)
Putting `test_viz_pipeline_conformance.py` into the polars lane turned it red on
the first CI run — which is the point of the parent commit, and the finding is
real, not a fixture problem.
The polars lane resolves **pandas 3.0.3**; local dev and `test-gfql-core`
resolve 2.3.3. pandas 3 defaults to a PyArrow-backed `str` dtype whose
`utf8_upper`/`utf8_lower` do SIMPLE Unicode case mapping, where Python, polars
and pandas 2 do FULL mapping. Measured:
Python polars pandas 2 pandas 3
'ss'.upper() 'SS' 'SS' 'SS' U+1E9E
'I-dot'.lower() 'i'+U+0307 same same 'i'
So `MATCH (n) WHERE toUpper(n.name) = 'STRASSE'` returns a different row set on
pandas 3 than on polars, with NO error — and pandas is the oracle the parity
suites compare against. Filed as #1812; it needs an owner call on which mapping
is correct (Neo4j uses Java's full mapping; openCypher does not pin it), so it
is not fixed here.
Pinned with `xfail(strict=True)` conditioned on a runtime PROBE of the backend
(`pd.Series(["ss"]).str.upper() != "SS"`), applied per-case rather than to the
whole matrix — everything else there is casing-agnostic and must keep passing on
both backends. On pandas 2 the condition is False and the marker is inert, so
the cases must PASS; on pandas 3 they must FAIL. Whoever reconciles the backends
is told to delete the marker instead of finding a stale skip.
Also fixes the id builder for the matrix: it did `t[0]`, which breaks the moment
a case becomes a `pytest.param`. Uses `getattr(t, "values", t)[0]` rather than an
isinstance against `_pytest.mark.structures.ParameterSet` — that is a private
import, and this needs no more than "tuple, or the thing wrapping one".
Local: 31 passed with cuDF absent (pandas 2.3.3, marker inert).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YsqAZQLbqjSDrYSFz2GoB1 parent bb440f9 commit 458498f
2 files changed
Lines changed: 43 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
Lines changed: 42 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
395 | 395 | | |
396 | 396 | | |
397 | 397 | | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
398 | 419 | | |
399 | 420 | | |
400 | 421 | | |
| |||
433 | 454 | | |
434 | 455 | | |
435 | 456 | | |
436 | | - | |
437 | | - | |
438 | | - | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
439 | 463 | | |
440 | 464 | | |
441 | | - | |
442 | | - | |
443 | | - | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
444 | 471 | | |
445 | 472 | | |
446 | 473 | | |
| |||
466 | 493 | | |
467 | 494 | | |
468 | 495 | | |
469 | | - | |
470 | | - | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
471 | 505 | | |
472 | 506 | | |
473 | 507 | | |
| |||
0 commit comments