Interface do plugin Transpiler Stage
qiskit.transpiler.preset_passmanagers.plugin
Este módulo define a interface do plug-in para fornecer implementações de estágio personalizadas para os gerenciadores de passagem predefinidos e a função transpile() função. Isso permite que os pacotes Python externos forneçam PassManager objetos que podem ser usados para cada estágio nomeado.
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 corresponda às restrições de conectividade do Target. As portas inseridas ainda não precisam estar no ISA de destino, portanto, muitas vezes, são apenas exibidas como instruções swap . Às vezes, esse estágio é incluído 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 escrever um plug-in de estágio do gerenciador de passes, há duas etapas principais. A primeira etapa é criar uma subclasse da classe abstrata de plug-in PassManagerStagePlugin que é usada para definir como o PassManager para o estágio será construído. Por exemplo, para criar um plugin de estágio layout que apenas executa VF2Layout (com uma quantidade crescente de tentativas, dependendo do nível de otimização) e volta a usar TrivialLayout se o VF2Layout não conseguir 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 plugin, com os pontos de entrada necessários no namespace apropriado para o estágio ao qual o plugin se destina. Você pode ver a lista de etapas, pontos de entrada e expectativas de cada etapa em “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
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.