Поделиться через


Визуализация схем квантовых каналов с помощью Q#

Схемы квантовых каналов — это визуальное представление квантовых операций. Они показывают поток кубитов через квантовую программу, включая ворота и измерения, примененные к ним.

В этой статье вы узнаете, как визуально представлять квантовые алгоритмы с помощью схем квантовых каналов с помощью Visual Studio Code или Jupyter Notebook.

Дополнительные сведения о соглашениях схемы квантовых каналов см . в соглашениях о квантовых каналах.

Необходимые компоненты

VS Code

Записные книжки Jupyter

Квантовые каналы с помощью Visual Studio Code

Выполните следующие действия, чтобы визуализировать квантовые каналы Q# программ в Visual Studio Code. Дополнительные сведения о соглашениях схемы квантовых каналов см . в соглашениях о квантовых каналах.

Просмотр схем каналов для Q# программы

  1. Q# Откройте файл в Visual Studio Code или загрузите один из квантовых примеров.

  2. Чтобы визуализировать квантовый канал Q# программы, выберите вид —> палитра команд и введите "канал", который должен открыть Q#параметр : Show circuit . Вы также можете щелкнуть канал из списка команд ниже @EntryPoint().

    Снимок экрана: файл в Visual Studio Code, показывающий Q# , где найти команду канала объектива кода.

  3. Канал отображается в Q# окне канала. Например, следующий канал соответствует операции, которая помещает кубитов в суперпозицию, а затем измеряет ее. На схеме канала показан один регистр кубита, который он инициализирован в состояние |0⟩. Затем, ворота Hadamard, H, применяются к кубитам, за которым следует операция измерения, которая представлена символом измерения.

    Снимок экрана: окно канала с Q# результирующей схемой канала для случайной битовой операции.

Просмотр схем каналов для операций

Вы можете визуализировать квантовый канал для одной Q# операции. Для этого нажмите кнопку "Канал" в объективе кода, который отображается над объявлением операции.

Снимок экрана: Visual Studio Code, показывающий, как визуализировать каналы в Q# области каналов после отладки программы.

Просмотр схем каналов при отладке

При отладке программы можно визуализировать квантовый Q# канал на основе текущего состояния программы.

  1. Нажмите кнопку отладки в списке команд объектива кода ниже @EntryPoint().

  2. В представлении "Запуск и отладка" в левой части разверните раздел "Квантовый канал" в области "Переменные", чтобы отобразить канал по мере выполнения программы.

    Снимок экрана: Visual Studio Code, показывающий, как визуализировать канал при отладке программы.

  3. Вы можете выполнить шаги по коду и задать точки останова в различных точках, чтобы увидеть обновление канала при запуске программы.

  4. Текущий квантовый канал показан на Q# панели канала. Эта схема канала представляет текущее состояние симулятора, то есть шлюзы, которые были применены до текущей точки выполнения.

    Снимок экрана: Visual Studio Code, показывающий, как визуализировать канал для одной Q# операции.

Квантовые каналы с jupyter Notebook

В Jupyter Notebook можно визуализировать квантовые каналы с помощью qsharp-widgets пакета. Этот пакет предоставляет мини-приложение, которое отображает диаграмму квантовых каналов в виде образа SVG.

  1. В Visual Studio Code выберите палитру "Вид > команд" и выберите "Создать: создать записную книжку Jupyter".

  2. В первой ячейке записной книжки выполните следующий код, чтобы импортировать Q# модуль.

    import qsharp
    
  3. Добавьте новую ячейку Q# и введите код. Например, следующий код подготавливает состояние Колокола.

    %%qsharp
    
    // Prepare a Bell State.
    use register = Qubit[2];
    H(register[0]);
    CNOT(register[0], register[1]);
    
  4. Функцию dump_circuit() можно использовать для отображения квантового канала на основе текущего состояния программы. Например, на схеме канала показаны два регистра кубита, которые инициализированы в состояние |0⟩. Затем, ворота Hadamard, H, применяются к первому кубитам. После этого шлюз CNOT применяется с помощью первого кубита в качестве элемента управления, который представляется точкой, а второй кубит targetкак , который представлен как X.

    qsharp.dump_circuit()
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  5. Квантовые каналы можно визуализировать в виде образа SVG с помощью qsharp-widgets пакета. В этом случае ворота CNOT представляются как линия, соединяющая два кубита, с точкой на кубите управления и обрезанных крестом target на кубите. Дополнительные сведения см . в соглашениях о каналах Quantum.

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

    Снимок экрана: Записная книжка Jupyter, показывающая, как визуализировать канал для Q# операции.

