Таблиця можливостей OpenQASM 3
Нижче наведено список мовних можливостей OpenQASM 3.
Для більш детальної інформації про ці можливості дивись OpenQASM 3.X Live Specification.
Ключ:
-
❌ Не підтримується
-
🟡 Часткова підтримка
-
✅ Підтримується
Значення позначки повної підтримки ("підтримується") залежить від стовпця:
-
Qiskit SDK: Можливість може бути розібрана за допомогою
qiskit.qasm3.loads(з використанням розширенняqiskit-qasm3-import), представлена уQuantumCircuit, та експортована в OpenQASM 3 за допомогоюqiskit.qasm3.dumps. -
IBM Quantum Compute Service: Circuit, що містить відповідну можливість Qiskit, може бути успішно виконаний на апаратному забезпеченні через IBM Quantum Compute Service.
Значення "часткова підтримка" зазвичай залежить від пов'язаних приміток.
Найпоширеніший спосіб подання Circuit до IBM Quantum Compute Service — це створення Circuit у Python-інтерфейсі Qiskit SDK. Circuit, створені та подані таким чином, не потребують завантаження з файлів OpenQASM 3 у Qiskit SDK.
Якщо ти не використовуєш OpenQASM 3 безпосередньо, ти можеш спокійно використовувати можливості, які підтримуються для представлення у Qiskit SDK, експорту в OpenQASM 3 та подання до IBM Quantum Compute Service. Це включає можливості, які не можуть бути завантажені Qiskit SDK з 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 | ❌ | ❌ |
Примітки
- Ці можливості програми OpenQASM 3 не впливають на виконання, і Qiskit видаляє їх
під час розбору файлів. Файли, що їх використовують, можуть бути подані, але вони не матимуть
ефекту. Для файлів
includeнаразіstdgates.incпідтримується як вхідні дані для Qiskit, а виконання на Backend завжди вимагає, щоб Circuit були скомпільовані до архітектури набору інструкцій (ISA) Backend, де файлиincludeне мають значення.
- Qiskit SDK підтримує розбір та експорт файлів OpenQASM 3 з будь-якими оголошеннями
qubit. Для виконання на апаратному забезпеченні дійсними є лише Circuit, визначені через апаратні qubit (наприклад,$0). Qiskit SDK автоматично виводить OpenQASM 3 з використанням підтримуваних ідентифікаторів апаратних qubit, якщо Circuit був транспільований для Backend з інформацією про розміщення.
- Оголошення змінних типів
bitтаbit[n]у Qiskit SDK відповідають оголошеннямClbitтаClassicalRegister.
- Станом на липень 2025 року Qiskit SDK може представляти локальні змінні обмеженого набору типів,
може представляти багато операцій часу виконання над цими об'єктами та підтримує їх експорт в OpenQASM 3.
Однак Qiskit SDK (через
qiskit-qasm3-importv0.6.0) не підтримує розбір файлів OpenQASM 3, що містять оголошення змінних, і має дуже обмежену підтримку розбору виразів змінних. Загалом, більшість того, що Qiskit може представити у своїй системі виразів, може бути виконано на відповідному апаратному забезпеченні для динамічних Circuit, навіть якщо вираз ще не може бути розібраний Qiskit SDK. Дивись документацію Qiskit по модулюqiskit.circuit.classicalдля найактуальнішої інформації.
- Qiskit SDK може представляти псевдоніми регістрів як для квантових, так і для класичних регістрів, але
використання псевдонімів класичних регістрів настійно не рекомендується. Більшість виразів над класичними
регістрами не працюють з псевдонімами, і класичні регістри з псевдонімами не підтримуються для
виконання на апаратному забезпеченні. Парсер OpenQASM 3 у Qiskit може розв'язувати оператори псевдонімів
let, які прив'язують результат конкатенації регістрів.
- Qiskit SDK підтримує явні затримки через
QuantumCircuit.delay, а Circuit boxes (QuantumCircuit.box) також можуть мати явні тривалості. Ці тривалості можуть включати класичні вирази зміннихstretch. Qiskit SDK (станом на липень 2025 року черезqiskit-qasm3-importv0.6.0) не підтримує розбір оголошень типуdurationабо типуstretchз файлів OpenQASM 3. Апаратне забезпечення має обмежену підтримку тривалостей ізstretch.
- Circuit повинні бути транспільовані до ISA Backend для запуску на апаратному забезпеченні IBM. Це виключає
користувацькі визначення
gateта конструкції вищого рівня, такі як модифікатори Gate (наприклад,inv @), з безпосереднього виконання на апаратному забезпеченні, але процесtranspileперетворює їх у дійсні ISA Circuit. Qiskit SDK (станом на липень 2025 року черезqiskit-qasm3-importv0.6.0) буде негайно обчислювати модифікатори Gate під час розбору, тому вони не будуть видимі у результуючомуQuantumCircuit, що потенційно впливає на продуктивність.
- Qiskit SDK може представляти структурований потік керування та експортувати його в OpenQASM 3. Оператори
continueтаbreakтехнічно можуть бути представлені Qiskit, але мають погану підтримку навіть у межах Qiskit SDK. Циклиforу Qiskit v2.1.0 мають погану підтримку. Вкладений потік керування (наприклад,ifвсередині іншогоifабо операторelse if) не підходить для виконання на апаратному забезпеченні.
- Qiskit SDK підтримує оголошення будь-якого підтримуваного класичного типу як змінної
inputдля Circuit. Такі змінні наразі не підходять для виконання на апаратному забезпеченні та не можуть бути завантажені імпортером OpenQASM 3 у Qiskit. Незв'язані об'єктиParameter, присутні уQuantumCircuit, експортуються як змінніinput float[64]. Певні параметри конфігурації часу виконання можуть дозволити виконання таких Circuit на деяких Backend.
Наступні кроки
- Дізнайся, як генерувати код OpenQASM за допомогою IBM Quantum Composer.
- Перегляньте довідник OpenQASM 3 Qiskit API.
- Перегляньте довідник OpenQASM 2 Qiskit API.
- Перегляньте тему Verify your program.
- Відвідай OpenQASM Live Specification.