TwoQubitControlledUDecomposer
class qiskit.synthesis.TwoQubitControlledUDecomposer(rxx_equivalent_gate, euler_basis='ZXZ')
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 puede expresarse, mediante su descomposición canónica (de Weyl) (véase TwoQubitWeylDecomposition), como una puerta de Weyl 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, :
┌─────────┐┌─────────┐
q_0: ┤0 ├┤0 ├─■──────
│ Rxx(a) ││ Ryy(b) │ │ZZ(c)
q_1: ┤1 ├┤1 ├─■──────
└─────────┘└─────────┘A continuación, las rotaciones « » y « » se mapean a rotaciones « » mediante cambios de base de un solo qubit. Con « »:
┌─────┐┌─────────┐┌───┐
q_0: ┤ Sdg ├┤0 ├┤ S ├
├─────┤│ Rxx(b) │├───┤
q_1: ┤ Sdg ├┤1 ├┤ S ├
└─────┘└─────────┘└───┘y :
┌───┐┌─────────┐┌───┐
q_0: ┤ H ├┤0 ├┤ H ├
├───┤│ Rxx(c) │├───┤
q_1: ┤ H ├┤1 ├┤ H ├
└───┘└─────────┘└───┘Por último, cada rotación de tipo « » 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 , y , 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 « ». Las opciones válidas son [RZZGate,RXXGate,RYYGate,RZXGate,CPhaseGate,CRXGate,CRYGate,CRZGate]. - euler_basis (str) – Cadena base que debe proporcionarse a
OneQubitEulerDecomposerpara 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)
Descomponer un sistema de dos qubits unitary utilizando el TwoQubitControlledUDecomposer.
Parámetros
- unitary (Operator |ndarray) – ú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
Nota: «atol» se pasa a OneQubitEulerDecomposer.