GitHub

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))

Read the original on github.com ↗