Aracılığıyla paylaş


Qiskit ile Azure Quantum'a bağlantı hattı gönderme

Paketi kullanarak Qiskit kuantum devresi göndermeyi azure-quantumPython öğrenin. Qiskit devrelerini, yerleşik azure-quantumPython paketi olan bir Azure Quantum not defteri kullanarak veya yerel makinenizden Azure Quantum'a gönderebilirsiniz. Ayrıca yerel seyrek simülatörü kullanarak devrelerinizi test edebilirsiniz.

Daha fazla bilgi için bkz . Kuantum devreleri.

Önkoşullar

Yükleme ayrıntıları için bkz. QDK uzantısını ayarlama.

  • Azure aboneliğinizdeki bir Azure Quantum çalışma alanı. Çalışma alanı oluşturmak için bkz . Azure Quantum çalışma alanı oluşturma.

  • Python ve Pip'inPython.

  • Azure Quantum Geliştirme Seti, ve Python uzantılarının yüklü olduğu VS Code.

  • [qiskit] etiketine sahip Azure Quantum azure-quantumPython paketi.

    python -m pip install --upgrade azure-quantum[qiskit] qsharp ipykernel 
    

    Önemli

    Qiskit'in en son sürümüne sahip olduğunuzdan emin olun. Daha fazla bilgi için bkz . Azure-quantum Python paketini güncelleştirme.

    Not

    Jupyter Python çekirdeği ipykernel algılanmazsa VS Code bunu yüklemenizi ister.

Yeni bir Jupyter Notebook oluşturma

  1. VS Code'da > Görüntüle'yi ve ardından Oluştur: Yeni Jupyter Not Defteri'ni seçin.
  2. Sağ üst kısımda VS Code, not defteri için seçilen ve sanal Python ortamın Python sürümünü algılar ve görüntüler. Birden çok Python ortamınız varsa, sağ üstteki çekirdek seçiciyi kullanarak bir çekirdek seçmeniz gerekebilir. Ortam algılanmadıysa kurulum bilgileri için VS Code'da Jupyter Not Defterleri bölümüne bakın.

Gerekli içeri aktarmaları yükleme

Not defterinizin ilk hücresinde, gerekli içeri aktarmaları yüklemek için aşağıdaki kodu çalıştırın:

import azure.quantum
from azure.quantum import Workspace 
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider

Azure Quantum hizmetine bağlanma

Azure Quantum hizmetine bağlanmak için kaynak kimliğine ve Azure Quantum çalışma alanınızın konumuna ihtiyacınız vardır.

  1. Azure hesabınızda oturum açın, https://portal.azure.com,

  2. Azure Quantum çalışma alanınızı seçin ve Genel Bakış'a gidin.

  3. Alanlardaki parametreleri kopyalayın.

    Quantum Çalışma Alanınızın genel bakış bölmesini genişletmeyi gösteren Visual Studio Code'un ekran görüntüsü.

Not defterinize yeni bir hücre ekleyin ve hesap bilgilerinizi Workspace kullanarak Oluşturma ve AzureQuantumProvider Nesneleri kullanarak Azure Quantum çalışma alanınıza bağlanın.

workspace = Workspace(  
    resource_id = "", # Add the resourceID of your workspace
    location = "" # Add the location of your workspace (for example "westus")
    )

provider = AzureQuantumProvider(workspace)

Tüm arka uçları listeleme

Artık çalışma alanınızda kullanılabilen tüm kuantum bilgi işlem arka uçlarını yazdırabilirsiniz:

print("This workspace's targets:")
for backend in provider.backends():
    print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.qpu.aria-1
- ionq.simulator
- microsoft.estimator
- quantinuum.hqs-lt-s1
- quantinuum.hqs-lt-s1-apival
- quantinuum.hqs-lt-s2
- quantinuum.hqs-lt-s2-apival
- quantinuum.hqs-lt-s1-sim
- quantinuum.hqs-lt-s2-sim
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-3

Basit bir bağlantı hattı çalıştırma

İlk olarak, çalıştırmak için basit bir Qiskit bağlantı hattı oluşturun.

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0,1,2], [0, 1, 2])

# Print out the circuit
circuit.draw()
     ┌───┐          ┌─┐      
q_0: ┤ H ├──■───────┤M├──────
     └───┘┌─┴─┐     └╥┘┌─┐   
q_1: ─────┤ X ├──■───╫─┤M├───
          └───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
               └───┘ ║  ║ └╥┘
c: 3/════════════════╩══╩══╩═
                     0  1  2 

