Source code for toqito.states.bell
"""Bell states represent the simplest examples of quantum entanglement of two qubits.
Also known as EPR pairs, Bell states comprise of four quantum states in a superposition of 0 and 1.
"""
import numpy as np
[docs]
def bell(idx: int) -> np.ndarray:
r"""Produce a Bell state [@WikiBellSt].
Returns one of the following four Bell states depending on the value of `idx`:
\[
\begin{equation}
\begin{aligned}
u_0 = \frac{1}{\sqrt{2}} \left( |00 \rangle + |11 \rangle \right), &
\qquad &
u_1 = \frac{1}{\sqrt{2}} \left( |00 \rangle - |11 \rangle \right), \\
u_2 = \frac{1}{\sqrt{2}} \left( |01 \rangle + |10 \rangle \right), &
\qquad &
u_3 = \frac{1}{\sqrt{2}} \left( |01 \rangle - |10 \rangle \right).
\end{aligned}
\end{equation}
\]
Examples:
When `idx = 0`, this produces the following Bell state:
\[
u_0 = \frac{1}{\sqrt{2}} \left( |00 \rangle + |11 \rangle \right).
\]
Using `|toqito⟩`, we can see that this yields the proper state.
```python exec="1" source="above"
from toqito.states import bell
import numpy as np
print(bell(0))
```
Raises:
ValueError: If `idx` is not an integer.
Args:
idx: A parameter in [0, 1, 2, 3]
Returns:
Bell state with index `idx`.
"""
match idx:
case 0:
return 1 / np.sqrt(2) * np.array([[1], [0], [0], [1]])
case 1:
return 1 / np.sqrt(2) * np.array([[1], [0], [0], [-1]])
case 2:
return 1 / np.sqrt(2) * np.array([[0], [1], [1], [0]])
case 3:
return 1 / np.sqrt(2) * np.array([[0], [1], [-1], [0]])
raise ValueError("Invalid integer value for Bell state.")