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 のバージョンとの互換性を最大にしたいのであれば、これは必要ありません。 - QPYファイル内にバインドされていない
-
Qiskit 0.45 シリーズの QPY ファイルは、非常に特殊でありそうもない状況下で、Qiskit 1.2.4 を含む Qiskit の新しいバージョンでロードに失敗することがあります。 基準は以下の通り:
- その
QuantumCircuitまたはScheduleBlockダンプされるParameterExpressionオブジェクトが含まれていた、 - インストールされている
symengineのバージョンが 0.9 シリーズ (Qiskit 0.45 のサポート期間中にリリースされた最新のもの) である use_symengine=Trueフラグがセットされていた(デフォルトではなかった )。
生成中に使用されたQiskitの後のバージョンは、
symengine0.9 より新しいバージョンを必要としたため、影響を受けない。この場合、Qiskit 0.45.3 および
symengine0.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。 これは、symengine0.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_level2 または 3 を使用します。 以前は、このような条件下では、トランスパイラがinitステージの一部としてElidePermutationsパスはinitステージの一部として実行されていました。SwapGateとPermutationGateインスタンスを回路から削除するのに有効な最適化だからである。 しかし、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_level2または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. クラスQFTSynthesisFullはsynth_qft_full()に基づいており、全対全の接続性を仮定したQFTゲートを合成します。 クラスQFTSynthesisLineはsynth_qft_line()に基づいており、線形最近傍接続を仮定したQFTゲートを合成する。 -
に2つのパラメーターを追加した。
GenericBackendV2エラー (noise_info) とパルスチャンネル情報 (pulse_channels) をバックエンドの構築から除外する。 これらのパラメータはデフォルトでTrue、コンストラクタの初期デフォルト動作を再現している。 メモリに敏感なユーザーは、これらのオプションをFalseに設定することで、大規模なトランスパイル時に 40x のメモリ・オーバーヘッドを削減することができる。GenericBackendV2. -
この
StabilizerStateクラスに新しいメソッドStabilizerState.probabilities_dict_from_bitstring()メソッドが追加されました。 以前はStabilizerState.probabilities_dict()が利用され、最悪の場合、ユーザーが単一の結果を望んだとしても、(状態に応じて)( ) 回の確率計算を行うことになる。 この新しい方法では、ユーザーが確率を測定するために渡す単一の結果ビット列値だけを計算することができる。 量子ビット数が増えれば増えるほど、1ビットストリングの結果しか測定されないため、(状態によっては)性能向上がより顕著になる可能性がある。 -
Shukla-Vedulaアルゴリズムを使用して、一様な重ね合わせ状態を作成できる
UniformSuperpositionGateクラスを実装。 この機能により、一様な重ね合わせ状態 を生成する量子回路の作成が容易になります。 は、 の振幅を持つ計算基底状態の数を表す正の整数です。この実装では、 の量子ビットと のゲートしか必要とせず、一様な重ね合わせ状態を効率的に作成できます。 使用例: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')
-
のサポートを追加した。
AnnotatedOperation.paramsおよびAnnotatedOperation.validate_parameter()をサポートし、注釈付き操作の回路レベルのパラメータ処理(バインディング・パラメータなど)を可能にした。 -
CircuitInstructionそしてDAGOpNodeのさまざまなプロパティを照会するための新しいメソッドを持っている。Operationのさまざまなプロパティを問い合わせるための新しいメソッドを備えている。 これらのメソッドは次のとおりです。CircuitInstruction.is_standard_gate()そしてDAGOpNode.is_standard_gate(),CircuitInstruction.is_controlled_gate()そしてDAGOpNode.is_controlled_gate(),CircuitInstruction.is_directive()そしてDAGOpNode.is_directive(),CircuitInstruction.is_control_flow()そしてDAGOpNode.is_control_flow()そしてCircuitInstruction.is_parameterized()そしてDAGOpNode.is_parameterized().
該当する場合、これらの方法のいずれかを使用すると、クエリまたは
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_distributionとmax_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")
-
メソッドのパフォーマンス向上
DAGCircuit.quantum_causal_cone()は、異なるパスから到達したときに、同じ非直接ノードを複数回検査しないことによって、パフォーマンスを向上させた。 -
メソッドに
insert_barriersキーワード引数を追加。QuantumCircuit.repeat()メソッドにTrueに設定すると、サーキットの繰り返しの間にバリアが挿入される。 -
の内部合成アルゴリズムを置き換える。
StatePreparationとInitializeの内部合成アルゴリズムを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 量子デバイスのものと一致するように更新された。versionおよびcircuit_metadataは、すべての V2 の実装に対して追加されるshotsのために追加される。BackendSamplerV2そしてBackendEstimatorV2precisionはtarget_precisionにリネームされる。StatevectorEstimator
のメタデータには。
StatevectorEstimatorのメタデータはshotsを持たない。Statevectorとショットは使用されません。
OpenQASM 特徴
-
OpenQASM 3 エクスポーター(
qiskit.qasm3)の内部シンボルテーブルが書き直され、その結果、 OpenQASM 3標準ライブラリヘッダにないQiskit標準ライブラリゲートを使用したときの出力がすっきりし、より決定論的な出力が得られるはずです。 例えば、複数のRZXGateまた、名前の衝突が発生した場合、シンボル・テーブルは、名前を一意にするために、非決定的な整数ではなく、決定論的なカウンターを割り当てるようになりました(以前は、オブジェクトのIDが使用されていました)。 -
OpenQASM 3.0 標準ライブラリの vendored バージョンが更新され、 コミット 4ca1d79383 時点の状態と一致するようになりました。 これは一般的にQiskitの使用には何の影響もありません。
合成機能
-
MCXRecursive制御量子ビットと単一のクリーンな補助量子ビットを持つ場合、最大でも CXゲートを必要とする。 -
MCXVChainrelative_phaseと action_onlyの2つの新しいブールパラメータが追加された。action_onlyがTrueの場合、回路は汚れた量子ビットをクリーニングしない。relative_phaseがTrueの場合、ゲートはグローバル位相まで実装される。 の分解を最適化するために使用される。MCXVChain. -
MCXVChainのコントロールと のダーティな補助量子ビットでは、 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ゲート数の上限を最小化しようとする値が選択される。すなわち、 。ここで、 は量子ビットの数であり、 。 -
この関数
synth_clifford_bm()はRustに移植された。 この関数は、CXゲートの数に対して、1,2,3量子ビットの演算子を最適に合成する。Clifford演算子を最適に合成します。 これはパフォーマンスの大幅な向上につながる。 3量子ビット以上のクリフォードでは、80倍のスピードアップである。 -
機能
synth_clifford_greedy()演算子を合成する関数Clifford演算子を合成する関数がRustに移植され、すべての量子ビット数でパフォーマンスが大幅に向上した。 50量子ビットを超えるクリフォードでは、1000倍のスピードアップとなる。 -
キーワード引数
wrapをProductFormulaこの引数を有効にすると、個々のパウリ進化項がラップされます。 これは回路を視覚化する際に役立つ。 -
の引数
atomic_evolution。ProductFormula(およびそのサブクラス)に新しい関数シグネチャが追加された。 あるパウリ演算子と時間係数を受け取って進化回路を返すのではなく、新しい関数は既存の回路を取り込み、この回路に与えられたパウリ演算子と時間の進化を加えるべきである。 この新しい実装では、パフォーマンスが大幅に向上している。 -
のパフォーマンスを改善した。
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を追加。 このフラグがセットされると、プリセットパスマネージャはSabreLayoutとSabreSwapトランスパイラ・パスを実行します。 このオプションの使用は、異なるコンピューター間での出力の決定性と、より少ない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) の値に設定される のメモリ・オーバーヘッドを減少させる。CircuitInstructionとDAGOpNodeオブジェクトへの複数アクセスによる実行時間の増加という代償を払うことになる。CircuitInstruction.operationとDAGOpNode.op. Qiskit Python パッケージをソースからビルドするときにこの環境変数が設定されていると、これらの属性のリターンのキャッシュが無効になります。
回路アップグレードに関する注意事項
-
メソッドの
annotated引数がデフォルトで になりました。Gate.control()メソッドの引数はデフォルトでNone、Qiskitが制御された操作に注釈を付けるかどうかを選択できるようになりました。 具体的な実装 (annotated=False) があれば、デフォルトでそれが返される。 そうでない場合は、注釈付き実装が返される (annotated=True)。これにより、例えば、制御されたパラメータ化されたゲートの合成を延期することができます。 -
その
OperationインスタンスDAGOpNode.opのインスタンスは、基礎となるオブジェクトへの共通参照を共有するとは限りません。 を参照によって直接変異させることは不健全であった。DAGOpNode.opの内部リファクタリングにより、DAGの内部状態を追跡することができる。QuantumCircuitとDAGCircuitの内部リファクタリングにより、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では、翻訳/合成段階の前にピープホール最適化が追加採用された(以前は最適化段階でのみ行われていた)。 ピープホール最適化の効果には、例えば、回転角が より小さい制御位相ゲートなど、同一性に非常に近いゲートの除去が含まれる。
-
の最適化レベル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 リリースで追加された新機能を使用しているためです。
回路の廃止予定
-
以下の回路メソッドは一般に使用されることを意図したものではないが、 1.0 リリース時に誤ってパブリック API に文書化されたままになっていた。 これらは Qiskit 1.2 から非推奨となり、Qiskit では削除される予定です。 2.0:
-
をタプルのような反復可能なものとして扱うことは非推奨です。
CircuitInstructionをタプルのような反復可能なものとして扱うことは非推奨であり、このレガシーなパスの方法は Qiskit 2.0 で削除される予定です。 アトリビュート・アクセス・フィールドCircuitInstruction.operation,CircuitInstruction.qubitsそしてCircuitInstruction.clbitsを使うべきである。 例:from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2, 2) qc.h(0) qc.cx(0, 1) qc.measure([0, 1], [0, 1]) # Deprecated. for op, qubits, clbits in qc.data: pass # New style. for instruction in qc.data: op = instruction.operation qubits = instruction.qubits clbits = instruction.clbits
プリミティブの非推奨化
-
原始的な V1 実装と V1-exclusive バージョン管理されていない型エイリアスは、 V2 対応するものを優先して非推奨となりました。 この非推奨は、 V1 インターフェースを実装する以下のクラスにも適用される:
EstimatorV2、StatevectorEstimatorSamplerV2、StatevectorSamplerBackendEstimatorV2、BackendEstimatorV2BackendSamplerV2、BackendSamplerV2
また、次のような非バージョン型のエイリアスもある:
この非推奨は**、** 明示的にバージョン管理された
BaseEstimatorV1およびBaseSamplerV1抽象インターフェイス定義や関連する結果クラスやジョブクラスには影響しません。
プロバイダーの廃止予定
-
この
BackendV1クラスは非推奨であり、次のメジャーリリース( 2.0.0 )より前に削除される予定です。 へのアップデート方法の詳細については、 移行ガイドを参照してください。BackendV2. -
Qobj構造体と関連クラス(
qiskit.qobjを参照)は現在非推奨です。 ワークフローの一部として導入された。BackendV1ワークフローの一部として導入された。BackendV2バックエンドとのやりとりにはもはや必要ない。QuantumCircuitシリアライズは、QPY (参照qiskit.qpy)または OpenQASM (qiskit.qasm2およびqiskit.qasm3を参照)。
トランスパイラーの非推奨機能
- この
assemble()関数は非推奨となり、 2.0 リリースで削除される予定です。 この関数は、主にQobj。BackendV2-ベースのワークフローではもはや必要ない。 また、パラメータをバインドするためにも使用されました。QuantumCircuit.assign_parameters().
可視化の非推奨機能
-
の引数
justify。circuit_drawer()またはQuantumCircuit.draw()の引数は、無効な値をサポートしなくなり(以前はデフォルトに変更していた)、将来のリリースではエラーになる。 有効なジャスティファイ値は"left","right"または"none"です。 -
この
visualize_transition()関数は非推奨となり、 2.0.0 リリースで削除される予定です。 この機能には多くの制約があり、そのためその有用性は非常に特殊な使用例のみに限定され、Qiskit可視化モジュールの他の部分と適合しませんでした。
バグ修正
-
パラメータ化された標準ゲートを制御する際の一連の問題を修正。 いくつかのゲートのコントロールされたバージョン(例えば
RXXGateまたはRYGateまたは1つ以上のコントロールの場合)は、未束縛のパラメータを含むと合成できない。 以前は、このような場合に.control()。AnnotatedOperationを作成する。 これにより、制御されたゲートを回路に挿入し、後の段階でパラメータをバインドし、動作を合成することができる。 10311 、#10697 、#12135 を修正。 -
その
SGateとSdgGateを正しく返すようになった。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において、前後のノードが入出力ノードであった場合に、遅延がパルス整列されていないというエラーメッセージが正しく表示されなかったバグを修正した。 これでエラーメッセージが正しく表示されるようになった。 -
関数のキーワード引数
orderはBitArray.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 。 -
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().