Sdílet prostřednictvím


Vizualizace diagramů kvantových obvodů pomocí Q#

Diagramy kvantových obvodů představují vizuální znázornění kvantových operací. Diagramy obvodů znázorňují tok qubitů v kvantovém programu, včetně bran a měření, které program aplikuje na qubity.

V tomto článku se dozvíte, jak vizuálně znázorňovat kvantové algoritmy s diagramy kvantových obvodů v Azure Quantum Development KitQDK() pomocí Visual Studio Code (VS Code) a Jupyter Notebook.

Další informace o diagramech kvantových obvodů najdete v tématu Konvence kvantových obvodů.

Požadavky

Vizualizace kvantových obvodů v VS Code

Pokud chcete vizualizovat kvantové okruhy programů VS Codev jazyce Q#, proveďte následující kroky.

Zobrazení diagramů okruhů pro program Q#

  1. Otevřete soubor VS CodeQ# nebo načtěte některou z kvantových ukázek.

  2. Z Circuit lensu vyberte příkaz Circuit, který předchází vaší operaci vstupního bodu.

    Snímek obrazovky se souborem Q#, který Visual Studio Code ukazuje, kde najít příkaz CodeLens.

Zobrazí se okno okruhu Q# a zobrazí diagram okruhu pro váš program. Následující okruh například odpovídá operaci, která umístí qubit do stavu superpozice a pak měří qubit. Diagram okruhu znázorňuje jeden qubitový registr inicializovaný do stavu $\ket{0}$. Pak se na qubit použije brána Hadamard, za kterou následuje měrná operace, která je reprezentována symbolem měřiče. V tomto případě je výsledek měření nula.

Snímek obrazovky s oknem okruhu Q#, které znázorňuje diagram okruhu pro náhodnou bitovou operaci

Návod

V souborech Q# a OpenQASM vyberte prvek v diagramu okruhu a zvýrazněte kód, který vytvoří prvek okruhu.

Zobrazení diagramů obvodů pro jednotlivé operace

Pokud chcete vizualizovat kvantový okruh pro jednotlivé operace v souboru Q#, zvolte příkaz Okruh z objektivu kódu, který předchází operaci.

Snímek obrazovky Visual Studio Code, který ukazuje, jak vizualizovat okruh jedné operace Q# v programu Q#.

Zobrazení diagramů okruhů při ladění

Při použití VS Code ladicího programu v programu V# můžete kvantový okruh vizualizovat na základě stavu programu na aktuální zarážce ladicího programu.

  1. Vyberte příkaz Ladit z funkce code lens umístěné před vaší vstupní operací.
  2. V podokně Spustit a ladit rozbalte rozevírací nabídku Kvantový okruh v nabídce PROMĚNNÉ. Otevře se panel QDK Okruh, který zobrazuje obvod, zatímco procházíte programem.
  3. Nastavte body přerušení a procházejte kódem krok za krokem, abyste viděli, jak se obvod aktualizuje při spuštění programu.

Kvantové obvody v Jupyter Notebook

V Jupyter Notebook můžete vizualizovat kvantové obvody pomocí Python modulů qdk.qsharp a qdk.widgets. Modul widgets poskytuje widget, který vykresluje diagram kvantového obvodu jako obrázek SVG.

Zobrazení diagramů obvodů pro vstupní výraz

  1. V VS Code otevřete nabídku Zobrazit a zvolte Paletu příkazů.

  2. Zadejte a vyberte Vytvořit: Nový Jupyter Notebook.

  3. V první buňce poznámkového bloku spusťte následující kód pro import qsharp balíčku.

    from qdk import qsharp
    
  4. Vytvořte novou buňku a zadejte kód Q#. Například následující kód připraví Bellův stav:

    %%qsharp
    
    // Prepare a Bell State.
    operation BellState() : Unit {
        use register = Qubit[2];
        H(register[0]);
        CNOT(register[0], register[1]);
    }
    
  5. Pokud chcete zobrazit jednoduchý kvantový obvod založený na aktuálním stavu programu, předejte funkci výraz qsharp.circuit vstupního bodu. Například diagram okruhu předchozího kódu ukazuje dva qubitové registry, které jsou inicializovány do stavu $\ket{0}$. Pak se na první qubit použije brána Hadamard. Nakonec se použije brána CNOT, kde první qubit je ovládací prvek reprezentovaný tečkou a druhý qubit je cíl reprezentovaný X.

    qsharp.circuit("BellState()")
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. K vizualizaci kvantového okruhu jako obrázku SVG použijte widgets modul. Vytvořte novou buňku a spuštěním následujícího kódu vizualizujete okruh, který jste vytvořili v předchozí buňce.

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

    Snímek obrazovky znázorňující Jupyter Notebook , jak vizualizovat okruh pro operaci Q#.

Zobrazení diagramů okruhů pro operace s qubity

Můžete vygenerovat diagramy obvodů operací, které jako vstup přebírají qubity nebo pole qubitů. Diagram znázorňuje drát pro každý vstupní qubit spolu s dráty pro další qubity, které přidělujete v rámci operace. Když operace vezme pole qubitů (Qubit[]), okruh zobrazí pole jako registr 2 qubitů.

  1. Přidejte novou buňku a pak zkopírujte a spusťte následující kód Q#. Tento kód připraví stav kočky.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Přidejte novou buňku a spuštěním následujícího kódu vizualizujete okruh PrepareCatState operace.

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

Diagramy okruhů pro dynamické okruhy

Diagramy okruhů se generují spuštěním klasické logiky v rámci programu Q# a sledováním všech přidělených a použitých bran. Smyčky a podmíněné výrazy jsou podporovány, když se zabývají pouze klasickými hodnotami.

Programy, které obsahují smyčky a podmíněné výrazy, které používají výsledky měření qubitu, jsou ale složitější pro reprezentaci s diagramem okruhu. Představte si například následující výraz:

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

Tento výraz nemůže být reprezentován jednoduchým diagramem obvodu, protože brány jsou podmíněné na výsledku měření. Okruhy s branami, které závisí na výsledcích měření, se nazývají dynamické obvody.

Diagramy pro dynamické okruhy můžete vygenerovat spuštěním programu v kvantovém simulátoru a trasováním bran při jejich použití. To se nazývá režim trasování, protože qubity a brány jsou trasovány při provedení simulace.

Nevýhodou trasovaných obvodů je, že zaznamenávají pouze výsledek měření a následné aplikace bran pro jednu simulaci. V předchozím příkladu platí, že pokud je Zerovýsledek měření , brána X není v diagramu. Pokud simulaci spustíte znovu, můžete získat jiný obvod.