Did I find the right examples for you? yes no      Crawl my project      Python Jobs

# sympy.physics.quantum.density.fidelity

All Samples(23)  |  Call(22)  |  Derive(0)  |  Import(1)
```Computes the fidelity between two quantum states
(http://en.wikipedia.org/wiki/Fidelity_of_quantum_states)

The arguments provided to this function should be a square matrix or a
Density object. If it is a square matrix, it is assumed to be diagonalizable.

Parameters:
==========

state1, state2 : a density matrix or Matrix(more...)
```

```        def fidelity(state1, state2):
""" Computes the fidelity between two quantum states
(http://en.wikipedia.org/wiki/Fidelity_of_quantum_states)

The arguments provided to this function should be a square matrix or a
Density object. If it is a square matrix, it is assumed to be diagonalizable.

Parameters:
==========

state1, state2 : a density matrix or Matrix

Examples:
=========

>>> from sympy import S, sqrt
>>> from sympy.physics.quantum.dagger import Dagger
>>> from sympy.physics.quantum.spin import JzKet
>>> from sympy.physics.quantum.density import Density, fidelity
>>> from sympy.physics.quantum.represent import represent
>>>
>>> up = JzKet(S(1)/2,S(1)/2)
>>> down = JzKet(S(1)/2,-S(1)/2)
>>> amp = 1/sqrt(2)
>>> updown = (amp * up) + (amp * down)
>>>
>>> # represent turns Kets into matrices
>>> up_dm = represent(up * Dagger(up))
>>> down_dm = represent(down * Dagger(down))
>>> updown_dm = represent(updown * Dagger(updown))
>>>
>>> fidelity(up_dm, up_dm)
1
>>> fidelity(up_dm, down_dm) #orthogonal states
0
>>> fidelity(up_dm, updown_dm).evalf().round(3)
0.707

"""
state1 = represent(state1) if isinstance(state1, Density) else state1
state2 = represent(state2) if isinstance(state2, Density) else state2

if (not isinstance(state1, Matrix) or
not isinstance(state2, Matrix)):
raise ValueError("state1 and state2 must be of type Density or Matrix "
"received type=%s for state1 and type=%s for state2" %
(type(state1), type(state2)))

if ( state1.shape != state2.shape and state1.is_square):
raise ValueError("The dimensions of both args should be equal and the "
"matrix obtained should be a square matrix")

sqrt_state1 = state1**Rational(1, 2)
return Tr((sqrt_state1 * state2 * sqrt_state1)**Rational(1, 2)).doit()
```

```from sympy import pprint, latex, symbols, S, log
from sympy.matrices import Matrix
from sympy.core.trace import Tr
from sympy.external import import_module
from sympy.physics.quantum.density import Density, entropy, fidelity
```
```    updown_dm = represent(updown * Dagger(updown))

assert abs(fidelity(up_dm, up_dm) - 1) < 1e-3
assert fidelity(up_dm, down_dm) < 1e-3
assert abs(fidelity(up_dm, updown_dm) - (S(1)/sqrt(2))) < 1e-3
assert abs(fidelity(updown_dm, down_dm) - (S(1)/sqrt(2))) < 1e-3
```