OpenQASM 3機能テーブル
以下は、 OpenQASM 3 の言語機能のリストである。
これらの機能の詳細については、 OpenQASM 3.X ライブ仕様を参照してください。
キー:
- ❌ サポートされていない
- 🟡 部分的サポート
- 2705 ✅ 対応
完全な "supported "マークの意味はカラムによって異なる:
-
Qiskit SDK : この機能は (拡張
qiskit-qasm3-import機能を使用して) で解析できqiskit.qasm3.loads、 で表現されQuantumCircuit、 OpenQASM 3 へ でエクスポートqiskit.qasm3.dumpsされます。 -
IBM Quantum Compute Service :対応するQiskit機能を備えた回路は、 IBM Quantum のCompute Serviceを通じてハードウェア上で正常に実行できます。
部分的サポート」の意味は、通常、リンク先の注記によって異なる。
Note
IBM Quantum Compute Service に回路を提出する最も一般的な方法は、 Qiskit SDK への Python -space インターフェースで回路を作成することです。 この方法で作成・提出された回路は、 OpenQASM 3のファイルから Qiskit SDK に読み込む必要はありません。
OpenQASM 3を直接使用しない場合でも、 Qiskit SDK での表示に対応している機能は安心して利用でき、 OpenQASM 3へのエクスポートや、 IBM Quantum Compute Serviceへの送信を行うことができます。 これには、 Qiskit SDK では OpenQASM 3 から読み込むことができない機能が含まれます。
OpenQASM 3 特徴 | Qiskit SDKの機能 | Qiskit SDK | IBM Quantum コンピューティングサービス | ノート |
|---|---|---|---|---|
| コメント | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| ユニコード名 | ✅ | ✅ | ||
qubit | Qubit および QuantumRegister | ✅ | 🟡 | ※2 |
bit | Clbit および ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var と古典的表現 | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var と古典的表現 | 🟡 | ✅ | 4 |
float | expr.Var と古典的表現 | 🟡 | 🟡 | 4 |
angle | ゲート・パラメーターとして暗黙の | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | ゲート・パラメーターへの定数折りたたみ | ✅ | ✅ | |
| エイリアシング | 量子レジスターと古典レジスター | 🟡 | ❌ | 5 |
| レジスタ連結 | 量子レジスターと古典レジスター | 🟡 | ❌ | 5 |
| キャスト | expr.Cast 古典的表現 | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | delay と box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
組み込み 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 | ✅ | ✅ | |
| ビット操作 | 🟡 | ✅ | 4 | |
| ブール演算 | 🟡 | ✅ | 4 | |
| 算術式 | 🟡 | 🟡 | 4 | |
| 比較 | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for ループ | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while ループ | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def サブルーチン | ❌ | ❌ | ||
def サブルーチン(量子) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
ノート
- これらの OpenQASM 3 プログラムの機能は実行に影響を与えないため、Qiskitはファイル解析の一環としてそれらを除去します。 を除去します。 これらを使用したファイルを提出することは可能だが、その効果はない。 効果はありません。
include、stdgates.incは現在Qiskitへの入力としてサポートされています、 バックエンドの実行には常に、バックエンドの命令セットアーキテクチャ(ISA)にコンパイルされた回路が必要です。includeファイルは関係ありません。
- Qiskit SDKは、
qubit宣言を含む OpenQASM 3 ファイルの解析とダンプをサポートしています。 ハードウェア上での ハードウェア上で実行する場合は、ハードウェア量子ビット(例えば、$0)で定義された回路のみが有効である。 Qiskit SDKは、回路がレイアウト情報を持つバックエンド用にトランパイルされた場合、サポートされるハードウェア量子ビット識別子で OpenQASM 3 を自動的に出力します。 識別子を自動的に出力します。
bit- およびbit[n]-typed variable declarations in Qiskit SDKはClbitおよび -typed variable declarationsに対応しています。ClassicalRegister宣言に対応します。
- 2025年7月現在、Qiskit SDKは制限された型のローカル変数を表現することができ、これらのオブジェ クトに対する多くの実行時操作を表現することができる。 これらのオブジェクトに対する多くの実行時操作を表現でき、 OpenQASM 3 への出力をサポートしています。
しかし、Qiskit SDK(
qiskit-qasm3-importv0.6.0 を通 じて)は、変数宣言を含む OpenQASM 3 ファイルの解析はサポートしていません。 式の解析には非常に限定的なサポートしかありません。 一般的に、Qiskitが表現システムで表現できることのほとんどは、適切な動的回路ハードウェア上で実行できます。 Qiskitが表現システムで表現できることのほとんどは、適切な動的回路ハードウェアで実行できます。 Qiskit SDK。 最新情報は の Qiskit ドキュメントを参照してください。qiskit.circuit.classicalモジュール 。
- Qiskit SDKは量子レジスタと古典レジスタの両方でレジスタエイリアスを表現できますが、古典レジスタのエイリアスを使用することは強く推奨されません。 古典レジスタのエイリアシングを使用することは強く推奨されません。 古典的レジスタのほとんどの式はエイリアスでは動作せず、エイリアスされた古典的レジスタはサポートされていない。 また、エイリアスを使用した古典レジスタは、ハードウェアの実行ではサポートされていません。 ハードウェア上での実行はサポートされていない。 Qiskit OpenQASM 3 パーサーは、
letのエイリアス文を解決することができます。 を解決できます。
- Qiskit SDKは
QuantumCircuit.delayを介した明示的な遅延をサポートしています。 (QuantumCircuit.box) も明示的な持続時間を持つことができます。 これらの持続時間には、古典的なstretch。 Qiskit SDK (2025年7月現在qiskit-qasm3-importv0.6.0 )は、durationまたはstretch型の宣言の解析をサポートしていません。 OpenQASM 3 ファイルからの ハードウェアは、stretchを含む期間のサポートに制限がある。
- 回路は、 IBM ハードウェア上で実行するために、バックエンド ISA にトランスパイルされなければならない。 このため このため、
gateのカスタム定義や、ゲート修飾子(inv @など)のような高レベルのコンストラクトは、ハードウェア上でそのまま実行することはできません。 をそのままハードウェア上で実行することはできませんが、transpileプロセスはそれらを有効な ISA 回路に変換します。 を有効なISA回路に変換します。 Qiskit SDK (2025年7月現在qiskit-qasm3-importv0.6.0 )は、解析中にゲート修飾子を熱心に評価する。QuantumCircuitの結果では明らかにならない。
- Qiskit SDKは、構造化された制御フローを表現し、これを OpenQASM 3にエクスポートできます。 と
continueやbreakステートメントは技術的にはQiskitで表現できますが Qiskit SDK内でも十分にサポートされていません。forQiskitのループ v2.1.0 のループはあまりサポートされていません。 ネストされた制御 ネストされた制御フロー(別のif内のifやelse ifステートメントなど)は、ハードウェアの実行対象にはなりません。 ハードウェア上で実行することはできません。
- Qiskit SDKは、サポートされている古典的な型を回路上の
input変数として宣言することをサポートしています。 このような変数は現在ハードウェア上で実行する資格がなく、 Qiskit 3 インポーターでロードすることはできません。 Qiskit OpenQASM 3 インポーターではロードできません。QuantumCircuitに存在する未束縛のParameterオブジェクトは、input float[64]変数としてエクスポートされる。 ある種のランタイム・コンフィギュレーション・オプションは、バックエンドによってはこのような回路の実行を可能にする。
次のステップ
推奨事項
- IBM Quantum Composer を使って OpenQASM コードを生成する方法を学ぶ。
- OpenQASM 3 Qiskit API リファレンスを参照。
- OpenQASM 2 Qiskit API リファレンスを参照。
- 「プログラムの確認 」のトピックを確認してください。
- OpenQASM ライブ仕様をご覧ください。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。