Jak wizualizować diagramy obwodów kwantowych za pomocą QDK

Diagramy obwodów kwantowych to wizualna reprezentacja algorytmów kwantowych. Diagramy obwodów pokazują przepływ kubitów za pośrednictwem programu kwantowego, w tym bram i pomiarów, które program stosuje do kubitów.

Z tego artykułu dowiesz się, jak tworzyć diagramy obwodów dla programów Q# i OpenQASM przy użyciu Microsoft Quantum Development Kit (QDK) oraz Visual Studio Code (VS Code) i Jupyter Notebook.

Aby uzyskać więcej informacji na temat diagramów obwodów kwantowych, zobacz Konwencje diagramu obwodu kwantowego.

Wymagania wstępne

Aby utworzyć diagramy obwodów na podstawie plików Q# i OpenQASM w programie VS Code, zainstaluj następujące elementy:

Aby utworzyć diagramy obwodów z poziomu programów języka Python w programie Jupyter Notebook, zainstaluj następujące elementy:

  • Rozszerzenie Python i rozszerzenie Jupyter wVS Code.

  • Najnowsza wersja pakietu Python qdk z rozszerzeniem jupyter.

    pip install --upgrade "qdk[jupyter]"
    

Wizualizowanie obwodów kwantowych w programie VS Code

QDK Za pomocą rozszerzenia w programie VS Codemożna tworzyć diagramy obwodów dla plików Q# (.qs) i OpenQASM (.qasm).

Aby wyświetlić diagram obwodu w programie VS Code, wykonaj następujące kroki:

  1. Otwórz plik Q# lub OpenQASM w pliku VS Codelub załaduj jeden z przykładów kwantowych z pliku QDK.
  2. Wybierz polecenie Obwód z narzędzia CodeLens, które znajduje się przed twoim programem.

Okno QDK Obwód otwiera się i wyświetla diagram obwodu dla twojego programu. Na przykład poniższy diagram obwodu odpowiada programowi, który generuje bit losowy. Obwód umieszcza kubit w stanie superpozycji, a następnie mierzy kubit.

QDK Zrzut ekranu przedstawiający okno Obwód, które przedstawia diagram obwodu dla programu bitów losowych.

Wskazówka

Wybierz element na diagramie obwodu, aby wyróżnić kod tworzący element obwodu.

Wyświetlanie diagramów obwodów dla poszczególnych operacji języka Q#

Aby zwizualizować obwód kwantowy dla pojedynczej operacji w pliku Q#, wybierz polecenie Circuit z funkcji CodeLens poprzedzającej operację.

Zrzut ekranu przedstawiający wizualizowanie Visual Studio Code obwodu pojedynczej operacji języka Q# w programie języka Q#.

Wyświetlanie diagramów obwodów podczas debugowania

W przypadku korzystania z VS Code debugera w programie języka Q# można zwizualizować obwód kwantowy na podstawie stanu programu w bieżącym punkcie przerwania debugera.

  1. Wybierz polecenie Debuguj z CodeLens, które poprzedza operację punktu wejścia.
  2. W okienku Uruchamianie i debugowanie rozwiń listę rozwijaną Obwód kwantowy w menu ZMIENNE . Panel QDK Obwód otwiera się, pokazując obwód podczas krokowego przechodzenia przez program.
  3. Ustaw punkty przerwania i przejdź krokowo przez kod, aby zobaczyć, jak obwód jest aktualizowany podczas działania programu.

Wizualizowanie obwodów kwantowych w programie Jupyter Notebook

W Jupyter Notebook, można wizualizować obwody kwantowe dla programów Q# i OpenQASM za pomocą modułów qdk.qsharp i qdk.widgets Python. Moduł widgets udostępnia widżet renderujący diagram obwodu kwantowego jako obraz SVG.

Aby uzyskać więcej przykładów generowania schematu obwodu w programie Jupyter Notebook, zapoznaj się z przykładowym notatnikiem Circuits w QDK repozytorium GitHub.

Wyświetlanie diagramów obwodów dla programów języka Q#

