טבלת תכונות OpenQASM 3
להלן רשימה של תכונות השפה OpenQASM 3.
לפרטים נוספים על יכולות אלה, ראו את המפרט החי של OpenQASM 3.X.
מקרא:
- ❌ לא נתמך
- 🟡 תמיכה חלקית
- ✅ נתמך
המשמעות של סימן "נתמך" מלא תלויה בעמודה:
-
Qiskit SDK: ניתן לפרסר את התכונה באמצעות
qiskit.qasm3.loads(על ידי שימוש בתוסףqiskit-qasm3-import), לייצג אותה ב-QuantumCircuit, ולייצא ל-OpenQASM 3 באמצעותqiskit.qasm3.dumps. -
IBM Qiskit Runtime: Circuit המכיל את תכונת Qiskit המתאימה יכול להתבצע בהצלחה על חומרה דרך IBM® Qiskit Runtime.
המשמעות של "תמיכה חלקית" תלויה בדרך כלל בהערות המקושרות.
השיטה הנפוצה ביותר להגשת Circuits ל-IBM Qiskit Runtime היא ליצור את ה-Circuit בממשק Python-space של Qiskit SDK. Circuits שנבנים ומוגשים בצורה זו אינם צריכים להיטען מקבצי 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 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 דורש תמיד שה-Circuits יהיו מקומפלים ל-Instruction Set Architecture (ISA) של ה-Backend, שם קבציincludeאינם רלוונטיים.
- Qiskit SDK תומך בפרסור ושמירת קבצי OpenQASM 3 עם כל הצהרות
qubit. לביצוע על חומרה, רק Circuits המוגדרים במונחים של Qubits חומרתיים (לדוגמה,$0) תקפים. Qiskit SDK מייצר אוטומטית OpenQASM 3 במונחים של מזהי ה-Qubit החומרתיים הנתמכים אם ה-Circuit עבר Transpile עבור Backend עם מידע פריסה.
- הצהרות משתנים מסוג
bitו-bit[n]ב-Qiskit SDK מתאימות להצהרותClbitו-ClassicalRegister.
- החל מיולי 2025, Qiskit SDK יכול לייצג משתנים מקומיים ממגוון מוגבל של סוגים, יכול לייצג פעולות runtime רבות על אובייקטים אלה, ותומך בייצואם ל-OpenQASM 3. עם זאת, Qiskit SDK (דרך
qiskit-qasm3-importv0.6.0) אינו תומך בפרסור קבצי OpenQASM 3 המכילים הצהרות משתנים, ויש לו תמיכה מוגבלת מאוד בפרסור ביטויי משתנים. באופן כללי, רוב מה שניתן לייצג ב-Qiskit במערכת הביטויים שלו ניתן לביצוע על חומרת Circuits דינמית מתאימה, אפילו אם הביטוי לא ניתן עדיין לפרסור ב-Qiskit SDK. ראו את תיעוד Qiskit של המודולqiskit.circuit.classicalלקבלת המידע העדכני ביותר.
- Qiskit SDK יכול לייצג כינוי רגיסטר הן לרגיסטרים קוונטיים והן לקלאסיים, אך מאוד מומלץ להימנע משימוש בכינוי של רגיסטרים קלאסיים. רוב הביטויים על רגיסטרים קלאסיים אינם עובדים עם כינויים, ורגיסטרים קלאסיים עם כינוי אינם נתמכים לביצוע על חומרה. הפרסר OpenQASM 3 של Qiskit יכול לפתור הצהרות כינוי
letשמקשרות את תוצאת שרשור רגיסטרים.
- Qiskit SDK תומך בעיכובים מפורשים דרך
QuantumCircuit.delay, ו-Circuit boxes (QuantumCircuit.box) יכולים גם כן לקבל משכי זמן מפורשים. משכי זמן אלה יכולים לכלול ביטויים קלאסיים של משתניstretch. Qiskit SDK (החל מיולי 2025 דרךqiskit-qasm3-importv0.6.0) אינו תומך בפרסור הצהרות מסוגdurationאו סוגstretchמקבצי OpenQASM 3. לחומרה יש תמיכה מוגבלת במשכי זמן הכולליםstretch.
- יש לבצע Transpile ל-Circuits ל-ISA של ה-Backend כדי להריץ אותם על חומרת IBM. דבר זה מונע מהגדרות
gateמותאמות אישית ומבנים ברמה גבוהה יותר כמו מגדלי Gate (כגוןinv @) להיות תקפים לביצוע על חומרה ישירות, אך תהליך ה-transpileפותר אותם ל-Circuits ISA תקפים. Qiskit SDK (החל מיולי 2025, דרךqiskit-qasm3-importv0.6.0) יעריך מגדלי Gate בנחישות במהלך הפרסור, כך שאלה לא יהיו גלויים ב-QuantumCircuitהמתקבל, עם עלות runtime פוטנציאלית.
- Qiskit SDK יכול לייצג זרימת בקרה מובנית ולייצא אותה ל-OpenQASM 3. הצהרות
continueו-breakיכולות מבחינה טכנית להיות מיוצגות ב-Qiskit, אך אינן נתמכות היטב אפילו בתוך Qiskit SDK. לולאותforב-Qiskit v2.1.0 אינן נתמכות היטב. זרימת בקרה מקוננת (כמוifבתוךifאחר, או הצהרתelse if) אינה זכאית לביצוע על חומרה.
- Qiskit SDK תומך בהצהרת כל סוג קלאסי נתמך כמשתנה
inputעל ה-Circuit. משתנים כאלה אינם זכאים כרגע לביצוע על חומרה, ולא ניתן לטעון אותם על ידי ייבאן OpenQASM 3 של Qiskit. אובייקטיParameterלא קשורים הקיימים ב-QuantumCircuitמיוצאים כמשתניinput float[64]. אפשרויות תצורת runtime מסוימות יכולות לאפשר ביצוע של Circuits כאלה על חלק מה-Backends.
הצעדים הבאים
- למד כיצד ליצור קוד OpenQASM באמצעות IBM Quantum Composer.
- ראו את עמוד ה-API של OpenQASM 3 Qiskit.
- ראו את עמוד ה-API של OpenQASM 2 Qiskit.
- עיינו בנושא אמת את התוכנית שלך.
- בקרו ב-מפרט החי של OpenQASM.