def test_Xgate_displacement(self): """Test displacement vector matches Xgate""" self.logTestName() x = 0.1234 H, _ = xdisplacement(x) _, d = quadratic_coefficients(H) expected = np.array([1, 0]) self.assertTrue(np.allclose(d, expected))
def test_displacement_vector(self): """Test displacement vector extracted""" self.logTestName() H = QuadOperator('q0', -0.432) + QuadOperator('p0', 3.213) A, d = quadratic_coefficients(H) expected_A = np.zeros([2, 2]) expected_d = np.array([3.213, 0.432]) self.assertTrue(np.allclose(A, expected_A)) self.assertTrue(np.allclose(d, expected_d)) _, d = quadratic_coefficients(QuadOperator('q0 q0')) expected = np.array([0, 0]) self.assertTrue(np.allclose(d, expected)) _, d = quadratic_coefficients(QuadOperator('p0 p1')) expected = np.array([0, 0, 0, 0]) self.assertTrue(np.allclose(d, expected))
def test_controlled_addition(self): """Test quadratic coefficients for CXgate""" self.logTestName() H, _ = controlled_addition(0.23) res, d = quadratic_coefficients(H) expected = np.fliplr(np.diag([1, 0, 0, 1])) self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([4])))
def test_two_mode_squeeze_coeff(self): """Test quadratic coefficients for S2gate""" self.logTestName() H, _ = two_mode_squeezing(0.23, hbar=self.hbar) res, d = quadratic_coefficients(get_quad_operator(H, self.hbar)) expected = np.fliplr(np.diag([1]*4)) self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([4])))
def test_rotation_coeff(self): """Test quadratic coefficients for Rgate""" # one mode H, _ = rotation(0.23, hbar=self.hbar) res, d = quadratic_coefficients(get_quad_operator(H, self.hbar)) expected = -np.diag(np.array([1, 1])) self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([2]))) # two modes H, _ = rotation(0.23, mode=1, hbar=self.hbar) res, d = quadratic_coefficients(get_quad_operator(H, self.hbar)) expected = np.zeros([4, 4]) expected[1, 1] = -1 expected[3, 3] = -1 self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([4])))
def test_controlled_phase(self): """Test quadratic coefficients for CZgate""" H, _ = controlled_phase(0.23) res, d = quadratic_coefficients(H) expected = np.zeros([4, 4]) expected[0, 1] = expected[1, 0] = -1 self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([4])))
def test_quadratic_phase_coeff(self): """Test quadratic coefficients for Pgate""" # one mode H, _ = quadratic_phase(0.23) res, d = quadratic_coefficients(H) expected = np.zeros([2, 2]) expected[0, 0] = -1 self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([2]))) # two modes H, _ = quadratic_phase(0.23, mode=1) res, d = quadratic_coefficients(H) expected = np.zeros([4, 4]) expected[1, 1] = -1 self.assertTrue(np.allclose(res, expected)) self.assertTrue(np.allclose(d, np.zeros([4])))
def test_squeeze_coeff(self, hbar): """Test quadratic coefficients for Sgate""" # one mode # pylint: disable=invalid-unary-operand-type H, _ = squeezing(0.23, hbar=hbar) res, d = quadratic_coefficients(get_quad_operator(H, hbar)) expected = -np.array([[0, 1], [1, 0]]) assert np.allclose(res, expected) assert np.allclose(d, np.zeros([2])) # two modes H, _ = squeezing(0.23, mode=1, hbar=hbar) res, d = quadratic_coefficients(get_quad_operator(H, hbar)) expected = np.zeros([4, 4]) expected[1, 3] = -1 expected[3, 1] = -1 assert np.allclose(res, expected) assert np.allclose(d, np.zeros([4]))
def test_Dgate_displacement(self): """Test displacement vector matches Dgate""" self.logTestName() a = 0.23-0.432j H, t = displacement(a, hbar=self.hbar) _, d = quadratic_coefficients(get_quad_operator(H, self.hbar)) expected = np.array([a.real, a.imag])*np.sqrt(2*self.hbar)/t self.assertTrue(np.allclose(d, expected)) self.assertTrue(np.allclose(a, t*(d[0]+d[1]*1j)/np.sqrt(2*self.hbar)))
def test_beamsplitter_coeff(self, hbar): """Test quadratic coefficients for BSgate""" # arbitrary beamsplitter theta = 0.5423 phi = 0.3242 H, _ = beamsplitter(theta, phi, hbar=hbar) res, d = quadratic_coefficients(get_quad_operator(H, hbar=hbar)) expected = np.zeros([4, 4]) expected[0, 3] = expected[3, 0] = -np.cos(np.pi - phi) expected[1, 2] = expected[2, 1] = np.cos(np.pi - phi) expected[0, 1] = expected[1, 0] = -np.sin(np.pi - phi) expected[2, 3] = expected[3, 2] = -np.sin(np.pi - phi) assert np.allclose(res, expected) assert np.allclose(d, np.zeros([4]))
def test_non_gaussian(self): """Test exception with non-Gaussian Hamiltonian""" with pytest.raises(ValueError, match="Hamiltonian must be Gaussian"): quadratic_coefficients(QuadOperator('q0 p0 p1'))
def test_non_gaussian(self): """Test exception with non-Gaussian Hamiltonian""" self.logTestName() with self.assertRaisesRegex(ValueError, "Hamiltonian must be Gaussian"): quadratic_coefficients(QuadOperator('q0 p0 p1'))
def test_non_hermitian(self): """Test exception with non-Hermitian Hamiltonian""" with self.assertRaisesRegex(ValueError, "Hamiltonian must be Hermitian"): quadratic_coefficients(QuadOperator('q0 p0'))