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

# ComputeUncompute

*class* `qiskit.algorithms.state_fidelities.ComputeUncompute(sampler, options=None, local=False)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/algorithms/state_fidelities/compute_uncompute.py)

Bases: [`BaseStateFidelity`](/docs/api/qiskit/0.46/qiskit.algorithms.state_fidelities.BaseStateFidelity "qiskit.algorithms.state_fidelities.base_state_fidelity.BaseStateFidelity")

This class leverages the sampler primitive to calculate the state fidelity of two quantum circuits following the compute-uncompute method (see \[1] for further reference). The fidelity can be defined as the state overlap.

$$
|\langle\psi(x)|\phi(y)\rangle|^2
$$

where $x$ and $y$ are optional parametrizations of the states $\psi$ and $\phi$ prepared by the circuits `circuit_1` and `circuit_2`, respectively.

**Reference:** \[1] Havlíček, V., Córcoles, A. D., Temme, K., Harrow, A. W., Kandala, A., Chow, J. M., & Gambetta, J. M. (2019). Supervised learning with quantum-enhanced feature spaces. Nature, 567(7747), 209-212. [arXiv:1804.11326v2 \[quant-ph\]](https://arxiv.org/pdf/1804.11326.pdf)

**Parameters**

- **sampler** ([*BaseSampler*](/docs/api/qiskit/0.46/qiskit.primitives.BaseSampler "qiskit.primitives.BaseSampler")) – Sampler primitive instance.

- **options** ([*Options*](/docs/api/qiskit/0.46/qiskit.providers.Options "qiskit.providers.Options") *| None*) – Primitive backend runtime options used for circuit execution. The order of priority is: options in `run` method > fidelity’s default options > primitive’s default setting. Higher priority setting overrides lower priority setting.

- **local** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) –

  If set to `True`, the fidelity is averaged over single-qubit projectors

$$
\hat{O} = \frac{1}{N}\sum_{i=1}^N|0_i\rangle\langle 0_i|,
$$

instead of the global projector $|0\rangle\langle 0|^{\otimes n}$. This coincides with the standard (global) fidelity in the limit of the fidelity approaching 1. Might be used to increase the variance to improve trainability in algorithms such as `PVQD`.

**Raises**

[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – If the sampler is not an instance of `BaseSampler`.

## Attributes

### options

Return the union of estimator options setting and fidelity default options, where, if the same field is set in both, the fidelity’s default options override the primitive’s default setting.

**Returns**

The fidelity default + estimator options.

## Methods

### create\_fidelity\_circuit

`create_fidelity_circuit(circuit_1, circuit_2)`

Combines `circuit_1` and `circuit_2` to create the fidelity circuit following the compute-uncompute method.

**Parameters**

- **circuit\_1** ([*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.quantumcircuit.QuantumCircuit")) – (Parametrized) quantum circuit.
- **circuit\_2** ([*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.quantumcircuit.QuantumCircuit")) – (Parametrized) quantum circuit.

**Returns**

The fidelity quantum circuit corresponding to circuit\_1 and circuit\_2.

**Return type**

[*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.quantumcircuit.QuantumCircuit")

### run

`run(circuits_1, circuits_2, values_1=None, values_2=None, **options)`

Runs asynchronously the state overlap (fidelity) calculation between two (parametrized) circuits (first and second) for a specific set of parameter values (first and second). This calculation depends on the particular fidelity method implementation.

**Parameters**

- **circuits\_1** ([*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit") *| Sequence\[*[*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*]*) – (Parametrized) quantum circuits preparing $|\psi\rangle$.
- **circuits\_2** ([*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit") *| Sequence\[*[*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*]*) – (Parametrized) quantum circuits preparing $|\phi\rangle$.
- **values\_1** (*Sequence\[*[*float*](https://docs.python.org/3/library/functions.html#float)*] | Sequence\[Sequence\[*[*float*](https://docs.python.org/3/library/functions.html#float)*]] | None*) – Numerical parameters to be bound to the first set of circuits.
- **values\_2** (*Sequence\[*[*float*](https://docs.python.org/3/library/functions.html#float)*] | Sequence\[Sequence\[*[*float*](https://docs.python.org/3/library/functions.html#float)*]] | None*) – Numerical parameters to be bound to the second set of circuits.
- **options** – Primitive backend runtime options used for circuit execution. The order of priority is: options in `run` method > fidelity’s default options > primitive’s default setting. Higher priority setting overrides lower priority setting.

**Returns**

Primitive job for the fidelity calculation. The job’s result is an instance of `StateFidelityResult`.

**Return type**

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

### update\_default\_options

`update_default_options(**options)`

Update the fidelity’s default options setting.

**Parameters**

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