Visualisasi circuit
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami sarankan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
Seringkali berguna untuk melihat circuit yang sedang kamu buat. Gunakan opsi berikut untuk menampilkan circuit Qiskit.
# Added by doQumentation β required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit
Gambar quantum circuitβ
Kelas QuantumCircuit mendukung penggambaran circuit melalui metode draw(), atau dengan mencetak objek circuit. Secara default, keduanya menghasilkan versi ASCII art dari diagram circuit.
Perlu diperhatikan bahwa print mengembalikan None tetapi memiliki efek samping mencetak diagram, sedangkan QuantumCircuit.draw mengembalikan diagram tanpa efek samping. Karena notebook Jupyter menampilkan output dari baris terakhir setiap sel, keduanya tampak memiliki efek yang sama.
# Build a quantum circuit
circuit = QuantumCircuit(3, 3)
circuit.x(1)
circuit.h(range(3))
circuit.cx(0, 1)
circuit.measure(range(3), range(3));
print(circuit)
βββββ βββ
q_0: β€ H βββββββββ βββ€Mββββ
βββββ€ββββββββ΄ββββ₯ββββ
q_1: β€ X ββ€ H ββ€ X βββ«ββ€Mβ
βββββ€ββ¬ββ¬ββββββ β ββ₯β
q_2: β€ H βββ€Mβββββββββ«βββ«β
βββββ ββ₯β β β
c: 3/ββββββββ©βββββββββ©βββ©β
2 0 1
circuit.draw()
βββββ βββ
q_0: β€ H βββββββββ βββ€Mββββ
βββββ€ββββββββ΄ββββ₯ββββ
q_1: β€ X ββ€ H ββ€ X βββ«ββ€Mβ
βββββ€ββ¬ββ¬ββββββ β ββ₯β
q_2: β€ H βββ€Mβββββββββ«βββ«β
βββββ ββ₯β β β
c: 3/ββββββββ©βββββββββ©βββ©β
2 0 1
Renderer alternatifβ
Output teks berguna untuk melihat output dengan cepat saat mengembangkan circuit, tetapi tidak memberikan fleksibilitas terbaik. Ada dua renderer output alternatif untuk quantum circuit. Satu menggunakan Matplotlib dan yang lainnya menggunakan LaTeX. Renderer LaTeX memerlukan paket qcircuit. Pilih renderer ini dengan mengatur argumen "output" ke string mpl dan latex.
Pengguna OSX bisa mendapatkan paket LaTeX yang diperlukan melalui paket mactex.
# Matplotlib drawing
circuit.draw(output="mpl")
# Latex drawing
circuit.draw(output="latex")
Simpan outputβ
Menggambar circuit berskala besar secara langsung di notebook Jupyter bisa lambat atau tidak terbaca. Kamu bisa menyimpan diagram langsung ke file, lalu membukanya di penampil gambar dan memperbesar sesuai kebutuhan.
# Save as an image using the Matplotlib drawer
circuit.draw(output="mpl", filename="circuit-mpl.jpeg")
# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")
Kontrol penggambaran circuitβ
Secara default, metode draw() mengembalikan gambar yang dirender sebagai objek dan tidak menghasilkan output apa pun. Kelas yang dikembalikan bergantung pada output yang ditentukan: 'text' (default) mengembalikan objek TextDrawer, 'mpl' mengembalikan objek matplotlib.Figure, dan latex mengembalikan objek PIL.Image. Notebook Jupyter memahami tipe return ini dan merendernya dengan benar, tetapi saat dijalankan di luar Jupyter, gambar tidak akan ditampilkan secara otomatis.
Metode draw() memiliki argumen opsional untuk menampilkan atau menyimpan output. Bila ditentukan, kwarg filename mengambil path untuk menyimpan output yang dirender. Atau, jika kamu menggunakan output mpl atau latex, kamu bisa menggunakan kwarg interactive untuk membuka gambar di jendela baru (ini tidak selalu berfungsi dari dalam notebook).
Sesuaikan outputβ
Tergantung pada outputnya, ada juga opsi untuk menyesuaikan diagram circuit.
Nonaktifkan plot barriers dan balik urutan bitβ
Dua opsi pertama dibagikan di antara ketiga backend. Keduanya memungkinkan kamu mengonfigurasi urutan bit dan apakah kamu menggambar barriers atau tidak. Ini bisa diatur melalui kwarg reverse_bits dan kwarg plot_barriers. Contoh berikut berfungsi dengan renderer output apa pun; mpl digunakan di sini untuk singkatnya.
from qiskit import QuantumRegister, ClassicalRegister
# Draw a new circuit with barriers and more registers
q_a = QuantumRegister(3, name="a")
q_b = QuantumRegister(5, name="b")
c_a = ClassicalRegister(3)
c_b = ClassicalRegister(5)
circuit = QuantumCircuit(q_a, q_b, c_a, c_b)
circuit.x(q_a[1])
circuit.x(q_b[1])
circuit.x(q_b[2])
circuit.x(q_b[4])
circuit.barrier()
circuit.h(q_a)
circuit.barrier(q_a)
circuit.h(q_b)
circuit.cswap(q_b[0], q_b[1], q_b[2])
circuit.cswap(q_b[2], q_b[3], q_b[4])
circuit.cswap(q_b[3], q_b[4], q_b[0])
circuit.barrier(q_b)
circuit.measure(q_a, c_a)
circuit.measure(q_b, c_b);
# Draw the circuit
circuit.draw(output="mpl")
# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)
# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)
Kustomisasi khusus rendererβ
Beberapa opsi kustomisasi yang tersedia bersifat khusus untuk suatu renderer.
Argumen fold menetapkan lebar maksimum untuk output. Pada renderer text, ini menetapkan panjang baris diagram sebelum dibungkus ke baris berikutnya. Saat menggunakan renderer 'mpl', ini adalah jumlah layer (visual) sebelum dilipat ke baris berikutnya.
Renderer mpl memiliki kwarg style, yang mengubah warna dan garis tepi. Lihat dokumentasi API untuk detail lebih lanjut.
Opsi scale menskalakan output dari renderer mpl dan latex.
circuit = QuantumCircuit(1)
for _ in range(10):
circuit.h(0)
# limit line length to 40 characters
circuit.draw(output="text", fold=40)
βββββββββββββββββββββββββββββββββββΒ»
q: β€ H ββ€ H ββ€ H ββ€ H ββ€ H ββ€ H ββ€ H βΒ»
βββββββββββββββββββββββββββββββββββΒ»
Β« βββββββββββββββ
Β«q: β€ H ββ€ H ββ€ H β
Β« βββββββββββββββ
# Change the background color in mpl
style = {"backgroundcolor": "lightgreen"}
circuit.draw(output="mpl", style=style)
# Scale the mpl output to 1/2 the normal size
circuit.draw(output="mpl", scale=0.5)
Fungsi penggambaran circuit mandiriβ
Jika kamu memiliki aplikasi yang lebih suka menggambar circuit dengan fungsi mandiri daripada sebagai metode dari objek circuit, kamu bisa langsung menggunakan fungsi circuit_drawer(), yang merupakan bagian dari antarmuka stabil publik dari qiskit.visualization. Fungsi ini berperilaku identik dengan metode circuit.draw(), kecuali bahwa ia menerima objek circuit sebagai argumen wajib.
from qiskit.visualization import circuit_drawer
circuit_drawer(circuit, output="mpl", plot_barriers=False)
Langkah berikutnyaβ
- Lihat contoh visualisasi circuit dalam tutorial Algoritma Grover.
- Visualisasikan circuit sederhana menggunakan IBM Quantum Composer.
- Visualisasikan timing circuit.
- Tinjau dokumentasi API visualisasi Qiskit.