Skip to main content
IBM Quantum Platform

Qiskit SDK 2.0 リリースノート


2.0.3

前奏曲

Qiskit v2.0.3 は、 v2.0 マイナーバージョンシリーズのバグフィックスリリースです。

バグ修正

  • ApplyLayout はゼロ量子ビットを適用するケースを正しく処理するようになった。 Layout. の "layout" フィールドが等しくても、以前はレイアウトが設定されていないと主張していた。 PropertySet のフィールドが Layout() に等しくても、レイアウトが設定されていないと主張していた。

  • トランスパイラー・パスの ElidePermutations トランスパイラ・パスの問題を修正しました。 PermutationGate 演算が存在する場合に出力順列が正しく更新されないという問題を修正しました。 その結果、出力回路が不正確になり、 property_setvirtual_permutation_layout プロパティも不正確に設定されることになる。 より大きな PassManager の一部として実行された場合も、不正確な TranspileLayout で返される。 QuantumCircuit.layout を返すことになる。

  • のバグを修正。 HighLevelSynthesis パスのバグを修正。 Instruction オブジェクトを もし QuantumCircuit によって返された Instruction.definition カスタム・オブジェクトの Clbit オブジェクトが含まれていた場合、これらの古典的なビットは誤って Instruction.definitionQuantumCircuit の対応するインデックスにマッピングするのではなく QuantumCircuit.

  • のバグを修正しました。 PauliEvolutionSynthesisDefaultPauliEvolutionSynthesisRustiq プラグインで、 preserve_order=False. プラグインの動作が復元され、トランスパイルパイプライン全体を通して元の回路が保持されるようになった。

  • rustworkx の最小サポートバージョン 0.15 との互換性の問題を修正。 特定の入力で VF2LayoutVF2PostLayout は、以前は rustworkx 0.16.0 で追加された rustworkx メソッドを使用していました。このため、サポート対象としてリストされている古いリリースの rustworkx を使用するとエラーが発生します。

  • SabreLayout そして SabreSwap を使う回路にルーティング結果を適用してもパニックになることはありません。 expr.Var または Stretch オブジェクトを使用する回路にルーティング結果を適用してもパニックが発生しなくなりました。

  • qiskit.circuit.library.quantum_volume() を入力として扱うように更新された。 numpy.random.Generatorseed 引数の入力として扱うように更新された。 以前は、このようなジェネレーターの引数は TypeError になっていた。


2.0.2

前奏曲

Qiskit v2.0.2 は、 v2.0 マイナーバージョンシリーズのバグフィックスリリースです。

バグ修正

  • を修正した。 name 属性を修正した。 OrGate クラスの属性を修正し、このゲートを一意に識別するために "or" 。 以前は "and" に誤って設定されていたため、シンセシスプラグインと区別することができませんでした。 AndGate と区別したり、合成プラグインに OrGate.

  • トランスパイラー・パスの問題を修正。 ConsolidateBlocks トランスパイラー・パスの問題を修正した。 CXGate. 14413を修正

  • 回路機能のバグを修正 evolved_operator_ansatz(), qaoa_ansatz() および hamiltonian_variational_ansatz()で、パラメータにゼロの複素数成分が含まれていたバグを修正。 メソッドを使ってパラメータを SymPy。 ParameterExpression.sympify() メソッドに変換されない限りは問題なかった。


2.0.1

前奏曲

Qiskit v2.0.1 は、 v2.0.x リリースシリーズのマイナーバグフィックスリリースです。

バグ修正

  • テキスト回路ドロワーにおいて、コンパイル後のコントロール・フロー・オペレーションが終了する "ブラケット "が垂直方向にずれて表示されることがあったバグを修正した。 詳細は #14271を参照。

  • のバグを修正した。 UnitarySynthesis トランスパイラ・パスが synth_gates パラメータを無視して unitary ゲートのみを合成していたバグを修正した。 パスは、 synth_gates パラメーターで指定されたすべてのゲートを正しく合成するようになった。 修正 #14343

  • 不足していた repr のサポートを追加した。 Duration.

  • 不足していた Python の酸洗いのサポートを追加した。 Duration. これは、持続時間表現を使用する命令を持つ回路の並列変換を妨げていた。 delay() 命令での並列変換を妨げていた。

  • トランスパイラ・パスの問題を修正。 HighLevelSynthesis トランスパイラ・パスの問題を修正しました。 14338を修正

  • の瞬間量子多項式時間(IQP)回路の構築を修正した。 IQP であり iqp(). 以前の実装では、 TT ゲートのべき乗ではなく、 T\sqrt{T} ゲートのべき乗を誤って使用していた。

  • SabreLayout は、回路の name および metadata フィールドを正しく伝播するようになりました。

  • ユニタリー合成プラグイン SolovayKitaevSynthesis ユニタリー合成プラグインにおいて、異なる基底ゲートでプラグインを繰り返し実行すると、最初に実行した基底ゲートのみが不正に再利用されてしまう問題を修正した。 この問題は、基本的な近似値をキャッシュする際に基底ゲートを無視していたことに起因する。

  • トランスパイラー・パスの問題を修正。 SolovayKitaev トランスパイラー・パスの内部再帰で180度の回転に遭遇した場合にパスがクラッシュする問題を修正しました。

  • トランスパイラー・パスの問題を修正。 SolovayKitaev transpilerパスの問題を修正しました。生成された近似の位相が正しい値から π\pi。 これは内部 SO(3)SO(3) 表現に起因するもので、量子ビットゲート行列の正しい符号を得るためには追加の処理が必要である。 9552を修正

  • ストレッチ( QuantumCircuit.add_stretch()を参照) がプリセットのパスマネージャ (transpile() および generate_preset_pass_manager())を使用して正常にコンパイルできるようになりました。例えば、 IBM Quantum Eagle デバイスのようなアライメント制約を持つバックエンドをターゲットにしている場合、 ibm_sherbrooke

  • のフォールバック・エラー・ヒューリスティック VF2LayoutVF2PostLayoutでのフォールバック・エラー・ヒューリスティックは、エラー率が報告されていないときに使用され、以前は1以上のエラーを割り当てることができた。


2.0.0

前奏曲

この度、Qiskit v2.0.0 の性能と機能を向上させる新機能を搭載し、リリースする運びとなりました。 Qiskit v2.0.0 の主な特徴は以下の通り:

  • オブジェクトの構築と相互作用のための C APIを導入。 SparseObservable オブジェクトの構築と相互作用のための この最初のコンパイル言語インターフェイスは、Qiskitの進化における重要なマイルストーンであり、 v2.x リリースシリーズを通してその範囲を広げていく予定です。 初期のC APIは実験的なものであり、マイナー・バージョンでは私たちのバージョン戦略に従って APIが変更される可能性があります。
  • 新しい BoxOp これは、 OpenQASM 3 のボックスの概念に対応し、一連の命令をグループ化して後の処理やカスタム・スケジューリングに利用できる。 この演算子は、トワリング、ノイズ学習、ストレッチベースのスケジューリングなどのアプリケーションに有用である。
  • stretchDelay これは、タイミングを意識した命令間の関係を表現することを可能にします。 新しい Stretch 型は、既存の古典的な式システムを拡張し、回路構築時に設計意図を把握し、コンパイル時に解決することを可能にする。 詳細は OpenQASM のドキュメントを参照。
  • 合成の改善 Target のような任意の角度をサポートする分数2量子ビット基底ゲートが含まれている場合、合成を改善します。 RZXGate または RZZGateこれにより、合成回路のゲート数が大幅に削減される。
  • ランタイム性能の向上、特に回路構築ステップでの性能向上。 ベンチプレスベンチマークでは、Qiskit v1.3 と比較して、 2x のスピードアップを示しています。 この改善は、以下のようなラスト・ゲートのネイティブ表現の追加活用など、さまざまな貢献の組み合わせによって達成される。 UnitaryGateなどの追加的なRustゲート表現の活用や、レガシーなデータモデル要素の削除など、さまざまな貢献によって達成されています。

v1.0.0 リリース時に文書化されたセマンティック・バージョニング・ポリシーに沿って、このメジャー・リリースには、 v1.x リリース・シリーズと下位互換性のない API の変更も含まれています。 特に、 .c_if() メソッド、 qobj モジュール、 BackendV1qiskit.pulse、非推奨の V1 プリミティブ参照実装など、Qiskitデータモデルのいくつかの非推奨コンポーネントが削除された。 これらの削除やAPIの変更の詳細については、アップグレードリリースノートのセクションを参照してください。 削除されたAPIは、Qiskit v1.4.x リリースではまだサポートされており、さらに6ヶ月間バグフィックスが行われ、1年間セキュリティアップデートが行われます。

新機能

  • Linux aarch64 プラットフォームのサポートは、ティア1サポートに昇格した:

    /ガイド/install-qiskit#オペレーティングシステムサポート

    v1.x リリースシリーズでは、以前のサポートレベルであるティア2から。

  • 疎な観測値を構築し操作するための新しいC APIを導入した。 このリリースのAPIサーフェスは非常に小さいものですが、その範囲は SparseObservable SDKがC言語でパブリックインターフェイスを公開するのはこれが初めてであり、Qiskit Cインターフェイスの将来的な拡張の基礎を築くものだからです。 これはC言語初のパブリック・インターフェースであるため、実験的な機能であり、必要に応じてマイナー・バージョンのリリースでAPIが変更される可能性がある。

    詳細な構文と追加情報は、 C APIドキュメントにある。 100量子ビットの観測可能な 2 X0 Y1 Z2

    #include <complex.h>
    #include <qiskit.h>
    #include <stdint.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        // build a 100-qubit empty observable
        uint32_t num_qubits = 100;
        QkObs *obs = qk_obs_zero(num_qubits);
    
        // add the term 2 * (X0 Y1 Z2) to the observable
        complex double coeff = 2;
        QkBitTerm bit_terms[3] = {QkBitTerm_X, QkBitTerm_Y, QkBitTerm_Z};
        uint32_t indices[3] = {0, 1, 2};
        QkObsTerm term = {coeff, 3, bit_terms, indices, num_qubits};
        qk_obs_add_term(obs, &term);
    
        // print some properties
        printf("num_qubits: %u\n", qk_obs_num_qubits(obs));
        printf("num_terms: %lu\n", qk_obs_num_terms(obs));
    
        // free the memory allocated for the observable
        qk_obs_free(obs);
    
        return 0;
    }

