Skip to main content
IBM Quantum Platform

Interface du plugin Transpiler Stage

qiskit.transpiler.preset_passmanagers.plugin

Ce module définit l'interface de plugin permettant de fournir des implémentations personnalisées des étapes pour les gestionnaires de passes prédéfinies et la transpile() fonction. Cela permet aux paquets d' Python s externes de fournir PassManager des objets pouvant être utilisés pour chaque étape désignée.

Les interfaces des plugins sont construites en utilisant des points d'entrée setuptools qui permettent aux paquets externes à Qiskit d'annoncer qu'ils incluent un ou plusieurs étages de transpilation.

Pour plus de détails sur la façon d'écrire des plugins pour les méthodes de synthèse du transpondeur, voir qiskit.transpiler.passes.synthesis.plugin.


Étapes du plugin

Les gestionnaires de passages de préréglages comportent six étapes, qui chargent toutes activement des plugins externes à l'aide des points d'entrée correspondants. Le tableau suivant résume chaque étape. Pour plus de détails sur la description et les attentes de chaque étape, suivez le lien dans les noms des étapes vers la documentation complète.

Nom de phase
Point d'entrée
Noms réservés
Récapitulatif
initialiserqiskit.transpiler.initdefaultOptimisations logiques de haut niveau sur des circuits abstraits et réduction des opérations multi-qubits à des opérations à un ou deux qubits.
agencementqiskit.transpiler.layouttrivial, dense, sabre, defaultChoisir une cartographie initiale des qubits virtuels aux qubits physiques, y compris l'expansion du circuit pour inclure des ancillas explicites. Cette étape est parfois combinée avec routing.
Routageqiskit.transpiler.routingdefault, basic, stochastic, lookahead, sabreInsérez des portes logiques dans le circuit afin de vous assurer qu'il respecte les contraintes de connectivité du Target. Les portes insérées n'ont pas besoin de figurer encore dans l'ISA cible; elles sont donc souvent simplement générées sous forme swap d'instructions. Cette étape est parfois regroupée sous layout.
Traductionqiskit.transpiler.translationdefault, translator, synthesisRéécrire toutes les portes en dehors de l'ISA cible pour n'utiliser que les portes de l'ISA.
optimisationqiskit.transpiler.optimizationdefaultOptimisations de bas niveau tenant compte des circuits physiques. Contrairement à init, l'étape optimization agit au niveau d'un circuit physique.
planificationqiskit.transpiler.schedulingalap, asap, defaultInsérer Delay des instructions pour rendre la synchronisation du circuit avec l'horloge murale totalement explicite.

Écriture de plugins

Pour écrire un plugin de phase « pass manager », il y a deux étapes principales. La première étape consiste à créer une sous-classe de la classe PassManagerStagePlugin abstraite « plugin », qui sert à définir la manière PassManager dont la « stage » sera construite. Par exemple, pour créer un layout plugin de phase qui se contente de s'exécuter VF2Layout (avec un nombre croissant d'essais, en fonction du niveau d'optimisation) et qui, si VF2Layout ne parvient pas à trouver une disposition parfaite, revient à l'utilisation TrivialLayout de :

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

La deuxième étape consiste à définir la PassManagerStagePlugin sous-classe comme point d'entrée setuptools dans les métadonnées du paquet. Cela peut être effectué dans une entry-points table de pyproject.toml pour le paquet du plugin, en y ajoutant les points d'entrée nécessaires sous l'espace de noms correspondant à l'étape à laquelle s'adresse votre plugin. Vous pouvez consulter la liste des étapes, des points d'entrée et des attentes associées à chaque étape dans la section « Étapes du plugin ». Par exemple, pour reprendre l'exemple de plugin ci-dessus :

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

Il n'y a pas de limite au nombre de plugins qu'un seul paquet peut inclure, tant que chaque plugin a un nom unique. Ainsi, un seul paquet peut exposer plusieurs plugins si nécessaire. Reportez-vous aux étapes du plugin pour obtenir la liste des noms réservés pour chaque étape.


API du plugin

PassManagerStagePlugin()Un PassManagerStagePlugin est un objet d'interface de plugin permettant d'utiliser des étapes personnalisées dans transpile().
PassManagerStagePluginManager()Classe de gestion pour les plugins de gestion des présélections.

list_stage_plugins

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

GitHub

Obtenir la liste des plugins installés pour une étape.

Paramètres

stage_name (str) – Le nom de l'étape pour laquelle les noms des plugins doivent être récupérés

Retours

La liste des noms des plugins installés pour les étapes spécifiées

Type de retour

plug-ins

Augmentations

TranspilerError - Si un nom d'étape non valide est spécifié.

passmanager_stage_plugins

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

GitHub

Retourne un dict avec, pour chaque nom d'étape, le type de classe du plugin.

Cette fonction est utile pour obtenir plus d'informations sur un plugin :

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
 ...

Paramètres

stage (str) – Le nom de scène à obtenir

Retours

la clé est le nom du plugin et la valeur est le type de classe pour chaque plugin.

Type de retour

dict

Augmentations

TranspilerError - Si un nom d'étape non valide est spécifié.

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.