انتقل إلى المحتوى الرئيسي

جدول ميزات 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
castingتعبيرات expr.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 تمثيل تسمية السجلات لكل من السجلات الكمية والكلاسيكية، لكن يُنصح بشدة بعدم استخدام تسمية السجلات الكلاسيكية. معظم التعبيرات على السجلات الكلاسيكية لا تعمل مع الأسماء المستعارة، والسجلات الكلاسيكية المُسمّاة غير مدعومة للتنفيذ على العتاد. يمكن لمحلل Qiskit OpenQASM 3 حل عبارات let المستعارة التي تربط نتيجة دمج السجلات.
  1. يدعم Qiskit SDK التأخيرات الصريحة عبر QuantumCircuit.delay، ويمكن لصناديق Circuit (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 تحلّها إلى Circuit ISA صالحة. يقوم 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. هذه المتغيرات حالياً غير مؤهلة للتنفيذ على العتاد، ولا يمكن تحميلها بواسطة مستورد Qiskit OpenQASM 3. يتم تصدير كائنات Parameter غير المربوطة الموجودة في QuantumCircuit كمتغيرات input float[64]. يمكن لخيارات تكوين وقت التشغيل المعينة تمكين تنفيذ مثل هذه Circuit على بعض Backend.

الخطوات التالية

توصيات