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 Quantum Compute Service: obwód zawierający odpowiednią funkcję Qiskit może zostać pomyślnie wykonany na sprzęcie za pośrednictwem IBM Quantum Compute Service.
Znaczenie „częściowego wsparcia" zazwyczaj zależy od podlinkowanych uwag.
Najczęstszą metodą przesyłania Circuit do IBM Quantum Compute Service 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 Quantum Compute Service. 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 Quantum Compute Service | 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.