דלג לתוכן הראשי

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

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.

שלבים הבאים

המלצות