def test_apply_CZ(self): # Classical CNOT z0x0 = StabilizerState([[0, 0, 1, 0], [0, 1, 0, 0]]) z1x1 = StabilizerState([[0, 0, 1, 0, 1], [0, 1, 0, 0, 1]]) z0x0.apply_X(0) z0x0.apply_CZ(0, 1) z0x0.put_in_standard_form() self.assertTrue(z0x0 == z1x1) # EPR pair z0z0 = StabilizerState([[0, 0, 1, 0], [0, 0, 0, 1]]) epr = StabilizerState([[1, 1, 0, 0], [0, 0, 1, 1]]) z0z0.apply_H(0) # Effective CNOT z0z0.apply_H(1) z0z0.apply_CZ(0, 1) z0z0.apply_H(1) self.assertTrue(z0z0 == epr) # Graph state z0z0 = StabilizerState([[0, 0, 1, 0], [0, 0, 0, 1]]) graph_state = StabilizerState([[1, 0, 0, 1], [0, 1, 1, 0]]) z0z0.apply_H(0) z0z0.apply_H(1) # Effective CPHASE z0z0.apply_CZ(0, 1) self.assertTrue(z0z0 == graph_state)
def test_gaussian_elimination(self): S = StabilizerState(["XZZ", "YIX", "IXX"]) S.put_in_standard_form() self.assertTrue( np.array_equal( S.to_array(), StabilizerState(["+1XZZ", "-1ZYZ", "-1ZZY"]).to_array()))