Vai al contenuto principale

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'estensione qiskit-qasm3-import), rappresentata in un QuantumCircuit, ed esportata in OpenQASM 3 tramite qiskit.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.

nota

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 3Funzionalità Qiskit SDKQiskit SDKIBM Qiskit RuntimeNote
commenti1
QASM vstring1
include🟡1, 7
nomi unicode
qubitQubit e QuantumRegister🟡2
bitClbit e ClassicalRegister3
boolexpr.Var ed espressioni classiche🟡4
int4
uintexpr.Var ed espressioni classiche🟡4
floatexpr.Var ed espressioni classiche🟡🟡4
angleImplicito, come parametri di gate🟡4
complex4
const4
pi/π/tau/τ/euler/Ridotti a costanti nei parametri di gate
Aliasing: letRegistri quantistici e classici🟡5
concatenazione di registriRegistri quantistici e classici🟡5
castingexpr.Cast espressioni classiche🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtDurate di delay e box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
U integratoUGate/QuantumCircuit.u
gate🟡🟡7
gphaseQuantumCircuit.global_phase🟡7
ctrl @/ negctrl @AnnotatedOperation🟡7
inv @AnnotatedOperation🟡7
pow(k) @AnnotatedOperation🟡7
resetReset/QuantumCircuit.reset
measureMeasure/QuantumCircuit.measure
operazioni su bit🟡4
operazioni booleane🟡4
espressioni aritmetiche🟡🟡4
confronti🟡4
ifQuantumCircuit.if_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
cicli forQuantumCircuit.for_loop🟡8
cicli whileQuantumCircuit.while_loop8
continueQuantumCircuit.continue_loop🟡8
breakQuantumCircuit.break_loop🟡8
return
extern
subroutine def (classiche)
subroutine def (quantistiche)
inputQuantumCircuit.add_input🟡4, 9
output

Note

  1. 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 file include non sono rilevanti.
  1. 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.
  1. Le dichiarazioni di variabili di tipo bit e bit[n] in Qiskit SDK corrispondono alle dichiarazioni Clbit e ClassicalRegister.
  1. 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-import v0.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 modulo qiskit.circuit.classical per le informazioni più aggiornate.
  1. 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 let che legano il risultato della concatenazione di registri.
  1. 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 variabili stretch. Qiskit SDK (a partire da luglio 2025, tramite qiskit-qasm3-import v0.6.0) non supporta l'analisi di dichiarazioni di tipo duration o tipo stretch da file OpenQASM 3. L'hardware ha un supporto limitato per le durate che includono stretch.
  1. I circuiti devono essere transpilati per l'ISA del backend per essere eseguiti sull'hardware IBM. Questo esclude le definizioni di gate personalizzate e i costrutti di livello superiore come i modificatori di gate (come inv @) dall'essere validi per l'esecuzione sull'hardware così come sono, ma il processo di transpile li risolve in circuiti ISA validi. Qiskit SDK (a partire da luglio 2025, tramite qiskit-qasm3-import v0.6.0) valuterà eagerly i modificatori di gate durante l'analisi, quindi questi non saranno evidenti nel QuantumCircuit risultante, con un potenziale costo a runtime.
  1. Qiskit SDK può rappresentare il flusso di controllo strutturato ed esportarlo in OpenQASM 3. Le istruzioni continue e break possono tecnicamente essere rappresentate da Qiskit, ma non sono ben supportate nemmeno all'interno di Qiskit SDK. I cicli for in Qiskit v2.1.0 non sono ben supportati. Il flusso di controllo annidato (come un if all'interno di un altro if, o un'istruzione else if) non è idoneo per l'esecuzione sull'hardware.
  1. Qiskit SDK supporta la dichiarazione di qualsiasi tipo classico supportato come variabile input nel 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 oggetti Parameter non legati presenti nel QuantumCircuit vengono esportati come variabili input float[64]. Alcune opzioni di configurazione runtime possono abilitare l'esecuzione di tali circuiti su alcuni backend.

Passi successivi

Raccomandazioni