Source code for kosmos.protocols.config.protocol

from collections.abc import Collection
from dataclasses import dataclass
from typing import Literal

from kosmos.topology.link import LinkType


[docs] @dataclass(frozen=True, kw_only=True) class ProtocolConfig: """Base class for all protocol configurations."""
[docs] @dataclass(frozen=True, kw_only=True) class EGProtocolConfig(ProtocolConfig): """Entanglement generation protocol configuration. Attributes: fidelity_threshold (float): Threshold for entanglement fidelity. Defaults to 0.9. purification_improvement (float): Fidelity improvement from purification. Defaults to 0.09. swap_success_rate (float): Probability for successful swapping. Defaults to 0.5. """ fidelity_threshold: float = 0.9 purification_improvement: float = 0.09 swap_success_rate: float = 0.5 def __post_init__(self) -> None: """Validate the protocol configuration.""" if not 0 <= self.fidelity_threshold <= 1: msg = "Fidelity threshold must be in [0, 1]." raise ValueError(msg) if not 0 <= self.purification_improvement <= 1: msg = "Purification improvement must be in [0, 1]." raise ValueError(msg) if not 0 <= self.swap_success_rate <= 1: msg = "Swap success rate must be in [0, 1]." raise ValueError(msg)
[docs] @dataclass(frozen=True, kw_only=True) class RoutingProtocolConfig(ProtocolConfig): """Routing protocol configuration. Attributes: allowed_link_types (Collection[LinkType]): Allowed link types for routing. cost_function (Literal["cost", "distance"]): Cost function to use for routing. Defaults to "cost". """ allowed_link_types: Collection[LinkType] cost_function: Literal["cost", "distance"] = "cost" def __post_init__(self) -> None: """Make allowed_link_types immutable.""" allowed_link_types_fs = frozenset(self.allowed_link_types) object.__setattr__(self, "allowed_link_types", allowed_link_types_fs)
[docs] @dataclass(frozen=True, kw_only=True) class RemoteOperationProtocolConfig(ProtocolConfig): """Remote CNOT protocol configuration. Attributes: operation_type (Literal["teleportation", "remote_cnot"]): Type of remote operation. classical_communication_delay (int): Time (in picoseconds) for classical communication between nodes. Defaults to 10,000,000 (10 mikro-s = 10^7 ps (e.g., 10 km fiber RTT)). local_gate_time (int): Time (in picoseconds) to perform a local quantum gate. Defaults to 50,000 (50 ns = 5x10^4 ps for single-qubit gates; x4 for two-qubit gates). measurement_time (int): Time (in picoseconds) to perform a qubit measurement. Defaults to 2,000,000 (2000 ns = 2x10^6 ps (measurement + reset)). failure_probability (float): Probability of operation failure due to errors. Defaults to 0.05 (5% error rate). max_retries (int): Maximum number of retries for communication. Defaults to 10. """ operation_type: Literal["teleportation", "remote_cnot"] classical_communication_delay: int = 10000000 local_gate_time: int = 50000 measurement_time: int = 2000000 failure_probability: float = 0.05 max_retries: int = 10
[docs] @dataclass(frozen=True, kw_only=True) class CircuitExecutionProtocolConfig(ProtocolConfig): """Circuit execution protocol configuration. Attributes: local_gate_time (int): Time (in picoseconds) to perform a local quantum gate. Defaults to 50,000 (50 ns = 5x10^4 ps (single-qubit gates)). measurement_time (int): Time (in picoseconds) to perform a qubit measurement. Defaults to 2,000,000 (2000 ns = 2x10^6 ps (measurement + reset time)). """ local_gate_time: int = 50000 measurement_time: int = 2000000