mm.lab_dev.transformations.BSgate

class mrmustard.lab_dev.transformations.BSgate(modes, theta=0.0, phi=0.0, theta_trainable=False, phi_trainable=False, theta_bounds=(None, None), phi_bounds=(None, None))[source]

Bases: Unitary

The beam splitter gate.

It applies to a single pair of modes.

>>> import numpy as np
>>> from mrmustard.lab_dev import BSgate

>>> unitary = BSgate(modes=[1, 2], theta=0.1)
>>> assert unitary.modes == [1, 2]
>>> assert np.allclose(unitary.theta.value, 0.1)
>>> assert np.allclose(unitary.phi.value, 0.0)
Parameters:
  • modes (Tuple[int, int]) – The modes this gate is applied to.

  • theta (float) – The transmissivity angle.

  • theta_bounds (Tuple[Optional[float], Optional[float]]) – The bounds for the transmissivity angle.

  • theta_trainable (bool) – Whether theta is a trainable variable.

  • phi (float) – The phase angle.

  • phi_bounds (Tuple[Optional[float], Optional[float]]) – The bounds for the phase angle.

  • phi_trainable (bool) – Whether phi is a trainable variable.

Raises:

ValueError – If modes is not a pair of modes.

The beamsplitter gate is a Gaussian gate defined by

\[\begin{split}S = \begin{bmatrix} \text{Re}(U) & -\text{Im}(U)\\ \text{Im}(U) & \text{Re}(U) \end{bmatrix} \text{ and } d = O_4\:,\end{split}\]

with

\[\begin{split}U &= \begin{bmatrix} \text{cos}(\theta) & -e^{-i\phi}\text{sin}(\theta)\\ e^{i\phi}\text{sin}(\theta) & \text{cos}(\theta) \end{bmatrix} \\\end{split}\]

Its (A,b,c) triple is given by

\[\begin{split}A = \begin{bmatrix} O_2 & U \\ U^{T} & O_2 \end{bmatrix} \text{, } b = O_{4} \text{, and } c = 1\end{split}\]

adjoint

The AdjointView of this component.

dual

The DualView of this component.

modes

The sorted list of modes of this component.

n_modes

The number of modes in this component.

name

The name of this component.

parameter_set

The set of parameters characterizing this component.

representation

A representation of this circuit component.

wires

The wires of this component.

adjoint

The AdjointView of this component.

dual

The DualView of this component.

modes

The sorted list of modes of this component.

n_modes

The number of modes in this component.

name

The name of this component.

parameter_set

The set of parameters characterizing this component.

representation
wires

The wires of this component.

light_copy()

Creates a copy of this component by copying every data stored in memory for it by reference, except for its wires, which are copied by value.

on(modes)

Creates a copy of this component that acts on the given modes instead of on the original modes.

to_fock_component([shape])

Returns a circuit component with the same attributes as this component, but with Fock representation.

light_copy()

Creates a copy of this component by copying every data stored in memory for it by reference, except for its wires, which are copied by value.

Return type:

CircuitComponent

on(modes)

Creates a copy of this component that acts on the given modes instead of on the original modes.

Parameters:

modes (Sequence[int]) – The new modes that this component acts on.

Return type:

CircuitComponent

Returns:

The component acting on the specified modes.

Raises:

ValueError – If modes contains more or less modes than the original component.

to_fock_component(shape=None)

Returns a circuit component with the same attributes as this component, but with Fock representation.

Uses the mrmustard.physics.converters.to_fock() method to convert the internal representation.

>>> from mrmustard.physics.converters import to_fock
>>> from mrmustard.lab_dev import Dgate

>>> d = Dgate([1], x=0.1, y=0.1)
>>> d_fock = d.to_fock_component(shape=3)

>>> assert d_fock.name == d.name
>>> assert d_fock.wires == d.wires
>>> assert d_fock.representation == to_fock(d.representation, shape=3)
Parameters:

shape (Union[int, Iterable[int], None]) – The shape of the returned representation. If shape``is given as an ``int, it is broadcasted to all the dimensions. If None, it defaults to the value of AUTOCUTOFF_MAX_CUTOFF in the settings.

Return type:

CircuitComponent