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 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.

uwaga

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 3Funkcja Qiskit SDKQiskit SDKIBM Qiskit RuntimeUwagi
komentarze1
QASM vstring1
include🟡1, 7
nazwy unicode
qubitQubit i QuantumRegister🟡2
bitClbit i ClassicalRegister3
boolexpr.Var i wyrażenia klasyczne🟡4
int4
uintexpr.Var i wyrażenia klasyczne🟡4
floatexpr.Var i wyrażenia klasyczne🟡🟡4
angleNiejawnie, jako parametry Gate🟡4
complex4
const4
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 box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
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_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
pętle forQuantumCircuit.for_loop🟡8
pętle whileQuantumCircuit.while_loop8
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