qvm
qvm copied to clipboard
add depolarizing stabilizer QVM and error-only QVM
The PR introduces two further variants of noisy QVMs:
-
fowler-qvm
: A variant ofstabilizer-qvm
which injects depolarizing noise after "basic" operations. "Basic" operations are divided into types (identity, nontrivial 1Q, 2Q, measure, reset), and noise can be selectively toggled for each of these types. (I think that in the current implementation these types are explicitly given by named gates, e.g.,I
andH
, as opposed to any ol' 1Q Clifford.) This class type is namedfowler-qvm
rather thandepolarizing-stabilizer-qvm
because of this toggling ability, which is a slightly different noise model than straight-up depolarizing noise; to our knowledge, this modified noise model was specified by Austin Fowler in work on topological error correction. -
error-qvm
: A restriction offowler-qvm
to circuits which, when performed without noise, are guaranteed to always measure 0. Under this assumption, we can propagate through the circuit the Pauli errors arising in depolarizing noise, rather than tracking anything like the underlying quantum state, so that the space complexity becomes linear in qubit count. A similar simulator can be found in Autotune.
This PR is joint work with @karalekas, carried out in 2020 under the Eigenware umbrella.
Happy to take advice; I don't feel that this code perfectly conforms to existing QVM code style.