toqito.state_props.is_mutually_unbiased_basis¶
Checks if the quantum states form a mutually unbiased basis.
Module Contents¶
- toqito.state_props.is_mutually_unbiased_basis.is_mutually_unbiased_basis(vectors)[source]¶
Check if list of vectors constitute a mutually unbiased basis [@WikiMUB].
We say that two orthonormal bases
- [
- begin{equation}
mathcal{B}_0 = left{u_a: a in Sigma right} subset mathbb{C}^{Sigma} quad text{and} quad mathcal{B}_1 = left{v_a: a in Sigma right} subset mathbb{C}^{Sigma}
end{equation}
]
are mutually unbiased if and only if (left|langle u_a, v_b rangleright| = 1/sqrt{Sigma}) for all (a, b in Sigma).
For (n in mathbb{N}), a set of orthonormal bases (left{ mathcal{B}_0, ldots, mathcal{B}_{n-1} right}) are mutually unbiased bases if and only if every basis is mutually unbiased with every other basis in the set, i.e. (mathcal{B}_x) is mutually unbiased with (mathcal{B}_x^{prime}) for all (x not= x^{prime}) with (x, x^{prime} in Sigma).
Examples
MUB of dimension (2).
For (d=2), the following constitutes a mutually unbiased basis:
- [
- begin{equation}
- begin{aligned}
M_0 &= left{ |0 rangle, |1 rangle right}, \ M_1 &= left{ frac{|0 rangle + |1 rangle}{sqrt{2}}, frac{|0 rangle - |1 rangle}{sqrt{2}} right}, \ M_2 &= left{ frac{|0 rangle i|1 rangle}{sqrt{2}}, frac{|0 rangle - i|1 rangle}{sqrt{2}} right}. \
end{aligned}
end{equation}
]
`python exec="1" source="above" import numpy as np from toqito.states import basis from toqito.state_props import is_mutually_unbiased_basis e_0, e_1 = basis(2, 0), basis(2, 1) mub_1 = [e_0, e_1] mub_2 = [1 / np.sqrt(2) * (e_0 + e_1), 1 / np.sqrt(2) * (e_0 - e_1)] mub_3 = [1 / np.sqrt(2) * (e_0 + 1j * e_1), 1 / np.sqrt(2) * (e_0 - 1j * e_1)] nested_mubs = [mub_1, mub_2, mub_3] mubs = sum(nested_mubs, []) print(is_mutually_unbiased_basis(mubs)) `Non-MUB of dimension (2).
`python exec="1" source="above" import numpy as np from toqito.states import basis from toqito.state_props import is_mutually_unbiased_basis e_0, e_1 = basis(2, 0), basis(2, 1) mub_1 = [e_0, e_1] mub_2 = [1 / np.sqrt(2) * (e_0 + e_1), e_1] mub_3 = [1 / np.sqrt(2) * (e_0 + 1j * e_1), e_0] mubs = [mub_1, mub_2, mub_3] print(is_mutually_unbiased_basis(mubs)) `- Raises:
ValueError – If at least two vectors are not provided.
- Parameters:
vectors (list[numpy.ndarray | list[float | Any]]) – The list of vectors to check.
- Returns:
True if vec_list constitutes a mutually unbiased basis, and False otherwise.
- Return type:
bool