Skip to main content
IBM Quantum Platform

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 を各返されるレイヤーDAG global_phase にコピー DAGCircuit.serial_layers() してしまう問題を修正しました。 #16271 を修正しました。

  • 単一量子ビットの XX 回転の連続実行が負の角度に統合され、かつ X\sqrt X がターゲットゲートとして利用可能な場合に 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 一般的に見られる現象です。 rustworkx SabreLayoutこれは、いくつかのトランスパイラー処理でマルチスレッド対応が追加されたことに加え、前述の新しい2量子ビット合成、アルゴリズムの改善、最適化、そしてより効率的なハッシュ処理、メモリ割り当て、線形代数ルーチンなど、多くの改良が施されたことに起因しています。

C API の機能

「Circuits」の特集

  • Instruction不透明な を構築できない代わりに、逆変換を表す を LinearFunction 返すように特別 LinearFunction.inverse() に設計されています。

  • loop_parameter expr.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()を追加しました。これは、特定の上で回路を実行した際の忠実度を推定するために使用されます。

  • ClassicalRegister 65,535ビットを超えるオブジェクトも、表現システム qiskit.circuit.classical で使用できるようになりました。

  • ParameterVector 現在、オプション uuid のコンストラクタ引数を受け付けるようになり、その uuid 属性を通じて基底 UUID クラスを公開するようになりました。 これは、要素同士が等しいベクトルを再構築するために使用できます。

量子情報の特集

トランスパイラの機能

  • 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回転が π/2\pi/2 の適切な倍数であり、かつ対応するゲートが または入力回路の 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 拡張し、単一量子ビットの RXR_X および RYR_Y 回転ゲート、ならびに PauliProductRotationGate および PauliProductMeasurement 演算に対応しました。

  • 単一量子ビットの回転ゲート、および PauliProductRotationGate 指定された近似の範囲内で π/2\pi/2 の整数倍の角度を持つオブジェクトは、今回の 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_level UnitarySynthesis 、従来の「」と「」の ConsolidateBlocks 組み合わせに取って代わるものです。

    新しい統一パスでは、回路の推定忠実度を向上させるために2量子ビットブロックを再合成できるタイミングをより的確に判断できるようになり、特に過完全基底や異種 Target オブジェクトの場合において、より高品質なコンパイルが可能となる。 また、解析と合成の並列化もより適切に行われています。

可視化機能

