Přeskočit na hlavní obsah
Tento projekt je v betě. Našel jsi chybu? Otevřít issue na GitHubu. Máš otázku nebo nápad? Zeptej se v Discussions — rádi si poslechneme tvou zpětnou vazbu!
Jaká je kvalita překladu na této stránce?

Vizualizace Circuit

Verze balíčků

Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto verze nebo novější.

qiskit[all]~=2.6.1

Často je užitečné vidět Circuit, které vytváříš. Ke zobrazení Qiskit Circuit použij níže uvedené možnosti.

# 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")
from qiskit import QuantumCircuit

Kreslení kvantového Circuit​

Třída QuantumCircuit podporuje kreslení Circuit prostřednictvím metody draw() nebo výpisem objektu Circuit. Ve výchozím nastavení obě možnosti vykreslí verzi diagramu Circuit v ASCII artu.

Všimni si, že print vrací None, ale má vedlejší efekt v podobě výpisu diagramu, zatímco QuantumCircuit.draw vrací diagram bez vedlejších efektů. Protože Jupyter notebooky zobrazují výstup posledního řádku každé buňky, zdá se, že mají stejný efekt.

# 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

Alternativní renderery​

Textový výstup je užitečný pro rychlé zobrazení výsledku při vývoji Circuit, ale nenabízí největší flexibilitu. Existují dva alternativní renderery pro kvantový Circuit. Jeden používá Matplotlib a druhý používá LaTeX. Renderer LaTeX vyžaduje balíček qcircuit. Tyto renderery vybereš nastavením argumentu "output" na řetězce mpl a latex.

tip

Uživatelé OSX mohou získat požadované balíčky LaTeX prostřednictvím balíčku mactex.

# Matplotlib drawing
circuit.draw(output="mpl")

Output of the previous code cell

# Latex drawing
circuit.draw(output="latex")

Output of the previous code cell

Uložení výstupu​

Kreslení rozsáhlého Circuit přímo v Jupyter notebooku může být pomalé nebo nepřehledné. Diagram můžeš uložit přímo do souboru, pak ho otevřít v prohlížeči obrázků a podle potřeby přiblížit.

# Save as an image using the Matplotlib drawer
circuit.draw(output="mpl", filename="circuit-mpl.jpeg")

Output of the previous code cell

# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")

Output of the previous code cell

Ovládání kreslení Circuit​

Ve výchozím nastavení metoda draw() vrací vykreslený obrázek jako objekt a nic nevypisuje. Přesná třída, která je vrácena, závisí na zadaném výstupu: 'text' (výchozí) vrací objekt TextDrawer, 'mpl' vrací objekt matplotlib.Figure a latex vrací objekt PIL.Image. Jupyter notebooky těmto návratovým typům rozumí a správně je vykreslují, ale při spuštění mimo Jupyter se obrázky nezobrazí automaticky.

Metoda draw() má volitelné argumenty pro zobrazení nebo uložení výstupu. Pokud je zadán, kwarg filename přijme cestu, do které uloží vykreslený výstup. Případně, pokud používáš výstupy mpl nebo latex, můžeš pomocí kwarg interactive otevřít obrázek v novém okně (toto nemusí vždy fungovat z notebooku).

Přizpůsobení výstupu​

V závislosti na výstupu existují také možnosti přizpůsobení diagramu Circuit.

Zakázání vykreslování bariér a obrácení pořadí bitů​

První dvě možnosti jsou sdíleny mezi všemi třemi backendy. Umožňují ti konfigurovat pořadí bitů i to, zda bariéry kreslit. Nastavíš je pomocí kwarg reverse_bits, respektive kwarg plot_barriers. Následující příklady fungují s jakýmkoli rendererem; zde je pro stručnost použit mpl.

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

Output of the previous code cell

# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)

Output of the previous code cell

# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)

Output of the previous code cell

Přizpůsobení specifická pro renderer​

Některé dostupné možnosti přizpůsobení jsou specifické pro daný renderer.

Argument fold nastavuje maximální šířku výstupu. V rendereru text toto nastavuje délku řádků diagramu, než se zalomí na další řádek. Při použití rendereru 'mpl' jde o počet (vizuálních) vrstev, než dojde k zalomení na další řádek.

Renderer mpl má kwarg style, který mění barvy a obrysy. Více podrobností najdeš v dokumentaci API.

Možnost scale škáluje výstup rendererů mpl a 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)

Output of the previous code cell

# Scale the mpl output to 1/2 the normal size
circuit.draw(output="mpl", scale=0.5)

Output of the previous code cell

Samostatná funkce pro kreslení Circuit​

Pokud máš aplikaci, kde dáváš přednost kreslení Circuit pomocí samostatné funkce namísto metody objektu Circuit, můžeš přímo použít funkci circuit_drawer(), která je součástí veřejného stabilního rozhraní z qiskit.visualization. Funkce se chová identicky jako metoda circuit.draw(), s tím rozdílem, že přijímá objekt Circuit jako povinný argument.

from qiskit.visualization import circuit_drawer

circuit_drawer(circuit, output="mpl", plot_barriers=False)

Output of the previous code cell

Další kroky​

Doporučení