Přeskočit na hlavní obsah

Tabulka funkcí OpenQASM 3

Níže je seznam jazykových funkcí OpenQASM 3.

Více informací o těchto možnostech najdeš v živé specifikaci OpenQASM 3.X.

Legenda:

  • ❌ Nepodporováno
  • 🟡 Částečná podpora
  • ✅ Podporováno

Význam úplného označení „podporováno" závisí na sloupci:

  • Qiskit SDK: Funkci lze načíst pomocí qiskit.qasm3.loads (s využitím rozšíření qiskit-qasm3-import), reprezentovat v QuantumCircuit, a exportovat do OpenQASM 3 pomocí qiskit.qasm3.dumps.

  • IBM Qiskit Runtime: Circuit obsahující odpovídající funkci Qiskit lze úspěšně spustit na hardwaru prostřednictvím IBM® Qiskit Runtime.

Význam „částečné podpory" obvykle závisí na odkazovaných poznámkách.

poznámka

Nejběžnější způsob odesílání circuits do IBM Qiskit Runtime je vytvoření circuit v rozhraní Qiskit SDK v Pythonu. Circuits sestavené a odeslané tímto způsobem není potřeba načítat ze souborů OpenQASM 3 do Qiskit SDK.

Pokud OpenQASM 3 přímo nepoužíváš, můžeš bezpečně používat funkce, které jsou podporovány pro reprezentaci v Qiskit SDK, export do OpenQASM 3 a odesílání do IBM Qiskit Runtime. Patří sem i funkce, které Qiskit SDK nemůže načíst z OpenQASM 3.

Funkce OpenQASM 3Funkce Qiskit SDKQiskit SDKIBM Qiskit RuntimePoznámky
komentáře1
QASM vstring1
include🟡1, 7
unicode názvy
qubitQubit a QuantumRegister🟡2
bitClbit a ClassicalRegister3
boolexpr.Var a klasické výrazy🟡4
int4
uintexpr.Var a klasické výrazy🟡4
floatexpr.Var a klasické výrazy🟡🟡4
angleImplicitní, jako parametry Gate🟡4
complex4
const4
pi/π/tau/τ/euler/Složeno do parametrů Gate
Aliasing: letKvantové a klasické registry🟡5
zřetězení registrůKvantové a klasické registry🟡5
přetypováníexpr.Cast klasické výrazy🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtDélky trvání delay a box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
Vestavěný 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
bitové operace🟡4
booleovské operace🟡4
aritmetické výrazy🟡🟡4
porovnání🟡4
ifQuantumCircuit.if_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
smyčky forQuantumCircuit.for_loop🟡8
smyčky whileQuantumCircuit.while_loop8
continueQuantumCircuit.continue_loop🟡8
breakQuantumCircuit.break_loop🟡8
return
extern
podprogramy def (klasické)
podprogramy def (kvantové)
inputQuantumCircuit.add_input🟡4, 9
output

Poznámky

  1. Tyto programové funkce OpenQASM 3 nemají žádný vliv na spuštění a Qiskit je při parsování souborů odstraňuje. Soubory, které je používají, lze odeslat, ale nebudou mít žádný efekt. Pro soubory include je stdgates.inc momentálně podporován jako vstup do Qiskit, a spuštění na hardwaru vždy vyžaduje, aby byly circuits zkompilovány do sady instrukcí Instruction Set Architecture (ISA) daného Backend, kde soubory include nejsou relevantní.
  1. Qiskit SDK podporuje parsování a ukládání souborů OpenQASM 3 s libovolnými deklaracemi qubit. Pro spuštění na hardwaru jsou platné pouze circuits definované pomocí hardwarových qubitů (například $0). Qiskit SDK automaticky generuje OpenQASM 3 ve formě podporovaných identifikátorů hardwarových qubitů, pokud byl circuit transpilován pro Backend s informacemi o rozložení.
  1. Deklarace proměnných typu bit a bit[n] v Qiskit SDK odpovídají deklaracím Clbit a ClassicalRegister.
  1. Od července 2025 může Qiskit SDK reprezentovat lokální proměnné omezeného okruhu typů, reprezentovat mnoho operací za běhu na těchto objektech a podporovat jejich výstup do OpenQASM 3. Qiskit SDK (prostřednictvím qiskit-qasm3-import v0.6.0) však nepodporuje parsování souborů OpenQASM 3 obsahujících deklarace proměnných a má velmi omezenou podporu pro parsování výrazů proměnných. Obecně platí, že většinu toho, co Qiskit dokáže reprezentovat ve svém systému výrazů, lze spustit na vhodném hardwaru pro dynamické circuits, i když výraz zatím Qiskit SDK nemůže parsovat. Nejnovější informace najdeš v dokumentaci Qiskit pro modul qiskit.circuit.classical.
  1. Qiskit SDK dokáže reprezentovat aliasing registrů pro kvantové i klasické registry, ale použití aliasingu klasických registrů se silně nedoporučuje. Většina výrazů na klasických registrech nefunguje s aliasy a aliasované klasické registry nejsou podporovány pro spuštění na hardwaru. Parser OpenQASM 3 v Qiskit dokáže vyhodnotit aliasové příkazy let, které vážou výsledek zřetězení registrů.
  1. Qiskit SDK podporuje explicitní zpoždění prostřednictvím QuantumCircuit.delay a circuit boxy (QuantumCircuit.box) mohou mít také explicitní délky trvání. Tyto délky mohou zahrnovat klasické výrazy proměnných stretch. Qiskit SDK (ke dni července 2025 prostřednictvím qiskit-qasm3-import v0.6.0) nepodporuje parsování deklarací typu duration nebo stretch ze souborů OpenQASM 3. Hardware má omezenou podporu pro délky trvání včetně stretch.
  1. Circuits musí být transpilovány do ISA Backend, aby mohly běžet na hardwaru IBM. To vylučuje vlastní definice gate a konstrukce vyšší úrovně, jako jsou modifikátory Gate (například inv @), z toho, aby byly platné pro přímé spuštění na hardwaru, ale proces transpile je převede na platné ISA circuits. Qiskit SDK (ke dni července 2025 prostřednictvím qiskit-qasm3-import v0.6.0) bude během parsování eagerly vyhodnocovat modifikátory Gate, takže nebudou patrné ve výsledném QuantumCircuit, potenciálně s dopadem na výkon za běhu.
  1. Qiskit SDK dokáže reprezentovat strukturované řízení toku a exportovat ho do OpenQASM 3. Příkazy continue a break mohou být technicky reprezentovány Qiskit, ale nejsou dobře podporovány ani v rámci Qiskit SDK. Smyčky for ve Qiskit v2.1.0 nejsou dobře podporovány. Vnořené řízení toku (například if uvnitř jiného if nebo příkaz else if) není způsobilé pro spuštění na hardwaru.
  1. Qiskit SDK podporuje deklarování libovolného podporovaného klasického typu jako proměnné input v circuit. Takové proměnné momentálně nejsou způsobilé pro spuštění na hardwaru a nemohou být načteny importérem OpenQASM 3 pro Qiskit. Nevázané objekty Parameter přítomné v QuantumCircuit jsou exportovány jako proměnné input float[64]. Určité možnosti konfigurace za běhu umožňují spuštění takových circuits na některých Backends.

Další kroky

Doporučení