Skip to main content
IBM Quantum Platform

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çãoqiskit.transpiler.initdefaultOtimizaçõ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.
formatoqiskit.transpiler.layouttrivial, dense, sabre, defaultEscolha 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.
Roteamentoqiskit.transpiler.routingdefault, basic, stochastic, lookahead, sabreInsira 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ãoqiskit.transpiler.translationdefault, translator, synthesisReescreva todas as portas fora do ISA de destino para usar somente as portas dentro do ISA.
capitalqiskit.transpiler.optimizationdefaultOtimizaçõ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.
programandoqiskit.transpiler.schedulingalap, asap, defaultInserir 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_pm

O 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)

GitHub

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)

GitHub

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

dict

Aumentos

TranspilerError - Se for especificado um nome de estágio inválido.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.