Programınızı çalıştırmak için bir target seçin

IonQ simülatöründe çalıştırma

Gerçek donanım üzerinde çalıştırmadan önce simülatörde bağlantı hattını test edelim. IonQ Simulator arka ucuna bağlanmak üzere bir get_backend nesne oluşturmak için kullanınBackend:

simulator_backend = provider.get_backend("ionq.simulator")

IonQ arka uçları, donanım üzerinde en iyi şekilde çalışacak şekilde derlenen tanımlı bir geçit kümesinden gelen geçitleri destekler. Bağlantı hattınız bu listede olmayan geçitler içeriyorsa, Qiskit tarafından sağlanan işlevi kullanarak gateset desteklenene transpile dönüştürmeniz gerekir:

from qiskit import transpile
circuit = transpile(circuit, simulator_backend)

Dönüştürme işlevi, geçitlerin belirtilen arka uçta desteklenen kapılara ayrıştırıldığı yeni bir devre nesnesi döndürür.

Artık programı Azure Quantum hizmeti aracılığıyla çalıştırabilir ve sonucu alabilirsiniz. Aşağıdaki hücre, bağlantı hattını 100 çekimle çalıştıran bir iş gönderir:

job = simulator_backend.run(circuit, shots=8)
job_id = job.id()
print("Job id", job_id)
Job id 00000000-0000-0000-0000-000000000000

İş tamamlanana kadar beklemek ve sonuçları döndürmek için şunu çalıştırın:

result = job.result()
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=8, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 4, '111': 4}, memory=['000', '000', '000', '000', '111', '111', '111', '111'], probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits=3, metadata={}), status=JobStatus.DONE, name='Qiskit Sample - 3-qubit GHZ circuit')], date=None, status=None, header=None, error_data=None)

Sonuç, Qiskit paketine özgü bir nesne olduğundan, sonuçları görselleştirmek için Qiskit'in result.get_counts ve plot_histogram kullanabilirsiniz. Tüm olası bit dizesi etiketlerinin temsili olduğundan emin olmak için, bunları öğesine countsekleyin.

counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 4, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 4}

IonQ Simulator'da Qiskit bağlantı hattı sonucu

ayrıca işlevi kullanarak get_memory() işten alınan tek tek çekim verilerini görüntüleyebilirsiniz

result.get_memory(circuit)
['000', '000', '000', '000', '111', '111', '111', '111']

Not

IonQ'da targetstek sayıda çekim içeren bir iş gönderirseniz sonuçlar bir sonraki çift sayıya yuvarlanır. Örneğin, 9 çekim belirtirseniz sonuçlar 8 çekim için verileri görüntüler.

İş maliyetini tahmin

QPU'da bir işi çalıştırmadan önce çalıştırmanın maliyetini tahmin etmelisiniz.

En güncel fiyatlandırma ayrıntıları için IonQ Fiyatlandırması'na bakın veya çalışma alanınızı bulun ve fiyatlandırma seçeneklerini çalışma alanınızın "Sağlayıcı" sekmesinde görüntüleyin: aka.ms/aq/myworkspaces.

IonQ QPU üzerinde çalıştırma

