Projelerle Q# çalışma

Azure Quantum Development Kitsürümüyle, birbirinin kaynaklarına erişebilecek birden çok Q# dosya içeren klasör yapıları olan projeleri tanımlayabilirsinizQ#. Projeler, yeniden kullanılabilir kitaplıklar oluşturmak ve kaynak kodunuzu mantıksal olarak düzenlemek için yararlıdır.

ProjeQ#, qsharp.json adlı bir Q# bildirim dosyası ve belirtilen klasör yapısında bir veya daha fazla *.qs dosyası içerir. Kullanıcı VS Code'da *.qs dosyasını açtığında veya Jupyter Notebook veya Python dosyasında değerini ayarladığındaproject_root, derleyici bildirim dosyasını çevresindeki klasör hiyerarşisinde arar ve projenin kapsamını belirler. Bildirim dosyası bulunamazsa, derleyici tek bir dosya modunda çalışır. Proje Q# el ile veya doğrudan VS Code'da oluşturulabilir.

Önkoşullar

Proje tanımlama Q#

Proje Q# , bir qsharp.json bildirim dosyasının ve her ikisinin de projenin kök klasöründe olması gereken bir src klasörünün (kaynak dosyaları içeren Q# ) varlığıyla tanımlanır. Programlar için Q# , Q# derleyici proje klasörünü otomatik olarak algılar. Python programları ve Jupyter Notebooks için proje klasörünü bir qsharp.init çağrıyla belirtmeniz Q# gerekir. Ancak, bir Q# projenin klasör yapısı tüm program türleri için aynı kalır.

Projenin klasör hiyerarşisini Q# gösteren resim.

