Fixed sign bug in docs in LinCombEstimatorGradient. (#9113)

This commit is contained in:
Dariusz Lasecki 2022-11-11 21:31:29 +01:00 committed by GitHub
parent ee0b0368e7
commit 8bfb058b9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 5 deletions

View File

@ -64,9 +64,9 @@ class LinCombEstimatorGradient(BaseEstimatorGradient):
``DerivativeType.IMAG``, or ``DerivativeType.COMPLEX``. Defaults to
``DerivativeType.REAL``.
- ``DerivativeType.REAL`` computes :math:`2 \mathrm{Re}[(ψ(ω)|)O(θ)|ψ(ω)]`.
- ``DerivativeType.IMAG`` computes :math:`2 \mathrm{Im}[(ψ(ω)|)O(θ)|ψ(ω)]`.
- ``DerivativeType.COMPLEX`` computes :math:`2 (ψ(ω)|)O(θ)|ψ(ω)`.
- ``DerivativeType.REAL`` computes :math:`2 \mathrm{Re}[ψ(ω)|O(θ)| ψ(ω)]`.
- ``DerivativeType.IMAG`` computes :math:`2 \mathrm{Im}[ψ(ω)|O(θ)| ψ(ω)]`.
- ``DerivativeType.COMPLEX`` computes :math:`2 ψ(ω)|O(θ)| ψ(ω)`.
options: Primitive backend runtime options used for circuit execution.
The order of priority is: options in ``run`` method > gradient's

View File

@ -0,0 +1,9 @@
---
fixes:
- |
Fixed the documentation in :class:`.LinCombEstimatorGradient` to correctly
show the derivative applied on the ket-side of the expectation
value. Previously, the derivative had been documented in the bra-side, which
led to a sign swap for gradients in the ``IMAG`` and ``COMPLEX``
cases of the :class:`.DerivativeType`.

View File

@ -17,7 +17,7 @@ import unittest
from test import combine
import numpy as np
from ddt import ddt
from ddt import ddt, data, unpack
from qiskit import QuantumCircuit
from qiskit.algorithms.gradients import (
@ -25,12 +25,13 @@ from qiskit.algorithms.gradients import (
LinCombEstimatorGradient,
ParamShiftEstimatorGradient,
SPSAEstimatorGradient,
DerivativeType,
)
from qiskit.circuit import Parameter
from qiskit.circuit.library import EfficientSU2, RealAmplitudes
from qiskit.circuit.library.standard_gates import RXXGate, RYYGate, RZXGate, RZZGate
from qiskit.primitives import Estimator
from qiskit.quantum_info import Operator, SparsePauliOp
from qiskit.quantum_info import Operator, SparsePauliOp, Pauli
from qiskit.quantum_info.random import random_pauli_list
from qiskit.test import QiskitTestCase
@ -374,6 +375,17 @@ class TestEstimatorGradient(QiskitTestCase):
rtol=1e-4,
)
@data((DerivativeType.IMAG, -1.0), (DerivativeType.COMPLEX, -1.0j))
@unpack
def test_lin_comb_imag_gradient(self, derivative_type, expected_gradient_value):
"""Tests if the ``LinCombEstimatorGradient`` has the correct value."""
estimator = Estimator()
gradient = LinCombEstimatorGradient(estimator, derivative_type=derivative_type)
c = QuantumCircuit(1)
c.rz(Parameter("p"), 0)
result = gradient.run([c], [Pauli("I")], [[0.0]]).result()
self.assertAlmostEqual(result.gradients[0][0], expected_gradient_value)
@combine(
grad=[
FiniteDiffEstimatorGradient,