OpenQASM 3 Feature-Tabelle
Im Folgenden findest du eine Liste der OpenQASM 3-Sprachfeatures.
Weitere Details zu diesen Funktionen findest du in der OpenQASM 3.X Live Specification.
Legende:
- ❌ Nicht unterstützt
- 🟡 Teilweise unterstützt
- ✅ Unterstützt
Die Bedeutung des vollständigen „unterstützt"-Zeichens hängt von der Spalte ab:
-
Qiskit SDK: Das Feature kann von
qiskit.qasm3.loadsgeparst werden (durch dieqiskit-qasm3-import-Erweiterung), in einemQuantumCircuitdargestellt und vonqiskit.qasm3.dumpsnach OpenQASM 3 exportiert werden. -
IBM Qiskit Runtime: Ein Circuit, der das entsprechende Qiskit-Feature enthält, kann über IBM® Qiskit Runtime erfolgreich auf Hardware ausgeführt werden.
Die Bedeutung von „teilweise unterstützt" hängt in der Regel von den verlinkten Hinweisen ab.
Die häufigste Methode, Circuits an IBM Qiskit Runtime zu übermitteln, besteht darin, den Circuit über die Python-Schnittstelle des Qiskit SDK zu erstellen. Circuits, die auf diese Weise erstellt und übermittelt werden, müssen nicht aus OpenQASM 3-Dateien in das Qiskit SDK geladen werden.
Wenn du OpenQASM 3 nicht direkt verwendest, kannst du problemlos Features nutzen, die für die Darstellung im Qiskit SDK, den Export nach OpenQASM 3 und die Übermittlung an IBM Qiskit Runtime unterstützt werden. Dies schließt Features ein, die vom Qiskit SDK nicht aus OpenQASM 3 geladen werden können.
| OpenQASM 3 Feature | Qiskit SDK Feature | Qiskit SDK | IBM Qiskit Runtime | Hinweise |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit and QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit and ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var and classical expressions | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var and classical expressions | 🟡 | ✅ | 4 |
float | expr.Var and classical expressions | 🟡 | 🟡 | 4 |
angle | Implicit, as gate parameters | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constant-folded into gate parameters | ✅ | ✅ | |
| Aliasing: let | Quantum and classical registers | 🟡 | ❌ | 5 |
| register concatenation | Quantum and classical registers | 🟡 | ❌ | 5 |
| casting | expr.Cast classical expressions | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durations of delay and box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Built-in U | UGate/QuantumCircuit.u | ✅ | ✅ | |
gate | 🟡 | 🟡 | 7 | |
gphase | QuantumCircuit.global_phase | 🟡 | ❌ | 7 |
ctrl @/ negctrl @ | AnnotatedOperation | 🟡 | ❌ | 7 |
inv @ | AnnotatedOperation | 🟡 | ❌ | 7 |
pow(k) @ | AnnotatedOperation | 🟡 | ❌ | 7 |
reset | Reset/QuantumCircuit.reset | ✅ | ✅ | |
measure | Measure/QuantumCircuit.measure | ✅ | ✅ | |
| bit operations | 🟡 | ✅ | 4 | |
| boolean operations | 🟡 | ✅ | 4 | |
| arithmetic expressions | 🟡 | 🟡 | 4 | |
| comparisons | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for loops | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while loops | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def subroutines (classical) | ❌ | ❌ | ||
def subroutines (quantum) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Hinweise
- Diese OpenQASM 3-Programmfeatures haben keinen Einfluss auf die Ausführung; Qiskit entfernt sie
beim Parsen der Dateien. Dateien, die diese Features verwenden, können übermittelt werden, haben aber
keinen Effekt. Für
include-Dateien wirdstdgates.incderzeit als Eingabe für Qiskit unterstützt, und die Backend-Ausführung setzt voraus, dass Circuits auf die Instruction Set Architecture (ISA) des Backends kompiliert wurden – dabei sindinclude-Dateien irrelevant.
- Das Qiskit SDK unterstützt das Parsen und Schreiben von OpenQASM 3-Dateien mit beliebigen
qubit-Deklarationen. Für die Ausführung auf Hardware sind nur Circuits gültig, die in Bezug auf Hardware-Qubits definiert sind (zum Beispiel$0). Das Qiskit SDK gibt OpenQASM 3 automatisch in Bezug auf die unterstützten Hardware-Qubit-Bezeichner aus, wenn der Circuit für ein Backend mit Layout-Informationen transpiliert wurde.
- Variablendeklarationen vom Typ
bitundbit[n]im Qiskit SDK entsprechenClbit- undClassicalRegister-Deklarationen.
- Ab Juli 2025 kann das Qiskit SDK lokale Variablen eines eingeschränkten Typensets darstellen,
viele Laufzeitoperationen auf diesen Objekten abbilden und sie nach OpenQASM 3 ausgeben.
Das Qiskit SDK (über
qiskit-qasm3-importv0.6.0) unterstützt jedoch kein Parsen von OpenQASM 3-Dateien, die Variablendeklarationen enthalten, und hat nur sehr eingeschränkte Unterstützung für das Parsen von Variablenausdrücken. Im Allgemeinen kann das meiste, was Qiskit in seinem Ausdruckssystem darstellen kann, auf geeigneter Dynamic-Circuits-Hardware ausgeführt werden, auch wenn der Ausdruck noch nicht vom Qiskit SDK geparst werden kann. Aktuelle Informationen findest du in der Qiskit-Dokumentation des Modulsqiskit.circuit.classical.
- Das Qiskit SDK kann Register-Aliasing für sowohl Quanten- als auch klassische Register darstellen, es wird jedoch
dringend davon abgeraten, Aliasing für klassische Register zu verwenden. Die meisten Ausdrücke auf klassischen
Registern funktionieren nicht mit Aliasen, und klassische aliasierte Register werden für die Ausführung auf Hardware nicht unterstützt.
Der Qiskit OpenQASM 3-Parser kann
let-Alias-Anweisungen auflösen, die das Ergebnis einer Register-Konkatenation binden.
- Das Qiskit SDK unterstützt explizite Verzögerungen über
QuantumCircuit.delay, und Circuit-Boxen (QuantumCircuit.box) können ebenfalls explizite Dauern haben. Diese Dauern können klassische Ausdrücke mitstretch-Variablen enthalten. Das Qiskit SDK (ab Juli 2025 überqiskit-qasm3-importv0.6.0) unterstützt kein Parsen von Deklarationen des Typsdurationoderstretchaus OpenQASM 3-Dateien. Hardware hat eingeschränkte Unterstützung für Dauern einschließlichstretch.
- Circuits müssen auf die Backend-ISA transpiliert werden, um auf IBM-Hardware ausgeführt werden zu können. Dies schließt
benutzerdefinierte
gate-Definitionen und übergeordnete Konstrukte wie Gate-Modifikatoren (z. B.inv @) von der direkten Ausführung auf Hardware aus; dertranspile-Prozess löst diese jedoch in gültige ISA-Circuits auf. Das Qiskit SDK (ab Juli 2025 überqiskit-qasm3-importv0.6.0) wertet Gate-Modifikatoren beim Parsen direkt aus, sodass diese im resultierendenQuantumCircuitnicht mehr sichtbar sind – möglicherweise mit einem Laufzeit-Mehraufwand.
- Das Qiskit SDK kann strukturierten Kontrollfluss darstellen und diesen nach OpenQASM 3 exportieren. Die
continue- undbreak-Anweisungen können technisch gesehen von Qiskit dargestellt werden, sind aber auch innerhalb des Qiskit SDK nicht gut unterstützt.for-Schleifen in Qiskit v2.1.0 sind ebenfalls nicht gut unterstützt. Verschachtelter Kontrollfluss (z. B. einifinnerhalb eines anderenifoder eineelse if-Anweisung) ist für die Ausführung auf Hardware nicht zulässig.
- Das Qiskit SDK unterstützt die Deklaration jedes unterstützten klassischen Typs als
input-Variable im Circuit. Solche Variablen sind derzeit nicht für die Ausführung auf Hardware geeignet und können vom Qiskit OpenQASM 3-Importer nicht geladen werden. Nicht gebundeneParameter-Objekte imQuantumCircuitwerden alsinput float[64]-Variablen exportiert. Bestimmte Laufzeit-Konfigurationsoptionen können die Ausführung solcher Circuits auf manchen Backends ermöglichen.
Nächste Schritte
- Lerne, wie du OpenQASM-Code mit dem IBM Quantum Composer generierst.
- Sieh dir die Referenz zur OpenQASM 3 Qiskit API an.
- Sieh dir die Referenz zur OpenQASM 2 Qiskit API an.
- Lies das Thema Dein Programm verifizieren.
- Besuche die OpenQASM Live Specification.