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 |
|---|---|---|---|
| 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 | Inserte 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ó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 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_pmEl 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)
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.