---
title: ReverseQGT (v0.46)
description: API reference for qiskit.algorithms.gradients.ReverseQGT in qiskit v0.46
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit/0.46/qiskit.algorithms.gradients.ReverseQGT
---

# ReverseQGT

*class* `qiskit.algorithms.gradients.ReverseQGT(phase_fix=True, derivative_type=DerivativeType.COMPLEX)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/algorithms/gradients/reverse/reverse_qgt.py)

Bases: [`BaseQGT`](/docs/api/qiskit/0.46/qiskit.algorithms.gradients.BaseQGT "qiskit.algorithms.gradients.base.base_qgt.BaseQGT")

QGT calculation with the classically efficient reverse mode.

> **Note**
>
> This QGT implementation is based on statevector manipulations and scales exponentially with the number of qubits. However, for small system sizes it can be very fast compared to circuit-based gradients.

This class implements the calculation of the QGT as described in \[1]. By keeping track of three statevectors and iteratively sweeping through each parameterized gate, this method scales only quadratically with the number of parameters.

**References:**

> **\[1]: Jones, T. “Efficient classical calculation of the Quantum Natural Gradient” (2020).**
>
> [arXiv:2011.02991](https://arxiv.org/abs/2011.02991).

**Parameters**

- **phase\_fix** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – Whether or not to include the phase fix.
- **derivative\_type** (*DerivativeType*) – Determines whether the complex QGT or only the real or imaginary parts are calculated.

## Attributes

### SUPPORTED\_GATES

Default value: `['rx', 'ry', 'rz', 'cp', 'crx', 'cry', 'crz']`

### derivative\_type

The derivative type.

### options

There are no options for the reverse QGT, returns an empty options dict.

**Returns**

Empty options.

## Methods

### run

`run(circuits, parameter_values, parameters=None, **options)`

Run the job of the QGTs on the given circuits.

**Parameters**

- **circuits** (*Sequence\[*[*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*]*) – The list of quantum circuits to compute the QGTs.
- **parameter\_values** (*Sequence\[Sequence\[*[*float*](https://docs.python.org/3/library/functions.html#float)*]]*) – The list of parameter values to be bound to the circuit.
- **parameters** (*Sequence\[Sequence\[*[*Parameter*](/docs/api/qiskit/0.46/qiskit.circuit.Parameter "qiskit.circuit.Parameter")*] | None] | None*) – The sequence of parameters to calculate only the QGTs of the specified parameters. Each sequence of parameters corresponds to a circuit in `circuits`. Defaults to None, which means that the QGTs of all parameters in each circuit are calculated.
- **options** – Primitive backend runtime options used for circuit execution. The order of priority is: options in `run` method > QGT’s default options > primitive’s default setting. Higher priority setting overrides lower priority setting.

**Returns**

The job object of the QGTs of the expectation values. The i-th result corresponds to `circuits[i]` evaluated with parameters bound as `parameter_values[i]`.

**Raises**

[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – Invalid arguments are given.

**Return type**

[AlgorithmJob](/docs/api/qiskit/0.46/qiskit.algorithms.AlgorithmJob "qiskit.algorithms.AlgorithmJob")

### update\_default\_options

`update_default_options(**options)`

Update the gradient’s default options setting.

**Parameters**

**\*\*options** – The fields to update the default options.
