:py:mod:`kosmos.dqc_scheduling.utils.protocol_scheduling_utils` =============================================================== .. py:module:: kosmos.dqc_scheduling.utils.protocol_scheduling_utils Functions --------- .. py:function:: schedule_circuit_execution(step: kosmos.dqc_scheduling.execution_scheduler.ExecutionStep, event_queue: kosmos.dqc_scheduling.event_queue.EventQueue, network: kosmos.topology.net.Network, circuit_runner: kosmos.circuit_runner.qiskit_runner.QiskitRunner) -> None Schedule a circuit execution protocol. :param step: Execution step containing circuit and dependencies. :type step: ExecutionStep :param event_queue: Event queue to add the protocol to. :type event_queue: EventQueue :param network: The quantum network topology. :type network: Network :param circuit_runner: Circuit runner for execution. :type circuit_runner: QiskitRunner .. py:function:: schedule_remote_operation(step: kosmos.dqc_scheduling.execution_scheduler.ExecutionStep, event_queue: kosmos.dqc_scheduling.event_queue.EventQueue, network: kosmos.topology.net.Network, quantum_manager: kosmos.quantum_logic.quantum_register_manager.QuantumRegisterManager, eg_protocol_cls: type[kosmos.protocols.eg_protocol.EGProtocol], eg_protocol_config: kosmos.protocols.eg_protocol.EGProtocolConfig, last_remote_op_per_node_pair: dict[tuple[kosmos.topology.node.NodeId, kosmos.topology.node.NodeId], kosmos.dqc_scheduling.event.EventId], node_comm_usage: dict[kosmos.topology.node.NodeId, dict[int, list[kosmos.dqc_scheduling.event.EventId]]]) -> None Schedule entanglement generation and remote operation protocols. :param step: Execution step containing remote operation info. :type step: ExecutionStep :param event_queue: Event queue to add protocols to. :type event_queue: EventQueue :param network: The quantum network topology. :type network: Network :param quantum_manager: Quantum register manager reference. :type quantum_manager: QuantumRegisterManager :param eg_protocol_cls: EG protocol class to instantiate. :type eg_protocol_cls: type[EGProtocol] :param eg_protocol_config: Configuration for EG protocol. :type eg_protocol_config: EGProtocolConfig :param last_remote_op_per_node_pair: Tracks last remote op between each node pair. :type last_remote_op_per_node_pair: dict[tuple[NodeId, NodeId], EventId] :param node_comm_usage: Tracks communication qubit usage per node and gate_time. :type node_comm_usage: dict[NodeId, dict[int, list[EventId]]] .. py:function:: compute_eg_dependencies(node_pair: tuple[kosmos.topology.node.QuantumNode, kosmos.topology.node.QuantumNode], gate_time: int, last_remote_op_per_node_pair: dict[tuple[kosmos.topology.node.NodeId, kosmos.topology.node.NodeId], kosmos.dqc_scheduling.event.EventId], node_comm_usage: dict[kosmos.topology.node.NodeId, dict[int, list[kosmos.dqc_scheduling.event.EventId]]]) -> list[kosmos.dqc_scheduling.event.EventId] Compute dependencies for entanglement generation. :param node_pair: Source and target nodes. :type node_pair: tuple[NodeId, NodeId] :param gate_time: Gate-timestep in space-time matrix. :type gate_time: int :param last_remote_op_per_node_pair: Last operation between each node pair. :type last_remote_op_per_node_pair: dict[tuple[NodeId, NodeId], EventId] :param node_comm_usage: Current comm qubit usage. :type node_comm_usage: dict[NodeId, dict[int, list[EventId]]] :returns: Dependencies that must complete before EG can start. :rtype: list[EventId] .. py:function:: schedule_eg_protocol(node_pair: tuple[kosmos.topology.node.QuantumNode, kosmos.topology.node.QuantumNode], step_event_id: kosmos.dqc_scheduling.event.EventId, eg_dependencies: list[kosmos.dqc_scheduling.event.EventId], event_queue: kosmos.dqc_scheduling.event_queue.EventQueue, network: kosmos.topology.net.Network, quantum_manager: kosmos.quantum_logic.quantum_register_manager.QuantumRegisterManager, eg_protocol_cls: type[kosmos.protocols.eg_protocol.EGProtocol], eg_protocol_config: kosmos.protocols.eg_protocol.EGProtocolConfig) -> kosmos.dqc_scheduling.event.EventId Schedule entanglement generation protocol. :param node_pair: Source and target nodes. :type node_pair: tuple[QuantumNode, QuantumNode] :param step_event_id: Event ID of the remote operation step. :type step_event_id: EventId :param eg_dependencies: Dependencies for the EG protocol. :type eg_dependencies: list[EventId] :param event_queue: Event queue to add protocol to. :type event_queue: EventQueue :param network: The quantum network topology. :type network: Network :param quantum_manager: Quantum register manager. :type quantum_manager: QuantumRegisterManager :param eg_protocol_cls: EG protocol class to instantiate. :type eg_protocol_cls: type[EGProtocol] :param eg_protocol_config: Configuration for EG protocol. :type eg_protocol_config: EGProtocolConfig :returns: Event ID of the scheduled EG protocol. :rtype: EventId .. py:function:: schedule_remote_op_protocol(step: kosmos.dqc_scheduling.execution_scheduler.ExecutionStep, eg_event_id: kosmos.dqc_scheduling.event.EventId, event_queue: kosmos.dqc_scheduling.event_queue.EventQueue, network: kosmos.topology.net.Network, quantum_manager: kosmos.quantum_logic.quantum_register_manager.QuantumRegisterManager) -> kosmos.dqc_scheduling.event.EventId Schedule remote operation protocol (gate or teleportation). :param step: Execution step containing remote operation info. :type step: ExecutionStep :param eg_event_id: Event ID of the EG protocol dependency. :type eg_event_id: EventId :param event_queue: Event queue to add protocol to. :type event_queue: EventQueue :param network: The quantum network topology. :type network: Network :param quantum_manager: Quantum register manager. :type quantum_manager: QuantumRegisterManager :returns: Event ID of the scheduled remote operation. :rtype: EventId .. py:function:: get_ordered_node_pair_key(node_pair: tuple[kosmos.topology.node.QuantumNode, kosmos.topology.node.QuantumNode]) -> tuple[kosmos.topology.node.NodeId, kosmos.topology.node.NodeId] Ensure consistent ordering for node pair keys. :param node_pair: Tuple of source_node and target_node. :type node_pair: tuple[QuantumNode, QuantumNode] :returns: Ordered node IDs for use as dict key. :rtype: tuple[NodeId, NodeId]