Просмотр схем каналов для выражения записи

Вы можете создать схему схемы для любой программы с выражением записи, вызвав qsharp.circuit() и передав выражение записи в качестве аргумента.

  1. Например, добавьте новую ячейку и скопируйте следующий код, который подготавливает состояние GHZ.

    %%qsharp
    
    open Microsoft.Quantum.Diagnostics;
    open Microsoft.Quantum.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. Добавьте новую ячейку и запустите следующий код, чтобы визуализировать канал. Например, подготовьте состояние GHZ с 3 кубитами.

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

Просмотр схем каналов для операций с кубитами

Вы можете создавать схемы каналов для любой операции, которая принимает кубиты или массивы кубитов. На схеме отображается столько проводов, сколько входных кубитов, а также любые дополнительные кубиты, выделенные в рамках операции. Когда операция принимает массив кубитов (Qubit[]), канал отображает массив как регистр 2 кубитов.

  1. Добавьте новую ячейку и скопируйте следующий пример. Этот код подготавливает состояние cat.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Добавьте новую ячейку и запустите следующий код, чтобы визуализировать канал PrepareCatState операции.

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

Условия, влияющие на схемы каналов

При визуализации квантовых каналов следующие условия могут повлиять на визуализацию схемы каналов.

Динамические каналы

Схемы каналов создаются путем выполнения всей классической логики в Q# программе и отслеживания всех кубитов, выделенных или примененных шлюзов. Циклы и условные условия поддерживаются, если они имеют дело только с классическими значениями.

Однако программы, содержащие циклы и условные выражения, использующие результаты измерения кубитов, сложнее представлять схему цепи. Например, выражение, как показано ниже

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

невозможно представить с помощью простой схемы цепи, так как шлюзы являются условными для результата измерения. Такой канал называется динамическим каналом.

Схемы каналов можно создать для динамических каналов, выполнив программу в квантовом симуляторе и трассировав шлюзы по мере их применения. Это называется режимом трассировки , так как кубиты и шлюзы трассируются при выполнении имитации.

Недостатком трассированных каналов является то, что они фиксируют только результат измерения, и последующие приложения шлюзов для единого моделирования. В приведенном выше примере, если результат измерения равен Zero, вы не видите X ворот на схеме. Другой запуск имитации может показать немного другой канал.

Целевой профиль

Выбранный target в данный момент профиль влияет на создание схем каналов. Целевые профили используются для указания возможностей target оборудования и ограничений, которые накладываются на квантовую программу.

target Если для профиля задано значение "Без ограничений" или "Адаптивная ri QIR", схемы каналов показывают квантовые операции, вызываемые в программеQ#. target Если для профиля задано значение QIR base, на схемах каналов отображаются квантовые операции, которые будут выполняться на оборудовании, если программа отправляется в Azure Quantum с этим target профилем.

Примечание.

  • Чтобы выбрать target профиль в VS Code, выберите представление —> палитра команд и выберите Q#команду : Задать профиль QIR target Azure Quantum. Вы можете выбрать QIR baseили QIR Adaptive RIunrestricted в раскрывающемся списке.

  • Чтобы выбрать target профиль в Python, вызове qsharp.init(target_profile=qsharp.TargetProfile.Base)qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)илиqsharp.init(target_profile=qsharp.TargetProfile.Unrestricted).

В частности, применяются декомпозиции ворот, которые позволят обеспечить совместимость результирующего канала с возможностями target оборудования. Это те же декомпозиции, которые будут применяться во время создания кода и отправки в Azure Quantum.

  1. Например, рассмотрим следующую Q# программу, которая измеряет кубитов и массив кубитов.

    namespace Sample {
        open Microsoft.Quantum.Measurement;
    
        @EntryPoint()
        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. Если target для профиля задано значение "Неограниченный " или "Адаптивная ri QIR", шлюзы, отображаемые в канале, соответствуют квантовым операциям, которые вызываются в программе Q# .

    Снимок экрана: квантовые каналы, когда target профиль неограничен.

  3. target Если профиль является базой QIR, канал выглядит иначе. Так как базовый профиль targets не разрешает повторное использование кубитов после измерения, измерение теперь выполняется на запутанном кубите. Так как Reset операция не поддерживается в базовом профиле, она удаляется. Результирующий канал соответствует тому, что будет выполняться на оборудовании, если эта программа отправляется в Azure Quantum с этим target профилем.

    Снимок экрана: квантовые каналы, когда target профиль — база QIR.