Tworzenie i wizualizowanie obwodów za pomocą elementu circuit editor

circuit editor jest funkcją zestawu narzędzi Quantum Development Kit (QDK), która udostępnia interfejs graficzny, w którym można tworzyć, edytować i wizualizować diagramy obwodów kwantowych w projektach Q#. Możesz użyć obwodów, które tworzysz bezpośrednio w Q# programach jako operacji możliwych do wywołania.

Jak uzyskać dostęp do circuit editor

Aby rozpocząć pracę z programem circuit editor, wykonaj następujące kroki:

  1. Utwórz nowy Q# projekt w programie VS Code lub otwórz istniejący projekt.
  2. Utwórz nowy plik obwodu z rozszerzeniem .qsc.
  3. Otwórz plik obwodu w programie VS Code.

Widok domyślny dla plików circuit editor to .qsc.

funkcje circuit editor

Oto, co można zrobić za pomocą polecenia circuit editor:

Funkcja Jak używać
Rozwiń panel wizualizacji stanu Kliknij pozycję Wizualizacja stanu, aby rozwinąć panel Wizualizatora stanów i wyświetlić wynikowy stan kwantowy z uruchomienia obwodu. Na panelu przedstawiono gęstość prawdopodobieństwa i fazę dla każdego stanu podstawy. Przybornik służy do edytowania obwodu i wyświetlania aktualizacji panelu na żywo.
Wstawianie elementu obwodu Kliknij i przeciągnij element z przybornika do diagramu obwodu.
Usuwanie elementu obwodu Kliknij i przeciągnij element z diagramu obwodu. Możesz też kliknąć prawym przyciskiem myszy element i wybrać polecenie Usuń z menu kontekstowego.
Przenoszenie elementu obwodu Kliknij i przeciągnij element do nowej lokalizacji na diagramie obwodu.
Kopiowanie elementu obwodu Przytrzymaj wciśnięty Ctrl , klikając i przeciągając element do nowej lokalizacji na diagramie obwodu.
Dodaj kubit Umieść element z przybornika na nowym przewodzie na schemacie obwodu. Możesz też przenieść istniejący element do nowego przewodu na diagramie.
Usuń kubit Kliknij i przeciągnij ikonę kubitu z diagramu obwodu. Kubit najbardziej dolny jest automatycznie usuwany po usunięciu wszystkich elementów obwodu z tego kubitu.
Zmień kolejność kubitów Kliknij i przeciągnij ikony kubitu na diagramie obwodu.
Dodawanie kontrolki do bramy Kliknij prawym przyciskiem myszy ikonę bramy, wybierz polecenie Dodaj kontrolkę z menu kontekstowego, a następnie wybierz przewód kubitu sterującego.
Usuwanie kontrolki z bramy Kliknij prawym przyciskiem myszy ikonę bramy, wybierz polecenie Usuń kontrolkę z menu kontekstowego, a następnie wybierz ikonę kontrolki, którą chcesz usunąć. Możesz również kliknąć prawym przyciskiem myszy ikonę kontrolki bezpośrednio i wybrać polecenie Usuń kontrolkę lub przeciągnąć ikonę kontrolki z diagramu.
Konwertowanie bramy na jej przyleganie Kliknij prawym przyciskiem myszy ikonę bramy i wybierz Przełącz Adjoint z menu kontekstowego.
Definiowanie argumentu bramy Podczas umieszczania bramy, która wymaga podania argumentu, zostanie wyświetlone okno dialogowe. Wprowadź liczbę lub wyrażenie w polu monitu. Aby zaktualizować argument, kliknij prawym przyciskiem myszy bramę i wybierz polecenie Edytuj argument. Możesz też kliknąć lewym przyciskiem myszy tekst argumentu na ikonie bramy.

Jak używać circuit editor obwodów w Q# projektach

Pliki obwodów z rozszerzeniem .qsc definiują operacje, do których można się odwoływać z kodu Q# w ramach tego samego projektu Q#. Obwody z .qsc plików są wyświetlane jak każda inna Q# operacja i są obsługiwane przez usługę Q# językową z funkcjami takimi jak uzupełnianie, pomoc dotycząca podpisów i definicja go-to.

Plik obwodu definiuje przestrzeń nazw pochodzącą z nazwy pliku, podobną do sposobu Q# działania plików. Obwód w pliku .qsc definiuje operację Q#, która ma taką samą nazwę jak ten plik w tej samej przestrzeni nazw. Aby na przykład odwołać się do obwodu z pliku Foo.qsc w kodzie Q#, użyj następującej instrukcji importu: import Foo.Foo;.

Poniższy Q# program importuje obwód z pliku JointMeasurement.qsc, a następnie wywołuje JointMeasurement() operację w celu zastosowania obwodu do systemu kubitów.

    import JointMeasurement.JointMeasurement;

    operation Main() : Result[] {
        use qs = Qubit[4];
        ApplyToEach(H, qs[0..2]);
        let results = JointMeasurement(qs);
        ResetAll(qs);
        results
}