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