OpenQASM 3 ו-Qiskit SDK
גרסאות חבילות
הקוד בדף זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלו או בגרסאות חדשות יותר.
qiskit[all]~=2.5.2
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
ה-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 reference.
- בקר בנושא Verify your program.
- עיין ב-OpenQASM Live Specification.