dq.fock_dm
fock_dm(dim: int | tuple[int, ...], number: ArrayLike) -> Array
Returns the density matrix of a Fock state or a tensor product of Fock states.
Parameters
-
dim
–
Hilbert space dimension of each mode.
-
number
(array_like of shape (...) or (..., len(dim)))
–
Fock state number for each mode, of integer type. If
dim
is a tuple, the last dimension ofnumber
should match the length ofdim
.
Returns
(array of shape (..., n, n)) Density matrix of the Fock state or tensor product of Fock states, with n = prod(dims).
Examples
Single-mode Fock state \(\ket{1}\bra{1}\):
>>> dq.fock_dm(3, 1)
Array([[0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 1.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j]], dtype=complex64)
Batched single-mode Fock states \(\{\ket{0}\bra{0}\!, \ket{1}\bra{1}\!, \ket{2}\bra{2}\}\):
>>> dq.fock_dm(3, [0, 1, 2])
Array([[[1.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j]],
[[0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 1.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j]],
[[0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 1.+0.j]]], dtype=complex64)
Multi-mode Fock state \(\ket{1,0}\bra{1,0}\):
>>> dq.fock_dm((3, 2), (1, 0))
Array([[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j]], dtype=complex64)
Batched multi-mode Fock states \(\{\ket{0,0}\bra{0,0}\!, \ket{0,1}\bra{0,1}\!, \ket{1,1}\bra{1,1}\!, \ket{2,0}\bra{2,0}\}\):
>>> number = [(0, 0), (0, 1), (1, 1), (2, 0)]
>>> dq.fock_dm((3, 2), number).shape
(4, 6, 6)