OpenQASM 3 وحزمة Qiskit SDK
Package versions
تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. ننصح باستخدام هذه الإصدارات أو أحدث.
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 لقدرات الدوائر الديناميكية التي يعبّر عنها 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.