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ónqiskit-qasm3-import), representada en unQuantumCircuit, y exportada a OpenQASM 3 medianteqiskit.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.
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 3 | Característica de Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Notas |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit and QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit and ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var and classical expressions | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var and classical expressions | 🟡 | ✅ | 4 |
float | expr.Var and classical expressions | 🟡 | 🟡 | 4 |
angle | Implicit, as gate parameters | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constant-folded into gate parameters | ✅ | ✅ | |
| Aliasing: let | Quantum and classical registers | 🟡 | ❌ | 5 |
| register concatenation | Quantum and classical registers | 🟡 | ❌ | 5 |
| casting | expr.Cast classical expressions | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durations of delay and box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Built-in U | UGate/QuantumCircuit.u | ✅ | ✅ | |
gate | 🟡 | 🟡 | 7 | |
gphase | QuantumCircuit.global_phase | 🟡 | ❌ | 7 |
ctrl @/ negctrl @ | AnnotatedOperation | 🟡 | ❌ | 7 |
inv @ | AnnotatedOperation | 🟡 | ❌ | 7 |
pow(k) @ | AnnotatedOperation | 🟡 | ❌ | 7 |
reset | Reset/QuantumCircuit.reset | ✅ | ✅ | |
measure | Measure/QuantumCircuit.measure | ✅ | ✅ | |
| bit operations | 🟡 | ✅ | 4 | |
| boolean operations | 🟡 | ✅ | 4 | |
| arithmetic expressions | 🟡 | 🟡 | 4 | |
| comparisons | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for loops | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while loops | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def subroutines (classical) | ❌ | ❌ | ||
def subroutines (quantum) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Notas
- 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.incestá 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 archivosincludeson irrelevantes.
- 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.
- Las declaraciones de variables de tipo
bitybit[n]en Qiskit SDK corresponden a declaraciones deClbityClassicalRegister.
- 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-importv0.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óduloqiskit.circuit.classicalpara obtener la información más actualizada.
- 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
letque vinculan el resultado de la concatenación de registros.
- 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 variablesstretch. Qiskit SDK (a partir de julio de 2025 conqiskit-qasm3-importv0.6.0) no admite el análisis de declaraciones de tipodurationni de tipostretchen archivos OpenQASM 3. El hardware tiene soporte limitado para duraciones que incluyenstretch.
- Los circuitos deben transpilarse al ISA del backend para ejecutarse en hardware de IBM. Esto impide que las
definiciones personalizadas de
gatey los constructos de alto nivel como los modificadores de puertas (comoinv @) sean válidos para la ejecución directa en hardware, pero el proceso detranspilelos resuelve en circuitos ISA válidos. Qiskit SDK (a partir de julio de 2025, conqiskit-qasm3-importv0.6.0) evaluará de forma anticipada los modificadores de puertas durante el análisis, por lo que estos no quedarán evidentes en elQuantumCircuitresultante, potencialmente con un costo en tiempo de ejecución.
- Qiskit SDK puede representar flujo de control estructurado y exportarlo a OpenQASM 3. Las instrucciones
continueybreakpueden ser representadas técnicamente por Qiskit, pero no tienen buen soporte ni siquiera dentro de Qiskit SDK. Los buclesforen Qiskit v2.1.0 no tienen buen soporte. El flujo de control anidado (como unifdentro de otroif, o una instrucciónelse if) no es elegible para la ejecución en hardware.
- Qiskit SDK admite declarar cualquier tipo clásico soportado como variable
inputen 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 objetosParameterno vinculados presentes en elQuantumCircuitse exportan como variablesinput 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
- Aprende a generar código OpenQASM usando IBM Quantum Composer.
- Consulta la referencia de la API de OpenQASM 3 para Qiskit.
- Consulta la referencia de la API de OpenQASM 2 para Qiskit.
- Review the Verify your program topic.
- Revisa el tema Verifica tu programa.
- Visita la Especificación en vivo de OpenQASM.