Skip to main content
IBM Quantum Platform

Qiskit SDK 2.3 リリースノート


2.3.1

前奏曲

Qiskit v2.3.1 は、Qiskit v2.3.0 のリリース以降に発見されたいくつかのバグを修正しています。

バグ修正

  • の組み込み permutation.kms 合成プラグインは、 qiskit.synthesis 長さ0の順列を正しく処理するようになりました。 #15550 を修正しました。

  • 単一量子ビットのクリフォード演算 synth_clifford_depth_lnn() について。 #15780を参照してください。

  • 演算を再帰的に合成した後、量子ビットの状態が正しく更新されないという、 HighLevelSynthesis トランスパイラ・パスのバグを修正しました。 場合によっては、これによりパスによって誤った回路が生成される可能性があります。

  • 関数 qs_decomposition() 内の問題を修正しました。これにより、内部の線形代数ルーチンにおける許容誤差の問題が発生した場合にパニックが発生し、プログラムがクラッシュする現象が解消されました。 この問題は修正されたため、このような状況では、代わりに適切な QiskitError 例外またはそのサブクラスがスローされるようになりました。

    #15610 を修正しました。

  • 2つ以上の量子ビットを含むゲートに対して、アクセス時 UnitaryGate.definitionUnitaryGate.control() および呼び出し時の UnitaryGate デフォルトの合成は、内部的に 関数 qs_decomposition() に依存します。 反復的な量子シャノン分解に伴う線形代数ルーチンでは、浮動小数点演算の許容誤差の影響により、計算が常に成功するとは限らない場合があります。 これらの属性やメソッドが失敗するのを防ぐため、このような状況では、代わりにからの分解 Isometry が用いられる。 これにより、効率の悪い分解になってしまうものの、 qs_decomposition() が失敗 qs_decomposition() した際の代替手段として機能します。

  • 非対称演算(** や - など)において ParameterExpression.sympify() 、特定の , ParameterParameterExpression 、および数値の組み合わせによってオペランドが逆転してしまうバグを修正しました。 #15642を参照してください。

  • 「identity observable」項にアクセスする際の qk_obs_term() 不具合を修正しました。 #15536を参照してください。

  • 浮動小数点ノイズの影響により、対称的なもつれ状態(ベル状態など)が任意に回転してしまう plot_state_qsphere() という可視化上の不具合を修正しました。

  • パラメータ化されたゲートを持つ回路について QuantumCircuit.repeat() 修正しました。

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

  • 「ancilla」という名前のユーザー作成レジスタが存在する場合、 QuantumCircuit.ensure_physical() を使用して作成された回路でクラッシュ qpy.load() するバグを修正しました。

  • 特定のトランスパイラ処理段階で、 ContinueLoopOp が誤って制御フロー操作と見なされる問題を BreakLoopOp 修正しました。これにより、が発生 AttributeError する可能性がありました。 #15579 を参照してください。

  • 「ancilla」という名前のユーザー作成レジスタが存在する場合、 SabreLayout を使用して作成された回路でクラッシュ qpy.load() するバグを修正しました。

  • NumPy の最小必要バージョンが、 1.17 ではなく 1.21 として正しく記載されるようになりました。 NumPy で導入された 1.21 の使用により numpy.typing.NDArray、この制限は数回のリリースにわたり事実上適用されてきたため、古いバージョンの NumPy では Qiskit のインポートに失敗します。

  • OpenQASM 3 のエクスポート機能(qasm3.dumps() および dump())は、識別子内で使用される場合、ASCII 数字以外の Unicode「数字」文字を正しくエスケープするようになりました。 以前は、上付き文字などの文字が出力に残っていましたが、これは OpenQASM 3の仕様には準拠していません。

  • OpenQASM 3のエクスポート機能(qasm3.dumps() および dump())は、名前がASCII数字で始まる識別子を正しくエスケープするようになりました。

  • dtype 数が指定されていない場合、メソッド SparsePauliOp.from_list() および は、係数のデータ型 SparsePauliOp.from_sparse_list() を自動的に推論するようになりました。

    例:

    from qiskit.quantum_info import SparsePauliOp
    from qiskit.circuit import Parameter
    
    theta = Parameter("theta")
    
    # Previously required manually setting dtype=object
    op_list = SparsePauliOp.from_list([("X", theta)])
    op_sparse = SparsePauliOp.from_sparse_list([("X", [0], theta)], num_qubits=1)

