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


Kapcsolatcsoport elküldése a Qiskittel az Azure Quantumba

Megtudhatja, hogyan küldhet be Qiskit-kvantumköröket a azure-quantumPython csomag használatával. Qiskit-kapcsolatcsoportokat küldhet az Azure Quantumba egy beépített csomagokkal rendelkező Azure Quantum-jegyzetfüzettel azure-quantumPython vagy a helyi gépről. A kapcsolatcsoportokat a helyi ritka ritkák szimulátorával is tesztelheti.

További információ: Kvantum-kapcsolatcsoportok.

Előfeltételek

A telepítés részleteiért lásd: QDK-bővítmény beállítása.

Új Jupyter Notebook létrehozása

  1. A VS Code-ban válassza a > megtekintése lehetőséget, majd a Létrehozás: Új Jupyter-jegyzetfüzet lehetőséget.
  2. A jobb felső sarokban a VS Code észleli és megjeleníti a jegyzetfüzethez kiválasztott virtuális Python környezet verzióját és verziójátPython. Ha több Python környezettel rendelkezik, előfordulhat, hogy ki kell választania egy kernelt a jobb felső sarokban található kernelválasztóval. Ha nem észlelt környezetet, a beállítási információkért tekintse meg a VS Code Jupyter-jegyzetfüzeteit.

A szükséges importálás betöltése

A jegyzetfüzet első cellájában futtassa a következő kódot a szükséges importálások betöltéséhez:

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

Csatlakozás az Azure Quantum szolgáltatáshoz

Az Azure Quantum szolgáltatáshoz való csatlakozáshoz szüksége van az erőforrás-azonosítóra és az Azure Quantum-munkaterület helyére.

  1. Jelentkezzen be az Azure-fiókjába, https://portal.azure.com

  2. Válassza ki az Azure Quantum-munkaterületet, és lépjen az Áttekintés elemre.

  3. Másolja ki a mezők paramétereit.

    Képernyőkép a Visual Studio Code-ról, amely bemutatja, hogyan bonthatja ki a Quantum Workspace áttekintő panelét.

Vegyen fel egy új cellát a jegyzetfüzetbe, és a fiókadataival hozzon létre Workspace és AzureQuantumProvider objektumokat az Azure Quantum-munkaterülethez való csatlakozáshoz.

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

provider = AzureQuantumProvider(workspace)

Az összes háttérrendszer listázása

Most már kinyomtathatja a munkaterületen elérhető összes kvantum-számítási háttérrendszert:

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

Egyszerű kapcsolatcsoport futtatása

Először hozzon létre egy egyszerű Qiskit-kapcsolatcsoportot a futtatáshoz.

# 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 

Válasszon egy target lehetőséget a program futtatásához

Futtatás az IonQ-szimulátoron

Mielőtt valódi hardveren futnál, teszteljük a áramkört a szimulátorban. Objektum get_backend létrehozása Backend az IonQ-szimulátor háttérrendszeréhez való csatlakozáshoz:

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

Az IonQ háttérrendszerei egy meghatározott kapukészletből támogatják a kapukat, amelyek úgy vannak lefordítva, hogy optimálisan fussanak a hardveren. Ha a kapcsolatcsoport olyan kapukat tartalmaz, amelyek nem szerepelnek a listában, a Qiskit által biztosított függvény használatával át kell alakítania a gateset támogatottak transpile közé:

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

A transpile függvény egy új áramköri objektumot ad vissza, ahol a kapukat a megadott háttérrendszeren támogatott kapukká bontják.

Most már futtathatja a programot az Azure Quantum szolgáltatáson keresztül, és lekérheti az eredményt. A következő cella elküld egy feladatot, amely 100 lövéssel futtatja a áramkört:

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

A feladat befejezéséig és az eredmények visszaadásához futtassa a következőt:

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)

Mivel az eredmény a Qiskit-csomag natív objektuma, használhatja a Qiskit-et result.get_counts , és plot_histogram megjelenítheti az eredményeket. Ha meg szeretné győződni arról, hogy az összes lehetséges bitlánccímke látható, vegye fel őket a fájlba 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}

Qiskit-kapcsolatcsoport eredménye az IonQ-szimulátoron

A függvény használatával get_memory() a feladat egyes lövési adatait is megjelenítheti

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

Feljegyzés

Az IonQ-n targets, ha páratlan számú felvételt küld be, az eredmények a következő páros számra lesznek kerekítve. Ha például 9 felvételt ad meg, az eredmények 8 felvétel adatait jelenítik meg.

