OpenQASM Microsoft Quantum Development Kit programları geliştirin

Microsoft Quantum Development Kit (QDK), OpenQASM tümleştirmesi ile Azure Quantum programları için farklı geliştirme ortamları sağlar. Bu makalede, OpenQASM kodu nasıl geliştireceğinizi ve çalıştıracağınızı öğreneceksiniz:

  • QDK(Visual Studio Code) içindeki VS Code uzantısı
  • QDK Jupyter Notebook'daki Python paketi.

Geliştirici araçları olan CodeLends, IntelliSense, kod tamamlama ve durma noktası hata ayıklama yalnızca VS Code uzantısında kullanılabilir. Diğer özellikler yalnızca Python paketinde kullanılabilir. Örneğin, Q# ve OpenQASM çağrılabilirleri Python nesneleri olarak geçirebilir ve girdi alan OpenQASM programları QIR'ye derleyebilirsiniz.

Önkoşullar

  • En son sürümünü yükleme VS Code

  • Doğrudan dosyalarıyla çalışmak için, içinde uzantısının en son sürümünü yükleyin.

  • Python ve Jupyter Notebook OpenQASM ile çalışmak için 'da Python uzantısı ve VS Code en son sürümünü yükleyin.

  • ekleriyle Python paketinin qdkjupyter en son sürümünü yükleyin:

    pip install --upgrade "qdk[jupyter]"
    

OpenQASM ile VS Code üzerinde QDK uzantısını kullanarak çalışın

OpenQASM içinde VS Code kod yazmak için bir Q# projesi açın ve OpenQASM uzantılı bir .qasm dosyası oluşturun. QDK dosyayı .qasm olarak otomatik olarak tanır, ve OpenQASM kodunuzu yazarken QDK için OpenQASM özellikleri kullanılabilir.

QDK içindeki OpenQASM programları için aşağıdaki VS Code özellikler kullanılabilir:

  • Kod tamamlama
  • Kod lensleri (Çalıştır, Histogram, Tahmin, Hata Ayıklama ve Devre)
  • Söz dizimi vurgulama ve ayraç eşleştirme gibi temel söz dizimi özellikleri
  • Kaynak dosyalarda OpenQASM hata denetimi
  • Kaynak dosyalar için OpenQASM kesme noktası hata ayıklama ve betik yürütme
  • Canlı devre oluşturma ile hata ayıklama
  • Kuantum işi gönderimi için Azure Quantum ile entegrasyon

OpenQASM programınızı VS Code'den çalıştırmak için QDK yerel simülatörünü kullanabilir veya kodu Azure Quantum'a iş olarak gönderebilirsiniz.

Kodunuzu yerel simülatörde QDK çalıştırma

kodunuzu OpenQASM içindeki yerel seyrek kuantum simülatöründe VS Codeçalıştırmak için bir .qasm dosya açın ve ardından dosyanın başındaki kod merceğinden Çalıştır komutunu seçin. Programınızın çıktısı VS Code terminalinde görüntülenir.

Uyarı

QDK, programınızı destekleyen bir QIR target profilini otomatik olarak ayarlamaya çalışır. QIR target profili programınızdaki işlemleri desteklemiyorsa kodunuzu çalıştırdığınızda OpenQASM derleyici hataları alırsınız. profilleri hakkında daha fazla bilgi için bkz. içindeki profillerinin Fark türleri.

Yerleşik örnek programlar

QDK, OpenQASM için birçok yerleşik kuantum algoritması örneğiyle birlikte gelir. Örnek algoritmaları denemek için boş sample bir dosya girin.qasm. Örnek algoritmaları içeren bir tamamlama listesi görüntülenir. Bir örnek seçin ve oluşturulan kodu çalıştırın.

VS Code'de yerel olarak hata ayıkla

QDK, OpenQASM için bir hata ayıklayıcısı içerir. Hata ayıklama aracı, kesme noktası tabanlı hata ayıklamayı destekler ve program durumunu görüntüleyebilir.

Hata ayıklayıcıyı başlatmak için kod merceğinden Hata Ayıkla komutunu seçin.

Hata ayıklama modunda, hata ayıklamanıza yardımcı olması için kodunuzda kesme noktaları ayarlayabilirsiniz. Programınızın durumu ÇALıŞTıR VE HATA AYıKLAMA bölmesinde görüntülenir. Örneğin, yerel değişken durumlarınızı ve kubit durumlarınızı görüntüleyebilirsiniz.

