---
title: XXDecomposer (v2.2)
description: API reference for qiskit.synthesis.XXDecomposer in qiskit v2.2
source: https://quantum.cloud.ibm.com/docs/en/api/qiskit/2.2/qiskit.synthesis.XXDecomposer
---

# XXDecomposer

*class* `qiskit.synthesis.XXDecomposer(basis_fidelity=1.0, euler_basis='U', embodiments=None, backup_optimizer=None)`

[GitHub](https://github.com/Qiskit/qiskit/tree/stable/2.2/qiskit/synthesis/two_qubit/xx_decompose/decomposer.py#L55-L324)

Bases: [`object`](https://docs.python.org/3/library/functions.html#object)

A class for optimal decomposition of 2-qubit unitaries into 2-qubit basis gates of `XX` type (i.e., each locally equivalent to $CAN(\alpha, 0, 0)$ for a possibly varying $alpha$).

**Parameters**

- **basis\_fidelity** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)  *|*[*float*](https://docs.python.org/3/library/functions.html#float)) – available strengths and fidelity of each. Can be either (1) a dictionary mapping `XX` angle values to fidelity at that angle; or (2) a single float `f`, interpreted as `{pi: f, pi/2: f/2, pi/3: f/3}`.
- **euler\_basis** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – Basis string provided to [`OneQubitEulerDecomposer`](/docs/api/qiskit/2.2/qiskit.synthesis.OneQubitEulerDecomposer "qiskit.synthesis.OneQubitEulerDecomposer") for 1Q synthesis. Defaults to `"U"`.
- **embodiments** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)*\[*[*float*](https://docs.python.org/3/library/functions.html#float)*,* [*QuantumCircuit*](/docs/api/qiskit/2.2/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*] | None*) – A dictionary mapping interaction strengths alpha to native circuits which embody the gate $CAN(\alpha, 0, 0)$. Strengths are taken so that $\pi/2$ represents the class of a full [`CXGate`](/docs/api/qiskit/2.2/qiskit.circuit.library.CXGate "qiskit.circuit.library.CXGate").
- **backup\_optimizer** (*Callable\[...,* [*QuantumCircuit*](/docs/api/qiskit/2.2/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*] | None*) – If supplied, defers synthesis to this callable when [`XXDecomposer`](#qiskit.synthesis.XXDecomposer "qiskit.synthesis.XXDecomposer") has no efficient decomposition of its own. Useful for special cases involving 2 or 3 applications of $XX(\pi/2)$, in which case standard synthesis methods provide lower 1Q gate count.

> **Note**
>
> If `embodiments` is not passed, or if an entry is missing, it will be populated as needed using the method `_default_embodiment`.

### \_\_call\_\_

`__call__(unitary, basis_fidelity=None, approximate=True, use_dag=False)`

[GitHub](https://github.com/Qiskit/qiskit/tree/stable/2.2/qiskit/synthesis/two_qubit/xx_decompose/decomposer.py#L228-L324)

Fashions a circuit which (perhaps approximately) models the special unitary operation `unitary`, using the circuit templates supplied at initialization as `embodiments`. The routine uses `basis_fidelity` to select the optimal circuit template, including when performing exact synthesis; the contents of `basis_fidelity` is a dictionary mapping interaction strengths (scaled so that $CX = RZX(\pi/2)$ corresponds to $\pi/2$) to circuit fidelities.

**Parameters**

- **unitary** ([*Operator*](/docs/api/qiskit/2.2/qiskit.quantum_info.Operator "qiskit.quantum_info.Operator") *or ndarray*) – $4 \times 4$ unitary to synthesize.
- **basis\_fidelity** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)  *or*[*float*](https://docs.python.org/3/library/functions.html#float)) – Fidelity of basis gates. Can be either (1) a dictionary mapping `XX` angle values to fidelity at that angle; or (2) a single float `f`, interpreted as `{pi: f, pi/2: f/2, pi/3: f/3}`. If given, overrides the basis\_fidelity given at init.
- **approximate** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – Approximates if basis fidelities are less than 1.0 .
- **use\_dag** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – If true a [`DAGCircuit`](/docs/api/qiskit/2.2/qiskit.dagcircuit.DAGCircuit "qiskit.dagcircuit.DAGCircuit") is returned instead of a `QuantumCircuit` when this class is called.

**Returns**

Synthesized circuit.

**Return type**

[QuantumCircuit](/docs/api/qiskit/2.2/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")

## Methods

### num\_basis\_gates

`num_basis_gates(unitary)`

[GitHub](https://github.com/Qiskit/qiskit/tree/stable/2.2/qiskit/synthesis/two_qubit/xx_decompose/decomposer.py#L185-L201)

Counts the number of gates that would be emitted during re-synthesis.

> **Note**
>
> This method is used by [`ConsolidateBlocks`](/docs/api/qiskit/2.2/qiskit.transpiler.passes.ConsolidateBlocks "qiskit.transpiler.passes.ConsolidateBlocks").

**Parameters**

**unitary** ([*Operator*](/docs/api/qiskit/2.2/qiskit.quantum_info.Operator "qiskit.quantum_info.Operator") *| np.ndarray*) –
