Udostępnij przez


Jak wizualizować diagramy obwodów kwantowych za pomocą języka Q#

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

Z tego artykułu dowiesz się, jak wizualnie reprezentować algorytmy kwantowe za pomocą diagramów obwodów kwantowych w Azure Quantum Development Kit (QDK) za pomocą Visual Studio Code (VS Code) oraz Jupyter Notebook.

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

Wymagania wstępne

Wizualizowanie obwodów kwantowych w programie VS Code

Aby wizualizować obwody kwantowe programów języka Q# w programie VS Code, wykonaj następujące kroki.

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

  1. Otwórz plik Q# w VS Code lub załaduj jeden z przykładów kwantowych.

  2. Wybierz polecenie Obwód z CodeLens, które poprzedza operację punktu wejścia.

    Zrzut ekranu przedstawiający plik Q# w Visual Studio Code, w którym pokazano, gdzie znaleźć polecenie CodeLens dotyczące obwodu.

W oknie obwodu języka Q# zostanie wyświetlony diagram obwodu Twojego programu. Na przykład następujący obwód odpowiada operacji, która umieszcza kubit w stanie superpozycji, a następnie mierzy kubit. Diagram obwodu przedstawia jeden rejestr kubitów, który został zainicjowany do stanu $\ket{0}$. Następnie brama Hadamarda jest stosowana na kubicie, po czym następuje operacja pomiaru, która jest reprezentowana przez symbol miernika. W tym przypadku wynik pomiaru wynosi zero.

Zrzut ekranu okna obwodu Q#, który pokazuje diagram obwodu dla losowej operacji bitowej.

Wskazówka

W plikach Q# i OpenQASM wybierz element na diagramie obwodu, aby wyróżnić kod tworzący element obwodu.

Wyświetlanie diagramów obwodów dla poszczególnych operacji

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.

Obwody kwantowe w Jupyter Notebook

W Jupyter Notebook można wizualizować obwody kwantowe przy użyciu modułów Python qdk.qsharp i qdk.widgets. Moduł widgets udostępnia widżet renderujący diagram obwodu kwantowego jako obraz SVG.

Wyświetlanie diagramów obwodów dla wyrażenia wejścia

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

  2. Wprowadź i wybierz opcję Utwórz: Nowy Jupyter Notebook.

  3. Najpierw w pierwszej komórce notesu uruchom następujący kod, aby zaimportować pakiet 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ć prosty obwód kwantowy na podstawie bieżącego stanu programu, przekaż wyrażenie punktu wejścia do qsharp.circuit funkcji. Na przykład diagram obwodu poprzedniego kodu przedstawia dwa rejestry kubitów, które są inicjowane do stanu $\ket{0}$. Następnie bramka Hadamarda jest stosowana do pierwszego kubitu. Na koniec brama CNOT jest stosowana, gdzie pierwszy kubit jest kontrolką reprezentowaną przez kropkę, a drugi kubit jest obiektem docelowym reprezentowanym przez symbol X.

    qsharp.circuit("BellState()")
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. Aby zwizualizować obwód kwantowy jako obraz SVG, użyj modułu widgets . Utwórz nową komórkę, a następnie uruchom następujący kod, aby zwizualizować obwód utworzony w poprzedniej komórce.

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

    Zrzut ekranu Jupyter Notebook, który pokazuje wizualizację obwodu dla operacji Q#.

Wyświetlanie diagramów obwodów dla operacji z kubitami

Możesz wygenerować diagramy obwodów operacji, które przyjmują kubity lub tablice kubitów, jako dane wejściowe. Na diagramie przedstawiono przewody dla każdego kubitu wejściowego wraz z przewodami dla dodatkowych kubitów przydzielanych w ramach operacji. Gdy operacja przyjmuje tablicę kubitów (Qubit[]), obwód pokazuje tablicę jako rejestr 2 kubitów.

  1. Dodaj nową komórkę, a następnie skopiuj i uruchom następujący kod w języku Q#. Ten kod przygotowuje stan kota.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Dodaj nową komórkę i uruchom następujący kod, aby zwizualizować obwód PrepareCatState operacji.

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

Diagramy obwodów dla obwodów dynamicznych

Diagramy obwodów są generowane poprzez wykonanie klasycznej logiki w programie Q# i monitorowanie wszystkich przydzielonych oraz zastosowanych bram. Pętle i instrukcje warunkowe są obsługiwane, gdy zajmują się tylko wartościami klasycznymi.

Jednak programy zawierające pętle i wyrażenia warunkowe korzystające z wyników pomiaru kubitu są trudniejsze do reprezentowania za pomocą diagramu obwodu. Rozważmy na przykład następujące wyrażenie:

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

Tego wyrażenia nie można przedstawić za pomocą prostego schematu układu, ponieważ bramki są uzależnione od wyników pomiarów. Obwody z bramami, które zależą od wyników pomiaru, są nazywane obwodami dynamicznymi.

Aby wygenerować diagramy dla obwodów dynamicznych, można uruchomić program w symulatorze kwantowym i śledzić operacje bram podczas ich stosowania. Jest to nazywane trybem śledzenia, ponieważ kubity i bramy są śledzone podczas wykonywania symulacji.

Wadą śledzenia obwodów jest to, że przechwytują tylko wynik pomiaru i wynikające z tego zastosowania bramy dla jednej symulacji. W powyższym przykładzie, jeśli wynik pomiaru to Zero, brama X nie znajduje się na diagramie. Jeśli ponownie uruchomisz symulację, możesz uzyskać inny obwód.