Bekerja dengan Q# proyek

Dengan rilis Azure Quantum Development Kit, Anda dapat menentukan Q# proyek, yang merupakan struktur folder dengan beberapa Q# file yang dapat mengakses sumber daya satu sama lain. Proyek sangat membantu untuk membuat pustaka yang dapat digunakan kembali dan secara logis mengatur kode sumber Anda.

Proyek Q# berisi Q# file manifes, bernama qsharp.json, dan satu atau beberapa file *.qs dalam struktur folder tertentu. Saat pengguna membuka file *.qs di Visual Studio Code, atau mengatur project_root dalam file Jupyter Notebook atau Python, pengompilasi mencari hierarki folder di sekitarnya untuk file manifes dan menentukan cakupan proyek. Jika tidak ada file manifes yang ditemukan, pengkompilasi beroperasi dalam mode file tunggal. Proyek Q# dapat dibuat secara manual atau langsung di Visual Studio Code.

Prasyarat

Q# Menentukan proyek

Proyek Q# didefinisikan oleh keberadaan file manifes qsharp.json dan folder src (yang berisi Q# file sumber), yang keduanya harus berada di folder akar proyek. Untuk Q# program, pengkompilasi Q# mendeteksi folder proyek secara otomatis. Untuk program Python dan Jupyter Notebooks, Anda harus menentukan Q# folder proyek dengan qsharp.init panggilan. Namun, struktur folder untuk Q# proyek tetap sama untuk semua jenis program.

Gambar memperlihatkan hierarki folder untuk Q# proyek.

