メインコンテンツへスキップ

OpenQASM 3 機能テーブル

以下は OpenQASM 3 の言語機能のリストです。

これらの機能の詳細については、OpenQASM 3.X Live Specification を参照してください。

キー:

  • ❌ サポートなし
  • 🟡 部分的サポート
  • ✅ サポート済み

「サポート済み」マークの意味は列によって異なります:

  • Qiskit SDK: この機能は qiskit.qasm3.loadsqiskit-qasm3-import 拡張機能を使用)でパースでき、QuantumCircuit で表現でき、 qiskit.qasm3.dumps で OpenQASM 3 にエクスポートできます。

  • IBM Qiskit Runtime: 対応する Qiskit 機能を含む Circuit を、IBM® Qiskit Runtime を通じてハードウェア上で正常に実行できます。

「部分的サポート」の意味は、通常、リンクされた注釈に依存します。

備考

IBM Qiskit Runtime に Circuit を送信する最も一般的な方法は、Qiskit SDK の Python インターフェースで Circuit を作成することです。 この方法で作成・送信された Circuit は、OpenQASM 3 ファイルから Qiskit SDK に読み込む必要はありません。

OpenQASM 3 を直接使用しない場合は、Qiskit SDK での表現、OpenQASM 3 へのエクスポート、IBM Qiskit Runtime への送信がサポートされている機能を安全に使用できます。 これには、Qiskit SDK が OpenQASM 3 から読み込めない機能も含まれます。

OpenQASM 3 機能Qiskit SDK 機能Qiskit SDKIBM Qiskit Runtime注釈
comments1
QASM vstring1
include🟡1, 7
unicode names
qubitQubitQuantumRegister🟡2
bitClbitClassicalRegister3
boolexpr.Var と古典式🟡4
int4
uintexpr.Var と古典式🟡4
floatexpr.Var と古典式🟡🟡4
angle暗黙的、Gate パラメータとして🟡4
complex4
const4
pi/π/tau/τ/euler/Gate パラメータに定数畳み込み
Aliasing: let量子レジスタと古典レジスタ🟡5
register concatenation量子レジスタと古典レジスタ🟡5
castingexpr.Cast 古典式🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtdelaybox の持続時間6
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

注釈

  1. これらの OpenQASM 3 プログラム機能は実行に影響を与えず、Qiskit はファイルのパース時にこれらを 除去します。これらを使用するファイルは送信できますが、効果はありません。include ファイルについては、 stdgates.inc が現在 Qiskit への入力としてサポートされており、Backend での実行では常に Circuit が Backend の命令セットアーキテクチャ(ISA)にコンパイルされている必要があり、 include ファイルは関係ありません。
  1. Qiskit SDK は、任意の qubit 宣言を含む OpenQASM 3 ファイルのパースとダンプをサポートしています。 ハードウェアでの実行には、ハードウェア Qubit(例: $0)で定義された Circuit のみが有効です。 Qiskit SDK は、Circuit がレイアウト情報を持つ Backend 向けにトランスパイルされた場合、 サポートされているハードウェア Qubit 識別子で OpenQASM 3 を自動的に出力します。
  1. Qiskit SDK での bit 型および bit[n] 型の変数宣言は、Clbit および ClassicalRegister の宣言に対応します。
  1. 2025年7月時点で、Qiskit SDK は制限された型のセットのローカル変数を表現でき、 これらのオブジェクトに対する多くのランタイム操作を表現でき、OpenQASM 3 への出力をサポートしています。 ただし、Qiskit SDK(qiskit-qasm3-import v0.6.0 を通じて)は変数宣言を含む OpenQASM 3 ファイルのパースをサポートしておらず、変数式のパースに対するサポートは非常に限られています。 一般的に、Qiskit が式システムで表現できるものの大部分は、式がまだ Qiskit SDK でパースできない場合でも、 適切な動的 Circuit ハードウェアで実行できます。最新の情報については、 Qiskit の qiskit.circuit.classical モジュールのドキュメントを参照してください。
  1. Qiskit SDK は量子レジスタと古典レジスタの両方でレジスタのエイリアシングを表現できますが、 古典レジスタのエイリアシングの使用は強く推奨されません。古典レジスタに対するほとんどの式は エイリアスでは機能せず、エイリアスされた古典レジスタはハードウェアでの実行にサポートされていません。 Qiskit の OpenQASM 3 パーサーは、レジスタの連結結果をバインドする let エイリアス文を解決できます。
  1. Qiskit SDK は QuantumCircuit.delay による明示的な遅延をサポートしており、Circuit boxes (QuantumCircuit.box)にも明示的な持続時間を設定できます。これらの持続時間には stretch 変数の 古典式を含めることができます。Qiskit SDK(2025年7月時点、qiskit-qasm3-import v0.6.0 を通じて)は、OpenQASM 3 ファイルからの duration 型または stretch 型の宣言のパースを サポートしていません。ハードウェアは stretch を含む持続時間に対して限定的なサポートがあります。
  1. IBM ハードウェアで実行するには、Circuit を Backend の ISA にトランスパイルする必要があります。これにより、 カスタム gate 定義や Gate 修飾子(inv @ など)のような高レベルの構造は ハードウェア上でそのまま実行することはできませんが、transpile プロセスがこれらを 有効な ISA Circuit に解決します。Qiskit SDK(2025年7月時点、qiskit-qasm3-import v0.6.0 を通じて)はパース時に Gate 修飾子を即座に評価するため、結果の QuantumCircuit には 表示されず、実行時のコストが発生する可能性があります。
  1. Qiskit SDK は構造化された制御フローを表現し、OpenQASM 3 にエクスポートできます。continue 文と break 文は技術的に Qiskit で表現できますが、Qiskit SDK 内でも十分にサポートされていません。 Qiskit v2.1.0 の for ループは 十分にサポートされていません。ネストされた制御フロー (別の if 内の ifelse if 文など)はハードウェアでの実行の対象外です。
  1. Qiskit SDK は、サポートされている任意の古典型を Circuit の input 変数として宣言することをサポートしています。 このような変数は現在ハードウェアでの実行の対象外であり、Qiskit の OpenQASM 3 インポーターで読み込むことも できません。QuantumCircuit に存在する未バインドの Parameter オブジェクトは input float[64] 変数としてエクスポートされます。特定のランタイム設定オプションにより、一部の Backend でこのような Circuit を実行できる場合があります。

次のステップ

推奨事項