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 ofalpha
should match the length ofdim
.
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)