Skip to content

v0.21.2

Choose a tag to compare

@torchlens-release torchlens-release released this 09 Mar 17:53
· 26 commits to main since this release

v0.21.2 (2026-03-09)

This release is published under the GPL-3.0-only License.

Bug Fixes

  • vis: Avoid graphviz.Digraph memory bomb when ELK fails on large graphs (f5563ee)

When ELK layout fails (OOM/timeout) on 1M+ node graphs, the fallback path previously built a graphviz.Digraph in Python — nested subgraph body-list copies exploded memory and hung indefinitely. Now render_elk_direct handles the failure internally: reuses already-collected Phase 1 data to generate DOT text without positions and renders directly with sfdp, bypassing graphviz.Digraph entirely.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • vis: Bypass ELK for large graphs — use Python topological layout (37cce3a)

ELK's stress algorithm allocates TWO O(n²) distance matrices (n² × 16 bytes). At 100k nodes that's 160 GB, at 1M nodes it's 16 TB — the root cause of the std::bad_alloc. The old >150k stress switch could never work.

For graphs above 100k nodes, we now skip ELK entirely and compute a topological rank layout in Python (Kahn's algorithm, O(n+m)). Module bounding boxes are computed from node positions. The result feeds into the same neato -n rendering path, preserving cluster boxes.

If ELK fails for smaller graphs, the Python layout is also used as a fallback instead of the old sfdp path that built a graphviz.Digraph (which exploded on nested subgraph body-list copies).

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com


Detailed Changes: v0.21.1...v0.21.2