Megosztás a következőn keresztül:


Projektek használata Q#

Az Azure Quantum Development Kitkiadásával olyan projekteket határozhat megQ#, amelyek több Q# fájllal rendelkező mappastruktúrák, amelyek hozzáférhetnek egymás erőforrásaihoz. A projektek hasznosak az újrafelhasználható kódtárak létrehozásához és a forráskód logikai rendszerezéséhez.

A Q# projektek egy qsharp.json nevű jegyzékfájlt Q# és egy vagy több *.qs fájlt tartalmaznak egy adott mappastruktúrában. Amikor egy felhasználó megnyit egy *.qs-fájlt a VS Code-ban, vagy beállít project_root egy Jupyter Notebook- vagy Python-fájlt, a fordító megkeresi a jegyzékfájlt a környező mappahierarchiában, és meghatározza a projekt hatókörét. Ha nem található jegyzékfájl, a fordító egyetlen fájl módban működik. A Q# projekt manuálisan vagy közvetlenül a VS Code-ban hozható létre.

Előfeltételek

Projekt definiálása Q#

A Q# projekteket egy qsharp.json jegyzékfájl és egy src mappa (amely tartalmazza a Q# forrásfájlokat) jelenléte határozza meg, és mindkettőnek a projekt gyökérmappájában kell lennie. Programok esetén Q# a Q# fordító automatikusan észleli a projektmappát. Python-programok és Jupyter-jegyzetfüzetek esetén meg kell adnia a Q# projektmappát egy qsharp.init hívással. A projekt mappastruktúrája Q# azonban minden programtípus esetében ugyanaz marad.

A projekt mappahierarchiájának Q# képe.

