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?

Tabla de características de OpenQASM 3

A continuación se muestra una lista de las características del lenguaje OpenQASM 3.

Para más detalles sobre estas capacidades, consulta la Especificación en vivo de OpenQASM 3.X.

Clave:

  • ❌ No compatible

  • 🟡 Compatibilidad parcial

  • ✅ Compatible

El significado de la marca "compatible" completa depende de la columna:

  • Qiskit SDK: La característica puede ser analizada por qiskit.qasm3.loads (usando la extensión qiskit-qasm3-import), representada en un QuantumCircuit, y exportada a OpenQASM 3 mediante qiskit.qasm3.dumps.

  • IBM Quantum Compute Service: Un circuito que contiene la característica de Qiskit correspondiente puede ejecutarse correctamente en hardware a través de IBM Quantum Compute Service.

El significado de "compatibilidad parcial" depende generalmente de las notas enlazadas.

nota

El método más común para enviar circuitos a IBM Quantum Compute Service es crear el circuito en la interfaz Python de Qiskit SDK. Los circuitos construidos y enviados de esta forma no necesitan cargarse desde archivos OpenQASM 3 a Qiskit SDK.

Si no usas OpenQASM 3 directamente, puedes utilizar con seguridad las características que son compatibles para su representación en Qiskit SDK, exportación a OpenQASM 3 y envío a IBM Quantum Compute Service. Esto incluye características que no pueden ser cargadas por Qiskit SDK desde OpenQASM 3.

Característica de OpenQASM 3Característica de Qiskit SDKQiskit SDKIBM Quantum Compute ServiceNotas
comments✅✅1
QASM vstring✅✅1
include🟡❌1, 7
unicode names✅✅
qubitQubit and QuantumRegister✅🟡2
bitClbit and ClassicalRegister✅✅3
boolexpr.Var and classical expressions🟡✅4
int❌✅4
uintexpr.Var and classical expressions🟡✅4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters❌🟡4
complex❌❌4
const❌❌4
pi/π/tau/τ/euler/ℇConstant-folded into gate parameters✅✅
Aliasing: letQuantum and classical registers🟡❌5
register concatenationQuantum and classical registers🟡❌5
castingexpr.Cast classical expressions🟡🟡4
duration❌❌
durationof❌❌
ns/µs/us/ms/s/dtDurations of delay and box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
Built-in UUGate/QuantumCircuit.u✅✅
gate🟡🟡7
gphaseQuantumCircuit.global_phase🟡❌7
ctrl @/ negctrl @AnnotatedOperation🟡❌7
inv @AnnotatedOperation🟡❌7
pow(k) @AnnotatedOperation🟡❌7
resetReset/QuantumCircuit.reset✅✅
measureMeasure/QuantumCircuit.measure✅✅
bit operations🟡✅4
boolean operations🟡✅4
arithmetic expressions🟡🟡4
comparisons🟡✅4
ifQuantumCircuit.if_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
for loopsQuantumCircuit.for_loop🟡❌8
while loopsQuantumCircuit.while_loop✅❌8
continueQuantumCircuit.continue_loop🟡❌8
breakQuantumCircuit.break_loop🟡❌8
return❌❌
extern❌❌
def subroutines (classical)❌❌
def subroutines (quantum)❌❌
inputQuantumCircuit.add_input✅🟡4, 9
output❌❌

