Skip to main content
IBM Quantum Platform

Qiskit SDK 1.2 リリースノート


1.2.4

前奏曲

Qiskit 1.2.4 は 1.2.3 のバグフィックスリリースで導入された QPY の問題を修正したパッチリリースです。 1.2.3 で、ロード時にインストールされたバージョンと異なるsymengineバージョンで生成されたQPYファイルをロードするとエラーが発生した。

バグ修正

  • 現在削除されている 1.2.3 バグフィックスリリースで導入された、ロード時にインストールされたバージョンと異なる symengine バージョンで生成された QPY ファイルをロードするたびに "Qiskit doesn't support loading a symengine payload generated with symengine >= 1.0 " というエラーメッセージの例外が発生する問題を修正しました。 この問題は 1.2.3 でのみ発生する。

1.2.3

前奏曲

Qiskit 1.2.3 はQPYの問題を修正したパッチリリースで、ある Python 環境で生成されたファイルが、異なる Python 環境で読み込みに失敗することがありました。 これは symengine というライブラリのバージョンの違いに関係している。

既知の問題

  • Qiskitの 1.2.4 以前のバージョンは、以下の場合、以下の方法でダンプされたQPYファイルをロードすることができません。 qpy.dump()version でダンプされたQPYファイルをロードできない:

    • QPYファイル内にバインドされていない ParameterExpression オブジェクトがあります、
    • において、 use_symengine=True フラグが設定されている(Qiskit >= 1.0.0 のデフォルトである)。 qpy.dump()で、そして
    • 生成環境とロード環境にインストールされている symengine のバージョンが、同じマイナーバージョン内にない場合。

    これは、生成に使用されたQiskitのバージョンに関係なく適用されます(少なくともQiskit 1.2.4 までを含む)。

    Qiskit < 1.2.3, you should set use_symengine=False. Versions of Qiskit > = 1.2.3 のバージョンとの互換性を最大にしたいのであれば、これは必要ありません。

  • Qiskit 0.45 シリーズの QPY ファイルは、非常に特殊でありそうもない状況下で、Qiskit 1.2.4 を含む Qiskit の新しいバージョンでロードに失敗することがあります。 基準は以下の通り:

    • その QuantumCircuit または ScheduleBlock ダンプされる ParameterExpression オブジェクトが含まれていた、
    • インストールされている symengine のバージョンが 0.9 シリーズ (Qiskit 0.45 のサポート期間中にリリースされた最新のもの) である
    • use_symengine=True フラグがセットされていた(デフォルトではなかった )。

    生成中に使用されたQiskitの後のバージョンは、 symengine 0.9 より新しいバージョンを必要としたため、影響を受けない。

    この場合、Qiskit 0.45.3 および symengine 0.9.2 がインストールされた環境で QPY ファイルを再読み込みすることで復旧できます。 次に qpy.dump()use_symengine=False 。 そうすれば、新しいバージョンのQiskitでも読めるようになります。

アップグレードの注意

  • symengine のサポートされるバージョンは、(Qiskit のこのリリースの時点で) 次のマイナーバージョンになると予想される < 0.14.0 に先行して制限されています。 における潜在的な非互換性から保護するために行われました。 qpy これは ParameterExpression オブジェクトを直列化する際に非互換になる可能性を防ぐためです。 QPYフォーマットのバージョン10、11、12でオブジェクトに使用されるシリアライゼーションは、オブジェクトの生成に使用されたsymengineのバージョンに関連しています。 ParameterExpression オブジェクトのためにQPYフォーマットバージョン10、11、12で使用されるシリアライゼーションは、それを生成するために使用されるsymengineのバージョンに関連しており、将来のsymengineのリリースでは互換性がない可能性があります。 この上限バージョンは、将来リリースされるsymengineを使用してQPYファイルをロードしようとしたときに、非互換性が発生しないようにするためのものです。 qpy.load().

バグ修正

  • の問題を修正しました。 qpy.load() を含むQPYファイルをロードする際の ParameterExpressionを含むQPYファイルをロードする際に、生成環境とロード環境にインストールされている symengine のバージョンが同じでない場合に発生する問題を修正しました。 たとえば、オブジェクト ParameterExpression オブジェクトを含む QPY ファイルが、 symengine==0.11.0 がインストールされた Qiskit 1.2.2 を使用して生成された場合、 symengine==0.13.0 がインストールされた Qiskit 1.2.2 はそれをロードできません。

    以前は、このバージョンの不一致を回避するために、 symengine 。 これは、 symengine 0.11 と 0.13 ( 0.12 は存在しなかった)については回避されている。 しかし、 symengine の異なるバージョンを使用しようとしていて、不一致がある場合、このバージョンのQiskitはまだ動作しない可能性があります。


1.2.2

前奏曲

Qiskit 1.2.2 は 1.2 シリーズのマイナーバグフィックスリリースです。

