Skip to main content
IBM Quantum Platform

Visualizar circuitos

  • El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.

    qiskit[all]~=2.5.0
    

A menudo es útil ver los circuitos que estás creando. Utilice las siguientes opciones para visualizar los circuitos Qiskit.

from qiskit import QuantumCircuit

Dibuja un circuito cuántico

La clase QuantumCircuit permite dibujar circuitos a través del método draw() , o imprimiendo el objeto circuito. Por defecto, ambos renderizan una versión artística ASCII del circuito.

Observe que print devuelve None pero tiene el efecto secundario de imprimir el diagrama, mientras que QuantumCircuit.draw devuelve el diagrama sin efectos secundarios. Dado que los cuadernos Jupyter muestran la salida de la última línea de cada celda, parecen tener el mismo efecto.

# 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 

Renderizadores alternativos

Una salida de texto es útil para ver rápidamente la salida mientras se desarrolla un circuito, pero no proporciona la mayor flexibilidad. Existen dos renderizadores de salida alternativos para el circuito cuántico. Uno utiliza Matplotlib y el otro utiliza LaTeX. El renderizador LaTeX requiere el paquete qcircuit. Seleccione estos renderizadores ajustando el argumento "output" a las cadenas mpl y latex.

Tip

Los usuarios de OSX pueden obtener los paquetes LaTeX necesarios a través del paquete 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

Guardar salida

Dibujar un circuito a gran escala en línea en un cuaderno Jupyter puede resultar lento o ilegible. Puedes guardar el diagrama directamente en un archivo y, a continuación, abrirlo en un visor de imágenes y ampliarlo según necesites.

# 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

Esquemas de circuitos de control

Por defecto, el método draw() devuelve la imagen renderizada como un objeto y no muestra nada. La clase exacta devuelta depende de la salida especificada: 'text' (por defecto) devuelve un objeto TextDrawer , 'mpl' devuelve un objeto matplotlib.Figure , y latex devuelve un objeto PIL.Image . Los cuadernos Jupyter entienden estos tipos de retorno y los muestran correctamente, pero cuando se ejecutan fuera de Jupyter, las imágenes no se mostrarán automáticamente.

El método draw() tiene argumentos opcionales para mostrar o guardar la salida. Cuando se especifica, el kwarg filename toma una ruta en la que guarda la salida renderizada. Alternativamente, si está utilizando las salidas mpl o latex , puede utilizar el kwarg interactive para abrir la imagen en una nueva ventana (esto no siempre funcionará desde dentro de un cuaderno).

Personalizar la salida

Dependiendo de la salida, también hay opciones para personalizar el esquema del circuito.

Desactivar barreras de trama e invertir el orden de bits

Las dos primeras opciones se comparten entre los tres backends. Permiten configurar tanto los órdenes de bits como si se dibujan o no barreras. Se pueden configurar mediante reverse_bits kwarg y plot_barriers kwarg, respectivamente. Los siguientes ejemplos funcionan con cualquier renderizador de salida; mpl se utiliza aquí por brevedad.

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

Personalizaciones específicas del renderizador

Algunas opciones de personalización disponibles son específicas de un renderizador.

El argumento fold establece una anchura máxima para la salida. En el renderizador text , esto establece la longitud de las líneas del diagrama antes de que se envuelva a la siguiente línea. Cuando se utiliza el renderizador 'mpl', este es el número de capas (visuales) antes de doblar a la siguiente línea.

El renderizador mpl tiene el kwarg style , que cambia los colores y los contornos. Consulte la documentación de la API para obtener más detalles.

La opción scale escala la salida de los renderizadores mpl y 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

Función independiente de dibujo de circuitos

Si tiene una aplicación en la que prefiere dibujar un circuito con una función autónoma en lugar de como método de un objeto circuito, puede utilizar directamente la función circuit_drawer() , que forma parte de la interfaz pública estable de qiskit.visualization. La función se comporta de forma idéntica al método circuit.draw() , con la salvedad de que toma un objeto circuito como argumento obligatorio.

from qiskit.visualization import circuit_drawer

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

Output:

Output of the previous code cell

Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.