回路の特徴

  • 新しい get_control_flow_name_mapping() Qiskitのコントロールフロー操作名と対応するクラスとのマッピングを返す便利な関数を追加しました。

    使用例:

    from qiskit.circuit import get_control_flow_name_mapping
    
    ctrl_flow_name_map = get_control_flow_name_mapping()
    if_else_object = ctrl_flow_name_map["if_else"]
    
    print(if_else_object)
    <class 'qiskit.circuit.controlflow.if_else.IfElseOp'>
  • 新しいサーキットメソッドを追加、 QuantumCircuit.estimate_duration()を追加した。 によって提供される持続時間に基づいて、スケジューリングされた回路上の最長経路を見つけることによって、回路持続時間を推定する。 Target. この方法は、制御フローや他の古典的なフィードフォワード演算を含まない単純な回路にのみ有効である。

    非推奨の QuantumCircuit.duration 属性の代わりにこのメソッドを使います。

    使用例:

    from qiskit import QuantumCircuit, transpile
    from qiskit.providers.fake_provider import GenericBackendV2
    
    backend = GenericBackendV2(num_qubits=3, seed=42)
    
    circ = QuantumCircuit(3)
    circ.cx(0, 1)
    circ.measure_all()
    circ.delay(1e15, 2)
    
    circuit_dt = transpile(circ, backend, scheduling_method="asap")
    duration = circuit_dt.estimate_duration(backend.target, unit="s")
    print("Estimated duration: ", duration)
  • 新しいクラスを2つ追加: BitFlipOracleGate そして PhaseOracleGate. BitFlipOracleGateBooleanExpression を直接合成する代わりに導入されましたが、Qiskit v2.0 では削除されています。 PhaseOracleGate の代替として追加された。 PhaseOracle後者は v2.x のリリースを通じて非推奨となるためである。 どちらのクラスも PhaseOracleただし、 evaluate_bitstring メソッドはもう存在しない。

    BitFlipOracleGate 位相反転オラクルの代わりにビット反転オラクルを合成する。つまり、1つの追加の量子ビットに作用し、オラクルによってエンコードされた式の値によって制御が決定されるcontrolled-X演算を適用していると見なすことができる。

    from qiskit import QuantumCircuit
    from qiskit.circuit.library.bit_flip_oracle import BitFlipOracleGate
    qc = QuantumCircuit(5)
    bool_expr = "(x0 & x1 | ~x2) & x4"
    oracle = BitFlipOracleGate(bool_expr)
    qc.compose(oracle, inplace=True)
    qc.draw('mpl')
    qc.decompose().draw('mpl')
    _images/release_notes-1_00.png _images/release_notes-1_01.png
    from qiskit import QuantumCircuit
    from qiskit.circuit.library.phase_oracle import PhaseOracleGate
    qc = QuantumCircuit(5)
    bool_expr = "(x0 & x1 | ~x2) & x4"
    oracle = PhaseOracleGate(bool_expr)
    qc.compose(oracle, inplace=True)
    qc.draw('mpl')
    qc.decompose().draw('mpl')
    _images/release_notes-2_00.png _images/release_notes-2_01.png
  • 新しいコントロールフロー op、 BoxOpとそれに関連する QuantumCircuit.box() メソッドとコンテキストマネージャーが qiskit.circuit.

    ボックスを構築する通常の方法は QuantumCircuit.box() を使うことだ:

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(5)
    
    with qc.box():
      # This box "uses" qubits 0 and 1.
      qc.x(0)
      qc.z(1)
    
    # Boxes can be assigned a duration.
    with qc.box(duration=100, unit="ms"):
      # This box "uses" qubits 2, 3 and 4.
      # Qubit 4 undergoes no operations.
      qc.cx(2, 3)
      qc.noop(4)

    Qiskitの "ボックス "は、 OpenQASM 3のボックスの概念にほぼ直接対応している。

    ボックスが "使用する "すべての量子ビットは、ボックスの開始時と終了時にタイミングが同期している。 言い換えれば、ボックスは使用する量子ビットごとに同じ "持続時間 "を持ち、開始点は同期している。 それ自身と同じスコープにある他の操作は、ボックスをアトミックとみなす。 BoxOp 操作がボックス全体のアクションとコミュケートされるなら、操作をボックス全体を通り越してコミュケートすることは有効だが、操作をボックスの中や外に移動させることは一般的に有効ではない。

    ボックスの主な用途は、後の処理のために一連の命令をグループ化すること(2量子ビットゲートの部分レイヤーをグループ化するなど)や、ブロック内の相対スケジューリングを使用しながら複合ブロックを1つのスコープでまとめてスケジューリングすること(グループ内の複数の量子ビットを動的に切り離すなど)である。 Qiskitのコンパイラはまだ、命令をグループ化したり、命令を BoxOp.

    トランスパイラーは、ボックスがある場合のルーティングとレイアウトをサポートし、ボックス内の最適化( optimization_level の設定まで)を行いますが、ボックスの原子構造周りの最適化はまだ行いません。 テキストと Matplotlib -ベースの回路引き出しサポートボックス。 QPY と OpenQASM 3へのエクスポートはサポートされていますが、 OpenQASM 3には現在、ボックス内のアイドリング量子ビットを指定する方法がありません(近い将来、仕様変更によってこの機能が追加されることが期待されています: 関連する機能提案を参照してください)。

  • に新しい引数 approximation_degree を追加。 CommutationChecker.commute() そして CommutationChecker.commute_nodes(). この引数によって、ゲートが通勤として評価されるときの近似しきい値を設定することができる。 のdocstringを参照のこと。 CommutationChecker のdocstringを参照のこと。

  • 新しい回路メソッドを追加、 QuantumCircuit.noop()これにより、量子ビットに対応する操作を追加することなく、制御フロービルダースコープ内で量子ビットを使用するように明示的にマークすることができる。

  • 従来のリアルタイム式モジュール qiskit.circuit.classical は定数式を表現できるようになった。 この Expr クラスには、式のconst-nessを示す const 属性が追加された。 これにより、特定のコンテキストにある式はコンパイル時に評価可能でなければならないということを強制することができる。

    すべての Var 式はすべてconstでないとみなされ、すべての Value 式はすべて const である。

    他のconst式のみで構成される式もconstである:

    from qiskit.circuit.classical import expr
    
    assert expr.bit_and(5, 6).const

    非制約式を含む式は非制約式である:

    from qiskit.circuit.classical import expr, types
    
    assert not expr.bit_and(5, expr.Var.new("a", types.Uint(5)).const
  • 従来のrealtime-expressionsモジュール qiskit.circuit.classical は、新しい型 Duration.

    モジュール qiskit.circuit には新しい Duration クラスが追加された。

    この lift() 関数は Duration インスタンスを作成します:

    from qiskit.circuit import Duration
    from qiskit.circuit.classical import expr
    
    expr.lift(Duration.dt(1000))
    # Value(Duration.dt(1000), Duration())
  • 古典的なリアルタイム式モジュール qiskit.circuit.classical は、 IEEE-754 倍精度浮動小数点値を新しい型 Float.

    この lift() 関数は、 Python floatから値式を作成するために使用することができます:

    from qiskit.circuit.classical import expr
    
    expr.lift(5.0)
    # >>> Value(5.0, Float())

    この型は、主にタイミング関連の表現(duration および stretch )で使用することを意図している。 ビット演算や論理演算とは互換性がないが、最初に明示的に他の演算にキャストすれば使用できる。

  • マルチ制御1量子ビット・ユニタリー・ゲートを分解する際に、2量子ビット・ゲートの数を削減。 例:

    • マルチ制御 YGate 10量子ビットの場合 CXGate カウントは56%減少した。
    • マルチ制御 HGate 10量子ビットの場合 CXGate カウントは56%減少した。
    • マルチコントロール SXGateSXdgGate 10量子ビットの場合 CXGate カウントは80%減少した。
    • マルチ制御 UGate 10量子ビットの場合 CXGate カウントは31%減少した。
  • 古典的なリアルタイム式モジュールは qiskit.circuit.classical は算術演算 add(), sub(), mul()そして div() を表現できるようになった。

    例:

    from qiskit.circuit import QuantumCircuit, ClassicalRegister, Duration
    from qiskit.circuit.classical import expr
    
    # Subtract two integers
    cr = ClassicalRegister(4, "cr")
    qc = QuantumCircuit(cr)
    with qc.if_test(expr.equal(expr.sub(cr, 2), 3)):
        pass
    
    # Multiply a Duration by a Float
    with qc.if_test(expr.less(expr.mul(Duration.dt(200), 2.0), Duration.ns(500))):
        pass
    
    # Divide a Duration by a Duration to get a Float
    with qc.if_test(expr.greater(expr.div(Duration.dt(200), Duration.dt(400)), 0.5)):
        pass

    その他の例については、上にリンクしたモジュール・レベルのドキュメントを参照のこと。

  • のコンストラクタに新しいオプション引数が追加された。 UCGate のコンストラクタに新しいオプション引数 mux_simp が加わった。 この最適化はデフォルトで有効になっており、マルチプレクサから不要な制御を識別して削除し、CXゲートの数と回路の深さを削減します。 Initialize.

  • をサポートしています。 PauliEvolutionGate はネイティブに SparseObservableを入力としてサポートするようになった。 これは、位相回転の制御として実装され、Paulisの観点から射影器を明示的に展開するよりも少ないゲートで済む。 例:

    from qiskit.circuit.library import PauliEvolutionGate
    from qiskit.quantum_info import SparseObservable
    
    obs = SparseObservable("001")
    evo_proj = PauliEvolutionGate(obs, time=1)
    print(evo_proj.definition.draw())
  • 新しい式ノード Stretch が追加され、 stretch 変数を表現できるようになった。 新しい stretch 変数を作成するには、次のようにします。 QuantumCircuit.add_stretch(). 結果の式は Durationduration 引数として使える。 delay().

    たとえば、2つのバリアの間にある一連のゲートが、実際の持続時間がどうであれ、左揃えになるようにするには、次のようにする:

    from qiskit import QuantumCircuit
    from numpy import pi
    
    qc = QuantumCircuit(5)
    qc.barrier()
    qc.cx(0, 1)
    qc.u(pi/4, 0, pi/2, 2)
    qc.cx(3, 4)
    
    a = qc.add_stretch("a")
    b = qc.add_stretch("b")
    c = qc.add_stretch("c")
    
    # Use the stretches as Delay duration.
    qc.delay(a, [0, 1])
    qc.delay(b, 2)
    qc.delay(c, [3, 4])
    qc.barrier()

    この Stretch 式は既存の Var 定数であり、常に型が Duration. これは他の式で使用することができ(例えば、数値定数と掛け合わせることができる)、また QuantumCircuit スコープを完全にサポートしています(たとえば、制御フロー・スコープでキャプチャしたり、制御フロー・スコープ内で宣言したりできます)。

    その他の背景や例については、 OpenQASM 3言語仕様を参照

  • 追加 Gate 単一レジスタ算術ゲートのバージョンを追加した。 QuantumCircuit を追加した。 これらは:

プリミティブ機能

  • 新しい to_bool_array() メソッドを追加した。 BitArray クラスを追加しました。このメソッドは、ビット配列をブーリアン NumPy 配列として返します。 order 引数は、出力配列のエンディアンを指定するために使用できる。

プロバイダー機能

  • dt プロパティを設定する機能を追加。 GenericBackendV2dt プロパティを設定する機能が追加されました。 使用例:

    from qiskit.providers.fake_provider import GenericBackendV2
    
    backend = GenericBackendV2(
      num_qubits = 5,
      basis_gates = ["cx", "id", "rz", "sx", "x"],
      dt = 2.22*e-10,
      seed = 42
    )

量子情報の特徴

合成機能

トランスパイラ機能

  • 任意の角度を含む Target のような任意の角度を含む2量子ビット基底ゲートを含むオブジェクトを扱うサポートが追加された。 RZZGateトランスパイラ・パスに ConsolidateBlocks トランスパイラパスに 以前のパスでは、分解に必要なゲート数を正しく見積もることができなかった。 UnitarySynthesis ブロックを最適化できる可能性があるにもかかわらず、ブロックが統合されないことになる。 内部的には、ゲート数の見積もりは TwoQubitControlledUDecomposer クラスを使用します。

    例:

    from qiskit import QuantumCircuit
    from qiskit.transpiler import generate_preset_pass_manager
    from qiskit.transpiler.passes import ConsolidateBlocks
    
    qc = QuantumCircuit(2)
    qc.rzz(0.1, 0, 1)
    qc.rzz(0.2, 0, 1)
    # basis_gates contains fractional gate (rzz)
    consolidate_pass = ConsolidateBlocks(basis_gates=["rz", "rzz", "sx", "x", "rx"])
    block = consolidate_pass(qc)  # consolidate the circuit into a single unitary block
    block.draw(output='mpl')
    
    pm = generate_preset_pass_manager(
        optimization_level=2, basis_gates=["rz", "rzz", "sx", "x", "rx"]
    )
    tqc = pm.run(qc)  # synthesizing the circuit into basis gates
    tqc.draw(output='mpl')
  • のような2量子ビット分数基底ゲートのサポートを追加した。 RZZGateトランスパイラー・パスに UnitarySynthesis トランスパイラ・パスに 分解は TwoQubitControlledUDecomposerを使って行われ、標準的な基底ゲートとカスタム基底ゲートの両方をサポートしている。

    例:

    from qiskit import QuantumCircuit
    from qiskit.quantum_info import random_unitary
    from qiskit.transpiler.passes import UnitarySynthesis
    from qiskit.converters import circuit_to_dag, dag_to_circuit
    
    unitary = random_unitary(4, seed=1)
    qc = QuantumCircuit(2)
    qc.append(unitary, [0, 1])
    dag = circuit_to_dag(qc)
    
    # basis_gates contains fractional gate (rzz)
    circ = UnitarySynthesis(basis_gates=['rzz', 'rx', 'rz']).run(dag)
    dag_to_circuit(circ).draw(output='mpl')
  • 新しいトランスパイラー・パスを追加、 LightConeこれは、量子ビットのサブセットまたは特定のパウリ文字列を測定したときの回路のライトコーンを返します。

    例えば、次のような回路の場合:

    _images/release_notes-3.png

    パスを通すことで、結果に影響しないゲートをなくすことができる:

    from qiskit.transpiler.passes.optimization.light_cone import LightCone
    from qiskit.transpiler.passmanager import PassManager
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(3,1)
    qc.h(range(3))
    qc.cx(0,1)
    qc.cx(2,1)
    qc.h(range(3))
    qc.measure(0,0)
    
    pm = PassManager([LightCone()])
    new_circuit = pm.run(qc)
    new_circuit.draw("mpl")
    _images/release_notes-4.png
  • 新しい引数 max_block_widthBlockCollector クラスと CollectLinearFunctionsCollectCliffords トランスパイラ・パスに新しい引数を追加した。 この引数により、ノードのブロックが定義される最大量子ビット数を制限することができる。

    例:

    from qiskit.circuit import QuantumCircuit
    from qiskit.transpiler.passes import CollectLinearFunctions
    
    qc = QuantumCircuit(5)
    qc.h(0)
    qc.cx(0, 1)
    qc.cx(1, 2)
    qc.cx(2, 3)
    qc.cx(3, 4)
    
    # Collects all CX-gates into a single block 
    qc1 = CollectLinearFunctions()(qc)
    qc1.draw(output='mpl')
    
    # Collects CX-gates into two blocks of width 3 
    qc2 = CollectLinearFunctions(max_block_width=3)(qc)
    qc2.draw(output='mpl')
  • トランスパイラー・パスに新しいオプション collect_from_back を追加。 CollectMultiQBlocks を追加した。 True に設定すると、ブロックは逆方向、つまり出力から回路の入力に向かって集められる。 ブロックは通常のトポロジーの順序に従って報告される。 これにより、パスが提供する柔軟性が増し、回路再合成手法と組み合わせることで最適化の機会が増える。

  • に新しい引数 approximation_degree を追加した。 CommutationAnalysis. この引数で、ゲートが評価されるときの近似しきい値を設定することができる。 詳しくはクラスのドキュメントを参照。

  • 新しいトランスパイラー・パス、 ContractIdleWiresInControlFlowで利用できる。 qiskit.transpiler.passes. このパスでは、セマンティクスが許可し、かつ制御フロー動作の間中、量子ビットがアイドルのままであれば、制御フローブロックから量子ビットを削除する。 以前は、プリセット・パス・マネージャーのルーティング・ステージが、パスの動作方法の意図しない副作用として、アイドル・クビットを除去することがあった。 現在では、この動作は最適化パスの一部として適切に処理される。

  • "default" ルーティング・プラグイン・ステージが追加された。 Qiskit v2.0.0 では、これは単に以前のデフォルト "sabre" のエイリアスです。 基本的なデフォルトアルゴリズムは、Qiskit v2.x リリースシリーズの過程で、一部またはすべてのターゲットで変更される可能性がありますが、現在の動作を維持するために、常に明示的に routing_method="sabre" を設定できます。

  • 新しい "default" 翻訳プラグインステージを追加。 Qiskit v2.0.0 では、これは以前のデフォルト "translator" のエイリアスです。 基本的なデフォルトアルゴリズムは、Qiskit 2.x シリーズの過程で、一部またはすべてのターゲットに対して変更される可能性がありますが、現在の動作を維持するために、常に translation_method="translator" を明示的に設定することができます。

  • トランスパイラー・パスは HighLevelSynthesis 型のオブジェクトを合成するようになった。 AnnotatedOperation 型のオブジェクトを合成するようになりました。

  • PassManager.run()property_set のようなオブジェクトに設定することができる。 Mapping-オブジェクトに設定し、パイプラインの PropertySet. これは、部分的に適用されたコンパイルを再開したり、以前のコンパイルで行われた特定の分析を新しい場所で再利用するために使用できる。

  • スケジューリング・パス PadDelayPadDynamicalDecoupling のコンストラクターに新しい引数が追加された: targetdurations。 これらは Target または InstructionDurations をそれぞれ指定する。 パスが実行されたときの命令持続時間にアクセスするには、引数の1つが必要である。

  • 新しい seconds_to_dt() メソッドを Target クラスに新しいメソッドを追加しました。 これは、秒単位の継続時間を、属性で指定されたシステム時間分解能の離散化された時間ステップ数に変換するために使用されます。 Target.dt 属性で指定されたシステム時間分解能の離散化された時間ステップ数に変換するために使用されます。 これは通常 InstructionProperties.durationdt の単位に変換するのに便利である。

  • トランスパイラー・パスは Split2QUnitaries トランスパイラー・パスは、検討中のユニタリーが1つのゲートとして書ける場合を扱えるようにアップグレードされました。 SwapGate ゲートと2つの単一量子ビットゲートとして書ける場合を扱えるようになりました。 この場合、ユニタリーは分割され、仮想スワッピングも適用される。 ElidePermutations. この機能は、 :class`.Split2QUnitaries` のコンストラクタにある新しい引数、 split_swap を使って制御することができる。この引数を使えば、スワップ等価ゲートの分割を無効にすることができる。

各種 機能

  • qiskit.utils Qiskitの並列化設定をよりよく制御・検査するためのユーティリティが追加されました。 multiprocessing の並列化設定をよりよく制御・検査するためのユーティリティが含まれています。 特に should_run_in_parallel() を使って parallel_map() (およびパス・マネージャー)が適切な入力に対してサブプロセスを起動するかどうかを問い合わせ、コンテキスト・マネージャー should_run_in_parallel.override() を使うことで、この決定に関するほとんどのシステムとユーザー設定を一時的に上書きすることができる。

    追加関数、 default_num_processes()は、Qiskitがプロセスベースの並列処理に使用するサブプロセスのデフォルトの最大数を読み込みます。

  • 新しい環境変数 QISKIT_IGNORE_USER_SETTINGS は、 import qiskit にあるユーザー設定ファイルを読み込むかどうかを制御する。 文字列 true に設定すると、設定ファイルは読み込まれません。 これは、テストのためなど、Qiskitの特定のインスタンスをシステム環境から隔離するのに便利です。

アップグレードの注意

  • Qiskit v2.0 は Linux i686 および 32 ビット Windows のサポートを終了しました。 Qiskit v2.0.0 以降、Qiskit の実行には 64 ビットプラットフォームが必要です。 これは科学的な Python コミュニティのトレンドに沿ったもので、Qiskit はますます複雑化する量子コンピューティングハードウェアの性能向上に集中することができる。

    Qiskit v1.4、32ビットプラットフォームのサポートは終了(2025年9月)まで継続しますが、この 2.0.0 リリースから、Qiskitは32ビットプラットフォーム用のコンパイル済みバイナリを公開しなくなり、32ビットプラットフォームでのソースビルドの成功は保証されません。

  • Qiskit をソースからビルドするためにサポートされる Rust の最小バージョンは v1.79 になりました。 これは、Qiskit v1.x リリースシリーズの以前の最小サポート Rust バージョンである v1.70 から引き上げられています。

  • Qiskit Pulse は、Qiskit v1.3 で非推奨となったため、このリリースで完全に削除されました。 これには、すべてのパルスモジュールファイル、パルスの可視化機能、QPYでの ScheduleBlock およびパルスゲートのシリアライズとデシリアライズのサポート、以下の校正管理が含まれます。 QuantumCircuit, Target および DAGCircuitおよびパルスベースの偽バックエンドが含まれます。 パルスに関連する削除されたコンポーネントの詳細については、以下の対応するセクションを参照してください。

    なお、Pulseの非推奨化に伴い、当初計画されていたPulseからQiskit Dynamicsへの移行は、Qiskit Dynamicsの開発優先順位のため保留となりました。 Qiskit Pulseを、サポートするバックエンドのフロントエンドとして、またはその他の用途で使用したいユーザーは、pulse機能を含む v2.0.0 以前のQiskitバージョンでも使用できます。

  • モジュールの関数 sequenceschedulecompiler モジュールはQiskit v1.3 で非推奨となったため削除されました。 彼らは、バックエンドの定義を使って回路をパルス成分に変換できることに依存していたが、この機能はもはや存在しない。 そのため、代替案はなく、削除された。 これらの削除はPulseパッケージに関するもので、Qiskit 2.0 でも削除されていることに注意してください。

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

  • BitRegister およびそのサブクラスは、 Python への変換および からの変換により、 Python に公開される各インスタンスが再割り当てされる可能性があるため、 is のチェックではもはや比較可能であることが保証されない。

  • Bit そして Register (およびそのサブクラス)はもはやサブクラス化できない。 これは決してサポートされることを意図した動作ではないし、そうすることはQiskitに不特定の動作を引き起こすことになる。 クラスの実装の詳細としてこれを行うことはもはや不可能である。

  • のインスタンスを作成することはできなくなった。 Bit クラスと Register クラスのインスタンスを作成することはできなくなりました。 これらのクラスを直接インスタンス化することは、サポートされていないものとして明確に文書化されていた。 Qiskit v2.0.0 からは、これができなくなりました。

  • qiskit.circuit.classicalfunction モジュールは Qiskit v1.4 で非推奨となったため削除されました。 これには、 ClassicalFunction クラス、それに関連する classical_function 関数、 BooleanExpression クラスが含まれる。 この変更は、 tweedledum ライブラリへの依存を取り除くために行われました。 ライブラリは、Qiskit がサポートしているすべてのプラットフォームと Python バージョンとの互換性がなくなっています。 ClassicalFunction でのみ使用されていました。 PhaseOracleでのみ使用されていたが、 string 形式の式のみを受け付けるようにアップグレードされた(以下のリリース・ノートを参照)。 BooleanExpression は新しい BitFlipOracleGate クラスに取って代わられました。

  • この PhaseOracle クラスは tweedledum ライブラリに依存しなくなりました。 インターフェイスが簡素化され、 synthesizer パラメータを受け付けなくなり、 expression パラメータは文字列のみとなった。 Qiskit v1.4 で非推奨とされていた ClassicalFunction 型は、Qiskit v2.0 で削除されました。

    これらのアップグレードにもかかわらず、クラスの標準的な使い方は変わっていません。 PhaseOracle クラスの標準的な使い方は変わりません:

    from qiskit.circuit.library.phase_oracle import PhaseOracle
    bool_expr = "(x0 & x1 | ~x2) & x4"
    oracle = PhaseOracle(bool_expr)
    oracle.draw('mpl')
    _images/release_notes-5.png

    この変更は合成効果に影響する可能性がありますが、Qiskitがサポートするすべてのプラットフォームと Python バージョンとの互換性のために必要であったことに注意してください。

  • のコミュテーションのチェックに使用されるメトリックを更新した。 CommutationChecker. 2つのゲートは、転流の平均ゲート忠実度が (1 - 1e-12) 以上であれば、転流すると仮定される。 この値は、忠実度計算における四捨五入の誤差を考慮し、また、以下の値との一貫性を保つために選ばれている。 RemoveIdentityEquivalent および TwoQubitWeylDecomposition. 詳しくはクラスのドキュメントを参照。

  • メソッド QuantumCircuit.measure_active() メソッドは、作成する古典レジスタの名前を変更した。以前の名前は OpenQASM 予約語と衝突していたからだ。 measure の代わりに meas と呼ばれるようになった。 measure_all().

  • この DAGCircuit.control_flow_op_nodes() メソッドは、それが空であっても常にリストを返すように更新された。 以前は、空の場合は None を返し、空のリストを返すことはなかったので、特別な処理が必要だった。 Qiskit v1.x と v2.x の両方で空虚さを明示的にテストする必要があるなら、できる:

    control_flow_nodes = dag.control_flow_op_nodes()
    if not control_flow_nodes:
        # There are no control-flow nodes.
        pass
  • BlueprintCircuit.copy_empty_like() を返すようになった。 QuantumCircuit を返すようになりました( BlueprintCircuit)。 この変更は、ブループリント回路の「空の」コピーを扱うと回路データが再構築されるという予期せぬ動作に対処するものです。 なお、 BlueprintCircuit.copy() は依然として BlueprintCircuit を返す。 のレガシー・エントリーを構築するために使用される内部型であるため、 BlueprintCircuit はパブリック・クラスではありません。 qiskit.circuit.library このことは NLocal そして ZZFeatureMap. をご参照ください。 qiskit.circuit.library を参照してください。 修正 #13535

  • 内部関数 qiskit.circuit.add_control.add_control は削除された。 この関数はパブリックAPIの一部ではなく、保持すべき前提条件が脆弱で、バグの一般的な原因となっていた。 add_control(SomeGate(...), ...) SomeGate(...).control(...)Gate.control() に変更すべきである。

  • この ParameterExpression.sympify() メソッドは、 sympy がインストールされていない場合、 MissingOptionalLibrary 例外を発生させることができるようになった。 Qiskit v1.x のリリースでは、 sympy は常にインストールされていることが保証されていましたが、 v2.0.0 以降、これはもはやハード要件ではなくなっており、この方法を使用する場合にのみ必要になる可能性があります。 この機能は明示的に sympy を必要とするため、このメソッドを使用するには sympy がインストールされていることを確認する必要がある。

  • 非推奨の DAGNodedag 引数は DAGNode クラスとそのサブクラスから削除されました: DAGOpNode, DAGOutNodeおよび DAGInNode.

    dag パラメーターは、これらのオブジェクトを構築する際のオプション引数であったが、 v1.3 リリース以降は使用されず無視され、 v1.4 リリース以降は非推奨となっている。

  • 以下の QuantumCircuit メソッドを使用します:

    • cast
    • cbit_argument_conversion
    • cls_instances
    • cls_prefix
    • qbit_argument_conversion

    は、Qiskit 1.2 で非推奨となったため、削除されました。 これらのメソッドは内部的なヘルパー関数であり、パブリックAPIになることは意図されていなかった。 代わりの選手はいない。

  • 非推奨の InstructionGatedurationunit が削除されたため、 unitduration の引数を任意の qiskit.circuit.Instruction またはサブクラスに設定することはできなくなりました。 これらの属性はQiskit v1.3.0 で非推奨となり、カスタム実行期間とその期間の単位を個々の命令に添付するために使用されていました。 しかし、ゲートの持続時間の真実の源は BackendV2Target であり、バックエンドでサポートされている各命令の継続時間が含まれています。 通常、命令の継続時間はユーザーが調整できるものではなく、バックエンドの不変のプロパティである。 以前、この機能を使ってさまざまなゲート・デュレーションを試したことがある場合は、指定されたフィールドの InstructionProperties.duration フィールドを Target フィールドを変異させることができます。 (単位は常に Target.)

  • の非推奨属性は qiskit.circuit.InstructionGate: condition は削除されました。 この機能は IfElseOp クラスに取って代わられた。 この属性は v1.3.0 リリースで非推奨となりました。

  • 非推奨の Instruction および Gate: c_ifcondition_bits は削除されました。 これらのメソッドは、 v1.3.0 リリースで非推奨となった。 この機能は IfElseOp クラスに取って代わられた。 例えば、以前は Instruction.c_if()

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2, 2)
    qc.h(0)
    qc.x(0).c_if(0, 1)
    qc.z(1.c_if(1, 0)
    qc.measure(0, 0)
    qc.measure(1, 1)

    これは、以下のように記述できます。

    qc = QuantumCircuit(2, 2)
    qc.h(0)
    with expected.if_test((expected.clbits[0], True)):
        qc.x(0)
    with expected.if_test((expected.clbits[1], False)):
        qc.z(1)
    qc.measure(0, 0)
    qc.measure(1, 1)
  • 非推奨のメソッド InstructionSet.c_if は削除されました。 このメソッドは 1.3.0 リリースで非推奨となった。 この機能は、回路の古典的な状態を記述できる IfElseOp クラスに取って代わられました。

  • Qiskit v2.0.0 のパルス除去の一環として、 calibrations プロパティが QuantumCircuit, DAGCircuit および DAGDependency クラスから削除されました。 これに加えて、 has_calibration_for メソッドが QuantumCircuitDAGCircuit クラスから削除され、 add_calibration QuantumCircuit.

  • qiskit.circuit.classicalfunction モジュールが取り外された。 このモジュールは tweedledum ライブラリに依存しており、新しいバージョンの Python とは互換性がありません。 代わりに PhaseOracleGate クラスと BitFlipOracleGate クラスを使ってブーリアン式から回路を生成することができる。

  • の内部表現は UnitaryGateQuantumCircuit の内部表現が変更された。 回路に格納されたオブジェクトは、回路に追加されたオブジェクトと必ずしも共通参照を共有しなくなる。 この動作は決して保証されておらず UnitaryGate オブジェクトを直接、あるいは参照によって変更することは常に不健全であり、特に行列を変更する場合には回路を破壊する可能性が高かった。 回路内のエレメントを変異させる必要がある場合は(非効率的でエラーが発生しやすいのでお勧めしない )、次のようにする:

    from qiskit.circuit import QuantumCircuit
    from qiskit.quantum_info import random_unitary
    from qiskit.circuit.library import UnitaryGate
    import numpy as np
    
    qc = QuantumCircuit(2)
    qc.unitary(np.eye(2, dtype=complex))
    
    new_op = UnitaryGate(random_unitary(2))
    qc.data[0] = qc.data[0].replace(operation=new_op)

    にも適用される。 DAGCircuitしかし、代わりに DAGCircuit.substitute_node() を使うこともできる。

  • CircuitInstruction.params 属性は CircuitInstruction を含む UnitaryGate を含む operation を含むfor属性は、ゲートの基礎となるユニタリー行列を含まなくなります。 これは、ゲートの内部表現が行列オブジェクトをパラメータとして扱わなくなったためである。 ゲートのマトリックスにアクセスする必要がある場合は CircuitInstruction.matrix または UnitaryGate.params フィールドを経由して行うことができる。 CircuitInstruction.operation.

プリミティブのアップグレードに関する注意事項

  • BackendV1BackendSamplerV2BackendEstimatorV2 クラスは backend 入力引数で BackendV1 型の入力を受け付けなくなりました。

  • Qiskit v1.2 で非推奨とされていた、原始的な V1 実装と V1-exclusive 非バージョン型のエイリアスが削除されました。 これらのインターフェイスは、 V2 に取って代わられた。 この削除には、 V1 インターフェースを実装する以下のクラスが含まれます:

    また、次のような非バージョン型のエイリアスもある:

    この削除は、明示的にバージョン管理された BaseEstimatorV1 および BaseSamplerV1 抽象インターフェース定義や、関連する結果クラスやジョブクラスには影響しない。 バージョン管理されていない BaseEstimator のような V1-type のエイリアスを使用している場合は、バージョン管理された型(BaseEstimatorV1).

    さらに、以下のユーティリティ関数が削除された。 これらの関数は、プリミティブ V1 の実装でのみ使用されていた:

プロバイダー向けアップグレードノート

  • configuration メソッドは BasicSimulator メソッドは Qiskit v1.3 で非推奨となったため削除されました。 このメソッドは、 BackendConfiguration インスタンスを返します。このクラスは、廃止された BackendV1 ワークフローの一部であり、Qiskit v2.0.0 でも削除されています。 個々のコンフィギュレーション・エレメントは、バックエンドから直接、あるいは含まれる Target インスタンス (backend.target) から直接取得できるようになりました。

  • run_experiment メソッドは削除された。 BasicSimulator のメソッドは削除された。 このメソッドは、 QasmQobjExperiment クラスのインスタンスを入力引数として受け取りました。このクラスは Qiskit v1.2 以降非推奨となり、Qiskit v2.0.0 では Qobj ワークフローとともに削除されました。

  • BackendV1 モデルは Qiskit 1.2.0 で非推奨となったため削除された。 これには、 BackendV1 クラスと、関連するモジュールやユーティルが含まれます。 BackendV2 モデルに取って代わられたからです。 削除されたリストは以下の通り:

    • BackendV1 クラス:削除されたモデルの中核

    • qiskit/providers/models のすべての要素は、 BackendV1 モデルの構成要素を表すために使用されたものである:

      • BackendConfiguration
      • BackendProperties
      • BackendStatus
      • QasmBackendConfiguration
      • PulseBackendConfiguration
      • UchannelLO
      • GateConfig
      • PulseDefaults
      • PulseQobjDef
      • Command
      • GateProperties
      • Nduv
      • JobStatus:このクラスは、より広く使用されている JobStatus
      • PulseDefaults
    • BackendV2Converter クラス: BackendV1 から BackendV2

    • convert_to_target 関数:レガシーな コンポーネントから Target レガシー BackendV1 コンポーネント ( BackendConfigurationBackendProperties など) からインスタンスを構築する

    • BackendPropertyError および BackendConfigurationError: 削除されたクラスにリンクされた例外

  • バックエンドは BasicSimulator バックエンドはもはや古典的な制御フローをシミュレートできない。 .c_if()/.condition を使用して制御フローをモデル化することのみをサポートしていましたが、現在この構造はQiskitデータモデルから削除されています。

  • 非推奨の BackendV1 に基づくすべての偽のバックエンド・クラスは、モジュールから削除されました。 providers.fake_provider モジュールから削除されました。 これらのクラスはQiskit 1.2 以降非推奨となっており、非推奨の BackendV1 ワークフローの一部でした。 テストでの使用は GenericBackendV2 クラスに置き換えられました。 BackendV2 のカスタムインスタンスを作成することができます。 BackendV2.run(). 撤去の影響はある:

    • 基本クラス:

      • FakeBackend
      • FakePulseBackend
      • FakeQasmBackend
    • 特別なテスト目的のための偽のバックエンド:

      • Fake1Q
      • FakeOpenPulse2Q
      • FakeOpenPulse3Q
    • レガシーな偽のバックエンド:

      • Fake5QV1
      • Fake20QV1
      • Fake7QPulseV1
      • Fake27QPulseV1
      • Fake127QPulseV1
  • Qiskit v2.0.0 のパルス除去の一環として、以下のメソッドが削除されました:

    • qiskit.providers.BackendV2.instruction_schedule_map
    • qiskit.providers.BackendV2.drive_channel
    • qiskit.providers.BackendV2.measure_channel
    • qiskit.providers.BackendV2.acquire_channel
    • qiskit.providers.BackendV2.control_channel
  • Qiskit v2.0.0 のパルス除去の一環として、パルスのサポートは以下の項目から削除されました。 GenericBackendV2. これには、カスタム校正(calibrate_instructions 引数)とパルス・チャンネル属性(drive_channel, measure_channel, acquire_channel, control_channel )でバックエンドを初期化する機能が含まれます。

  • Qiskit v1.1.0 以降非推奨となった抽象基底クラス Provider および ProviderV1 を削除。 これらのインターフェイス定義が提供する抽象化は、 namebackendsget_backend() メソッドという属性を含むだけで、大きな価値を提供するものではなかった。

    概念としてのプロバイダーは、バックエンドの集合体として存在し続ける。 現在プロバイダーを実装している場合は、 ProviderV1 を実装の親クラスとして削除するだけで、コードを調整することができます。

    この変更の一環として、後方互換性のために get_backend 。 例:

    def get_backend(self, name=None, **kwargs):
      backend = self.backends(name, **kwargs)
      if len(backends) > 1:
        raise QiskitBackendNotFoundError("More than one backend matches the criteria")
      if not backends:
        raise QiskitBackendNotFoundError("No backend matches the criteria")
      return backends[0]

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

  • この qpy.load() QPY v10, v11, v12 のペイロードが渡され、 symengine シンボリック表現が使用され、 symengine がインストールされていない場合、 MissingOptionalLibrary 例外が発生するようになりました。 また、 v13 の前に他のQPYペイロードに sympy がインストールされていない場合も例外が発生する。 Qiskit v1.x リリースでは、 symenginesympy は常にインストールが保証されていました。 しかし、 v2.x からは、これは難しい要件ではなくなっており、 symengine を使用して生成されたQPYファイルをデシリアライズする場合にのみ必要になる可能性があります。 これらのQPYペイロードの解析には、 symengine が必要である。これは、 v10、 v11、 v12 のフォーマット仕様の一部であるためである。 ペイロードがそれを必要とする場合、互換性のあるバージョンの symengine (0.11.0 または 0.13.0) をインストールすることが唯一の選択肢です。 同様に、 sympyParameterExpression エンコーディングに使用された。

  • 最小QPY互換バージョン、 QPY_COMPATIBILITY_VERSIONが10( v1.x リリース要件)から13に引き上げられました。 このバージョンは、QPYの最小バージョンを制御します。 qpy.dump() 関数で放出できるQPYの最小バージョンを制御する。 つまり qpy.dump() はこのリリースではQPY v13、 v14。 QPY v13 は、Qiskit v1.3.x および v1.4.x と互換性があります。つまり、QPY v13 と Qiskit v2.x で生成されたペイロードは、Qiskit v1.x リリースシリーズでロードできます。

    QPYバージョン10~12では、オブジェクトのシリアライズを生成するために sympy または symengine ライブラリのいずれかを必要とするため、この変更が必要でした。 ParameterExpression しかし、Qiskit 2.x ではどちらのライブラリもオブジェクトには必要ありません。 ParameterExpression オブジェクトのシリアライズを生成します。

  • Qiskit v2.0.0 の pulse の削除に伴い、 ScheduleBlock プログラムを qiskit.qpy.dump() 関数によるプログラムのシリアライズサポートは削除されました。 ユーザは、パルスゲートを含むペイロードをロードすることができます。 qiskit.qpy.load() 関数を使用しても、パルス・ゲートを含むペイロードをロードすることはできるが、不透明なカスタム命令として扱われる。 ScheduleBlock ペイロードのロードはサポートされていません。 QpyError 例外が発生します。

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

  • atomic_evolution 呼び出し可能な引数である。 ProductFormula (およびそのサブクラス QDrift, LieTrotterおよび SuzukiTrotter )の呼び出し可能な引数には、新しい関数シグネチャがあります。 昔のシグネチャーは、パウリ演算子と時間係数を受け取り、進化回路を返していた:

    def atomic_evolution(pauli_op: SparsePauliOp, time: float) -> QuantumCircuit:
      evol_circuit = QuantumCircuit(pauli_op.num_qubits)
      # append operators to circuit
      return evol_circuit

    新しいシグネチャーは、既存の回路を直接取り込み、この回路に、提供されたパウリの進化と与えられた時間を追加する必要がある:

    def atomic_evolution(evol_circuit: QuantumCircuit, pauli_op: SparsePauliOp, time: float):
      # append operators to circuit, in-place modification

    この新しい実装では、パフォーマンスが大幅に向上している。

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

  • においてゲートが同一であると仮定される場合の最小閾値を増加させた。 RemoveIdentityEquivalent をマシン・イプシロンから 1e-12 に増加させ、忠実度計算における丸め誤差を考慮し、また CommutationAnalysis そして TwoQubitWeylDecomposition.

  • ルーティングプラグインのステージdefault は、同名のQiskit組み込みプラグイン用に予約されました。

  • デフォルトのルーティング・プラグイン・ステージは "default" になりました。 Qiskit v2.0.0 では、これは単に以前のデフォルト "sabre" のエイリアスです。 基本的なデフォルトアルゴリズムは、Qiskit v2.x リリースシリーズの過程で、一部またはすべてのターゲットに対して変更される可能性がありますが、現在の動作を維持するために、常に明示的に routing_method="sabre" を設定することができます。

  • 翻訳プラグインのステージdefault は、同名のQiskit組み込みプラグイン用に予約されました。

  • デフォルトの翻訳プラグインのステージが "default" になりました。 Qiskit 2.0 では、これは単に以前のデフォルト "translator" のエイリアスです。 基本的なデフォルトアルゴリズムは、Qiskit 2.x シリーズの過程で、一部またはすべてのターゲットに対して変更される可能性がありますが、現在の動作を維持するために、常に translation_method="translator" を明示的に設定することができます。

  • レガシーなスケジューリングパス ASAPScheduleALAPScheduleDynamicalDecouplingAlignMeasures は削除され、更新された代替案が採用された。 ALAPScheduleAnalysis, ASAPScheduleAnalysis, PadDynamicalDecouplingおよび ConstrainedReschedule が削除された。 これらは、新しいスケジューリングワークフローがレガシーワークフローに取って代わった後、Qiskit v1.1 で非推奨となりました。

  • target 、または basis_gates のセットが指定されていない場合、トランスパイラ・パスは、以前よりも少ないレイヤーで、注釈付き演算を持つ回路を合成する。 HighLevelSynthesis トランスパイラ・パスは、アノテーションされたオペレーションを持つ回路を、以前よりも少ないレイヤーのラッピングで合成します(これは、例えば、次のように生成された回路で起こります)。 multiplier_cumulative_h18()).

  • キーワード引数 property_setBasePassManager.run()で予約されており、フロントエンド表現から内部表現へのサブクラスの変換に転送される kwarg として使用することはできません。

  • Qiskitでは、トランスパイルパイプラインにおける BackendProperties オブジェクトの以下の非推奨用途が削除されました。 2.0:

    以下のパスも更新され、 target

    BackendProperties クラスは、 BackendV1 ワークフローの一部であったため、Qiskit v1.2 以降非推奨となっています。 ゲートエラーや持続時間などの特定の命令プロパティは、構築時に Target に追加することができます。 Target.add_instruction() メソッドに追加することができ、 target 入力引数を通して関連するトランスパイラ・パスに伝達されます。

  • BackendV1 モデルが削除された結果、以下のトランスパイラ・オブジェクトの受け入れ可能な入力タイプが更新された:

  • トランス ResetAfterMeasureSimplification トランスパイラー・パスは IfElseOp の実行条件に XGatecondition を使うようになりました。 これは、 condition 属性がQiskitデータモデルから削除されたためです。

  • 非推奨の ConvertConditionsToIfOps トランスパイラー・パスは削除されました。 の基礎となる condition 属性は削除された。 Instruction クラスは削除されたので、このトランスパイラ・パスは変換元がなくなった。 代わりに IfElseOp を使って古典的な操作の実行条件を指定する。

  • その PadDelayPadDynamicalDecoupling トランスパイラ・パスが構築される際に新しい引数を要求するようになった。 target または durations のどちらかを指定する必要がある。 Target または InstructionDurations で指定する必要がある。 これがないと、パスは回路内の命令の持続時間を判断できず、エラーとなる。 以前は、これらのパスはオブジェクトの durationInstruction オブジェクトの

  • 以前は非推奨だった AlignMeasures トランスパイラー・パスは削除された。 このパスは Qiskit v1.1.0 で非推奨となった。 代わりに ConstrainedReschedule パスを使うべきである。 ConstrainedReschedule は同じ機能を持ち、さらにタイミング制約へのアライメントもサポートしている。

  • または generate_preset_pass_manager() または transpile()を使用してスケジューリングする場合、引数 instruction_durations が指定されると、期間は list としてフォーマットされ、単位は dt となります。 また、移調関数の入力引数 dt を設定する必要がある。

  • 非推奨の DAGNode.sort_key 属性を削除した。 この属性はQiskit v1.4.0 リリースで非推奨となりました。 辞書的トポロジー・ソートはRust内部で行われ、ソート・キー属性は使用されないため、DAGノード生成によるオーバーヘッドを避けるためにこの属性は削除された。 ソートキーに依存する場合は、以下のような方法で指定されたノードから再現できる:

    def get_sort_key(node: DAGNode):
        if isinstance(node, (DAGInNode, DAGOutNode)):
            return str(node.wire)
        return ",".join(
            f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs)
        )
  • 以下 transpile() および generate_preset_pass_manager() 入力引数は、 Qiskit 1.3 以降非推奨となり、 API から削除されました:

    • instruction_durations
    • timing_constraints

    これに加えて、 basis のゲート引数によるカスタム基底ゲートの指定も可能である。 transpile()generate_preset_pass_manager()の引数によるカスタム基底ゲートの指定は、Qiskit 1.3 でも非推奨とされ、 ValueError

    以前はこれらの引数で提供されていた情報は、現在も backend または target 引数で指定することができる。 ターゲット・インスタンスは、定義されたインストラクションの持続時間を使用して構築することができます:

    Target.from_configuration(..., instruction_durations=...)

    特定のタイミング制約について:

    Target.from_configuration(..., timing_constraints=...)

    また、カスタム・ベース・ゲートの場合は、手動でターゲットに追加するか、カスタム・ネーム・マッピングで .from_configuration

    from qiskit.circuit.library import XGate
    from qiskit.transpiler.target import Target
    
    basis_gates = ["my_x", "cx"]
    custom_name_mapping = {"my_x": XGate()}
    target = Target.from_configuration(
        basis_gates=basis_gates, num_qubits=2, custom_name_mapping=custom_name_mapping
    )
  • その transpile()generate_preset_pass_manager() インターフェースは、 backend とともに、 coupling_map および/または basis_gates を提供する場合、 UserWarning を発生させるようになった。 このような場合、真実の情報源は複数存在し、ユーザーの意図は必ずしも明確ではなく、どのように解決すればよいのかわからないコンフリクトが発生する可能性がある。 generate_preset_pass_manager() が発生する可能性がある。 代替案としては、選択した制約を組み合わせたカスタムターゲットを定義することが提案されている。

    このような状況の一つは、 backend または basis_gates の3つ以上の量子ビットを持つゲートを、カスタム coupling_map と共に仕様化することです。 カップリング・マップには、ゲートの作用を判断するのに必要なコネクティビティの詳細が記載されていない。 このような場合 transpile() そして generate_preset_pass_manager()ValueError を上げる。

  • Qiskit 2.0 のパルス除去の一環として、トランスパイラのすべてのパルスおよびキャリブレーション関連機能が削除されました。

    以下のパスと関数が削除された:

    • qiskit.transpiler.passes.PulseGates パス
    • qiskit.transpiler.passes.ValidatePulseGates パス
    • qiskit.transpiler.passes.RXCalibrationBuilder パス
    • qiskit.transpiler.passes.RZXCalibrationBuilder パス
    • qiskit.transpiler.passes.RZXCalibrationBuilderNoEcho パス
    • qiskit.transpiler.passes.EchoRZXWeylDecomposition パス
    • qiskit.transpiler.passes.NoramlizeRXAngle パス
    • qiskit.transpiler.passes.rzx_templates() function

    以下の要素から inst_map 引数が削除された:

    キャリブレーションサポートは廃止された:

    • calibrationInstructionProperties コンストラクタから削除され、そのクラスのプロパティではなくなりました。
    • has_calibrationget_calibrationinstruction_schedule_mapupdate_from_instruction_schedule_map のメソッドがクラスから削除された。 Target クラスから削除されました。
  • 非推奨の StochasticSwap トランスパイラー・パスと、それに関連するビルトイン・ルーティング・ステージ・プラグイン "stochastic "が削除された。 これらはQiskit v1.3.0 リリースで非推奨とされました。 パスに取って代わられた。 SabreSwap クラスに取って代わられた。 例えば、パスが以前にtranspile関数を通して呼び出された場合、次のようになる:

    from qiskit import transpile
    from qiskit.circuit import QuantumCircuit
    from qiskit.transpiler import CouplingMap
    from qiskit.providers.fake_provider import GenericBackendV2
    
    
    qc = QuantumCircuit(4)
    qc.h(0)
    qc.cx(0, range(1, 4))
    qc.measure_all()
    
    cmap = CouplingMap.from_heavy_hex(3)
    backend = GenericBackendV2(num_qubits=cmap.size(), coupling_map=cmap)
    
    tqc = transpile(
        qc,
        routing_method="stochastic",
        layout_method="dense",
        seed_transpiler=12342,
        target=backend.target
    )

    と置き換えるべきである:

    tqc = transpile(
        qc,
        routing_method="sabre",
        layout_method="dense",
        seed_transpiler=12342,
        target=backend.target
    )
  • qiskit.transpiler.passes.CXCancellation パスは削除された。 より一般的な class:.InverseCancellation,。 CXCancellation() は意味的に InverseCancellation([CXGate()]) と完全に等価である。

  • トランス SolovayKitaev トランスパイラ・パスは、 to_matrix メソッドを持たない単一量子ビット演算(メジャー、バリア、コントロール・フロー演算など)やパラメータ化された単一量子ビット演算を含む回路で例外を発生させなくなりました。

  • プリセット・パス・マネージャーのトランスレーション・ステージ用のプラグインは、出力におけるゲートの方向性を尊重する必要がある。 Target ゲートの方向性を尊重する必要があります。 以前は transpile()generate_preset_pass_manager() を生成していた。 PassManager を生成していた。 ステージが指向性を尊重することを保証していない場合は、カスタムステージにこれらを含める必要がある。

    パスを使って GateDirection パスを使って、Qiskitが行っていたのと同じ修正を行うことができる。 例:

    from qiskit.transpiler import PassManager
    from qiskit.transpiler.passes import GateDirection
    from qiskit.transpiler.preset_passmanagers.plugin import PassManagerStagePlugin
    
    class YourTranslationPlugin(PassManagerStagePlugin):
        def pass_manager(self, pass_manager_config, optimization_level):
            pm = PassManager([
                # ... whatever your current setup is ...
            ])
            # Add the two-qubit directionality-fixing pass.
            pm.append(GateDirection(
                pass_manager_config.coupling_map,
                pass_manager_config.target,
            ))
            return pm
  • プリセット・パス・マネージャーは、出力の暗黙の pre_optimization ステージを入力しなくなった。 StagedPassManager. これで、安全に自分の PassManager をこのフィールドに割り当てることができる。 以前は既存の PassManager.

  • 引数 generate_routing_passmanager() 引数 seed_transpiler のデフォルト値が None から -1 に変更された。 この変更は、このフラグがトランスパイラ・パスの設定にのみ使用されていたためである。 VF2PostLayout このフラグはトランスパイラ・パスの設定にのみ使用され、このパスではランダム化は一般的に性能を劣化させるので望ましくないからである。 以前のデフォルト値に頼っていた場合は、引数 seed_transpiler=None を明示的に設定することで、この動作を元に戻すことができる。 このパラメータに明示的にシード値を設定していた場合、動作に変化はない。

