OpenQASM 3 وحزمة Qiskit SDK
Package versions
The code on this page was developed using the following requirements. We recommend using these versions or newer.
qiskit[all]~=2.3.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
توفر حزمة Qiskit SDK بعض الأدوات للتحويل بين تمثيلات OpenQASM للبرامج الكمية وفئة QuantumCircuit. لاحظ أن هذه الأدوات لا تزال في مرحلة استكشافية من التطوير وستستمر في التطور مع زيادة دعم Qiskit لقدرات الدوائر الديناميكية التي يعبّر عنها 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")