Skip to content

Releases: graphistry/pygraphistry

v0.57.0 — GFQL perf: parse caching, single-hop fast path, structured returns

29 Jun 02:16
eac2630

Choose a tag to compare

v0.57.0 — GFQL performance: parse caching, single-hop fast path, structured returns

A performance-focused GFQL release. Most changes are transparent (same results, faster); one is a user-visible output improvement (RETURN a).

Highlights

Faster GFQL, same results

  • Parse memoization — repeated Cypher queries skip the ~15 ms lark parse (parse_cypher), and repeated row-expressions skip their parse + transformer rebuild (parse_expr). ~1.3–1.7× faster end-to-end on small/interactive queries; the fixed per-call compile cost of a repeated query drops to ≈ parity with the equivalent native chain. Cached ASTs are deeply immutable, so sharing is safe.
  • Single-hop fast path (pandas + cuDF) — node-only MATCH (n) and 1-hop MATCH (a {f})-[e]->(b) skip the BFS forward/backward/combine machinery. ~100× faster on pandas (node filter 204→2 ms @10m rows); on cuDF it stays on the resident frame (a couple of semi-joins instead of the BFS + ~31 drop_duplicates). Differential-verified equivalent to the full path across 440 random graphs + targeted edge cases.
  • dtype-gated detection — numeric/bool columns skip the spurious astype(str) + regex scan in temporal/list detection: where_rows ~3.1× (pandas), ~4.4–13.3× (cuDF).
  • Redundant-dedup removal — dropped .unique() passes that only fed .isin() membership (byte-identical; one fewer GPU kernel launch per hop).

