Skip to main content
IBM Quantum Platform

Interfaz del complemento Transpiler Stage

qiskit.transpiler.preset_passmanagers.plugin

Este módulo define la interfaz del complemento para proporcionar implementaciones personalizadas de etapas para los gestores de pasadas predefinidas y la transpile() función. Esto permite que los paquetes externos de Python proporcionen PassManager objetos que puedan utilizarse para cada etapa especificada.

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, sabreInserta puertas lógicas en el circuito para asegurarte de que cumple con las restricciones de conectividad del Target. No es necesario que las puertas insertadas estén todavía en la ISA de destino, por lo que a menudo simplemente se generan como swap instrucciones. Esta etapa a veces se incluye dentro de 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 complemento de etapa de gestión de pases hay dos pasos principales. El primer paso consiste en crear una subclase de la clase PassManagerStagePlugin abstracta del complemento, que se utiliza para definir cómo se construirá la PassManager etapa. Por ejemplo, para crear un layout complemento de etapa que simplemente se ejecute VF2Layout (con un número creciente de intentos, en función del nivel de optimización) y que TrivialLayout , si VF2Layout no consigue encontrar una disposición perfecta, recurra a:

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 indicar 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, con los puntos de entrada necesarios bajo el espacio de nombres adecuado para la etapa a la que está destinado tu complemento. Puedes consultar la lista de etapas, puntos de entrada y expectativas de cada etapa en «Etapas del complemento ». Por ejemplo, retomando el ejemplo del complemento 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

Columna « 1 »
Columna « 2 »
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.