可視化アップグレードに関する注意事項

  • すべての回路ドロワの idle_wires パラメーターに新しいオプション "auto" が追加され、デフォルトの動作となった。 それでも指示なしでワイヤーを表示したい場合は、明示的に idle_wires=True を設定してください。

    "auto" に設定すると、動作は以下のようになる:

    • 回路に .layout 属性が定義されている場合、 idle_wires は自動的に False (アイドルワイヤを隠す)に設定される
    • そうでない場合は、 idle_wires (以前のデフォルトのように、すべてのワイヤーを表示) True のままです

    次の例は、レイアウトのない回路を idle_wires="auto" で表示したものです:

    qr_0: ────────
          ┌───┐┌─┐
    qr_1: ┤ H ├┤M├
          └───┘└╥┘
    cr_0: ══════╬═
    
    cr_1: ══════╩═

    レイアウトが適用されると、 idle_wires="auto"idle_wiresFalse に設定し、アイドルワイヤーを隠す:

              ┌───┐┌─┐
    qr_1 -> 1 ┤ H ├┤M├
              └───┘└╥┘
        cr_1: ══════╩═

    レイアウトされた回路内のすべてのワイヤーを表示したい場合は、 idle_wires=True を明示的に設定する:

         qr_0 -> 0 ────────
                   ┌───┐┌─┐
         qr_1 -> 1 ┤ H ├┤M├
                   └───┘└╥┘
    ancilla_0 -> 2 ──────╫─
    
             cr_0: ══════╬═
    
             cr_1: ══════╩═

    量子コンピュータがより多くの量子ビットに拡張されるにつれて、小さな回路であっても、転置後に大きな回路表現ができるようになる。 "auto" の設定は、可能な限り不要なワイヤーを隠すことで、可読性を向上させるのに役立つ。

  • その array_to_latex() 関数と Operator.draw() メソッドは、 sympy ライブラリがインストールされていない場合、 MissingOptionalLibrary 例外を発生させることができるようになった。 Qiskit v1.x リリースでは、 symenginesympy は常にインストールされていることが保証されていましたが、 v2.0.0 からはハード要件ではなくなりました。 行列の LaTeX 可視化は sympy ライブラリに依存しているため、この機能を使用する場合は sympy がインストールされていることを確認してください。

  • BackendV1 モデルが削除された結果として plot_gate_map(), plot_error_map() および plot_circuit_layout() 関数は backend 入力引数で BackendV1 型の入力を受け付けなくなった。

  • Timeline Drawerを呼び出す際に、 target 引数を指定する必要がある。 命令はもはや継続時間属性を含まないので、この追加引数は、サポートされるすべての命令の継続時間を指定するために必要である。 引数がなければ、タイムラインの引き出しはこの情報にアクセスできない。

  • Qiskit 2.0 のパルス削除の一環として、 qiskit.visualization.pulse_drawer を介したパルス描画のサポートが削除されました。