トランスパイラーのアップグレードに関する注意事項

  • この transpile() 関数は、Clifford+T 基底へのコンパイルを行う際、以前とは異なる、より効率的なコンパイラワークフローを使用するようになりました。 このワークフローでは、単一量子ビットのユニタリー演算をクリフォード+Tシーケンスに合成するために、汎用ユニタリー合成プラグインはもはや使用されません。 新たに、 RZR_Z ゲートへのコンパイルと、それらを直接合成する方式を採用しており、これにより品質と実行時のパフォーマンスが向上しています。 transpile()その結果、および "unitary_synthesis_plugin_config" 引 "unitary_synthesis_method" 数は、におけるClifford+T合成に影響を与えなくなりました。 approximation_degreeその代わりに、精度は、をグローバルに設定するか、または RZR_Z の合成設定を渡すための引数を公開 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-cli 2つのスロットリスト(から 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 history command を活用するために行われました。

既知の問題

  • 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 、要素にdisconnected Parameter.uuid 属性を持つインスタンスが定義 ParameterVector されている場合があり、これらは完全にラウンドトリップすることができません。 このバージョンのQiskit以前では、QPYは、完全に再構築されていない暗黙 ParameterVector の変数を検出した場合、警告を出力していました。 QPYは、この状況では警告を表示しなくなります。

    この危険な行動を観察するためには、以下のすべてが必要となります:

    • v0.24 またはそれ以前のバージョンで qiskit-terra 生成された、2つの別々の QPY 回路ペイロード(同じファイル内、または別々のファイル)を読み込みます。
    • ParameterVectorこれら2つの回路は、同じものから派生したインスタンスを使用 ParameterVectorElement している。
    • ある回路ではベクトル内の特定の要素を使用し、もう一方の回路ではそれを使用しない。
    • その要素を使用した回路から直接デシリアライズ ParameterVectorElement された要素と、比較対象の要素を使用していない別の回路の要素のバックリファレンス ParameterVectorElement.vector を通じて取得された、同じ要素インデックスの要素とを比較しようとしています。

    この警告は、最新のQiskitでは、実際に問題が検出されたことを示すよりも、誤検知となるケースがはるかに多いため、削除されました。 実際、 v2.5 以降のQiskitでは、回路間で要素が等しいとみなされる暗黙 ParameterVector の集合が生成されます。

セキュリティー問題

  • 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 のペアが、一貫性なくキャンセルされてしまうバグを修正しました。 以前は、 CS−CS†CS-CS^\dagger (量子ビット引数が逆順になっている)というシーケンスはキャンセルされていましたが、 CS†−CSCS^\dagger-CS はキャンセルされませんでした。 今では、どちらも一貫して打ち切られている。

    #15855 を修正しました。

  • デフォルトの分解において、指定された結果量子ビット数を維持するように修正 MultiplierGate しました。 以前は、この引数を無視し、結果の量子ビットに対して常に状態量子ビットの2倍の数を用いて分解を行っていた。 #16168 を修正しました。

  • 回路のグローバルフェーズに RemoveIdentityEquivalent 個のオブジェクトが含ま ParameterVectorElement れている場合に発生していたパニックを修正しました。 メッセージは 次の通りです。

    スレッドがアタッチされていない状態では、 Python のヒープにポインタをクローンすることはできません。

    #16053を参照してください。

  • π/2回路の可視化機能では、整数 kk に対して π/k\pi/k の許容範囲内にある角度について、余分な先 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.0 VF2Layout また 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 を使用して 2π2\pi の回転を累積する際、グローバル位相が −π-\pi 分だけ誤ってずれる問題を修正 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. で 3 optimization_level を使用する際の および qk_transpile_stage_optimization() C API 関数に関する問題を qk_transpile() 修正しました。 以前は、内部の最小点追跡ロジックが、より優れた回路を見つけた後もDAGを更新していませんでした。 その結果、深さ・サイズが適切に最適化されていない回路が返されてしまいました。

  • トランスパイラー・パス OptimizeAnnotated において、オープン制御を持つ制御修飾子が正しく結合されていなかったバグを修正しました。 #16410を参照してください。

  • pickle x - x ParameterExpression 変数がキャンセルアウトされたインスタンス(例:)は、QPYおよびを通過した後も、への x 参照を保持するようになりました。

  • pickle0*x + 2 ParameterExpression (のような)単純な値として評価されるインスタンスは、今後、QPY および を通じて正常に往復処理されるようになります。

  • 同じ古典ビットを測定する2つの PauliProductMeasurement 命令間の可換性のチェックを修正しました。これまでは、観測可能な書き込み順序が反映されていませんでした。

  • および PauliProductRotationGate の PauliProductMeasurement QPY へのシリアライズにおいて、パウリ状態が正しく処理されていなかった問題を修正しました。これにより、以前の 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=True raising ValueError の動作を修正 QuantumCircuit.compose() しました。 #15834を参照してください。

  • トランスパイラー・パス CommutativeOptimization において、同じ量子ビットに作用するが順序が逆のゲ XXPlusYYGate ートのペアが誤って簡略化されてしまうバグを修正しました。 #16161を参照してください。

  • 制御フロー操作がネストされた回路において、そのブロックで計算された変換がスキップされてしまうというエラーを BasisTranslator 修正しました。

    #13162、 #14025、 および#15734 を参照してください。

  • 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を参照してください。

  • ParameterVector Rustで再実装されました。 この構造体の構築速度は以前と比べて約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を参照してください。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。