Skip to main content
IBM Quantum Platform

Transpiler-Stage-Plugin-Schnittstelle

qiskit.transpiler.preset_passmanagers.plugin

Dieses Modul definiert die Plugin-Schnittstelle zur Bereitstellung benutzerdefinierter Stage-Implementierungen für die Preset-Pass-Manager und die transpile() Funktion. Dadurch können externe „ Python “-Pakete Objekte bereitstellen PassManager , die für jede benannte Phase verwendet werden können.

Die Plugin-Schnittstellen werden mit Hilfe von setuptools-Einstiegspunkten erstellt, die es Paketen außerhalb von Qiskit ermöglichen, anzuzeigen, dass sie eine Transpiler-Stufe(n) enthalten.

Details darüber, wie man stattdessen Plugins für Transpiler-Synthesemethoden schreibt, finden Sie unter qiskit.transpiler.passes.synthesis.plugin.


Plugin-Phasen

Es gibt sechs Stufen in den Preset-Pass-Managern, die alle über entsprechende Einstiegspunkte aktiv externe Plugins laden. In der folgenden Tabelle sind die einzelnen Phasen zusammengefasst. Weitere Einzelheiten zur Beschreibung und zu den Erwartungen an die einzelnen Phasen finden Sie, wenn Sie dem Link in den Namen der Phasen zu den vollständigen Unterlagen folgen.

Stadiumsname
Eingangspunkt
Reservierte Namen
Zusammenfassung
Anfänglichqiskit.transpiler.initdefaultLogische Optimierungen auf hoher Ebene für abstrakte Schaltungen und Reduktion von Multi-Qubit-Operationen auf Ein- und Zwei-Qubit-Operationen.
Layoutqiskit.transpiler.layouttrivial, dense, sabre, defaultWählen Sie eine anfängliche Zuordnung von virtuellen Qubits zu physikalischen Qubits, einschließlich der Erweiterung der Schaltung um explizite Ancillas. Diese Phase wird manchmal mit routing kombiniert.
Weiterleitungqiskit.transpiler.routingdefault, basic, stochastic, lookahead, sabreFügen Sie Gatter in die Schaltung ein, um sicherzustellen, dass sie den Verbindungsbedingungen der Target. entspricht. Die eingefügten Gatter müssen noch nicht in der Ziel-ISA enthalten sein und werden daher oft einfach als swap Befehle ausgegeben. Diese Phase wird manchmal unter layout. zusammengefasst.
Übersetzungqiskit.transpiler.translationdefault, translator, synthesisAlle Gatter außerhalb des Ziel-ISA werden umgeschrieben, so dass nur Gatter innerhalb des ISA verwendet werden.
Optimierungqiskit.transpiler.optimizationdefaultOptimierungen auf niedriger Ebene, die sich an den physikalischen Schaltkreisen orientieren. Im Gegensatz zu init agiert die Stufe optimization auf der Ebene eines physischen Schaltkreises.
planenqiskit.transpiler.schedulingalap, asap, defaultFügen Sie Delay anweisungen ein, um das Wall-Clock-Timing der Schaltung eindeutig zu machen.

Plugins schreiben

Um ein Pass-Manager-Stage-Plugin zu schreiben, sind zwei Hauptschritte erforderlich. Der erste Schritt besteht darin, eine Unterklasse der abstrakten Plugin-Klasse PassManagerStagePlugin zu erstellen, mit der festgelegt wird, wie die PassManager für die Stufe aufgebaut wird. Um beispielsweise ein layout Stage-Plugin zu erstellen, das einfach ausgeführt wird VF2Layout (mit einer je nach Optimierungsstufe steigenden Anzahl von Versuchen) und auf die Verwendung TrivialLayout von zurückgreift, falls VF2Layout kein perfektes Layout gefunden werden kann:

from qiskit.transpiler.preset_passmanagers.plugin import PassManagerStagePlugin
from qiskit.transpiler.preset_passmanagers import common
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import VF2Layout, TrivialLayout
from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
from qiskit.passmanager import ConditionalController


