LitinskiTransformation
class qiskit.transpiler.passes.LitinskiTransformation(*args, **kwargs)
Bases: TransformationPass
Aplica a transformada de Litinski a um circuito.
A transformação se aplica a um circuito que contenha portas de Clifford, rotação de um único qubit , rotação e rotação (incluindo , e ), rotações de produto de Pauli, medições de produto de Pauli e medições padrão . A transformação desloca as portas de Clifford para o final do circuito, incluindo portas de rotação de um único qubit, rotações do produto de Pauli e medições do produto de Pauli, cujo ângulo é um múltiplo de . Nesse processo, ela transforma as rotações de , as portas de rotação de e as portas de rotação de em rotações do produto de Pauli, e as medições de em medições do produto de Pauli.
A passagem suporta todas as portas Clifford na lista retornada por get_clifford_gate_names():
["id", "x", "y", "z", "h", "s", "sdg", "sx", "sxdg", "cx", "cz", "cy", "swap","iswap", "ecr", "dcx"]
Além disso, as portas de rotação acima, cujos ângulos são múltiplos inteiros de dentro da tolerância especificada, também são consideradas Clifford.
Exemplo:
from qiskit import generate_preset_pass_manager
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import PauliProductMeasurement, PauliProductRotationGate
from qiskit.quantum_info import Pauli
from qiskit.transpiler.passes import LitinskiTransformation
litinski = LitinskiTransformation(fix_clifford=False, use_ppr=True)
rz_basis = ["rz", "h", "x", "cx"]
pm = generate_preset_pass_manager(basis_gates=rz_basis)
pm.optimization.append(litinski)
qc = QuantumCircuit(3, 1)
qc.h(0)
qc.rz(1.23, 0)
qc.cx(0, 1)
qc.t(1)
qc.append(PauliProductRotationGate(Pauli("XY"), 0.456), [1, 2])
qc.cx(1, 2)
qc.append(PauliProductMeasurement(Pauli("ZX")), [0, 1], [0])
qc.measure(2, 0)
pbc = pm.run(qc)Referências
[1] Litinski. Um jogo de códigos de superfície. Quantum 3, 128 (2019)
Parâmetros
- fix_clifford – Se
False(valor diferente do padrão), o circuito retornado contém apenasPauliEvolutionportas, com as portas Clifford finais omitidas. Observe que, nesse caso, os operadores dos circuitos original e sintetizado geralmente não serão equivalentes. - insert_barrier – Se
Trueefix_clifford=True, insira uma barreira entre o circuito e os cliffords finais. Este argumento não tem efeito sefix_clifford=False. - use_ppr – Se for o caso
True, usePauliProductRotationGatepara representar as portas de rotação de Pauli. Isso é recomendado para melhorar o desempenho utilizando uma abordagem totalmente baseada em Rust. SeFalseouNone, usePauliEvolutionGate. - grau_de_aproximação – Utilizado nos cálculos de tolerância para verificar o quanto um PPR ou um portão de rotação está próximo de um Clifford. Isso fornece o limite para a fidelidade média do portão.
Atributos
is_analysis_pass
Verificar se o passe é um passe de análise.
Se a passagem for um AnalysisPass,, isso significa que a passagem pode analisar o DAG e escrever os resultados dessa análise no conjunto de propriedades. As modificações no DAG não são permitidas por esse tipo de passe.
is_transformation_pass
Verifique se o passe é um passe de transformação.
Se a passagem for um TransformationPass,, isso significa que a passagem pode manipular o DAG, mas não pode modificar o conjunto de propriedades (mas pode ser lido).
Métodos
execute
execute(passmanager_ir, state, callback=None)
Executar a tarefa de otimização para a entrada Qiskit IR.
Parâmetros
- passmanager_ir (DAGCircuit) – Qiskit IR para otimização.
- state (DAGCircuit) – Estado associado à execução do fluxo de trabalho pelo próprio gerenciador de passagens.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Uma função de retorno de chamada que é chamada a cada execução da tarefa de otimização.
Retorna
Qiskit IR otimizado e estado do fluxo de trabalho.
Tipo de retorno
name
run
run(dag)
Execute a verificação do LitinskiTransformation no dag.
Parâmetros
dag (DAGCircuit) – O DAG de entrada.
Retorna
O DAG de saída.
Aumentos
TranspilerError – Se o circuito contiver portas que não sejam compatíveis com o passe.
Tipo de retorno
update_status
update_status(state, run_state)
Atualizar o status do fluxo de trabalho.
Parâmetros
- state (PassManagerState) – Passar o estado do gerenciador para atualizar.
- run_state (RunState) – Status de conclusão da tarefa atual.
Retorna
Estado do gerenciador de passes atualizado.
Tipo de retorno