Menentukan folder proyek (Q# program)

Ketika file *.qs dibuka di Visual Studio Code, pengkompilasi Q# mencari ke atas dalam struktur folder untuk file manifes qsharp.json . Jika menemukan file manifes, pengkompilasi kemudian mencari ke bawah melalui semua subfolder direktori src untuk file *.qs dan menyimpan operasi atau fungsi apa pun, dan membuat operasi dan fungsi tersebut tersedia untuk semua file *.qs, sesuai aturan pengecualian file manifes.

Misalnya, mengingat struktur folder ini:

  • Teleportation_project
    • qsharp.json
    • src
      • RunTeleport.qs
      • TeleportOperations
        • Teleport.qs
        • PrepareState
          • PrepareState.qs

saat Anda membuka file /src/TeleportOperation/PrepareState/PrepareState.qs, pengkompilasi Q# :

  1. Memeriksa /src/TeleportOperation/PrepareState/ untuk file qsharp.json .
  2. Memeriksa /src/TeleportOperation untuk qsharp.json.
  3. Memeriksa /src untuk qsharp.json.
  4. / Memeriksa qsharp.json.
  5. Menetapkan / sebagai direktori akar proyek, dan menyertakan semua file *.qs di bawah akar dalam proyek, sesuai pengaturan file manifes.

Create file manifes

File manifes adalah file .json sederhana bernama qsharp.json yang dapat secara opsional menyertakan bidang penulis, lisensi, dan .ints . File manifes minimum yang layak adalah string {}. Saat Anda membuat Q# proyek di Visual Studio Code, file manifes minimal dibuat untuk Anda.

{}

Contoh file manifes

Berikut ini adalah beberapa contoh bagaimana file manifes dapat menentukan cakupan proyek Anda Q# .

Dalam contoh ini, penulis adalah satu-satunya bidang yang ditentukan, dan oleh karena itu semua file *.qs dalam direktori ini dan semua subdirektorinya disertakan dalam Q# proyek.

{
    "author":"Microsoft"
}
{
    "author":"Microsoft",
    "license":"MIT"
}

Q# Dalam proyek, Anda juga dapat menggunakan file manifes untuk menyempurnakan pengaturan Linter Visual Studio CodeQ#. Secara default, tiga aturan Linter adalah:

  • needlessParens: default = allow
  • divisionByZero: default = warn
  • redundantSemicolons: default = warn

Dengan menggunakan file manifes, Anda dapat mengatur setiap aturan ke allow, , warnatau error, misalnya

{
    "author":"Microsoft",
    "lints": [
        {
          "lint": "needlessParens",
          "level": "allow"
        },
        {
          "lint": "redundantSemicolons",
          "level": "warn"
        },
        {
          "lint": "divisionByZero",
          "level": "error"
        }
      ]
}

Q# persyaratan dan properti proyek

Persyaratan dan konfigurasi berikut berlaku untuk semua Q# proyek.

  • Semua file *.qs yang ingin Anda sertakan dalam proyek harus berada di bawah folder bernama src, yang harus berada di bawah Q# folder akar proyek. Saat Anda membuat Q# proyek di Visual Studio Code, /src folder dibuat secara otomatis.
  • File manifes qsharp.json harus berada pada tingkat yang sama dengan folder src . Saat Anda membuat Q# proyek di Visual Studio Code, file qsharp.json dibuat secara otomatis.
  • Operasi dan fungsi dalam file sumber yang tersedia dapat diakses menggunakan open pernyataan:
open MyMathLib;
...
    Multiply(x,y);

atau mereferensikannya dengan namespace:

MyMathLib.Multiply(x,y);

Hanya untuk Q# program

  • Hanya satu file *.qs dalam proyek yang Q#@EntryPoint() dapat ditentukan.
  • File *.qs dengan @EntryPoint() definisi dapat ditemukan pada tingkat apa pun di bawah file manifes.
  • Setiap operasi atau fungsi yang di-cache dari file *.qs di mana saja dalam Q# proyek ditampilkan dalam teks prediktif di Visual Studio Code.
  • Jika namespace untuk operasi atau fungsi yang dipilih belum ditambahkan, Visual Studio Code secara otomatis menambahkan pernyataan yang diperlukan open .

Langkah-langkah untuk membuat Q# proyek

  1. Di penjelajah file Visual Studio Code, klik kanan folder yang ingin Anda gunakan untuk Q# folder akar proyek dan pilih proyek CreateQ#, atau buka folder dan pilih Tampilkan > Palet >Q#Perintah : Create Q# proyek....

  2. Visual Studio Code membuat file manifes qsharp.json minimal di folder, dan menambahkan /src folder dengan Main.qs file templat.

  3. Edit file manifes sesuai kebutuhan. Lihat Contoh file manifes.

  4. Tambahkan dan atur file sumber Anda Q# di /src bawah folder .

  5. Jika Anda mengakses Q# proyek dari program Python atau Jupyter Notebook, atur jalur folder akar menggunakan qsharp.init. Contoh ini mengasumsikan program Anda berada di folder yang sama dengan folder Q# akar proyek:

    qsharp.init(project_root = './Teleportation_project')
    
  6. Jika Anda hanya Q# menggunakan file di Visual Studio Code, saat Anda membuka Q# file, pengkompilasi mencari file manifes qsharp.json , menentukan folder akar proyek, lalu memindai subfolder untuk file *.qs.

Catatan

Anda juga dapat membuat file manifes dan /src folder secara manual di langkah 2.

Contoh proyek

Program teleportasi kuantum ini adalah contoh proyek berdasarkan struktur folder yang Q# ditunjukkan sebelumnya, dan berjalan pada simulator lokal di VS Code. Untuk menjalankan program pada perangkat keras Azure Quantum atau simulator pihak ketiga, lihat Mulai menggunakan Q# program dan VSCode untuk langkah-langkah mengkompilasi program Anda dan menyambungkan ke ruang kerja Azure Anda.

Contohnya menggunakan struktur direktori ini:

  • Teleportation_project
    • qsharp.json
    • src
      • RunTeleport.qs
      • TeleportOperations
        • Teleport.qs
        • PrepareState
          • PrepareState.qs

File manifes qsharp.json berisi bidang penulis dan lisensi :

{
    "author":"Microsoft",
    "license":"MIT"
}

Q# file sumber

Dengan satu perbedaan kecil - @EntryPoint() pernyataan - file sumber sama untuk Q# program, program Python, atau Jupyter Notebook.

File utama, RunTeleport.qs, berisi titik entri dan mereferensikan TeleportLib namespace di Teleport.qs.

namespace RunTeleport {

    open TeleportLib;   // references the TeleportLib namespace in Teleport.qs

    @EntryPoint()       // @EntryPoint() not necessary for Python or Jupyter Notebook programs
    operation RunTeleportationExample() : Unit {
        use msg = Qubit();
        use target = Qubit();

        H(msg);
        Teleport(msg, target);    // calls the Teleport() operation from Teleport.qs
        H(target);

        if M(target) == Zero {
            Message("Teleported successfully!");
        
        Reset(msg);
        Reset(target);
        }
    }
}

Teleport.qs mendefinisikan Teleport() operasi dan memanggil PrepareBellPair() operasi dari PrepareState.qs.

namespace TeleportLib {

    open PrepareBell;     // references the PrepareBell namespace in PrepareState.qs
 
    operation Teleport(msg : Qubit, target : Qubit) : Unit {
        use here = Qubit();

        PrepareBellPair(here, target);      // calls the PrepareBellPair() operation from PrepareState.qs
        Adjoint PrepareBellPair(msg, here);

        if M(msg) == One { Z(target); }
        if M(here) == One { X(target); }

        Reset(here);
    }
}

File PrepareState.qs berisi operasi standar yang dapat digunakan kembali untuk membuat pasangan Bell.

namespace PrepareBell {    
    
    operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
        H(left);
        CNOT(left, right);
    }
}

Menjalankan program

Pilih tab untuk lingkungan tempat Anda menjalankan program.

Untuk menjalankan program ini, buka file RunTeleport.qs di Visual Studio Code dan pilih Jalankan.