Таблиця можливостей OpenQASM 3
Нижче наведено список мовних можливостей OpenQASM 3.
Для більш детальної інформації про ці можливості дивись OpenQASM 3.X Live Specification.
Ключ:
- ❌ Не підтримується
- 🟡 Часткова підтримка
- ✅ Підтримується
Значення позначки "підтримується" залежить від стовпця:
-
Qiskit SDK: Можливість може бути розібрана за допомогою
qiskit.qasm3.loads(з вик ористанням розширенняqiskit-qasm3-import), представлена уQuantumCircuit, та експортована в OpenQASM 3 за допомогоюqiskit.qasm3.dumps. -
IBM Qiskit Runtime: Circuit, що містить відповідну можливість Qiskit, може бути успішно виконаний на апаратному забезпеченні через IBM® Qiskit Runtime.
Значення "часткова підтримка" зазвичай залежить від пов'язаних приміток.
Найпоширеніший спосіб подання Circuit до IBM Qiskit Runtime — це створення Circuit у Python-інтерфейсі Qiskit SDK. Circuit, створені та подані таким чином, не потребують завантаження з файлів OpenQASM 3 у Qiskit SDK.
Якщо ти не використовуєш OpenQASM 3 безпосередньо, ти можеш спокійно використовувати можливості, які підтримуються для представлення у Qiskit SDK, експорту в OpenQASM 3 та подання до IBM Qiskit Runtime. Це включає можливості, які не можуть бути завантажені Qiskit SDK з OpenQASM 3.
| Можливість OpenQASM 3 | Можливість Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Примітки |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit та QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit та ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var та класичні вирази | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var та класичні вирази | 🟡 | ✅ | 4 |
float | expr.Var та класичні вирази | 🟡 | 🟡 | 4 |
angle | Неявно, як параметри Gate | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Згортається в параметри Gate | ✅ | ✅ | |
| Aliasing: let | Квантові та класичні регістри | 🟡 | ❌ | 5 |
| register concatenation | Квантові та класичні регістри | 🟡 | ❌ | 5 |
| casting | expr.Cast класичні вирази | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Тривалості delay та 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.
- Ознайомся з темою Перевірка програми.
- Відвідай OpenQASM Live Specification.