From e6781996bd4090b2d6d8425916b3d4163098abef Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 26 Oct 2022 09:56:04 +0000 Subject: [PATCH] fix #8992 (#8998) (#9000) (cherry picked from commit be1e6976138201cefa021e55dd2f0dac99bf6a1f) Co-authored-by: Ikko Hamamura --- .../quantum_info/operators/symplectic/sparse_pauli_op.py | 2 +- .../notes/fix-sparse-pauli-real-63c31d87801671b1.yaml | 6 ++++++ .../operators/symplectic/test_sparse_pauli_op.py | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-sparse-pauli-real-63c31d87801671b1.yaml diff --git a/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py b/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py index 228a8badb27b..dd2ac3bc6225 100644 --- a/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +++ b/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py @@ -112,7 +112,7 @@ def __init__(self, data, coeffs=None, *, ignore_pauli_phase=False, copy=True): pauli_list = PauliList(data.copy() if copy and hasattr(data, "copy") else data) - dtype = coeffs.dtype if isinstance(coeffs, np.ndarray) else complex + dtype = object if isinstance(coeffs, np.ndarray) and coeffs.dtype == object else complex if coeffs is None: coeffs = np.ones(pauli_list.size, dtype=dtype) diff --git a/releasenotes/notes/fix-sparse-pauli-real-63c31d87801671b1.yaml b/releasenotes/notes/fix-sparse-pauli-real-63c31d87801671b1.yaml new file mode 100644 index 000000000000..cd6b71100c92 --- /dev/null +++ b/releasenotes/notes/fix-sparse-pauli-real-63c31d87801671b1.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fix :meth:`.SparsePauliOp.dot` between operators with real coefficients. + To fix this, the dtype that :class:`SparsePauliOp` can take is restricted to + ``np.complex128`` and ``object``. diff --git a/test/python/quantum_info/operators/symplectic/test_sparse_pauli_op.py b/test/python/quantum_info/operators/symplectic/test_sparse_pauli_op.py index bf58220d1d63..2548ac4ff95d 100644 --- a/test/python/quantum_info/operators/symplectic/test_sparse_pauli_op.py +++ b/test/python/quantum_info/operators/symplectic/test_sparse_pauli_op.py @@ -940,6 +940,13 @@ def commutes(left: Pauli, right: Pauli) -> bool: ) ) + def test_dot_real(self): + """Test dot for real coefficiets.""" + x = SparsePauliOp("X", np.array([1])) + y = SparsePauliOp("Y", np.array([1])) + iz = SparsePauliOp("Z", 1j) + self.assertEqual(x.dot(y), iz) + if __name__ == "__main__": unittest.main()