Aller au contenu principal

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'extension qiskit-qasm3-import), représentée dans un QuantumCircuit, et exportée vers OpenQASM 3 par qiskit.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.

remarque

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 3Fonctionnalité Qiskit SDKQiskit SDKIBM Qiskit RuntimeNotes
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

Notes

  1. 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.inc est 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 fichiers include sont sans objet.
  1. 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.
  1. Les déclarations de variables de type bit et bit[n] dans Qiskit SDK correspondent aux déclarations Clbit et ClassicalRegister.
  1. 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-import v0.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 module qiskit.circuit.classical pour les informations les plus à jour.
  1. 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 let qui lient le résultat de la concaténation de registres.
  1. 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 variables stretch. Qiskit SDK (depuis juillet 2025, via qiskit-qasm3-import v0.6.0) ne prend pas en charge l'analyse des déclarations de type duration ou de type stretch depuis des fichiers OpenQASM 3. Le matériel dispose d'un support limité pour les durées incluant stretch.
  1. 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 gate personnalisées et les constructions de niveau supérieur comme les modificateurs de portes (tels que inv @) d'être valides pour une exécution directe sur le matériel, mais le processus transpile les résout en circuits ISA valides. Qiskit SDK (depuis juillet 2025, via qiskit-qasm3-import v0.6.0) évaluera immédiatement les modificateurs de portes lors de l'analyse, de sorte qu'ils ne seront pas visibles dans le QuantumCircuit résultant, potentiellement au détriment des performances à l'exécution.
  1. Qiskit SDK peut représenter un flux de contrôle structuré et l'exporter vers OpenQASM 3. Les instructions continue et break peuvent techniquement être représentées par Qiskit, mais ne sont pas bien prises en charge même au sein de Qiskit SDK. Les boucles for dans Qiskit v2.1.0 ne sont pas bien prises en charge. Le flux de contrôle imbriqué (comme un if à l'intérieur d'un autre if, ou une instruction else if) n'est pas éligible à l'exécution sur le matériel.
  1. Qiskit SDK prend en charge la déclaration de tout type classique supporté comme variable input sur 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 objets Parameter non liés présents dans le QuantumCircuit sont exportés comme variables input float[64]. Certaines options de configuration à l'exécution peuvent permettre d'exécuter de tels circuits sur certains backends.

Étapes suivantes

Recommandations