Object Name

PhysSkin display style

SymbSkin display style

Unitary Matrix

Beam Splitter


_images/bs.png _images/bs1.png

Depends on the convention, see Beam Splitter

Phase Shifter


_images/ps.png _images/ps1.png

\(\left[\begin{matrix}e^{i \phi}\end{matrix}\right]\)



_images/perm.png _images/perm1.png

Example of a two mode permutation: \(\left[\begin{matrix}0 & 1\\1 & 0\end{matrix}\right]\)



_images/wp.png _images/wp1.png

\(\left[\begin{matrix}i \sin{\left(\delta \right)} \cos{\left(2 \xi \right)} + \cos{\left(\delta \right)} & i \sin{\left(\delta \right)} \sin{\left(2 \xi \right)}\\i \sin{\left(\delta \right)} \sin{\left(2 \xi \right)} & - i \sin{\left(\delta \right)} \cos{\left(2 \xi \right)} + \cos{\left(\delta \right)}\end{matrix}\right]\)

Polarizing Beam Splitter


_images/pbs.png _images/pbs1.png

\(\left[\begin{matrix}0 & 0 & 1 & 0\\0 & 1 & 0 & 0\\1 & 0 & 0 & 0\\0 & 0 & 0 & 1\end{matrix}\right]\)

Polarization Rotator


_images/pr.png _images/pr1.png

\(\left[\begin{matrix}\cos{\left(\delta \right)} & \sin{\left(\delta \right)}\\- \sin{\left(\delta \right)} & \cos{\left(\delta \right)}\end{matrix}\right]\)

Time Delay


_images/dt.png _images/dt1.png


Loss Channel


_images/lc.png _images/lc1.png



Beam Splitter

Beam splitters couple two spatial modes together, acting on \(\ket{1,0}\) and \(\ket{0,1}\). Three specialized conventions are defined, with a single \(\theta\) parameter, as follow:


Unitary matrix

Default value (\(\theta=\pi/2\))



\(\left[\begin{matrix}\cos{(\theta/2)} & i \sin{(\theta/2)}\\i \sin{(\theta/2)} & \cos{(\theta/2)}\end{matrix}\right]\)

\(\left[\begin{matrix}1 & i\\i & 1\end{matrix}\right]\)

Symmetrical, default convention


\(\left[\begin{matrix}\cos{(\theta/2)} & -\sin{(\theta/2)}\\ \sin{(\theta/2)} & \cos{(\theta/2)}\end{matrix}\right]\)

\(\left[\begin{matrix}1 & -1\\1 & 1\end{matrix}\right]\)

Real, non symmetrical


\(\left[\begin{matrix}\cos{(\theta/2)} & \sin{(\theta/2)}\\ \sin{(\theta/2)} & -\cos{(\theta/2)}\end{matrix}\right]\)

\(\left[\begin{matrix}1 & 1\\1 & -1\end{matrix}\right]\)

Hadamard gate, HH=I, non symmetrical

Each convention also accepts up to four additional phases, mimicing a phase shifter on each mode connected to the beam splitter. For instance, with the Rx convention, the unitary matrix is defined by:

\(\left[\begin{matrix}e^{i(\phi_{tl}+\phi_{tr})} \cos{\left(\theta/2 \right)} & i e^{i (\phi_{tr}+\phi_{bl})} \sin{\left(\theta/2 \right)}\\i e^{i \left(\phi_{tl} + \phi_{br}\right)} \sin{\left(\theta/2 \right)} & e^{i (\phi_{br}+\phi_{bl})} \cos{\left(\theta/2 \right)}\end{matrix}\right]\)

It is thus parametrized by \(\theta\), \(\phi_{tl}\), \(\phi_{bl}\), \(\phi_{tr}\) and \(\phi_{br}\) angles, making this beam splitter equivalent to:


\(\theta\) relates to the reflectivity and \(\phi\) angles correspond to relative phases between modes. Beam splitters exist as bulk, fibered and on-chip components.

The relationship between the reflectivity \(R\) and \(\theta\) is: \(cos {\left( \theta/2 \right)} = \sqrt{R}\).

To create a beam splitter object with a given reflectivity value:

>>> from perceval.components import BS
>>> R = 0.45
>>> beam_splitter = BS(BS.r_to_theta(R))

