diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a3d138a00..f77f7647fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,7 +59,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - **GFQL / native chain reply-author row-shaping locks (#1412, #880)**: Added native GFQL `rows()` + explicit `rows(binding_ops=...)` regression coverage for the SNB IC8 `recent-replies` and IS7 `message-replies` reply-author projection shapes, locking the pygraphistry-side behavior needed to retire adapter-local reply-author joins in benchmark coverage. - **GFQL / Cypher two-MATCH reentry varlen regression hardening (#1001)**: Strengthened reentry varlen acceptance assertions from shape-only checks to exact expected rows, and added forward/reverse split-vs-connected query equivalence regressions to guard against wrong-row drift in the `match5-25/26` query family. - **GFQL / Cypher reentry ordered-top-k amplification (#1342, #880 partial)**: Added lowering regressions for MATCH-after-WITH re-entry with single-column and multi-column ordered top-k prefixes, carried-scalar top-k alignment, `LIMIT 0` empty-prefix behavior, `SKIP` failfast retention, plus cuDF parity coverage for the multi-row top-k lane. -- **GFQL / Cypher tag-cooccurrence join+aggregation cardinality amplification (#1396, #880 residual lane)**: Added focused IC6-shape regression coverage for `collect(distinct friend) -> UNWIND -> connected comma MATCH -> WITH tag.name, count(post)` with non-trivial grouped counts (`Alpha=2`, `Beta=1`) plus cuDF parity guard, so the residual tag-cooccurrence join-aggregation lane is pinned without adapter-side workaround assumptions. +- **GFQL / Cypher tag-cooccurrence join+aggregation cardinality amplification (#1396, #1415, #880 residual lane)**: Added focused IC6-shape regression coverage for `collect(distinct friend) -> UNWIND -> connected comma MATCH -> WITH tag.name, count(post)` with non-trivial grouped counts (`Alpha=2`, `Beta=1`) plus cuDF parity guard, so the residual tag-cooccurrence join-aggregation lane is pinned without adapter-side workaround assumptions. - **DataFrame join helper branch coverage expansion + RAPIDS matrix validation (#1380)**: Expanded `graphistry/tests/compute/dataframe/test_join.py` to cover non-overwrite and empty-join schema branches (`joined_hidden_scalar_columns`, `joined_alias_columns`, `connected_inner_join_rows`), prefix/no-label projection behavior (`project_node_attrs`), inequality branch coverage (`ineq_eval_pairs`), and semijoin no-shared/delegation paths (`semijoin_eval_pairs`). Kept GFQL reentry/collision semantics in integration suites. Validated on DGX GPU for both RAPIDS `25.02` and `26.02` using `docker/test-rapids-official-local.sh` with GFQL profile + dataframe join tests. ### Internal diff --git a/graphistry/tests/compute/gfql/cypher/test_lowering.py b/graphistry/tests/compute/gfql/cypher/test_lowering.py index b780e89c36..7b8811d7ee 100644 --- a/graphistry/tests/compute/gfql/cypher/test_lowering.py +++ b/graphistry/tests/compute/gfql/cypher/test_lowering.py @@ -11055,7 +11055,7 @@ def test_string_cypher_executes_issue_1000_ic6_exact_runtime_minimal_on_cudf() - ] -def test_issue_1396_tag_cooccurrence_join_aggregation_counts() -> None: +def test_issue_1396_issue_1415_tag_cooccurrence_join_aggregation_counts() -> None: """IC6 tag-cooccurrence join+aggregation shape keeps grouped post cardinality.""" result = _mk_issue_1396_tag_cooccurrence_join_aggregation_graph().gfql( _issue_1000_ic6_query(), @@ -11068,7 +11068,7 @@ def test_issue_1396_tag_cooccurrence_join_aggregation_counts() -> None: ] -def test_issue_1396_tag_cooccurrence_join_aggregation_counts_on_cudf() -> None: +def test_issue_1396_issue_1415_tag_cooccurrence_join_aggregation_counts_on_cudf() -> None: pytest.importorskip("cudf") result = _mk_issue_1396_tag_cooccurrence_join_aggregation_graph_cudf().gfql(