Skip to main content
IBM Quantum Platform

Interfaccia plugin Transpiler Stage

qiskit.transpiler.preset_passmanagers.plugin

Questo modulo definisce l'interfaccia del plugin per fornire implementazioni personalizzate delle fasi per i gestori dei passaggi predefiniti e per transpile() la funzione. Ciò consente ai pacchetti esterni di Python di fornire PassManager oggetti che possono essere utilizzati per ciascuna fase specificata.

Le interfacce dei plugin sono costruite utilizzando i punti di ingresso di setuptools che consentono ai pacchetti esterni a Qiskit di pubblicizzare l'inclusione di uno o più stadi del transpiler.

Per i dettagli su come scrivere invece i plugin per i metodi di sintesi del transpiler, vedere qiskit.transpiler.passes.synthesis.plugin.


Fasi del plugin

Ci sono sei stadi nei gestori dei passaggi di preselezione, che caricano attivamente i plugin esterni utilizzando i punti di ingresso corrispondenti. La tabella seguente riassume ogni fase. Per maggiori dettagli sulla descrizione e sulle aspettative di ogni fase, seguite il link al nome della fase per accedere alla documentazione completa.

Nome fase
Punto di ingresso
Nomi riservati
Riepilogo
inizializzareqiskit.transpiler.initdefaultOttimizzazioni logiche di alto livello su circuiti astratti e riduzione delle operazioni multi-qubit a operazioni a uno e due-qubit.
layoutqiskit.transpiler.layouttrivial, dense, sabre, defaultScegliere una mappatura iniziale di qubit virtuali a qubit fisici, compresa l'espansione del circuito per includere ancille esplicite. Questa fase è talvolta combinata con routing.
instradamentoqiskit.transpiler.routingdefault, basic, stochastic, lookahead, sabreInserire delle porte nel circuito per garantire che rispetti i vincoli di connettività del Target. Non è necessario che i gate inseriti facciano già parte dell’ISA di destinazione, quindi spesso vengono semplicemente generati come swap istruzioni. Questa fase viene talvolta inclusa in layout.
traduzioneqiskit.transpiler.translationdefault, translator, synthesisRiscrivere tutti i gate al di fuori dell'ISA di destinazione per utilizzare solo i gate all'interno dell'ISA.
di reteqiskit.transpiler.optimizationdefaultOttimizzazioni di basso livello, consapevoli del circuito fisico. A differenza di init, lo stadio optimization agisce a livello di circuito fisico.
pianificazioneqiskit.transpiler.schedulingalap, asap, defaultInserire Delay per rendere completamente esplicita la temporizzazione wall-clock del circuito.

Scrittura dei plugin

Per scrivere un plugin per la fase di gestione dei pass sono necessari due passaggi principali. Il primo passo consiste nel creare una sottoclasse della classe PassManagerStagePlugin astratta del plugin, che viene utilizzata per definire come verrà costruito il plugin PassManager per lo stage. Ad esempio, per creare un layout plugin di fase che si limiti a eseguire VF2Layout (con un numero crescente di tentativi, a seconda del livello di ottimizzazione) e che ricorra all'uso TrivialLayout di qualora VF2Layout non riesca a trovare una disposizione perfetta:

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

Il secondo passo consiste nell'indicare la PassManagerStagePlugin sottoclasse come punto di accesso di setuptools nei metadati del pacchetto. Questo può essere fatto in una entry-points tabella in pyproject.toml per il pacchetto del plugin, con i punti di ingresso necessari nel namespace appropriato per lo stadio a cui è destinato il plugin. È possibile visualizzare l'elenco delle fasi, dei punti di ingresso e delle aspettative relative a ciascuna fase nella sezione " Fasi del plugin ". Ad esempio, riprendendo l'esempio del plugin riportato sopra:

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

Non c'è limite al numero di plugin che un singolo pacchetto può includere, purché ogni plugin abbia un nome unico. Quindi un singolo pacchetto può esporre più plugin, se necessario. Per un elenco dei nomi riservati per ogni fase, fare riferimento a Fasi del plugin.


API del plugin

PassManagerStagePlugin()Un PassManagerStagePlugin è un oggetto di interfaccia del plugin per l'utilizzo di stadi personalizzati in transpile().
PassManagerStagePluginManager()Classe di gestione per i plugin dello stadio di gestione dei passaggi preimpostati.

list_stage_plugins

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

GitHub

Ottenere un elenco dei plugin installati per uno stage.

Parametri

stage_name (str) – Il nome dello stage per cui ottenere i nomi dei plugin

Risultati

L'elenco dei nomi dei plugin installati per le fasi specificate

Tipo di restituzione

plugin

Aumenti

TranspilerError - Se viene specificato un nome di stage non valido.

passmanager_stage_plugins

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

GitHub

Restituisce un dict con, per ogni nome di stadio, il tipo di classe del plugin.

Questa funzione è utile per ottenere ulteriori informazioni su 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
 ...

Parametri

stage (str) – Il nome d'arte da ottenere

Risultati

la chiave è il nome del plugin e il valore è il tipo di classe per ciascuno.

Tipo di restituzione

dict

Aumenti

TranspilerError - Se viene specificato un nome di stage non valido.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.