ProductFormula
class qiskit.synthesis.ProductFormula(order, reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False, preserve_order=True)
Bases: EvolutionSynthesis
Product formula base class for the decomposition of non-commuting operator exponentials.
LieTrotter and SuzukiTrotter inherit from this class.
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 whenatomic_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, orSparsePauliOpof 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 ofCXgates and a singleRZgate. 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. Note that setting this to
Trueis slower thanFalse. This only takes effect whenatomic_evolution is None. - preserve_order (bool) – If
False, allows reordering the terms of the operator to potentially yield a shallower evolution circuit. Not relevant when synthesizing operator with a single term.
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
expand
expand(evolution)
Apply the product formula to expand the Hamiltonian in the evolution gate.
Parameters
evolution (PauliEvolutionGate) – The PauliEvolutionGate, whose Hamiltonian we expand.
Returns
A list of Pauli rotations in a sparse format, where each element is (paulistring, qubits, coefficient). For example, the Lie-Trotter expansion of H = XI + ZZ would return [("X", [1], 1), ("ZZ", [0, 1], 1)].
Return type
synthesize
synthesize(evolution)
Synthesize a PauliEvolutionGate.
Parameters
evolution (PauliEvolutionGate) – The evolution gate to synthesize.
Returns
A circuit implementing the evolution.
Return type