Visualisasikan litar
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
qiskit[all]~=2.3.0
Selalunya berguna untuk melihat litar yang sedang anda cipta. Gunakan pilihan berikut untuk memaparkan litar Qiskit.
# Added by doQumentation β required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit
Lukis litar kuantumβ
Kelas QuantumCircuit menyokong lukisan litar melalui kaedah draw(), atau dengan mencetak objek litar. Secara lalai, kedua-duanya menghasilkan versi seni ASCII rajah litar.
Perhatikan bahawa print mengembalikan None tetapi mempunyai kesan sampingan iaitu mencetak rajah, manakala QuantumCircuit.draw mengembalikan rajah tanpa kesan sampingan. Oleh kerana Jupyter notebook memaparkan output baris terakhir setiap sel, kedua-duanya kelihatan mempunyai kesan 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
Pemapar alternatifβ
Output teks berguna untuk melihat output dengan cepat semasa membangunkan litar, tetapi ia tidak memberikan fleksibiliti yang terbaik. Terdapat dua pemapar output alternatif untuk litar kuantum. Satu menggunakan Matplotlib dan satu lagi menggunakan LaTeX. Pemapar LaTeX memerlukan pakej qcircuit. Pilih pemapar ini dengan menetapkan argumen "output" kepada rentetan mpl dan latex.
Pengguna OSX boleh mendapatkan pakej LaTeX yang diperlukan melalui pakej mactex.
# Matplotlib drawing
circuit.draw(output="mpl")
# Latex drawing
circuit.draw(output="latex")
Simpan outputβ
Melukis litar berskala besar secara sebaris dalam Jupyter notebook boleh menjadi lambat atau sukar dibaca. Anda boleh menyimpan rajah terus ke fail, kemudian buka dalam penampil imej dan zum masuk mengikut keperluan.
# 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")
Kawal lukisan litarβ
Secara lalai, kaedah draw() mengembalikan imej yang dipaparkan sebagai objek dan tidak menghasilkan output. Kelas yang dikembalikan bergantung pada output yang ditentukan: 'text' (lalai) mengembalikan objek TextDrawer, 'mpl' mengembalikan objek matplotlib.Figure, dan latex mengembalikan objek PIL.Image. Jupyter notebook memahami jenis pulangan ini dan memaparkannya dengan betul, tetapi apabila dijalankan di luar Jupyter, imej tidak akan dipaparkan secara automatik.
Kaedah draw() mempunyai argumen pilihan untuk memaparkan atau menyimpan output. Apabila ditentukan, kwarg filename mengambil laluan untuk menyimpan output yang dipaparkan. Sebagai alternatif, jika anda menggunakan output mpl atau latex, anda boleh menggunakan kwarg interactive untuk membuka imej dalam tetingkap baharu (ini tidak selalunya berfungsi dari dalam notebook).
Sesuaikan outputβ
Bergantung pada output, terdapat juga pilihan untuk menyesuaikan rajah litar.
Nyahdayakan halangan plot dan terbalikkan susunan bitβ
Dua pilihan pertama dikongsi antara ketiga-tiga backend. Ia membolehkan anda mengkonfigurasi susunan bit dan sama ada anda ingin melukis halangan atau tidak. Ini boleh ditetapkan oleh kwarg reverse_bits dan kwarg plot_barriers, masing-masing. Contoh berikut berfungsi dengan mana-mana pemapar output; mpl digunakan di sini untuk keringkasan.
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)
Penyesuaian khusus pemaparβ
Beberapa pilihan penyesuaian yang tersedia adalah khusus untuk sesebuah pemapar.
Argumen fold menetapkan lebar maksimum untuk output. Dalam pemapar text, ini menetapkan panjang baris rajah sebelum ia dibungkus ke baris seterusnya. Apabila menggunakan pemapar mpl, ini adalah bilangan lapisan (visual) sebelum dilipat ke baris seterusnya.
Pemapar mpl mempunyai kwarg style, yang mengubah warna dan garis luar. Lihat dokumentasi API untuk butiran lanjut.
Pilihan scale menskalakan output pemapar 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 lukisan litar bersendirianβ
Jika anda mempunyai aplikasi di mana anda lebih suka melukis litar dengan fungsi bebas berbanding sebagai kaedah objek litar, anda boleh menggunakan fungsi circuit_drawer() secara langsung, yang merupakan sebahagian daripada antara muka awam stabil dari qiskit.visualization. Fungsi ini berkelakuan sama seperti kaedah circuit.draw(), kecuali ia mengambil objek litar sebagai argumen yang diperlukan.
from qiskit.visualization import circuit_drawer
circuit_drawer(circuit, output="mpl", plot_barriers=False)
Langkah seterusnyaβ
- Lihat contoh visualisasi litar dalam tutorial Algoritma Grover.
- Visualisasikan litar mudah menggunakan IBM Quantum Composer.
- Visualisasikan pemasaan litar.
- Semak dokumentasi API visualisasi Qiskit.