Saltar al contenido principal

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 Qiskit Runtime: Un circuito que contiene la característica de Qiskit correspondiente puede ejecutarse correctamente en hardware a través de IBM® Qiskit Runtime.

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

nota

El método más común para enviar circuitos a IBM Qiskit Runtime 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 Qiskit Runtime. 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 Qiskit RuntimeNotas
comments1
QASM vstring1
include🟡1, 7
unicode names
qubitQubit and QuantumRegister🟡2
bitClbit and ClassicalRegister3
boolexpr.Var and classical expressions🟡4
int4
uintexpr.Var and classical expressions🟡4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters🟡4
complex4
const4
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 box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
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_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
for loopsQuantumCircuit.for_loop🟡8
while loopsQuantumCircuit.while_loop8
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, stdgates.inc está actualmente soportado como entrada en Qiskit, 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 soportados si el circuito fue transpilado para un backend con información de diseño.
  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 estos no quedarán evidentes 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 es elegible para la ejecución en hardware.
  1. Qiskit SDK admite declarar cualquier tipo clásico soportado como variable input en el circuito. Actualmente, estas variables no son elegibles para la ejecución 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