2.3.0

前奏曲

Qiskit v2.3.0 は、 Qiskit SDK の新機能リリースです。

この新バージョンでは、トランスパイル用の C API が大幅に拡張され、C から (QkTarget) Target の詳細を確認できるようになり、(QkDag) DAGCircuit の作成や操作が可能になりました。 これにより、スタンドアロン libqiskit ・オブジェクトに対してコンパイルする際に、カスタム・トランスパイラ・パスを記述できるようになります。 C API には、個々のトランスパイル段階の関数(例: qk_transpile_stage_layout())が用意されており、パイプライン全体を手動で再構築することなく、トランスパイルにカスタムロジックを簡単に組み込むことができます。

初期のフォールトトレラントなターゲットへのトランスパイルのパフォーマンスと機能セットも改善されました。 この新しい PauliProductMeasurement 命令は、パウリ積基底への射影変換を表すものであり、Qiskitは既存の LitinskiTransformation パスを使用して、回路をパウリ基底に基づく計算形式へトランスパイルすることを完全にサポートするようになりました。 トランパイラで設定可能な新しい単一合成法により、 RossSelingerSynthesis単一量子ビットのクリフォード+T合成に対して、漸近的に最適な unitary_synthesis_method="gridsynth"ロス・セリンガーアルゴリズムを使用できるようになる。 その他の改良点としては、例えば、パウルイ基底回路の可換性最適化を考慮した、より優れた OptimizeCliffordT パスや、その CommutativeOptimization パスなどが挙げられる。

内部的には、オブジェクト ControlFlowOp の表現がRustネイティブのものに変更されました。 この変更はまだ完了していません。Qiskit 2.3 では、制御フロー操作の周辺でパフォーマンスの低下が見られる可能性があります。 Qiskitの今後のバージョンでは、この取り組みをさらに進め、制御フロー演算に関する長年の課題であったパフォーマンスやAPIの問題を解決する予定です。

本リリース以降、 Python 3.9 は2025年10月にサポート終了となるため、サポート対象外となります。また、 macOS のIntelプロセッサ向けサポートは、Appleによるプラットフォームの段階的廃止開始に伴い、ティア2プラットフォームサポートに格下げされました。 3.10 以降のすべてのバージョンのCPythonがサポートされています。 各プラットフォームの現在のサポートレベルについては、 オペレーティングシステムのサポートを参照してください。

Qiskitの 2.x シリーズでは、今後さらに機能リリースが行われる予定です。Qiskit 3.0 のリリースは、2026年のかなり後になる見込みです。現時点では互換性を損なう変更の必要性がないためです。

C API の機能

回路の特徴

  • 複数の量子ビットに対する共同射影測定を表す新しい命令クラス `` PauliProductMeasurement を追加しました。この測定における観測量は、パウリ演算子のテンソル積となります。 この測定の結果として得られるのは、 +1+1 または 1-1 のいずれかという単一の固有値であり、これはパウリ積の固有状態を示している。

    追加の背景情報については、ダニエル・リティンスキー著 『表面コードのゲーム:格子手術による大規模量子コンピューティング』 を参照のこと。

    A PauliProductMeasurement は からインスタンス化することが Pauliでき、その場合、Pauliは 1-1 の位相を含み得るが、 iii-i の位相は含めない。この命令は、Pauliと同じ数の量子ビットと、1つの古典ビットを持つ。

    次に例を挙げます。

    from qiskit.circuit import QuantumCircuit
    from qiskit.quantum_info import Pauli
    from qiskit.circuit.library import PauliProductMeasurement
    
    ppm = PauliProductMeasurement(Pauli("XZ"))
    
    qc = QuantumCircuit(6, 2)
    qc.append(ppm, [4, 1], [1])
  • 新しい QuantumCircuit.to_dag() 手法により、. circuit_to_dag()に対して便利なラッパーが提供されるようになった。

  • ParameterExpression には、その parameters セットの長さと同じ値を持つ属性 num_parameters が追加されましたが、計算にかかるオーバーヘッドは少なくなっています。

OpenQASM 特徴

  • OpenQASM 2エクスポーターは、条件が単純なレジスタと整数の等価性検査である場合、単純なqasm2.dumps()単一 IfElseOp 命令ブロックの出力をサポートするようになりました。 これは、 OpenQASM 2言語で表現できる内容に対応しています。

