# sf.compilers.Xcov¶

class Xcov[source]

Bases: strawberryfields.compilers.compiler.Compiler

General state compiler for the X class of circuits.

An important property of this compilation routine is that it is done at the covariance matrix level. This implies that one should not use it to compare the interferometers of a given circuit since they may differ by permutations in the unitary and the squeezing parameters.

This compiler accepts the following gates, decompositions, and measurements:

The operations above may be provided in any combination and order, provided that the unitary is identical between the modes $$(0, 1,\dots, N-1)$$, and does not mix between these two sets of modes.

Finally, the circuit must complete with Fock measurements.

Example

The compiler may be used on its own:

>>> prog.compile(compiler="Xcov")


Alternatively, it can be combined with an X series device specification to include additional information, such as allowed parameter ranges.

>>> eng = sf.RemoteEngine("X8")
>>> spec = eng.device_spec
>>> prog.compile(device=spec, compiler="Xcov")

 circuit A rigid circuit template that defines this circuit specification. decompositions graph The allowed circuit topologies or connectivity of the class, modelled as a directed acyclic graph. interactive primitives short_name
circuit

A rigid circuit template that defines this circuit specification.

This property is optional. If arbitrary topologies are allowed in the circuit class, do not define this property. In such a case, it will simply return None.

If a backend device expects a specific template for the recieved Blackbird script, this method will return the serialized Blackbird circuit in string form.

Returns

Blackbird program or template representing the circuit

Return type

Union[str, None]

decompositions = {'BipartiteGraphEmbed': {'drop_identity': False, 'mesh': 'rectangular_symmetric'}}
graph

The allowed circuit topologies or connectivity of the class, modelled as a directed acyclic graph.

This property is optional; if arbitrary topologies are allowed in the circuit class, this will simply return None.

Returns

a directed acyclic graph

Return type

networkx.DiGraph

interactive = False
primitives = {'BSgate', 'Interferometer', 'MZgate', 'MeasureFock', 'Rgate', 'S2gate', 'Sgate'}
short_name = 'Xcov'
 compile(seq, registers) Class-specific circuit compilation method. decompose(seq) Recursively decompose all gates in a given sequence, as allowed by the circuit specification.
compile(seq, registers)[source]

Class-specific circuit compilation method.

If additional compilation logic is required, child classes can redefine this method.

Parameters
• seq (Sequence[Command]) – quantum circuit to modify

• registers (Sequence[RegRefs]) – quantum registers

Returns

modified circuit

Return type

List[Command]

Raises

CircuitError – the given circuit cannot be validated to belong to this circuit class

decompose(seq)

Recursively decompose all gates in a given sequence, as allowed by the circuit specification.

This method follows the directives defined in the primitives and decompositions class attributes to determine whether a command should be decomposed.

The order of precedence to determine whether decomposition should be applied is as follows.

1. First, we check if the operation is in decompositions. If not, decomposition is skipped, and the operation is applied as a primitive (if supported by the Compiler).

2. Next, we check if (a) the operation supports decomposition, and (b) if the user has explicitly requested no decomposition.

• If both (a) and (b) are true, the operation is applied as a primitive (if supported by the Compiler).

• Otherwise, we attempt to decompose the operation by calling decompose() recursively.

Parameters

list[strawberryfields.program_utils.Command] – list of commands to be decomposed

Returns

list of compiled commands for the circuit specification

Return type

### Contents

Using Strawberry Fields

Development

API