Repository navigation
v0.4.0: undirected stats, written-order pipelines, multi-key sort, string-id fixes
Behaviour changes
Pipeline steps now run in the order written (as in Polars). Previously some orderings were silently reordered: select().distinct() deduplicated over every column, and head() written before sort/filter was applied after them. A few pipelines that used to succeed incorrectly now raise: a filter on a column’s old name after rename, a filter on a column dropped by an earlier select, and a non-filter step on the edges before nodes().
from_networkx writes undirected graphs in both directions, so default settings now give NetworkX’s undirected results. Pass symmetrize=False for the old frame. On these frames, use betweenness(direction="both") to match NetworkX.
Added
direction= on density, avg_path_length, diameter, describe, pagerank, closeness and betweenness. "both" matches NetworkX on undirected graphs.
Multi-key sort: sort(["club", "pagerank"], descending=[False, True]). Ties keep input order on every path.
join() and group_by().agg() work in one pipeline, in either order.
Orderings that used to raise now work: rename(...).sort(new_name), a filter after group_by (SQL HAVING), and chained renames.
Fixed
String node ids work in every Arrow layout (string, large_string, string_view and dictionary-encoded), scanned or in memory. In 0.3.0, every Parquet string-id scan failed.
scan_edges(...).collect() returns every column of the file, not just src/dst.
Weight expressions on scans can reference src/dst.
sort and aggregations work on dictionary-encoded (categorical) columns.