Skip to main content
IBM Quantum Platform

LitinskiTransformation

class qiskit.transpiler.passes.LitinskiTransformation(*args, **kwargs)

GitHub

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 « RZR_Z » à un qubit, des rotations de type « RXR_X » et des rotations de type « RYR_Y » (y compris les rotations de type « PhasePhase », « TT » et « TT^\dagger »), des rotations de type « produit de Pauli », des mesures de type « produit de Pauli » et des mesures standard de type « ZZ ». 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 π/2\pi/2. Ce faisant, elle transforme les rotations de type RZR_Z, les rotations de type RXR_X et les rotations de type RYR_Y en rotations de type « produit de Pauli », et les mesures de type ZZ 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 π/2\pi/2, 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 que PauliEvolution portes, 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 True et fix_clifford=True, insérer une barrière entre le circuit et les Cliffords finaux. Cet argument n'a aucun effet si fix_clifford=False.
  • use_ppr – Si True, utiliser PauliProductRotationGate pour 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. Si False ou None, utilisez PauliEvolutionGate.
  • 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)

GitHub

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

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nom du laissez-passer.

Type de retour

str

run

run(dag)

GitHub

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

DAGCircuit

update_status

update_status(state, run_state)

GitHub

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

PassManagerState

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.