Compartilhar via


Como visualizar diagramas de circuito quântico com Q#

Os diagramas de circuitos quânticos são uma representação visual das operações quânticas. Os diagramas de circuito mostram o fluxo de qubits por meio do programa quântico, incluindo as portas e as medidas que o programa aplica aos qubits.

Neste artigo, você aprenderá a representar visualmente algoritmos quânticos com diagramas de circuito quântico no Azure Quantum Development Kit (QDK) usando Visual Studio Code (VS Code) e Jupyter Notebook.

Para obter mais informações sobre diagramas de circuito quântico, consulte as convenções de circuito quântico.

Pré-requisitos

Visualizar circuitos quânticos em VS Code

Para visualizar circuitos quânticos de programas Q# em VS Code, conclua as etapas a seguir.

Exibir diagramas de circuito para um programa Q#

  1. Abra um arquivo Q# ou VS Codecarregue um dos exemplos quânticos.

  2. Escolha o comando Circuito na lente de código que precede a operação do ponto de entrada.

    Captura de tela de um arquivo Q# que Visual Studio Code mostra onde encontrar o comando de circuito de lente de código.

A janela do circuito Q# é exibida e exibe o diagrama de circuito do programa. Por exemplo, o circuito a seguir corresponde a uma operação que coloca um qubit em um estado de superposição e, em seguida, mede o qubit. O diagrama do circuito mostra um registro de qubit inicializado para o estado $\ket{0}$. Em seguida, uma porta Hadamard é aplicada ao qubit, seguida por uma operação de medida, que é representada por um símbolo de medição. Nesse caso, o resultado da medida é zero.

Captura de tela da janela do circuito de Q# que mostra o diagrama do circuito para a operação de bit aleatória.

Dica

Em arquivos Q# e OpenQASM, selecione um elemento no diagrama do circuito para realçar o código que cria o elemento de circuito.

Exibir diagramas de circuito para operações individuais

Para visualizar o circuito quântico para uma operação individual em um arquivo Q#, escolha o comando Circuito na lente de código que precede a operação.

Captura de tela de Visual Studio Code que mostra como visualizar o circuito de uma única operação Q# em um programa Q#.

Exibir diagramas de circuito ao depurar

Ao usar o depurador VS Code em um programa Q#, é possível visualizar o circuito quântico com base no estado do programa no ponto atual de interrupção do depurador.

  1. Escolha o comando Depurar na lente de código que precede a operação do ponto de entrada.
  2. No painel Executar e Depurar , expanda a lista suspensa Circuito Quântico no menu VARIÁVEIS . O QDK painel Circuito é aberto, que mostra o circuito enquanto você percorre o programa.
  3. Defina pontos de interrupção e percorra seu código para ver como o circuito é atualizado conforme o programa é executado.

Circuitos quânticos em Jupyter Notebook

Em Jupyter Notebook, você pode visualizar circuitos quânticos com os módulos Python qdk.qsharp e qdk.widgets. O widgets módulo fornece um widget que renderiza um diagrama de circuito quântico como uma imagem SVG.

Exibir diagramas de circuito para uma expressão de entrada

  1. In VS Code, abra o menu Exibir e escolha Paleta de Comandos.

  2. Insira e selecione Criar: Novo Jupyter Notebook.

  3. Na primeira célula do notebook, execute o código a seguir para importar o qsharp pacote.

    from qdk import qsharp
    
  4. Crie uma nova célula e insira seu código Q#. Por exemplo, o código a seguir prepara um 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 exibir um circuito quântico simples com base no estado atual do programa, passe uma expressão de ponto de entrada para a qsharp.circuit função. Por exemplo, o diagrama de circuito do código anterior mostra dois registros qubit inicializados para o estado $\ket{0}$. Em seguida, uma porta Hadamard é aplicada ao primeiro qubit. Por fim, uma porta CNOT é aplicada em que o primeiro qubit é o controle, representado por um ponto, e o segundo qubit é o destino, representado por um X.

    qsharp.circuit("BellState()")
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. Para visualizar um circuito quântico como uma imagem SVG, use o widgets módulo. Crie uma nova célula e execute o código a seguir para visualizar o circuito que você criou na célula anterior.

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

    Captura de tela de um Jupyter Notebook que mostra como visualizar o circuito para uma operação Q#.

Exibir diagramas de circuito para operações com qubits

Você pode gerar diagramas de circuito de operações que tomam qubits ou matrizes de qubits como entrada. O diagrama mostra um fio para cada qubit de entrada, juntamente com fios para qubits adicionais que você aloca dentro da operação. Quando a operação usa uma matriz de qubits (Qubit[]), o circuito mostra a matriz como um registro de 2 qubits.

  1. Adicione uma nova célula e copie e execute o seguinte código Q#. Esse código prepara um estado cat.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Adicione uma nova célula e execute o código a seguir para visualizar o PrepareCatState circuito da operação.

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

Diagramas de circuito para circuitos dinâmicos

Os diagramas de circuito são gerados executando a lógica clássica dentro de um programa Q# e acompanhando todas as portas alocadas e aplicadas. Há suporte para loops e condicionais quando lidam apenas com valores clássicos.

No entanto, os programas que contêm loops e expressões condicionais que usam resultados de medição de qubit são mais difíceis de representar com um diagrama de circuito. Por exemplo, considere a seguinte expressão:

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

Essa expressão não pode ser representada com um diagrama de circuito simples porque as portas são condicionais em um resultado de medida. Circuitos com portões que dependem dos resultados da medição são chamados de circuitos dinâmicos.

Você pode gerar diagramas para circuitos dinâmicos executando o programa no simulador quântico e rastreando as portas conforme elas são aplicadas. Isso é chamado de modo de rastreamento porque os qubits e os portões são rastreados à medida que a simulação é executada.

A desvantagem dos circuitos rastreados é que eles capturam apenas o resultado da medida e as aplicações de portas consequentes para uma única simulação. No exemplo acima, se o resultado da medida for Zero, a X porta não estará no diagrama. Se você executar a simulação novamente, poderá obter um circuito diferente.