density_matrix_infidelity

Graph.density_matrix_infidelity(x, y, *, name=None)

Calculate the infidelity between two states represented by density matrices.

Parameters
  • x (np.ndarray or Tensor) – The density matrix \(x\) with shape (..., D, D). The last two dimensions must have the same size for both matrices, and its batch dimensions must be broadcastable.

  • y (np.ndarray or Tensor) – The density matrix \(y\) with shape (..., D, D). The last two dimensions must have the same size for both matrices, and its batch dimensions must be broadcastable.

  • name (str, optional) – The name of the node.

Returns

The state infidelity of the density matrices with respect to each other. Its shape is the broadcasted value of the batch shapes of the two input parameters.

Return type

Tensor

Warning

This function assumes that the parameters are density matrices and therefore are positive definite. Passing matrices that have negative or complex eigenvalues will result in wrong values for the infidelity.

See also

infidelity_pwc

Total infidelity of a system with a piecewise-constant Hamiltonian.

infidelity_stf

Total infidelity of a system with a sampleable Hamiltonian.

state_infidelity

Infidelity between two quantum states.

unitary_infidelity

Infidelity between a unitary and target operators.

Notes

The general formula for the infidelity of two density matrices is

\[I = 1 - \left[ \mathrm{Tr}\left( \sqrt{\sqrt{x} y \sqrt{x}} \right) \right]^2\]

Examples

>>> infidelity = graph.density_matrix_infidelity(
...     np.array([[0.5, 0], [0, 0.5]]),
...     np.array([[1, 0], [0, 0]]),
...     name="infidelity",
... )
>>> result = qctrl.functions.calculate_graph(graph=graph, output_node_names=["infidelity"])
>>> result.output["infidelity"]["value"]
0.5