Circuit Library Synthesis (B2B)

This module provides the synthesis methods with which a bosonic gate is broken down into a BosonicCircuit of smaller bosonic gates. Pass one to the gate’s synthesis argument to choose how it gets decomposed. For an Evolution gate that is its time evolution:

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

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

Both sides of this rewrite live in bosonic space, so these methods can exploit the groups of the evolved operator (see Group operator terms: use the operator structure) – unlike the boson-to-qubit synthesis that follows, which only sees the mapped operator, where the grouping is no longer available. That is what lets the outer Trotter error between non-commuting groups be reduced by a higher order or more repetitions, which a product formula handed to MapperFnEvolutionSynthesis cannot do.

A ModeRotation gate is broken down the same way, into Evolution gates, one for every two-mode rotation and single-mode phase of its mesh. Its synthesis is None by default, which leaves the gate whole:

ModeRotation(unitary, synthesis=BosonicClementsDecomposition())

Important

This boson-to-boson step is optional. An Evolution gate can be handed straight to the boson-to-qubit stage regardless of how many terms its operator holds, and so can a ModeRotation, given a plugin registered for it. Decomposing in bosonic space first is a choice, taken to obtain cheaper factors or to expose structure that the later stage can exploit.

B2BSynthesisPlugin(*args, **kwargs)

The protocol for plugins to the B2BSynthesis transpiler pass.

B2BSynthesisPluginManager()

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

Builtin plugins

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

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

Circuit instruction name

Plugin method name

Reference

Evolution

LieTrotter

BosonicLieTrotter

Evolution

SuzukiTrotter

BosonicSuzukiTrotter

Evolution

QDrift

BosonicQDrift

ModeRotation

Clements

BosonicClementsDecomposition

BosonicLieTrotter([reps])

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

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

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

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

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

BosonicClementsDecomposition(*[, tol])

The decomposition of a mode rotation into a mesh of two-mode rotations and phases.

QDriftSampler(gate, num_terms, weights, rng)

The draws of the qDRIFT protocol for one Evolution gate.