def test_mixed_unitary_error_raise_differnt_shape(self): """Test error is raised if input matrices different size""" unitaries = [np.eye(4), np.eye(2)] probs = [0.7, 0.4] noise_ops = [(unitaries[0], probs[0]), (unitaries[1], probs[1])] with self.assertRaises(NoiseError): mixed_unitary_error(noise_ops)
def test_mixed_unitary_error_raise_nonunitary(self): """Test error is raised if input is not unitary.""" A0 = [[1, 0], [0, np.sqrt(1 - 0.3)]] A1 = [[0, 0], [0, np.sqrt(0.3)]] noise_ops = [(A0, 0.5), (A1, 0.5)] with self.assertRaises(NoiseError): mixed_unitary_error(noise_ops)
def test_mixed_unitary_error(self): """Test construction of mixed unitary error""" unitaries = [np.diag([1, -1]), np.eye(2)] probs = [0.3, 0.7] error = mixed_unitary_error([(unitaries[0], probs[0]), (unitaries[1], probs[1])]) for i in [0, 1]: op, p = error.error_term(i) self.assertEqual(p, probs[i]) self.assertTrue(np.allclose(op[0][0].to_matrix(), unitaries[i]))
def test_mixed_unitary_error(self): """Test construction of mixed unitary error""" unitaries = [np.eye(2), np.diag([1, -1])] probs = [0.7, 0.3] error = mixed_unitary_error([(unitaries[0], probs[0]), (unitaries[1], probs[1])]) (op0, p0) = error.error_term(0) (op1, p1) = error.error_term(1) self.assertEqual(op0[0], {"name": "z", "qubits": [0]}) self.assertEqual(op1[0], {"name": "id", "qubits": [0]}) self.assertEqual(p0, 0.3) self.assertEqual(p1, 0.7)
def test_coherent_unitary_error(self): """Test coherent unitary error""" unitary = np.diag([1, -1, 1, -1]) error = coherent_unitary_error(unitary) ref = mixed_unitary_error([(unitary, 1)]) self.assertEqual(error.as_dict(), ref.as_dict())