Przejdź do głównej treści

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 rozszerzenia qiskit-qasm3-import), reprezentowana w QuantumCircuit, i eksportowana do OpenQASM 3 przez qiskit.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.

uwaga

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 3Funkcja Qiskit SDKQiskit SDKIBM Quantum Compute ServiceUwagi
komentarze✅✅1
QASM vstring✅✅1
include🟡❌1, 7
nazwy unicode✅✅
qubitQubit i QuantumRegister✅🟡2
bitClbit i ClassicalRegister✅✅3
boolexpr.Var i wyrażenia klasyczne🟡✅4
int❌✅4
uintexpr.Var i wyrażenia klasyczne🟡✅4
floatexpr.Var i wyrażenia klasyczne🟡🟡4
angleNiejawnie, jako parametry Gate❌🟡4
complex❌❌4
const❌❌4
pi/π/tau/τ/euler/ℇSkładane jako stałe w parametrach Gate✅✅
Aliasowanie: letRejestry kwantowe i klasyczne🟡❌5
konkatenacja rejestrówRejestry kwantowe i klasyczne🟡❌5
rzutowanie typówexpr.Cast wyrażenia klasyczne🟡🟡4
duration❌❌
durationof❌❌
ns/µs/us/ms/s/dtCzasy trwania delay i box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
Wbudowany UUGate/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✅✅
operacje bitowe🟡✅4
operacje boolowskie🟡✅4
wyrażenia arytmetyczne🟡🟡4
porównania🟡✅4
ifQuantumCircuit.if_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
pętle forQuantumCircuit.for_loop🟡❌8
pętle whileQuantumCircuit.while_loop✅❌8
continueQuantumCircuit.continue_loop🟡❌8
breakQuantumCircuit.break_loop🟡❌8
return❌❌
extern❌❌
podprogramy def (klasyczne)❌❌
podprogramy def (kwantowe)❌❌
inputQuantumCircuit.add_input✅🟡4, 9
output❌❌

Uwagi​

  1. 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.inc jest 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 pliki include są nieistotne.
  1. 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.
  1. Deklaracje zmiennych typu bit i bit[n] w Qiskit SDK odpowiadają deklaracjom Clbit i ClassicalRegister.
  1. 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-import v0.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łu qiskit.circuit.classical.
  1. 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.
  1. 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 zmiennych stretch. Qiskit SDK (od lipca 2025 roku przez qiskit-qasm3-import v0.6.0) nie obsługuje parsowania deklaracji typu duration ani stretch z plików OpenQASM 3. Sprzęt ma ograniczone wsparcie dla czasów trwania zawierających stretch.
  1. Circuit muszą być poddane Transpilerowi do ISA Backend, aby działać na sprzęcie IBM. Wyklucza to niestandardowe definicje gate i konstrukcje wyższego poziomu, takie jak modyfikatory Gate (np. inv @), z bezpośredniego wykonania na sprzęcie, ale proces transpile rozwiązuje je w prawidłowe Circuit ISA. Qiskit SDK (od lipca 2025 roku, przez qiskit-qasm3-import v0.6.0) będzie agresywnie oceniać modyfikatory Gate podczas parsowania, więc nie będą one widoczne w wynikowym QuantumCircuit, potencjalnie kosztem wydajności w czasie wykonania.
  1. Qiskit SDK może reprezentować strukturalny przepływ sterowania i eksportować go do OpenQASM 3. Instrukcje continue i break mogą technicznie być reprezentowane przez Qiskit, ale nie są dobrze obsługiwane nawet w samym Qiskit SDK. Pętle for w Qiskit v2.1.0 nie są dobrze obsługiwane. Zagnieżdżony przepływ sterowania (np. if wewnątrz innego if lub instrukcja else if) nie kwalifikuje się do wykonania na sprzęcie.
  1. Qiskit SDK obsługuje deklarowanie dowolnego obsługiwanego typu klasycznego jako zmiennej input w Circuit. Takie zmienne nie kwalifikują się obecnie do wykonania na sprzęcie i nie mogą być ładowane przez importer Qiskit OpenQASM 3. Niezwiązane obiekty Parameter obecne w QuantumCircuit są eksportowane jako zmienne input float[64]. Niektóre opcje konfiguracji czasu wykonania mogą umożliwić wykonywanie takich Circuit na niektórych Backend.

Następne kroki​

Rekomendacje