OpenQASM tavolo a 3 funzioni
Di seguito è riportato un elenco delle caratteristiche della lingua OpenQASM 3 .
Per maggiori dettagli su queste funzionalità, consultare la specifica OpenQASM 3.X Live.
Chiave:
- ❌ Non supportato
- 🟡 Supporto parziale
- ✅ Supportato
Il significato del segno completo "supportato" dipende dalla colonna:
-
Qiskit SDK (Caratteristiche di un oggetto): la caratteristica può essere analizzata da
qiskit.qasm3.loads(utilizzando l'estensioneqiskit-qasm3-import), rappresentata in unQuantumCircuite esportata in OpenQASM 3 tramiteqiskit.qasm3.dumps. -
IBM Quantum Servizio di calcolo : un circuito contenente la funzione Qiskit corrispondente può essere eseguito correttamente sull'hardware tramite il servizio di calcol IBM Quantum.
Il significato di "sostegno parziale" dipende tipicamente dalle note collegate.
Il metodo più comune per inviare circuiti al servizio di calcolo " IBM Quantum " consiste nel creare il circuito nell'interfaccia " Python " all'indirizzo Qiskit SDK. I circuiti realizzati e inviati in questo modo non devono essere caricati dai file di OpenQASM 3 su Qiskit SDK.
Se non utilizzi direttamente l' OpenQASM e 3, puoi comunque utilizzare in tutta sicurezza le funzionalità supportate per la rappresentazione in Qiskit SDK, l'esportazione in OpenQASM e 3 e l'invio al servizio di calcolo IBM Quantum. Ciò include funzionalità che non possono essere caricate da Qiskit SDK da OpenQASM 3.
OpenQASM 3 Caratteristica | Caratteristiche dell'SDK Qiskit | Qiskit SDK | IBM Quantum Servizio di elaborazione dati | Note |
|---|---|---|---|---|
| commenti | ✅ | ✅ | ERROR! SEGMENT DATA CORRUPTED, SEGDATA=1 | |
| QASM vstring | ✅ | ✅ | ERROR! SEGMENT DATA CORRUPTED, SEGDATA=1 | |
include | 🟡 | ❌ | 1, 7 | |
| nomi unicode | ✅ | ✅ | ||
qubit | Qubit e QuantumRegister | ✅ | 🟡 | ERROR! SEGMENT DATA CORRUPTED, SEGDATA=2 |
bit | Clbit e ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var e le espressioni classiche | 🟡 | ✅ | 4,00 |
int | ❌ | ✅ | 4,00 | |
uint | expr.Var e le espressioni classiche | 🟡 | ✅ | 4,00 |
float | expr.Var e le espressioni classiche | 🟡 | 🟡 | 4,00 |
angle | Implicito, come parametri del gate | ❌ | 🟡 | 4,00 |
complex | ❌ | ❌ | 4,00 | |
const | ❌ | ❌ | 4,00 | |
pi/π/tau/τ/euler/ℇ | Costante ripiegata nei parametri del gate | ✅ | ✅ | |
| Aliasing: lasciare che | Registri quantistici e classici | 🟡 | ❌ | 5,00 |
| concatenazione di registri | Registri quantistici e classici | 🟡 | ❌ | 5,00 |
| casting | expr.Cast espressioni classiche | 🟡 | 🟡 | 4,00 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durata di delay e box | ✅ | ✅ | ERROR! SEGMENT DATA CORRUPTED, SEGDATA=6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | ERROR! SEGMENT DATA CORRUPTED, SEGDATA=6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | ERROR! SEGMENT DATA CORRUPTED, SEGDATA=6 |
Integrato 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 | ✅ | ✅ | |
| operazioni con i bit | 🟡 | ✅ | 4,00 | |
| operazioni booleane | 🟡 | ✅ | 4,00 | |
| Espressioni aritmetiche | 🟡 | 🟡 | 4,00 | |
| Confronti | 🟡 | ✅ | 4,00 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for Loop | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while Loop | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def subroutine (classiche) | ❌ | ❌ | ||
def subroutine (quantum) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Note
- Queste caratteristiche del programma OpenQASM 3 non hanno alcun impatto sull'esecuzione e Qiskit le elimina come parte dell'analisi dei file come parte dell'analisi dei file. I file che li utilizzano possono essere inviati, ma non avranno alcun effetto alcun effetto. Per i file
include,stdgates.incè attualmente supportato come input per Qiskit, e l'esecuzione di backend richiede sempre che i circuiti siano stati compilati in base all'Instruction Set Architecture (ISA) di backend, dove i file sono irrilevantiincludesono irrilevanti.
- Qiskit SDK supporta il parsing e il dump dei file OpenQASM 3 con qualsiasi dichiarazione
qubit. Per per l'esecuzione su hardware, sono validi solo i circuiti definiti in termini di qubit hardware (ad esempio,$0). Qiskit SDK produce automaticamente OpenQASM 3 in termini di identificatori hardware-qubit supportati se il circuito è stato transpilato per un backend con informazioni sul layout se il circuito è stato transpilato per un backend con informazioni sul layout.
bit- e le dichiarazioni di variabili di tipobit[n]in Qiskit SDK corrispondono alle dichiarazioni di tipoClbiteClassicalRegisterdichiarazioni.
- A partire dal luglio 2025, Qiskit SDK è in grado di rappresentare variabili locali di un insieme ristretto di tipi, può rappresentare molte operazioni di runtime su questi oggetti e supporta l'output in rappresentare molte operazioni di runtime su questi oggetti e supporta l'output su OpenQASM 3.
Tuttavia, Qiskit SDK (attraverso
qiskit-qasm3-importv0.6.0 ) non supporta il parsing dei file OpenQASM 3 file che contengono dichiarazioni di variabili e ha un supporto molto limitato per l'analisi delle espressioni di variabili espressioni di variabili. In generale, la maggior parte di ciò che Qiskit è in grado di rappresentare nel suo sistema di espressioni può essere su circuiti dinamici adeguati, anche se l'espressione non può ancora essere analizzata da Qiskit SDK Qiskit SDK. Consultare 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 per quelli classici, ma è fortemente sconsigliato l'uso dell'aliasing dei registri classici fortemente sconsigliato l'uso dell'aliasing dei registri classici. La maggior parte delle espressioni sui registri non funzionano con gli alias e i registri classici con alias non sono supportati per l'esecuzione in hardware l'esecuzione su hardware. Il parser di Qiskit OpenQASM 3 è in grado di risolvere le dichiarazioni alias di
letche vincolano il risultato della concatenazione dei registri il risultato della concatenazione dei registri.
- L'SDK di Qiskit supporta ritardi espliciti tramite
QuantumCircuit.delay, e le caselle di circuito (QuantumCircuit.box) possono avere anche durate esplicite. Queste durate possono includere le classiche espressioni classiche distretchvariabili. L'SDK di Qiskit (a partire dal luglio 2025 tramiteqiskit-qasm3-importv0.6.0 ) non supporta l'analisi delle dichiarazioni del tipodurationo del tipostretchda file di tipo OpenQASM 3 file. L'hardware ha un supporto limitato per durate che includonostretch.
- I circuiti devono essere transpilati nell'ISA di backend per essere eseguiti sull'hardware di IBM. Questo preclude definizioni personalizzate di
gatee i costrutti di livello superiore come i modificatori di gate (comeinv @) non sono validi per l'esecuzione sull'hardware essere validi per l'esecuzione sull'hardware, ma il processotranspileli risolve in circuiti ISA validi in circuiti ISA validi. L'SDK di Qiskit (a partire dal luglio 2025, tramiteqiskit-qasm3-importv0.6.0 ) valuterà avidamente i modificatori di gate durante il parsing, quindi questi non saranno non saranno evidenti nel risultato diQuantumCircuit, potenzialmente con un costo di runtime.
- Qiskit SDK è in grado di rappresentare un flusso di controllo strutturato e di esportarlo in OpenQASM 3. Le dichiarazioni
continueebreakpossono essere tecnicamente rappresentate da Qiskit, ma non sono ben supportate nemmeno da Qiskit SDK all'interno dell'SDK di Qiskit.fori cicli in Qiskit v2.1.0 non sono ben supportati. Il flusso di controllo annidato il flusso di controllo annidato (come un'istruzioneifall'interno di un'altraifo un'istruzioneelse if) non è idoneo per l'esecuzione su hardware sull'hardware.
- Qiskit SDK supporta la dichiarazione di qualsiasi tipo classico supportato come variabile
inputsul circuito. Tali variabili non sono attualmente idonee per l'esecuzione su hardware e non possono essere caricate dall'importatore di l'importatore di Qiskit OpenQASM 3. Gli oggetti non vincolati diParameterpresenti inQuantumCircuitvengono esportati come variabili diinput float[64]. Alcune opzioni di configurazione del runtime possono consentire l'esecuzione di tali circuiti su alcuni backend.
Passi successivi
- Imparate a generare il codice OpenQASM utilizzando IBM Quantum Composer.
- Vedere il riferimento all' API di OpenQASM 3 Qiskit.
- Vedere il riferimento all' API di OpenQASM 2 Qiskit.
- Consulta la sezione "Verifica il tuo programma ".
- Visitate il sito OpenQASM Live Specification.