Compartir a través de


Visualización de diagramas de circuitos cuánticos con Q#

Los diagramas de circuitos cuánticos son una representación visual de las operaciones cuánticas. Los diagramas de circuitos muestran el flujo de cúbits a través del programa cuántico, incluidas las puertas y medidas que el programa aplica a los cúbits.

En este artículo, aprenderá a representar visualmente algoritmos cuánticos con diagramas de circuitos cuánticos en Azure Quantum Development Kit (QDK) utilizando Visual Studio Code (VS Code) y Jupyter Notebook.

Para más información sobre los diagramas de circuitos cuánticos, consulte Convenciones de circuito cuántico.

Requisitos previos

Visualización de circuitos cuánticos en VS Code

Para visualizar circuitos cuánticos de programas de Q# en VS Code, complete los pasos siguientes.

Visualización de diagramas de circuitos para un programa de Q#

  1. Abra un archivo Q# en VS Codeo cargue uno de los ejemplos cuánticos.

  2. Elija el comando Circuit en el visor de código que precede a la operación de entrada.

    Captura de pantalla de un archivo Q# en Visual Studio Code que muestra dónde encontrar el comando de circuitos de Code Lens.

Aparece la ventana del circuito Q# y muestra el diagrama de circuitos del programa. Por ejemplo, el siguiente circuito corresponde a una operación que coloca un cúbit en un estado de superposición y, a continuación, mide el cúbit. El diagrama del circuito muestra un registro de cúbits que se inicializa en el estado $\ket{0}$. A continuación, se aplica una puerta Hadamard al cúbit, seguida de una operación de medición, que se representa mediante un símbolo de medidor. En este caso, el resultado de la medida es cero.

Captura de pantalla de la ventana del circuito Q# que muestra el diagrama de circuitos para la operación de bits aleatoria.

Sugerencia

En los archivos Q# y OpenQASM, seleccione un elemento en el diagrama de circuitos para resaltar el código que crea el elemento de circuito.

Visualización de diagramas de circuitos para operaciones individuales

Para visualizar el circuito cuántico para una operación individual en un archivo Q#, elija el comando Circuit en la lente de código que precede a la operación.

Captura de pantalla de Visual Studio Code que muestra cómo visualizar el circuito de una sola operación de Q# en un programa de Q#.

Visualización de diagramas de circuitos al depurar

Al usar el VS Code depurador en un programa de Q#, puede visualizar el circuito cuántico en función del estado del programa en el punto de interrupción actual del depurador.

  1. Elija el comando Depurar en el CodeLens que antecede a su operación de punto de entrada.
  2. En el panel Ejecutar y depurar , expanda la lista desplegable Circuito cuántico en el menú VARIABLES . Se abre el panel QDK Circuito, que muestra el circuito a medida que recorre el programa.
  3. Establezca puntos de interrupción y recorra el código para ver cómo se actualiza el circuito a medida que se ejecuta el programa.

Circuitos cuánticos en Jupyter Notebook

En Jupyter Notebook, puede visualizar circuitos cuánticos con los módulos de Python qdk.qsharp y qdk.widgets. El widgets módulo proporciona un widget que representa un diagrama de circuitos cuánticos como una imagen SVG.

Visualización de diagramas de circuitos para una expresión de entrada

  1. En VS Code, abra el menú Ver y elija Paleta de comandos.

  2. Introduzca y seleccione Crear: Nuevo Jupyter Notebook.

  3. En la primera celda del cuaderno, ejecute el código siguiente para importar el qsharp paquete.

    from qdk import qsharp
    
  4. Cree una nueva celda y escriba el código de Q#. Por ejemplo, el código siguiente prepara un estado de Bell.

    %%qsharp
    
    // Prepare a Bell State.
    operation BellState() : Unit {
        use register = Qubit[2];
        H(register[0]);
        CNOT(register[0], register[1]);
    }
    
  5. Para mostrar un circuito cuántico simple basado en el estado actual del programa, pase una expresión de punto de entrada a la qsharp.circuit función. Por ejemplo, el diagrama de circuito del código anterior muestra dos registros de cúbits que se inicializan en el estado $\ket{0}$. A continuación, se aplica una puerta Hadamard al primer cúbit. Por último, se aplica una puerta CNOT donde el primer cúbit es el control, representado por un punto, y el segundo cúbit es el destino, representado por una X.

    qsharp.circuit("BellState()")
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. Para visualizar un circuito cuántico como una imagen SVG, use el widgets módulo . Cree una nueva celda y ejecute el código siguiente para visualizar el circuito que creó en la celda anterior.

    from qdk.widgets import Circuit
    
    Circuit(qsharp.circuit("BellState()"))
    

    Captura de pantalla de un Jupyter Notebook que muestra cómo visualizar el circuito para una operación en Q#.

Visualización de diagramas de circuitos para operaciones con cúbits

Puede generar diagramas de circuitos de operaciones que toman cúbits o matrices de cúbits, como entrada. El diagrama muestra una conexión para cada cúbit de entrada, junto con cables para cúbits adicionales que se asignan dentro de la operación. Cuando la operación toma una matriz de cúbits (Qubit[]), el circuito muestra la matriz como un registro de 2 cúbits.

  1. Agregue una nueva celda y, a continuación, copie y ejecute el siguiente código de Q#. Este código prepara un estado cat.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Agregue una nueva celda y ejecute el código siguiente para visualizar el circuito de la PrepareCatState operación.

    Circuit(qsharp.circuit(operation="PrepareCatState"))
    

Diagramas de circuitos para circuitos dinámicos

Los diagramas de circuitos se generan ejecutando la lógica clásica dentro de un programa de Q# y realizando un seguimiento de todas las puertas asignadas y aplicadas. Los bucles y condicionales se admiten cuando solo se ocupan de valores clásicos.

Sin embargo, los programas que contienen bucles y expresiones condicionales que usan resultados de medición de cúbits son más complicados de representar con un diagrama de circuitos. Por ejemplo, considere la siguiente expresión:

if (M(q) == One) {
   X(q)
}

Esta expresión no se puede representar con un diagrama de circuito sencillo porque las puertas están condicionales a un resultado de medición. Los circuitos con puertas que dependen de los resultados de medición se denominan circuitos dinámicos.

Puede generar diagramas para circuitos dinámicos ejecutando el programa en el simulador cuántico y trazando las puertas a medida que se aplican. Esto se denomina modo de seguimiento porque los cúbits y las puertas se rastrean a medida que se realiza la simulación.

La desventaja de los circuitos rastreados es que solo capturan el resultado de la medición y las aplicaciones de puerta consecuentes para una sola simulación. En el ejemplo anterior, si el resultado de la medición es Zero, la X puerta no se encuentra en el diagrama. Si vuelve a ejecutar la simulación, es posible que obtenga un circuito diferente.