Aby wyświetlić schemat obwodu dla programu Q# w Jupyter Notebook, wykonaj następujące kroki:

  1. W VS Codeprogramie otwórz menu Widok i wybierz pozycję Paleta poleceń.

  2. Wprowadź Utwórz: Nowy Jupyter Notebook. Jupyter Notebook Pusty plik zostanie otwarty na nowej karcie.

  3. W pierwszej komórce notatnika zaimportuj moduł qdk.qsharp.

    from qdk import qsharp
    
  4. Utwórz nową komórkę i wprowadź kod języka Q#. Na przykład poniższy kod przygotowuje stan Bella:

    %%qsharp
    
    // Prepare a Bell State.
    operation BellState() : Unit {
        use register = Qubit[2];
        H(register[0]);
        CNOT(register[0], register[1]);
    }
    
  5. Aby wyświetlić diagram obwodu kwantowego, przekaż operację Q# do funkcji qsharp.circuit. Uruchom następujący kod w nowej komórce:

    qsharp.circuit("BellState()")
    

    Dane wyjściowe wyglądają następująco:

    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. Aby renderować obraz SVG obwodu kwantowego, użyj modułu widgets . Utwórz nową komórkę, a następnie uruchom następujący kod, aby zwizualizować ten sam obwód, który został utworzony w poprzedniej komórce.

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

    Diagram obwodu wygląda następująco:

    Zrzut ekranu notatnika Jupyter, który pokazuje, jak zwizualizować obwód w programie Q#.

Wyświetlanie diagramów obwodów dla operacji, które przyjmują kubity jako dane wejściowe

W poprzednim przykładzie stanu Bell operacja BellState nie pobiera kubitów jako danych wejściowych. Jeśli operacja przyjmuje kubity lub tablice kubitów jako dane wejściowe, pomiń nawiasy podczas przekazywania operacji w celu narysowania diagramów obwodów.

Wykonaj na przykład następujące kroki, aby narysować diagramy obwodów dla operacji, która przyjmuje kubity:

  1. W nowej komórce uruchom następujący kod języka Q#. Ten kod przygotowuje stan kota.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Aby narysować obwód jako diagram tekstowy, uruchom następujący kod:

    Circuit(qsharp.circuit(operation="PrepareCatState"))
    
  3. Aby renderować diagram obwodu jako obraz SVG, uruchom następujący kod:

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

Gdy operacja przyjmuje tablicę kubitów (Qubit[]), obwód pokazuje tablicę jako rejestr dwóch kubitów.

Wyświetlanie diagramów obwodów dla programów OpenQASM

Aby wyświetlić diagram obwodu dla programu OpenQASM w programie Jupyter Notebook, wykonaj następujące kroki:

  1. W VS Codeprogramie otwórz menu Widok i wybierz pozycję Paleta poleceń.

  2. Wprowadź Utwórz: Nowy Jupyter Notebook. Jupyter Notebook Pusty plik zostanie otwarty na nowej karcie.

  3. W pierwszej komórce notesu uruchom następujący kod, aby zaimportować niezbędne obiekty do utworzenia i wywołania funkcji OpenQASM przy użyciu QDK pakietu Python:

    from qdk.openqasm import import_openqasm, ProgramType
    
  4. W nowej komórce napisz program OpenQASM w łańcuchu tekstowym w języku Python i przekaż łańcuch do funkcji import_openqasm. Aby wywołać program w kodzie języka Python, nadaj funkcji nazwę i ustaw wartość program_typeProgramType.File.

    source = """
        include "stdgates.inc";
        bit[2] c;
        qubit[2] q;
        h q[0];
        cx q[0], q[1];
        c = measure q;
    """
    
    import_openqasm(source, name="bell", program_type=ProgramType.File)
    
  5. W nowej komórce zaimportuj program OpenQASM jako funkcję języka Python i wywołaj program, aby uzyskać wyniki pomiaru.

    from qdk.code.qasm_import import bell
    
    bell()
    
  6. Aby narysować obwód jako diagram tekstowy, uruchom następujący kod w nowej komórce:

    from qdk.qsharp import circuit
    
    circuit(bell)
    

    Dane wyjściowe wyglądają następująco:

    q_0    ── H ──── ● ──── M ──
                 │      ╘═══
    q_1    ───────── X ──── M ──
                        ╘═══
    
  7. Aby renderować diagram obwodu jako obraz SVG, uruchom następujący kod w nowej komórce:

    from qdk.widgets import Circuit
    
    Circuit(qsharp.circuit(bell))
    

    Diagram obwodu wygląda następująco:

    Jupyter Notebook Zrzut ekranu przedstawiający sposób wizualizacji obwodu dla programu OpenQASM.

Uwaga / Notatka

W przypadku programów OpenQASM nie można wyświetlać diagramów obwodów dla poszczególnych funkcji. Diagramy obwodów można wyświetlać tylko dla całego programu.