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 Quantum Compute Service: Okruh obsahující odpovídající funkci Qiskit lze úspěšně spustit na hardwaru prostřednictvím IBM Quantum Compute Service.

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 Quantum Compute Service 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 Quantum Compute Service. Patří sem i funkce, které Qiskit SDK nemůže načíst z OpenQASM 3.

OpenQASM 3 FeatureQiskit SDK featureQiskit SDKIBM Quantum Compute ServiceNotes
comments✅✅1
QASM vstring✅✅1
include🟡❌1, 7
unicode names✅✅
qubitQubit and QuantumRegister✅🟡2
bitClbit and ClassicalRegister✅✅3
boolexpr.Var and classical expressions🟡✅4
int❌✅4
uintexpr.Var and classical expressions🟡✅4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters❌🟡4
complex❌❌4
const❌❌4
pi/π/tau/τ/euler/ℇConstant-folded into gate parameters✅✅
Aliasing: letQuantum and classical registers🟡❌5
register concatenationQuantum and classical registers🟡❌5
castingexpr.Cast classical expressions🟡🟡4
duration❌❌
durationof❌❌
ns/µs/us/ms/s/dtDurations of delay and box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
Built-in 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✅✅
bit operations🟡✅4
boolean operations🟡✅4
arithmetic expressions🟡🟡4
comparisons🟡✅4
ifQuantumCircuit.if_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
for loopsQuantumCircuit.for_loop🟡❌8
while loopsQuantumCircuit.while_loop✅❌8
continueQuantumCircuit.continue_loop🟡❌8
breakQuantumCircuit.break_loop🟡❌8
return❌❌
extern❌❌
def subroutines (classical)❌❌
def subroutines (quantum)❌❌
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í