Source code for kosmos.partitioning.algorithms.metis_partitioner

from typing import override

try:
    import pymetis
except ImportError as e:
    msg = (
        "METISPartitioner requires the 'pymetis' package, but it is not installed. On Windows, "
        "installing 'pymetis' via pip may fail. Alternative installation methods for 'pymetis' "
        "may be necessary on Windows."
    )
    raise ImportError(msg) from e

from qiskit import QuantumCircuit

from kosmos.partitioning.algorithms.partitioning_algorithm import PartitioningAlgorithm
from kosmos.partitioning.graph import Graph


[docs] class METISPartitioner(PartitioningAlgorithm): """Graph-based partitioning using METIS."""
[docs] @override def partition(self, circuit: Graph | QuantumCircuit) -> dict[int, int]: """Compute a partitioning for the given circuit. Args: circuit (Graph | QuantumCircuit): Circuit to partition. Returns: dict[int, int]: A mapping from each node index to the partition identifier it is assigned to. """ graph = self._to_graph(circuit) adjacency = graph.to_adjacency_list() if not adjacency or self.num_partitions > len(adjacency): return dict.fromkeys(range(len(adjacency)), 0) num_parts = self.num_partitions _, membership = pymetis.part_graph(num_parts, adjacency=adjacency) return dict(enumerate(membership))