Source code for kosmos.dqc_scheduling.space_time_matrix
from kosmos.partitioning.partition import Partition
from kosmos.topology.node import QuantumNode
TWO_QUBIT_GATE_SIZE = 2
[docs]
class SpaceTimeMatrix:
"""Matrix tracking QPU assignments for each qubit at each time step.
Attributes:
num_qubits (int): Number of qubits tracked in the matrix (rows).
num_timesteps (int): Number of gate-timesteps in the simulation (columns).
matrix (list[list[QuantumNode | None]]): Matrix that stores which Qubit is assigned to what
node in the simulation.
partition_info (dict[str, Partition]): Mapping from Partition objects, storing circuit
segments and metadata.
"""
def __init__(self, num_qubits: int, num_timesteps: int) -> None:
"""Initialize empty matrix.
Args:
num_qubits (int): Number of qubits tracked in the matrix (rows).
num_timesteps (int): Number of gate-timesteps in the simulation (columns).
"""
self.num_qubits: int = num_qubits
self.num_timesteps: int = num_timesteps
self.matrix: list[list[QuantumNode | None]] = [
[None] * num_timesteps for _ in range(num_qubits)
]
self.partition_info: dict[str, Partition] = {}
[docs]
def get_node_at(self, qubit: int, time: int) -> QuantumNode | None:
"""Get node owning a qubit at a specific time.
Args:
qubit (int): Qubit index.
time (time): Time step.
Returns:
QuantumNode | None: Node owning the qubit, or None if not allocated.
"""
if 0 <= qubit < self.num_qubits and 0 <= time < self.num_timesteps:
return self.matrix[qubit][time]
return None