TwoQubitControlledUDecomposer
class qiskit.synthesis.TwoQubitControlledUDecomposer(rxx_equivalent_gate, euler_basis='ZXZ')
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 unitaire à deux qubits peut s'écrire, grâce à sa décomposition canonique (de Weyl) (voir TwoQubitWeylDecomposition), sous la forme d'une porte de Weyl 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, :
┌─────────┐┌─────────┐
q_0: ┤0 ├┤0 ├─■──────
│ Rxx(a) ││ Ryy(b) │ │ZZ(c)
q_1: ┤1 ├┤1 ├─■──────
└─────────┘└─────────┘Les rotations et sont ensuite mappées sur les rotations à l'aide de changements de base à un seul qubit. Avec « » :
┌─────┐┌─────────┐┌───┐
q_0: ┤ Sdg ├┤0 ├┤ S ├
├─────┤│ Rxx(b) │├───┤
q_1: ┤ Sdg ├┤1 ├┤ S ├
└─────┘└─────────┘└───┘et :
┌───┐┌─────────┐┌───┐
q_0: ┤ H ├┤0 ├┤ H ├
├───┤│ Rxx(c) │├───┤
q_1: ┤ H ├┤1 ├┤ H ├
└───┘└─────────┘└───┘Enfin, chaque rotation de type « » 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 , et , 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
- rxx_equivalent_gate (type[Gate]) – Porte localement équivalente à une porte «
RXXGate». Les options valides sont [RZZGate,RXXGate,RYYGate,RZXGate,CPhaseGate,CRXGate,CRYGate,CRZGate]. - euler_basis (str) – Chaîne de base à fournir à
OneQubitEulerDecomposerpour la synthèse 1Q. Les options valides sont ['ZXZ','ZYZ','XYX','XZX','U','U3','U321','U1X','PSX','ZSX','ZSXX','RR'].
Augmentations
QiskitError – Si la porte n'est pas localement équivalente à une RXXGate.
__call__
__call__(unitary, approximate=False, use_dag=False, *, atol=1e-12)
Décomposer un système à deux qubits unitary à l'aide de la TwoQubitControlledUDecomposer.
Paramètres
- unitary (Operator |ndarray) – 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
Remarque : atol est transmis à OneQubitEulerDecomposer.