Skip to main content
IBM Quantum Platform

Visualiser les circuits

  • Le code de cette page a été développé en tenant compte des exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

    qiskit[all]~=2.5.1
    

Il est souvent utile de voir les circuits que vous créez. Les options suivantes permettent d'afficher les circuits Qiskit.

from qiskit import QuantumCircuit

Dessiner un circuit quantique

La classe QuantumCircuit permet de dessiner des circuits grâce à la méthode draw() ou en imprimant l'objet circuit. Par défaut, les deux restituent une version ASCII du schéma de circuit.

Notez que print renvoie None mais a pour effet secondaire d'imprimer le diagramme, tandis que QuantumCircuit.draw renvoie le diagramme sans effet secondaire. Comme les carnets Jupyter affichent la sortie de la dernière ligne de chaque cellule, ils 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)

Output:

     ┌───┐          ┌─┐   
q_0: ┤ H ├───────■──┤M├───
     ├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
     ├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
     └───┘ └╥┘       ║  ║ 
c: 3/═══════╩════════╩══╩═
            2        0  1 
circuit.draw()

Output:

     ┌───┐          ┌─┐   
q_0: ┤ H ├───────■──┤M├───
     ├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
     ├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
     └───┘ └╥┘       ║  ║ 
c: 3/═══════╩════════╩══╩═
            2        0  1 

Rendu alternatif

Une sortie texte est utile pour visualiser rapidement la sortie lors du développement d'un circuit, mais elle n'offre pas la plus grande flexibilité. Il existe deux possibilités de rendu de sortie pour le circuit quantique. L'un utilise Matplotlib et l'autre utilise LaTeX. Le moteur de rendu LaTeX nécessite le paquetage qcircuit. Sélectionnez ces moteurs de rendu en attribuant à l'argument "output" les chaînes de caractères mpl et latex.

Tip

Les utilisateurs d'OSX peuvent obtenir les paquets LaTeX nécessaires via le paquet mactex.

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

Output:

Output of the previous code cell
# Latex drawing
circuit.draw(output="latex")

Output:

Output of the previous code cell

Sauvegarder la sortie

Dessiner un circuit à grande échelle en ligne dans un carnet Jupyter peut être lent ou illisible. Vous pouvez enregistrer le diagramme directement dans un fichier, puis l'ouvrir dans une visionneuse d'images et l'agrandir si nécessaire.

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

Output:

Output of the previous code cell
# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")

Output:

Output of the previous code cell

Schémas des circuits de commande

Par défaut, la méthode draw() renvoie l'image rendue sous forme d'objet et ne produit rien. La classe exacte renvoyée dépend de la sortie spécifiée : 'text' (par défaut) renvoie un objet TextDrawer , 'mpl' renvoie un objet matplotlib.Figure et latex renvoie un objet PIL.Image . Les blocs-notes Jupyter comprennent ces types de retour et les affichent correctement, mais lorsqu'ils sont exécutés en dehors de Jupyter, les images ne s'affichent pas automatiquement.

La méthode draw() comporte des arguments facultatifs permettant d'afficher ou d'enregistrer les résultats. Lorsqu'il est spécifié, le kwarg filename prend un chemin dans lequel il enregistre le rendu. Par ailleurs, si vous utilisez les sorties mpl ou latex , vous pouvez utiliser le kwarg interactive pour ouvrir l'image dans une nouvelle fenêtre (cela ne fonctionnera pas toujours à partir d'un carnet).

Personnaliser la sortie

En fonction de la sortie, il est également possible de personnaliser le schéma de circuit.

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

Les deux premières options sont partagées par les trois backends. Ils vous permettent de configurer à la fois l'ordre des bits et le fait de dessiner ou non des barrières. Ils peuvent être définis respectivement par le kwarg reverse_bits et le kwarg 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:

Output of the previous code cell
# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)

Output:

Output of the previous code cell
# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)

Output:

Output of the previous code cell

Personnalisations spécifiques au rendu

Certaines options de personnalisation disponibles sont spécifiques à un moteur de rendu.

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'elles ne passent à 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 moteur de rendu mpl possède la fonction style kwarg, qui modifie les couleurs et les contours. Voir 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)

Output:

   ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐»
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:

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

Output:

Output of the previous code cell

Fonction autonome de dessin de circuits

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

from qiskit.visualization import circuit_drawer

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

Output:

Output of the previous code cell

Etapes suivantes

Recommandations
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.