Interface do plugin Transpiler Stage
qiskit.transpiler.preset_passmanagers.plugin
Este módulo define a interface do plug-in para fornecer implementações personalizadas de estágios para os gerenciadores de passagem de predefinições e para transpile() a função. Isso permite que pacotes externos Python forneçam PassManager objetos que possam ser utilizados em cada etapa nomeada.
As interfaces de plug-in são criadas usando pontos de entrada de setuptools que permitem que pacotes externos ao Qiskit anunciem que incluem um estágio de transpilador.
Para obter detalhes sobre como escrever plug-ins para métodos de síntese do transpilador, consulte qiskit.transpiler.passes.synthesis.plugin.
Etapas do plugin
Há seis estágios nos gerenciadores de passagem de predefinição, todos os quais carregam ativamente plug-ins externos usando os pontos de entrada correspondentes. A tabela a seguir resume cada estágio. Para obter mais detalhes sobre a descrição e as expectativas de cada estágio, siga o link nos nomes dos estágios para a documentação completa.
Nome do Estágio | Ponto de entrada | Nomes reservados | Resumo |
|---|---|---|---|
| inicialização | qiskit.transpiler.init | default | Otimizações lógicas de alto nível em circuitos abstratos e redução de operações de vários qubits para operações de um e dois qubits. |
| formato | qiskit.transpiler.layout | trivial, dense, sabre, default | Escolha um mapeamento inicial dos qubits virtuais para os qubits físicos, incluindo a expansão do circuito para incluir ancillas explícitos. Às vezes, esse estágio é combinado com routing. |
| Roteamento | qiskit.transpiler.routing | default, basic, stochastic, lookahead, sabre | Insira portas no circuito para garantir que ele atenda às restrições de conectividade do Target. Os portões inseridos ainda não precisam estar na ISA de destino; por isso, muitas vezes são simplesmente gerados como swap instruções. Essa etapa às vezes é incluída em layout. |
| conversão | qiskit.transpiler.translation | default, translator, synthesis | Reescreva todas as portas fora do ISA de destino para usar somente as portas dentro do ISA. |
| capital | qiskit.transpiler.optimization | default | Otimizações de baixo nível, com reconhecimento de circuito físico. Ao contrário do init, o estágio optimization atua no nível de um circuito físico. |
| programando | qiskit.transpiler.scheduling | alap, asap, default | Inserir Delay instruções para tornar o tempo do relógio de parede do circuito totalmente explícito. |
Escrevendo Plugins
Para criar um plug-in de etapa do gerenciador de passagens, há duas etapas principais. O primeiro passo é criar uma subclasse da classe PassManagerStagePlugin abstrata de plugin, que é usada para definir como a interface PassManager do estágio será construída. Por exemplo, para criar um layout plug-in de estágio que simplesmente seja executado VF2Layout (com um número crescente de tentativas, dependendo do nível de otimização) e recorra ao uso TrivialLayout de caso VF2Layout não consiga encontrar um layout perfeito:
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_pmO segundo passo é definir a PassManagerStagePlugin subclasse como um ponto de entrada do setuptools nos metadados do pacote. Isso pode ser feito em uma entry-points tabela no pyproject.toml para o pacote do plug-in, com os pontos de entrada necessários no namespace apropriado para o estágio ao qual seu plug-in se destina. Você pode consultar a lista de etapas, pontos de entrada e expectativas de cada etapa na seção “Etapas do plugin ”. Por exemplo, dando continuidade ao exemplo de plugin acima:
[project.entry-points."qiskit.transpiler.layout"]
"vf2" = "qiskit_plugin_pkg.module.plugin:VF2LayoutPlugin"Não há um limite para o número de plug-ins que um único pacote pode incluir, desde que cada plug-in tenha um nome exclusivo. Portanto, um único pacote pode expor vários plug-ins, se necessário. Consulte Estágios do plug-in para obter uma lista de nomes reservados para cada estágio.
API do plug-in
Coluna “ 1 ” | Coluna “ 2 ” |
|---|---|
PassManagerStagePlugin() | Um PassManagerStagePlugin é um objeto de interface de plug-in para usar estágios personalizados no transpile(). |
PassManagerStagePluginManager() | Classe de gerenciador para plug-ins de estágio de gerenciador de passagem predefinida. |
list_stage_plugins
qiskit.transpiler.preset_passmanagers.plugin.list_stage_plugins(stage_name)
Obter uma lista de plug-ins instalados para um estágio.
Parâmetros
stage_name (str) – O nome do estágio para obter os nomes dos plug-ins
Retorna
A lista de nomes de plug-ins instalados para os estágios especificados
Tipo de retorno
plug-ins
Aumentos
TranspilerError - Se for especificado um nome de estágio inválido.
passmanager_stage_plugins
qiskit.transpiler.preset_passmanagers.plugin.passmanager_stage_plugins(stage)
Retorna um dict com, para cada nome de estágio, o tipo de classe do plug-in.
Essa função é útil para obter mais informações sobre um plug-in:
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) – O nome artístico a ser obtido
Retorna
a chave é o nome do plug-in e o valor é o tipo de classe para cada um.
Tipo de retorno
Aumentos
TranspilerError - Se for especificado um nome de estágio inválido.