バグ修正

  • トランスパイラー・パスのバグを修正。 ElidePermutations が存在すると量子ビットマッピングが正しく更新されないというバグを修正した。 PermutationGates.

  • の潜在的な非決定性の原因を修正した。 DenseLayout (の非決定性の潜在的な原因を修正した。 SabreLayoutでの非決定性の原因となる可能性を修正した。 CouplingMap または Target が同じ接続度を持つ複数の部分グラフを持つ場合に、非決定性の原因となる可能性を修正しました。 このような場合、パスからの正確な出力レイアウトは、ローカルCPUの数とスレッド実行速度に基づいて変動する可能性がある。

  • トランスパイラー・パスは HighLevelSynthesis のインスタンスではない "qft "と呼ばれるカスタム・ゲートに遭遇しても、トランスパイラ・パスは例外を発生させなくなった。 QFTGate. 代わりに、QFTゲート用の合成プラグインはそのようなゲートを無視し、ゲートの定義が(提供されていれば)使用されます。

  • idle_wires=False の場合、サーキットドロワーが故障したり、配線が省略されたりするバグを修正。 13128と #13146を修正。

  • を呼び出す際の問題を修正しました。 transpile() またはメソッド StagedPassManager.run() を呼び出したときの問題を修正しました。 generate_preset_pass_manager()ルーティングを明示的に無効にするために routing_method 引数が "none" に設定されている場合、 optimization_level 2 または 3 を使用します。 以前は、このような条件下では、トランスパイラがinitステージの一部として ElidePermutations パスはinitステージの一部として実行されていました。 SwapGatePermutationGate インスタンスを回路から削除するのに有効な最適化だからである。 しかし、 routing_method="none" この最適化は、 routing_method="none" のときには行われるべきではないルーティングと同様の方法で回路を順列化するため、期待されていなかった。 を実行しないように修正された。 ElidePermutationsrouting_method="none" を実行しなくなった。 修正 #13144

  • OpenQASM 3 エクスポーターは、 includes の引数で非標準ライブラリーのインクルードファイルを受け付けるという動作を復活させた。 qasm3.dump(), dumps()および Exporter. basis_gates これらの関数は、以前と同じように、適切な include ステートメントを出力に挿入し、エクスポータは、インクルード・ファイル内の意図されたゲートに気づかないままである。

    Qiskitの将来のリリースでは、非標準のインクルードファイルに対するエクスポートメカニズムを改善する予定です。


1.2.1

前奏曲

Qiskit 1.2.1 は 1.2 シリーズのマイナーバグフィックスリリースです。

バグ修正

  • いくつかのバックエンド/カップリング・マップのビジュアライゼーションで、それ自体が折りたたまれたように表示されていた問題を修正しました。 ほとんどの場合、デフォルトの設定 <https://graphviz.org/docs/layouts/neato/>。 しかし、 prism オーバーラップは、他のシナリオではより規則的なレイアウトを返す。

  • パラメトリック制御の標準ライブラリ・ゲート( CRXGateなど)は、Rust空間標準ゲートに正しく抽出されるようになりました。 QuantumCircuit.append() とゲートオブジェクトを使用した場合、Rust空間標準ゲートに正しく抽出されるようになりました。 以前は QuantumCircuit.crx() メソッドを使用すると、ラストスペースでは正しい抽出が行われるが、 append() フォームでは行われないという矛盾があった。 このバグは通常、 Python から不健全さを引き起こすことはないはずだ。

  • のバグを修正した。 TwoQubitBasisDecomposer 与えられたKAKゲートが標準ゲートのデフォルト・バージョンでない場合、Rustベースのコードがパニックになるバグを修正した(例えば、 CXGate(ctrl_state=0) を使用)。 修正 #12998

  • バグを修正しました。 InstructionDurations.from_backend() バックエンド BackendV2 バックエンドで動作しないバグを修正した。 #12760 を修正。

  • の定義を修正。 CUGate 行列の定義を修正。 を純粋に 側で処理する場合には、この問題は顕著ではなかった。 CUGate 純粋に Python 側で処理する場合には気にならないが、 Consolidate2qBlocks のようにトランスパイラ・パスが Rust 表現を使用する場合には、この影響は波及する。 修正 #13118

  • のバグを修正。 HoareOptimizer 制御されたゲートが、その制御を削除することによって簡素化されたが、新しいゲートが正しく処理されなかったバグを修正した。 修正 #13079

  • generate_preset_pass_manager()seed_transpiler が無効な値に設定された場合(つまり、非負整数でない場合)、正しく例外が発生するようになった。 修正 #12938

  • のエッジケースを修正した。 SabreLayoutのエッジケースを修正しました。大きなデバイスや困難な回路で、まれにルーティングが失敗することがありました。 これは、1つしかないと思われていた2量子ビットのゲートが、リリース・バルブによって2つ以上ルーティング可能になったためである。 修正 #13081

  • のバグを修正した。 Split2QUnitaries のバグを修正した。 Gate__array__12970を参照。

  • のバグを修正。 StatePreparation 引数 normalize が入力配列に対して無視されるバグを修正。 修正 #12984

  • 様々な合成方法で量子レジスタや古典レジスタのない回路が生成されるバグを修正。 これは、次のような内部的に合成メソッドを使用する関数にも影響しました。 Clifford.to_circuit(). 回路は有効だったが、これは回路とレジスタを比較する際に問題を引き起こす可能性がある。 修正 #13041

  • メソッドが Initialize.gates_to_uncompute() が失敗するバグを修正した。 修正 #12969

  • 2量子ビットゲートを含む回路で、不完全な1量子ビット基底ゲートセットを持つ optimization_level 2または3の回路をトランスパイルする際のエッジケースを修正。 このバグは Split2QUnitaries オブジェクトのみを考慮するように UnitaryGate オブジェクトに限定することで解決しました。 修正 #12970


1.2.0

前奏曲

Qiskit 1.2.0 リリースは、主にコンパイラの性能と品質の向上に重点を置いています。 また、 Python 3.8 をサポートする最後のリリースとなる。 Qiskit 1.3.0 では、最低限必要な Python のバージョンは 3.9 となります。 幅広い新機能、改善、修正の中で、リリースのハイライトは以下の通り:

  • ゲートやオペレーションを含むサーキットのインフラはラストに移される。 これにより、回路構成や回路操作の一連の高速化が可能になる。
  • 上記の点を活用し、合成ライブラリーの一部は現在Rustで回路を構築している。 これにより、クリフォード、順列、一次関数などの演算を合成する際に、大幅なスピードアップが実現する。 例として、50qubit以上のCliffordを分解すると、実行時間が約1000倍高速化する。
  • トランスパイルワークフローの初期段階(最適化レベル >1 )でユニタリー・ピープホール最適化を行い、セイバーレイアウトのトライアルとして密なレイアウトを使用する(最適化レベル >0 )ことで、コンパイルされた回路の品質が向上します。

新機能

  • 新しいクラス QFTGate 量子フーリエ変換(QFT)をネイティブに表現するための新しいクラスが追加されました。 量子回路でQFTを表現する古い方法は QFTを参照されたい。 ゲートを介してQFTを表現する新しい方法は、ゲートが宣言されたときにその定義回路を合成することを避け、実際の合成をトランスパイラに遅らせる。 また、QFTを合成するためのいくつかの異なるアルゴリズムから簡単に選択することができ、これらはハイレベル合成プラグインとして提供されています。

  • 完全接続アーキテクチャを想定した synth_qft_full() 完全接続アーキテクチャを想定したQFT回路を構築するための合成法を追加。

  • を合成するための2つのハイレベル合成プラグインを追加した。 QFTGate. クラス QFTSynthesisFullsynth_qft_full() に基づいており、全対全の接続性を仮定したQFTゲートを合成します。 クラス QFTSynthesisLinesynth_qft_line() に基づいており、線形最近傍接続を仮定したQFTゲートを合成する。

  • に2つのパラメーターを追加した。 GenericBackendV2 エラー (noise_info) とパルスチャンネル情報 (pulse_channels) をバックエンドの構築から除外する。 これらのパラメータはデフォルトで True 、コンストラクタの初期デフォルト動作を再現している。 メモリに敏感なユーザーは、これらのオプションを False に設定することで、大規模なトランスパイル時に 40x のメモリ・オーバーヘッドを削減することができる。 GenericBackendV2.

  • この StabilizerState クラスに新しいメソッド StabilizerState.probabilities_dict_from_bitstring() メソッドが追加されました。 以前は StabilizerState.probabilities_dict() が利用され、最悪の場合、ユーザーが単一の結果を望んだとしても、(状態に応じて)( 2n2^n ) 回の確率計算を行うことになる。 この新しい方法では、ユーザーが確率を測定するために渡す単一の結果ビット列値だけを計算することができる。 量子ビット数が増えれば増えるほど、1ビットストリングの結果しか測定されないため、(状態によっては)性能向上がより顕著になる可能性がある。

  • Shukla-Vedulaアルゴリズムを使用して、一様な重ね合わせ状態を作成できる UniformSuperpositionGate クラスを実装。 この機能により、一様な重ね合わせ状態 1Mj=0M1j\frac{1}{\sqrt{M}} \sum_{j=0}^{M-1} |j\rangle を生成する量子回路の作成が容易になります。 MM は、 1M\frac{1}{\sqrt{M}} の振幅を持つ計算基底状態の数を表す正の整数です。この実装では、 O(log2(M))O(\log_2 (M)) の量子ビットと O(log2(M))O(\log_2 (M)) のゲートしか必要とせず、一様な重ね合わせ状態を効率的に作成できます。 使用例:

    from qiskit import QuantumCircuit 
    from qiskit.circuit.library.data_preparation import UniformSuperpositionGate
    
    M = 5
    num_qubits = 3
    usp_gate = UniformSuperpositionGate(M, num_qubits)
    qc = QuantumCircuit(num_qubits)
    qc.append(usp_gate, list(range(num_qubits)))
    
    qc.draw()

回路の特徴

  • 新関数 random_clifford_circuit() を追加した。 qiskit.circuit標準ライブラリのゲートを使って擬似ランダム・クリフォード回路を生成できる。 使用例:

    from qiskit.circuit.random import random_clifford_circuit
    
    circ = random_clifford_circuit(num_qubits=2, num_gates=6)
    circ.draw(output='mpl')
    _images/release_notes-1.png
  • のサポートを追加した。 AnnotatedOperation.params および AnnotatedOperation.validate_parameter()をサポートし、注釈付き操作の回路レベルのパラメータ処理(バインディング・パラメータなど)を可能にした。

  • CircuitInstruction そして DAGOpNode のさまざまなプロパティを照会するための新しいメソッドを持っている。 Operationのさまざまなプロパティを問い合わせるための新しいメソッドを備えている。 これらのメソッドは次のとおりです。

    該当する場合、これらの方法のいずれかを使用すると、クエリまたは CircuitInstruction.operation または DAGOpNode.op を直接クエリするよりも大幅に高速になります(特に命令やノードがQiskit標準ゲートを表す場合)。 これは、標準的なゲートはRustにネイティブに保存され、 Python の表現は要求されたときにのみ作成されるからだ。

  • Qiskitの標準ゲートライブラリのネイティブRust表現が追加されました。 標準ゲートが QuantumCircuit または DAGCircuit に追加された場合、より効率的な方法で直接Rustで表現される。 回路やDAGからそのゲート・オブジェクトにアクセスすると、標準ゲートを表す新しい Python オブジェクトが返されます。 これにより、Rustで記述された機能に対して、より高速で効率的な回路の変換と操作が可能になる。

  • この random_circuit() 関数には新機能があり、ランダム回路の1-qubit、2-qubit、3-qubit、4-qubitゲートの比率を指定する分布 num_operand_distribution (dict)を指定することができます。 例えば、 num_operand_distribution = {1: 0.25, 2: 0.25, 3: 0.25, 4: 0.25} が関数に渡された場合、生成される回路は約25%の1-qubit、2-qubit、3-qubit、4-qubitゲートを持つことになる。 また、 num_operand_distribution が指定されていない場合、 max_operands はデフォルトで4になり、ランダムなゲート分布の回路が生成されることに注意すべきである。 num_operand_distributionmax_operands の両方が同時に指定された場合、ランダム回路の生成には num_operand_distribution が使用される。

    使用例:

    from qiskit.circuit.random import random_circuit
    
    circ = random_circuit(
      num_qubits=6, depth=5, num_operand_distribution={1: 0.25, 2: 0.25, 3: 0.25, 4: 0.25}
    )
    circ.draw(output="mpl")
    _images/release_notes-2.png
  • メソッドのパフォーマンス向上 DAGCircuit.quantum_causal_cone() は、異なるパスから到達したときに、同じ非直接ノードを複数回検査しないことによって、パフォーマンスを向上させた。

  • メソッドに insert_barriers キーワード引数を追加。 QuantumCircuit.repeat() メソッドに True に設定すると、サーキットの繰り返しの間にバリアが挿入される。

  • の内部合成アルゴリズムを置き換える。 StatePreparationInitialize の内部合成アルゴリズムを Isometry で与えられるアルゴリズムに置き換える。 新しいアルゴリズムは、CXゲートの数を減らし、回路の深さを2分の1にした。

  • ParameterExpression が単項演算子 + に対応した。

プリミティブ機能

  • 新しいメソッド BitArray.postselect() を追加しました。 使用例:

    from qiskit.primitives.containers import BitArray
    
    ba = BitArray.from_counts({'110': 2, '100': 4, '000': 3})
    print(ba.postselect([0,2], [0,1]).get_counts())
    # {'110': 2, '100': 4}
  • プリミティブのメタデータは、 V2 実装、すなわち、以下のとおりである、 StatevectorSampler, StatevectorEstimator, BackendSamplerV2 および BackendEstimatorV2のメタデータは、 IBM 量子デバイスのものと一致するように更新された。

    のメタデータには。 StatevectorEstimator のメタデータは shots を持たない。 Statevector とショットは使用されません。

OpenQASM 特徴

  • OpenQASM 3 エクスポーター(qiskit.qasm3)の内部シンボルテーブルが書き直され、その結果、 OpenQASM 3標準ライブラリヘッダにないQiskit標準ライブラリゲートを使用したときの出力がすっきりし、より決定論的な出力が得られるはずです。 例えば、複数の RZXGateまた、名前の衝突が発生した場合、シンボル・テーブルは、名前を一意にするために、非決定的な整数ではなく、決定論的なカウンターを割り当てるようになりました(以前は、オブジェクトのIDが使用されていました)。

  • OpenQASM 3.0 標準ライブラリの vendored バージョンが更新され、 コミット 4ca1d79383 時点の状態と一致するようになりました。 これは一般的にQiskitの使用には何の影響もありません。

合成機能

  • MCXRecursivekk 制御量子ビットと単一のクリーンな補助量子ビットを持つ場合、最大でも 16k816k-8 CXゲートを必要とする。

  • MCXVChain relative_phaseと action_onlyの2つの新しいブールパラメータが追加された。 action_onlyTrue の場合、回路は汚れた量子ビットをクリーニングしない。 relative_phaseTrue の場合、ゲートはグローバル位相まで実装される。 の分解を最適化するために使用される。 MCXVChain.

  • MCXVChainkk のコントロールと k2k-2 のダーティな補助量子ビットでは、 8k68k-6 CX ゲートが必要になる。

  • ポート synth_permutation_acg()量子ビットの順列を合成するために使用される。 この結果、1000量子ビットの回路でおよそ 3x の性能向上が得られる。

  • ポート synth_permutation_basic()量子ビットの順列を合成するために使用される。

  • ポート synth_cnot_count_full_pmh()線形関数をCXネットワークに合成するために使われる。 これにより、100量子ビット回路で測定した場合、およそ 44x のスピードアップが得られる。

  • 関数 synth_cnot_count_full_pmh() は、 None に設定することで、(発見的に)最適な section_size を選択できるようになった。 次に、CXゲート数の上限を最小化しようとする値が選択される。すなわち、 αlog2(n)\alpha \log_2(n)。ここで、 nn は量子ビットの数であり、 α0.56\alpha \approx 0.56

  • この関数 synth_clifford_bm() はRustに移植された。 この関数は、CXゲートの数に対して、1,2,3量子ビットの演算子を最適に合成する。 Clifford 演算子を最適に合成します。 これはパフォーマンスの大幅な向上につながる。 3量子ビット以上のクリフォードでは、80倍のスピードアップである。

  • 機能 synth_clifford_greedy() 演算子を合成する関数 Clifford 演算子を合成する関数がRustに移植され、すべての量子ビット数でパフォーマンスが大幅に向上した。 50量子ビットを超えるクリフォードでは、1000倍のスピードアップとなる。

  • キーワード引数 wrapProductFormula この引数を有効にすると、個々のパウリ進化項がラップされます。 これは回路を視覚化する際に役立つ。

  • の引数 atomic_evolutionProductFormula (およびそのサブクラス)に新しい関数シグネチャが追加された。 あるパウリ演算子と時間係数を受け取って進化回路を返すのではなく、新しい関数は既存の回路を取り込み、この回路に与えられたパウリ演算子と時間の進化を加えるべきである。 この新しい実装では、パフォーマンスが大幅に向上している。

  • のパフォーマンスを改善した。 synth_permutation_depth_lnn_kms()をRustに移植することで、線形接続の順列を合成するための性能を向上させた。

トランスパイラ機能

  • のインポートパスオプションを追加。 generate_preset_pass_manager()としてインポートできるようになった:

    from qiskit import generate_preset_pass_manager

    フルパスを入力する必要はない:

    from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

    この関数は qiskit.transpiler モジュールからもインポート可能である:

    from qiskit.transpiler import generate_preset_pass_manager
  • 新しいユーザー設定ファイルオプション sabre_all_threads と対応する環境変数 QISKIT_SABRE_ALL_THREADS を追加。 このフラグがセットされると、プリセットパスマネージャは SabreLayoutSabreSwap トランスパイラ・パスを実行します。 このオプションの使用は、異なるコンピューター間での出力の決定性と、より少ない SwapGates.

    これらのトランスパイラ・パスは、複数のランダムな試行を並行して実行し、その結果最も少ない SwapGates. 経験則として、試行回数を増やせば、アルゴリズムがより良い結果を見つける機会が増える。 デフォルトでは、プリセット・パス・マネージャーは固定数のトライアルを使用します。このリリースでは、レベル0と1は5トライアル、レベル2と3は20トライアルですが、これらの数は将来のリリースで変更される可能性があります(過去のリリースでは異なっていました)。 固定された試行回数を使用すると、ローカルシステムに関係なく決定論的な結果が得られます。固定されたシードを使用しても、ローカルで使用可能なCPU数をデフォルトにすると、異なるコンピューター間で実行したときに結果が異なってしまうからです。

    与えられた最適化レベルのデフォルトの試行回数がローカルCPUの数より多い場合、より多い最適化レベルのデフォルトが使用される。

  • 新しいパス Split2QUnitaries これは、回路内のすべての2量子ビットゲートまたはユニタリーを反復処理し、可能であればエラーを発生させずに、それらを2つの1量子ビットユニタリーに置き換えるものです。

  • パス Collect2qBlocks, ConsolidateBlocks および Split2QUnitaries は、最適化レベル2と最適化レベル3のプリセットパスマネージャーの init ステージに追加されている。 init 、量子回路の効率的な配線が可能になるはずだ:

    • 実際には1量子ビットのゲートの積である2量子ビットのユニタリー/ゲートが含まれている
    • は、連続した2量子ビットゲートのブロックに複数の2量子ビットゲートを含む。

    前者の場合、一対の量子ビットの間に実質的な相互作用が生じないため、2量子ビットゲートの配線は単純に省略できる。 後者の場合、ルーティングアルゴリズムのルックアヘッド空間は、余計な2量子ビットゲートによって「汚染」されることはない。つまり、ルーティングのためには、2量子ビットゲートの連続ブロックごとに1つの2量子ビットゲートを考慮するだけで十分である。 をターゲットとする場合、これらのパスは実行されない。 Target をターゲットにしている場合、つまり、すべての基底ゲートがパラメータ化されていない場合、これらのパスは実行されません。

  • の性能が向上した。 StarPreRoutingの性能は、ラスト空間で重い処理を行うことにより向上する。

  • トランス SabreLayout トランスパイラのパスが更新され、セイバーのレイアウトアルゴリズムの開始点を選択するために、常に同じアルゴリズムを使用して追加のトライアルが実行されるようになりました。 DenseLayout セイバーのレイアウトアルゴリズムの開始点を選択するためです。 レイアウト・アルゴリズムが使用する開始点は、結果の品質に大きな影響を与える可能性がある。 デフォルトでは SabreLayout でも layout_trials のランダム試行から始まるが、接続性グラフの最も密な部分グラフを始点とする試行が1つ追加される。 この方が、特に回路が小さい場合、カップリング・マップが大きくても良い結果が得られる場合がある。

  • に新しい引数 dt が追加された。 generate_preset_pass_manager() の引数セットと一致するように transpile(). これにより、転置制約を内部的に Target 表現に変換できるようになります。

可視化機能

  • ユーザー設定ファイルには、ブール値を取る新しいオプション circuit_idle_wires がある。 これによりユーザーは、サーキットドロワーの idle_wires オプションのデフォルト動作を設定することができる。 QuantumCircuit.draw() そして circuit_drawer(). 例えば、 ~/.qiskit/settings.conf

    [default]
    circuit_idle_wires = false

    は、アイドルワイヤーを表示しないようにデフォルトを変更します。

各種 機能

  • 新しいビルド時環境変数 QISKIT_NO_CACHE_GATES を追加。この変数は、 1 (すなわち QISKIT_NO_CACHE_GATES=1) の値に設定される のメモリ・オーバーヘッドを減少させる。 CircuitInstructionDAGOpNode オブジェクトへの複数アクセスによる実行時間の増加という代償を払うことになる。 CircuitInstruction.operationDAGOpNode.op. Qiskit Python パッケージをソースからビルドするときにこの環境変数が設定されていると、これらの属性のリターンのキャッシュが無効になります。

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

  • メソッドの annotated 引数がデフォルトで になりました。 Gate.control() メソッドの引数はデフォルトで None 、Qiskitが制御された操作に注釈を付けるかどうかを選択できるようになりました。 具体的な実装 (annotated=False) があれば、デフォルトでそれが返される。 そうでない場合は、注釈付き実装が返される (annotated=True)。これにより、例えば、制御されたパラメータ化されたゲートの合成を延期することができます。

  • その Operation インスタンス DAGOpNode.op のインスタンスは、基礎となるオブジェクトへの共通参照を共有するとは限りません。 を参照によって直接変異させることは不健全であった。 DAGOpNode.op の内部リファクタリングにより、DAGの内部状態を追跡することができる。 QuantumCircuitDAGCircuit の内部リファクタリングにより、Rustの標準的なゲートを格納するようになった。 DAGOpNode.op からの出力オブジェクトは、共有インスタンスではなくコピーになる可能性が高くなりました。 要素を変異させる必要がある場合は、確実に変異させる必要がある:

    op = dag_node.op
    op.params[0] = 3.14159
    dag.substitute_node(dag_node, op)

    のようなことをするのではなく

    dag_node.op.params[0] = 3.14159

    このリリースでは、どの標準ゲートでも機能しない。 以前のリリースでは偶然うまくいったかもしれないが、APIが保証するものではなかった。

  • その Operation インスタンス CircuitInstruction.operation のインスタンスは、基礎となるオブジェクトへの共通参照を共有するとは限りません。 これは決して保証されたものではなく、参照によって直接 CircuitInstruction.operation を参照によって直接変更することは不健全であり、特にパラメータが使用されている場合、回路を破損する可能性が常にあった。 内部リファクタリングにより QuantumCircuit の内部リファクタリングにより、標準ゲートをRustに格納するようになった。 CircuitInstruction.operation から出力されるオブジェクトは、共有インスタンスではなくコピーになる可能性が高くなります。 回路内のエレメントを変異させる必要がある場合(非効率的でエラーが発生しやすいため、強く推奨されない )、確実に変異させるべきである:

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(1)
    qc.p(0)
    
    op = qc.data[0].operation
    op.params[0] = 3.14
    
    qc.data[0] = qc.data[0].replace(operation=op)

    のようなことをするのではなく

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(1)
    qc.p(0)
    
    qc.data[0].operation.params[0] = 3.14

    このリリースでは、どの標準ゲートでも機能しない。 以前のリリースでは偶然うまくいったかもしれないが、APIが保証するものではなかった。

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

  • BitArray.slice_bits() そして BitArray.slice_shots() は、インデックスが範囲外である場合に IndexError を発生させるようになった。 以前は ValueError

  • BitArray.__getitem__() IndexError インデックスが範囲外であったり、インデックスの次元数が BitArray. 以前は ValueError

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

  • LieTrotter そして SuzukiTrotter 個々に進化したパウリ項をゲート定義に包むことはなくなった。 回路の特定の分解レベルに依存する場合、合成オブジェクトのレベルを1つ削除するか QuantumCircuit.decompose() を削除するか、 wrap=True キーワード引数を合成オブジェクトに追加する必要があります。

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

  • 最適化レベル2および3では、翻訳/合成段階の前にピープホール最適化が追加採用された(以前は最適化段階でのみ行われていた)。 ピープホール最適化の効果には、例えば、回転角が 2π2252\pi \otimes 2^{-25} より小さい制御位相ゲートなど、同一性に非常に近いゲートの除去が含まれる。

  • の最適化レベル0で使用されるデフォルトのルーティングパスです。 generate_preset_pass_manager() および transpile()StochasticSwap から SabreSwap. パス SabreSwap パスはまったく同じ機能を実行するが、実行時間と出力品質(スワップ・ゲート数と深さ)の両方で StochasticSwap. optimization_level=0 、レベル0の典型的なユースケースでルーティングを実行することは想定されていないため、これは問題ではないはずだ。

    何らかの理由で以前のデフォルト・ルーティング・アルゴリズムに頼っていた場合は、 routing_method 引数を transpile()generate_preset_pass_manager()"stochastic"StochasticSwap を渡します。

  • この generate_preset_pass_manager() 関数は、可能な限り内部的にトランスパイラ制約を Target インスタンスに変換します。 型のバックエンド入力が与えられると BackendV1 型のバックエンド入力が提供された場合、それは BackendV2 に変換される。 Target. この変更にユーザーによる操作は必要ない。

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

  • このリリースを実行するために必要な rustworkx の最小バージョンは 0.14.0 から 0.15.0 に増加しました。 Qiskitは現在、パフォーマンスを向上させるrustworkx 0.15.0 リリースで追加された新機能を使用しているためです。

回路の廃止予定

プリミティブの非推奨化

プロバイダーの廃止予定

  • この BackendV1 クラスは非推奨であり、次のメジャーリリース( 2.0.0 )より前に削除される予定です。 へのアップデート方法の詳細については、 移行ガイドを参照してください。 BackendV2.

  • Qobj構造体と関連クラス( qiskit.qobjを参照)は現在非推奨です。 ワークフローの一部として導入された。 BackendV1 ワークフローの一部として導入された。 BackendV2 バックエンドとのやりとりにはもはや必要ない。 QuantumCircuit シリアライズは、QPY (参照 qiskit.qpy)または OpenQASM ( qiskit.qasm2 および qiskit.qasm3を参照)。

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

  • この assemble() 関数は非推奨となり、 2.0 リリースで削除される予定です。 この関数は、主に QobjBackendV2-ベースのワークフローではもはや必要ない。 また、パラメータをバインドするためにも使用されました。 QuantumCircuit.assign_parameters().

可視化の非推奨機能

  • の引数 justifycircuit_drawer() または QuantumCircuit.draw()の引数は、無効な値をサポートしなくなり(以前はデフォルトに変更していた)、将来のリリースではエラーになる。 有効なジャスティファイ値は "left", "right" または "none" です。

  • この visualize_transition() 関数は非推奨となり、 2.0.0 リリースで削除される予定です。 この機能には多くの制約があり、そのためその有用性は非常に特殊な使用例のみに限定され、Qiskit可視化モジュールの他の部分と適合しませんでした。

バグ修正

  • パラメータ化された標準ゲートを制御する際の一連の問題を修正。 いくつかのゲートのコントロールされたバージョン(例えば RXXGate または RYGate または1つ以上のコントロールの場合)は、未束縛のパラメータを含むと合成できない。 以前は、このような場合に .control()AnnotatedOperation を作成する。 これにより、制御されたゲートを回路に挿入し、後の段階でパラメータをバインドし、動作を合成することができる。 10311 、#10697 、#12135 を修正。

  • その SGateSdgGate を正しく返すようになった。 CSGateを返します。 CSdgGate, もしそれらが単一の制御量子ビットで制御されているならば。

  • の標準偏差の計算を修正する。 BackendEstimatorV2の標準偏差の計算を修正する。 固定 Qiskit/qiskit-ibm-runtime#1751.

  • 以下の問題を修正した。 circuit_drawer() または QuantumCircuit.draw() メソッドで、 justify 引数に無効な値が渡されたときに、デフォルトに変更する前に警告が発生しない問題を修正しました。 無効な値が渡された場合は警告が表示されるようになった。 有効なジャスティファイ値は "left", "right" または "none" です。 詳細は #12089を参照。

  • 固定 SparsePauliOp.apply_layout() そして Pauli.apply_layout()QiskitError を発生させるように修正しました。

  • のバグを修正しました。 ConsolidateBlocks トランスパイラー・パスのバグを修正しました。入力回路にカスタム不透明ゲートが含まれ、 basis_gates または target オプションが設定されていない場合、パスは QiskitError を発生させて失敗していました。 このような状況では、トランスパイラー・パスは失敗する代わりに、カスタム・ゲートを含むブロックを連結しないように修正された。

  • のバグを修正しました。 PadDynamicalDecouplingにおいて、前後のノードが入出力ノードであった場合に、遅延がパルス整列されていないというエラーメッセージが正しく表示されなかったバグを修正した。 これでエラーメッセージが正しく表示されるようになった。

  • 関数のキーワード引数 orderBitArray.from_bool_array() のキーワード引数は "little" または "big" でなければならない。 無効な値が入力された場合にエラーを発生させるチェックを追加。

  • によって生成されるゲートの分解を、アンシラ量子ビットを使用せずに改善する。 QuantumCircuit.mcx() で生成されるゲートの分解をアンシラ量子ビットを使わずに改善する。 CXGateの数が指数関数的ではなく、予想通り量子ビットの数に対して二次関数的に増加するように。

  • 修正 SparsePauliOp.apply_layout() ゼロ量子ビット演算子で正しく動作するように修正。 例えば、以前に0量子ビットを作成し、次のようなレイアウトを適用したとする:

    op = SparsePauliOp("")
    op.apply_layout(None, 3)

    というエラーが出ていたはずだ。 これで、演算子は正しく返されるようになった: SparsePauliOp(['III'], coeffs=[1.+0.j])

  • のバグを修正した。 StatevectorSamplerc_if のバグを修正した。 を扱えないため、エラーとなる。 Statevectorc_if を処理できないため、エラーが発生します。

  • トランスパイラー・パスの Commuting2qGateRouter 量子レジスタの順列がパスのプロパティセットに追加されていなかったため、ユーザーが手動で追跡する必要がありました。 これで、出力回路の layout プロパティを通して並べ替えにアクセスし、情報を失うことなくパスを任意のトランスピレーション・パイプラインにプラグインすることが可能になった。

  • 特定のパルス単位を秒とナノ秒の間でスケーリングする際の浮動小数点の不正確さを修正。 パルスが記号的に定義されていた場合、 symengine の特定のビルドに対するスケーリングによって不要な浮動小数点エラーが発生する可能性があり、記号が完全にバインドされた後に予期しない結果が現れる可能性がある。 修正 #12392

  • のバグを修正した。 synth_cnot_count_full_pmh()section_size 、量子ビットの数を余りなく割らないものを指定すると、間違った結果になるバグを修正。 これで、どんな section_size (最大でも量子ビットの数に等しい)も正しい回路を合成する。 (発見的な)最適値については、 section_size=None を設定する。

  • PassManager.run() は、複数の入力が与えられたときに、シリアルのみで動作するのであれば、それ自身をシリアル化するのに時間を浪費することはなくなる。

  • のバグを修正。 plot_coupling_map() のバグを修正。 修正 #12354

  • OpenQASM 2.0 パーサー (qasm2.load()qasm2.loads()) は、システム・サイズの整数をオーバーフローするような整数オペランドを含むゲート角式を評価できるようになりました。 これらは倍精度浮動小数点のコンテキストで評価される。 注意:任意に大きな整数は、必ずしも倍精度浮動小数点で正確に表現できるわけではないので、回路がどのように生成されたにせよ、すでにすべての数値精度を失っている可能性があるmodulo 2π2\pi

  • OpenQASM 3 エクスポーター( qiskit.qasm3を参照)は、キーワードやその他の無効な識別子を "basis gate "として使うように要求された場合、正しくエラーになるようになりました。

  • OpenQASM 3 エクスポーター (qiskit.qasm3)は、回路から PauliEvolutionGate を正しくエクスポートするようになりました。 以前は、単一のインスタンスだけがエクスポートされ、他のインスタンスはすべて同じ(正しくない)バージョンを黙って使用していた。

  • OpenQASM 3 エクスポーター (qiskit.qasm3)はゲート名を正しくエスケープするようになりました。 以前は、名前が無効な OpenQASM 3識別子であるゲートは、無効な OpenQASM 3を生成していた。

  • との間の一連の入力処理の不整合。 transpile()generate_preset_pass_manager() の間の一連の入力処理の不整合が修正された。 このような不整合は、同じ入力に対して異なるトランパイル出力を引き起こしたり、あるいは generate_preset_pass_manager() で受け入れられる入力の組み合わせによっては失敗する。 transpile().

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