sf.ops.LossChannel¶
-
class
LossChannel
(T)[source]¶ Bases:
strawberryfields.ops.Channel
Perform a loss channel operation on the specified mode.
This channel couples mode \(\a\) to another bosonic mode \(\hat{b}\) prepared in the vacuum state using the following transformation:
\[\a \mapsto \sqrt{T} a+\sqrt{1-T} \hat{b}\]- Parameters
T (float) – the loss parameter \(0\leq T\leq 1\).
Details and Conventions
Loss is implemented by a CPTP map whose Kraus representation is
\[\mathcal{N}(T)\left\{\ \cdot \ \right\} = \sum_{n=0}^{\infty} E_n(T) \ \cdot \ E_n(T)^\dagger , \quad E_n(T) = \left(\frac{1-T}{T} \right)^{n/2} \frac{\a^n}{\sqrt{n!}} \left(\sqrt{T}\right)^{\ad \a}\]Definition
Loss is implemented by coupling mode \(\a\) to another bosonic mode \(\hat{b}\) prepared in the vacuum state, by using the following transformation
\[\a \to \sqrt{T} \a+\sqrt{1-T} \hat{b}\]and then tracing it out. Here, \(T\) is the energy transmissivity. For \(T = 0\) the state is mapped to the vacuum state, and for \(T=1\) one has the identity map.
One useful identity is
\[\mathcal{N}(T)\left\{\ket{n}\bra{m} \right\}=\sum_{l=0}^{\min(n,m)} \left(\frac{1-T}{T}\right)^l \frac{T^{(n+m)/2}}{l!} \sqrt{\frac{n! m!}{(n-l)!(m-l)!}} \ket{n-l}\bra{m-l}\]In particular \(\mathcal{N}(T)\left\{\ket{0}\bra{0} \right\} = \pr{0}\).
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
= 1¶
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