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)
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
StagedPassManagerfor. 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
Targetque representa um destino de compilação. Os seguintes atributos serão inferidos a partir desse argumento, caso não estejam definidos:coupling_mapebasis_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 tantotargetquantobasis_gatesforemNone,basis_gatesserá 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:
CouplingMapinstância- 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.0significa que não há aproximação (dentro da tolerância numérica) e0.0significa a aproximação máxima. Setargetestiver disponível, um valor deNoneindica 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_SEEDou 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 comunitary_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_methodargumento. 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
HLSConfigde configuração opcional que será passada diretamente paraHighLevelSynthesisa 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
SynthesizeRZRotationsopass. Especifica como sintetizar as rotações RZ no circuito.
Retorna
O gerenciador de passagens predefinido para as opções indicadas.
Tipo de retorno
Aumentos
- TranspilerError – se for especificada uma base diferente de Clifford+T.
- ValueError – caso seja passado um valor inválido para
optimization_level.