جدول ميزات 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: يمكن تنفيذ دائرة تحتوي على ميزة Qiskit المقابلة بنجاح على العتاد من خلال IBM Quantum Compute Service.
معنى "الدعم الجزئي" يعتمد عادةً على الملاحظات المرتبطة.
الطريقة الأكثر شيوعاً لإرسال Circuit إلى IBM Quantum Compute Service هي إنشاء دائرة في واجهة Python الخاصة بـ Qiskit SDK. لا تحتاج Circuit المنشأة والمرسلة بهذه الطريقة إلى تحميلها من ملفات OpenQASM 3 إلى Qiskit SDK.
إذا كنت لا تستخدم OpenQASM 3 مباشرةً، يمكنك استخدام الميزات المدعومة للتمثيل في Qiskit SDK والتصدير إلى OpenQASM 3 والإرسال إلى IBM Quantum Compute Service بأمان. يشمل ذلك الميزات التي لا يمكن تحميلها بواسطة Qiskit SDK من OpenQASM 3.
| OpenQASM 3 Feature | Qiskit SDK feature | Qiskit SDK | IBM Quantum Compute Service | Notes |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit and QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit and ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var and classical expressions | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var and classical expressions | 🟡 | ✅ | 4 |
float | expr.Var and classical expressions | 🟡 | 🟡 | 4 |
angle | Implicit, as gate parameters | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constant-folded into gate parameters | ✅ | ✅ | |
| Aliasing: let | Quantum and classical registers | 🟡 | ❌ | 5 |
| register concatenation | Quantum and classical registers | 🟡 | ❌ | 5 |
| casting | expr.Cast classical expressions | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durations of delay and 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 العتاد المدعومة إذا تمت ترجمة الدائرة (transpile) لـ 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 تمثيل الأسماء المستعارة (aliasing) للسجلات لكل من السجلات الكمية والكلاسيكية، لكن
يُنصح بشدة بعدم استخدام الأسماء المستعارة للسجلات الكلاسيكية. معظم التعبيرات على السجلات الكلاسيكية
لا تعمل مع الأسماء المستعارة، والسجلات الكلاسيكية ذات الأسماء المستعارة غير مدعومة للتنفيذ
على العتاد. يمكن لمحلل 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.
- يجب ترجمة الدائرة (transpile) إلى ISA الخاص بالـ Backend للتشغيل على عتاد IBM. هذا يمنع
تعريفات
gateالمخصصة والبنى عالية المستوى مثل معدّلات Gate (مثلinv @) من أن تكون صالحة للتنفيذ على العتاد مباشرةً، لكن عمليةtranspileتحلّها إلى دائرة 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في دائرة. هذه المتغيرات حالياً غير مؤهلة للتنفيذ على العتاد، ولا يمكن تحميلها بواسطة مستورد Qiskit OpenQASM 3. يتم تصدير كائناتParameterغير المربوطة الموجودة فيQuantumCircuitكمتغيراتinput float[64]. يمكن لبعض خيارات تكوين وقت التشغيل أن تتيح تنفيذ مثل هذه الدوائر على بعض الـ Backends.
الخطوات التالية
- تعرّف على كيفية توليد شيفرة OpenQASM باستخدام IBM Quantum Composer.
- راجع مرجع واجهة برمجة تطبيقات OpenQASM 3 لـ Qiskit.
- راجع مرجع واجهة برمجة تطبيقات OpenQASM 2 لـ Qiskit.
- راجع موضوع تحقق من صحة برنامجك.
- زُر مواصفات OpenQASM الحية.