QPYの特長

  • QPY バージョン 17 では、オブジェクトのパラメータとして使用されるオブジェクト SparseObservable のシリアライズ形式が追加されました。 特に、これにより、内部でこの演算子を使用するオブジェクトを PauliEvolutionGate シリアライズできるようになり、エボリューション・ゲートのペイロードが更新されます。

量子情報の特徴

  • のミラーサイト Operator.from_circuit()として Statevector.from_circuit() 追加されました。 これにより、物理量子ビット空間にトランスパイルされた回路であっても、仮想量子ビット空間において直接 Statevector インスタンス化することが可能になる。

  • のみを含む および front=TrueQuantumCircuit 呼び出された際の Clifford.compose() 、および Clifford.dot() のパフォーマンスを改善しました。 以前は、まず回路が完全にオブジェクト Clifford として取り込まれ、その後、2つのオブジェクトが結合されていました。 現在、ベースは反復的に Clifford 更新されており、これは小規模な回路の場合、処理速度が大幅に向上します。

  • メソッド PauliLindbladMap.parity_sample() を追加しました。 この方法は PauliLindbladMap.signed_sample() 既存の方法と非常に似ていますが、Qiskitの他の部分とより一貫性のある符号の取り扱いを使用しているため、今後は本方法を優先して使用することを推奨します。 インスタンスを変更せずにサンプリングを行う際、レートにスケーリングを適用するための追加のオプション引数が用意されています。

  • やなどのいくつかの「 quantum_info 述語」関数は、不要な行列の is_identity_matrix()割り当てを避けるよう最適化されました。

合成機能

  • gridsynth_rz()」を追加しました。これは、指定された角度のRZ回転を近似する単一量子ビット量子回路を構築します。 このアルゴリズムは、Neil J. Ross、Peter Selingerによる論文「 Optimal ancilla-free Clifford+T approximation of z-rotations」 で解説されており、 https://github.com/qiskit-community/rsgridsynth に実装されています。

  • 特定の単一量子ビットユニタリー行列を近似する単一量子ビット量子回路を構築する関数を gridsynth_unitary()追加しました。 このアルゴリズムは、ユニタリ行列をRZ回転、RX回転、およびもう1つのRZ回転に分解し、これら3つの回転それぞれにロス・セリンガーアルゴリズムを適用することで機能する。

  • 汎用的な単一合成アルゴリズムがRust qs_decomposition() で書き直され、関数の実行時パフォーマンスが大幅に向上しました。

