sim = StabilizerSim(num_qubits=3) sim.hadamard(2) sim.cnot(2, 0) sim.cnot(2, 1) sim.phase(0) sim.phase(1) sim.hadamard(0) sim.hadamard(1) sim.hadamard(2) print(sim)
-YII -IYI +IIX ---- +XIX +IXX +YYZ
Where each of the lines is the Pauli product at the start of the circuit that corresponds to a Z or X observable of a qubit at the end of the circuit.
I would like to convert this representation into an explicit state vector, like shown in the display at the end of this Quirk circuit:
I'd like to get the state vector without having to simulate the circuit in a state vector simulator, because sometimes the number of output qubits is significantly smaller than the number of intermediate qubits and in such cases it would be much cheaper to only convert the final stabilizer state into a state vector.
One possible solution is to take the output stabilizer state, perform a known decomposition into a circuit, then execute the circuit in a state vector simulator. But I doubt that's a particularly efficient approach.
Alternatively, I could perform a series of post-selected projective measurements in the vectir simulator. The initial state would be half of an entangled state, and each measurement (and its outcome) is determined by stabilizers from the table. Like this:
However, this requires doubling the qubit count which is a quadratic space and time overhead in the calculation.