各種 アップグレードの注意

  • Qiskit v0.24 (2023 年 5 月) 以降非推奨となっていた deprecate_function デコレーターと deprecate_arguments デコレーターは、 Qiskit v2.0.0 で削除されました。 現在の deprecate_func()@deprecate_function を置き換え、現在の deprecate_arg()@deprecate_arguments を置き換える。

  • assemble 関数と関連機能( assembler モジュールに含まれる)は、Qiskit v1.2 で非推奨となったため、コードベースから削除されました。 assemble は、非推奨の BackendV1 ワークフローのコンテキストで Qobj を生成するために使用された。 トランスピレーションとプリミティブ・パイプラインは量子回路を直接処理するため、 Qobj 、変換は不要になった。

    除去には以下のパブリックAPIコンポーネントが含まれる:

    • qiskit.compiler.assemble function
    • qiskit.assembler.assemble_circuits function
    • qiskit.assembler.assemble_schedules function
    • qiskit.assembler.disassemble function
    • qiskit.assembler.RunConfig クラス
    • qiskit.circuit.Instruction.assembleメソッド
  • Qiskit v1.2.0 で非推奨となった Qobj 構造体と関連クラスは削除されました。 これらは BackendV1 ワークフローの一部として導入されたもので、バックエンドとのやりとりにはもはや必要ない。 BackendV2 バックエンドとのやりとりにはもはや必要ありません。 この削除は以下のクラスに影響する:

    • QobjExperimentHeader
    • QobjHeader
    • QasmQobj
    • QasmQobjInstruction
    • QasmQobjExperimentConfig
    • QasmQobjExperiment
    • QasmQobjConfig
    • QasmExperimentCalibrations
    • GateCalibration
    • PulseQobj
    • PulseQobjInstruction
    • PulseQobjExperimentConfig
    • PulseQobjExperiment
    • PulseQobjConfig
    • QobjMeasurementOption
    • PulseLibraryItem
  • 以前は qobj/utils.py で定義されていた MeasLevelMeasReturnType のクラスは、 qobj モジュールの削除に伴い、 result/models.py に移行された。 これらのクラスはパブリックAPIの一部ではなかった。 インポートパスが from qiskit.qobj.utils import MeasLevel, MeasReturnType から更新されました: from qiskit.result import MeasLevel, MeasReturnType.

  • のコンストラクタで位置引数を使用できなくなった。 Result のコンストラクタでの位置引数の使用が無効になった。 すべての引数をkwarg構文で設定してください。 Result(backend_name="name", ....). これに加えて、 qobj_id の引数は、今後、インターナルの構築には使われない。 Result の構築には使われなくなる。 qobj_id を一般的なkwargとして設定することは可能で、他の一般的なkwargと一緒にメタデータ・フィールドに置かれる。

  • Qiskit 2.0.0 のパルス除去の一環として、 qiskit.schedulersequence および schedule_circuit 関数と ScheduleConfig クラスが削除されました。

  • qiskit.result.mitigation モジュールは Qiskit v1.3 で非推奨となったため削除されました。 この削除には、 LocalReadoutMitigatorCorrelatedReadoutMitigator のクラスと、関連するユーティリティが含まれる。 Qiskitには代替パスがありません。その機能は `mthree アドオンに取って代わられたからです。 <https://github.com/Qiskit/qiskit-addon-mthree> `__