A projektmappa (Q# programok) meghatározása

Ha a VS Code-ban *.qs-fájlt nyit meg, a Q# fordító felfelé keres egy qsharp.json jegyzékfájl mappastruktúrájában. Ha jegyzékfájlt talál, a fordító ezután lefelé keres az src könyvtár összes almappáján a *.qs fájlokhoz, és gyorsítótárazza az összes műveletet vagy függvényt, és a jegyzékfájl kizárási szabályai szerint elérhetővé teszi ezeket a műveleteket és függvényeket az összes *.qs-fájl számára.

Például a mappastruktúra alapján:

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

a /src/TeleportOperation/PrepareState/PrepareState.qs fájl megnyitásakor a Q# fordító:

  1. Ellenőrzi a /src/TeleportOperation/PrepareState/ fájlt egy qsharp.json fájlhoz.
  2. Ellenőrzi a /src/TeleportOperation qsharp.json.
  3. Ellenőrzi a qsharp.json.
  4. Ellenőrzi / a qsharp.json.
  5. / A projekt gyökérkönyvtáraként jön létre, és a jegyzékfájl beállításainak megfelelően tartalmazza a projekt gyökérkönyvtárában lévő összes *.qs-fájlt.

Jegyzékfájl létrehozása

A jegyzékfájl egy qsharp.json nevű egyszerű .json fájl, amely opcionálisan tartalmazhat szerző, licenc és .ints mezőket. A minimális működőképes jegyzékfájl a sztring {}. Amikor projektet hoz létre Q# a VS Code-ban, a rendszer létrehoz egy minimális jegyzékfájlt.

{}

Példa jegyzékfájlra

Az alábbiakban néhány példát mutatunk be arra, hogyan határozhatják meg a jegyzékfájlok a projekt hatókörét Q# .

Ebben a példában a szerző az egyetlen megadott mező, ezért ebben a könyvtárban és annak összes alkönyvtárában található összes *.qs-fájl szerepel a Q# projektben.

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

A projekten Q# belül a jegyzékfájl használatával is finomhangolhatja a VS Code Q# Linter beállításait. Alapértelmezés szerint a három Linter-szabály a következő:

  • needlessParens: alapértelmezett = allow
  • divisionByZero: alapértelmezett = warn
  • redundantSemicolons: alapértelmezett = warn

A jegyzékfájl használatával az egyes szabályokat allowbeállíthatja például a következőrewarnerror:

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

Q# projektkövetelmények és tulajdonságok

Az alábbi követelmények és konfigurációk minden Q# projektre vonatkoznak.

  • A projektbe felvenni kívánt összes *.qs-fájlnak egy src nevű mappában kell lennie, amelynek a Q# projekt gyökérmappájában kell lennie. Amikor projektet hoz létre Q# a VS Code-ban, a /src mappa automatikusan létrejön.
  • A qsharp.json jegyzékfájlnak az src mappával azonos szinten kell lennie. Amikor projektet hoz létre Q# a VS Code-ban, a qsharp.json fájl automatikusan létrejön.
  • Az elérhető forrásfájlokban lévő műveletek és függvények a következő utasítások használatával open érhetők el:
open MyMathLib;
...
    Multiply(x,y);

vagy hivatkozik rájuk a névtérrel:

MyMathLib.Multiply(x,y);

Csak programok esetén Q#

  • Egy projektben Q# csak egy *.qs-fájl rendelkezhet definiált fájllal @EntryPoint() .
  • A definícióval rendelkező *.qs fájl a @EntryPoint() jegyzékfájl alatt bármely szinten elhelyezhető.
  • Bármely művelet vagy függvény, amely a projekt bármely pontján *.qs-fájlból gyorsítótárazott, prediktív szövegként jelenik meg a Q# VS Code-ban.
  • Ha egy kijelölt művelet vagy függvény névterét még nem adták hozzá, a VS Code automatikusan hozzáadja a szükséges open utasítást.

Projekt létrehozásának Q# lépései

  1. A VS Code fájlkezelőben kattintson a jobb gombbal arra a mappára, amelyet a projekt gyökérmappájának használni szeretne, és válassza a Projekt létrehozása lehetőséget, vagy nyissa meg a mappát, és válassza a Parancskatalógus >Q#megtekintése>: Projekt létrehozásaQ#... parancsot.Q#Q#

  2. A VS Code létrehoz egy minimális qsharp.json jegyzékfájlt a mappában, és hozzáad egy /src sablonfájllal Main.qs rendelkező mappát.

  3. Szükség szerint szerkessze a jegyzékfájlt. Lásd a jegyzékfájlra vonatkozó példákat.

  4. Adja hozzá és rendszerezze a Q# forrásfájlokat a /src mappában.

  5. Ha Python-programból vagy Jupyter Notebookból éri el a Q# projektet, állítsa be a gyökérmappa elérési útját. qsharp.init Ez a példa feltételezi, hogy a program ugyanabban a mappában van, mint a Q# projekt gyökérmappája:

    qsharp.init(project_root = './Teleportation_project')
    
  6. Ha csak Q# fájlokat használ a VS Code-ban, egy fájl megnyitásakor Q# a fordító megkeresi a qsharp.json jegyzékfájlt, meghatározza a projekt gyökérmappáját, majd *.qs-fájlokat keres az almappában.

Feljegyzés

Manuálisan is létrehozhatja a jegyzékfájlt és a mappát a /src 2. lépésben.

Példaprojekt

Ez a kvantum teleportálási program egy példa a Q# korábban bemutatott mappastruktúrán alapuló projektre, és a VS Code helyi szimulátorán fut. A program Azure Quantum-hardveren vagy külső szimulátorokon való futtatásához tekintse meg a programok és a VSCode használatának első Q# lépéseit a program fordításához és az Azure-munkaterülethez való csatlakozáshoz.

A példa ezt a könyvtárstruktúrát használja:

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

A qsharp.json jegyzékfájl a szerzői és licencmezőket tartalmazza:

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

Q# forrásfájlok

Egyetlen kisebb különbséggel – az @EntryPoint() utasítással – a forrásfájlok megegyeznek egy Q# program, egy Python-program vagy egy Jupyter Notebook esetében.

A RunTeleport.qs fő fájlja tartalmazza a belépési pontot, és a TeleportLib Teleport.qs névterére hivatkozik.

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

A Teleport.qs határozza meg a Teleport() műveletet, és meghívja a műveletet a PrepareBellPair() PrepareState.qs-ből.

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

A PrepareState.qs fájl egy szabványos újrafelhasználható műveletet tartalmaz a Bell-pár létrehozásához.

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

A programok futtatása

Válassza ki annak a környezetnek a lapját, amelyben a programot futtatja.

A program futtatásához nyissa meg a RunTeleport.qs fájlt a VS Code-ban, és válassza a Futtatás lehetőséget.