Skip to main content
IBM Quantum Platform

TwoQubitControlledUDecomposer

class qiskit.synthesis.TwoQubitControlledUDecomposer(rxx_equivalent_gate, euler_basis='ZXZ')

GitHub

Bases : object

Décomposer une opération unitaire générale à deux qubits en fonction d'une porte cible à deux qubits, qui soit localement équivalente à une RXXGate.

Algorithme de synthèse

Toute UU unitaire à deux qubits peut s'écrire, grâce à sa décomposition canonique (de Weyl) (voir TwoQubitWeylDecomposition), sous la forme d'une porte de Weyl Ud(a,b,c)U_d(a, b, c) entourée de quatre portes unitaires à un seul qubit :

     ┌─────┐┌───────┐┌─────┐
q_0: ┤ c2r ├┤0      ├┤ c1r ├
     ├─────┤│  Weyl │├─────┤
q_1: ┤ c2l ├┤1      ├┤ c1l ├
     └─────┘└───────┘└─────┘

La porte de Weyl se factorise en un produit de trois rotations à deux qubits, Ud(a,b,c)=RXX(a)RYY(b)RZZ(c)U_d(a, b, c) = R_{XX}(a)\, R_{YY}(b)\, R_{ZZ}(c) :

     ┌─────────┐┌─────────┐
q_0: ┤0        ├┤0        ├─■──────
     │  Rxx(a) ││  Ryy(b) │ │ZZ(c)
q_1: ┤1        ├┤1        ├─■──────
     └─────────┘└─────────┘

Les rotations RYYR_{YY} et RZZR_{ZZ} sont ensuite mappées sur les rotations RXXR_{XX} à l'aide de changements de base à un seul qubit. Avec « RYY(b)=(SS)RXX(b)(SS)R_{YY}(b) = (S^\dagger \otimes S^\dagger)\, R_{XX}(b)\, (S \otimes S) » :

     ┌─────┐┌─────────┐┌───┐
q_0: ┤ Sdg ├┤0        ├┤ S ├
     ├─────┤│  Rxx(b) │├───┤
q_1: ┤ Sdg ├┤1        ├┤ S ├
     └─────┘└─────────┘└───┘

et RZZ(c)=(HH)RXX(c)(HH)R_{ZZ}(c) = (H \otimes H)\, R_{XX}(c)\, (H \otimes H) :

     ┌───┐┌─────────┐┌───┐
q_0: ┤ H ├┤0        ├┤ H ├
     ├───┤│  Rxx(c) │├───┤
q_1: ┤ H ├┤1        ├┤ H ├
     └───┘└─────────┘└───┘

Enfin, chaque rotation de type « RXXR_{XX} » est réalisée à l'aide de la porte fournie par l'utilisateur, qui est localement équivalente à RXXGate (la rxx_equivalent_gate), enveloppée par des portes à un qubit qui tiennent compte de cette équivalence locale et de tout ajustement de l'angle de rotation. Une fois chaque rotation développée, toutes les portes à un qubit situées entre deux portes à deux qubits consécutives sont multipliées entre elles et regroupées; ainsi, le circuit synthétisé utilise au maximum trois applications de rxx_equivalent_gate et au maximum huit portes unitaires à un qubit :

     ┌─────┐┌───────────┐┌─────┐┌───────────┐┌─────┐┌───────────┐┌─────┐
q_0: ┤ d2r ├┤0          ├┤ d1r ├┤0          ├┤ e1r ├┤0          ├┤ f1r ├
     ├─────┤│  Equiv(a) │├─────┤│  Equiv(b) │├─────┤│  Equiv(c) │├─────┤
q_1: ┤ d2l ├┤1          ├┤ d1l ├┤1          ├┤ e1l ├┤1          ├┤ f1l ├
     └─────┘└───────────┘└─────┘└───────────┘└─────┘└───────────┘└─────┘

Equiv(a)Ici, Equiv(b) et Equiv(c) sont les portées fournies par l'utilisateur rxx_equivalent_gate (la porte localement équivalente à RXXGate) permettant de réaliser les rotations RXX(a)R_{XX}(a), RXX(b)R_{XX}(b) et RXX(c)R_{XX}(c), et les cases restantes correspondent aux portes unitaires consolidées à un seul qubit.

Le nombre de portes à deux qubits effectivement émises dépend des paramètres de Weyl de la cible : les rotations dont l'angle tend vers zéro sont ignorées; ainsi, les opérateurs unitaires qui se rapprochent davantage d'une ou de deux occurrences de RXXGate utilisent respectivement une ou deux applications de rxx_equivalent_gate au lieu de trois. Une cible proche de l'identité n'utilisera aucune de ses applications.

Paramètres

Augmentations

QiskitError – Si la porte n'est pas localement équivalente à une RXXGate.

__call__

__call__(unitary, approximate=False, use_dag=False, *, atol=1e-12)

GitHub

Décomposer un système à deux qubits unitary à l'aide de la TwoQubitControlledUDecomposer.

Paramètres

  • unitary (Operator |ndarray) – 4×44 \times 4 facile à synthétiser.
  • approximatif – Non utilisé actuellement par ce décomposeur; accepté pour des raisons de compatibilité de signature avec les deux autres décomposeurs à deux qubits. Réservé pour une utilisation ultérieure.
  • use_dag – Non utilisé actuellement par ce décomposeur; accepté pour des raisons de compatibilité de signature avec les deux autres décomposeurs à deux qubits. Réservé pour une utilisation ultérieure.
  • atol – Tolérance absolue pour la vérification des angles des opérateurs unitaires à un qubit lors de la simplification du circuit renvoyé[. Valeur par défaut : 1e-12].

Retours

Circuit quantique synthétisé.

Type de retour

QuantumCircuit

Remarque : atol est transmis à OneQubitEulerDecomposer.

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