回路の廃止予定

  • 非推奨の QuantumCircuit.duration 属性は、当初の予定通りこのリリースでは削除されませんでした。 代わりにQiskit v3.0.0 のリリースの一部として削除される予定です。 この機能は QuantumCircuit.estimate_duration() メソッドに取って代わられました。

  • の非推奨タプル・ライク・インターフェースは、このリリースでは削除されなかった。 CircuitInstruction の非推奨インターフェイスは、当初の予定通りこのリリースでは削除されませんでした。 代わりにQiskit v3.0.0 で削除されます。 代わりに operation, qubitsclbits を使う。

  • Multiple-Control-Multiple-Target回路クラス MCMT は、現在では非推奨となり、次のように置き換えられました。 MCMTGateに置き換えられました。 Gate に置き換えられました。 回路の代わりにゲートを使うことで、コンパイラーはより高い抽象度でオブジェクトを推論することができ、複数の合成プラグインを適用することができる。

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

  • 非推奨の DAGCircuit.duration 属性は、当初の予定通りこのリリースでは削除されませんでした。 代わりにQiskit v3.0.0 のリリースの一部として削除される予定です。 この機能は QuantumCircuit.estimate_duration() メソッドに取って代わられました。

  • の引数 propagate_conditionDAGCircuit.substitute_node()DAGCircuit.substitute_node_with_dag() の引数は非推奨となった。 Qiskitのデータモデルから Instruction.condition が削除されたことで、このオプションはもはや目的を果たせなくなりました。 もし設定されていれば、もはや何の効果もない。 Qiskit 1.x -> 2.0 からの移行時に互換性を維持するため、署名から削除されない。 このオプションは Qiskit 3.0 で削除されます。

  • 関数 generate_pre_op_passmanager() は非推奨である。 Qiskitのプリセットパスマネージャーではもう使われていませんし、その目的も廃止されました。元々はISAの方向性を尊重しない翻訳プラグインの修正ステージを生成していました。 現在、翻訳ステージは方向性を尊重することが要求されているため、この機能は必要なく、ほとんどの場合、置き換える必要もない。

