Lewati ke konten utama
Proyek ini masih dalam tahap beta. Menemukan bug? Buat isu GitHub. Punya pertanyaan atau ide? Tanya di Discussions — kami sangat menghargai masukan kamu!
Bagaimana kualitas terjemahan di halaman ini?

OpenQASM 3 dan Qiskit SDK

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan menggunakan versi ini atau yang lebih baru.

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 menyediakan beberapa alat untuk mengonversi antara representasi OpenQASM dari program kuantum dan kelas QuantumCircuit. Perlu dicatat bahwa alat-alat ini masih dalam fase eksplorasi pengembangan dan akan terus berkembang seiring meningkatnya dukungan Qiskit untuk kemampuan dynamic circuit yang diekspresikan oleh OpenQASM 3.

catatan

Fungsi ini masih dalam fase eksplorasi. Oleh karena itu, kemungkinan besar sintaks dan kemampuannya akan terus berkembang.

Mengimpor program OpenQASM 3 ke Qiskit​

Kamu harus menginstal paket qiskit_qasm3_import untuk menggunakan fungsi ini. Instal menggunakan perintah berikut.

pip install qiskit-qasm3-import

Saat ini tersedia dua fungsi tingkat tinggi untuk mengimpor dari OpenQASM 3 ke Qiskit. Fungsi-fungsi tersebut adalah load(), yang menerima nama file, dan loads(), yang menerima program itu sendiri sebagai string:

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

Pada contoh ini, kita mendefinisikan program kuantum menggunakan OpenQASM 3, lalu menggunakan loads() untuk langsung mengonversinya menjadi 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

Mengekspor ke OpenQASM 3​

Kamu bisa mengekspor kode Qiskit ke OpenQASM 3 dengan dumps(), yang mengekspor ke string, atau dump(), yang mengekspor ke file.

Contoh dengan 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'

Contoh dengan 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()

Untuk informasi lebih lanjut, lihat bagian Exporting to OpenQASM 3 di referensi API.

Langkah selanjutnya​

Rekomendasi