Circuit Library Synthesis (F2F)

This module provides the synthesis methods with which a gate is broken down into a FermionicCircuit of smaller fermionic gates, such as the Trotter formulas for an Evolution. Pass one to the gate’s synthesis argument to choose how it gets decomposed:

Evolution(num_modes, operator, time=1.0, synthesis=FermionicLieTrotter())

or choose them for a whole circuit at once with the F2FSynthesis transpiler pass. Any class with a synthesize(gate) method can leverage a plugin (see F2FSynthesisPlugin), and the ones registered under the qiskit_fermions.circuit.synthesis entry point are available by name through the F2FSynthesisPluginManager.

Both sides of this rewrite live in fermionic space, so these methods can exploit the groups of the evolved operator (see Group operator terms: use the operator structure) – unlike the fermion-to-qubit synthesis that follows, which only sees the mapped operator, where the grouping is no longer available.

Important

This fermion-to-fermion step is optional. An Evolution gate can be handed straight to the fermion-to-qubit stage regardless of how many terms its operator holds; decomposing it in fermionic space first is a choice, taken to obtain cheaper factors or to expose structure that the later stage can exploit.

F2FSynthesisPlugin(*args, **kwargs)

The protocol for plugins to the F2FSynthesis transpiler pass.

F2FSynthesisPluginManager()

A simple manager of the installed fermion-to-fermion synthesis plugins.

Builtin plugins

The table below lists the builtin plugins, organized by the FermionicGate that they act upon. These are the entry points of the qiskit_fermions.circuit.synthesis group, named <gate>.<method>:

Table 1 An overview of the builtin qiskit_fermions.circuit.synthesis entry-points.

Circuit instruction name

Plugin method name

Reference

Evolution

LieTrotter

FermionicLieTrotter

Evolution

SuzukiTrotter

FermionicSuzukiTrotter

Evolution

QDrift

FermionicQDrift

OrbitalRotation

Givens

FermionicGivensDecomposition

PrepareSlaterDeterminant

Givens

FermionicSlaterGivensDecomposition

FermionicLieTrotter([reps])

The first-order Lie-Trotter product formula, applied in fermionic space.

FermionicSuzukiTrotter([order, reps, ...])

The higher-order Suzuki-Trotter product formula, applied in fermionic space.

FermionicQDrift(num_terms, *[, weights, rng])

A synthesis method that Trotterizes an Evolution via the qDRIFT protocol.

FermionicGivensDecomposition(*[, atol])

The decomposition of an orbital rotation into Givens rotations and phases.

FermionicSlaterGivensDecomposition(*[, atol])

The decomposition of a Slater determinant preparation into Givens rotations.

QDriftSampler(gate, num_terms, weights, rng)

The draws of the qDRIFT protocol for one Evolution gate.