Proje klasörünü tanımlama (Q# programlar)

*.qs dosyası VS Code'da açıldığında, Q# derleyici klasör yapısında yukarı doğru bir qsharp.json bildirim dosyası arar. Bir bildirim dosyası bulursa, derleyici *.qs dosyaları için src dizininin tüm alt klasörlerinde aşağı doğru arama yapar ve tüm işlemleri veya işlevleri önbelleğe alır ve bildirim dosyasının dışlama kuralları uyarınca bu işlemleri ve işlevleri tüm *.qs dosyaları için kullanılabilir hale getirir.

Örneğin, bu klasör yapısı göz önünde bulundurulduğunda:

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

/src/TeleportOperation/PrepareState/PrepareState.qs dosyasını açtığınızda, Q# derleyici:

  1. /src/TeleportOperation/PrepareState/qsharp.json dosyasını denetler.
  2. qsharp.json için /src/TeleportOperation öğesini denetler.
  3. /srcqsharp.json denetler.
  4. qsharp.json denetler/.
  5. Projenin kök dizini olarak oluşturulur / ve bildirim dosyasının ayarlarına göre projedeki kök dizinin altındaki tüm *.qs dosyalarını içerir.

Bildirim dosyasını İçerik Oluşturucu

Bildirim dosyası, isteğe bağlı olarak yazar, lisans ve .ints alanlarını içerebilen qsharp.json adlı basit bir .json dosyasıdır. En düşük uygulanabilir bildirim dosyası dizesidir {}. VS Code'da bir Q# proje oluşturduğunuzda, sizin için en az bildirim dosyası oluşturulur.

{}

Bildirim dosyası örnekleri

Aşağıda, bildirim dosyalarının projenizin Q# kapsamını nasıl tanımlayabildiğine ilişkin bazı örnekler verilmiştir.

Bu örnekte , yazar belirtilen tek alandır ve bu nedenle bu dizindeki tüm *.qs dosyaları ve tüm alt dizinleri projeye dahil Q# edilir.

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

Q# Proje içinde, bildirim dosyasını kullanarak VS Code Q# Linter ayarlarına ince ayar da yapabilirsiniz. Varsayılan olarak üç Linter kuralı şunlardır:

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

Bildirim dosyasını kullanarak, her kuralı allow, warnveya errorolarak ayarlayabilirsiniz, örneğin

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

Q# proje gereksinimleri ve özellikleri

Aşağıdaki gereksinimler ve yapılandırmalar tüm Q# projeler için geçerlidir.

  • Projeye eklenmesini istediğiniz tüm *.qs dosyaları, proje kök klasörünün altında olması gereken src adlı bir klasörün altında Q# olmalıdır. VS Code'da proje Q# oluşturduğunuzda, /src klasör otomatik olarak oluşturulur.
  • qsharp.json bildirim dosyası src klasörüyle aynı düzeyde olmalıdır. VS Code'da proje Q# oluşturduğunuzda , qsharp.json dosyası otomatik olarak oluşturulur.
  • Kullanılabilir kaynak dosyalarındaki işlemlere ve işlevlere deyimleri kullanılarak open erişilebilir:
open MyMathLib;
...
    Multiply(x,y);

veya ad alanına başvurarak:

MyMathLib.Multiply(x,y);

Yalnızca programlar için Q#

  • Projedeki yalnızca bir Q# *.qs dosyasında tanımlı bir @EntryPoint() dosya olabilir.
  • Tanımına sahip *.qs dosyası bildirim dosyasının @EntryPoint() altında herhangi bir düzeyde bulunabilir.
  • Projenin herhangi bir yerindeki Q# bir *.qs dosyasından önbelleğe alınan tüm işlemler veya işlevler VS Code'da tahmine dayalı metin olarak görüntülenir.
  • Seçili bir işlem veya işlevin ad alanı henüz eklenmediyse VS Code otomatik olarak gerekli open deyimi ekler.

Proje oluşturma Q# adımları

  1. VS Code dosya gezgininde, proje kök klasörü için Q# kullanmak istediğiniz klasöre sağ tıklayın ve İçerik Oluşturucu Q# projeyi seçin veya klasörü açıp Komut Paletini >Q#Görüntüle > : projeyi Q# İçerik Oluşturucu... seçeneğini belirleyin.

  2. VS Code, klasörde en az qsharp.json bildirim dosyası oluşturur ve şablon dosyası içeren bir /srcMain.qs klasör ekler.

  3. Bildirim dosyasını gerektiği gibi düzenleyin. Bkz . Bildirim dosyası örnekleri.

  4. Kaynak dosyalarınızı Q# klasörün altına /src ekleyin ve düzenleyin.

  5. Projeye bir Python programından Q# veya Jupyter Notebook erişiyorsanız kullanarak kök klasör yolunuqsharp.initayarlayın. Bu örnekte, programınızın projenin kök klasörüyle aynı klasörde Q# olduğu varsayılır:

    qsharp.init(project_root = './Teleportation_project')
    
  6. VS Code'da yalnızca Q# dosyaları kullanıyorsanız, bir Q# dosyayı açtığınızda, derleyici qsharp.json bildirim dosyasını arar, proje kök klasörünü belirler ve *.qs dosyaları için alt klasörü tarar.

Not

2. adımda bildirim dosyasını ve /src klasörü el ile de oluşturabilirsiniz.

Örnek proje

Bu kuantum ışınlama programı, daha önce gösterilen klasör yapısını temel alan ve VS Code'daki yerel simülatörde çalışan bir Q# proje örneğidir. Programı Azure Quantum donanımında veya üçüncü taraf simülatörlerinde çalıştırmak için, programınızı derleme ve Azure çalışma alanınıza bağlanma adımları için bkz. Programları kullanmaya Q# başlama ve VSCode .

Örnekte şu dizin yapısı kullanılır:

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

qsharp.json bildirim dosyası yazar ve lisans alanlarını içerir:

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

Q# kaynak dosyalar

Küçük bir farkla (@EntryPoint()deyimi) kaynak dosyalar bir Q# program, Python programı veya Jupyter Notebook için aynıdır.

RunTeleport.qs ana dosyası giriş noktasını içerir ve Teleport.qs içindeki ad alanına başvururTeleportLib.

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 işlemi tanımlar Teleport() ve PrepareState.qs'dan işlemi çağırırPrepareBellPair().

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);
    }
}

PrepareState.qs dosyası, Bell çifti oluşturmak için standart bir yeniden kullanılabilir işlem içerir.

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

Programları çalıştırma

Programınızı çalıştırdığınız ortamın sekmesini seçin.

Bu programı çalıştırmak için VS Code'da RunTeleport.qs dosyasını açın ve Çalıştır'ı seçin.