Delen via


Kwantumcircuitdiagrammen visualiseren met Q#

Kwantumcircuitdiagrammen zijn een visuele weergave van kwantumbewerkingen. Circuitdiagrammen tonen de stroom van qubits via het kwantumprogramma, inclusief de poorten en metingen die het programma toepast op de qubits.

In dit artikel leert u hoe u kwantumalgoritmen visueel kunt vertegenwoordigen met kwantumcircuitdiagrammen in de Azure Quantum Development Kit () met behulp van QDK (Visual Studio Code) en VS CodeJupyter Notebook.

Zie Kwantumcircuitconventies voor meer informatie over kwantumcircuitdiagrammen.

Vereisten

Kwantumcircuits visualiseren in VS Code

Voer de volgende stappen uit om kwantumcircuits van Q#-programma's in VS Codete visualiseren.

Circuitdiagrammen voor een Q#-programma weergeven

  1. Open een Q#-bestand in VS Codeof laad een van de kwantumvoorbeelden.

  2. Kies de Circuit-opdracht uit de code lens die aan de bewerking van het toegangspunt voorafgaat.

    Schermopname van een Q#-bestand in Visual Studio Code waarin wordt weergegeven waar de codelens-circuitsopdracht te vinden is.

Het Q#-circuitvenster wordt weergegeven en geeft het circuitdiagram voor uw programma weer. Het volgende circuit komt bijvoorbeeld overeen met een bewerking die een qubit in een superpositiestatus plaatst en vervolgens de qubit meet. In het circuitdiagram ziet u één qubitregister dat is geïnitialiseerd naar de status $\ket{0}$. Vervolgens wordt een Hadamard-poort toegepast op de qubit, gevolgd door een meetbewerking, die wordt vertegenwoordigd door een metersymbool. In dit geval is het meetresultaat nul.

Schermopname van het Q#-circuitvenster met het circuitdiagram voor de willekeurige bitbewerking.

Aanbeveling

Selecteer in Q#- en OpenQASM-bestanden een element in het circuitdiagram om de code te markeren waarmee het circuitelement wordt gemaakt.

Circuitdiagrammen voor afzonderlijke bewerkingen weergeven

Als u het kwantumcircuit voor een afzonderlijke bewerking in een Q#-bestand wilt visualiseren, kiest u de Circuit-opdracht in de codelens die voor de bewerking staat.

Schermopname van Visual Studio Code die laat zien hoe je het circuit van een enkele Q#-bewerking in een Q#-programma kunt visualiseren.

Circuitdiagrammen weergeven wanneer u foutopsporing uitvoert

Wanneer u het VS Code foutopsporingsprogramma in een Q#-programma gebruikt, kunt u het kwantumcircuit visualiseren op basis van de status van het programma op het huidige onderbrekingspunt van het foutopsporingsprogramma.

  1. Kies de opdracht debuggen uit de codelens die voorafgaat aan de bewerking van het invoerpunt.
  2. Vouw in het deelvenster Uitvoeren en foutopsporing de vervolgkeuzelijst Quantum Circuit uit in het menu VARIABELEN . Het QDK circuitvenster wordt geopend, waarin het circuit wordt weergegeven terwijl u het programma doorloopt.
  3. Stel onderbrekingspunten in en doorloop uw code om te zien hoe het circuit wordt bijgewerkt terwijl uw programma wordt uitgevoerd.

Kwantumcircuits in Jupyter Notebook

In Jupyter Notebookkunt u kwantumcircuits visualiseren met de qdk.qsharp en qdk.widgets Python-modules. De widgets module biedt een widget waarmee een kwantumcircuitdiagram wordt weergegeven als een SVG-afbeelding.

Circuitdiagrammen weergeven voor een invoeruitdrukking

  1. Open VS Codehet menu Beeld en kies Opdrachtpalet.

  2. Voer in en kies Maken: NieuwJupyter Notebook.

  3. Voer in de eerste cel van het notebook de volgende code uit om het qsharp pakket te importeren.

    from qdk import qsharp
    
  4. Maak een nieuwe cel en voer uw Q#-code in. Met de volgende code wordt bijvoorbeeld een Bell-toestand voorbereid:

    %%qsharp
    
    // Prepare a Bell State.
    operation BellState() : Unit {
        use register = Qubit[2];
        H(register[0]);
        CNOT(register[0], register[1]);
    }
    
  5. Als u een eenvoudig kwantumcircuit wilt weergeven op basis van de huidige status van uw programma, geeft u een ingangspuntexpressie door aan de qsharp.circuit functie. In het circuitdiagram van de voorgaande code ziet u bijvoorbeeld twee qubitregisters die zijn geïnitialiseerd naar de status $\ket{0}$. Vervolgens wordt een Hadamard-poort toegepast op de eerste qubit. Ten slotte wordt een CNOT-poort toegepast waarbij de eerste qubit het besturingselement is, vertegenwoordigd door een punt en de tweede qubit het doel is, vertegenwoordigd door een X.

    qsharp.circuit("BellState()")
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. Als u een kwantumcircuit als een SVG-afbeelding wilt visualiseren, gebruikt u de widgets module. Maak een nieuwe cel en voer vervolgens de volgende code uit om het circuit te visualiseren dat u in de vorige cel hebt gemaakt.

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

    Schermopname van een Jupyter Notebook bestand dat laat zien hoe u het circuit voor een Q#-bewerking kunt visualiseren.

Circuitdiagrammen weergeven voor bewerkingen met qubits

U kunt circuitdiagrammen genereren van bewerkingen die qubits of reeksen van qubits als invoer gebruiken. In het diagram ziet u een draad voor elke invoer-qubit, samen met draden voor extra qubits die u in de bewerking toewijst. Wanneer de bewerking een matrix van qubits (Qubit[])gebruikt, toont het circuit de matrix als een register van 2 qubits.

  1. Voeg een nieuwe cel toe en kopieer en voer de volgende Q#-code uit. Met deze code wordt een cat-status voorbereid.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Voeg een nieuwe cel toe en voer de volgende code uit om het circuit van de PrepareCatState bewerking te visualiseren.

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

Circuitdiagrammen voor dynamische circuits

Circuitdiagrammen worden gegenereerd door de klassieke logica in een Q#-programma uit te voeren en alle toegewezen en toegepaste poorten bij te houden. Lussen en voorwaarden worden ondersteund wanneer ze alleen omgaan met klassieke waarden.

Programma's die lussen en voorwaardelijke expressies bevatten die qubitmetingsresultaten gebruiken, zijn echter lastiger om te vertegenwoordigen met een circuitdiagram. Denk bijvoorbeeld aan de volgende expressie:

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

Deze expressie kan niet worden weergegeven met een eenvoudig circuitdiagram omdat de poorten afhankelijk zijn van een meetresultaat. Circuits met poorten die afhankelijk zijn van meetresultaten worden dynamische circuits genoemd.

U kunt diagrammen genereren voor dynamische circuits door het programma uit te voeren in de kwantumsimulator en de poorten te traceren terwijl ze worden toegepast. Dit wordt de traceringsmodus genoemd omdat de qubits en poorten worden getraceerd terwijl de simulatie wordt uitgevoerd.

Het nadeel van getraceerde circuits is dat ze alleen het meetresultaat en de consequente poorttoepassingen voor één simulatie vastleggen. Als in het bovenstaande voorbeeld het resultaat van de meting is Zero, bevindt de X poort zich niet in het diagram. Als u de simulatie opnieuw uitvoert, krijgt u mogelijk een ander circuit.