sf.ops.Interferometer¶

class
Interferometer
(U, mesh='rectangular', drop_identity=True, tol=1e06)[source]¶ Bases:
strawberryfields.ops.Decomposition
Apply a linear interferometer to the specified qumodes.
This operation uses either the rectangular decomposition or triangular decomposition to decompose a linear interferometer into a sequence of beamsplitters and rotation gates.
By specifying the keyword argument
mesh
, the scheme used to implement the interferometer may be adjusted:mesh='rectangular'
(default): uses the scheme described in [6], resulting in a rectangular array of \(M(M1)/2\) beamsplitters:Local phase shifts appear in the middle of the beamsplitter array. Use
mesh='rectangular_phase_end
to instead commute all local phase shifts to the end of the beamsplitter array.By default, the interferometers are decomposed into
BSgate
operations. To instead decompose the interferometer using theMZgate
, usemesh='rectangular_symmetric'
.mesh='triangular'
: uses the scheme described in [5], resulting in a triangular array of \(M(M1)/2\) beamsplitters:Local phase shifts appear at the end of the beamsplitter array.
 Parameters
U (array[complex]) – an \(N\times N\) unitary matrix
mesh (str) –
the scheme used to implement the interferometer. Options include:
'rectangular'
 rectangular mesh, with local phase shifts applied between interferometers'rectangular_phase_end'
 rectangular mesh, with local phase shifts placed after all interferometers'rectangular_symmetric'
 rectangular mesh, with local phase shifts placed after all interferometers, and all beamsplitters decomposed into pairs of symmetric beamsplitters and phase shifters'triangular'
 triangular mesh
drop_identity (bool) – If
True
, decomposed gates with trivial parameters, such that they correspond to an identity operation, are removed.tol (float) – the tolerance used when checking if the input matrix is unitary: \(UU^\dagger <\) tol
Attributes
Extra dependencies due to parameters that depend on measurements.

measurement_deps
¶ Extra dependencies due to parameters that depend on measurements.
 Returns
dependencies
 Return type
set[RegRef]

ns
= None¶
Methods
apply
(reg, backend, **kwargs)Ask a local backend to execute the operation on the current register state right away.
decompose
(reg, **kwargs)Decompose the operation into elementary operations supported by the backend API.
merge
(other)Merge the operation with another (acting on the exact same set of subsystems).

apply
(reg, backend, **kwargs)¶ Ask a local backend to execute the operation on the current register state right away.
Takes care of parameter evaluations and any pending formal transformations (like dagger) and then calls
Operation._apply()
. Parameters
reg (Sequence[RegRef]) – subsystem(s) the operation is acting on
backend (BaseBackend) – backend to execute the operation
 Returns
the result of self._apply
 Return type
Any

decompose
(reg, **kwargs)¶ Decompose the operation into elementary operations supported by the backend API.
See
strawberryfields.backends.base
.

merge
(other)¶ Merge the operation with another (acting on the exact same set of subsystems).
Note
For subclass overrides: merge may return a newly created object, or self, or other, but it must never modify self or other because the same Operation objects may be also used elsewhere.
 Parameters
other (Operation) – operation to merge this one with
 Returns
other * self. The return value None represents the identity gate (doing nothing).
 Return type
Operation, None
 Raises
MergeFailure – if the two operations cannot be merged
Downloads