kodunuzu Azure Quantum üzerinde çalıştırma

OpenQASM Azure Quantum üzerinde targets programlarını çalıştırmak için bir Azure Quantum çalışma alanına sahip olmanız gerekir. Azure Quantum çalışma alanı oluşturmak için bkz. Azure Quantum çalışma alanı oluşturma.

OpenQASM üzerinden Azure Quantum hedefine VS Code işleri göndermek için Azure Quantum çalışma alanınıza bağlanmanız gerekir. 'den VS Codeçalışma alanınıza bağlanmak için bkz. bağlantı dizesi ile bağlanma.

OpenQASM'den Azure Quantum'e bir VS Code işi göndermek için şu adımları izleyin:

  1. qasm içinde programınızı içeren VS Code dosyasını açın.
  2. Microsoft Quantum panelini açmak için Microsoft Quantum simgesini seçin.
  3. KUANTUM ÇALIŞMA ALANI açılan listesini genişletin ve çalışma alanınızı seçin.
  4. Sağlayıcılar açılan listesini genişletin, bir sağlayıcı seçin ve ardından işinizi çalıştırmak istediğiniz sağlayıcıyı target seçin. Örneğin, programınızı Rigetti'nin arka uç simülatöründe çalıştırmak için görevinizi rigetti.svm.simtarget gönderin. Sağlayıcı ve target kullanılabilirlik hakkında daha fazla bilgi için bkz. Mevcut çalışma alanında sağlayıcı ekleme veya kaldırma.
  5. Adın yanındaki target oynat simgesini seçin.
  6. İşi göndermek için İş adı istemi ve Çekim sayısı istemi için değerleri girin.

Bir işin saatlerini ve durumunu görüntülemek için İşler açılan listesini genişletin ve iş adının üzerine gelin. İş sonuçlarını indirmek için iş adının yanındaki histogramı veya metin simgelerini seçin.

Python ve Jupyter Notebook'da OpenQASM ile çalışma

QDK Python paketiyle kodu doğrudan çalıştırabilir OpenQASM ve bağlantı hatlarını Q# programlarına işlem olarak geçirebilirsinizOpenQASM. OpenQASM kodunuzu bir Python dizesi olarak yazın ve OpenQASM kodunuzu Python ortamında çalıştırmak, içeri aktarmak veya derlemek için bu dizeyi kullanın.

OpenQASM'yi doğrudan Python'da çalıştır

Kodu OpenQASM doğrudan çalıştırmak için run modülündeki qdk.openqasm işlevini kullanın. Örneğin, aşağıdaki kod, kirlilik içeren basit OpenQASM bir programın yerel simülatöründe 10 çekim çalıştırır:

from qdk import BitFlipNoise
from qdk.openqasm import run

qasm_code = """
    include "stdgates.inc";
    qubit[2] q;
    reset q;
    h q[0];
    cx q[0], q[1];
    bit c = measure q[1];
    """

results = run(qasm_code, shots=10, noise=BitFlipNoise(0.1))
print(results)

Q# dilinde bir OpenQASM programı çağırma

import_openqasm işlevini kullanarak bir OpenQASM programını Python bir nesne olarak depolayabilir ve sonra bu nesneyi daha sonra Python kodunuzda çağırabilirsiniz. Örneğin, aşağıdaki hücre OpenQASM bağlantı hattını bell adlı Python nesnesinde depolar:

from qdk import qsharp
from qdk.openqasm import import_openqasm

qasm_code = """
    include "stdgates.inc";
    qubit[2] q;
    reset q;
    h q[0];
    cx q[0], q[1];
    bit c = measure q[1];
    """

import_openqasm(qasm_code, name="bell")

Ortamınızın bir parçası olduğunda bell , bunu doğrudan bir Q# hücresinden çalıştırabilirsiniz:

%%qsharp

use qs = Qubit[2];
bell(qs)

QDK ile bell paket işlevselliğini, gürültülü simülasyon, devre işleme ve kod oluşturma gibi amaçlarla kullanabilirsiniz.

Parametreli OpenQASM programlar

Aşağıdaki hücre giriş olarak OpenQASM açısını alan bir theta devresi oluşturur ve ardından devreyi bir Python işlevi olarak çağırır:

from qdk.openqasm import import_openqasm, ProgramType

qasm_code = """
    include "stdgates.inc";
    input float theta;
    qubit[2] q;
    rx(theta) q[0];
    rx(-theta) q[1];
    bit[2] c;
    c = measure q;
    """

