ข้ามไปยังเนื้อหาหลัก

OpenQASM 3 และ Qiskit SDK

เวอร์ชันของ package

โค้ดในหน้านี้ถูกพัฒนาโดยใช้ requirements ต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า

qiskit[all]~=2.3.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit

Qiskit SDK มีเครื่องมือบางอย่างสำหรับการแปลงระหว่าง OpenQASM representation ของโปรแกรม quantum และ QuantumCircuit class โปรดทราบว่าเครื่องมือเหล่านี้ยังอยู่ในขั้นตอนการพัฒนาแบบสำรวจและจะยังคงพัฒนาต่อไปเมื่อการรองรับ dynamic circuit ที่แสดงออกโดย OpenQASM 3 ของ Qiskit เพิ่มขึ้น

หมายเหตุ

ฟังก์ชันนี้ยังอยู่ในขั้นตอนสำรวจ ดังนั้น syntax และความสามารถมีแนวโน้มที่จะพัฒนาต่อไป

นำเข้าโปรแกรม OpenQASM 3 เข้าสู่ Qiskit

ต้องติดตั้ง package qiskit_qasm3_import เพื่อใช้ฟังก์ชันนี้ ติดตั้งด้วยคำสั่งต่อไปนี้

pip install qiskit-qasm3-import

ปัจจุบันมีฟังก์ชันระดับสูงสองตัวสำหรับการนำเข้าจาก OpenQASM 3 เข้าสู่ Qiskit ฟังก์ชันเหล่านี้คือ load() ซึ่งรับชื่อไฟล์ และ loads() ซึ่งรับโปรแกรมเป็น string:

import qiskit.qasm3
qiskit.qasm3.load(file_name)
qiskit.qasm3.loads(program_string)

ในตัวอย่างนี้ เรานิยามโปรแกรม quantum โดยใช้ 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")

ผลลัพธ์ของ code cell ก่อนหน้า

Export ไปยัง OpenQASM 3

สามารถ export โค้ด Qiskit ไปยัง OpenQASM 3 ด้วย dumps() ซึ่ง export เป็น string หรือ dump() ซึ่ง export ลงไฟล์

ตัวอย่างกับ 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()

ดูข้อมูลเพิ่มเติมที่ส่วน Exporting to OpenQASM 3 ของ API reference

ขั้นตอนถัดไป

คำแนะนำ
Source: IBM Quantum docs — updated 27 เม.ย. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569