Source code for qibo.transpiler.abstract

from abc import ABC, abstractmethod
from typing import Tuple

import networkx as nx

from qibo.models import Circuit


[docs]class Placer(ABC): """Maps logical qubits to physical qubits.""" @abstractmethod def __init__(self, connectivity: nx.Graph, *args): """Initializes the placer. Args: connectivity (nx.Graph): Hardware topology. """ @abstractmethod def __call__(self, circuit: Circuit, *args): """Find initial qubit mapping. Method works in-place. Args: circuit (:class:`qibo.models.circuit.Circuit`): Circuit to be placed. """
[docs]class Router(ABC): """Makes the circuit executable on the given topology.""" @abstractmethod def __init__(self, connectivity: nx.Graph, *args): """Initializes the router. Args: connectivity (nx.Graph): Hardware topology. """ @abstractmethod def __call__(self, circuit: Circuit, *args) -> Tuple[Circuit, dict]: """Match circuit to hardware connectivity. Args: circuit (:class:`qibo.models.circuit.Circuit`): Circuit to be routed. Returns: (:class:`qibo.models.circuit.Circuit`, dict): Routed circuit and final {logical: physical} qubit mapping. """
[docs]class Optimizer(ABC): """Reduces the number of gates in the circuit.""" @abstractmethod def __call__(self, circuit: Circuit, *args) -> Circuit: """Optimize transpiled circuit. Args: circuit (:class:`qibo.models.circuit.Circuit`): Circuit to be optimized. Returns: (:class:`qibo.models.circuit.Circuit`): Optimized circuit. """