Gerçek donanıma (Kuantum İşlemci Birimi

qpu_backend = provider.get_backend("ionq.qpu.aria-1")

Azure Quantum'da çalıştırılacak bağlantı hattını gönderin, sonuçları alın ve sonuçları çizmek için çalıştırın plot_histogram .

Not

QPU'da bir bağlantı hattını çalıştırmak için gereken süre, geçerli kuyruk sürelerine bağlı olarak değişebilir.

# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)

# Get the job results (this method waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='ionq.qpu.aria-1', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'0': 505, '1': 6, '2': 1, '3': 1, '4': 1, '5': 10, '6': 11, '7': 488}, probabilities={'0': 0.4932, '1': 0.0059, '2': 0.001, '3': 0.001, '4': 0.001, '5': 0.0098, '6': 0.0117, '7': 0.4766}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
{'000': 505, '001': 6, '010': 1, '011': 1, '100': 1, '101': 10, '110': 11, '111': 488}

IonQ QPU üzerinde Qiskit bağlantı hattı sonucu

Önemli

Tek bir işte birden çok bağlantı hattının gönderilmesi şu anda desteklenmemektedir. Geçici bir çözüm olarak, her bağlantı hattını zaman uyumsuz olarak göndermek için yöntemini çağırabilir backend.run ve ardından her işin sonuçlarını getirebilirsiniz. Örneğin:

jobs = []
for circuit in circuits:
    jobs.append(backend.run(circuit, shots=N))

results = []
for job in jobs:
    results.append(job.result())

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz kaydolun ve kullandıkça öde aboneliğine kaydolun.
  • Azure Quantum çalışma alanı. Daha fazla bilgi için bkz . Azure Quantum çalışma alanı oluşturma.

Çalışma alanınızda yeni bir not defteri oluşturma

  1. Azure portalında oturum açın ve önceki adımda oluşturduğunuz çalışma alanını seçin.
  2. Sol dikey pencerede Not Defterleri'ni seçin.
  3. Not Defterlerim'e ve Yeni Ekle'ye tıklayın.
  4. Dosya için Qiskit.ipynb gibi bir ad yazın ve Dosya oluştur'a tıklayın.

Yeni not defteriniz açıldığında, aboneliğinize ve çalışma alanı bilgilerinize göre ilk hücrenin kodunu otomatik olarak oluşturur.

from azure.quantum import Workspace
workspace = Workspace ( 
    resource_id = "", # Add your resource_id 
    location = ""  # Add your workspace location (for example, "westus") 
)

Not

Aksi belirtilmediği sürece, derleme sorunlarını önlemek için her hücreyi oluştururken sırayla çalıştırmanız gerekir.

Kodu çalıştırmak için hücrenin solundaki üçgen "oynat" simgesine tıklayın.

Gerekli içeri aktarmaları yükleme

İlk olarak, bazı ek modülleri içeri aktarmanız gerekir.

+ Kod'a tıklayarak yeni bir hücre ekleyin ve aşağıdaki kodu ekleyin ve çalıştırın:

from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider

Azure Quantum hizmetine bağlanma

Ardından, Azure Quantum çalışma alanınıza bağlanmak için önceki hücredeki nesneyi kullanarak AzureQuantumProvider bir Workspace nesne oluşturun. Aşağıdaki koda sahip yeni bir hücre ekleyin:

provider = AzureQuantumProvider(workspace)

Basit bir bağlantı hattı tanımlama

Yeni bir hücrede bir circuit nesne oluşturun. Bu örnek basit bir kuantum rastgele bit oluşturucudur. Bağlantı hattını tanımlamak ve görüntülemek için aşağıdaki kodu ekleyin:

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0, 1, 2], [0, 1, 2])

# Print out the circuit
circuit.draw()
     ┌───┐          ┌─┐      
q_0: ┤ H ├──■───────┤M├──────
     └───┘┌─┴─┐     └╥┘┌─┐   
q_1: ─────┤ X ├──■───╫─┤M├───
          └───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
               └───┘ ║  ║ └╥┘
c: 3/════════════════╩══╩══╩═
                     0  1  2 

Tümünü listele targets

Artık çalışma alanınızda kullanılabilen tüm kuantum bilişimini targetsveya arka uçlarını görüntüleyebilirsiniz. Yeni bir hücre ekleyin ve aşağıdaki satırı çalıştırın:

print("This workspace's targets:")
for backend in provider.backends():
    print("- " + backend.name())
This workspace's targets:
- ionq.simulator
- ionq.qpu.aria-1
- microsoft.estimator
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-3    

Programınızı çalıştırmak için bir target seçin

Kodunuzu gerçek kuantum donanımında çalıştırmadan önce denetlemek için IonQ kuantum simülatörünü ionq.simulatorkullanabilirsiniz.

Yeni bir hücre ekleyin ve IonQ kuantum simülatörünü targettemsil eden bir nesne oluşturun:

# Get IonQ quantum simulator target:
simulator_backend = provider.get_backend("ionq.simulator")

IonQ simülatöründe çalıştırma

Bağlantı hattınızı simülatörde çalıştırmak için aşağıdaki kodu ekleyin. Bu örnek, işinizi göndermek için yöntemini run kullanır target ve ardından iş durumunu izler.

# Submit the circuit to run on Azure Quantum
job = simulator_backend.run(circuit, shots=8)
job_id = job.id()
print("Job id", job_id)

İş başarıyla çalıştırıldığında, iş sonuçlarını alın ve bunları görüntüleyin:

# Get the job results:
result = job.result()
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=8, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 4, '111': 4}, memory=['000', '000', '000', '000', '111', '111', '111', '111'], probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits=3, metadata={}), status=JobStatus.DONE, name='Qiskit Sample - 3-qubit GHZ circuit')], date=None, status=None, header=None, error_data=None)

