qiskit-documentation/docs/api/qiskit/1.2/qiskit.synthesis.SuzukiTrot...

88 lines
5.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: SuzukiTrotter (v1.2)
description: API reference for qiskit.synthesis.SuzukiTrotter in qiskit v1.2
in_page_toc_min_heading_level: 1
python_api_type: class
python_api_name: qiskit.synthesis.SuzukiTrotter
---
# SuzukiTrotter
<Class id="qiskit.synthesis.SuzukiTrotter" isDedicatedPage={true} github="https://github.com/Qiskit/qiskit/tree/stable/1.2/qiskit/synthesis/evolution/suzuki_trotter.py#L30-L155" signature="qiskit.synthesis.SuzukiTrotter(order=2, reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False)" modifiers="class">
Bases: [`ProductFormula`](qiskit.synthesis.ProductFormula "qiskit.synthesis.evolution.product_formula.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](https://arxiv.org/abs/quant-ph/0508139) \[2]: N. Hatano and M. Suzuki, “Finding Exponential Product Formulas of Higher Orders” (2005). [arXiv:math-ph/0506007](https://arxiv.org/pdf/math-ph/0506007.pdf)
<Admonition title="Deprecated since version 1.2_pending" type="danger">
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].
</Admonition>
**Parameters**
* **order** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")) The order of the product formula.
* **reps** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")) The number of time steps.
* **insert\_barriers** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")) Whether to insert barriers between the atomic evolutions.
* **cx\_structure** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.13)")) 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*](qiskit.quantum_info.Pauli "qiskit.quantum_info.Pauli") *|*[*SparsePauliOp*](qiskit.quantum_info.SparsePauliOp "qiskit.quantum_info.SparsePauliOp")*,* [*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.13)")*],* [*QuantumCircuit*](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*] | Callable\[\[*[*QuantumCircuit*](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")*,* [*Pauli*](qiskit.quantum_info.Pauli "qiskit.quantum_info.Pauli") *|*[*SparsePauliOp*](qiskit.quantum_info.SparsePauliOp "qiskit.quantum_info.SparsePauliOp")*,* [*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.13)")*], None] | None*) A function to apply the evolution of a single [`Pauli`](qiskit.quantum_info.Pauli "qiskit.quantum_info.Pauli"), or [`SparsePauliOp`](qiskit.quantum_info.SparsePauliOp "qiskit.quantum_info.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*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")) Whether to wrap the atomic evolutions into custom gate objects. This only takes effect when `atomic_evolution is None`.
**Raises**
[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.13)") If order is not even
## Attributes
### settings
<Attribute id="qiskit.synthesis.SuzukiTrotter.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**](https://docs.python.org/3/library/exceptions.html#NotImplementedError "(in Python v3.13)") If a custom atomic evolution is set, which cannot be serialized.
</Attribute>
## Methods
### synthesize
<Function id="qiskit.synthesis.SuzukiTrotter.synthesize" github="https://github.com/Qiskit/qiskit/tree/stable/1.2/qiskit/synthesis/evolution/suzuki_trotter.py#L115-L135" signature="synthesize(evolution)">
Synthesize an `qiskit.circuit.library.PauliEvolutionGate`.
**Parameters**
**evolution** ([*PauliEvolutionGate*](qiskit.circuit.library.PauliEvolutionGate "qiskit.circuit.library.PauliEvolutionGate")) The evolution gate to synthesize.
**Returns**
A circuit implementing the evolution.
**Return type**
[QuantumCircuit](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")
</Function>
</Class>