Skip to content

feat(gfql): same-path WHERE executor (restack) - #917

Merged
lmeyerov merged 57 commits into
masterfrom
restack/where-core
Mar 1, 2026
Merged

lmeyerov merged 57 commits into
masterfrom
restack/where-core

Conversation

@lmeyerov

@lmeyerov lmeyerov commented Feb 5, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • add same-path WHERE executor (df_executor + same_path modules)
  • add list-form g.gfql([...], where=...) support and empty-chain guard
  • add extensive GFQL WHERE tests and mypy/lint fixes

Status

Testing

  • uv run python -m pytest graphistry/tests/compute/test_chain_where.py -q
  • uv run env PYTHONPATH=. python -m pytest tests/gfql/ref/test_df_executor_patterns.py -q

WHERE Examples

  • imports
from graphistry.compute import n, e_forward
from graphistry.compute.gfql.same_path_types import col, compare
  • Equality across node aliases:
    • g.gfql([n(name="a"), e_forward(name="r"), n(name="c")], where=[compare(col("a", "owner_id"), "==", col("c", "id"))])
  • Inequality across node aliases:
    • g.gfql([n(name="start"), e_forward(), n(name="end")], where=[compare(col("start", "score"), "<", col("end", "score"))])
  • Edge-to-edge comparison in a multi-edge chain:
    • g.gfql([n(name="a"), e_forward(name="e1"), n(name="b"), e_forward(name="e2"), n(name="c")], where=[compare(col("e1", "weight"), ">=", col("e2", "weight"))])
  • JSON/dict form (API/serialized usage):
    • {"chain": [...], "where": [{"eq": {"left": "a.owner_id", "right": "c.id"}}, {"gt": {"left": "start.score", "right": "end.score"}}]}

@lmeyerov
lmeyerov force-pushed the restack/where-core branch from 3af0e9e to e03871e Compare March 1, 2026 04:29
Comment thread CHANGELOG.md Outdated

### Tests
- **GFQL / df_executor**: Added comprehensive test suite (core, amplify, patterns, dimension) with 200+ tests covering Yannakakis semijoin, WHERE clause filtering, multi-hop paths, and pandas/cuDF parity.
- **GFQL / cuDF same-path**: Added strict/auto mode coverage for cuDF executor fallback behavior.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move

@lmeyerov
lmeyerov merged commit 4b7ecdd into master Mar 1, 2026
64 checks passed
@lmeyerov
lmeyerov deleted the restack/where-core branch March 1, 2026 18:22
pull Bot pushed a commit to admariner/pygraphistry that referenced this pull request Aug 15, 2026
Source filters read the node table at EVERY hops value (seed semi-join
preserves the graphistry#917 shortcut's perf intent, which blame shows was its only
intent); undirected tfp keep-set intersects the traversal's reached set so
filtered fixed-point equals the saturated bounded arm and engines agree.
All 8 RED pins flip; 42/42 green both engines.

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MF7uRZLKZaD6Q9FGWSmyXi
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.

1 participant