انتقل إلى المحتوى الرئيسي

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

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.

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

توصيات