Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Quali funzionalità di OpenQASM supporta Braket?
La sezione seguente elenca i tipi di dati, le istruzioni e le istruzioni pragma di OpenQASM 3.0 supportate da Braket.
In questa sezione:
Tipi di dati OpenQASM supportati
I seguenti tipi di dati OpenQASM sono supportati da Amazon Braket.
-
I numeri interi non negativi vengono utilizzati per gli indici di qubit (virtuali e fisici):
-
cnot q[0], q[1];
-
h $0;
-
-
È possibile utilizzare numeri o costanti a virgola mobile per gli angoli di rotazione del cancello:
-
rx(-0.314) $0;
-
rx(pi/4) $0;
-
Nota
pi è una costante incorporata in OpenQASM e non può essere utilizzata come nome di parametro.
-
Le matrici di numeri complessi (con la
im
notazione OpenQASM per la parte immaginaria) sono consentite nei pragmi di tipo di risultato per la definizione di osservabili hermitiane generali e nei pragmi unitari:-
#pragma braket unitary [[0, -1im], [1im, 0]] q[0]
-
#pragma braket result expectation hermitian([[0, -1im], [1im, 0]]) q[0]
-
Istruzioni OpenQASM supportate
Le seguenti istruzioni OpenQASM sono supportate da Amazon Braket.
-
Header: OPENQASM 3;
-
Dichiarazioni di bit classiche:
-
bit b1;
(equivalentemente,)creg b1;
-
bit[10] b2;
(equivalentemente,)creg b2[10];
-
-
Dichiarazioni Qubit:
-
qubit b1;
(equivalentemente,)qreg b1;
-
qubit[10] b2;
(equivalentemente,)qreg b2[10];
-
-
Indicizzazione all'interno di array:
q[0]
-
Ingresso:
input float alpha;
-
specificazione fisica qubits:
$0
-
Porte e operazioni supportate su un dispositivo:
-
h $0;
-
iswap q[0], q[1];
-
Nota
Le porte supportate da un dispositivo sono disponibili nelle proprietà del dispositivo per le azioni OpenQASM; non sono necessarie definizioni di gate per utilizzare queste porte.
-
Dichiarazioni letterali. Al momento, non supportiamo la notazione della durata delle caselle. Porte native e fisiche qubits sono obbligatori nelle caselle letterali.
#pragma braket verbatim box{ rx(0.314) $0; }
-
Misurazione e assegnazione delle misurazioni su qubits o un tutto qubit registrare.
-
measure $0;
-
measure q;
-
measure q[0];
-
b = measure q;
-
measure q → b;
-
Nota
pi è una costante incorporata in OpenQASM e non può essere utilizzata come nome di parametro.
Pragmi OpenQASM tra parentesi
Le seguenti istruzioni relative al pragma OpenQASM sono supportate da Amazon Braket.
-
Pragmi relativi al rumore
-
#pragma braket noise bit_flip(0.2) q[0]
-
#pragma braket noise phase_flip(0.1) q[0]
-
#pragma braket noise pauli_channel
-
-
Pragmi letterali
-
#pragma braket verbatim
-
-
Tipo di risultato: pragmi
-
Tipi di risultati invarianti di base:
-
Vettore di stato:
#pragma braket result state_vector
-
Matrice di densità:
#pragma braket result density_matrix
-
-
Pragmi di calcolo del gradiente:
-
Gradiente aggiunto:
#pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all
-
-
Tipi di risultati di base:
-
Ampiezza:
#pragma braket result amplitude "01"
-
Probabilità:
#pragma braket result probability q[0], q[1]
-
-
Tipi di risultati ruotati di base
-
Aspettativa:
#pragma braket result expectation x(q[0]) @ y([q1])
-
Varianza:
#pragma braket result variance hermitian([[0, -1im], [1im, 0]]) $0
-
Esempio:
#pragma braket result sample h($1)
-
-
Nota
OpenQASM 3.0 è retrocompatibile con OpenQASM 2.0, quindi i programmi scritti utilizzando 2.0 possono essere eseguiti su Braket. Tuttavia, le funzionalità di OpenQASM 3.0 supportate da Braket presentano alcune differenze di sintassi minori, come vs e vs. qreg
creg
qubit
bit
Esistono anche differenze nella sintassi di misurazione, che devono essere supportate con la sintassi corretta.
Supporto di funzionalità avanzate per OpenQASM su Local Simulator
LocalSimulator
Supporta funzionalità avanzate di OpenQASM che non sono offerte come parte delle QPU o dei simulatori on-demand di Braket. Il seguente elenco di funzionalità è supportato solo in: LocalSimulator
-
Modificatori di gate
-
Porte integrate in OpenQASM
-
Variabili classiche
-
Operazioni classiche
-
Cancelli personalizzati
-
Controllo classico
-
File QASM
-
Sottoroutine
Per esempi di ogni funzionalità avanzata, consultate questo taccuino di esempio
Operazioni e grammatica supportate con OpenPulse
Tipi di OpenPulse dati supportati
Blocchi Cal:
cal { ... }
Blocchi Defcal:
// 1 qubit defcal x $0 { ... } // 1 qubit w. input parameters as constants defcal my_rx(pi) $0 { ... } // 1 qubit w. input parameters as free parameters defcal my_rz(angle theta) $0 { ... } // 2 qubit (above gate args are also valid) defcal cz $1, $0 { ... }
Cornici:
frame my_frame = newframe(port_0, 4.5e9, 0.0);
Forme d'onda:
// prebuilt waveform my_waveform_1 = constant(1e-6, 1.0); //arbitrary waveform my_waveform_2 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1};
Esempio di calibrazione Custom Gate:
cal { waveform wf1 = constant(1e-6, 0.25); } defcal my_x $0 { play(wf1, q0_rf_frame); } defcal my_cz $1, $0 { barrier q0_q1_cz_frame, q0_rf_frame; play(q0_q1_cz_frame, wf1); delay[300ns] q0_rf_frame shift_phase(q0_rf_frame, 4.366186381749424); delay[300ns] q0_rf_frame; shift_phase(q0_rf_frame.phase, 5.916747563126659); barrier q0_q1_cz_frame, q0_rf_frame; shift_phase(q0_q1_cz_frame, 2.183093190874712); } bit[2] ro; my_x $0; my_cz $1,$0; c[0] = measure $0;
Esempio di impulso arbitrario:
bit[2] ro; cal { waveform wf1 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1}; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); delay[300ns] q0_drive; shift_phase(q0_drive, 4.366186381749424); delay[300dt] q0_drive; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); ro[0] = capture_v0(r0_measure); ro[1] = capture_v0(r1_measure); }