Skip to main content
IBM Quantum Platform

TwoQubitControlledUDecomposer

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

GitHub

Bases: object

Descomponer un operador unitario general de dos qubits en términos de una puerta de dos qubits objetivo, que sea localmente equivalente a un RXXGate.

Algoritmo de síntesis

Cualquier operación unitaria de dos qubits UU puede expresarse, mediante su descomposición canónica (de Weyl) (véase TwoQubitWeylDecomposition), como una puerta de Weyl Ud(a,b,c)U_d(a, b, c) rodeada por cuatro puertas unitarias de un solo qubit:

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

La puerta de Weyl se factoriza en un producto de tres rotaciones de dos 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        ├─■──────
     └─────────┘└─────────┘

A continuación, las rotaciones « RYYR_{YY} » y « RZZR_{ZZ} » se mapean a rotaciones « RXXR_{XX} » mediante cambios de base de un solo qubit. Con « 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 ├
     └─────┘└─────────┘└───┘

y 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 ├
     └───┘└─────────┘└───┘

Por último, cada rotación de tipo « RXXR_{XX} » se lleva a cabo mediante la puerta proporcionada por el usuario, que es localmente equivalente a RXXGate (la rxx_equivalent_gate), envuelta por las puertas de un solo qubit que tienen en cuenta la equivalencia local y cualquier escalado del ángulo de rotación. Una vez expandida cada rotación, todas las puertas de un solo qubit que se encuentran entre dos puertas consecutivas de dos qubits se multiplican entre sí y se consolidan, de modo que el circuito sintetizado utiliza como máximo tres aplicaciones de rxx_equivalent_gate y como máximo ocho puertas unitarias de un solo 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)Aquí, Equiv(b) y Equiv(c) son las proporcionadas por el usuario rxx_equivalent_gate (la puerta localmente equivalente a RXXGate) que realizan las rotaciones RXX(a)R_{XX}(a), RXX(b)R_{XX}(b) y RXX(c)R_{XX}(c), y las casillas restantes son las puertas unitarias de un solo qubit consolidadas.

El número de puertas de dos qubits que se emiten realmente depende de los parámetros de Weyl del objetivo: las rotaciones con un ángulo nulo se omiten, por lo que las operaciones unitarias que se acercan más a una o dos instancias de RXXGate utilizan una o dos aplicaciones de rxx_equivalent_gate , respectivamente, en lugar de tres. Un objetivo cercano a la identidad no utilizará ninguna de sus aplicaciones.

Parámetros

  • rxx_equivalent_gate (type[Gate]) – Puerta que es localmente equivalente a una RXXGatepuerta de tipo « UUd(α,0,0)Ctrl-UU \sim U_d(\alpha, 0, 0) \sim \text{Ctrl-U} ». Las opciones válidas son [RZZGate, RXXGate, RYYGate, RZXGate, CPhaseGate, CRXGate, CRYGate, CRZGate].
  • euler_basis (str) – Cadena base que debe proporcionarse a OneQubitEulerDecomposer para la síntesis de 1Q. Las opciones válidas son ['ZXZ', 'ZYZ', 'XYX', 'XZX', 'U', 'U3', 'U321', 'U1X', 'PSX', 'ZSX', 'ZSXX', 'RR'].

Eleva

QiskitError – Si la puerta no es localmente equivalente a una RXXGate.

__call__

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

GitHub

Descomponer un sistema de dos qubits unitary utilizando el TwoQubitControlledUDecomposer.

Parámetros

  • unitary (Operator |ndarray) – 4×44 \times 4 único para sintetizar.
  • aproximado – Actualmente no se utiliza en este descomponedor; se acepta por motivos de compatibilidad de firma con los otros descomponedores de dos qubits. Reservado para uso futuro.
  • use_dag – Actualmente no lo utiliza este descomponedor; se acepta por motivos de compatibilidad de firmas con los otros dos descomponedores de dos qubits. Reservado para uso futuro.
  • atol – Tolerancia absoluta para comprobar los ángulos de las operaciones unitarias de un solo qubit al simplificar el circuito devuelto[. Valor por defecto: 1e-12].

Devuelve

Circuito cuántico sintetizado.

Tipo de retorno

QuantumCircuit

Nota: «atol» se pasa a OneQubitEulerDecomposer.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.