جدول ميزات 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 تمثيل تسمية السجلات لكل من السجلات الكمية والكلاسيكية، لكن
يُنصح بشدة بعدم استخدام تسمية السجلات الكلاسيكية. معظم التعبيرات على السجلات الكلاسيكية
لا تعمل مع الأسماء المستعارة، والسجلات الكلاسيكية المُسمّاة غير مدعومة للتنفيذ
على العتاد. يمكن لمحلل Qiskit OpenQASM 3 حل عبارات
letالمستعارة التي تربط نتيجة دمج السجلات.
- يدعم Qiskit SDK التأخيرات الصريحة عبر
QuantumCircuit.delay، ويمكن لصناديق Circuit (QuantumCircuit.box) أن تحتوي أيضاً على مدد صريحة. يمكن أن تتضمن هذه المدد تعبيرات كلاسيكية لمتغيراتstretch. لا يدعم Qiskit SDK (اعتباراً من يوليو 2025 من خلالqiskit-qasm3-importv0.6.0) تحليل تصريحات من نوعdurationأو نوعstretchمن ملفات OpenQASM 3. العتاد لديه دعم محدود للمدد التي تتضمنstretch.
- يجب ترجمة Circuit إلى ISA الخاص بالـ Backend للتشغيل على عتاد IBM. هذا يمنع
تعريفات
gateالمخصصة والبنى عالية المستوى مثل معدّلات Gate (مثلinv @) من أن تكون صالحة للتنفيذ على العتاد مباشرةً، لكن عمليةtranspileتحلّها إلى Circuit ISA صالحة. يقوم 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. هذه المتغيرات حالياً غير مؤهلة للتنفيذ على العتاد، ولا يمكن تحميلها بواسطة مستورد Qiskit OpenQASM 3. يتم تصدير كائناتParameterغير المربوطة الموجودة فيQuantumCircuitكمتغيراتinput float[64]. يمكن لخيارات تكوين وقت التشغيل المعينة تمكين تنفيذ مثل هذه Circuit على بعض Backend.
الخطوات التالية
- تعلّم كيفية إنشاء كود OpenQASM باستخدام IBM Quantum Composer.
- راجع مرجع OpenQASM 3 Qiskit API.
- راجع مرجع OpenQASM 2 Qiskit API.
- راجع موضوع التحقق من برنامجك.
- زُر OpenQASM Live Specification.