Tableau des fonctionnalités OpenQASM 3
Voici la liste des fonctionnalités du langage OpenQASM 3.
Pour plus de détails sur ces capacités, consulte la spécification live OpenQASM 3.X.
Légende :
- ❌ Non pris en charge
- 🟡 Prise en charge partielle
- ✅ Pris en charge
La signification de la marque « pris en charge » complète dépend de la colonne :
-
Qiskit SDK : la fonctionnalité peut être analysée par
qiskit.qasm3.loads(en utilisant l'extensionqiskit-qasm3-import), représentée dans unQuantumCircuit, et exportée vers OpenQASM 3 parqiskit.qasm3.dumps. -
IBM Qiskit Runtime : un circuit contenant la fonctionnalité Qiskit correspondante peut être exécuté avec succès sur du matériel via IBM® Qiskit Runtime.
La signification de « prise en charge partielle » dépend généralement des notes liées.
La méthode la plus courante pour soumettre des circuits à IBM Qiskit Runtime consiste à créer le circuit via l'interface Python de Qiskit SDK. Les circuits construits et soumis de cette façon n'ont pas besoin d'être chargés depuis des fichiers OpenQASM 3 dans Qiskit SDK.
Si tu n'utilises pas OpenQASM 3 directement, tu peux utiliser en toute sécurité les fonctionnalités prises en charge pour la représentation dans Qiskit SDK, l'export vers OpenQASM 3, et la soumission à IBM Qiskit Runtime. Cela inclut les fonctionnalités qui ne peuvent pas être chargées par Qiskit SDK depuis OpenQASM 3.
| Fonctionnalité OpenQASM 3 | Fonctionnalité Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Notes |
|---|---|---|---|---|
| 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 | ❌ | ❌ |
Notes
- Ces fonctionnalités de programme OpenQASM 3 n'ont aucun impact sur l'exécution et Qiskit les supprime
lors de l'analyse des fichiers. Les fichiers qui les utilisent peuvent être soumis, mais ils n'auront
aucun effet. Pour les fichiers
include,stdgates.incest actuellement pris en charge en entrée par Qiskit, et l'exécution sur le backend requiert toujours que les circuits aient été compilés vers l'Architecture du Jeu d'Instructions (ISA) du backend, où les fichiersincludesont sans objet.
- Qiskit SDK prend en charge l'analyse et l'export de fichiers OpenQASM 3 avec toute déclaration
qubit. Pour l'exécution sur le matériel, seuls les circuits définis en termes de qubits matériels (par exemple,$0) sont valides. Qiskit SDK génère automatiquement l'OpenQASM 3 en termes d'identifiants de qubits matériels pris en charge si le circuit a été transpilé pour un backend avec des informations de disposition.
- Les déclarations de variables de type
bitetbit[n]dans Qiskit SDK correspondent aux déclarationsClbitetClassicalRegister.
- Depuis juillet 2025, Qiskit SDK peut représenter des variables locales d'un ensemble restreint de types,
représenter de nombreuses opérations à l'exécution sur ces objets, et prend en charge leur export vers OpenQASM 3.
Cependant, Qiskit SDK (via
qiskit-qasm3-importv0.6.0) ne prend pas en charge l'analyse des fichiers OpenQASM 3 contenant des déclarations de variables, et dispose d'un support très limité pour l'analyse des expressions de variables. En général, la plupart de ce que Qiskit peut représenter dans son système d'expressions peut être exécuté sur du matériel de circuits dynamiques approprié, même si l'expression ne peut pas encore être analysée par Qiskit SDK. Consulte la documentation Qiskit du moduleqiskit.circuit.classicalpour les informations les plus à jour.
- Qiskit SDK peut représenter l'aliasing de registres pour les registres quantiques et classiques, mais il est
fortement déconseillé d'utiliser l'aliasing des registres classiques. La plupart des expressions sur les registres classiques
ne fonctionnent pas avec les alias, et les registres classiques aliasés ne sont pas pris en charge pour
l'exécution sur le matériel. L'analyseur OpenQASM 3 de Qiskit peut résoudre les instructions d'alias
letqui lient le résultat de la concaténation de registres.
- Qiskit SDK prend en charge les délais explicites via
QuantumCircuit.delay, et les boîtes de circuit (QuantumCircuit.box) peuvent également avoir des durées explicites. Ces durées peuvent inclure des expressions classiques de variablesstretch. Qiskit SDK (depuis juillet 2025, viaqiskit-qasm3-importv0.6.0) ne prend pas en charge l'analyse des déclarations de typedurationou de typestretchdepuis des fichiers OpenQASM 3. Le matériel dispose d'un support limité pour les durées incluantstretch.
- Les circuits doivent être transpilés vers l'ISA du backend pour s'exécuter sur le matériel IBM. Cela empêche
les définitions de
gatepersonnalisées et les constructions de niveau supérieur comme les modificateurs de portes (tels queinv @) d'être valides pour une exécution directe sur le matériel, mais le processustranspileles résout en circuits ISA valides. Qiskit SDK (depuis juillet 2025, viaqiskit-qasm3-importv0.6.0) évaluera immédiatement les modificateurs de portes lors de l'analyse, de sorte qu'ils ne seront pas visibles dans leQuantumCircuitrésultant, potentiellement au détriment des performances à l'exécution.
- Qiskit SDK peut représenter un flux de contrôle structuré et l'exporter vers OpenQASM 3. Les instructions
continueetbreakpeuvent techniquement être représentées par Qiskit, mais ne sont pas bien prises en charge même au sein de Qiskit SDK. Les bouclesfordans Qiskit v2.1.0 ne sont pas bien prises en charge. Le flux de contrôle imbriqué (comme unifà l'intérieur d'un autreif, ou une instructionelse if) n'est pas éligible à l'exécution sur le matériel.
- Qiskit SDK prend en charge la déclaration de tout type classique supporté comme variable
inputsur le circuit. Ces variables ne sont actuellement pas éligibles à l'exécution sur le matériel, et ne peuvent pas être chargées par l'importateur OpenQASM 3 de Qiskit. Les objetsParameternon liés présents dans leQuantumCircuitsont exportés comme variablesinput float[64]. Certaines options de configuration à l'exécution peuvent permettre d'exécuter de tels circuits sur certains backends.
Étapes suivantes
- Apprends à générer du code OpenQASM avec IBM Quantum Composer.
- Consulte la référence de l'API OpenQASM 3 Qiskit.
- Consulte la référence de l'API OpenQASM 2 Qiskit.
- Lis le sujet Vérifier ton programme.
- Visite la spécification live OpenQASM.