# Channels#

class DeterministicGaussianChannel(X: numpy.ndarray, Y: numpy.ndarray)#

Deterministic Gaussian channel.

It is a CP (completely positive) map between Gaussian states which is characterized by the matrices $$X, Y \in \mathbb{R}^{2n \times 2n}$$ acting on the mean vector and covariance matrix with the mapping

$\begin{split}\mu &\mapsto X \mu \\ \sigma &\mapsto X \sigma X^T + Y.\end{split}$

The matrices $$X$$ and $$Y$$ should satisfy the inequality

$Y + i \Omega \geq i X \Omega X^T.$

Note

The matrix $$Y$$ is dependent on $$\hbar$$, but the value of $$\hbar$$ is specified later when executed by a simulator. The parameter Y should be specified keeping in mind that it will automatically be scaled with $$\hbar$$ during execution.

Note

Currently, this instruction can only be used along with GaussianState.

Parameters
• X (numpy.ndarray) – Transformation matrix on the quadrature vectors in xpxp order.

• Y (numpy.ndarray) – The additive noise contributing to the covariance matrix in xpxp order.

Raises

InvalidParameter – If the specified ‘X’ and/or ‘Y’ matrices are invalid.

class Attenuator(theta: float, mean_thermal_excitation: float = 0)#

The attenuator channel.

It reduces the first moments’ amplitude by $$\cos \theta$$ by mixing the input state with a thermal state using a beamsplitter.

It can also be characterized as a deterministic Gaussian channel with mappings

$\begin{split}X &= \cos \theta I_{2 \times 2} \\ Y &= ( \sin \theta )^2 (2 \bar{N} + 1) I_{2 \times 2},\end{split}$

where $$\theta \in [0, 2 \pi)$$ is the beampsplitters’ mixing angle and $$\bar{N} \in \mathbb{R}^{+}$$. $$\bar{N}$$ is the mean number of thermal excitations of the system interacting with the environment.

Note

Currently, this instruction can only be used along with GaussianState.

Parameters
• theta (float) – The mixing angle.

• mean_thermal_excitation (int) – Mean number of thermal excitations of the system interacting with the environment.

Raises

InvalidParameter – If the specified mean thermal excitation is not positive.

class Loss(transmissivity: numpy.ndarray)#

Applies a loss channel to the state.

The transmissivity is defined by $$t = \cos \theta$$, where $$\theta$$ is the beamsplitter parameter and the angle between the initial and resulting state. Considering only one particle, $$1-t^2$$ is the probability of losing this particle.

Note

Currently, this instruction can only be used along with SamplingSimulator.

Note

The parameter transmissivity is usually called transmittance.

Parameters

transmissivity (numpy.ndarray) – The transmissivity array.

class LossyInterferometer(matrix: numpy.ndarray)#

Applies a lossy interferometer (specified by a matrix) to the state.

The lossy interferometer matrix $$A$$ should have singular values in the interval $$[0, 1]$$.

Applying LossyInterferometer with parameter $$A$$ on all modes is equivalent to the following:

pq.Q() | pq.Interferometer(W) | pq.Loss(np.diag(D)) | pq.Interferometer(V)


where $$A = V D W$$, $$V, W$$ are unitary matrices and $$D$$ a diagonal matrix. The diagonal entries in $$D$$ are called the singular values.

Note that the $$W$$ and $$V$$ interferometer matrices and the vector $$D$$ are the results of the singular value decomposition (SVD) of the (possibly lossy) interferometer A.

Note

Currently, this instruction can only be used along with SamplingSimulator.

Raises

InvalidParameter – When the singular values are not in the interval $$[0, 1]$$.

Parameters

matrix (numpy.ndarray) – The matrix representing the lossy interferometer.