def test_controlled_phase(self, tol): """Test the CZ symplectic transform.""" s = 0.543 S = controlled_phase(s) # test that S = R_2(pi/2) CX(s) R_2(pi/2)^\dagger R2 = block_diag(np.identity(2), rotation(np.pi/2))[:, [0, 2, 1, 3]][[0, 2, 1, 3]] expected = R2 @ controlled_addition(s) @ R2.conj().T assert S == pytest.approx(expected, abs=tol) # test that S[x1, x2, p1, p2] -> [x1, x2, p1+sx2, p2+sx1] x1 = 0.5432 x2 = -0.453 p1 = 0.154 p2 = -0.123 out = S @ np.array([x1, x2, p1, p2])*np.sqrt(2*hbar) expected = np.array([x1, x2, p1+s*x2, p2+s*x1])*np.sqrt(2*hbar) assert out == pytest.approx(expected, abs=tol)
def test_controlled_phase(self): """Test the CZ symplectic transform.""" self.logTestName() s = 0.543 S = controlled_phase(s) # test that S = R_2(pi/2) CX(s) R_2(pi/2)^\dagger R2 = block_diag(np.identity(2), rotation(np.pi/2))[:, [0, 2, 1, 3]][[0, 2, 1, 3]] expected = R2 @ controlled_addition(s) @ R2.conj().T self.assertAllAlmostEqual(S, expected, delta=self.tol) # test that S[x1, x2, p1, p2] -> [x1, x2, p1+sx2, p2+sx1] x1 = 0.5432 x2 = -0.453 p1 = 0.154 p2 = -0.123 out = S @ np.array([x1, x2, p1, p2])*np.sqrt(2*hbar) expected = np.array([x1, x2, p1+s*x2, p2+s*x1])*np.sqrt(2*hbar) self.assertAllAlmostEqual(out, expected, delta=self.tol)