Skip to content

dq.entropy_relative

entropy_relative(rho: QArrayLike, sigma: QArrayLike) -> Array

Returns the quantum relative entropy between two kets or density matrices.

It is defined by \(S_{KL}(\rho || \sigma) = \tr{\rho (\ln \rho - \ln \sigma)}\).

Note

The relative entropy is not symmetric.

Parameters

  • rho _(qarray-like of shape (..., n, 1) or (..., n, n))_ –

    Ket or density matrix.

  • sigma _(qarray-like of shape (..., n, 1) or (..., n, n))_ –

    Ket or density matrix.

Returns

(array of shape (...)) Real-valued quantum relative entropy.

Examples

State with respect to itself:

>>> rho = dq.fock_dm(2, 0)  # |0><0|
>>> dq.entropy_relative(rho, rho)
Array(0., dtype=float32)

Pure state with respect to a maximally mixed state, and vice versa:

>>> pure = dq.fock_dm(2, 0)  # |0><0|
>>> maximally_mixed = (dq.fock_dm(2, 0) + dq.fock_dm(2, 1)).unit()  # I/2
>>> dq.entropy_relative(pure, maximally_mixed)  # ln 2 ~= 0.693
Array(0.693, dtype=float32)
>>> dq.entropy_relative(maximally_mixed, pure)  # support mismatch -> +∞
Array(inf, dtype=float32)

Pure state with respect to diagonal state in same basis:

>>> rho = dq.fock_dm(2, 0)  # |0><0|
>>> w = 0.3
>>> sigma = w * dq.fock_dm(2, 0) + (1 - w) * dq.fock_dm(2, 1)
>>> dq.entropy_relative(rho, sigma)
Array(1.204, dtype=float32)
>>> -jnp.log(w)
Array(1.204, dtype=float32, weak_type=True)

Orthogonal pure states:

>>> rho = dq.fock_dm(2, 1)  # |1><1|
>>> sigma = dq.fock_dm(2, 0)  # |0><0|
>>> dq.entropy_relative(rho, sigma)
Array(inf, dtype=float32)