import_openqasm(qasm_code, name="parameterized_circuit", program_type=ProgramType.File)

from qdk.code.qasm_import import parameterized_circuit

parameterized_circuit(1.57)

Q#'ya bir OpenQASM programını ilet

QDK Python paketiyle bir programı doğrudan Q# programına geçirebilirsinizOpenQASM. Örneğin, aşağıdaki kod bir OpenQASM, adlı Entangle programı oluşturur ve Entangle'yi Q# dilinde bir işlem olarak kullanır.

from qdk.openqasm import import_openqasm
from qdk import qsharp

qasm_code = """
    include "stdgates.inc";
    qubit[2] qs;
    h qs[0];
    cx qs[0], qs[1];
    """

import_openqasm(qasm_code, name="Entangle")

qsharp.eval("{ use qs = Qubit[2]; Entangle(qs); MResetEachZ(qs) }")

Q# ve OpenQASM programlarını qsharp.eval ve import_openqasm ile Python bir ortamda içeri aktardığınızda, bu programlar Python kodunuzda çağırabileceğiniz Python nesneler haline gelir. Örneğin, aşağıdaki kod bir Q# programı olan TestAntiCorrelation oluşturur ve EntangleOpenQASM programını TestAntiCorrelation'a geçirir.

qsharp.eval("""
    operation TestAntiCorrelation(entangler : Qubit[] => Unit) : Result[] {
        use qs = Qubit[2];
        X(qs[1]);
        entangler(qs);
        MResetEachZ(qs)
    }
    """)

from qdk.code import Entangle, TestAntiCorrelation

TestAntiCorrelation(Entangle)

QIR'e programları derle OpenQASM

OpenQASM kodunu, compile işlevi ile Kuantum Ara Temsili (QIR) biçiminde derleyebilirsiniz.

Örneğin, aşağıdaki hücre OpenQASM parametreli bir devrenin kodunu QIR'ye derler:

from qdk import TargetProfile
from qdk.openqasm import import_openqasm, ProgramType
from qdk import qsharp

qsharp.init(target_profile=TargetProfile.Base)

qasm_code = """
    include "stdgates.inc";
    input float theta;
    qubit[2] q;
    rx(theta) q[0];
    rx(-theta) q[1];
    bit[2] c;
    c = measure q;
    """

import_openqasm(qasm_code, name="parameterized_circuit", program_type=ProgramType.File)

from qdk.code.qasm_import import parameterized_circuit

bound_compilation = qsharp.compile(parameterized_circuit, 1.57)
print(bound_compilation)

Uyarı

Giriş değişkenlerini QIR'ye alan programları derlemek OpenQASM için Python paketini kullanmanız QDK gerekir. OpenQASM parametreli programları QDK uzantısını kullanarak VS Code içinde QIR'a derleyemezsiniz.

Programları OpenQASMAzure Quantum adresine gönderin

OpenQASM Azure Quantum üzerinde çalıştırılmak üzere bir target programı göndermek için, OpenQASM kodunu QIR’ye derleyin ve ardından QIR’yi Azure Quantum üzerinde çalıştırılmak üzere gönderin.

Örneğin, QIR'de basit bir dolanıklık devresi derleyin.

from qdk.openqasm import compile

qasm_code = """
    include "stdgates.inc";
    bit[2] c;
    qubit[2] q;
    h q[0];
    cx q[0], q[1];
    c = measure q;
"""

qir_compilation = compile(qasm_code)

Azure Quantum üzerinde bir QIR işi çalıştırmak için kuantum çalışma alanınıza bağlanın ve işi çalışma alanınızdaki kullanılabilir targets öğelerinden birine gönderin. Örneğin, IonQ arka uç simülatöründe çalıştırılacak dolanıklık QIR'sini gönderin.

from qdk.azure import Workspace 

workspace = Workspace(resource_id="") # Add the resource ID of your workspace

target = workspace.get_targets('ionq.simulator')
job = target.submit(qir_compilation, shots=100)

print("Job submitted. Waiting for results...")

results = job.get_results()
print(results)

Devam etmekte olan OpenQASM geliştirme çalışmaları QDK

OpenQASM için QDK desteği devam etmektedir.

Geliştirme aşamasında olan OpenQASM özelliklerinin listesi için QDK, GitHub deposu wiki'sindeki QDK konusuna bakın.