Bu result tür Qiskit paketine özgü bir nesne olduğundan, sonuçları görselleştirmek için Qiskit'leri result.get_counts kullanabilirsiniz plot_histogram . Tüm olası bit dizesi etiketlerinin temsili olduğundan emin olmak için, bunları öğesine countsekleyin.

counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 4, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 4}

IonQ Simulator'da Qiskit bağlantı hattı sonucu

ayrıca işlevi kullanarak get_memory() işten alınan tek tek çekim verilerini görüntüleyebilirsiniz

result.get_memory(circuit)
['000', '000', '000', '000', '111', '111', '111', '111']

Not

IonQ'da targetstek sayıda çekim içeren bir iş gönderirseniz sonuçlar bir sonraki çift sayıya yuvarlanır. Örneğin, 9 çekim belirtirseniz sonuçlar 8 çekim için verileri görüntüler.

İş maliyetini tahmin

Bir işi gerçek kuantum donanımında veya kuantum işleme biriminde (QPU) çalıştırmadan önce çalıştırmanın maliyetini tahmin etmelisiniz.

En güncel fiyatlandırma ayrıntıları için IonQ Fiyatlandırması'na bakın veya çalışma alanınızı bulun ve çalışma alanınızın Sağlayıcılar dikey penceresinde fiyatlandırma seçeneklerini görüntüleyin.

IonQ QPU üzerinde çalıştırma

IonQ simülatöründe işinizi başarıyla çalıştırdıktan ve QPU maliyetini tahmin ettikten sonra, bağlantı hattınızı donanım üzerinde çalıştırmanın zamanı geldi.

Not

QPU'da bir bağlantı hattını çalıştırmak için gereken süre, geçerli kuyruk sürelerine bağlı olarak değişir. Çalışma alanınızın Sağlayıcılartargetiçin ortalama kuyruk süresini görüntüleyebilirsiniz.

İşinizi run göndermek ve izlemek için API Validator ile daha önce kullandığınız yöntem ve işlemleri kullanın:

# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)

İş bittiğinde, iş sonuçlarını önceki gibi alın ve bir grafikte görüntüleyin:

result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 910b5ac8-98cd-11ec-b3ba-00155d5528cf
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='Job id 54e8c740-98d9-11ec-b382-00155d957f5d', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'0': 505, '1': 6, '2': 1, '3': 1, '4': 1, '5': 10, '6': 11, '7': 488}, probabilities={'0': 0.4932, '1': 0.0059, '2': 0.001, '3': 0.001, '4': 0.001, '5': 0.0098, '6': 0.0117, '7': 0.4766}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
{'000': 505, '001': 6, '010': 1, '011': 1, '100': 1, '101': 10, '110': 11, '111': 488}

IonQ QPU üzerinde Qiskit bağlantı hattı sonucu

Önemli

Tek bir işte birden çok bağlantı hattının gönderilmesi şu anda desteklenmemektedir. Geçici bir çözüm olarak, her bağlantı hattını zaman uyumsuz olarak göndermek için yöntemini çağırabilir backend.run ve ardından her işin sonuçlarını getirebilirsiniz. Örneğin:

jobs = []
for circuit in circuits:
    jobs.append(backend.run(circuit, shots=N))

results = []
for job in jobs:
    results.append(job.result())

Önkoşullar

Yükleme ayrıntıları için bkz. QDK uzantısını ayarlama.

  • Python ve Pip'inPython.

  • Azure Quantum Geliştirme Seti.

  • ve qsharp etiketlerini içeren Python Azure Quantum qiskitwidget paketi.

    python pip install "qsharp[qiskit,widgets]>=1.9" 
    

    Önemli

    Qiskit'in en son sürümüne sahip olduğunuzdan emin olun. Daha fazla bilgi için bkz . Azure-quantum Python paketini güncelleştirme.

Temel bağlantı hattı çalıştırma

VS Code'da, Qsharp paketindeki yerleşik seyrek simülatörünü kullanarak temel bir bağlantı hattı tanımlamak ve çalıştırmak için yeni Python bir dosya açın.

# load the required imports 
from qiskit.circuit.random import random_circuit
from qsharp.interop.qiskit import QSharpBackend

# define and display the circuit
circuit = random_circuit(2, 2, measure=True)
print(circuit)

# run the circuit using the built-in sparse simulator
backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()

print(counts)

Programı çalıştırmak için sağ üstteki Çalıştır simgesini ve ardından Dosyayı çalıştır'ı Python seçin. Çıkış yeni bir terminal penceresinde görüntülenir.

                  ┌─────────────────────────┐┌─┐
q_0: ─■───────────┤0                        ├┤M├───
      │P(0.79983) │  (XX-YY)(1.9337,1.7385) │└╥┘┌─┐
q_1: ─■───────────┤1                        ├─╫─┤M├
                  └─────────────────────────┘ ║ └╥┘
c: 2/═════════════════════════════════════════╩══╩═
                                              0  1
{'11': 680, '00': 344}

Devre için QIR üretme

Aynı devreyi kullanarak kuantum donanımı üzerinde çalıştırmak için kullanılan QIR oluşturabilirsiniz.

Not

QIR oluşturulurken tüm yazmaçların ölçülmüş olması gerekir. Kullanılmayan yazmaçlar varsa bir hata oluşur. Ayrıca, profil Unrestricted olarak ayarlandığında QIR oluşturmaya çalışmak bir hataya neden olur. Unrestricted profili yalnızca simülasyon için geçerlidir. TargetProfile.Base veya TargetProfile.Adaptive_RI kullanılmalıdır. profilleri değiştirmek için target_profile çağrısında backend.qir(...) geçersiz kılınabilir.

  1. QSharpError ve TargetProfile içeri aktarma

    from qsharp import QSharpError, TargetProfile
    
  2. QIR oluşturmak için çıkışı değiştirme

        print(backend.qir(circuit, target_profile=TargetProfile.Adaptive_RI))
    

Kodunuz şimdi şöyle görünmelidir:

# load the required imports 
from qiskit.circuit.random import random_circuit
from qsharp.interop.qiskit import QSharpBackend
from qsharp import QSharpError, TargetProfile

# define and display the circuit
circuit = random_circuit(2, 2, measure=True)
print(circuit)

# generate QIR for the circuit
print(backend.qir(circuit, target_profile=TargetProfile.Adaptive_RI))

çıktıyla birlikte:

     ┌────────────┐             ┌─┐   
q_0: ┤ Rx(2.7195) ├─■───────────┤M├───
     └──┬─────┬───┘ │U1(5.5924) └╥┘┌─┐
q_1: ───┤ Tdg ├─────■────────────╫─┤M├
        └─────┘                  ║ └╥┘
c: 2/════════════════════════════╩══╩═
                                 0  1
%Result = type opaque
%Qubit = type opaque

define void @ENTRYPOINT__main() #0 {
block_0:
  call void @__quantum__qis__rx__body(double 2.7194945105768586, %Qubit* inttoptr (i64 0 to %Qubit*))
  call void @__quantum__qis__rz__body(double 2.796204066686262, %Qubit* inttoptr (i64 0 to %Qubit*))
  call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*))
  call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
  call void @__quantum__qis__rz__body(double -2.796204066686262, %Qubit* inttoptr (i64 1 to %Qubit*))
  call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
  call void @__quantum__qis__rz__body(double 2.796204066686262, %Qubit* inttoptr (i64 1 to %Qubit*))
  call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
  call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*))
  call void @__quantum__rt__array_record_output(i64 2, i8* null)
  call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* null)
  call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* null)
  ret void
}

declare void @__quantum__qis__rx__body(double, %Qubit*)

declare void @__quantum__qis__rz__body(double, %Qubit*)

declare void @__quantum__qis__t__adj(%Qubit*)

declare void @__quantum__qis__cx__body(%Qubit*, %Qubit*)

declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1

declare void @__quantum__rt__array_record_output(i64, i8*)

declare void @__quantum__rt__result_record_output(%Result*, i8*)

attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" }
attributes #1 = { "irreversible" }

; module flags

!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10}

!0 = !{i32 1, !"qir_major_version", i32 1}
!1 = !{i32 7, !"qir_minor_version", i32 0}
!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
!3 = !{i32 1, !"dynamic_result_management", i1 false}
!4 = !{i32 1, !"classical_ints", i1 true}
!5 = !{i32 1, !"qubit_resetting", i1 true}
!6 = !{i32 1, !"classical_floats", i1 false}
!7 = !{i32 1, !"backwards_branching", i1 false}
!8 = !{i32 1, !"classical_fixed_points", i1 false}
!9 = !{i32 1, !"user_functions", i1 false}
!10 = !{i32 1, !"multiple_target_branching", i1 false}

Tüm programlar tüm donanımlarda çalıştırılamayabilir. Burada target işlemini Base profilinde deneyebilirsiniz, ancak programın hangi parçalarının desteklenmediğiyle ilgili ayrıntılı hatalar alacağız.

try:
    backend.qir(qc, target_profile=TargetProfile.Base)
except QSharpError as e:
    print(e)

Sonraki adımlar