By default theta is \(\pi/2\), phi_tl is \(0\), phi_bl is \(0\), phi_tr is \(0\), phi_br is \(0\). These values can be modified by using optional parameters when creating a BS object.

Loss Channel

Loss channels are non unitary components applying a fixed loss on a given mode. It can seen as a beam splitter with a reflectivity equal to the loss. This beam splitter being connected to a “virtual mode” containing lost photons.

A loss channel is not expressed as a unitary matrix and can only be used in processors.

Phase Shifter

A phase shifter adds a phase \(\phi\) on a spatial mode, which corresponds to a Z rotation in the Bloch sphere.

The definition of a phase shifter uses the same (non-optional) parameter phi in both libraries symb and phys. To create a phase shifter PS object:

>>> import perceval.components.unitary_components as comp
>>> phase_shifter = comp.PS(sp.pi/2) # phi = pi/2


A permutation exchanges multiple consecutive spatial modes.

To create a permutation PERM sending \(\ket{0,1}\) to \(\ket{1,0}\) and vice-versa:

>>> import perceval.components.unitary_components as comp
>>> permutation = comp.PERM([1, 0])

More generally one can define Permutation on an arbitrary number of modes. The permutation should be described by a list of integers from 0 to \(l-1\), where \(l\) is the length of the list. The \(k\) th spatial input mode is sent to the spatial output mode corresponding to the \(k\) th value in the list.

For instance the following defines a 4-mode permutation. It matches the first input path (index 0) with the third output path (value 2), the second input path with the fourth output path, the third input path, with the first output path, and the fourth input path with the second output path.

>>> import perceval as pcvl
>>> import perceval.components.unitary_components as comp
>>> c = comp.PERM([2, 3, 1, 0])
>>> pcvl.pdisplay(c)
>>> pcvl.pdisplay(c.compute_unitary(), output_format=pcvl.Format.LATEX)
\[\begin{split}\left[\begin{matrix}0 & 0 & 0 & 1\\0 & 0 & 1 & 0\\1 & 0 & 0 & 0\\0 & 1 & 0 & 0\end{matrix}\right]\end{split}\]


A waveplate acts on the polarisation modes of a single spatial mode. It is described by the following unitary:

\[\begin{split}\left[\begin{matrix}i \sin{\left(\delta \right)} \cos{\left(2 \xi \right)} + \cos{\left(\delta \right)} & i \sin{\left(\delta \right)} \sin{\left(2 \xi \right)}\\i \sin{\left(\delta \right)} \sin{\left(2 \xi \right)} & - i \sin{\left(\delta \right)} \cos{\left(2 \xi \right)} + \cos{\left(\delta \right)}\end{matrix}\right]\end{split}\]

\(\delta\) is a parameter proportional to the thickness of the waveplate and \(\xi\) represents the angle of the waveplate’s optical axis in the \(\left\{\ket{H}, \ket{V}\right\}\) plane. Especially important is the case that \(\delta=\pi/2\), known as a half-wave plate, which rotates linear polarisations in the \(\left\{\ket{H}, \ket{V}\right\}\) plane.

Polarizing Beam Splitter

A polarising beam splitter converts a superposition of polarisation modes in a single spatial mode to the corresponding equal-polarisation superposition of two spatial modes,and vice versa, and so in this sense allow us to translate between polarisation and spatial modes. The unitary matrix associated to a polarising beam splitter acting on the tensor product of the spatial mode and the polarisation mode is:

\[\begin{split}\left[\begin{matrix}0 & 0 & 1 & 0\\0 & 1 & 0 & 0\\1 & 0 & 0 & 0\\0 & 0 & 0 & 1\end{matrix}\right]\end{split}\]

Polarization Rotator

A polarization rotator is an optical device that rotates the polarization axis of a linearly polarized light beam by an angle of choice. Such devices can be based on the Faraday effect, on birefringence, or on total internal reflection. Rotators of linearly polarized light have found widespread applications in modern optics since laser beams tend to be linearly polarized and it is often necessary to rotate the original polarization to its orthogonal alternative.

See for more details.

Time Delay

Time Delay is a special component corresponding to a roll of optical fiber making as an effect to delay a photon.

Parameter of the Time Delay is the fraction of a period the delay should be. For instance TD(2) will make a delay on the line corresponding to two periods.

A time delay is not expressed as a unitary matrix and can only be used in processors.