トランスパイラ機能

  • 交換律を利用してゲートの取り消しと結合を行う新しいトランスパイラ・パスを追加しました。 CommutativeOptimization このパスは、と CommutativeCancellation の機能を統合し CommutativeInverseCancellation、拡張します。

    具体的には、パス:

    • 逆ゲートペアをキャンセルします。これには、全相対位相まで逆であるペア(必要に応じて全相対位相を調整)も含まれます。
    • 可能な場合、連続するゲートを結合しようとする試み。例えば、RZゲート、RXゲート、パウリ回転などの連続したシーケンスなど。
  • トランスパイラ・パス UnitarySynthesis に新しいオプションを追加しました。 fallback_on_default このオプションは、引数で指定されたデフォルト以外の合成プラグインを使用して methodpassが呼び出された場合に適用されます。

    デフォルトでは、回路内のすべてのユニタリー演算の合成に、指定されたプラグインが使用されます(ただし、そのプラグインが適用可能な場合に限ります。例えば、ユニタリー演算が定義されている量子ビット数に対応していない場合、そのプラグインは実行されません)。 プラグインがユニタリー演算子を合成できずを返す場合 None、回路内の元のユニタリー演算子は変更されません。 が に設定されている fallback_on_default``True 場合、指定されたメソッドが失敗した際には、代わりに プラグインが DefaultUnitarySynthesis 呼び出されます。

    この機能は、カスタムプラグインが全ユニタリ演算子のサブセットのみを扱う場合に特に有用です:適用可能な領域ではユーザーが独自ロジックに依存でき、適用外領域ではデフォルトの合成を利用できます。

  • 新しいユニタリー合成プラグインを追加しました。 RossSelingerSynthesisこのプラグインは、Ross-Selingerアルゴリズムを用いて単一量子ビットのユニタリーゲートを合成し、Cliffordゲート、 TT ゲート、および TT^\dagger ゲートからなる単一量子ビット量子回路を生成します。

    このプラグインは、パラメータがに設定 method``"gridsynth" されたときに、 UnitarySynthesis トランスパイラ・パスによって呼び出されます。

  • Clifford+T基底へのトランスパイルを行う際、 UnitarySynthesis トランスパイラ・パスはデフォルトでClifford+T合成アルゴリズムを使用し、単一量子ビットのユニタリー演算を近似するようになりました。

    同様に、この DefaultUnitarySynthesis プラグインでは、単一量子ビットのユニタリー演算を近似するために、同じClifford+T合成アルゴリズムが使用されるようになりました。

  • 新しい DAGCircuit.to_circuit() 手法により、. dag_to_circuit()に対して便利なラッパーが提供されるようになった。

  • 角度が π/4\pi/4 の整数倍である単一量子ビットの回転ゲート、 RXGateRZGate および RYGate 回転ゲートを、クリフォードゲート、 TGate および TdgGate ゲートの SubstitutePi4Rotations離散的な集合に変換する新しいトランスパイラーパスを追加しました。 なお、 π/4\pi/4 の奇数倍には単一の TGate および に加え、いくつかのクリフォード TdgGateゲートが必要となるのに対し、 π/4\pi/4 の偶数倍、あるいは等価に π/2\pi/2 の整数倍は、クリフォードゲートのみを用いて記述することができる。

  • トランスパイラ・パスが拡張 LitinskiTransformation され、計測に対応するようになりました。 したがって、この変換は、クリフォード演算、単一量子ビットのRZ回転ゲート( TT および TT^\dagger を含む)、および標準的なZ測定を含む回路に適用され、クリフォード演算を回路の最後に移動させる。 その過程で、RZ回転をパウリ回転の積(ゲート PauliEvolutionGate として実装)に変換し、Z測定をパウリ測定の積(命令 PauliProductMeasurement を用いて実装)に変換します。

  • トランスパイ OptimizeCliffordT ラの最適化パスは大幅に強化され、Rustで再実装されました。

    このパスは、クリフォード+Tゲートセットを用いて表現された回路に対して、覗き穴最適化を実行する。 より正確には、クリフォード+Tを含む単一量子ビットゲートのすべての連鎖を、 TT (または TT^\dagger )の最小使用量に折りたたむ。このパスは、連鎖内のゲート数に比例する時間で連鎖に対して実行される。

  • . WrapAnglesのデフォルトのレジストリを含むものを WrapAngles.DEFAULT_REGISTRY 追加しました。 この新しい属性は以前の属性に取って WRAP_ANGLE_REGISTRY代わるものであり、下流のユーザーの皆様には、できるだけ早く新しい形式に変更されることをお勧めします。

  • メソッド DAGCircuit.topological_nodes()DAGCircuit.topological_op_nodes() とメソッドは、ブール reverse 型の引数をサポートするようになりました。 この設定にすると True、メソッドは回路の出力側から入力側へと向かう、逆トポロジ順でノードを返します。 これにより、関数が返すノードのリストを明示的に逆順に変換したり、構造的に逆順になった新しいDAGを作成したりするといったオーバー DAGCircuit.reverse_ops()ヘッドを伴わずに、DAGを逆方向に反復処理するための直接的かつ効率的な方法が提供されます。

  • このアルゴリズムは CommutationChecker 、生成するパウリ演算子が可換であるかどうかを確認することで、パウリ演算子 PauliProductMeasurement に基づくゲート PauliGatePauliEvolutionGate 、および 間の可換性チェックを効率的に行うようになりました。 これにより、特にパウリ進化やパウリ積の測定を用いて表現される、パウリベースの計算形式の回路に対する最適化が可能となる。 なお、これらのパウリ演算に基づくゲートと他の標準的なゲートとの間の変換については、現時点では同様の効率的な方法で処理されていません。

  • に新しい引数 を CommutationChecker.commute()追加しました。 matrix_max_num_qubits これにより、交換チェック機能が指数関数的に計算コストの高い行列表現を計算することを許可される命令の範囲を制限することができる。 この新しい引数により、処理対象の命令数の上限(デフォルト値 max_num_qubitsNone 新たに に設定されており、上限なしを意味する)と、行列サイズの上限とを区別できるようになります。

  • 関数 generate_preset_pass_manager() および は、Clifford+T 基底セット transpile() へのコンパイル時に引数 unitary_synthesis_method を考慮するようになり、これによりカスタムユニタリー合成プラグインを呼び出すことが可能になりました。

  • VF2Layout そして VF2PostLayout 、サブグラフ同型マッチングの過程で、部分的な候補レイアウトのスコアを追跡する。 最適なレイアウトが見つからない場合には、これによる効果はほとんどありませんが、対称性の高いケースでは、最適な候補を選ぶためのレイアウトの評価コストを大幅に削減することができます。

  • VF2Layoutcall_limit 引数は、2つの要素から VF2PostLayout なるタプルにできるようになりました。最初の要素は最初の一致が見つかる前に使用され、その後、limit は2番目の要素に切り替わります。 レイアウトの評価が、より積極的な剪定を用いて実行時に即座に行われるようになったため、これは max_trials argument よりも信頼性の高い実行時間制限機能です。

