Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Welche OpenQASM-Funktionen unterstützt Braket?
Der folgende Abschnitt listet die OpenQASM 3.0-Datentypen, Anweisungen und Pragma-Anweisungen auf, die von Braket unterstützt werden.
In diesem Abschnitt:
Unterstützte OpenQASM-Datentypen
Die folgenden OpenQASM-Datentypen werden von Braket unterstützt. Amazon
-
Nichtnegative Ganzzahlen werden für (virtuelle und physische) Qubit-Indizes verwendet:
-
cnot q[0], q[1];
-
h $0;
-
-
Fließkommazahlen oder Konstanten können für Gate-Drehwinkel verwendet werden:
-
rx(-0.314) $0;
-
rx(pi/4) $0;
-
Anmerkung
pi ist eine eingebaute Konstante in OpenQASM und kann nicht als Parametername verwendet werden.
-
Arrays komplexer Zahlen (mit der
im
OpenQASM-Notation für den Imaginärteil) sind in Ergebnistyp-Pragmas zur Definition allgemeiner hermitescher Observablen und in unitären Pragmas zulässig:-
#pragma braket unitary [[0, -1im], [1im, 0]] q[0]
-
#pragma braket result expectation hermitian([[0, -1im], [1im, 0]]) q[0]
-
Unterstützte OpenQASM-Anweisungen
Die folgenden OpenQASM-Anweisungen werden von Braket unterstützt. Amazon
-
Header: OPENQASM 3;
-
Klassische Bit-Deklarationen:
-
bit b1;
(äquivalent,)creg b1;
-
bit[10] b2;
(gleichwertig,)creg b2[10];
-
-
Qubit-Deklarationen:
-
qubit b1;
(äquivalent,)qreg b1;
-
qubit[10] b2;
(gleichwertig,)qreg b2[10];
-
-
Indizierung innerhalb von Arrays:
q[0]
-
Eingabe:
input float alpha;
-
physikalische Spezifikationqubits:
$0
-
Unterstützte Tore und Operationen auf einem Gerät:
-
h $0;
-
iswap q[0], q[1];
-
Anmerkung
Die unterstützten Gates eines Geräts finden Sie in den Geräteeigenschaften für OpenQASM-Aktionen. Für die Verwendung dieser Gates sind keine Gate-Definitionen erforderlich.
-
Wörtliche Angaben in der Box. Derzeit unterstützen wir die Angabe der Box-Dauer nicht. Bei wörtlichen Boxen qubits sind systemeigene Gates und physische Elemente erforderlich.
#pragma braket verbatim box{ rx(0.314) $0; }
-
Messung und Messzuweisung in einem qubits oder einem ganzen qubit Register.
-
measure $0;
-
measure q;
-
measure q[0];
-
b = measure q;
-
measure q → b;
-
Anmerkung
pi ist eine eingebaute Konstante in OpenQASM und kann nicht als Parametername verwendet werden.
OpenQASM-Pragmas in Klammern
Die folgenden OpenQASM-Pragma-Anweisungen werden von Braket unterstützt. Amazon
-
Noise-Pragmas
-
#pragma braket noise bit_flip(0.2) q[0]
-
#pragma braket noise phase_flip(0.1) q[0]
-
#pragma braket noise pauli_channel
-
-
Wörtliche Pragmas
-
#pragma braket verbatim
-
-
Pragmas vom Typ Ergebnis
-
Basisinvariante Ergebnistypen:
-
Zustandsvektor:
#pragma braket result state_vector
-
Dichtematrix:
#pragma braket result density_matrix
-
-
Pragmas zur Gradientenberechnung:
-
Adjungierter Gradient:
#pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all
-
-
Z-Basis-Ergebnistypen:
-
Amplitude:
#pragma braket result amplitude "01"
-
Wahrscheinlichkeit:
#pragma braket result probability q[0], q[1]
-
-
Auf Basis rotierte Ergebnistypen
-
Erwartung:
#pragma braket result expectation x(q[0]) @ y([q1])
-
Varianz:
#pragma braket result variance hermitian([[0, -1im], [1im, 0]]) $0
-
Stichprobe:
#pragma braket result sample h($1)
-
-
Anmerkung
OpenQASM 3.0 ist abwärtskompatibel mit OpenQASM 2.0, sodass Programme, die mit 2.0 geschrieben wurden, auf Braket laufen können. Die von Braket unterstützten Funktionen von OpenQASM 3.0 weisen jedoch einige geringfügige Syntaxunterschiede auf, wie zum Beispiel vs und vs qreg
creg
qubit
bit
Es gibt auch Unterschiede in der Messsyntax, und diese müssen mit ihrer korrekten Syntax unterstützt werden.
Erweiterte Funktionsunterstützung für OpenQASM auf dem Local Simulator
Das LocalSimulator
unterstützt erweiterte OpenQASM-Funktionen, die nicht als Teil der QPUs oder On-Demand-Simulatoren von Braket angeboten werden. Die folgende Liste von Funktionen wird nur in folgenden Versionen unterstützt: LocalSimulator
-
Gate-Modifikatoren
-
Integrierte OpenQASM-Gates
-
Klassische Variablen
-
Klassische Operationen
-
Maßgeschneiderte Tore
-
Klassische Steuerung
-
QASM-Dateien
-
Subroutinen
Beispiele für jede erweiterte Funktion finden Sie in diesem Beispielnotizbuch
Unterstützte Operationen und Grammatik mit OpenPulse
Unterstützte OpenPulse Datentypen
Blöcke aufrufen:
cal { ... }
Aufkleberblöcke:
// 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 { ... }
Rahmen:
frame my_frame = newframe(port_0, 4.5e9, 0.0);
Wellenformen:
// 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};
Beispiel für eine benutzerdefinierte Gate-Kalibrierung:
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;
Beispiel für einen beliebigen Impuls:
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); }