LitinskiTransformation
class qiskit.transpiler.passes.LitinskiTransformation(*args, **kwargs)
Bases : TransformationPass
Applique la transformée de Litinski à un circuit.
La transformation s'applique à un circuit comprenant des portes de Clifford, des rotations de type « » à un qubit, des rotations de type « » et des rotations de type « » (y compris les rotations de type « », « » et « »), des rotations de type « produit de Pauli », des mesures de type « produit de Pauli » et des mesures standard de type « ». Cette transformation déplace les portes de Clifford à la fin du circuit, notamment les portes de rotation à un qubit, les rotations de type « produit de Pauli » et les mesures de type « produit de Pauli », dont l'angle est un multiple de . Ce faisant, elle transforme les rotations de type , les rotations de type et les rotations de type en rotations de type « produit de Pauli », et les mesures de type en mesures de type « produit de Pauli ».
La passe prend en charge toutes les portes de Clifford de la liste renvoyée par get_clifford_gate_names():
["id", "x", "y", "z", "h", "s", "sdg", "sx", "sxdg", "cx", "cz", "cy", "swap","iswap", "ecr", "dcx"]
De plus, les portes de rotation ci-dessus dont les angles sont des multiples entiers de , dans les limites de la tolérance indiquée, sont également considérées comme des portes de Clifford.
Exemple :
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)Références :
[1] Litinski. Un jeu de codes de surface. Quantum 3, 128 (2019)
Paramètres
- fix_clifford – Si
False(valeur non par défaut), le circuit renvoyé ne contient quePauliEvolutionportes, les portes de Clifford finales étant omises. Il convient de noter que, dans ce cas, les opérateurs des circuits d'origine et synthétisés ne seront généralement pas équivalents. - insert_barrier – Si
Trueetfix_clifford=True, insérer une barrière entre le circuit et les Cliffords finaux. Cet argument n'a aucun effet sifix_clifford=False. - use_ppr – Si
True, utiliserPauliProductRotationGatepour représenter les portes de rotation de Pauli. Cette approche est recommandée pour améliorer les performances en utilisant une pile entièrement basée sur Rust. SiFalseouNone, utilisezPauliEvolutionGate. - degré_d'approximation – Utilisé dans les calculs de tolérance, pour vérifier dans quelle mesure un PPR ou une porte de rotation se rapproche d'un Clifford. Cela donne le seuil de fidélité moyenne de la porte.
Attributs
is_analysis_pass
Vérifier si la passe est une passe d'analyse.
Si le passe est un AnalysisPass,, cela signifie qu'il peut analyser le DAG et écrire les résultats de cette analyse dans l'ensemble de propriétés. Les modifications sur le DAG ne sont pas autorisées par ce type de passe.
is_transformation_pass
Vérifier si le laissez-passer est un laissez-passer de transformation.
Si la passe est une TransformationPass,, cela signifie qu'elle peut manipuler le DAG, mais qu'elle ne peut pas modifier l'ensemble des propriétés (mais qu'elle peut les lire).
Méthodes
execute
execute(passmanager_ir, state, callback=None)
Exécuter la tâche d'optimisation pour l'entrée Qiskit IR.
Paramètres
- passmanager_ir (DAGCircuit) – IR Qiskit à optimiser.
- state (DAGCircuit) – État lié à l'exécution du flux de travail par le gestionnaire de passes lui-même.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Une fonction de rappel qui est appelée à chaque exécution d'une tâche d'optimisation.
Retours
Qiskit IR optimisé et état du flux de travail.
Type de retour
name
run
run(dag)
Exécutez le script « LitinskiTransformation » sur dag.
Paramètres
dag (DAGCircuit) – Le DAG d'entrée.
Retours
Le DAG de sortie.
Augmentations
TranspilerError – Si le circuit contient des portes non prises en charge par la carte.
Type de retour
update_status
update_status(state, run_state)
Mettre à jour le statut du flux de travail.
Paramètres
- state (PassManagerState) – Transmettre l'état du gestionnaire à mettre à jour.
- run_state (RunState) – Statut d'achèvement de la tâche en cours.
Retours
Mise à jour de l'état du gestionnaire de passe.
Type de retour