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í. Zobrazují tok qubitů prostřednictvím kvantového programu, včetně bran a měření použitých na ně.

V tomto článku se dozvíte, jak vizuálně znázorňovat kvantové algoritmy pomocí diagramů kvantových obvodů pomocí editoru Visual Studio Code nebo Poznámkových bloků Jupyter.

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

Požadavky

VS Code

  • Nejnovější verze editoru Visual Studio Code nebo otevření editoru VS Code na webu

  • Nejnovější verze rozšíření Azure Quantum Development Kit.

  • Nejnovější balíčky Azure Quantum qsharp a azure-quantum Python.

    python -m pip install --upgrade qsharp azure-quantum
    

Poznámkové bloky Jupyter

Kvantové okruhy pomocí editoru Visual Studio Code

Pomocí těchto kroků vizualizujete kvantové okruhy Q# programů v editoru Visual Studio Code. Další informace o konvencích diagramů kvantových obvodů najdete v tématu Konvence kvantových obvodů.

Zobrazení diagramů okruhů pro Q# program

  1. Otevřete soubor v editoru Q# Visual Studio Code nebo načtěte některou z kvantových ukázek.

  2. Pokud chcete vizualizovat kvantový okruh Q# programu, vyberte Zobrazit –> Paleta příkazů a zadejte "okruh", který by měl zobrazit Q#možnost : Zobrazit okruh . Můžete také kliknout na Okruh ze seznamu příkazů předcházejících Main().

    Snímek obrazovky se souborem v editoru Q# Visual Studio Code zobrazující, kde najít příkaz okruhu s kódem lens

  3. Okruh se zobrazí v okně okruhu Q# . Následující okruh například odpovídá operaci, která umístí qubit do superpozice a pak ho změruje. Diagram okruhu znázorňuje jeden qubitový registr, který je inicializován do stavu |0⟩. Pak se na qubit použije brána Hadamard H, následovaná měrnou operací, která je reprezentována symbolem měřiče.

    Snímek obrazovky okna okruhu Q# znázorňující výsledný diagram okruhu pro náhodnou bitovou operaci

Zobrazení diagramů okruhů pro operace

Kvantový okruh můžete vizualizovat pro jednu Q# operaci. Uděláte to tak, že kliknete na tlačítko Okruh v objektivu kódu, který se zobrazí nad deklaraci operace.

Snímek obrazovky editoru Visual Studio Code znázorňující vizualizaci okruhů v Q# podokně okruhů po ladění programu

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

Při ladění Q# programu můžete kvantový okruh vizualizovat na základě aktuálního stavu programu.

  1. V seznamu příkazů objektivu kódu předcházejících Main()vyberte tlačítko Ladit .

  2. V zobrazení Spustit a ladit na levé straně rozbalte část Kvantového okruhu v podokně Proměnné, abyste zobrazili okruh při procházení programu.

    Snímek obrazovky editoru Visual Studio Code znázorňující, jak vizualizovat okruh při ladění programu

  3. Můžete procházet kód a nastavit zarážky v různých bodech, abyste viděli aktualizaci okruhu při spuštění programu.

  4. Aktuální kvantový okruh se zobrazuje na panelu Q#Okruh. Tento diagram obvodu představuje aktuální stav simulátoru, tj. brány, které byly použity až do aktuálního bodu provádění.

    Snímek obrazovky editoru Visual Studio Code znázorňující, jak vizualizovat okruh pro jednu Q# operaci

Kvantové obvody s poznámkovými bloky Jupyter

V Poznámkových blocích Jupyter můžete pomocí balíčku vizualizovat qsharp-widgets kvantové okruhy. Tento balíček poskytuje widget, který vykresluje diagram kvantového obvodu jako obrázek SVG.

  1. V editoru Visual Studio Code vyberte paletu Zobrazit > příkaz a vyberte Vytvořit: Nový poznámkový blok Jupyter.

  2. V první buňce poznámkového bloku spusťte následující kód pro import Q# modulu.

    import qsharp
    
  3. Přidejte novou buňku Q# a zadejte kód. Například následující kód připraví Stav zvonu.

    %%qsharp
    
    // Prepare a Bell State.
    use register = Qubit[2];
    H(register[0]);
    CNOT(register[0], register[1]);
    
  4. Funkci můžete použít dump_circuit() k zobrazení kvantového okruhu na základě aktuálního stavu programu. Diagram okruhu například zobrazuje dva qubitové registry, které se inicializují do stavu |0⟩. Pak se hadamardská brána H použije na první qubit. Potom se použije brána CNOT pomocí prvního qubitu jako ovládacího prvku, který je reprezentován jako tečka, a druhý qubit jako target, který je reprezentován jako X.

    qsharp.dump_circuit()
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  5. Kvantové okruhy můžete vizualizovat jako image SVG pomocí qsharp-widgets balíčku. V tomto případě je brána CNOT reprezentována jako čára spojující dva qubity s tečkou na řídicím qubitu a křížkem na qubitu target . Další informace najdete v tématu Konvence kvantových obvodů.

    from qsharp_widgets import Circuit
    
    Circuit(qsharp.dump_circuit())
    

    Snímek obrazovky s poznámkovým blokem Jupyter, který znázorňuje, jak vizualizovat okruh pro Q# operaci

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

