mirror of https://github.com/Qiskit/qiskit.git
Deprecate `PauliList` estimator observables (#11055)
* Deprecate PauliList estimator observables Deprecates using a `PauliList` as an observable that is implicitly converted to a `SparsePauliOp` with coefficients 1 when calling `Estimator.run`. Users should instead explicitly convert the argument using `SparsePauliOp(pauli_list)` first. * Revert algorithms_test_case.py * Update test/python/algorithms/algorithms_test_case.py Co-authored-by: Takashi Imamichi <31178928+t-imamichi@users.noreply.github.com> * Update test/python/primitives/test_estimator.py --------- Co-authored-by: Takashi Imamichi <31178928+t-imamichi@users.noreply.github.com> Co-authored-by: ikkoham <ikkoham@users.noreply.github.com>
This commit is contained in:
parent
5a948c2eb3
commit
34773f348f
|
@ -14,6 +14,7 @@ Utility functions for primitives
|
|||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import warnings
|
||||
import sys
|
||||
import typing
|
||||
from collections.abc import Iterable
|
||||
|
@ -23,7 +24,7 @@ import numpy as np
|
|||
from qiskit.circuit import Instruction, ParameterExpression, QuantumCircuit
|
||||
from qiskit.circuit.bit import Bit
|
||||
from qiskit.circuit.library.data_preparation import Initialize
|
||||
from qiskit.quantum_info import SparsePauliOp, Statevector
|
||||
from qiskit.quantum_info import SparsePauliOp, Statevector, PauliList
|
||||
from qiskit.quantum_info.operators.base_operator import BaseOperator
|
||||
from qiskit.quantum_info.operators.symplectic.base_pauli import BasePauli
|
||||
|
||||
|
@ -82,6 +83,15 @@ def init_observable(observable: BaseOperator | PauliSumOp | str) -> SparsePauliO
|
|||
elif isinstance(observable, BaseOperator) and not isinstance(observable, BasePauli):
|
||||
return SparsePauliOp.from_operator(observable)
|
||||
else:
|
||||
if isinstance(observable, PauliList):
|
||||
warnings.warn(
|
||||
"Implicit conversion from a PauliList to a SparsePauliOp with coeffs=1 in"
|
||||
" estimator observable arguments is deprecated as of Qiskit 0.46 and will be"
|
||||
" in Qiskit 1.0. You should explicitly convert to a SparsePauli op using"
|
||||
" SparsePauliOp(pauli_list) to avoid this warning.",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
return SparsePauliOp(observable)
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
deprecations:
|
||||
- |
|
||||
Deprecates using a :class:`~.PauliList` as an observable that is implicitly
|
||||
converted to a :class:`~.SparsePauliOp` with coefficients 1 when calling
|
||||
:meth:`.Estimator.run`. Users should instead explicitly convert the argument
|
||||
using ``SparsePauliOp(pauli_list)`` first.
|
|
@ -349,7 +349,6 @@ class TestObservableValidation(QiskitTestCase):
|
|||
@data(
|
||||
("IXYZ", (SparsePauliOp("IXYZ"),)),
|
||||
(Pauli("IXYZ"), (SparsePauliOp("IXYZ"),)),
|
||||
(PauliList("IXYZ"), (SparsePauliOp("IXYZ"),)),
|
||||
(SparsePauliOp("IXYZ"), (SparsePauliOp("IXYZ"),)),
|
||||
(PauliSumOp(SparsePauliOp("IXYZ")), (SparsePauliOp("IXYZ"),)),
|
||||
(
|
||||
|
@ -360,10 +359,6 @@ class TestObservableValidation(QiskitTestCase):
|
|||
[Pauli("IXYZ"), Pauli("ZYXI")],
|
||||
(SparsePauliOp("IXYZ"), SparsePauliOp("ZYXI")),
|
||||
),
|
||||
(
|
||||
[PauliList("IXYZ"), PauliList("ZYXI")],
|
||||
(SparsePauliOp("IXYZ"), SparsePauliOp("ZYXI")),
|
||||
),
|
||||
(
|
||||
[SparsePauliOp("IXYZ"), SparsePauliOp("ZYXI")],
|
||||
(SparsePauliOp("IXYZ"), SparsePauliOp("ZYXI")),
|
||||
|
@ -378,6 +373,19 @@ class TestObservableValidation(QiskitTestCase):
|
|||
"""Test obsevables standardization."""
|
||||
self.assertEqual(validation._validate_observables(obsevables), expected)
|
||||
|
||||
@data(
|
||||
(PauliList("IXYZ"), (SparsePauliOp("IXYZ"),)),
|
||||
(
|
||||
[PauliList("IXYZ"), PauliList("ZYXI")],
|
||||
(SparsePauliOp("IXYZ"), SparsePauliOp("ZYXI")),
|
||||
),
|
||||
)
|
||||
@unpack
|
||||
def test_validate_observables_deprecated(self, obsevables, expected):
|
||||
"""Test obsevables standardization."""
|
||||
with self.assertRaises(DeprecationWarning):
|
||||
self.assertEqual(validation._validate_observables(obsevables), expected)
|
||||
|
||||
@data(None, "ERROR")
|
||||
def test_qiskit_error(self, observables):
|
||||
"""Test qiskit error if invalid input."""
|
||||
|
|
Loading…
Reference in New Issue