Qiskit SDK 2.5 リリースノート
2.5.2
序曲
Qiskit v2.5.2 は、 v2.5.1 のリリース以降に確認された問題に対するバグ修正を含むパッチリリースです。
バグ修正
-
Suzuki-Trotter合成法における軽微なメモリリークを修正しました。このリークにより、プログラムの実行期間中、すべての疎なパウリ文字列の割り当てが保持され続けていました。 #16677 を修正しました。
-
シンボリックエンジンにおいて、2つの式の加算または減算が誤って0に最適化されてしまうバグを修正しました。 これは、両方の式に同じ記号が含まれており、数値部分が 0 と評価された場合に発生しました。例えば、
(1 + x) + (-1 + x). -
例えば、制御フローの本体が、外側の回路に対して順列が入れ替わった量子ビットに対して作用する場合など、テキストおよび Matplotlib の回路描画ツールにおけるレイヤーの衝突が修正されました
circuit.append(BoxOp(body), [0, 2, 1])。 ボディ内部の指示は、外側の描画順序に従って配置されるようになったため、描画レイアウト上で重なり合うゲートは、互いに重なり合うことなく、別々のレイヤーに配置されるようになりました。 #16510 を修正しました。 -
. 内の最初の を削除した後(
Qubitまたは DAG に オブジェクトQubitが存在しないClbit場合)、このDAGCircuit.depth()メソッドを呼び出すとパニックが発生する可能性があった問題を修正しましたDAGCircuit。 -
Clifford+T 基底にトランスパイルされた回路のうち
OptimizeCliffordT、およびSXGateを除外しているものについてSXdgGate、このパスが入力回路とユニタリ同値でない回路を返すことがあるというバグを修正しました。 -
の簡略化において、式が誤ったものになってしまう原因とな
ParameterExpressionっていたいくつかのバグを修正しました。#16259 を修正しました。 #16260 を修正しました。 #16262 を修正しました。 #16263 を修正しました。
-
および
DAGCircuit.remove_qubits()における辺の削除順序の非決定性を修正しましたremove_clbits()。 このため、後から追加されたエッジには非決定論的な識別子が付与されることになり、一部の探索アルゴリズムに影響を及ぼした。 #16655 を修正しました。 -
引
synthesis_error数が特定の値に設定された場合、SynthesizeRZRotationsトランスパイラ・パスがパニックを起こす可能性があった問題を修正しました。 #16540 を修正しました。 -
大規模なオブジェクト
ParameterExpressionの評価中に発生する可能性があったセグメンテーションフォルトを修正しました。 #16676 を修正しました。 -
このメソッド
DAGCircuit.substitute_node_with_dag()は、置換用DAGから対象DAGへ、DAGレベルの変数宣言(入力変数、キャプチャ変数、宣言変数、およびストレッチ)を正しく転送するようになりました。 以前は、置換の際にこれらは省略されていました。 #15509 を修正しました。 -
対称結合写像
Targetにおけるoptimization_level=2非決定論的な出VF2Layout力を修正した。 以前は、浮動小数点数の加算が非決定論的であったため、実行ごとにタイブレークの処理が異なる場合がありました。 #16490 を修正しました。 -
整数と明示的な引数
num_qubitsで指定されたStatePreparationオブジェクトにおいてStatePreparation.inverse()、量子ビットの数が保持されないというバグを修正しました。 #16430 を修正しました。
2.5.1
序曲
Qiskit v2.5.1 は、 Qiskit SDK の新たなバグ修正リリースです。
バグ修正
-
レイヤーを返すメソッド および
DAGCircuit.layers()が、親DAG を各返されるレイヤーDAGglobal_phaseにコピーDAGCircuit.serial_layers()してしまう問題を修正しました。 #16271 を修正しました。 -
単一量子ビットの 回転の連続実行が負の角度に統合され、かつ がターゲットゲートとして利用可能な場合に
CommutativeCancellation発生していたコンパイルエラーを修正しました。 #16594を参照してください。 -
や
QuantumCircuitで、カスタム定義された単一量子ビットゲートを使用して実行した場合に、Optimize1qGatesDecompositionトランスパイラーパスで発生する可能性のあるデッドロックを修正しましたTarget。 #16591 を修正しました。 -
互換性のない引数を設定した
SabreLayout際に表示されるエラーメッセージに、制限事項が正しく記載されるようになりました。 #16632を参照してください。 -
や、といった、あらゆる代入において真となるブール式に対する
PhaseOracleBitFlipOracleGate、PhaseOracleGate、の固定合成x | ~x。 #16524 を修正しました。
2.5.0
序曲
Qiskit v2.5.0 は、 Qiskit SDK の新機能リリースです。 今回のリリースの主な見どころは以下の通りです:
- C APIの拡張とアクセス性の向上。 C API には多くの新しい関数や型が含まれています(後述の「C API の機能」のセクションを参照)。中でも特に注目すべきは、制御フローや古典的な式を検査するためのものです。
qiskit.capiまた、デバッグを容易にするため、C API へのバインディングも追加ctypesされました。- 初期段階のマルチIRステージング対応のパスマネージャーのサポート。 新しい
MultiStagePassManager機能により、複数のIRを経由して段階的に低減させるコンパイルが可能になりました。 今後のリリースでは、QiskitのマルチIR機能がさらに拡充される予定です。- Clifford+T および PBC 用のプリセット・パスマネージャー。 2つの新機能、
generate_preset_clifford_t_pass_manager()およびgenerate_preset_pbc_pass_manager()は、それぞれClifford+Tおよびパウリベース計算(PBC)の基底を対象とした、あらかじめ設定済みのパイプラインを提供します。 これは、Qiskitにおけるより強力なフォールトトレラントなコンパイルに向けた最初のステップです。- 新しいデフォルトの2量子ビットトランスパイラーの最適化。 Qiskitのデフォルトの2量子ビット再合成最適化(プリセットパイプラインのレベル2および3で有効化)では、新たに
TwoQubitPeepholeOptimizationパスが採用されるようになりました。UnitarySynthesis以前の と のConsolidateBlocks組み合わせと比較すると、これはパフォーマンスが高く、忠実度の最も高い分解を選択する能力に優れています。- トランスパイラのパフォーマンス向上。 2-3x の処理速度向上は、回路全体を通じて
benchpress一般的に見られる現象です。rustworkxSabreLayoutこれは、いくつかのトランスパイラー処理でマルチスレッド対応が追加されたことに加え、前述の新しい2量子ビット合成、アルゴリズムの改善、最適化、そしてより効率的なハッシュ処理、メモリ割り当て、線形代数ルーチンなど、多くの改良が施されたことに起因しています。
C API の機能
-
qiskit.circuit.classicalC API において、. と同様の古典的な式の検査機能を追加しました。 C APIには、これらのオブジェクト用の生成APIはまだ含まれていません。 「 Classical Expressions 」のすべての関数およびデータ型は、このリリースで新たに追加されたものです。 -
ControlFlowOpC API において、 Python -space のサブクラスに対応する制御フロー命令の検査機能を追加しました。 C APIには、これらのオブジェクト用の生成APIはまだ含まれていません。 「 Control Flow 」のすべての関数およびデータ型は、このリリースで新たに追加されたものです。 -
回路の量子レジスタおよび古典レジスタに関する情報を取得する関数、ならびにレジスタ自体のさまざまな特性に関する情報を取得する関数を追加しました。 以下の機能が追加されました:
qk_circuit_num_quantum_registers()qk_circuit_get_quantum_register()qk_circuit_num_classical_registers()qk_circuit_get_classical_register()qk_quantum_register_name()qk_quantum_register_num_bits()qk_quantum_register_circuit_bits()qk_classical_register_name()qk_classical_register_num_bits()qk_classical_register_circuit_bits()
-
qiskit.capi現在、C API 全体のバインディングが含まctypesれています。 これらは、C API オブジェクトと同じ名前を持つモジュール属性として利用可能です。qk_circuit_new()たとえば、qiskit.capi.qk_circuit_newは に相当する。 -
QkTargetqk_circuit_estimate_fidelity()を追加しました。これは、特定の上で回路を実行した際の忠実度を推定するために使用されます。 -
この
qk_transpiler_pass_standalone_litinski_transformation()パスを拡張し、単一量子ビットQkGate_RXのゲートやQkGate_RY回転ゲート、およびQkPauliProductRotationおよびQkPauliProductMeasurement命令に対応するようにしました。 -
単一量子ビットの回転ゲート、および
QkPauliProductRotationの整数倍の角度を持つオブジェクトは、デフォルトの近似の範囲内において、このqk_transpiler_pass_standalone_litinski_transformation()パスによってクリフォードゲートとして認識されるようになった。 -
QkDagqk_dag_global_phase()とを追加qk_circuit_global_phase()しました。これらは、それぞれと のQkCircuitグローバル位相を取得します。 -
QkDagqk_dag_set_global_phase()および を追加qk_circuit_set_global_phase()しました。これらは、それぞれ と のQkCircuitグローバルフェーズを設定するものです。 -
C API に、
qk_transpiler_pass_standalone_2q_peephole_optimization()C から 2 量子ビットのユニタリー・ピーホール最適化パスを実行するための 2 つの新関数、およびqk_transpiler_pass_2q_peephole_optimization()を追加しました。 これは、 Python 用のTwoQubitPeepholeOptimizationパスと同じものです。
「Circuits」の特集
-
Instruction不透明な を構築できない代わりに、逆変換を表す をLinearFunction返すように特別LinearFunction.inverse()に設計されています。 -
loop_parameterexpr.VarQuantumCircuit.for_loop()現在、引数として 型のtypes.Uintを受け付けるようになりました。 コンテキストマネージャ形式で使用する場合、ループ変数は自動的にループ本体の変数inputとして宣言され、ループのスコープ内で利用可能になります。 例:from qiskit.circuit import QuantumCircuit, ClassicalRegister from qiskit.circuit.classical import expr, types qc = QuantumCircuit(1, 1) cr = ClassicalRegister(5, "reps") qc.add_register(cr) with qc.for_loop(range(5), expr.Var.new("a", types.Uint(32))) as v: qc.measure(0, 0) qc.store(expr.index(cr, v), qc.clbits[0]) -
TargetQuantumCircuit.estimate_fidelity()を追加しました。これは、特定の上で回路を実行した際の忠実度を推定するために使用されます。 -
ClassicalRegister65,535ビットを超えるオブジェクトも、表現システムqiskit.circuit.classicalで使用できるようになりました。 -
ParameterVector現在、オプションuuidのコンストラクタ引数を受け付けるようになり、そのuuid属性を通じて基底UUIDクラスを公開するようになりました。 これは、要素同士が等しいベクトルを再構築するために使用できます。
量子情報の特集
-
メソッド
PauliLindbladMap.parity_sample_with_history()を追加しました。これは、最終的なサンプリングされた項をもたらしたパウリ数および符号の基礎となる履歴を追跡し、それを返す点を除けば、 と同じPauliLindbladMap.parity_sample()動作をします。 -
QubitSparsePauliList.commutes()メソッドを追加しました。 このメソッドは、これQubitSparsePauliListと別のものとの間の交換関係を、ブール値の配列として返します。
トランスパイラの機能
-
generate_preset_clifford_t_pass_manager()Clifford+Tのコンパイル用に、プリセット・パスマネージャーを簡単に作成できる新しい関数を追加しました。この関数は、Clifford+T 基底を用いた や
generate_preset_pass_manager()よりもtranspile()優先して使用すべきです。なぜなら、この関数は Clifford+T コンパイル用に特別に調整された引数を公開しているからです。 特に、これは、RZ回転をクリフォード+T基底へと合成する過程を支配する議論rz_synthesis_configを裏付けるものである。 -
StandardEquivalenceLibrary標準ゲートC3SXGateおよびRC3XGateに対する同値関係が に追加されました。 -
DelayResetBarriergenerate_preset_pbc_pass_manager()新しい関数を追加しました。この関数を使用すると、およびPauliProductMeasurementオブジェクト、ならびに、、、、および制御フロー演算からPauliProductRotationGate構成される、PBC(パウリベース計算)中間表現へのコンパイル用のプリセット・パスマネージャーを構築することができます。 -
XGate追跡対象のX回転が の適切な倍数であり、かつ対応するゲートが または入力回路のTargetいずれかにある場合、このCommutativeCancellationパスは またはSXGateを出力するようになる。 -
および
generate_preset_pass_manager()のtranspile()引seed_transpiler数のデフォルト値は、ユーザー設定ファイルの フィールドtranspiler_seedで設定できるようになりました。 -
QISKIT_TRANSPILER_SEEDおよびgenerate_preset_pass_manager()のtranspile()引seed_transpiler数のデフォルト値は、環境変数 を通じて設定できるようになりました。この設定は、ユーザー設定ファイル内の同等のキーよりも優先されます。 -
分析
FixedPointパスに新しい引getter数を追加しました。 このオプションのコールバックを指定することで、個々のキーを直接読み込む代わりに、そこからPropertySet値を導き出すことができます。 -
このパス
ConvertToPauliRotationsは、オブジェクトを含むControlFlowOp回路に対応するようになりました。 -
トランパイラ・パスを
ConvertToPauliRotations拡張し、およびPauliProductMeasurementオブジェクトを含むPauliProductRotationGate回路を処理できるようにした。 これらの操作は、変換の際にも変更されることなくそのまま引き継がれます。 -
トランスパイラーは、および
CommutativeOptimizationをRemoveIdentityEquivalent拡張し、ゲートを処理PauliProductRotationGateできるようにしました。 -
このパス機能を
LitinskiTransformation拡張し、単一量子ビットの および 回転ゲート、ならびにPauliProductRotationGateおよびPauliProductMeasurement演算に対応しました。 -
単一量子ビットの回転ゲート、および
PauliProductRotationGate指定された近似の範囲内で の整数倍の角度を持つオブジェクトは、今回のLitinskiTransformation審査においてクリフォードゲートとして認められるようになった。 -
pass
LitinskiTransformationに引approximation_degree数を追加しました。この引数は、クリフォード回転に近い回転をクリフォードゲートとして解釈する際の許容される近似度を設定するものです。 -
CommutationCheckerと、および内の他の行列ベースのゲートとのPauliProductRotationGate間で、行列ベースのチェックが可能になりました。False以前は、これらのチェックは常に を返していました。 -
TwoQubitControlledUDecomposer現在では、24個ではなく8個の単一量子ビットゲートを用いて合成を行っている。 -
この
LitinskiTransformationバージョンは、およびU1Gate命令を含むPhaseGate回路もサポートするようになりました。RZGate以前は、唯一認められていたパラメータ化されたゲートは でした。 -
新しい. を使用して、マルチIRコンパイラワークフローを有効にしました
MultiStagePassManager。 このパスマネージャーは、段階的な実行フローを提供しており、各段階ではIRを保持するか、あるいは別のIRに変換することができます。 ステージは、IRをローワー化するために使用できるインターフェースTask(および基底クラスGenericPass)を通じて汎用的に定義することも、オブジェクトBasePassManagerを通じて定義することも可能です。後者の方法では、などが提供する既存のパイプラインとの互換性が確保されますgenerate_preset_pass_manager()。 -
関数
generate_preset_pass_manager()およびtranspile()は、引数 をapproximation_degreeおよびSubstitutePi4RotationsのCommutativeOptimizationトランスパイラーパスに渡すようになりました。approximation_degree=Noneこれら2つのパスは をサポートしていないため、 が指定された場合None、その値は になります1.0。 -
PauliPauliProductMeasurementPauliProductRotationGatePauliEvolutionGateこれによりCommutationChecker、行列を用いた検証に頼ることなく、標準ゲートと、、、、、などのパウリゲート間の可換性を効率的に検証できるようになった。 -
SabreSwapSabreのレイアウトおよび配線(SabreLayoutおよび)において、ヒューリスティックはlookahead、回路ゲートの数ではなく、回路層の数に基づいて定義されるようになった。 これにより、ヒューリスティックのバイアスが軽減される。狭い回路の場合、従来のヒューリスティックでは、非常に遠いゲートと、ほぼ配線可能なゲートを同等の重みで扱ってしまう可能性があったが、広い回路(40キュービット以上)の場合、フロンティアのすぐ後ろにある単一の層であっても、すべてのゲートを追跡することができなかった。 -
と
PauliProductMeasurementのオブジェクト間のPauliProductRotationGate交換を評価する際のパフォーマンスがCommutationChecker向上しました。 これは、それらの生成子を単項パウリ演算子として表現し、これらの表現を用いて可換性の検証を行うことによって実現される。 -
および
PauliProductMeasurementオブジェクトを含むPauliProductRotationGate回路におけるトランスパイラ・パCommutativeOptimizationスのパフォーマンスが向上しました。 -
トランスペイラー・パスでは
CommutativeOptimization、グローバル・フェーズまで考慮した範囲で、恒等関数と同等なゲートが削除されるようになった。 -
TwoQubitPeepholeOptimization新しいトランスパイラー・パス「」を追加しました。これは、プリセットのコンパイラ・パイプラインにおいて「」が 2 または 3 の場合optimization_levelUnitarySynthesis、従来の「」と「」のConsolidateBlocks組み合わせに取って代わるものです。新しい統一パスでは、回路の推定忠実度を向上させるために2量子ビットブロックを再合成できるタイミングをより的確に判断できるようになり、特に過完全基底や異種
Targetオブジェクトの場合において、より高品質なコンパイルが可能となる。 また、解析と合成の並列化もより適切に行われています。
可視化機能
-
plot_bloch_vector()入力の受け付けtupleを開始しました。 -
C-API回路描画ツール(
qk_circuit_draw())は、およびPauliProductRotationGateゲートに対応PauliProductMeasurementするようになりました。 -
C-APIの回路描画機能(
qk_circuit_draw())では、 の単純な分数に近い角度について、 Python 空間の可視化ツールと同様に、分数表示が採用されるようになりました。 -
C-API 回路描画機能 (
qk_circuit_draw()) では、測定値やCPhaseGate演算がより明確に描画されるようになりました。
トランスパイラーのアップグレードに関する注意事項
- この
transpile()関数は、Clifford+T 基底へのコンパイルを行う際、以前とは異なる、より効率的なコンパイラワークフローを使用するようになりました。 このワークフローでは、単一量子ビットのユニタリー演算をクリフォード+Tシーケンスに合成するために、汎用ユニタリー合成プラグインはもはや使用されません。 新たに、 ゲートへのコンパイルと、それらを直接合成する方式を採用しており、これにより品質と実行時のパフォーマンスが向上しています。transpile()その結果、および"unitary_synthesis_plugin_config"引"unitary_synthesis_method"数は、におけるClifford+T合成に影響を与えなくなりました。approximation_degreeその代わりに、精度は、をグローバルに設定するか、または の合成設定を渡すための引数を公開rz_synthesis_configするを使用generate_preset_clifford_t_pass_manager()することで設定できます。
その他のアップグレードに関する注意事項
-
NumPy の最低必要バージョンは、 SPEC 0の推奨事項に準じて、 2.0 となりました。
-
Qiskit には現在、正式な依存関係のバージョンに関するポリシーが設けられており、 その内容はリポジトリの「貢献方法」 ドキュメントで管理されています。 これは:
- NumPy また、 SciPy は、 Python コミュニティのSPEC 0(2年間のサポート)に準拠しています
- その他のすべての Python およびRustの依存関係については、プラットフォームのサポート以外の制約はありません
- 「Optional」、「build-only」、「developer-only」の Python 依存関係には制約がなく、 Python のすべてのランタイムバージョンやホストプラットフォームに対応する必要はありません。
回路の非推奨化
-
は
CommutationChecker、もはや整流関係の内部キャッシュを保持していません。 したがって、以下の項目は現在非推奨となっており、Qiskit v3.0: で削除される予定ですcache_max_entriesコンストラクタの引数。現時点でこれを設定しても何の効果もありません。clear_cached_commutations()メソッド。これを呼び出しても何の効果もありません。- この
num_cached_entries()メソッド。これを呼び出すと、常に 0 が返されます。
合成に関する非推奨事項
-
の
qs_decomposition()引数のいくつかの動作は現在非推奨となっており、Qiskit v3.0 で削除される予定です。- および
opt_a2を設定opt_a1する必要はなくなりました。この関数は、最適化を適用できるかどうかを自動的に判断します。 TwoQubitBasisDecomposerdecomposer_1qまたdecomposer_2q、これらはそれぞれ または のOneQubitEulerDecomposerインスタンスである必要があります。任意の Python 呼び出し可能オブジェクトを使用すると、Rustコアと比較してパフォーマンスが低下します。
- および
ビルドシステムの変更点
-
qiskit-bindgen-cliリポジトリ内のバインディング生成ツールの名称が からqiskit-bindgen-cに変更されました。 優先Makefileされるレシピmake cには影響がありません。 -
qiskit-cext-vtable``qiskit-bindgen-cli2つのスロットリスト(からqiskit-bindgen-cli show-slots取得したもの、あるいはにコンパイルされたもの)が、関連するバージョン番号についてsemver互換であるかどうかを確認できるコマンドがcheck-abi追加されました。 -
qiskit-bindgen-cliこのshow-slotsコマンドを取得しました。このコマンドを実行すると、C API への実行時リンク( Python -space Qiskit パッケージなどを介して)のためのスロット割り当ての一覧が出力されます。 -
新しい
Extension(generated_files=...)引数を使用するため、ビルド依存setuptools-rust関係の最小バージョンが 1.13 に引き上げられました。 -
Qiskit では、オプションで mimalloc をグローバルアロケータとして使用してビルドできるようになりました。
QISKIT_BUILD_WITH_MIMALLOC=1mimalloc の使用を有効にするには、環境変数を設定してください。 このオプションは、 Python パッケージをビルドする場合、あるいはMakefile (make c) を使用してスタンドアロンの共有ライブラリをビルドする場合のいずれにも使用できます。 -
ソースからQiskitをビルドするための最小サポートRustバージョン(MSRV)が、 1.85 から 1.87 に引き上げられました。 Rust 1.87 では、アップストリームの依存関係を最新バージョンに更新する必要がありました。 具体的には、 nalgebra 0.34 には Rust 1.87 が必要です。
-
テスト要件における stestr の最低必要バージョンが、 2.0 から 3.2.0 に引き上げられました。 これは、継続的インテグレーション( Python )のテストジョブにおいて、stestrの新しい機能、主に
stestr historycommand を活用するために行われました。
既知の問題
-
Qiskitの v2.2 および v2.3 は、最終的な式から含まれる
ParameterすべてのインスタンスがParameterExpression相殺されてしまった回路に対して、読み取り不可能なQPYファイルを生成することがあります。 たとえば、回路に式0*x + 1.5が含まれている場合、Qiskitの v2.2 および v2.3 のいずれも、QPY生成時のエラーにより、これら自身や v2.4 を含め、どのバージョンのQiskitでも読み取れないQPYファイルを生成してしまいます。このエラーは通常(少なくともQiskitの v2.4 では)、「malformed expression: stack was empty before expression completed」といったメッセージとともに
QpyError表示されます。 -
v0.24 およびそれ以前のバージョンで生成されたQPYファイルには
qiskit-terra、要素にdisconnectedParameter.uuid属性を持つインスタンスが定義ParameterVectorされている場合があり、これらは完全にラウンドトリップすることができません。 このバージョンのQiskit以前では、QPYは、完全に再構築されていない暗黙ParameterVectorの変数を検出した場合、警告を出力していました。 QPYは、この状況では警告を表示しなくなります。この危険な行動を観察するためには、以下のすべてが必要となります:
- v0.24 またはそれ以前のバージョンで
qiskit-terra生成された、2つの別々の QPY 回路ペイロード(同じファイル内、または別々のファイル)を読み込みます。 ParameterVectorこれら2つの回路は、同じものから派生したインスタンスを使用ParameterVectorElementしている。- ある回路ではベクトル内の特定の要素を使用し、もう一方の回路ではそれを使用しない。
- その要素を使用した回路から直接デシリアライズ
ParameterVectorElementされた要素と、比較対象の要素を使用していない別の回路の要素のバックリファレンスParameterVectorElement.vectorを通じて取得された、同じ要素インデックスの要素とを比較しようとしています。
この警告は、最新のQiskitでは、実際に問題が検出されたことを示すよりも、誤検知となるケースがはるかに多いため、削除されました。 実際、 v2.5 以降のQiskitでは、回路間で要素が等しいとみなされる暗黙
ParameterVectorの集合が生成されます。 - v0.24 またはそれ以前のバージョンで
セキュリティー問題
-
qasm2.loads()OpenQASM の2つのパーサー(qasm2.load()および)は、深すぎる式を評価しようとした場合、 をRecursionError返して終了するようになりました。 パーサーへの入力時点における最大許容深さは、sys.getrecursionlimit()Python から取得されます。以前は、パーサーがRustのメモリ空間内で無制限に再帰処理を行い、最終的にスタック容量の上限を超えてしまい、プロセスがセグメンテーションフォルトを起こすことがありました。
バグ修正
-
Barrier「」を含む回路の再スケジューリング時に「」が発生する問題をTranspilerError修正ConstrainedRescheduleしました。 #16135 を修正しました。 -
ValueErrorsynth_cz_depth_line_mr()これにより、形式が正しくない入力に対しては、Rust-spaceのパニックではなく、 Python -spaceのパニックが発生するようになりました。 #16152 を修正しました。 -
仮想順列レイアウトを構成する際(回路の最後に暗黙的な順列が適用される場合)、および
StarPreRoutingにおけるElidePermutationsバグを修正しました。 -
ConstrainedRescheduleオプションtargetの引数が指定されていない場合、これ以降は発生AttributeErrorしなくなります。 #16245を参照してください。 -
CRXGate制御回転ゲート、CRYGateおよびCRZGateその他の標準ゲート間の可換性関係を評価する際のCommutationCheckerバグを修正しました。CommutativeCancellationCommutationAnalysis特に、そのようなゲートが存在する場合の、、CommutativeOptimizationおよびqk_transpiler_pass_standalone_commutative_cancellation()の通過時の挙動を修正しました。#16164 を修正しました。
-
クビット引数が逆になっている
CSGateとCSdgGateInverseCancellationのペアが、一貫性なくキャンセルされてしまうバグを修正しました。 以前は、 (量子ビット引数が逆順になっている)というシーケンスはキャンセルされていましたが、 はキャンセルされませんでした。 今では、どちらも一貫して打ち切られている。#15855 を修正しました。
-
デフォルトの分解において、指定された結果量子ビット数を維持するように修正
MultiplierGateしました。 以前は、この引数を無視し、結果の量子ビットに対して常に状態量子ビットの2倍の数を用いて分解を行っていた。 #16168 を修正しました。 -
回路のグローバルフェーズに
RemoveIdentityEquivalent個のオブジェクトが含まParameterVectorElementれている場合に発生していたパニックを修正しました。 メッセージは 次の通りです。スレッドがアタッチされていない状態では、 Python のヒープにポインタをクローンすることはできません。
#16053を参照してください。
-
π/2回路の可視化機能では、整数 に対して の許容範囲内にある角度について、余分な先1頭の が印刷されなくなりました(例えば、1π/2は となります)。これには、mpl``latex、、およびqasmの出力モードが含まれます。#16170 を修正しました。
-
QPY バージョン 13 以降において、整数の持続時間を持つ命令が
Delay、デシリアライズ時に誤った型に変換される可能性があった問題をqpy.load()修正しました。 これにより、後続のコードで「パラメータ値の解析に失敗しました」といったqasm3.dumps_experimental()エラーが発生する可能性があります。 詳細については、#16076を参照してください。 -
命令にグローバルフェーズが含まれる場合、入力状態ベクトルをその場で変更する問題を修正
Statevector.evolve()しました。 #15750を参照してください。 -
ConstrainedReschedule. におけるアンダーフローによる引き算のパニックが発生しないようにしてください。 #16231 を修正しました。 -
本コードにおける
UnrollForLoopsバグを修正しました。このバグでは、本体にゼロQuantumCircuit.global_phase以外の値を持つ静的QuantumCircuit.for_loop()変数をアンロールした際に、本体フェーズが1つ余分に追加されていました。#16185 を修正しました。
-
1.0VF2LayoutまたVF2PostLayout、エラーが.として報告される命令に遭遇しても、「float型のスコアはNaNを返してはならない」と言って慌てることはもうありません。 -
「on call」の際、常に発生
CircuitErrorしていた問題を修正LinearFunction.inverse()しました。 #16184を参照してください。 -
generate_preset_pass_manager(). を呼び出した際に、ユーザー設定ファイルのフィールドがtranspile_optimization_level反映されない問題を修正しました。transpile()以前は、これの影響は.にのみ及んでいました。 -
plot_bloch_vector()入力データを変形listしなくなりました。 -
CouplingMap今後は、量子ビットをそれ自身と接続するエッジを無視し、その旨の警告を表示するようになります。 以前は、これらが誤って黙認されていたため、結合グラフによってはコードに長期的なエラーを引き起こす可能性がありました。 -
変換時に回路のグローバル位相が正しく保持されるよう修正
dagdependency_to_circuit()しました。 #16166 を修正しました。 -
パックされたバイトの格納領域において、未使用のパディングビットを無視するように修正
BitArray.bitcount()しました。 #16173を参照してください。 -
UnitaryGate特定のRustベースのゲート(例:)においてCommutationChecker、行列サイズのチェックを回避し、大規模な行列の計算を引き起こしてしまうバグを修正しました。 -
global_phase. のコピーに失敗する問題を修正circuit_to_dagdependency()しました。 #14537を参照してください。 -
rzx_zz2()rzx_zz1()rzx_xz()clifford_6_4(),,,, およびrzx_zz3()のテンプレートを修正し、 がTemplateOptimizationこれらを受け入れて適用できるようになりました。 これらのテンプレートはそれぞれ、ゲート内容においてグローバルフェーズまでのアイデンティティのみを実装していましたが、補償global_phase場が欠けていたためTemplateOptimization、実行のたびにこれらが黙って却下されていました。 #14538を参照してください。 -
U1GateまたはPhaseGateを使用して の回転を累積する際、グローバル位相が 分だけ誤ってずれる問題を修正CommutativeCancellationしました。 #16377 を修正しました。 -
蓄積された未ルーティングの演算を合成する際に、入力回路のグローバル位相を再度加算するのではなく、それを保持するように修正
Commuting2qGateRouterしました。 #16205 を修正しました。 -
基底セットに
ConsolidateBlocks複数のパラメトリックゲートまたは複数の非パラメトリック2量子ビットゲートが含まれている場合、基底ゲートの選択が常に決定論的ではないという問題を修正しました。 これにより、実行ごとにトランスパイルされた回路が異なってしまう可能性があります。 -
インデックスセットに負の整数が含まれる場合、修正
ForLoopOpされました。 以前、あるOverflowError問題が提起されました。 #16412を参照してください。 -
const size_t *Qiskit v2.5.0rc1 においてのみ、C API の型QkLoopElementsが、そのelementsメンバを誤って として記載していました。 これは、const ptrdiff_t *負の値を考慮に入れるためのものです。 -
force_consolidate=True「」におけるConsolidateBlocksバグを修正しました。このバグでは、ベースゲートでデコンポーザーの選択が許可されていない場合、ブロックと実行が統合されませんでした。 -
Initialize(1, num_qubits=2)ゲートが整数形式(例:)を用いて構築された場合、正しい量子ビット数の回路が返されるように修正Initialize.gates_to_uncompute()しました。 #16413 を修正しました。 -
Initialize.inverse()の不明確なエラーメッセージを修正しました。この命令は可逆ではないため、呼び出されると即座にエラーが発生するようになりました。#15595を参照してください。
-
QkTranspileOptions. で 3optimization_levelを使用する際の およびqk_transpile_stage_optimization()C API 関数に関する問題をqk_transpile()修正しました。 以前は、内部の最小点追跡ロジックが、より優れた回路を見つけた後もDAGを更新していませんでした。 その結果、深さ・サイズが適切に最適化されていない回路が返されてしまいました。 -
トランスパイラー・パス
OptimizeAnnotatedにおいて、オープン制御を持つ制御修飾子が正しく結合されていなかったバグを修正しました。 #16410を参照してください。 -
picklex - xParameterExpression変数がキャンセルアウトされたインスタンス(例:)は、QPYおよびを通過した後も、へのx参照を保持するようになりました。 -
pickle0*x + 2ParameterExpression(のような)単純な値として評価されるインスタンスは、今後、QPY および を通じて正常に往復処理されるようになります。 -
同じ古典ビットを測定する2つの
PauliProductMeasurement命令間の可換性のチェックを修正しました。これまでは、観測可能な書き込み順序が反映されていませんでした。 -
および
PauliProductRotationGateのPauliProductMeasurementQPY へのシリアライズにおいて、パウリ状態が正しく処理されていなかった問題を修正しました。これにより、以前の Qiskit バージョンとの互換性が損なわれていました。 #16099を参照してください。 -
ms. で指定された遅延に対して、接尾辞がus誤って出力される問題をdumps_experimental()修正qasm3.dump_experimental()しました。 #16097 を修正しました。 -
psで指定された遅延を出力する際、およびdumps_experimental()におけるqasm3.dump_experimental()``ns変換を修正しました。 #16097 を修正しました。 -
32キュービット以上の回路を正しく合成できるよう修正
synth_qft_line()しました。 -
異なるエラー許容範囲でトランスパイラー・パスを
SynthesizeRZRotations複数回実行すると、不正な結果が生じたり、内部パニックが発生したりする問題を修正しました。#16385を参照してください。
-
TemplateOptimizationのグローバル位相処理を修正しました。以前は、入力回路のグローバル位相が黙ってゼロにリセットされ、テンプレートのグローバル位相に対する補正が行われていませんでした。#14537 を修正しました。
-
明示
qubits的なマッピングと併用された場合のfront=TrueraisingValueErrorの動作を修正QuantumCircuit.compose()しました。 #15834を参照してください。 -
トランスパイラー・パス
CommutativeOptimizationにおいて、同じ量子ビットに作用するが順序が逆のゲXXPlusYYGateートのペアが誤って簡略化されてしまうバグを修正しました。 #16161を参照してください。 -
制御フロー操作がネストされた回路において、そのブロックで計算された変換がスキップされてしまうというエラーを
BasisTranslator修正しました。 -
ParameterVectorQPYのデシリアライズ処理では、. の要素の一部(すべてではない)を使用している回路を読み込む際、警告が出力されなくなりました。 -
大規模または複雑な操作が発生した際に、インデックスエラーやメモリ不足によるパニックが発生し、パスが
LightCone失敗してしまう問題を修正しました。 #15021 および #13828 を修正しました。 -
nalgebra特定の行列におけるシューア分解の問題を、の代わりにを使用してfaer再実装することで修正しました。transpile()qs_decomposition()この問題は、量子シャノン分解を 経由で実行する場合だけでなく、トランスパイラーパスUnitarySynthesisや 経由で実行する場合にも発生する可能性があります。#15870を参照してください。
-
QuantumCircuit.remove_final_measurements()レイアウトが設定済みの回路で呼び出された場合、レジスタの追加を試みているという誤った警告が表示されなくなります。 -
命令を含む
Reset回路は、GenericBackendV2. に対してスケジューリングできるようになりました。 -
random_clifford_circuit()シードが指定されている場合でも、における非決定性を修正しました。 #16138を参照してください。
パフォーマンスの改善
-
および が
TwoQubitBasisDecomposer使用する内部の線形代数TwoQubitWeylDecompositionライブラリは、現在 nalgebra となっています。 これにより、小さな行列に対してスタック割り当てと最適化された演算が提供されます。 どちらのパスも、パフォーマンスが向上し、メモリ使用量が減少しました。 詳細については、#15928 および #15960 を参照してください。 -
Clifford+T 基底セットへのコンパイル時、特に非常に深い回路において、最適化レベル 1、2、3 のパフォーマンスが向上しました。 以前は、最適化段階において固定点に達したかどうかの指標として回路の深さが用いられていましたが、これは(最適化段階に応じて)RZおよびTのカウント数に置き換えられました。 これは、処理速度が大幅に向上するだけでなく、目標とする指標をより的確に反映している。 詳細については、#16218を参照してください。
-
トランスパイラ・パスとそのC API
qk_transpiler_pass_standalone_consolidate_blocks()関数はConsolidateBlocks、マルチスレッド対応となり、これにより実行時のパフォーマンスが向上しました。 詳細については、#16230を参照してください。 -
v2.5.0rc1 においてのみ、接続度が非常に高い大規模な結合マップ上で および
VF2PostLayoutを実行VF2Layoutした際に発生していたパフォーマンスの低下を修正しました。 -
PauliProductRotationGate.to_matrix()このメソッドの実行時間を改善しました。 10‑qubit のパウリ演算子については、これにより約500倍の高速化が実現されます。 -
PyPI に掲載されているプリコンパイル済みのホイールは、グローバルアロケーターとして mimalloc を使用してビルドされるようになりました。 これにより、Qiskitの実行パフォーマンスとメモリ使用量が向上します。 詳細については、#16024 を参照してください。
-
トランスパイラ・パスおよびそのC API関数
qk_transpiler_pass_optimize_1q_sequences()とqk_transpiler_pass_standalone_optimize_1q_sequences()はOptimize1qGatesDecomposition、マルチスレッド対応となり、これにより実行時のパフォーマンスが向上しました。 詳細については、#15567を参照してください。 -
トランスパイラ・パスは
CommutationAnalysisマルチスレッド化され、これにより実行時のパフォーマンスが向上しました。 詳細については、#16014を参照してください。 -
トランスパイラ・パスは
CommutativeCancellation、現在、内部で部分的にマルチスレッド化されています(交換解析を実行する際)。 これにより、実行時のパフォーマンスが向上しました。 詳細については、#16014を参照してください。 -
C API 関
qk_transpiler_pass_standalone_commutative_cancellation()数は、内部的に部分的にマルチスレッド化されました(交換解析を実行する際)。 これにより、実行時のパフォーマンスが向上しました。 詳細については、#16014を参照してください。 -
デフォルトの合成プラグインを使用して実行する場合、トランスパイラ・パスは
UnitarySynthesisマルチスレッド化されるようになり、これにより実行時のパフォーマンスが向上しました。 詳細については、#16275を参照してください。 -
C API 関
qk_transpiler_pass_standalone_unitary_synthesis()数は、内部的にマルチスレッド対応となりました。 その結果、実行時のパフォーマンスが向上します。 詳細については、#16275を参照してください。 -
BitArray.bitcount()現在、内部ではより効率的な NumPy 呼び出しを使用しており、100キュービットの場合、 5x 程度の速度向上が見られます。 詳細については、#15836を参照してください。 -
ParameterVectorRustで再実装されました。 この構造体の構築速度は以前と比べて約5倍速くなり、そのベクトル要素が占めるメモリ容量も大幅に減少しました。 -
SabreLayoutセイバー・ルーティング(および でSabreSwap使用される)は、ルーティングされた各ゲートごとに再構築するのではなく、拡張セットのレイヤー構造をその場で更新するようになりました。 これは、高密度層構造を持つ広範囲な回路において、大幅な性能向上をもたらすものです。115キュービットの量子体積を持つ回路の配線処理が、従来の約3分の2の時間で完了するようになりました。 詳細については、#14912を参照してください。 -
実際のシナリオにおける実行時間を
SubstitutePi4Rotations改善しました。 通常、回転ゲートのうち固定の同等ゲートに置き換えられるのはごく一部に過ぎず、DAGを再構築するよりも、その場で演算を置き換える方がはるかに高速です。 ゲート数が非常に多い回路の場合、これにより実行時間を大幅に短縮できる。例えば、4,300万ゲートのQSVT回路では、 10x 以上の削減効果が得られた。 詳細やベンチマークについては、#16217を参照してください。 -
トランスパイラーのパス
BasisTranslator,UnitarySynthesis, およびSplit2QUnitaries、ならびにそれらに対応する C API 関数qk_transpiler_pass_standalone_basis_translator(),qk_transpiler_pass_standalone_unitary_synthesis(),qk_transpiler_pass_split_2q_unitaries()およびqk_transpiler_pass_standalone_split_2q_unitaries()は、出力DAGCircuitの生成時に使用されるトポロジカルソートを内部的に変更しました。これにより、以前使用されていた辞書順トポロジカルソートによるオーバーヘッドを回避し、各パスの実行時パフォーマンスが向上しました。 詳細については、#15987を参照してください。 -
transpile()新しいTwoQubitPeepholeOptimizationトランスパイラー・パスは、プリセット・パス・マネージャーの一部として、によってgenerate_preset_pass_manager()生成され、内部でによって使用されるようになり、 最適化レベル2および3の最適化ステージで利用されるようになりました。 これにより、これらのレベルにおいて、最適化段階でピープホール最適化を実行するために従来使用されていた およびUnitarySynthesisトランスパイラーパスがConsolidateBlocks置き換えられます。 この新しいパスは、実行時のパフォーマンスが向上し、合成における忠実度を考慮したヒューリスティクスの精度も向上しています。 -
Rust のindexmap 型で使用される内部ハッシュアルゴリズムが、従来使用されていたahash ライブラリの代わりに foldhash を使用するように変更されました。 これにより、内部でindexmapを多用する一部の機能において処理速度が向上しました。 詳細については、#15920を参照してください。