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 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.
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 Feature | Qiskit SDK feature | Qiskit SDK | IBM Quantum Compute Service | Notes |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit and QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit and ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var and classical expressions | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var and classical expressions | 🟡 | ✅ | 4 |
float | expr.Var and classical expressions | 🟡 | 🟡 | 4 |
angle | Implicit, as gate parameters | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constant-folded into gate parameters | ✅ | ✅ | |
| Aliasing: let | Quantum and classical registers | 🟡 | ❌ | 5 |
| register concatenation | Quantum and classical registers | 🟡 | ❌ | 5 |
| casting | expr.Cast classical expressions | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durations of delay and box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Built-in 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 | ✅ | ✅ | |
| bit operations | 🟡 | ✅ | 4 | |
| boolean operations | 🟡 | ✅ | 4 | |
| arithmetic expressions | 🟡 | 🟡 | 4 | |
| comparisons | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for loops | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while loops | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def subroutines (classical) | ❌ | ❌ | ||
def subroutines (quantum) | ❌ | ❌ | ||
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.