OpenQASM 3 ו-Qiskit SDK
גרסאות חבילות
הקוד בדף זה פותח באמצעות הדרישות הבאות. אנו ממליצים להשתמש בגרסאות אלו או בגרסאות חדשות יותר.
qiskit[all]~=2.3.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
ה-Qiskit SDK מספק כלים להמרה בין ייצוגי OpenQASM של תוכניות קוונטיות לבין המחלקה QuantumCircuit. שים לב שכלים אלו עדיין נמצאים בשלב עיון ופיתוח ראשוני, וימשיכו להתפתח ככל שתמיכת Qiskit ביכולות Circuit דינמיות המבוטאות ב-OpenQASM 3 תגדל.
פונקציה זו עדיין נמצאת בשלב עיון ראשוני. לפיכך, סביר להניח שהתחביר והיכולות ישתנו.
ייבוא תוכנית OpenQASM 3 ל-Qiskit
עליך להתקין את החבילה qiskit_qasm3_import כדי להשתמש בפונקציה זו. התקן באמצעות הפקודה הבאה.
pip install qiskit-qasm3-import
כרגע זמינות שתי פונקציות ברמה גבוהה לייבוא מ-OpenQASM 3 ל-Qiskit. פונקציות אלו הן load(), שמקבלת שם קובץ, ו-loads(), שמקבלת את התוכנית עצמה כמחרוזת:
import qiskit.qasm3
qiskit.qasm3.load(file_name)
qiskit.qasm3.loads(program_string)
בדוגמה זו, אנו מגדירים תוכנית קוונטית באמצעות OpenQASM 3, ומשתמשים ב-loads() כדי להמיר אותה ישירות ל-QuantumCircuit:
import qiskit.qasm3
program = """
OPENQASM 3.0;
include "stdgates.inc";
input float[64] a;
qubit[3] q;
bit[2] mid;
bit[3] out;
let aliased = q[0:1];
gate my_gate(a) c, t {
gphase(a / 2);
ry(a) c;
cx c, t;
}
gate my_phase(a) c {
ctrl @ inv @ gphase(a) c;
}
my_gate(a * 2) aliased[0], q[{1, 2}][0];
measure q[0] -> mid[0];
measure q[1] -> mid[1];
while (mid == "00") {
reset q[0];
reset q[1];
my_gate(a) q[0], q[1];
my_phase(a - pi/2) q[1];
mid[0] = measure q[0];
mid[1] = measure q[1];
}
if (mid[0]) {
let inner_alias = q[{0, 1}];
reset inner_alias;
}
out = measure q;
"""
circuit = qiskit.qasm3.loads(program)
circuit.draw("mpl")
ייצוא ל-OpenQASM 3
ניתן לייצא קוד Qiskit ל-OpenQASM 3 באמצעות dumps(), שמייצאת למחרוזת, או dump(), שמייצאת לקובץ.
דוגמה עם dumps()
from qiskit import QuantumCircuit
from qiskit.qasm3 import dumps
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
dumps(qc)
'OPENQASM 3.0;\ninclude "stdgates.inc";\nbit[2] meas;\nqubit[2] q;\nh q[0];\ncx q[0], q[1];\nbarrier q[0], q[1];\nmeas[0] = measure q[0];\nmeas[1] = measure q[1];\n'
דוגמה עם dump()
from qiskit import QuantumCircuit
from qiskit.qasm3 import dump
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
f = open("my_file.txt", "w")
dump(qc, f)
f.close()
למידע נוסף, עיין בסעיף ייצוא ל-OpenQASM 3 בתיעוד ה-API.
שלבים הבאים
- למד כיצד ליצור קוד OpenQASM במדריך IBM Quantum Composer.
- עיין בתיעוד OpenQASM 3 Qiskit API.
- בקר בנושא אימות התוכנית שלך.
- עיין ב-OpenQASM Live Specification.