Structured whole-entity returns (#1650)user-visible

  • Terminal Cypher RETURN a (a whole node/edge) now emits structured flattened columns (a.id, a.val, …) instead of a single Cypher display string. The columns already exist before projection, so this is near-free, lossless, directly usable, and serializes to JSON/CSV/Parquet/Arrow. Measured ~2–6.4× (pandas) / ~2.7–4.3× (cuDF).
  • The human-readable display string is still available on demand via render_entity_text(result, alias).
  • Migration: if you previously parsed the rendered ({id: …, …}) string out of a RETURN a column, read the a.* columns directly instead (or call render_entity_text).

Fixes

  • Single-hop fast path now honors prune_to_endpoints (was returning both endpoints) by declining to the full path.
  • RETURN a, a.val no longer emits a duplicate a.val column.
  • Chains on edges-only graphs (no node-id binding) preserve the materialized binding through the full path (fixes a corrupt result / NotImplementedError on Python 3.14).
  • The chain fast path no longer bypasses prechain/postchain/postload policy hooks (a policy can deny execution) — policy-bearing queries take the full path.

Compatibility

No API changes. The one behavior change is the RETURN a output format (above). Default un-indexed traversal behavior is unchanged. pandas/cuDF production paths validated; polars/dask/spark untouched by the fast path.

v0.56.0

23 May 17:59
710729e

Choose a tag to compare

PyGraphistry 0.56.0

Broad GFQL/Cypher release with public tooling additions, stricter validation of invalid query shapes, private compatibility cleanup, and substantial implementation shrink.

Highlights

  • Added public visualization settings contracts and committed schema artifacts for downstream tooling.
  • Expanded GFQL layout-chain, encode-call, temporal, predicate, and coverage-audit capabilities.
  • Hardened local Cypher validation and native physical planning across reentry, OPTIONAL MATCH, multiple MATCH, CALL, pattern predicates, and temporal comparisons.
  • Removed private GFQL compatibility shims and stale fallback paths while preserving documented public APIs.
  • Added migration guidance for legacy api=1/api=2 auth settings, deprecated compiler-inspection internals, invalid/ambiguous Cypher query shapes, and private GFQL helper imports.

Compatibility

Expected impact is low for users on documented APIs: current api=3 authentication, valid GFQL/Cypher queries, public g.gfql(...) / g.gfql_remote(...), documented Chain constructors, and documented predicate APIs continue to work.

Full changelog

0.55.1

06 May 07:21
ab459fe

Choose a tag to compare

chore(release): cut 0.55.1 changelog section (#1323)

v0.54.1

08 Apr 23:56
75110a5

Choose a tag to compare

PyGraphistry 0.54.1

Patch release focused on stability, typing scaffolding, CI hardening, and expanded regression coverage.

Highlights

  • CI hardening and speedups via uv lockfile-based installs and supply-chain cooldown policy.
  • Added initial GFQL IR type layer (graphistry/compute/gfql/ir/*) as frozen dataclass scaffolding for compiler/binder work.
  • Multiple GFQL/Cypher correctness fixes, including OPTIONAL MATCH execution improvements and shortest-path-related parity hardening.
  • Expanded test coverage across GFQL/Cypher/cudf/oracle parity paths.

Full changelog

v0.53.16

01 Apr 20:47

Choose a tag to compare

Added

  • GFQL native-chain rows() now materializes connected multi-alias bindings tables for named traversal chains (#880).

Fixed

  • Duplicate aliases are rejected in both legacy named-chain execution and direct rows(binding_ops=...) execution.
  • Missing alias-prefixed bindings properties now project as null instead of failing with a generic row-expression error.

Tests

  • Added regression coverage for binding-op duplicate aliases and native-chain injection guards.

v0.53.13 - Connected Multi-Alias Row Bindings

01 Apr 06:00
9632479

Choose a tag to compare

Highlights

  • Added direct Cypher support for connected multi-alias row bindings in scalar projections.
  • Added bounded WITH ... MATCH reentry support for connected suffix projections using the same row-binding path.
  • Landed the benchmark-facing continuation behind interactive-short-2, closing the narrower blockers #981 and #1006.

Scope

This release targets the connected single-path / connected multi-pattern lane. It keeps broader generalized row-binding architecture work under the still-open umbrella #880.

Validation

  • Hosted CI green on the product merge and the release PR
  • Targeted DGX cuDF validation green on official RAPIDS 26.02 cuda13
  • Publish workflow green: 23834354640
  • PyPI version verified: 0.53.13

Install

pip install -U graphistry

Full changelog: https://github.com/graphistry/pygraphistry/blob/master/CHANGELOG.md

v0.53.11 - Cypher WITH -> UNWIND Reentry

01 Apr 00:07
5f737dd

Choose a tag to compare

PyGraphistry v0.53.11 adds a focused Cypher/GFQL fix for graph-backed WITH -> UNWIND -> MATCH continuation.

Highlights

  • Direct local Cypher now supports the narrow graph-backed shape MATCH ... WITH collect([DISTINCT] alias) AS list UNWIND list AS alias MATCH ... RETURN.
  • The admitted path is covered end-to-end on both pandas and cuDF, including targeted DGX validation.
  • Unsupported adjacent shapes remain explicit fail-fast errors instead of silently widening semantics.

Included Changes

  • MATCH ... WITH collect([DISTINCT] alias) AS list UNWIND list AS alias MATCH ... RETURN lowering support
  • Additional parser/lowering regression coverage for admitted and rejected shapes
  • A small cugraph typing baseline fix needed to keep current hosted typecheck green

Install

pip install -U graphistry==0.53.11

Full changelog: https://github.com/graphistry/pygraphistry/blob/master/CHANGELOG.md

v0.53.10 - Bounded Cypher Reentry

31 Mar 08:46
7095102

Choose a tag to compare

Highlights

  • Added bounded direct local Cypher reentry support for the vectorized same-alias MATCH ... WITH ... MATCH ... subset.
  • Added carried scalar projection and trailing RETURN / ORDER BY support on the bounded reentry path.
  • Hardened fail-fast behavior for unsupported cross-alias, fresh row-seeded, and prefix-order-dependent reentry shapes.
  • Added pandas and cuDF regression coverage for bounded reentry, including targeted DGX validation on official RAPIDS 26.02 cuda13.

Notes

  • This release keeps the bounded-reentry feature intentionally narrower than a general WITH or row-carrier redesign.
  • Follow-on cleanup and design work are tracked separately in #987 and #989.

Installation

pip install -U graphistry==0.53.10

Links

v0.53.5

18 Mar 02:06
339a623

Choose a tag to compare

Fixed

  • GFQL: Fixed g.gfql() rejecting pre-serialized Let dict envelopes ({"type": "Let", "bindings": {...}}). Unblocks ETL server from passing gfql_query Let payloads to g.gfql().
  • GFQL / Remote: Fixed _step_to_json emitting "ChainRef" instead of "Ref". Removed spurious "ChainRef" alias from from_json() and all documentation — the wire type has always been "Ref".

Added

  • GFQL / Remote: gfql_remote() now accepts output parameter for selecting which Let/DAG binding to return.

v0.53.4

17 Mar 09:31
4b1b803

Choose a tag to compare

Fixed

  • GFQL / Remote: Fixed gfql_remote() silently dropping WHERE clauses — queries with same-path constraints (e.g., WHERE a.x = b.y) now send the full Chain envelope via a new gfql_query request field. The existing gfql_operations flat array is still sent for backward compatibility with older servers.

Added

  • GFQL / Remote: gfql_remote() now accepts ASTLet/Let dict input for DAG queries, serialized as {"type": "Let", ...} in the gfql_query field.
  • GFQL / Remote: gfql_remote() now accepts Cypher strings (compiled locally, sent as Chain or Let wire format). Supports MATCH ... RETURN, GRAPH { ... }, and GRAPH g = ... USE g ... forms.
  • GFQL / Remote: gfql_remote() now accepts params for parameterized Cypher queries.

Docs

  • Updated remote mode guide with Cypher string, GRAPH constructor, multi-stage pipeline, and params examples.