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