Tabella delle funzionalità di OpenQASM 3
Di seguito è riportato un elenco delle funzionalità del linguaggio OpenQASM 3.
Per ulteriori dettagli su queste capacità, consulta la Specifica live di OpenQASM 3.X.
Legenda:
- ❌ Non supportato
- 🟡 Supporto parziale
- ✅ Supportato
Il significato del segno "supportato" completo dipende dalla colonna:
-
Qiskit SDK: La funzionalità può essere analizzata da
qiskit.qasm3.loads(usando l'estensioneqiskit-qasm3-import), rappresentata in unQuantumCircuit, ed esportata in OpenQASM 3 tramiteqiskit.qasm3.dumps. -
IBM Qiskit Runtime: Un circuito contenente la funzionalità Qiskit corrispondente può essere eseguito con successo sull'hardware tramite IBM® Qiskit Runtime.
Il significato di "supporto parziale" dipende in genere dalle note collegate.
Il metodo più comune per inviare circuiti a IBM Qiskit Runtime è creare il circuito nell'interfaccia Python di Qiskit SDK. I circuiti costruiti e inviati in questo modo non devono essere caricati da file OpenQASM 3 in Qiskit SDK.
Se non usi OpenQASM 3 direttamente, puoi usare tranquillamente le funzionalità supportate per la rappresentazione in Qiskit SDK, l'esportazione in OpenQASM 3 e l'invio a IBM Qiskit Runtime. Questo include funzionalità che non possono essere caricate da Qiskit SDK da OpenQASM 3.
| Funzionalità OpenQASM 3 | Funzionalità Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Note |
|---|---|---|---|---|
| commenti | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| nomi unicode | ✅ | ✅ | ||
qubit | Qubit e QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit e ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var ed espressioni classiche | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var ed espressioni classiche | 🟡 | ✅ | 4 |
float | expr.Var ed espressioni classiche | 🟡 | 🟡 | 4 |
angle | Implicito, come parametri di gate | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Ridotti a costanti nei parametri di gate | ✅ | ✅ | |
| Aliasing: let | Registri quantistici e classici | 🟡 | ❌ | 5 |
| concatenazione di registri | Registri quantistici e classici | 🟡 | ❌ | 5 |
| casting | expr.Cast espressioni classiche | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durate di delay e box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
U integrato | 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 | ✅ | ✅ | |
| operazioni su bit | 🟡 | ✅ | 4 | |
| operazioni booleane | 🟡 | ✅ | 4 | |
| espressioni aritmetiche | 🟡 | 🟡 | 4 | |
| confronti | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
cicli for | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
cicli while | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
subroutine def (classiche) | ❌ | ❌ | ||
subroutine def (quantistiche) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Note
- Queste funzionalità dei programmi OpenQASM 3 non hanno alcun impatto sull'esecuzione e Qiskit le rimuove
durante l'analisi dei file. I file che le usano possono essere inviati, ma non avranno
alcun effetto. Per i file
include,stdgates.incè attualmente supportato come input per Qiskit, e l'esecuzione sul backend richiede sempre che i circuiti siano stati compilati per l'Instruction Set Architecture (ISA) del backend, dove i fileincludenon sono rilevanti.
- Qiskit SDK supporta l'analisi e la scrittura di file OpenQASM 3 con qualsiasi dichiarazione
qubit. Per l'esecuzione sull'hardware, sono validi solo i circuiti definiti in termini di qubit hardware (ad esempio,$0). Qiskit SDK produce automaticamente OpenQASM 3 in termini degli identificatori hardware-qubit supportati, se il circuito è stato transpilato per un backend con informazioni di layout.
- Le dichiarazioni di variabili di tipo
bitebit[n]in Qiskit SDK corrispondono alle dichiarazioniClbiteClassicalRegister.
- A partire da luglio 2025, Qiskit SDK può rappresentare variabili locali di un insieme limitato di tipi, può
rappresentare molte operazioni runtime su questi oggetti e supporta l'output verso OpenQASM 3.
Tuttavia, Qiskit SDK (tramite
qiskit-qasm3-importv0.6.0) non supporta l'analisi di file OpenQASM 3 contenenti dichiarazioni di variabili, e ha un supporto molto limitato per l'analisi di espressioni variabili. In generale, la maggior parte di ciò che Qiskit può rappresentare nel suo sistema di espressioni può essere eseguita su hardware adatto per circuiti dinamici, anche se l'espressione non può ancora essere analizzata da Qiskit SDK. Consulta la documentazione Qiskit del moduloqiskit.circuit.classicalper le informazioni più aggiornate.
- Qiskit SDK può rappresentare l'aliasing dei registri sia per i registri quantistici che classici, ma è
fortemente sconsigliato usare l'aliasing dei registri classici. La maggior parte delle espressioni sui registri classici
non funziona con gli alias, e i registri classici con alias non sono supportati per
l'esecuzione sull'hardware. Il parser OpenQASM 3 di Qiskit può risolvere le istruzioni alias
letche legano il risultato della concatenazione di registri.
- Qiskit SDK supporta i ritardi espliciti tramite
QuantumCircuit.delay, e i box dei circuiti (QuantumCircuit.box) possono avere anche durate esplicite. Queste durate possono includere espressioni classiche di variabilistretch. Qiskit SDK (a partire da luglio 2025, tramiteqiskit-qasm3-importv0.6.0) non supporta l'analisi di dichiarazioni di tipodurationo tipostretchda file OpenQASM 3. L'hardware ha un supporto limitato per le durate che includonostretch.
- I circuiti devono essere transpilati per l'ISA del backend per essere eseguiti sull'hardware IBM. Questo esclude
le definizioni di
gatepersonalizzate e i costrutti di livello superiore come i modificatori di gate (comeinv @) dall'essere validi per l'esecuzione sull'hardware così come sono, ma il processo ditranspileli risolve in circuiti ISA validi. Qiskit SDK (a partire da luglio 2025, tramiteqiskit-qasm3-importv0.6.0) valuterà eagerly i modificatori di gate durante l'analisi, quindi questi non saranno evidenti nelQuantumCircuitrisultante, con un potenziale costo a runtime.
- Qiskit SDK può rappresentare il flusso di controllo strutturato ed esportarlo in OpenQASM 3. Le istruzioni
continueebreakpossono tecnicamente essere rappresentate da Qiskit, ma non sono ben supportate nemmeno all'interno di Qiskit SDK. I cicliforin Qiskit v2.1.0 non sono ben supportati. Il flusso di controllo annidato (come unifall'interno di un altroif, o un'istruzioneelse if) non è idoneo per l'esecuzione sull'hardware.
- Qiskit SDK supporta la dichiarazione di qualsiasi tipo classico supportato come variabile
inputnel circuito. Tali variabili non sono attualmente idonee per l'esecuzione sull'hardware e non possono essere caricate dal l'importatore OpenQASM 3 di Qiskit. Gli oggettiParameternon legati presenti nelQuantumCircuitvengono esportati come variabiliinput float[64]. Alcune opzioni di configurazione runtime possono abilitare l'esecuzione di tali circuiti su alcuni backend.
Passi successivi
- Scopri come generare codice OpenQASM usando IBM Quantum Composer.
- Consulta il riferimento all'API OpenQASM 3 di Qiskit.
- Consulta il riferimento all'API OpenQASM 2 di Qiskit.
- Leggi l'argomento Verifica il tuo programma.
- Visita la Specifica live di OpenQASM.