Skip to main content
IBM Quantum Platform

OpenQASM 3 e l' Qiskit SDK

  • Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.

    qiskit[all]~=2.5.1
    

L'SDK Qiskit fornisce alcuni strumenti per la conversione tra le rappresentazioni OpenQASM dei programmi quantistici e la classe QuantumCircuit. Si noti che questi strumenti sono ancora in una fase esplorativa di sviluppo e continueranno ad evolversi man mano che aumenterà il supporto di Qiskit per le funzionalità dei circuiti dinamici espresse da OpenQASM 3.

Note

Questa funzione è ancora in fase esplorativa. Pertanto, è probabile che la sintassi e le capacità si evolvano.


Importare un programma OpenQASM 3 in Qiskit

Per utilizzare questa funzione è necessario installare il pacchetto qiskit_qasm3_import . Installare utilizzando il seguente comando.

pip install qiskit-qasm3-import

Attualmente sono disponibili due funzioni di alto livello per importare da OpenQASM 3 in Qiskit. Queste funzioni sono load(), che accetta un nome di file, e loads(), che accetta il programma stesso come stringa:

import qiskit.qasm3
qiskit.qasm3.load(file_name)
qiskit.qasm3.loads(program_string)

In questo esempio, definiamo un programma quantistico usando OpenQASM 3 e usiamo loads() per convertirlo direttamente in un programma di tipo "quantistico" QuantumCircuit:

import qiskit.qasm3

program = """
    OPENQASM 3.0;
    include "stdgates.inc";

    input float[64] a;
    qubit[3] q;
    bit[2] mid;
    bit[3] out;

    let aliased = q[0:1];

    gate my_gate(a) c, t {
      gphase(a / 2);
      ry(a) c;
      cx c, t;
    }
    gate my_phase(a) c {
      ctrl @ inv @ gphase(a) c;
    }

    my_gate(a * 2) aliased[0], q[{1, 2}][0];
    measure q[0] -> mid[0];
    measure q[1] -> mid[1];

    while (mid == "00") {
      reset q[0];
      reset q[1];
      my_gate(a) q[0], q[1];
      my_phase(a - pi/2) q[1];
      mid[0] = measure q[0];
      mid[1] = measure q[1];
    }

    if (mid[0]) {
      let inner_alias = q[{0, 1}];
      reset inner_alias;
    }

    out = measure q;
"""
circuit = qiskit.qasm3.loads(program)
circuit.draw("mpl")

Output:

Output of the previous code cell

Esporta in OpenQASM e 3

È possibile esportare il codice Qiskit in OpenQASM 3 con dumps(), che esporta in una stringa, o dump(), che esporta in un file.

Esempio con dumps()

from qiskit import QuantumCircuit
from qiskit.qasm3 import dumps

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

dumps(qc)

Output:

'OPENQASM 3.0;\ninclude "stdgates.inc";\nbit[2] meas;\nqubit[2] q;\nh q[0];\ncx q[0], q[1];\nbarrier q[0], q[1];\nmeas[0] = measure q[0];\nmeas[1] = measure q[1];\n'

Esempio con dump()

from qiskit import QuantumCircuit
from qiskit.qasm3 import dump

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

f = open("my_file.txt", "w")
dump(qc, f)
f.close()

Per ulteriori informazioni, consultare la sezione Esportazione in OpenQASM 3 del riferimento API.


Passi successivi

Suggerimenti
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.