TwoQubitControlledUDecomposer
class qiskit.synthesis.TwoQubitControlledUDecomposer(rxx_equivalent_gate, euler_basis='ZXZ')
Basi: object
Scomporre un'operazione unitaria generale a due qubit in termini di un gate a due qubit di destinazione, che sia localmente equivalente a un RXXGate.
Algoritmo di sintesi
Qualsiasi operatore unitario a due qubit può essere scritto, tramite la sua decomposizione canonica (di Weyl) (vedi TwoQubitWeylDecomposition), come un gate di Weyl circondato da quattro gate unitari a un singolo qubit:
┌─────┐┌───────┐┌─────┐
q_0: ┤ c2r ├┤0 ├┤ c1r ├
├─────┤│ Weyl │├─────┤
q_1: ┤ c2l ├┤1 ├┤ c1l ├
└─────┘└───────┘└─────┘Il gate di Weyl si scompone in un prodotto di tre rotazioni a due qubit, :
┌─────────┐┌─────────┐
q_0: ┤0 ├┤0 ├─■──────
│ Rxx(a) ││ Ryy(b) │ │ZZ(c)
q_1: ┤1 ├┤1 ├─■──────
└─────────┘└─────────┘Le rotazioni e vengono quindi mappate sulle rotazioni utilizzando cambi di base a singolo qubit. Con " ":
┌─────┐┌─────────┐┌───┐
q_0: ┤ Sdg ├┤0 ├┤ S ├
├─────┤│ Rxx(b) │├───┤
q_1: ┤ Sdg ├┤1 ├┤ S ├
└─────┘└─────────┘└───┘e :
┌───┐┌─────────┐┌───┐
q_0: ┤ H ├┤0 ├┤ H ├
├───┤│ Rxx(c) │├───┤
q_1: ┤ H ├┤1 ├┤ H ├
└───┘└─────────┘└───┘Infine, ogni rotazione di tipo “ ” viene realizzata utilizzando il gate fornito dall’utente, che è localmente equivalente a RXXGate (il rxx_equivalent_gate), avvolto dai gate a singolo qubit che tengono conto dell’equivalenza locale e di qualsiasi scalatura dell’angolo di rotazione. Una volta espansa ogni rotazione, tutte le porte a un singolo qubit che si trovano tra due porte consecutive a due qubit vengono moltiplicate tra loro e raggruppate, in modo che il circuito sintetizzato utilizzi al massimo tre applicazioni di rxx_equivalent_gate e al massimo otto porte unitarie a un singolo 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)Qui, Equiv(b) e Equiv(c) sono le operazioni fornite dall’utente rxx_equivalent_gate (la porta localmente equivalente a RXXGate) che realizzano le rotazioni , e , mentre le caselle rimanenti rappresentano le porte unitarie consolidate a singolo qubit.
Il numero di porte a due qubit effettivamente emesse dipende dai parametri di Weyl del bersaglio: le rotazioni con angolo nullo vengono tralasciate, quindi le operazioni unitarie più vicine a una o due istanze di RXXGate utilizzano rispettivamente una o due applicazioni di rxx_equivalent_gate anziché tre. Un bersaglio vicino all’identità non ne utilizzerà alcuna applicazione.
Parametri
- rxx_equivalent_gate (type[Gate]) – Porta che è localmente equivalente a una porta di
RXXGatetipo : . Le opzioni valide sono [RZZGate,RXXGate,RYYGate,RZXGate,CPhaseGate,CRXGate,CRYGate,CRZGate]. - euler_basis (str) – Stringa base da fornire a
OneQubitEulerDecomposerper la sintesi di 1Q. Le opzioni valide sono ['ZXZ','ZYZ','XYX','XZX','U','U3','U321','U1X','PSX','ZSX','ZSXX','RR'].
Aumenti
QiskitError – Se il gate non è localmente equivalente a un RXXGate.
__call__
__call__(unitary, approximate=False, use_dag=False, *, atol=1e-12)
Scomporre un sistema a due qubit unitary utilizzando il TwoQubitControlledUDecomposer.
Parametri
- unitary (Operator |ndarray) – unitario da sintetizzare.
- approssimativo – Attualmente non utilizzato da questo decompositore; accettato per garantire la compatibilità delle firme con gli altri decompositori a due qubit. Riservato a usi successivi.
- use_dag – Attualmente non utilizzato da questo decompositore; accettato per garantire la compatibilità delle firme con gli altri decompositori a due qubit. Riservato a usi successivi.
- atol – Tolleranza assoluta per la verifica degli angoli delle operazioni unitarie su un singolo qubit durante la semplificazione del circuito restituito[. Impostazione predefinita: 1e-12].
Risultati
Circuito quantistico sintetizzato.
Tipo di restituzione
Nota: atol viene passato a OneQubitEulerDecomposer.