dq.snap_gate
snap_gate(phase: ArrayLike) -> Array
Returns a SNAP gate.
The selective number-dependent arbitrary phase (SNAP) gate imparts a different phase \(\theta_k\) to each Fock state \(\ket{k}\bra{k}\). It is defined by $$ \mathrm{SNAP}(\theta_0,\dots,\theta_{n-1}) = \sum_{k=0}^{n-1} e^{i\theta_k} \ket{k}\bra{k}. $$
Parameters
-
phase
(array_like of shape (..., n))
–
Phase for each Fock state. The last dimension of the array n defines the Hilbert space dimension.
Returns
(array of shape (..., n, n)) SNAP gate operator.
Examples
>>> dq.snap_gate([0, 1, 2])
Array([[ 1. +0.j , 0. +0.j , 0. +0.j ],
[ 0. +0.j , 0.54 +0.841j, 0. +0.j ],
[ 0. +0.j , 0. +0.j , -0.416+0.909j]], dtype=complex64)
>>> dq.snap_gate([[0, 1, 2], [2, 3, 4]]).shape
(2, 3, 3)