diff --git a/qiskit/algorithms/aux_ops_evaluator.py b/qiskit/algorithms/aux_ops_evaluator.py index c72958ace3a5..7228f45e4308 100644 --- a/qiskit/algorithms/aux_ops_evaluator.py +++ b/qiskit/algorithms/aux_ops_evaluator.py @@ -122,8 +122,10 @@ def _prepare_list_op( if isinstance(observables, dict): observables = list(observables.values()) - state = StateFn(quantum_state) - return ListOp([StateFn(obs, is_measurement=True).compose(state) for obs in observables]) + if not isinstance(quantum_state, StateFn): + quantum_state = StateFn(quantum_state) + + return ListOp([StateFn(obs, is_measurement=True).compose(quantum_state) for obs in observables]) def _prepare_result( diff --git a/releasenotes/notes/fix-aux-ops-evaluator-83ce1606d1ad19b3.yaml b/releasenotes/notes/fix-aux-ops-evaluator-83ce1606d1ad19b3.yaml new file mode 100644 index 000000000000..baf68f426755 --- /dev/null +++ b/releasenotes/notes/fix-aux-ops-evaluator-83ce1606d1ad19b3.yaml @@ -0,0 +1,6 @@ +fixes: + - | + The :func:`~qiskit.algorithms.eval_observables` function raised an error when the + ``quantum_state`` argument is a :class:`~qiskit.opflow.StateFn`. + This error was fixed and ``eval_observables`` now correctly supports all input types + specifying in the type hints. \ No newline at end of file diff --git a/test/python/algorithms/test_aux_ops_evaluator.py b/test/python/algorithms/test_aux_ops_evaluator.py index b43f5b5bec82..4bbcf54de538 100644 --- a/test/python/algorithms/test_aux_ops_evaluator.py +++ b/test/python/algorithms/test_aux_ops_evaluator.py @@ -24,7 +24,16 @@ from qiskit.algorithms import eval_observables from qiskit import BasicAer, QuantumCircuit from qiskit.circuit.library import EfficientSU2 -from qiskit.opflow import PauliSumOp, X, Z, I, ExpectationFactory, OperatorBase, ExpectationBase +from qiskit.opflow import ( + PauliSumOp, + X, + Z, + I, + ExpectationFactory, + OperatorBase, + ExpectationBase, + StateFn, +) from qiskit.utils import QuantumInstance, algorithm_globals @@ -155,6 +164,17 @@ def test_eval_observables(self, observables: ListOrDict[OperatorBase]): quantum_instance, ) + with self.subTest(msg="Test StateFn."): + statefn = StateFn(bound_ansatz) + self._run_test( + expected_result, + statefn, + decimal, + expectation, + observables, + quantum_instance, + ) + if __name__ == "__main__": unittest.main()