Feladat költségének becslése

Mielőtt futtatna egy feladatot a QPU-n, meg kell becsülnie, hogy mennyibe kerül a futtatás.

A legfrissebb díjszabási részletekért tekintse meg az IonQ díjszabását, vagy keresse meg a munkaterületet, és tekintse meg a díjszabási beállításokat a munkaterület "Szolgáltató" lapján a következő aka.ms/aq/myworkspaces keresztül.

Futtatás IonQ QPU-n

Ha valós hardverhez (kvantumprocesszor-egységhez (QPU)) szeretne csatlakozni, egyszerűen adja meg a target"ionq.qpu.aria-1"get_backend metódus nevét:

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

Küldje el a kapcsolatcsoportot az Azure Quantumon való futtatáshoz, az eredmények lekéréséhez és az plot_histogram eredmények ábrázolásához.

Feljegyzés

A kapcsolatcsoportok QPU-n való futtatásához szükséges idő az aktuális üzenetsor-időktől függően változhat.

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

Qiskit-kapcsolatcsoport eredménye az IonQ QPU-n

Fontos

Több kapcsolatcsoport elküldése egy feladaton jelenleg nem támogatott. Áthidaló megoldásként meghívhatja a metódust az backend.run egyes áramkörök aszinkron elküldéséhez, majd lekérheti az egyes feladatok eredményeit. Példa:

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

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

Előfeltételek

  • Egy Azure-fiók, aktív előfizetéssel. Ha nem rendelkezik Azure-fiókkal, regisztráljon ingyenesen, és regisztráljon használatalapú fizetéses előfizetésre.
  • Egy Azure Quantum-munkaterület. További információ: Azure Quantum-munkaterület létrehozása.

Új jegyzetfüzet létrehozása a munkaterületen

  1. Jelentkezzen be az Azure Portalra , és válassza ki az előző lépésben létrehozott munkaterületet.
  2. A bal oldali panelen válassza a Jegyzetfüzetek lehetőséget.
  3. Kattintson a Saját jegyzetfüzetek elemre, majd az Új hozzáadása parancsra.
  4. Írja be a fájl nevét (például Qiskit.ipynb), és kattintson a Fájl létrehozása parancsra.

Amikor megnyílik az új jegyzetfüzet, automatikusan létrehozza az első cellához tartozó kódot az előfizetés és a munkaterület adatai alapján.

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

Feljegyzés

Ha másként nem jelezzük, minden cellát úgy kell futtatnia, hogy a létrehozás során ne okozhasson fordítási problémákat.

A kód futtatásához kattintson a cella bal oldalán található háromszög "lejátszás" ikonra.

A szükséges importálás betöltése

Először is importálnia kell néhány további modult.

Kattintson a + Kód gombra egy új cella hozzáadásához, majd adja hozzá és futtassa a következő kódot:

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

Csatlakozás az Azure Quantum szolgáltatáshoz

Ezután hozzon létre egy AzureQuantumProvider objektumot az Workspace előző cella objektumával az Azure Quantum-munkaterülethez való csatlakozáshoz. Adjon hozzá egy új cellát a következő kóddal:

provider = AzureQuantumProvider(workspace)

Egyszerű kapcsolatcsoport definiálása

Hozzon létre egy objektumot egy circuit új cellában. Ez a példa egy egyszerű kvantum véletlenszerű bitgenerátor. Adja hozzá a következő kódot a kapcsolatcsoport definiálásához és megjelenítéséhez:

# 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 

Az összes listázása targets

Mostantól megjelenítheti a munkaterületen elérhető összes kvantum-számítástechnikát targetsvagy háttérrendszert. Adjon hozzá egy új cellát, és futtassa a következő sort:

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    

Válasszon egy target lehetőséget a program futtatásához

Ha ellenőrizni szeretné a kódot, mielőtt tényleges kvantumhardveren futtatja, használhatja az IonQ kvantumszimulátort. ionq.simulator

Adjon hozzá egy új cellát, és hozzon létre egy objektumot az IonQ kvantumszimulátor targetábrázolásához:

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

Futtatás az IonQ-szimulátoron

A kapcsolatcsoport szimulátoron való futtatásához adja hozzá a következő kódot. Ez a példa a run feladat elküldésének módszerét target használja, majd figyeli a feladat állapotát.

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

