Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

OpenQASM 3 y el SDK de Qiskit

Versiones de paquetes

El código de esta página fue desarrollado con los siguientes requisitos. Recomendamos usar estas versiones o versiones más recientes.

qiskit[all]~=2.5.2
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")

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

nota

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

Importar un programa OpenQASM 3 en Qiskit​

Debes instalar el paquete qiskit_qasm3_import para usar esta función. Instálalo usando el siguiente comando.

pip install qiskit-qasm3-import

Actualmente hay dos funciones de alto nivel disponibles para importar desde OpenQASM 3 a Qiskit. Estas funciones son load(), que recibe un nombre de archivo, y loads(), que recibe el programa directamente como cadena de texto:

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

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

Salida de la celda de código anterior

Exportar a OpenQASM 3​

Puedes exportar código de Qiskit a OpenQASM 3 con dumps(), que exporta a una cadena de texto, 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)
'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, consulta la sección Exportar a OpenQASM 3 de la referencia de la API.

Próximos pasos​

Recomendaciones