def _vf2_match_not_found(property_set):
    return property_set.get("layout") is None or (
        property_set.get("VF2Layout_stop_reason") is not None
        and property_set.get("VF2Layout_stop_reason")
        is not VF2LayoutStopReason.SOLUTION_FOUND
    )


class VF2LayoutPlugin(PassManagerStagePlugin):
    def pass_manager(self, pass_manager_config, optimization_level):
        layout_pm = PassManager(
            [
                VF2Layout(
                    coupling_map=pass_manager_config.coupling_map,
                    max_trials=optimization_level * 10 + 1,
                    target=pass_manager_config.target,
                ),
                ConditionalController(
                    TrivialLayout(pass_manager_config.coupling_map),
                    condition=_vf2_match_not_found,
                ),
            ]
        )
        layout_pm += common.generate_embed_passmanager(pass_manager_config.coupling_map)
        return layout_pm

Der zweite Schritt besteht darin, die PassManagerStagePlugin Unterklasse in den Paketmetadaten als Einstiegspunkt für setuptools zu deklarieren. Dies kann in einer entry-points Tabelle in pyproject.toml für das Plugin-Paket erfolgen, wobei die erforderlichen Einstiegspunkte unter dem entsprechenden Namespace für die Stufe, für die Ihr Plugin bestimmt ist, angegeben werden müssen. Unter „Plugin-Phasen“ können Sie die Liste der Phasen, Einstiegspunkte und die mit der jeweiligen Phase verbundenen Erwartungen einsehen. Um beispielsweise an das obige Beispiel-Plugin anzuknüpfen:

[project.entry-points."qiskit.transpiler.layout"]
"vf2" = "qiskit_plugin_pkg.module.plugin:VF2LayoutPlugin"

Es gibt keine Begrenzung für die Anzahl der Plugins, die ein einzelnes Paket enthalten kann, solange jedes Plugin einen eindeutigen Namen hat. So kann ein einzelnes Paket bei Bedarf mehrere Plugins bereitstellen. Unter Plugin-Stufen finden Sie eine Liste der reservierten Namen für jede Stufe.


Plugin-API

Kolumne „ 1 “
Kolumne „ 2 “
PassManagerStagePlugin()Ein PassManagerStagePlugin ist ein Plugin-Interface-Objekt für die Verwendung von benutzerdefinierten Stufen in transpile().
PassManagerStagePluginManager()Managerklasse für voreingestellte Pass Manager Stage Plugins.

list_stage_plugins

qiskit.transpiler.preset_passmanagers.plugin.list_stage_plugins(stage_name)

GitHub

Eine Liste der installierten Plugins für eine Stufe abrufen.

Parameter

stage_name (str) – Der Name der Bühne, für die die Plugin-Namen abgerufen werden sollen

Rückgabe

Die Liste der installierten Plugin-Namen für die angegebenen Stufen

Rückgabetyp

Plug-ins

Erhöht

TranspilerError - Wenn ein ungültiger Stufenname angegeben wird.

passmanager_stage_plugins

qiskit.transpiler.preset_passmanagers.plugin.passmanager_stage_plugins(stage)

GitHub

Gibt ein dict zurück, das für jeden Stufennamen den Klassentyp des Plugins enthält.

Diese Funktion ist nützlich, um weitere Informationen über ein Plugin zu erhalten:

from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins
routing_plugins = passmanager_stage_plugins('routing')
basic_plugin = routing_plugins['basic']
help(basic_plugin)
Help on BasicSwapPassManager in module ...preset_passmanagers.builtin_plugins object:

class BasicSwapPassManager(...preset_passmanagers.plugin.PassManagerStagePlugin)
 |  Plugin class for routing stage with :class:`~.BasicSwap`
 |
 |  Method resolution order:
 |      BasicSwapPassManager
 |      ...preset_passmanagers.plugin.PassManagerStagePlugin
 |      abc.ABC
 |      builtins.object
 ...

Parameter

stage (str) – Den Künstlernamen zu erhalten

Rückgabe

der Schlüssel ist der Name des Plugins und der Wert ist der Klassentyp für jedes.

Rückgabetyp

dict

Erhöht

TranspilerError - Wenn ein ungültiger Stufenname angegeben wird.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.