Each bisection now runs two V-cycles after the first projection. The graph is
coarsened again with every match inside one side, so the split carries to the coarse
graph with the same cut. It is refined there and on the way back down, which never
raises the cut.
The best few trees are annealed after reconfiguration (quantum_tn::anneal). Random
rotations at each node are accepted on the change in log total cost at a falling
temperature; the cheapest tree seen is kept, then reconfigured again. A rotation keeps
the node's index set, so it changes the cost of two contractions only.
On the 61-qubit Nighthawk logical circuits (split, reduced, 1024 trials, 8 restarts),
the median of 4 seeds, in log10 complex multiply-adds for one amplitude:
depth before after
8 5.30 5.29
12 8.10 8.09
16 11.12 10.97
20 14.02 13.68
At depth 20 the search takes about 1.7 times as long.
Also tried, and left out: 24 initial partitions per bisection (no gain at depth 16 at
equal time), a coarsening rating that keeps coarse nodes balanced (mixed), more
refinement passes (no change), and 200 annealing sweeps (no better than 50).
The tensor-network plan pinned in tests/bit_identity.rs changes, by design. The native
and WASI builds compute the same new digest. A test checks that annealing never costs
more, keeps every tensor contracted once and after it exists, repeats its tree for a
seed, and gives the dense amplitude.
The changelog also records what 0.6.11 gained after its entry was written: the
circuit's layout as data, path-search restarts and the command line's release builds.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 5c253c907402ce4a8e6140a676e3e58d86e01398)