Notas​

  1. Estas características de los programas OpenQASM 3 no tienen impacto en la ejecución y Qiskit las elimina al analizar los archivos. Los archivos que las utilizan pueden enviarse, pero no tendrán ningún efecto. En el caso de los archivos include, Qiskit admite actualmente stdgates.inc como entrada, y la ejecución en el backend siempre requiere que los circuitos hayan sido compilados para la Arquitectura del Conjunto de Instrucciones (ISA) del backend, donde los archivos include son irrelevantes.
  1. Qiskit SDK admite el análisis y la exportación de archivos OpenQASM 3 con cualquier declaración de qubit. Para la ejecución en hardware, solo son válidos los circuitos definidos en términos de qubits de hardware (por ejemplo, $0). Qiskit SDK genera automáticamente OpenQASM 3 en términos de los identificadores de qubits de hardware admitidos si el circuito fue transpilado para un backend con información de layout (disposición de qubits).
  1. Las declaraciones de variables de tipo bit y bit[n] en Qiskit SDK corresponden a declaraciones de Clbit y ClassicalRegister.
  1. A partir de julio de 2025, Qiskit SDK puede representar variables locales de un conjunto restringido de tipos, puede representar muchas operaciones en tiempo de ejecución sobre estos objetos, y admite exportarlos a OpenQASM 3. Sin embargo, Qiskit SDK (a través de qiskit-qasm3-import v0.6.0) no admite el análisis de archivos OpenQASM 3 que contienen declaraciones de variables, y tiene soporte muy limitado para el análisis de expresiones de variables. En general, la mayor parte de lo que Qiskit puede representar en su sistema de expresiones puede ser ejecutado en hardware de circuitos dinámicos adecuado, incluso si la expresión aún no puede ser analizada por Qiskit SDK. Consulta la documentación de Qiskit del módulo qiskit.circuit.classical para obtener la información más actualizada.
  1. Qiskit SDK puede representar alias de registros tanto para registros cuánticos como clásicos, pero se desaconseja firmemente el uso de alias en registros clásicos. La mayoría de las expresiones sobre registros clásicos no funcionan con alias, y los registros clásicos con alias no están soportados para la ejecución en hardware. El analizador OpenQASM 3 de Qiskit puede resolver declaraciones de alias let que vinculan el resultado de la concatenación de registros.
  1. Qiskit SDK admite retardos explícitos mediante QuantumCircuit.delay, y los bloques de circuito (QuantumCircuit.box) también pueden tener duraciones explícitas. Estas duraciones pueden incluir expresiones clásicas de variables stretch. Qiskit SDK (a partir de julio de 2025 con qiskit-qasm3-import v0.6.0) no admite el análisis de declaraciones de tipo duration ni de tipo stretch en archivos OpenQASM 3. El hardware tiene soporte limitado para duraciones que incluyen stretch.
  1. Los circuitos deben transpilarse al ISA del backend para ejecutarse en hardware de IBM. Esto impide que las definiciones personalizadas de gate y los constructos de alto nivel como los modificadores de puertas (como inv @) sean válidos para la ejecución directa en hardware, pero el proceso de transpile los resuelve en circuitos ISA válidos. Qiskit SDK (a partir de julio de 2025, con qiskit-qasm3-import v0.6.0) evaluará de forma anticipada los modificadores de puertas durante el análisis, por lo que no se verán reflejados en el QuantumCircuit resultante, potencialmente con un costo en tiempo de ejecución.
  1. Qiskit SDK puede representar flujo de control estructurado y exportarlo a OpenQASM 3. Las instrucciones continue y break pueden ser representadas técnicamente por Qiskit, pero no tienen buen soporte ni siquiera dentro de Qiskit SDK. Los bucles for en Qiskit v2.1.0 no tienen buen soporte. El flujo de control anidado (como un if dentro de otro if, o una instrucción else if) no se puede ejecutar en hardware.
  1. Qiskit SDK admite declarar cualquier tipo clásico admitido como variable input en el circuito. Actualmente, estas variables no se pueden ejecutar en hardware, y no pueden ser cargadas por el importador OpenQASM 3 de Qiskit. Los objetos Parameter no vinculados presentes en el QuantumCircuit se exportan como variables input float[64]. Ciertas opciones de configuración en tiempo de ejecución pueden permitir la ejecución de dichos circuitos en algunos backends.

Próximos pasos​

Recomendaciones