Aller au contenu principal
Ce projet est en phase bêta. Tu as trouvé un bug ? Ouvrir un ticket GitHub. Une question ou une idée ? Pose ta question dans Discussions — tes retours sont les bienvenus !
Quelle est la qualité de la traduction sur cette page ?

Visualiser les circuits

Versions des packages

Le code de cette page a été développé avec les dépendances suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

qiskit[all]~=2.5.2

Il est souvent utile de voir les circuits que tu crées. Utilise les options suivantes pour afficher des circuits Qiskit.

# 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

Dessiner un circuit quantique​

La classe QuantumCircuit prend en charge le dessin de circuits via la méthode draw(), ou en imprimant l'objet circuit. Par défaut, les deux affichent une version ASCII art du diagramme de circuit.

Note que print retourne None mais a pour effet de bord d'afficher le schéma, tandis que QuantumCircuit.draw retourne le schéma sans effet de bord. Comme les notebooks Jupyter affichent le résultat de la dernière ligne de chaque cellule, les deux semblent avoir le même effet.

# 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

Rendus alternatifs​

Une sortie textuelle est utile pour visualiser rapidement le résultat lors du développement d'un circuit, mais elle n'est pas la plus flexible. Il existe deux moteurs de rendu alternatifs pour le circuit quantique. L'un utilise Matplotlib et l'autre utilise LaTeX. Le moteur de rendu LaTeX nécessite le paquet qcircuit. Sélectionne ces moteurs de rendu en définissant l'argument "output" sur les chaînes mpl et latex.

conseil

Les utilisateurs d'OSX peuvent obtenir les paquets LaTeX nécessaires via le paquet 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

Sauvegarder le rendu​

Afficher un circuit de grande envergure directement dans un notebook Jupyter peut être lent ou illisible. Tu peux enregistrer le schéma directement dans un fichier, puis l'ouvrir dans un visionneur d'images et zoomer selon tes besoins.

# 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

Contrôler les dessins de circuits​

Par défaut, la méthode draw() retourne le rendu sous forme d'objet sans rien afficher. La classe exacte retournée dépend du rendu choisi : 'text' (par défaut) retourne un objet TextDrawer, 'mpl' retourne un objet matplotlib.Figure, et latex retourne un objet PIL.Image. Les notebooks Jupyter comprennent ces types de retour et les affichent correctement, mais en dehors de Jupyter, les images ne s'affichent pas automatiquement.

La méthode draw() dispose d'arguments optionnels pour afficher ou sauvegarder le rendu. Lorsqu'il est spécifié, le kwarg filename prend un chemin vers lequel il enregistre le rendu. Sinon, si tu utilises les rendus mpl ou latex, tu peux utiliser le kwarg interactive pour ouvrir l'image dans une nouvelle fenêtre (cela ne fonctionne pas toujours depuis un notebook).

Personnaliser le rendu​

Selon le rendu utilisé, il existe aussi des options pour personnaliser le schéma du circuit.

Désactiver les barrières et inverser l'ordre des bits​

Les deux premières options sont communes aux trois backends. Elles te permettent de configurer l'ordre des bits et de choisir si les barrières sont affichées ou non. Ces options se définissent respectivement via les kwargs reverse_bits et plot_barriers. Les exemples suivants fonctionnent avec n'importe quel moteur de rendu ; mpl est utilisé ici par souci de concision.

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

Personnalisations spécifiques à chaque rendu​

Certaines options de personnalisation sont propres à un rendu particulier.

L'argument fold définit une largeur maximale pour la sortie. Dans le moteur de rendu text, cela définit la longueur des lignes du diagramme avant qu'il ne soit renvoyé à la ligne suivante. Lors de l'utilisation du moteur de rendu 'mpl', il s'agit du nombre de couches (visuelles) avant de passer à la ligne suivante.

Le rendu mpl dispose du kwarg style, qui modifie les couleurs et les contours. Consulte la documentation de l'API pour plus de détails.

L'option scale met à l'échelle la sortie des moteurs de rendu mpl et 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

Fonction autonome de dessin de circuits​

Si tu préfères dessiner un circuit avec une fonction autonome plutôt qu'en tant que méthode d'un objet circuit, tu peux utiliser directement la fonction circuit_drawer(), qui fait partie de l'interface publique stable de qiskit.visualization. Cette fonction se comporte de manière identique à la méthode circuit.draw(), à la différence qu'elle prend un objet circuit comme argument obligatoire.

from qiskit.visualization import circuit_drawer

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

Output of the previous code cell

Prochaines étapes​

Recommandations