セキュリティー問題

  • のセキュリティ脆弱性を修正した。 qpy.load()sympy のセキュリティ脆弱性を修正した。 ParameterExpression ペイロードをロードする際のセキュリティの脆弱性を修正しました。 これは、シリアル化ステップ(qpy.dump()).

バグ修正

  • 同一性に近いゲートを処理する際のトランスパイルプロセスの矛盾を修正しました。 CommutationAnalysisによって削除されなかった。 RemoveIdentityEquivalent. 根本的な問題の原因は RemoveIdentityEquivalent そして CommutationAnalysis (ひいては CommutativeInverseCancellation)が異なるメトリクスを使用していることにある。 現在ではどちらも、ゲートの平均的な忠実度と同じ閾値を使用して、(角度が非常に小さい回転ゲートなどの)ゲートを同一性として扱うべきかどうかを評価する。 詳細については、これらのクラスのドキュメントを参照のこと。 #13547を修正。

  • のバグを修正した。 QuantumCircuit.assign_parameters()で、定義がすでにトリガーされている標準ゲートにパラメーターを割り当てる際に発生するバグを修正した。 この場合、新しい値がゲート・インスタンスに正しく伝わらなかった。 回路そのものは期待通りにコンパイルされていたが、個々のオペレーションを検査すると、古いパラメータが表示されたままだった。

    例:

    from qiskit.circuit.library import EfficientSU2
    
    circuit = EfficientSU2(2, flatten=True)
    circuit.assign_parameters([1.25] * circuit.num_parameters, inplace=True)
    print(circuit.data[0].operation.params)  # would print θ[0] instead of 1.25

    #13478を修正。

  • のバグを修正した。 DAGCircuit のバグを修正した。 Vardeepcopy 、ピックリング中に出力ノードが入力ノードになってしまうバグを修正。

  • クラスの見落としを修正。 Target クラスの見落としを修正しました。 dt 属性に新しい値を設定し、その後に target.durations() を呼び出すと、返されるオブジェクトに更新された dt の値が表示されませんでした。 InstructionDurations オブジェクトに更新された値が表示されない問題を修正しました。 これは、 dt セッターの内部ターゲット命令持続時間キャッシュの無効化によって修正された。

  • トランスパイラ・パスの BasisTranslator トランスパイラ・パスのDAGのグローバル・フェーズが正しく更新されない問題を修正。 14074を修正。

  • のバグを修正した。 HighLevelSynthesis トランスパイラ・パスのバグを修正しました。その命令 がターゲットですでにサポートされているか、明示的に渡された basis_gates の一部であるかに関係なく、合成プラグインが利用可能な命令を合成してしまいます。 この動作は修正され、すでにサポートされている命令は合成されなくなった。

  • この InverseCancellation トランスパイル・パスはコントロール・フロー・ブロックの内部で実行されるようになった。 以前は、古典的なブロック内で定義された場合、キャンセル可能なゲートのペアは無視されていた。 詳細は #13437を参照。

  • マルチコントロール回転で、回転角度が "0 "になるバグを修正。 ParameterExpression. このケースで合成を試みると、ゲートは未結合のパラメータでは合成できないというエラーになる。 このバグはマルチ制御回転回路方式に影響した。 QuantumCircuit.mcrx():meth:.QuantumCircuit.mcry、および QuantumCircuit.mcrz()および RXGate.control(), RYGate.control()RZGate.control() を呼び出したとき、回転角度が ParameterExpression. 現在では、このような多重制御回転回路を誤差を生じることなく合成することができる。

  • QPY()のバグを修正した。qiskit.qpy)のバグを修正した。 MCMTGate を含む回路がシリアライズに失敗するバグを修正。 13965を参照。

  • 状態ベクトルが正規化されていない場合に Statevector.expectation_value() に起因するバグを修正した。 修正 #13029

  • で量子回路をゲートに変換する。 converters.circuit_to_instruction() への変換は、与えられた回路に制御フロー命令が含まれている場合、適切に失敗するようになった。

  • または AnalysisPass または TransformationPass を( pass_ = MyPass(); pass_(qc) のように)関数のように呼び出すと、パスの要求が尊重されるようになります。 例えば ALAPScheduleAnalysisTimeUnitConversion などのパスをスケジューリングする。 を使ったパスの実行は、常にこの要件を尊重していた。 PassManager を使ったパスの実行は常にこの要件を尊重していたが、これまではパスを直接呼び出した場合は尊重されなかった。

  • サブクラスが TranspilerError サブクラスが PassManger.run() の呼び出しの内部でパスによって発生した場合、例外は消去された型で連鎖例外になるのではなく、ロスレスで伝搬されるようになりました。

  • SabreSwap は、ルーティング中に制御フローブロックからアイドル量子ビットワイヤーを収縮させなくなる。 これは一般的には有効な最適化だが、ルーティング・パスの副作用としては期待できないものだった。 これで ContractIdleWiresInControlFlow パスを使ってこの収縮を行うことができる。

  • SparsePauliOp.to_matrix のプロセス単位の非決定性を修正した。 合計における浮動小数点演算の正確な順序は、以前はプロセスごとに異なっていたが、同じスクリプトの異なる呼び出し間で同じになる。 13413を参照。

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