Represents Clifford operations using a table where each column says how that Clifford operation conjugates a generator of the Pauli group.
Example usage:
import cirq from clifford_tableau import CliffordTableau a, b = cirq.LineQubit.range(2) circuit = cirq.Circuit(cirq.H(b), cirq.CNOT(a, b), cirq.H(b)) tableau = CliffordTableau(circuit) print(tableau) # | 0 1 # ------+-xz-xz- # 0 | XZ Z_ # 1 | Z_ XZ # sign | ++ ++ print(tableau(cirq.X(a))) # X(0)*Z(1) print(tableau(cirq.X(a) * cirq.Y(b))) # -Y(0)*X(1) assert tableau == CliffordTableau(cirq.CZ(a, b)) s = CliffordTableau(cirq.S(a)) assert s.inverse() == CliffordTableau(cirq.S(a)**-1) != s assert s.then(s) == CliffordTableau(cirq.Z(a))