Skip to main content
IBM Quantum Platform

OpenQASM 3 y el Qiskit SDK

  • El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.

    qiskit[all]~=2.5.0
    

El SDK de Qiskit proporciona algunas herramientas para convertir entre OpenQASM representaciones de programas cuánticos, y la clase QuantumCircuit. Tenga en cuenta que estas herramientas aún se encuentran en una fase exploratoria de desarrollo y seguirán evolucionando a medida que aumente la compatibilidad de Qiskit con las capacidades de circuitos dinámicos expresadas por OpenQASM 3.

Note

Esta función está aún en fase exploratoria. Por lo tanto, es probable que la sintaxis y las capacidades evolucionen.


Importar un programa de OpenQASM 3 a Qiskit

Debe instalar el paquete qiskit_qasm3_import para utilizar esta función. Instale utilizando el siguiente comando.

pip install qiskit-qasm3-import

Actualmente existen dos funciones de alto nivel para importar desde OpenQASM 3 a Qiskit. Estas funciones son load(), que toma un nombre de archivo, y loads(), que toma el propio programa como cadena:

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

En este ejemplo, definimos un programa cuántico utilizando OpenQASM 3, y utilizamos loads() para convertirlo directamente en un programa 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

Exportar a OpenQASM 3

Puedes exportar código Qiskit a OpenQASM 3 con dumps(), que exporta a una cadena, o dump(), que exporta a un archivo.

Ejemplo 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'

Ejemplo 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()

Para más información, consulte la sección Exportar a OpenQASM 3 de la referencia de la API.


Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.