Source code for kosmos.quantum_logic.quantum_state

import numpy as np
import scipy


[docs] class QuantumState: """Representation of a quantum state using a density matrix. Attributes: fidelity (float | None): Fidelity of a quantum state. """
[docs] @staticmethod def validate_density_matrix(rho: np.ndarray, tolerance: float = 1e-10) -> None: """Verify whether the density matrix represents a quantum state. Args: rho (np.ndarray): Density matrix. tolerance (float): Tolerance due to inaccurate calculations. Defaults to 1e-10. """ if rho.shape[0] != rho.shape[1]: msg = "Density matrix must be square." raise ValueError(msg) if not np.allclose(rho, rho.conj().T, atol=tolerance): msg = "Density matrix must be Hermitian." raise ValueError(msg) if not np.isclose(np.trace(rho), 1.0, atol=tolerance): msg = "Density matrix must have trace 1." raise ValueError(msg) if np.any(np.linalg.eigvalsh(rho) < -tolerance): msg = "Density matrix must be positive semidefinite." raise ValueError(msg)
def __init__( self, *, rho: np.ndarray | None = None, fidelity: float | None = 0.0, ) -> None: """Initialize and validate density matrix and validity of state. Args: rho (np.ndarray | None): Density matrix of a quantum register. Defaults to None. fidelity (float | None): Fidelity value of a quantum register. Defaults to 0.0. """ if fidelity > 1.0 or fidelity < 0.0: msg = "Fidelity must be a float between 0 and 1." raise ValueError(msg) if rho is not None: QuantumState.validate_density_matrix(rho) self._rho = rho else: # Default: |0><0| self._rho = np.zeros((2, 2), dtype=complex) self._rho[0, 0] = 1.0 self.fidelity = fidelity @property def rho(self) -> np.ndarray: """Density matrix of a state.""" return self._rho @rho.setter def rho(self, density_matrix: np.ndarray) -> None: QuantumState.validate_density_matrix(density_matrix) self._rho = density_matrix @property def dim(self) -> int: """Dimension of rho.""" return self._rho.shape[0]
[docs] def fidelity_from_rho(self, target: "QuantumState") -> float: """Compute Uhlmann fidelity between two states. Args: target (QuantumState): target quantum state. Returns: float: Fidelity value between 0 and 1. """ sqrt_rho = scipy.linalg.sqrtm(self._rho) # d₁^(1/2) = √rho inner = sqrt_rho @ target.rho @ sqrt_rho # d₁^(1/2) d₂ d₁^(1/2) = √rho sigma √rho s = scipy.linalg.sqrtm(inner) # s = √(√rho sigma √rho) trace_s = np.trace(s) # Sp s = Tr(s) return float(np.real(trace_s) ** 2) # (Sp s)²
[docs] def fidelity_with_target(self, target_rho: np.ndarray) -> float: """Compute fidelity between this state and an ideal target state. Measures how close the actual state is to the ideal state. Args: target_rho (np.ndarray): Density matrix of the ideal target state. Returns: float: Fidelity value between 0 and 1. """ target_state = QuantumState(rho=target_rho) return self.fidelity_from_rho(target_state)