انتقل إلى المحتوى الرئيسي
هذا المشروع في مرحلة تجريبية. وجدت خطأ؟ افتح مشكلة على GitHub. لديك سؤال أو فكرة؟ اسأل في Discussions — نحب سماع ملاحظاتك!
كيف جودة الترجمة في هذه الصفحة؟

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

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.

الخطوات التالية​

Recommendations