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 |
|---|---|---|---|
| inicial | qiskit.transpiler.init | default | Optimizaciones lógicas de alto nivel en circuitos abstractos y reducción de operaciones multiqubit a operaciones de uno y dos qubits. |
| disposición | qiskit.transpiler.layout | trivial, dense, sabre, default | Elija 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. |
| Direccionamiento | qiskit.transpiler.routing | default, basic, stochastic, lookahead, sabre | Inserta 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ón | qiskit.transpiler.translation | default, translator, synthesis | Reescribe todas las puertas fuera de la ISA de destino para utilizar sólo puertas dentro de la ISA. |
| optimización | qiskit.transpiler.optimization | default | Optimizaciones 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. |
| planificar | qiskit.transpiler.scheduling | alap, asap, default | Inserte 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_pmEl 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)
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)
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
Eleva
TranspilerError - Si se especifica un nombre de escenario no válido.