# SuzukiTrotter

*class *`qiskit.synthesis.SuzukiTrotter(order=2, reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False)`

Bases: `ProductFormula`

The (higher order) Suzuki-Trotter product formula.

The Suzuki-Trotter formulas improve the error of the Lie-Trotter approximation. For example, the second order decomposition is

$e^{A + B} \approx e^{B/2} e^{A} e^{B/2}.$Higher order decompositions are based on recursions, see Ref. [1] for more details.

In this implementation, the operators are provided as sum terms of a Pauli operator. For example, in the second order Suzuki-Trotter decomposition we approximate

$e^{-it(XX + ZZ)} = e^{-it/2 ZZ}e^{-it XX}e^{-it/2 ZZ} + \mathcal{O}(t^3).$**References**

[1]: D. Berry, G. Ahokas, R. Cleve and B. Sanders, “Efficient quantum algorithms for simulating sparse Hamiltonians” (2006). arXiv:quant-ph/0508139 [2]: N. Hatano and M. Suzuki, “Finding Exponential Product Formulas of Higher Orders” (2005). arXiv:math-ph/0506007

The ‘Callable[[Pauli | SparsePauliOp, float], QuantumCircuit]’ signature of the ‘atomic_evolution’ argument is pending deprecation as of qiskit 1.2. It will be marked deprecated in a future release, and then removed no earlier than 3 months after the release date. Instead you should update your ‘atomic_evolution’ function to be of the following type: ‘Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None]’.

**Parameters**

**order**(*int*) – The order of the product formula.**reps**(*int*) – The number of time steps.**insert_barriers**(*bool*) – Whether to insert barriers between the atomic evolutions.**cx_structure**(*str*) – How to arrange the CX gates for the Pauli evolutions, can be`"chain"`

, where next neighbor connections are used, or`"fountain"`

, where all qubits are connected to one. This only takes effect when`atomic_evolution is None`

.**atomic_evolution**(*Callable[[**Pauli**|**SparsePauliOp**,**float**],**QuantumCircuit**] | Callable[[**QuantumCircuit**,**Pauli**|**SparsePauliOp**,**float**], None] | None*) – A function to apply the evolution of a single`Pauli`

, or`SparsePauliOp`

of only commuting terms, to a circuit. The function takes in three arguments: the circuit to append the evolution to, the Pauli operator to evolve, and the evolution time. By default, a single Pauli evolution is decomposed into a chain of`CX`

gates and a single`RZ`

gate. Alternatively, the function can also take Pauli operator and evolution time as inputs and returns the circuit that will be appended to the overall circuit being built.**wrap**(*bool*) – Whether to wrap the atomic evolutions into custom gate objects. This only takes effect when`atomic_evolution is None`

.

**Raises**

**ValueError** – If order is not even

## Attributes

### settings

Return the settings in a dictionary, which can be used to reconstruct the object.

**Returns**

A dictionary containing the settings of this product formula.

**Raises**

**NotImplementedError** – If a custom atomic evolution is set, which cannot be serialized.

## Methods

### synthesize

`synthesize(evolution)`

Synthesize an `qiskit.circuit.library.PauliEvolutionGate`

.

**Parameters**

**evolution** (*PauliEvolutionGate*) – The evolution gate to synthesize.

**Returns**

A circuit implementing the evolution.

**Return type**