Tabel de funcționalități OpenQASM 3
Mai jos se află o listă a funcționalităților limbajului OpenQASM 3.
Pentru mai multe detalii despre aceste capabilități, consultă Specificația Live OpenQASM 3.X.
Legendă:
- ❌ Nesuportat
- 🟡 Suport parțial
- ✅ Suportat
Semnificația marcajului „suportat" complet depinde de coloană:
-
Qiskit SDK: Funcționalitatea poate fi parsată de
qiskit.qasm3.loads(folosind extensiaqiskit-qasm3-import), reprezentată într-unQuantumCircuit, și exportată în OpenQASM 3 deqiskit.qasm3.dumps. -
IBM Qiskit Runtime: Un Circuit care conține funcționalitatea Qiskit corespunzătoare poate fi executat cu succes pe hardware prin IBM® Qiskit Runtime.
Semnificația „suportului parțial" depinde de obicei de notele legate.
Cea mai frecventă metodă de a trimite circuite către IBM Qiskit Runtime este să creezi Circuit-ul în interfața Python din Qiskit SDK. Circuitele construite și trimise în acest mod nu trebuie încărcate din fișiere OpenQASM 3 în Qiskit SDK.
Dacă nu folosești OpenQASM 3 direct, poți utiliza în siguranță funcționalitățile care sunt suportate pentru reprezentare în Qiskit SDK, export în OpenQASM 3 și trimitere către IBM Qiskit Runtime. Aceasta include funcționalitățile care nu pot fi încărcate de Qiskit SDK din OpenQASM 3.
| Funcționalitate OpenQASM 3 | Funcționalitate Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Note |
|---|---|---|---|---|
| comentarii | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| nume unicode | ✅ | ✅ | ||
qubit | Qubit și QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit și ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var și expresii clasice | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var și expresii clasice | 🟡 | ✅ | 4 |
float | expr.Var și expresii clasice | 🟡 | 🟡 | 4 |
angle | Implicit, ca parametri de Gate | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Înglobat prin constant-folding în parametrii Gate | ✅ | ✅ | |
| Alias: let | Registre cuantice și clasice | 🟡 | ❌ | 5 |
| concatenare registre | Registre cuantice și clasice | 🟡 | ❌ | 5 |
| conversie de tip | expr.Cast expresii clasice | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durate pentru delay și box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
U predefinit | 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 | ✅ | ✅ | |
| operații pe biți | 🟡 | ✅ | 4 | |
| operații booleene | 🟡 | ✅ | 4 | |
| expresii aritmetice | 🟡 | 🟡 | 4 | |
| comparații | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
bucle for | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
bucle while | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
subrutine def (clasice) | ❌ | ❌ | ||
subrutine def (cuantice) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Note
- Aceste funcționalități ale programelor OpenQASM 3 nu au niciun impact asupra execuției, iar Qiskit le elimină
ca parte a parsării fișierelor. Fișierele care le folosesc pot fi trimise, dar nu vor avea
niciun efect. Pentru fișierele
include,stdgates.inceste suportat în prezent ca intrare în Qiskit, iar execuția pe Backend necesită întotdeauna ca circuitele să fi fost compilate conform Arhitecturii de Set de Instrucțiuni (ISA) a Backend-ului, unde fișiereleincludesunt irelevante.
- Qiskit SDK suportă parsarea și exportul fișierelor OpenQASM 3 cu orice declarații
qubit. Pentru execuția pe hardware, doar circuitele definite în termeni de qubiți hardware (de exemplu,$0) sunt valide. Qiskit SDK generează automat OpenQASM 3 în termenii identificatorilor de qubiți hardware suportați, dacă Circuit-ul a fost transpilat pentru un Backend cu informații de layout.
- Declarațiile de variabile de tip
bitșibit[n]în Qiskit SDK corespund declarațiilorClbitșiClassicalRegister.
- Începând cu iulie 2025, Qiskit SDK poate reprezenta variabile locale dintr-un set restrâns de tipuri, poate
reprezenta multe operații la runtime pe aceste obiecte și suportă exportul lor în OpenQASM 3.
Totuși, Qiskit SDK (prin
qiskit-qasm3-importv0.6.0) nu suportă parsarea fișierelor OpenQASM 3 care conțin declarații de variabile și are suport foarte limitat pentru parsarea expresiilor cu variabile. În general, cea mai mare parte din ceea ce Qiskit poate reprezenta în sistemul său de expresii poate fi executat pe hardware adecvat cu circuite dinamice, chiar dacă expresia nu poate fi încă parsată de Qiskit SDK. Consultă documentația Qiskit a modululuiqiskit.circuit.classicalpentru cele mai actualizate informații.
- Qiskit SDK poate reprezenta aliasul de registre atât pentru registrele cuantice, cât și pentru cele clasice, dar este
puternic descurajat să se folosească aliasul registrelor clasice. Majoritatea expresiilor pe registre clasice
nu funcționează cu aliasuri, iar registrele clasice cu alias nu sunt suportate pentru
execuția pe hardware. Parser-ul OpenQASM 3 din Qiskit poate rezolva instrucțiunile de alias
letcare leagă rezultatul concatenării de registre.
- Qiskit SDK suportă întârzieri explicite prin
QuantumCircuit.delay, iar casetele de circuit (QuantumCircuit.box) pot avea și ele durate explicite. Aceste durate pot include expresii clasice ale variabilelorstretch. Qiskit SDK (începând cu iulie 2025, prinqiskit-qasm3-importv0.6.0) nu suportă parsarea declarațiilor de tipdurationsaustretchdin fișiere OpenQASM 3. Hardware-ul are suport limitat pentru durate care includstretch.
- Circuitele trebuie transpilate conform ISA-ului Backend-ului pentru a rula pe hardware IBM. Aceasta exclude
definițiile personalizate de
gateși constructele de nivel superior, cum ar fi modificatorii de Gate (precuminv @), din a fi valide pentru execuția pe hardware verbatim, dar procesultranspilele rezolvă în circuite ISA valide. Qiskit SDK (începând cu iulie 2025, prinqiskit-qasm3-importv0.6.0) va evalua cu anticipare modificatorii de Gate în timpul parsării, astfel că aceștia nu vor fi vizibili înQuantumCircuit-ul rezultat, potențial cu un cost la runtime.
- Qiskit SDK poate reprezenta fluxul de control structurat și îl poate exporta în OpenQASM 3. Instrucțiunile
continueșibreakpot fi tehnic reprezentate de Qiskit, dar nu sunt bine suportate nici în cadrul Qiskit SDK. Bucleleforîn Qiskit v2.1.0 nu sunt bine suportate. Fluxul de control imbricat (cum ar fi unifîn interiorul altuiif, sau o instrucțiuneelse if) nu este eligibil pentru execuție pe hardware.
- Qiskit SDK suportă declararea oricărui tip clasic suportat ca variabilă
inputpe circuit. Astfel de variabile nu sunt eligibile în prezent pentru execuția pe hardware și nu pot fi încărcate de importatorul OpenQASM 3 din Qiskit. ObiecteleParameterneasociate prezente înQuantumCircuitsunt exportate ca variabileinput float[64]. Anumite opțiuni de configurare la runtime pot permite executarea unor astfel de circuite pe anumite Backend-uri.
Pași următori
- Află cum să generezi cod OpenQASM folosind IBM Quantum Composer.
- Consultă referința OpenQASM 3 Qiskit API.
- Consultă referința OpenQASM 2 Qiskit API.
- Revizuiește subiectul Verifică-ți programul.
- Vizitează Specificația Live OpenQASM.