Source code for kosmos.partitioning.circuit_converter

from typing import Any

from qiskit import QuantumCircuit

from kosmos.partitioning.graph import Graph


[docs] def to_gate_list(circuit: QuantumCircuit) -> list[dict[str, Any]]: """Extract gate list from a QuantumCircuit, skipping barriers. Args: circuit: QuantumCircuit to convert. Returns: list[dict[str, object]]: List of gates. """ gates = [] for instruction in circuit.data: operation = instruction.operation if operation.name == "barrier": continue qubits = [circuit.find_bit(q).index for q in instruction.qubits] params = list(operation.params) if hasattr(operation, "params") else [] gates.append({"name": operation.name, "qubits": qubits, "params": params}) return gates
[docs] def to_graph(circuit: QuantumCircuit) -> Graph: """Convert to undirected graph for partitioning algorithms. Args: circuit: QuantumCircuit to convert. Returns: Graph: Graph representation of the circuit. """ gates = to_gate_list(circuit) adjacency = {i: set() for i in range(len(gates))} for i, gate_i in enumerate(gates): for j, gate_j in enumerate(gates): if i == j: continue if set(gate_i["qubits"]) & set(gate_j["qubits"]): adjacency[i].add(j) adjacency[j].add(i) adjacency_list = [list(neigh) for neigh in adjacency.values()] return Graph(adjacency_list)