Tabela funkcji OpenQASM 3
Poniżej znajduje się lista funkcji językowych OpenQASM 3.
Więcej szczegółów na temat tych możliwości znajdziesz w specyfikacji OpenQASM 3.X na żywo.
Legenda:
- ❌ Nieobsługiwane
- 🟡 Częściowe wsparcie
- ✅ Obsługiwane
Znaczenie kompletnego oznaczenia „obsługiwane" zależy od kolumny:
-
Qiskit SDK: Funkcja może być parsowana przez
qiskit.qasm3.loads(przy użyciu rozszerzeniaqiskit-qasm3-import), reprezentowana wQuantumCircuit, i eksportowana do OpenQASM 3 przezqiskit.qasm3.dumps. -
IBM Qiskit Runtime: Circuit zawierający odpowiednią funkcję Qiskit może być pomyślnie wykonany na sprzęcie przez IBM® Qiskit Runtime.
Znaczenie „częściowego wsparcia" zazwyczaj zależy od podlinkowanych uwag.
Najczęstszą metodą przesyłania Circuit do IBM Qiskit Runtime jest tworzenie Circuit w interfejsie Python-space dla Qiskit SDK. Circuit skonstruowane i przesłane w ten sposób nie muszą być ładowane z plików OpenQASM 3 do Qiskit SDK.
Jeśli nie używasz bezpośrednio OpenQASM 3, możesz bezpiecznie korzystać z funkcji obsługiwanych do reprezentacji w Qiskit SDK, eksportu do OpenQASM 3 i przesyłania do IBM Qiskit Runtime. Dotyczy to również funkcji, których Qiskit SDK nie może ładować z OpenQASM 3.
| Funkcja OpenQASM 3 | Funkcja Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Uwagi |
|---|---|---|---|---|
| komentarze | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| nazwy unicode | ✅ | ✅ | ||
qubit | Qubit i QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit i ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var i wyrażenia klasyczne | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var i wyrażenia klasyczne | 🟡 | ✅ | 4 |
float | expr.Var i wyrażenia klasyczne | 🟡 | 🟡 | 4 |
angle | Niejawnie, jako parametry Gate | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Składane jako stałe w parametrach Gate | ✅ | ✅ | |
| Aliasowanie: let | Rejestry kwantowe i klasyczne | 🟡 | ❌ | 5 |
| konkatenacja rejestrów | Rejestry kwantowe i klasyczne | 🟡 | ❌ | 5 |
| rzutowanie typów | expr.Cast wyrażenia klasyczne | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Czasy trwania delay i box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Wbudowany 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 | ✅ | ✅ | |
| operacje bitowe | 🟡 | ✅ | 4 | |
| operacje boolowskie | 🟡 | ✅ | 4 | |
| wyrażenia arytmetyczne | 🟡 | 🟡 | 4 | |
| porównania | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
pętle for | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
pętle while | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
podprogramy def (klasyczne) | ❌ | ❌ | ||
podprogramy def (kwantowe) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Uwagi
- Te funkcje programu OpenQASM 3 nie mają wpływu na wykonanie, a Qiskit usuwa je
podczas parsowania plików. Pliki używające tych funkcji można przesyłać, ale nie będą
miały żadnego efektu. W przypadku plików
include,stdgates.incjest obecnie obsługiwany jako dane wejściowe dla Qiskit, a wykonanie na Backend zawsze wymaga, aby Circuit były skompilowane do architektury zestawu instrukcji (ISA) Backend, gdzie plikiincludesą nieistotne.
- Qiskit SDK obsługuje parsowanie i zapis plików OpenQASM 3 z dowolnymi deklaracjami
qubit. Do wykonania na sprzęcie prawidłowe są tylko Circuit zdefiniowane w odniesieniu do fizycznych Qubit (na przykład$0). Qiskit SDK automatycznie generuje OpenQASM 3 w odniesieniu do obsługiwanych identyfikatorów fizycznych Qubit, jeśli Circuit był poddany Transpilerowi dla Backend z informacjami o rozmieszczeniu.
- Deklaracje zmiennych typu
bitibit[n]w Qiskit SDK odpowiadają deklaracjomClbitiClassicalRegister.
- Od lipca 2025 roku Qiskit SDK może reprezentować zmienne lokalne ograniczonego zestawu typów,
może reprezentować wiele operacji czasu wykonania na tych obiektach i obsługuje eksportowanie ich do OpenQASM 3.
Jednak Qiskit SDK (przez
qiskit-qasm3-importv0.6.0) nie obsługuje parsowania plików OpenQASM 3 zawierających deklaracje zmiennych i ma bardzo ograniczone wsparcie dla parsowania wyrażeń zmiennych. Ogólnie rzecz biorąc, większość tego, co Qiskit może reprezentować w swoim systemie wyrażeń, może być wykonana na odpowiednim sprzęcie obsługującym dynamiczne Circuit, nawet jeśli wyrażenia nie mogą być jeszcze parsowane przez Qiskit SDK. Najbardziej aktualne informacje znajdziesz w dokumentacji Qiskit modułuqiskit.circuit.classical.
- Qiskit SDK może reprezentować aliasowanie rejestrów zarówno dla rejestrów kwantowych, jak i klasycznych, ale
zdecydowanie odradza się używanie aliasowania rejestrów klasycznych. Większość wyrażeń na rejestrach klasycznych
nie działa z aliasami, a aliasowane rejestry klasyczne nie są obsługiwane do
wykonania na sprzęcie. Parser Qiskit OpenQASM 3 może rozwiązywać instrukcje aliasu
let, które wiążą wynik konkatenacji rejestrów.
- Qiskit SDK obsługuje jawne opóźnienia przez
QuantumCircuit.delay, a boksy Circuit (QuantumCircuit.box) mogą mieć również jawne czasy trwania. Czasy te mogą zawierać wyrażenia klasyczne zmiennychstretch. Qiskit SDK (od lipca 2025 roku przezqiskit-qasm3-importv0.6.0) nie obsługuje parsowania deklaracji typudurationanistretchz plików OpenQASM 3. Sprzęt ma ograniczone wsparcie dla czasów trwania zawierającychstretch.
- Circuit muszą być poddane Transpilerowi do ISA Backend, aby działać na sprzęcie IBM. Wyklucza to
niestandardowe definicje
gatei konstrukcje wyższego poziomu, takie jak modyfikatory Gate (np.inv @), z bezpośredniego wykonania na sprzęcie, ale procestranspilerozwiązuje je w prawidłowe Circuit ISA. Qiskit SDK (od lipca 2025 roku, przezqiskit-qasm3-importv0.6.0) będzie agresywnie oceniać modyfikatory Gate podczas parsowania, więc nie będą one widoczne w wynikowymQuantumCircuit, potencjalnie kosztem wydajności w czasie wykonania.
- Qiskit SDK może reprezentować strukturalny przepływ sterowania i eksportować go do OpenQASM 3. Instrukcje
continueibreakmogą technicznie być reprezentowane przez Qiskit, ale nie są dobrze obsługiwane nawet w samym Qiskit SDK. Pętleforw Qiskit v2.1.0 nie są dobrze obsługiwane. Zagnieżdżony przepływ sterowania (np.ifwewnątrz innegoiflub instrukcjaelse if) nie kwalifikuje się do wykonania na sprzęcie.
- Qiskit SDK obsługuje deklarowanie dowolnego obsługiwanego typu klasycznego jako zmiennej
inputw Circuit. Takie zmienne nie kwalifikują się obecnie do wykonania na sprzęcie i nie mogą być ładowane przez importer Qiskit OpenQASM 3. Niezwiązane obiektyParameterobecne wQuantumCircuitsą eksportowane jako zmienneinput float[64]. Niektóre opcje konfiguracji czasu wykonania mogą umożliwić wykonywanie takich Circuit na niektórych Backend.
Następne kroki
- Dowiedz się, jak generować kod OpenQASM za pomocą IBM Quantum Composer.
- Zobacz dokumentację referencyjną OpenQASM 3 Qiskit API.
- Zobacz dokumentację referencyjną OpenQASM 2 Qiskit API.
- Przejrzyj temat Weryfikuj swój program.
- Odwiedź specyfikację OpenQASM na żywo.