state_props.is_mutually_unbiased_basis

Check if states form mutually unbiased basis.

Module Contents

Functions

is_mutually_unbiased_basis(vectors)

Check if list of vectors constitute a mutually unbiased basis [1].

state_props.is_mutually_unbiased_basis.is_mutually_unbiased_basis(vectors)

Check if list of vectors constitute a mutually unbiased basis [1].

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 \rangle\right| = 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{split}\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}\end{split}\]
>>> 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, [])
>>> is_mutually_unbiased_basis(mubs)
True

Non-MUB of dimension \(2\).

>>> 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]
>>> is_mutually_unbiased_basis(mubs)
False

References

[1] (1,2)

Wikipedia. Mutually unbiased bases. hhttps://en.wikipedia.org/wiki/Mutually_unbiased_bases.

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