その他の機能

アップグレードの注意

  • ConsolidateBlocks 現在、エントリ時に ConsolidateBlocks_qubit_map キー PropertySet を読み込む。 このキーとその値は公開されておらず、他のパスから読み取ったり書き込んだりしてはなりません。

C API アップグレードに関する注意事項

  • qk_target_entry_new_fixed() ターゲットエントリの名前を設定するための追加の name パラメータがあります。 固定角度のエントリは、正しく機能させるために、ほぼ例外なく標準ゲートの名前を上書きする必要があります。

回路アップグレードに関する注意事項

  • 標準回路ライブラリゲートの定義として生成される回路の名前は、現在 に設定されています None。 以前は、これらの回路はゲートと同じ名前を持っていたため、標準ゲートと名前が一致する不透明ゲートを非常に簡単に構築することができた。 これはQiskitにおける一般的な前提に反します。標準ゲート名は一意であるべきです。

  • s が a QuantumCircuit または b ControlFlowOpに追加されると、s DAGCircuitの内部表現が変更されます。 回路に格納され、将来のアクセス時に返されるオブジェクトは、必ずしもその回路に追加されたインスタンスと同じであるとは限りません。 オブジェクトが回路に追加された後は*、その*オブジェクトをその場で変更しようとしないでください。 これは、制御フローであれ他のオブジェクトであれ、回路を破損させる可能性が高い。

    Python オブジェクトに対して [ QuantumCircuitDAGCircuit[ 内に格納された状態で変更を加える場合と同様に、Rust がその変更を反映させるためには、その命令を回路に再割り当てする必要があります。 たとえば、回路上にすでに存在する BoxOp に注釈を追加する場合、トランスパイラ処理では、Rust 空間のオブジェクトを更新 DAGCircuit.substitute_node() するために を使用するようにする必要があります:

    from qiskit.circuit import QuantumCircuit, Annotation
    
    class MyAnnotation(Annotation):
        namespace = "my"
    
    qc = QuantumCircuit(2)
    with qc.box():
        qc.cx(0, 1)
    dag = qc.to_dag()
    
    # Modifications to the box's annotations in-place require
    # writing back the information to Rust space.
    box_node = next(dag.topological_op_nodes())
    box_node.op.annotations.append(MyAnnotation())
    
    # Write back the operation.
    dag.substitute_node(box_node, box_node.op)
  • Qiskit 2.3 では、制御フローの内部表現を、従来の Python 中心の形式から Rust ネイティブの形式へと移行しているため、jump を含む BoxOpjump ControlFlowOp 命令が存在する場合、トランスパイラのパフォーマンスが一時的に低下すると予想されます。 今後のQiskitのバージョンでは、パフォーマンスがさらに向上し、制御フロー演算を処理するトランスパイラ・パスにおける長年のAPI上の課題が解決されるものと期待しています。

  • インスタンス ControlFlowOp のブロックは、もはや や metadata フィールド name を追跡しなくなります。 これらはもともと、制御フロービルダーのインターフェースでは設定不可能であり、その存在は意図的なAPIというよりは、意図しない実装上の詳細に過ぎませんでした。

  • 引数 arg annotatedtrue に設定され、ネイティブの制御 True ゲートクラスが利用可能な場合、このメソッド AnnotatedOperation は null Gate.control() を返さなくなりました。 この変更は、標準回路ライブラリ全体における引数の annotated 使用方法と整合しており、制御アノテーションが付けられたゲートのより効率的な分解を可能にします。 影響を受けるゲートは以下の通りです:

    • 単一制御の HSSdgU3 YZ、、 SXRXRYRZ、、 Swap および CZ ゲート;
    • 二重 Z制御ゲート;
    • 任意に制御された Phase, CPhase, MCPhase, U1, CU1, MCU1 および MCMT ゲート。
  • 引数 のデフォルト annotated 値は、 から QuantumCircuit.control() に変更 None されました False。 これは実際の回路には影響しませんが、回路ライブラリ全体で使用 annotated されているデフォルト値と整合しています。

QPY アップグレードに関する注意事項

  • でデフォルトで使用されるQPY qpy.dump() のバージョン(QPY_VERSION)は、現在17です。

量子情報アップグレードに関する注意事項

  • クビット数に応じてスケーリングが劣る専用のショートカットではなく、最適化された一般ケースの実装を採用することで、全恒等パウルイ演算 Statevector.expectation_value() 子のパフォーマンスを向上させた。

トランスパイラ アップグレード ノート

  • [ VF2PostLayout at] における完全一致実行の最大呼び出し回数および試行回数の制限は、高度に対称的な optimization_level=3 試行回路が大きな結合マップにマッピングされることによる過度な実行時間を回避するために引き下げられました。

  • トランスパイラ・パ WrapAngles スのデフォルトのレジストリの推奨保存場所は、現在 です WrapAngles.DEFAULT_REGISTRY。 下位互換性を確保するため、従来の深くネストされた WRAP_ANGLE_REGISTRY パスは引き続き機能しますが、下流のパッケージでは新しい場所を使用することを推奨します。 以前のパスは、Qiskit 2.2 における見落としであり、公開APIの一部となることを意図していなかったモジュールを経由していました。

  • および VF2Layout へのインターフェースは VF2PostLayout 論理的には変わらないものの、引 max_trials 数は、 1値に設定された場合を除き、実行時の制限としての効果が大幅に弱まっています。 これは、このクラスが内部で使用する新しいオンザフライのスコア・アンド・プルーニングアルゴリズムにより、「完全な」レイアウトに遭遇する頻度が大幅に低下し、「試行」のカウントは、以前のものよりも誤り率が低い新しいレイアウトに遭遇した場合にのみ増加するためです。 代わりに、決定論的な実行時間制限として call_limit を使用すべきです。ここで、 max_trials は遭遇した完全なレイアウトを計測し、 call_limit は部分レイアウトの拡張を計測します。

各種アップグレードに関する注意事項

  • Python の最小サポートバージョンは、2025年10月に Python のサポート終了( 3.9 )およびQiskitにおける非推奨警告( 2.1 以降)に伴い、 3.10 に変更されました。

  • macOS x86-64 (Intel) のサポートがティア1からティア2に格下げされました。 Qiskitはこのプラットフォーム向けにテスト済みで事前コンパイル済みのWheelを提供し続けますが、テストはリリース時のみ実施され、変更のたびに実行されるわけではありません。 これにより、このプラットフォーム向けのホイールのリリースが遅れる可能性があります。

    この変更は、Appleがプラットフォームのサポート終了を開始したため、またQiskitチームには第一級サポートを継続するための開発者リソースやCIリソースが残されていないため実施されました。 macOS x86-64 のサポートは、 GitHub がランナーの提供を継続している間のみ可能です。 このサポートは2027年後半に終了する見込みです。

C API の非推奨化

  • この qk_transpiler_pass_standalone_vf2_layout() 関数は非推奨となりました。呼び出し元は、今後は を使用する必要があります qk_transpiler_pass_standalone_vf2_layout_average()。 新しい関数名は、スコアリングのヒューリスティックをより的確に表しており、API では、2 つの制限値形式を含む新しい設定 call_limitオブジェクト全体に対して、カプセル化されたアクセスが可能になっています。

    この非推奨化はユーザーにとって必ずしも必要ではありませんが、C APIが依然として明示的に不安定な状態にあるため、安定性の保証に到達する前に、C APIにおける非推奨処理とコンパイラ固有の警告の管理方法を試行する目的で使用しています。

回路の廃止予定

  • Qiskit 1.0 以降、メソッド Gate.control() および は引数 QuantumCircuit.control() を受け付け annotated 、その値は、 FalseTrue または のいずれか Noneになります。 現在、制御ゲートが存在する場合、の値にかかわらず、専用の制御ゲートクラス annotatedを使用して表現されます。例えば、の2制御版は XGate です CCXGate。 専用の制御ゲートクラスが存在しない場合、制御ゲートは のときは ControlledGateannotated=False として、 の AnnotatedOperation ときは として表現 annotated=Trueされる。 デフォルト値は、と annotated=None まったく同じように扱われます False

    Qiskit では 3.0、 の設定を許可せず annotated=None 、代わりにデフォルトを に変更します。 annotated=True これは推奨される手法である。制御回路の構築を回路設計段階からトランスパイラ段階へ遅延させ、追加の制御ゲート最適化を可能にするため、通常はより高品質な回路(特に階層的回路において)を実現する。

    ただし、以前の動作を維持 annotated=False するために明示的に設定することは引き続き可能です。

トランスパイラーの非推奨機能

ビルドシステムの変更

  • ソースからQiskitをビルドまたはパッケージングする場合、必要となるsetuptoolsのバージョンは、少なくとも 77.0 (2025年3月リリース)以上である必要があります。 これはPEP 639の新しいライセンスメタデータ仕様をサポートするものです。 この依存関係はビルド要件で指定されているため、手動での操作は不要です。

バグ修正

  • 回路パラメータのディープコピーが行われて __deepcopy__() いなかった 内の実装 QuantumCircuit を修正しました。 その結果、コピーされた回路内の BoxOp を変更しても、元の回路には影響しなくなりました。

  • DAGCircuit.apply_operation_back()apply_operation_back() そして、これからは確定的な circuit_to_dag() 順序で新しいエッジを追加します。 以前の動作では、特定のトランスパイラ・パス(例えば SabreSwap)が、非決定論的な順序でDAGを走査してしまう可能性がありました。

  • DAGCircuit.apply_operation_front() 従来の条件を含むノードを処理する際、無効な自己ループを挿入できなくなりました。

  • 固定角度パラメータを持つ 1q ゲートを含む Target パスで初期化された場合 Optimize1qGatesDecomposition の問題を修正しました。 以前は、ターゲット内のゲートが任意のパラメータ値に対応しているかどうかを確認していなかったため、このパス処理により、ターゲットの範囲外のゲートが出力される可能性がありました。 #14743 を修正しました。

  • ブロック ControlFlowOp 内のマルチ量子ビットゲートが、ソース回路の絶対インデックスを使用する代わりに、ローカル量子ビットインデックスに基づいて追跡してしまうという、パス BasisTranslator における不正な動作を修正しました。

  • 複数の回路で同じ ConsolidateBlocks インスタンスが再利用される問題を修正しました。これには、複数の回路を使用 transpile() する呼び出しや、プロセスベースの並列化が行われていないケースも含まれます。 Qiskit 2.2.2 に導入されたバグにより、異なる回路で同じインスタンスが再利用された場合、パスがパニックを起こすか、無効な出力が生成される問題が発生していました。

  • トランスペイラー・パス ConsolidateBlocks は、制御フロー演算を再帰処理する際、指定されたゲートがハードウェアでサポートされているかどうかを正しく評価するようになりました。

  • qpy.dump() QPY バージョン 16 以降では、標準ライブラリの gzip module を使用して開いたファイル .gz への書き込みが可能になりました。 詳細は #15157 を参照してください。

  • 逆関数を計算する際に、開制御ゲートの制御状態が保持されるよう、メソッド MCPhaseGate.inverse()MCU1Gate.inverse() および を修正しました。

  • ConsolidateBlocks レガシーキー run_list or PropertySet block_list において無効または古い分析が検出された場合、以前はパニックを起こしていましたが、今後は Python -space 例外を返すようになります。

  • Optimize1qGatesDecomposition . に対して大きすぎる回路上で実行 Targetしようとすると、Rustのスペース TranspilerError パニックではなく、. が発生するようになります。

  • メソッド SabreSwap.run() の実行後にインスタンス SabreSwap をpickle化しようとすると pickle エラーが発生していた SabreSwap 問題を修正しました。 #15071 を修正しました。

  • スケジューリングパスと ALAPScheduleAnalysisASAPScheduleAnalysis、操作が含まれていない回路を正しく処理するようになりました。 以前は、「有効期限が指定されていません」という誤った TranspilerError エラーメッセージが表示されていました。 #15145 を修正しました。

  • 演算子が単位行列であるかどうかを検証する際、入力の許容誤差値が正しく反映されていなかった is_unitary() 問題を修正しました。 このメソッドは、演算子を簡略化し、それが恒等式と等しいかどうかを確認する際に、指定された atol および rtol パラメータを正しく使用するようになりました。 これで #14107が修正されました。

  • トランスポイラー・パス UnitarySynthesis におけるバグを修正しました。このバグは、デフォルト以外の合成プラグイン(経由で指定された methodもの)が をサポート basis_gates しているが をサポートしていない場合に発生していました target。 このパスにより、ベースゲートが から target プラグインへ正しく渡されるようになりました。

  • 制御フロー演算内の回路ブロックが、外側の回路とは異なるレジスタで定義された場合に発生する可能性があった、回路テキストドローワーの不具合を修正しました。 このような状況は、例えば、演算を直接 ControlFlowOp 追加する場合や、トランスパイル後の回路において発生する可能性があります。

  • QPY バージョン 17 を使用する際、 SparseObservable型 の演算子を用いた PauliEvolutionGate シリアライズ機能の不具合を修正しました。

  • ``に格納された配列の長さが、 QkTargetOp QkTargetOp.params によって公開された数値と一致しないという QkTargetOp.num_params不整合を修正しました。 ワイルドカードパラメータは、現在 NAN で表され、配列の長さは常に となります QkTargetOp.num_params。 この不具合は、 2.3.0rc1 でのみ発生していました。

  • 幅が64ビットを超える型の ValueUint 古典的表現における回帰不具合を修正しました。 以前は、これらの型を持つ式の値が内部で意図せずdouble型の浮動小数点値に変換され、その結果、精度が失われていました。

  • この HighLevelSynthesis パスでは、ベースセットに応じて最適化指標が正しく選択されるようになりました。連続ベースの場合は2量子ビットゲート数、クリフォード+Tベースの場合はT数となります。 以前は、この情報が正しく反映されていなかったため、Tカウントが予想よりも低くなっていました。

  • 回路テキスト描画機能を修正し、古典的な配線方式の回路指示が別々のレイヤーに描画されるようにしました。

  • と の Operator 間の行列 Statevector 乗算(@)は、演算子を状態に適用し、その結果として を Statevector返します。

  • 1量子ビットの順列処理中にクラッシュする原因となっていた、 ElidePermutations トランスパイラ・パスのバグを修正しました。

  • 複数の回路を含む transpile() または PassManager.run() を実行するマルチプロセッシング環境において、 および Target の接続性が不連続な SabreLayout 状態でレイアウト処理を実行した際に発生する可能性のあるデッドロック問題を修正しました。 Linux では、複数の回路を指定して transpile() または PassManager.run() を実行した場合、これがデフォルトの動作となります。その他のすべてのプラットフォームでは、マルチプロセッシングコンテキストを使用するには明示的に設定する必要があります。

    これは、マルチプロセッシングとマルチスレッドを混在させる際に python/cpython#84559 発生する、CPythonの根本的な問題によるものでした。 通常、Qiskitは2種類の並列処理手法の混在を防ぐが、分離された接続性グラフを扱う場合、マルチスレッド化されたRustコード周辺でこの保護が欠けていた。

  • このメソッドは、以前は無視していた Statevector.to_dict() キーワード decimals 引数を、これからは考慮するようになります。

  • ターゲット内に持続時間が設定されたパラメータ化ゲートが含まれている場合、そのターゲットからスケジュールされた回路を可視化しようとするとエラー timeline_drawer() が発生していた問題を修正しました。

  • 「with SparseObservable 」演算子を使用した PauliEvolutionGate ラベル生成を修正しました。 ラベルには、連鎖した文字列形式(例: "XX"``"X0 X2")ではなく、キュービットの添え字付きパウリ演算子(例:)が表示されるようになり、異なる演算子を区別しやすくなりました。

  • Pauli.evolve() 特定のパラメータ化された回転ゲートを含む量子回路について、角度が π/2\pi/2 の倍数である場合、正しく処理されるようになりました。例えば、 RZGate(math.pi/2) または RZZGate(math.pi/2)。 以前はこれらがクリフォードゲートとして認識されず、エラーが発生していました。

  • BasePassManager パスからの出力結果が「falsy」ではなく「valid」であっても、元の入力プログラムに置き換えることはなくなりました。 パスが返される場合 0False またはその他の偽値の場合、結果は保持されるようになり、失敗を示すのは None のみとなります。

  • QuantumCircuit.compose()var_remap 数が指定された場合、命令 Delay 内で使用されている変数やストレッチが正しく再マッピングされるようになりました。

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