Перейти до основного вмісту

Таблиця можливостей 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 SDKQiskit SDKIBM Qiskit RuntimeПримітки
comments1
QASM vstring1
include🟡1, 7
unicode names
qubitQubit та QuantumRegister🟡2
bitClbit та ClassicalRegister3
boolexpr.Var та класичні вирази🟡4
int4
uintexpr.Var та класичні вирази🟡4
floatexpr.Var та класичні вирази🟡🟡4
angleНеявно, як параметри Gate🟡4
complex4
const4
pi/π/tau/τ/euler/Згортається в параметри Gate
Aliasing: letКвантові та класичні регістри🟡5
register concatenationКвантові та класичні регістри🟡5
castingexpr.Cast класичні вирази🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtТривалості delay та box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
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_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
for loopsQuantumCircuit.for_loop🟡8
while loopsQuantumCircuit.while_loop8
continueQuantumCircuit.continue_loop🟡8
breakQuantumCircuit.break_loop🟡8
return
extern
def subroutines (classical)
def subroutines (quantum)
inputQuantumCircuit.add_input🟡4, 9
output

Примітки

  1. Ці можливості програми OpenQASM 3 не впливають на виконання, і Qiskit видаляє їх під час розбору файлів. Файли, що їх використовують, можуть бути подані, але вони не матимуть ефекту. Для файлів include наразі stdgates.inc підтримується як вхідні дані для Qiskit, а виконання на Backend завжди вимагає, щоб Circuit були скомпільовані до архітектури набору інструкцій (ISA) Backend, де файли include не мають значення.
  1. Qiskit SDK підтримує розбір та експорт файлів OpenQASM 3 з будь-якими оголошеннями qubit. Для виконання на апаратному забезпеченні дійсними є лише Circuit, визначені через апаратні Qubit (наприклад, $0). Qiskit SDK автоматично виводить OpenQASM 3 з використанням підтримуваних ідентифікаторів апаратних Qubit, якщо Circuit був транспільований для Backend з інформацією про розміщення.
  1. Оголошення змінних типів bit та bit[n] у Qiskit SDK відповідають оголошенням Clbit та ClassicalRegister.
  1. Станом на липень 2025 року Qiskit SDK може представляти локальні змінні обмеженого набору типів, може представляти багато операцій часу виконання над цими об'єктами та підтримує їх експорт в OpenQASM 3. Однак Qiskit SDK (через qiskit-qasm3-import v0.6.0) не підтримує розбір файлів OpenQASM 3, що містять оголошення змінних, і має дуже обмежену підтримку розбору виразів змінних. Загалом, більшість того, що Qiskit може представити у своїй системі виразів, може бути виконано на відповідному апаратному забезпеченні для динамічних Circuit, навіть якщо вираз ще не може бути розібраний Qiskit SDK. Дивись документацію Qiskit по модулю qiskit.circuit.classical для найактуальнішої інформації.
  1. Qiskit SDK може представляти псевдоніми регістрів як для квантових, так і для класичних регістрів, але використання псевдонімів класичних регістрів настійливо не рекомендується. Більшість виразів над класичними регістрами не працюють з псевдонімами, і класичні регістри з псевдонімами не підтримуються для виконання на апаратному забезпеченні. Парсер OpenQASM 3 у Qiskit може розв'язувати оператори псевдонімів let, які прив'язують результат конкатенації регістрів.
  1. Qiskit SDK підтримує явні затримки через QuantumCircuit.delay, а Circuit boxes (QuantumCircuit.box) також можуть мати явні тривалості. Ці тривалості можуть включати класичні вирази змінних stretch. Qiskit SDK (станом на липень 2025 року через qiskit-qasm3-import v0.6.0) не підтримує розбір оголошень типу duration або типу stretch з файлів OpenQASM 3. Апаратне забезпечення має обмежену підтримку тривалостей із stretch.
  1. Circuit повинні бути транспільовані до ISA Backend для запуску на апаратному забезпеченні IBM. Це виключає користувацькі визначення gate та конструкції вищого рівня, такі як модифікатори Gate (наприклад, inv @), з безпосереднього виконання на апаратному забезпеченні, але процес transpile перетворює їх у дійсні ISA Circuit. Qiskit SDK (станом на липень 2025 року через qiskit-qasm3-import v0.6.0) буде негайно обчислювати модифікатори Gate під час розбору, тому вони не будуть видимі у результуючому QuantumCircuit, що потенційно впливає на продуктивність.
  1. Qiskit SDK може представляти структурований потік керування та експортувати його в OpenQASM 3. Оператори continue та break технічно можуть бути представлені Qiskit, але мають погану підтримку навіть у межах Qiskit SDK. Цикли for у Qiskit v2.1.0 мають погану підтримку. Вкладений потік керування (наприклад, if всередині іншого if або оператор else if) не підходить для виконання на апаратному забезпеченні.
  1. Qiskit SDK підтримує оголошення будь-якого підтримуваного класичного типу як змінної input для Circuit. Такі змінні наразі не підходять для виконання на апаратному забезпеченні та не можуть бути завантажені імпортером OpenQASM 3 у Qiskit. Незв'язані об'єкти Parameter, присутні у QuantumCircuit, експортуються як змінні input float[64]. Певні параметри конфігурації часу виконання можуть дозволити виконання таких Circuit на деяких Backend.

Наступні кроки

Рекомендації