Source code for toqito.states.gisin

"""Gisin states are the mixtures of separable mixed states and some purely entangled states."""

import numpy as np


[docs] def gisin(lambda_var: float, theta: float) -> np.ndarray: r"""Produce a Gisin state [@Gisin_1996_Hidden]. Returns the Gisin state described in [@Gisin_1996_Hidden]. Specifically, the Gisin state can be defined as: \[ \begin{equation} \rho_{\lambda, \theta} = \lambda \begin{pmatrix} 0 & 0 & 0 & 0 \\ 0 & \sin^2(\theta) & -\sin(\theta)\cos(\theta) & 0 \\ 0 & -\sin(\theta)\cos(\theta) & \cos^2(\theta) & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix} + \frac{1 - \lambda}{2} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}. \end{equation} \] Examples: The following code generates the Gisin state \(\rho_{0.5, 1}\). ```python exec="1" source="above" from toqito.states import gisin print(gisin(0.5, 1)) ``` Raises: ValueError: If `lambda_var` is not a real number. Args: lambda_var: A real parameter in [0, 1]. theta: A real parameter. Returns: Gisin state. """ if lambda_var < 0 or lambda_var > 1: raise ValueError("InvalidLambda: Variable lambda must be between 0 and 1.") rho_theta = np.array( [ [0, 0, 0, 0], [0, np.sin(theta) ** 2, -np.sin(2 * theta) / 2, 0], [0, -np.sin(2 * theta) / 2, np.cos(theta) ** 2, 0], [0, 0, 0, 0], ] ) rho_uu_dd = np.array([[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]) return lambda_var * rho_theta + (1 - lambda_var) * rho_uu_dd / 2