Ha a feladat sikeresen lefut, kérje le a feladat eredményeit, és jelenítse meg őket:

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

Mivel ez result a típus a Qiskit-csomag natív objektuma, használhatja a Qiskit-et result.get_counts , és plot_histogram megjelenítheti az eredményeket. Ha meg szeretné győződni arról, hogy az összes lehetséges bitlánccímke látható, vegye fel őket a fájlba 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}

Qiskit-kapcsolatcsoport eredménye az IonQ-szimulátoron

A függvény használatával get_memory() a feladat egyes lövési adatait is megjelenítheti

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

Feljegyzés

Az IonQ-n targets, ha páratlan számú felvételt küld be, az eredmények a következő páros számra lesznek kerekítve. Ha például 9 felvételt ad meg, az eredmények 8 felvétel adatait jelenítik meg.

Feladat költségének becslése

Mielőtt tényleges kvantumhardveren vagy kvantumfeldolgozó egységen (QPU) futtatna egy feladatot, meg kell becsülnie, hogy mennyibe kerül a futtatás.

A legfrissebb díjszabási részletekért tekintse meg az IonQ díjszabását, vagy keresse meg a munkaterületet, és tekintse meg a díjszabási beállításokat a munkaterület Szolgáltatók paneljén.

Futtatás IonQ QPU-n

Miután sikeresen futtatta a feladatot az IonQ-szimulátoron, és megbecsülte a QPU költségeit, ideje futtatni a kapcsolatcsoportot a hardveren.

Feljegyzés

A kapcsolatcsoport QPU-n való futtatásához szükséges idő az aktuális üzenetsor-időktől függően változik. Az átlagos üzenetsor-időt target a munkaterület Szolgáltatók paneljének kiválasztásával tekintheti meg.

Ugyanazt a run módszert és műveletet használja, mint korábban az API Validatorban a feladat elküldéséhez és figyeléséhez:

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

Amikor a feladat befejeződik, a feladat eredményeit a korábbiakhoz hasonlóan lekérheti, és megjelenítheti őket egy diagramon:

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}

Qiskit-kapcsolatcsoport eredménye az IonQ QPU-n

Fontos

Több kapcsolatcsoport elküldése egy feladaton jelenleg nem támogatott. Áthidaló megoldásként meghívhatja a metódust az backend.run egyes áramkörök aszinkron elküldéséhez, majd lekérheti az egyes feladatok eredményeit. Példa:

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

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

Előfeltételek

A telepítés részleteiért lásd: QDK-bővítmény beállítása.

  • A Python környezet és a Python Pip telepítve.

  • VS Code az Azure Quantum Development Kittel és Python a telepített bővítményekkel.

  • Az Azure Quantum-csomag qsharpPython a címkékkel és qiskit a widget címkékkel.

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

    Fontos

    Győződjön meg arról, hogy a Qiskit legújabb verziójával rendelkezik. További információ: Az Azure-quantum Python csomag frissítése.

Alapszintű kapcsolatcsoport futtatása

A VS Code-ban nyisson meg egy új Python fájlt egy alapszintű kapcsolatcsoport definiálásához és futtatásához a Qsharp-csomag beépített ritka elérésű szimulátorával.

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

A program futtatásához válassza a futtatás ikont a jobb felső sarokban, és válassza a Fájl futtatása Python lehetőséget. A kimenet egy új terminálablakban jelenik meg.

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

QIR létrehozása az áramkörhöz

Ugyanezzel a kapcsolatcsoporttal létrehozhat QIR-t, amely kvantumhardveren fut.

Feljegyzés

A QIR létrehozásakor az összes regisztrációt meg kell mérni. Ha nincsenek fel nem használt regiszterek, a rendszer hibát jelez. Emellett hibát jelez a QIR létrehozása, amikor a profil Unrestricted-ra van beállítva. A Unrestricted profil csak szimulációhoz érvényes. Vagy TargetProfile.Base vagy TargetProfile.Adaptive_RI kell használni. A target_profile felülírható a profilváltáshoz használt backend.qir(...) hívásban.

  1. QSharpError és TargetProfile importálása

    from qsharp import QSharpError, TargetProfile
    
  2. A kimenet módosítása a QIR létrehozásához

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

A kódnak így kell kinéznie:

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

a kimenetnél:

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

Nem minden program futtatható az összes hardveren. Itt megpróbálhatja target a Base profilt, de részletes hibákat fogunk kapni arról, hogy a program mely részei nem támogatottak.

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

Következő lépések