Skip to content

[BUG] cuDF: shared-alias multi-pattern with relationship-property projection segfaults (exit 139) #1355

@lmeyerov

Description

@lmeyerov

Summary

On cuDF (rapids 25.02 + 26.02), a Cypher query with shared aliases across comma-separated MATCH patterns and a relationship-property projection in RETURN crashes the Python process (SIGSEGV / exit 139).

Repro (rapids 25.02 / 26.02 GPU container)

import pandas as pd, graphistry, cudf
graphistry.register(api=3, server="hub.graphistry.com")

nodes = pd.DataFrame({"id":["a1","b1"],"label__A":[True,False],"label__B":[False,True]})
edges = pd.DataFrame({"s":["a1","b1"],"d":["b1","a1"],"type":["R","S"],"weight":[7,9]})
g = (graphistry.nodes(cudf.from_pandas(nodes),"id")
     .edges(cudf.from_pandas(edges),"s","d")
     .bind(edge_label="type"))

# Both of the following segfault with EXIT=139:

# A) WITH-form (goes through flatten path from #1341):
g.gfql(
    "MATCH (a:A {id: 'a1'})-[r:R]->(b:B) "
    "WITH a, b, r "
    "MATCH (b)-[:S]->(a) "
    "RETURN r.weight AS w",
    engine="cudf",
)

# B) Hand-flattened single-MATCH (does NOT go through flatten):
g.gfql(
    "MATCH (a:A {id: 'a1'})-[r:R]->(b:B), (b)-[:S]->(a) "
    "RETURN r.weight AS w",
    engine="cudf",
)

Both crash. Pandas equivalent works correctly and returns [{'w': 7}].

Suspected cause

cuDF row-pipeline shared-alias join with relationship-property projection — likely a C-level interop issue in cudf merge / pylibcudf. Stack trace dumps come from _PyRun_SimpleFileObject with pylibcudf.* extension modules loaded.

The issue is NOT specific to the new flatten_carried_endpoint_rebind path from #1341 — it reproduces equally on the hand-flattened single-MATCH form, so the cuDF bug is in shared-alias multi-pattern join with rel-property projection regardless of how the query reaches it.

Acceptance criteria

  • The repro queries above execute without crashing on cuDF (rapids 25.02 + 26.02).
  • Result rows match the pandas baseline ([{'w': 7}]).
  • New parametrized test under graphistry/tests/compute/gfql/cypher/test_lowering.py covering shared-alias multi-pattern + rel-property projection on both engines.

Surfaced by

PR #1351 (#1341) test-amplification round-001. The corresponding cuDF parity test (test_string_cypher_executes_with_match_reentry_relationship_variable_carried_on_cudf) is currently @pytest.mark.skip'd with this issue as the link.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions