Bagikan melalui


Cara mengirimkan sirkuit dengan Qiskit ke Azure Quantum

Pelajari cara mengirimkan sirkuit kuantum Qiskit menggunakan azure-quantumPython paket. Anda dapat mengirimkan sirkuit Qiskit ke Azure Quantum menggunakan notebook Azure Quantum, yang memiliki paket bawaan azure-quantumPython , atau dari komputer lokal Anda. Anda juga dapat menguji sirkuit Anda menggunakan simulator jarang lokal.

Untuk informasi selengkapnya, lihat Sirkuit kuantum.

Prasyarat

Untuk detail penginstalan, lihat Menyiapkan ekstensi QDK.

  • Ruang kerja Azure Quantum di langganan Azure Anda. Untuk membuat ruang kerja, lihat Membuat ruang kerja Azure Quantum.

  • Lingkungan Python dengan Python dan Pip terinstal.

  • Visual Studio Code dengan Ekstensi Azure Quantum Development Kit, Python, dan Jupyter terinstal.

  • Paket Azure Quantum azure-quantumPython dengan tag [qiskit].

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

    Penting

    Pastikan Anda memiliki versi terbaru Qiskit. Untuk informasi selengkapnya, lihat Python azure-quantum.

    Catatan

    Jika kernel Python Jupyter ipykernel tidak terdeteksi, VISUAL Code akan meminta Anda untuk menginstalnya.

Membuat Jupyter Notebook

  1. Di Visual Studio Code, pilih > Perintah dan pilih Buat: Notebook Jupyter Baru.
  2. Di kanan atas, Visual Studio Code akan mendeteksi dan menampilkan versi Python dan lingkungan virtual Python yang dipilih untuk buku catatan. Jika Anda memiliki beberapa Python lingkungan, Anda mungkin perlu memilih kernel menggunakan pemilih kernel di kanan atas. Jika tidak ada lingkungan yang terdeteksi, lihat Jupyter Notebooks di VISUAL Code untuk informasi penyiapan.

Memuat impor yang diperlukan

Di sel pertama buku catatan Anda, jalankan kode berikut untuk memuat impor yang diperlukan:

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

Menyambungkan ke layanan Azure Quantum

Untuk menyambungkan ke layanan Azure Quantum, Anda memerlukan ID sumber daya dan lokasi ruang kerja Azure Quantum Anda.

  1. Masuk ke akun Azure Anda, https://portal.azure.com,

  2. Pilih ruang kerja Azure Quantum Anda, dan navigasikan ke Gambaran Umum.

  3. Salin parameter di bidang .

    Cuplikan layar Visual Studio Code memperlihatkan cara memperluas panel gambaran umum Ruang Kerja Quantum Anda.

Tambahkan sel baru di buku catatan Anda dan gunakan informasi akun Anda untuk membuat Workspace dan AzureQuantumProvider objek untuk menyambungkan ke ruang kerja Azure Quantum Anda.

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

provider = AzureQuantumProvider(workspace)

Mencantumkan semua backend

Anda sekarang dapat mencetak semua backend komputasi kuantum yang tersedia di ruang kerja Anda:

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

Menjalankan sirkuit sederhana

Pertama, buat sirkuit Qiskit sederhana untuk dijalankan.

# 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 

target Pilih untuk menjalankan program Anda

Jalankan di simulator IonQ

Sebelum berjalan pada perangkat keras nyata, mari kita uji sirkuit di simulator. Gunakan get_backend untuk membuat Backend objek untuk menyambungkan ke backend Simulator IonQ:

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

Backend IonQ mendukung gerbang dari set gerbang yang ditentukan dan dikompilasi agar dapat berjalan secara optimal di perangkat keras. Jika sirkuit Anda berisi gerbang yang tidak ada dalam daftar ini, Anda perlu mentranspilasi ke dalam yang didukung gateset menggunakan transpile fungsi yang disediakan oleh Qiskit:

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

Fungsi transpile mengembalikan objek sirkuit baru di mana gerbang didekomposisikan ke dalam gerbang yang didukung pada backend yang ditentukan.

Anda sekarang dapat menjalankan program melalui layanan Azure Quantum dan mendapatkan hasilnya. Sel berikut mengirimkan pekerjaan yang menjalankan sirkuit dengan 100 bidikan:

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

Untuk menunggu sampai pekerjaan selesai dan mengembalikan hasilnya, jalankan:

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)

Karena hasilnya adalah objek asli paket Qiskit, Anda dapat menggunakan Qiskit result.get_counts dan plot_histogram untuk memvisualisasikan hasilnya. Untuk memastikan bahwa semua kemungkinan label bitstring diwakili, tambahkan ke counts.

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}

Hasil sirkuit Qiskit pada Simulator IonQ

Anda juga dapat menggunakan get_memory() fungsi untuk menampilkan data bidikan individual dari pekerjaan

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

Catatan

Pada IonQ targets, jika Anda mengirimkan pekerjaan dengan jumlah bidikan ganjil, hasilnya akan dibulatkan ke angka genap berikutnya. Misalnya, jika Anda menentukan 9 bidikan, hasilnya akan menampilkan data untuk 8 bidikan.

Memperkirakan biaya pekerjaan

Sebelum menjalankan pekerjaan di QPU, Anda harus memperkirakan berapa biaya yang harus dijalankan.

Untuk detail harga terbaru, lihat Harga IonQ, atau temukan ruang kerja Anda dan lihat opsi harga di tab "Penyedia" ruang kerja melalui: aka.ms/aq/myworkspaces.

Menjalankan di IonQ QPU

Untuk terhubung ke perangkat keras nyata ( Unit Prosesor Quantum (QPU)), cukup berikan nama target"ionq.qpu.aria-1" ke get_backend metode :

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

Kirim sirkuit untuk dijalankan di Azure Quantum, dapatkan hasilnya, dan jalankan plot_histogram untuk memplot hasilnya.

Catatan

Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini.

# 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}

Hasil sirkuit Qiskit pada QPU IonQ

Penting

Mengirimkan beberapa sirkuit pada satu pekerjaan saat ini tidak didukung. Sebagai solusinya, Anda dapat memanggil backend.run metode untuk mengirimkan setiap sirkuit secara asinkron, lalu mengambil hasil setiap pekerjaan. Contohnya:

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

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

Prasyarat

  • Akun Azure dengan langganan aktif. Jika Anda tidak memiliki akun Azure, daftarkan secara gratis dan daftar untuk langganan prabayar.
  • Ruang kerja Azure Quantum. Untuk informasi selengkapnya, lihat Buat ruang kerja Azure Quantum.

Membuat buku catatan baru di ruang kerja Anda

  1. Masuk ke portal Azure lalu pilih ruang kerja yang Anda buat di langkah sebelumnya.
  2. Di panel kiri, pilih Notebook.
  3. Klik Notebook Saya lalu klik Tambahkan Baru.
  4. Ketik nama untuk file, misalnya Qiskit.ipynb, lalu klik Buat file.

Saat buku catatan baru Anda terbuka, buku catatan akan secara otomatis membuat kode untuk sel pertama, berdasarkan informasi langganan dan ruang kerja Anda.

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

Catatan

Kecuali dinyatakan lain, Anda harus menjalankan setiap sel saat Anda membuatnya untuk menghindari masalah kompilasi.

Klik ikon segitiga "putar" di sebelah kiri sel untuk menjalankan kode.

Memuat impor yang diperlukan

Pertama, Anda perlu mengimpor beberapa modul tambahan.

Klik + Kode untuk menambahkan sel baru, lalu tambahkan dan jalankan kode berikut:

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

Menyambungkan ke layanan Azure Quantum

Selanjutnya, buat AzureQuantumProvider objek menggunakan Workspace objek dari sel sebelumnya untuk menyambungkan ke ruang kerja Azure Quantum Anda. Tambahkan sel baru dengan kode berikut:

provider = AzureQuantumProvider(workspace)

Menentukan sirkuit sederhana

Di sel baru, buat objek circuit. Contoh ini adalah generator bit acak kuantum sederhana. Tambahkan kode berikut untuk menentukan dan menampilkan sirkuit:

# 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 

Cantumkan semua targets

Anda sekarang dapat menampilkan semua komputasi targetskuantum , atau backend, yang tersedia di ruang kerja Anda. Tambahkan sel baru dan jalankan baris berikut:

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    

target Pilih untuk menjalankan program Anda

Untuk memeriksa kode Anda sebelum menjalankannya di perangkat keras kuantum yang sebenarnya, Anda dapat menggunakan simulator kuantum IonQ, ionq.simulator.

Tambahkan sel baru dan buat objek untuk mewakili simulator targetkuantum IonQ :

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

Jalankan di simulator IonQ

Untuk menjalankan sirkuit Anda pada simulator, tambahkan kode berikut. Contoh ini menggunakan run metode target untuk mengirimkan pekerjaan Anda, lalu memantau status pekerjaan.

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

Ketika pekerjaan berhasil berjalan, dapatkan hasil pekerjaan dan tampilkan:

# 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)

Karena jenis result ini adalah objek native ke paket Qiskit, Anda dapat menggunakan result.get_counts dan plot_histogram Qiskit untuk memvisualisasikan hasilnya. Untuk memastikan bahwa semua kemungkinan label bitstring diwakili, tambahkan ke counts.

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}

Hasil sirkuit Qiskit pada Simulator IonQ

Anda juga dapat menggunakan get_memory() fungsi untuk menampilkan data bidikan individual dari pekerjaan

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

Catatan

Pada IonQ targets, jika Anda mengirimkan pekerjaan dengan jumlah bidikan ganjil, hasilnya akan dibulatkan ke angka genap berikutnya. Misalnya, jika Anda menentukan 9 bidikan, hasilnya akan menampilkan data untuk 8 bidikan.

Memperkirakan biaya pekerjaan

Sebelum menjalankan pekerjaan pada perangkat keras kuantum aktual , atau unit pemrosesan kuantum (QPU), Anda harus memperkirakan berapa biaya yang harus dijalankan.

Untuk detail harga terbaru, lihat Harga IonQ, atau temukan ruang kerja Anda dan lihat opsi harga di panel Penyedia ruang kerja Anda.

Menjalankan di IonQ QPU

Setelah Anda berhasil menjalankan pekerjaan Anda pada simulator IonQ dan memperkirakan biaya QPU, saatnya untuk menjalankan sirkuit Anda pada perangkat keras.

Catatan

Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini. Anda dapat melihat waktu antrean rata-rata untuk a target dengan memilih bilah Penyedia ruang kerja Anda.

Gunakan metode dan operasi run yang sama seperti yang telah Anda gunakan sebelumnya dengan API Validator untuk mengirimkan dan memantau pekerjaan Anda:

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

Setelah pekerjaan selesai, dapatkan hasil pekerjaan seperti sebelumnya dan tampilkan dalam bagan:

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}

Hasil sirkuit Qiskit pada QPU IonQ

Penting

Mengirimkan beberapa sirkuit pada satu pekerjaan saat ini tidak didukung. Sebagai solusinya, Anda dapat memanggil backend.run metode untuk mengirimkan setiap sirkuit secara asinkron, lalu mengambil hasil setiap pekerjaan. Contohnya:

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

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

Prasyarat

Untuk detail penginstalan, lihat Menyiapkan ekstensi QDK.

  • Lingkungan Python dengan Python dan Pip terinstal.

  • Visual Studio Code dengan Kit Pengembangan Azure Quantum dan Python ekstensi terinstal.

  • Paket Azure Quantum qsharpPython dengan qiskit tag dan widget .

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

    Penting

    Pastikan Anda memiliki versi terbaru Qiskit. Untuk informasi selengkapnya, lihat Python azure-quantum.

Menjalankan sirkuit dasar

Di Visual Studio Code, buka file baru Python untuk menentukan dan menjalankan sirkuit dasar menggunakan simulator jarang bawaan dalam paket Qsharp.

# 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)

Untuk menjalankan program, pilih ikon Jalankan di kanan atas, dan pilih Jalankan Python file. Output ditampilkan di jendela terminal baru.

                  ┌─────────────────────────┐┌─┐
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}

Hasilkan QIR untuk sirkuit

Dengan menggunakan sirkuit yang sama, Anda dapat menghasilkan QIR yang digunakan untuk berjalan pada perangkat keras kuantum.

Catatan

Saat menghasilkan QIR, semua register harus sudah diukur. Jika ada register yang tidak digunakan, kesalahan akan muncul. Selain itu, mencoba menghasilkan QIR ketika profil diatur ke Unrestricted menimbulkan kesalahan. Profil Unrestricted hanya valid untuk simulasi. TargetProfile.Base atau TargetProfile.Adaptive_RI harus digunakan. target_profile dapat diambil alih dalam panggilan backend.qir(...) untuk beralih profil.

  1. Mengimpor QSharpError dan TargetProfile

    from qsharp import QSharpError, TargetProfile
    
  2. Ubah output untuk menghasilkan QIR

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

Kode Anda sekarang akan terlihat seperti ini:

# 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))

dengan output:

     ┌────────────┐             ┌─┐   
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}

Tidak semua program dapat berjalan pada semua piranti keras. Di sini Anda dapat mencoba target profil Base, tetapi kami akan mendapatkan kesalahan terperinci tentang bagian program mana yang tidak didukung.

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

Langkah berikutnya