Source code for toqito.states.max_entangled

"""Maximally entangled states are states where the qubits are completely dependent on each other.

In these states, when a measurement is taken on one of the qubits, the state of the other qubits is automatically known.
"""

import numpy as np
from scipy.sparse import coo_array


[docs] def max_entangled(dim: int, is_sparse: bool = False, is_normalized: bool = True) -> np.ndarray | coo_array: r"""Produce a maximally entangled bipartite pure state [@WikiMaxEnt]. Produces a maximally entangled pure state as above that is sparse if `is_sparse = True` and is full if `is_sparse = False`. The pure state is normalized to have Euclidean norm 1 if `is_normalized = True`, and it is unnormalized (i.e. each entry in the vector is 0 or 1 and the Euclidean norm of the vector is `sqrt(dim)` if `is_normalized = False`. Examples: We can generate the canonical \(2\)-dimensional maximally entangled state \[ u = \frac{1}{\sqrt{2}} \left( |00 \rangle + |11 \rangle \right) \] using `|toqito⟩` as follows. ```python exec="1" source="above" from toqito.states import max_entangled print(max_entangled(2)) ``` By default, the state returned in normalized, however we can generate the unnormalized state \[ v = |00\rangle + |11 \rangle \] using `|toqito⟩` as follows. ```python exec="1" source="above" from toqito.states import max_entangled print(max_entangled(2, False, False)) ``` Args: dim: Dimension of the entangled state. is_sparse: `True` if vector is sparse and `False` otherwise. is_normalized: `True` if vector is normalized and `False` otherwise. Returns: The maximally entangled state of dimension `dim`. """ # Allow both standard int and numpy integer types if not isinstance(dim, (int, np.integer)) or dim <= 0: raise ValueError("Dimension must be a positive integer.") norm_factor = 1 / np.sqrt(dim) if is_normalized else 1.0 idx = np.arange(dim) * (dim + 1) # positions of nonzero entries in flattened form. if is_sparse: # Construct sparse vector directly. data = np.full(dim, norm_factor) psi = coo_array((data, (idx, np.zeros(dim))), shape=(dim**2, 1)) return psi psi = np.zeros((dim**2, 1), dtype=float) psi[idx, 0] = norm_factor return psi