Measured facts

No adjectives. Numbers, with methodology.

Every figure below was produced by the committed benchmark harness (benchmarks/bench.py) and recorded to benchmarks.json with commit hash and hardware. Nothing is hand-typed. Re-run it yourself and you'll get the same structural results.

Speed

py-code-visualizer mapped a 98,669-line Python project (1,399 files) into a complete call graph of 26,658 functions and 27,813 call edges in 4.86 seconds — ~5,484 functions/second.
Deterministic synthetic project (seed 1998, 5 layers, 1,393 modules), best of 3 runs, macOS arm64 / Python 3.14.0, commit 79c3900, measured 2026-07-20. Speed is hardware-dependent; reproduce: python benchmarks/bench.py.
On its own source (6,296 lines, 184 functions), the full graph builds in 68 ms.
Same run, same hardware, same JSON: targets[0] in benchmarks.json.

Accuracy & honesty

100% of emitted call edges carry file:line provenance — on both benchmark targets (27,813/27,813 and 136/136 edges).
Provenance is structural, not statistical: an edge without a source location cannot be emitted. Field confidence.provenance_pct in benchmarks.json.
On the 100k-line benchmark, edges resolve as 26,543 resolved, 816 inherited (via MRO), and 454 ambiguous — the ambiguous ones are flagged with their full candidate list, never silently guessed.
The synthetic project deliberately contains genuinely ambiguous calls (same-named functions, no import) to prove the flag-don't-guess behavior. Field confidence in benchmarks.json; behavior fenced by tests/test_graph.py::TestConfidenceTagging.

Determinism

Two independent runs on unchanged code produce byte-identical canonical JSON — proven by equal SHA-256 hashes on both benchmark targets.
e.g. synthetic monolith, both runs: 11d0598683de2b1b…. Fields determinism.sha256_run1/2 in benchmarks.json. This is what makes the output diffable, CI-gateable, and committable without phantom changes.

Privacy & safety

The generated interactive HTML makes 0 external network requests — verified by scanning the emitted document for external resource loads on both benchmark targets.
Field html.external_requests in benchmarks.json. Analysis itself is pure ast parsing: no code imported or executed, ever.

AI context efficiency

A task-scoped context pack focused on one function of the 100k-line project is an estimated 24,971 tokens vs 636,081 tokens of full source — 96.1% smaller (455 of 26,658 functions included under a 4,000-token selection budget).
Token counts are estimates (chars÷4), labeled as such everywhere. On the tool's own smaller source the reduction is 89.6%. Field context_pack in benchmarks.json.

How to cite these numbers. Each fact above is self-contained with its methodology and date. The raw data is benchmarks.json (commit 79c3900, JSON, MIT-licensed); the harness that produced it is in the repository at benchmarks/bench.py. If a number here ever disagrees with the JSON, the JSON wins.

← Back to home