Skip to main content
IBM Quantum Platform

qiskit.transpiler.generate_preset_clifford_t_pass_manager

qiskit.transpiler.generate_preset_clifford_t_pass_manager(optimization_level=2, target=None, basis_gates=None, coupling_map=None, initial_layout=None, approximation_degree=1.0, seed_transpiler=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, hls_config=None, dt=None, qubits_initially_zero=True, rz_synthesis_config=None)

GitHub

StagedPassManagerGerar uma predefinição Clifford+T.

Essa função oferece uma maneira prática de criar um gerenciador de passagens predefinido para a compilação Clifford+T. Recomendamos usar essa função em vez de transpile() ou generate_preset_pass_manager() com uma base Clifford+T, pois ela disponibiliza argumentos especificamente adaptados para compilações Clifford+T.

As restrições de destino para a construção do gerenciador de passagens podem ser especificadas por meio de uma Target instância ou por meio de restrições flexíveis (basis_gates, coupling_map, ou dt).

Se as portas de base não forem especificadas (nem via target nem via basis_gates), elas assumirão, por padrão, todas as portas Clifford+T do Qiskit. Observe, no entanto, que se forem especificadas portas de base, mas estas não representarem uma base Clifford+T, será gerado um erro.

Exemplos

Crie e utilize um gerenciador de passagens Clifford+T simples:

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_clifford_t_pass_manager

qc = QuantumCircuit(1)
qc.rz(2.3579, 0)

pm = generate_preset_clifford_t_pass_manager()
qct = pm.run(qc)

É possível configurar várias opções; consulte a documentação sobre os argumentos para obter mais detalhes:

rz_synthesis_config = {
    "rz_synthesis_error": 1e-4,
    "rz_cache_error": 1e-5,
}

basis_gates = ["cx", "s", "sdg", "h", "t", "tdg"]
pm = generate_preset_clifford_t_pass_manager(
    rz_synthesis_config=rz_synthesis_config,
    basis_gates=basis_gates,
    optimization_level=3,
)

Parâmetros

  • optimization_level (int) – O nível de otimização para gerar um StagedPassManager for. Por padrão, é utilizado o nível de otimização 2, caso não seja especificado. Esse valor pode ser 0, 1, 2 ou 3. Níveis mais altos geram circuitos potencialmente mais otimizados, em troca de um tempo de transpilação potencialmente mais longo.

  • target (Target | None) – O Target que representa um destino de compilação. Os seguintes atributos serão inferidos a partir desse argumento, caso não estejam definidos: coupling_map e basis_gates.

  • basis_gates (list[str] | None) – Lista de nomes de portas básicas para as quais se deve realizar o desenrolamento (por exemplo: ['cx', 's', 'sx', 't', 'tdg']). Se tanto target quanto basis_gates forem None, basis_gates será definido como o conjunto de todas as portas de Clifford padrão, juntamente com 't' e 'tdg'.

  • coupling_map (CouplingMap |list | None) –

    O grafo direcionado representava um mapa de acoplamento. São suportados vários formatos:

    1. CouplingMap instância
    2. A lista deve ser fornecida na forma de uma matriz de adjacência, em que cada entrada especifica todas as interações direcionadas entre dois qubits suportadas pelo backend, por exemplo: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
  • dt (float | None) – Tempo de amostragem alvo (resolução) em segundos. Se None (padrão) e for fornecido um destino, target.dt é utilizado.

  • initial_layout (Layout |list[int]) – Posição inicial dos qubits virtuais nos qubits físicos.

  • approximation_degree (float | None) – Botão heurístico utilizado para a aproximação do circuito, em que 1.0 significa que não há aproximação (dentro da tolerância numérica) e 0.0 significa a aproximação máxima. Se target estiver disponível, um valor de None indica que é permitida uma aproximação até a taxa de erro relatada para uma operação no destino.

  • seed_transpiler (int | None) – Define uma semente aleatória para as partes estocásticas do transpiler. Se não for especificado aqui, também pode ser definido por meio de uma variável de ambiente: QISKIT_TRANSPILER_SEED ou em um arquivo de configuração do usuário. A ordem de prioridade é: este argumento, depois a variável de ambiente e, por fim, a opção de configuração do usuário. Portanto, definir esse argumento terá prioridade sobre os outros métodos de definição de uma semente.

  • unitary_synthesis_method (str) – O nome do método de síntese unitária a ser utilizado. Por padrão 'default' , é usado. Você pode ver uma lista dos plugins instalados com unitary_synthesis_plugin_names().

  • unitary_synthesis_plugin_config (dict | None) – Um dicionário de configuração opcional que será passado diretamente para o plug-in de síntese unitária. Por padrão, essa configuração não terá efeito, pois o método padrão de síntese unitária não aceita configurações personalizadas. Isso só deve ser necessário quando um plug-in de síntese unitária for especificado com o unitary_synthesis_method argumento. Como isso varia de acordo com cada plug-in de síntese unitária, consulte a documentação do plug-in para saber como usar essa opção.

  • hls_config (HLSConfig | None) – Uma classe HLSConfig de configuração opcional que será passada diretamente para HighLevelSynthesis a etapa de transformação. Essa classe de configuração permite especificar, para diversos objetos de alto nível, as listas de algoritmos de síntese e seus parâmetros.

  • qubits_initially_zero (bool) – Indica se o circuito de entrada foi inicializado com zero.

  • rz_synthesis_config (dict | None) – Uma classe de configuração opcional a ser usada para SynthesizeRZRotations o pass. Especifica como sintetizar as rotações RZ no circuito.

Retorna

O gerenciador de passagens predefinido para as opções indicadas.

Tipo de retorno

StagedPassManager

Aumentos

  • TranspilerError – se for especificada uma base diferente de Clifford+T.
  • ValueError – caso seja passado um valor inválido para optimization_level .
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.