Skip to content

dq.coherent_dm

coherent_dm(dim: int | tuple[int, ...], alpha: ArrayLike) -> Array

Returns the density matrix of a coherent state or a tensor product of coherent states.

Parameters

  • dim –

    Hilbert space dimension of each mode.

  • alpha (array_like of shape (...) or (..., len(dim))) –

    Coherent state amplitude for each mode. If dim is a tuple, the last dimension of alpha should match the length of dim.

Returns

(array of shape (..., n, n)) Density matrix of the coherent state or tensor product of coherent states, with n = prod(dims).

Examples

Single-mode coherent state \(\ket{\alpha}\bra{\alpha}\):

>>> dq.coherent_dm(4, 0.5)
Array([[0.779+0.j, 0.389+0.j, 0.137+0.j, 0.042+0.j],
       [0.389+0.j, 0.195+0.j, 0.069+0.j, 0.021+0.j],
       [0.137+0.j, 0.069+0.j, 0.024+0.j, 0.007+0.j],
       [0.042+0.j, 0.021+0.j, 0.007+0.j, 0.002+0.j]], dtype=complex64)

Batched single-mode coherent states \(\{\ket{\alpha_0}\bra{\alpha_0}\!, \ket{\alpha_1}\bra{\alpha_1}\}\):

>>> dq.coherent_dm(4, [0.5, 0.5j]).shape
(2, 4, 4)

Multi-mode coherent state \(\ket{\alpha}\bra{\alpha}\otimes\ket{\beta}\bra{\beta}\):

>>> dq.coherent_dm((2, 3), (0.5, 0.5j)).shape
(6, 6)

Batched multi-mode coherent states \(\{\ket{\alpha_0}\bra{\alpha_0}\otimes\ket{\beta_0}\bra{\beta_0}\!, \ket{\alpha_1}\bra{\alpha_1}\otimes\ket{\beta_1}\bra{\beta_1}\}\):

>>> alpha = [(0.5, 0.5j), (0.5j, 0.5)]
>>> dq.coherent_dm((4, 6), alpha).shape
(2, 24, 24)