Diagram okruhu můžete vygenerovat pro libovolný program pomocí vstupního výrazu voláním qsharp.circuit() a předáním vstupního výrazu jako argumentu.

  1. Přidejte například novou buňku a zkopírujte následující kód, který připraví stav GHZ.

    %%qsharp
    
    import Std.Diagnostics.*;
    import Std.Measurement.*;
    
    operation GHZSample(n: Int) : Result[] {
        use qs = Qubit[n];
    
        H(qs[0]);
        ApplyToEach(CNOT(qs[0], _), qs[1...]);
    
        let results = MeasureEachZ(qs);
        ResetAll(qs);
        return results;
    }
    
  2. Přidejte novou buňku a spusťte následující kód pro vizualizaci okruhu. Například připravte stav GHZ se 3 qubity.

    Circuit(qsharp.circuit("GHZSample(3)"))
    

Zobrazení diagramů okruhů pro operace s qubity

Diagramy okruhů můžete generovat pro libovolnou operaci, která přijímá qubity nebo pole qubitů. Diagram znázorňuje tolik vodičů, kolik je vstupních qubitů, a všechny další qubity, které jsou přiděleny v rámci operace. Když operace vezme pole qubitů (Qubit[]), okruh zobrazí pole jako registr 2 qubitů.

  1. Přidejte novou buňku a zkopírujte následující příklad. 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"))
    

Podmínky, které ovlivňují diagramy obvodů

Při vizualizaci kvantových obvodů můžou mít následující podmínky vliv na vizualizaci diagramu okruhu.

Dynamické obvody

Diagramy okruhů se generují spuštěním všech klasických logik v rámci Q# programu a sledováním všech qubitů, které byly přiděleny nebo brány použité. Smyčky a podmíněné výrazy jsou podporovány, pokud 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. Například výraz podobný následujícímu:

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

nelze reprezentovat jednoduchým diagramem obvodu, protože brány jsou podmíněné na výsledku měření. Takový okruh se nazývá dynamický okruh.

Diagramy okruhů je možné generovat pro dynamické okruhy spuštěním programu v kvantovém simulátoru a trasováním bran při jejich použití. Tomu se říká režim trasování , protože qubity a brány se sledují, protože probíhá simulace.

Nevýhodou trasovaných obvodů je, že zaznamenávají pouze výsledek měření a následné aplikace bran pro jednu simulaci. Pokud je Zerov předchozím příkladu výsledek měření , v diagramu nevidíte bránu X . Dalším spuštěním simulace může být trochu jiný okruh.

Target profil

Aktuálně vybraný target profil ovlivňuje způsob generování diagramů obvodů. Target profily se používají k určení možností hardwaru target a omezení, která jsou pro kvantový program uložená.

target Pokud je profil nastavený na Unrestricted nebo QIR Adaptive RI, diagramy okruhů zobrazují kvantové operace, které jsou vyvolány v Q# programu. target Když je profil nastavený na základ QIR, diagramy okruhů zobrazují kvantové operace, které by se spouštěly na hardwaru, pokud je program odeslán do Azure Quantum s tímto target profilem.

Poznámka:

  • Pokud chcete vybrat profil v editoru target VS Code, vyberte Zobrazit –> Paleta příkazů a vyberteQ#: Nastavte profil Azure Quantum QIRtarget. Můžete vybrat QIR basepoložku , QIR Adaptive RInebo unrestricted z rozevíracího seznamu.

  • Výběr profilu v Pythonutarget, volání qsharp.init(target_profile=qsharp.TargetProfile.Base)qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)nebo qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted).

Konkrétně se používají dekompozice bran, které by výsledný okruh byly kompatibilní s možnostmi hardwaru target . Jedná se o stejné rozklady, které by se použily při generování kódu a odesílání do Azure Quantum.

  1. Představte si například následující Q# program, který měří qubit a pole qubitů.

    import Std.Measurement.*;
    
    operation Main() : (Result, Result[]) {
        // The `M` operation performs a measurement of a single qubit in the
        // computational basis, also known as the Pauli Z basis.
        use q = Qubit();
        let result = M(q);
        Reset(q);
    
        // The `MeasureEachZ` operation measures each qubit in an array in the
        // computational basis and returns an array of `Result` values.
        use qs = Qubit[2];
        let results = MeasureEachZ(qs);
    
        return (result, results);
    }
    
  2. Pokud target je profil nastavený na Unrestricted nebo QIR Adaptive RI, brány zobrazené v okruhu přesně odpovídají kvantovým operacím, které jsou vyvolány v Q# programu.

    Snímek obrazovky s kvantovými okruhy, když target je profil neomezený

  3. target Pokud je profil základem QIR, okruh vypadá jinak. Vzhledem k tomu, že základní profil targets nepovoluje opakované použití qubitu po měření, měření se teď provádí na propleteném qubitu. Vzhledem k tomu Reset , že operace není podporovanou bránou v základním profilu, je zrušena. Výsledný okruh odpovídá tomu, co by se spustilo na hardwaru, pokud se tento program odešle do Azure Quantum s tímto target profilem.

    Snímek obrazovky s kvantovými okruhy, když target je profil základem QIR