qml.math.fidelity¶
- fidelity(state0, state1, check_state=False, c_dtype='complex128')[source]¶
Compute the fidelity for two states (given as density matrices) acting on quantum systems with the same size.
The fidelity for two mixed states given by density matrices \(\rho\) and \(\sigma\) is defined as
\[F( \rho , \sigma ) = \text{Tr}( \sqrt{\sqrt{\rho} \sigma \sqrt{\rho}})^2\]Note
It supports all interfaces (NumPy, Autograd, Torch, TensorFlow and Jax). The second state is coerced to the type and dtype of the first state. The fidelity is returned in the type of the interface of the first state.
- Parameters
state0 (tensor_like) –
(2**N, 2**N)
or(batch_dim, 2**N, 2**N)
density matrix.state1 (tensor_like) –
(2**N, 2**N)
or(batch_dim, 2**N, 2**N)
density matrix.check_state (bool) – If True, the function will check the validity of both states; that is, (shape, trace, positive-definitiveness) for density matrices.
c_dtype (str) – Complex floating point precision type.
- Returns
Fidelity between the two quantum states.
- Return type
float
Example
To find the fidelity between two state vectors, call
dm_from_state_vector()
on the inputs first, e.g.:>>> state0 = qml.math.dm_from_state_vector([0.98753537-0.14925137j, 0.00746879-0.04941796j]) >>> state1 = qml.math.dm_from_state_vector([0.99500417+0.j, 0.09983342+0.j]) >>> qml.math.fidelity(state0, state1) 0.9905158135644924
To find the fidelity between two density matrices, they can be passed directly:
>>> state0 = [[1, 0], [0, 0]] >>> state1 = [[0, 0], [0, 1]] >>> qml.math.fidelity(state0, state1) 0.0