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.
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-importActualmente 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:
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
- Aprenda a generar código OpenQASM en la guía IBM Quantum Composer.
- Consulta la referencia de la API de Qiskit en OpenQASM 3.
- Visita la sección «Verifica tu programa ».
- Revise las especificaciones de OpenQASM Live.