Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Таблиця можливостей 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 FeatureQiskit SDK featureQiskit SDKIBM Quantum Compute ServiceNotes
comments✅✅1
QASM vstring✅✅1
include🟡❌1, 7
unicode names✅✅
qubitQubit and QuantumRegister✅🟡2
bitClbit and ClassicalRegister✅✅3
boolexpr.Var and classical expressions🟡✅4
int❌✅4
uintexpr.Var and classical expressions🟡✅4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters❌🟡4
complex❌❌4
const❌❌4
pi/π/tau/τ/euler/ℇConstant-folded into gate parameters✅✅
Aliasing: letQuantum and classical registers🟡❌5
register concatenationQuantum and classical registers🟡❌5
castingexpr.Cast classical expressions🟡🟡4
duration❌❌
durationof❌❌
ns/µs/us/ms/s/dtDurations of delay and box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
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_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
for loopsQuantumCircuit.for_loop🟡❌8
while loopsQuantumCircuit.while_loop✅❌8
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.

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

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