דלג לתוכן הראשי
פרויקט זה בשלב בטא. מצאת באג? פתח issue ב-GitHub. יש שאלה או רעיון? שאל ב-Discussions — נשמח לשמוע ממך!
מה איכות התרגום בדף זה?

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")

Output of the previous code cell

ייצוא ל-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.

השלבים הבאים​

המלצות