Skip to main content
IBM Quantum Platform

Interfaz del complemento Transpiler Stage

qiskit.transpiler.preset_passmanagers.plugin

Este módulo define la interfaz de plugin para proporcionar implementaciones de escenario personalizadas para los gestores de pases predefinidos y la función transpile() función Esto permite a los paquetes externos Python proporcionar PassManager objetos que se pueden utilizar para cada etapa nombrada.

Las interfaces de plugin se construyen utilizando puntos de entrada setuptools que permiten a los paquetes externos a Qiskit anunciar que incluyen una etapa(s) de transpilador.

Para obtener más información sobre cómo escribir plugins para los métodos de síntesis del transpilador, consulte qiskit.transpiler.passes.synthesis.plugin.


Etapas del complemento

Hay seis etapas en los gestores de pases predefinidos, todas las cuales cargan activamente plugins externos utilizando los puntos de entrada correspondientes. El siguiente cuadro resume cada etapa. Para más detalles sobre la descripción y las expectativas de cada etapa, siga el enlace que aparece en el nombre de las etapas para acceder a la documentación completa.

Nombre de etapa
Punto de entrada
nombres reservados
Resumen
inicialqiskit.transpiler.initdefaultOptimizaciones lógicas de alto nivel en circuitos abstractos y reducción de operaciones multiqubit a operaciones de uno y dos qubits.
disposiciónqiskit.transpiler.layouttrivial, dense, sabre, defaultElija un mapeo inicial de qubits virtuales a qubits físicos, incluyendo la expansión del circuito para incluir ancillas explícitas. Esta etapa se combina a veces con routing.
Direccionamientoqiskit.transpiler.routingdefault, basic, stochastic, lookahead, sabreInserte puertas en el circuito para asegurarse de que se ajusta a las restricciones de conectividad del Target. Las puertas insertadas no tienen por qué estar aún en el ISA de destino, por lo que a menudo se emiten como instrucciones de swap . A veces, esta etapa se engloba en layout.
Traducciónqiskit.transpiler.translationdefault, translator, synthesisReescribe todas las puertas fuera de la ISA de destino para utilizar sólo puertas dentro de la ISA.
optimizaciónqiskit.transpiler.optimizationdefaultOptimizaciones de bajo nivel que tienen en cuenta los circuitos físicos. A diferencia de init, la etapa optimization actúa a nivel de un circuito físico.
planificarqiskit.transpiler.schedulingalap, asap, defaultInserte Delay instrucciones para que la temporización del reloj de pared del circuito sea totalmente explícita.

Escribir complementos

Para escribir un plugin pass manager stage hay 2 pasos principales. El primer paso es crear una subclase de la clase abstracta plugin PassManagerStagePlugin que se utiliza para definir cómo se construirá el PassManager del escenario. Por ejemplo, para crear un plugin de etapas layout que sólo ejecute VF2Layout (con un número creciente de pruebas, dependiendo del nivel de optimización) y vuelve a usar TrivialLayout si VF2Layout es incapaz de encontrar un diseño perfecto:

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

El segundo paso consiste en definir la PassManagerStagePlugin subclase como punto de entrada de setuptools en los metadatos del paquete. Esto se puede hacer en una entry-points tabla de pyproject.toml para el paquete del complemento, incluyendo los puntos de entrada necesarios bajo el espacio de nombres adecuado para la etapa a la que está destinado el complemento. Puedes consultar la lista de etapas, puntos de entrada y expectativas de cada etapa en «Etapas del complemento ». Por ejemplo, retomando el plugin del ejemplo anterior:

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

No hay límite en el número de plugins que puede incluir un mismo paquete, siempre que cada plugin tenga un nombre único. Así, un solo paquete puede exponer varios plugins si es necesario. Consulte Etapas del plugin para ver una lista de nombres reservados para cada etapa.


API del complemento

PassManagerStagePlugin()Un PassManagerStagePlugin es un objeto de interfaz de plugin para utilizar etapas personalizadas en transpile().
PassManagerStagePluginManager()Clase gestora para plugins de escenario gestores de pases predefinidos.

list_stage_plugins

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

GitHub

Obtener una lista de los plugins instalados para una etapa.

Parámetros

stage_name (str) – El nombre del escenario para obtener los nombres de los plugins

Devuelve

La lista de nombres de plugins instalados para las etapas especificadas

Tipo de retorno

conectores

Eleva

TranspilerError - Si se especifica un nombre de escenario no válido.

passmanager_stage_plugins

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

GitHub

Devuelve un dict con, para cada nombre de etapa, el tipo de clase del plugin.

Esta función es útil para obtener más información sobre 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
 ...

Parámetros

stage (str) – El nombre artístico a conseguir

Devuelve

la clave es el nombre del plugin y el valor es el tipo de clase de cada uno.

Tipo de retorno

dict

Eleva

TranspilerError - Si se especifica un nombre de escenario no válido.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.