Skip to content

fix(cypher): disambiguate IC4 HAS_TAG endpoints#1502

Merged
lmeyerov merged 1 commit into
masterfrom
codex/issue-1496-ic4-aggregation
May 17, 2026
Merged

fix(cypher): disambiguate IC4 HAS_TAG endpoints#1502
lmeyerov merged 1 commit into
masterfrom
codex/issue-1496-ic4-aggregation

Conversation

@lmeyerov
Copy link
Copy Markdown
Contributor

Closes #1496.

Summary

  • Disambiguate unlabeled forward HAS_<Label> destination bindings when graph node ids collide across labels and the implied label__<Label> column exists.
  • Add an IC4/new-topics regression using the official CASE aggregation shape with LDBC-style numeric id collisions between Post and Tag rows.
  • Update CHANGELOG.md.

Why

pyg-bench#4 showed direct-Cypher IC4 executing but returning the wrong tag set after the CASE blocker was fixed. The in-repo IC4 tests used globally unique ids, while the benchmark graph can have cross-label numeric id collisions. In that shape, -[:HAS_TAG]->(tag) is unlabeled, and the connected row-binding join could bind the colliding Post row as tag before sum(valid) / sum(inValid) and the post-aggregation WHERE.

Validation

  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_lowering.py::test_issue_1496_ic4_unlabeled_has_tag_destination_disambiguates_colliding_ids[pandas]
  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_lowering.py -k 'issue_1496 or ic4 or 1413'
  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_lowering.py -k '(multi_alias or issue_1496 or issue_1413 or binding_rows or rows) and not cudf'
  • ./bin/ruff.sh graphistry/compute/gfql/row/pipeline.py graphistry/tests/compute/gfql/cypher/test_lowering.py
  • ./bin/typecheck.sh graphistry/compute/gfql/row/pipeline.py
  • git diff --check
  • DGX RAPIDS 25.02 focused cuDF regression: passed
  • DGX RAPIDS 26.02 focused cuDF regression: passed

Note: the local broader slice without and not cudf hit unrelated cudaErrorNoDevice failures because this workstation imports cuDF but has no CUDA device. cuDF validation was done on dgx-spark.

pyg-bench follow-up

After this lands, rerun graphistry/pyg-bench#4 IC4/new-topics direct-Cypher conformance against a prepared pyg-bench checkout with the SF0.1 fixture:

uv run python scripts/run_dgx_spark_suite.py \
  --suite snb-interactive \
  --config configs/suites/snb-interactive-ic4-conformance-sf0.1.yaml \
  --output-dir results/runs/dgx-spark-snb-interactive-ic4-pygraphistry-<merge-sha>-sf0.1-r1 \
  --graphistry-repo-path /path/to/pygraphistry/graphistry

If SF0.1 reports ok, then consider the SF1/no-warmup rerun only if coordinator wants a scale confirmation; prior notes say SF1 can OOM on the shared DGX box.

@lmeyerov lmeyerov force-pushed the codex/issue-1496-ic4-aggregation branch 2 times, most recently from d2770e0 to 4c567c5 Compare May 17, 2026 18:49
@lmeyerov lmeyerov force-pushed the codex/issue-1496-ic4-aggregation branch from 4c567c5 to e1d1022 Compare May 17, 2026 18:52
@lmeyerov lmeyerov merged commit 3c5af8e into master May 17, 2026
269 of 271 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GFQL/Cypher IC4 direct-Cypher returns wrong aggregation results after CASE blocker fix

1 participant