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 vQuantumCircuit, 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.
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 3 | Funkce Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Poznámky |
|---|---|---|---|---|
| komentáře | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode názvy | ✅ | ✅ | ||
qubit | Qubit a QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit a ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var a klasické výrazy | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var a klasické výrazy | 🟡 | ✅ | 4 |
float | expr.Var a klasické výrazy | 🟡 | 🟡 | 4 |
angle | Implicitní, jako parametry Gate | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Složeno do parametrů Gate | ✅ | ✅ | |
| Aliasing: let | Kvantové 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/dt | Délky trvání delay a box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Vestavěný 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 | ✅ | ✅ | |
| bitové operace | 🟡 | ✅ | 4 | |
| booleovské operace | 🟡 | ✅ | 4 | |
| aritmetické výrazy | 🟡 | 🟡 | 4 | |
| porovnání | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
smyčky for | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
smyčky while | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
podprogramy def (klasické) | ❌ | ❌ | ||
podprogramy def (kvantové) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Poznámky
- 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
includejestdgates.incmomentá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 souboryincludenejsou relevantní.
- 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í.
- Deklarace proměnných typu
bitabit[n]v Qiskit SDK odpovídají deklaracímClbitaClassicalRegister.
- 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-importv0.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 modulqiskit.circuit.classical.
- 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ů.
- Qiskit SDK podporuje explicitní zpoždění prostřednictvím
QuantumCircuit.delaya circuit boxy (QuantumCircuit.box) mohou mít také explicitní délky trvání. Tyto délky mohou zahrnovat klasické výrazy proměnnýchstretch. Qiskit SDK (ke dni července 2025 prostřednictvímqiskit-qasm3-importv0.6.0) nepodporuje parsování deklarací typudurationnebostretchze souborů OpenQASM 3. Hardware má omezenou podporu pro délky trvání včetněstretch.
- Circuits musí být transpilovány do ISA Backend, aby mohly běžet na hardwaru IBM. To vylučuje
vlastní definice
gatea konstrukce vyšší úrovně, jako jsou modifikátory Gate (napříkladinv @), z toho, aby byly platné pro přímé spuštění na hardwaru, ale procestranspileje převede na platné ISA circuits. Qiskit SDK (ke dni července 2025 prostřednictvímqiskit-qasm3-importv0.6.0) bude během parsování eagerly vyhodnocovat modifikátory Gate, takže nebudou patrné ve výslednémQuantumCircuit, potenciálně s dopadem na výkon za běhu.
- Qiskit SDK dokáže reprezentovat strukturované řízení toku a exportovat ho do OpenQASM 3. Příkazy
continueabreakmohou být technicky reprezentovány Qiskit, ale nejsou dobře podporovány ani v rámci Qiskit SDK. Smyčkyforve Qiskit v2.1.0 nejsou dobře podporovány. Vnořené řízení toku (napříkladifuvnitř jinéhoifnebo příkazelse if) není způsobilé pro spuštění na hardwaru.
- Qiskit SDK podporuje deklarování libovolného podporovaného klasického typu jako proměnné
inputv 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é objektyParameterpřítomné vQuantumCircuitjsou 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
- Nauč se generovat kód OpenQASM pomocí IBM Quantum Composer.
- Viz referenci OpenQASM 3 Qiskit API.
- Viz referenci OpenQASM 2 Qiskit API.
- Projdi si téma Ověření programu.
- Navštiv živou specifikaci OpenQASM.