Qiskit SDK 1.3 リリースノート
1.3.3
前奏曲
Qiskit 1.3.3 は 1.3 シリーズのマイナーバグフィックスリリースです。
バグ修正
-
メソッドで
reverse_bits = Trueパラメータを使用すると、バリアラベルの位置が不正確になるバグを修正しました。QuantumCircuit.draw()メソッドで このバグにより、バリアオペレーションのラベルの位置がずれ、回路を視覚化する際に混乱を招く可能性があった。 修正 #13609。 -
超演算子表現における非条件付きエルミート行列に対して小さな正則化係数を適用。
-
のバグを修正しました。
CommutationChecker整流キャッシュにないゲートで2量子ビットのパウリ回転の整流関係をチェックすると失敗することがあるバグを修正。 例:import numpy as np from qiskit.circuit.library import RXXGate, RGate from qiskit.circuit.commutation_library import SessionCommutationChecker as scc res = scc.commute(RGate(2, 2), [1], [], RXXGate(np.pi / 2), [0, 1], [])この動作は解消され、転流関係が正しく計算されるようになった。 #13742 を修正。
-
と
QuantumCircuit.qubit_stop_time()とQuantumCircuit.qubit_duration()が誤った時間(継続時間)を返すバグを修正。 この問題は、ある量子ビットに命令があり、他の量子ビットがアイドル状態のときに発生した。 8729を修正。 -
のバグを修正した。
RemoveIdentityEquivalentトランスパイラ・パスのバグを修正。グローバル位相までの同一性に近いゲートが回路から削除されたが、回路のグローバル位相は更新されなかった。 特にRemoveIdentityEquivalentはパラメータ化されていないGlobalPhaseGateゲートを削除した。 #13778 を修正。 -
のバグを修正。
random_clifford()のバグを修正した。 13606を修正。 -
この場合
SabreLayoutがレイアウトとルーティングの両方を同時に行うために使われる場合(デフォルト・オプションのtranspile()とgenerate_preset_pass_manager()のように)TargetまたはCouplingMapを使用し、入力回路がカップリングマップの1つのコンポーネントに収まる場合、配線の順列が正しく追跡されるようになりました。以前は、配線された回路で使用される量子ビットに間接的にでも接続されていない結合マップの量子ビットは、最終的な配線の順列には含まれていなかった。 への呼び出しなど、コンパイルが成功したように見えても、障害発生地点から遠く離れた場所で驚くような動作を引き起こす可能性がある。
TranspileLayout.final_index_layout()への呼び出しなどだ。KeyError.このバグは、ほとんどがそうであるように、完全に接続されているバックエンドには影響しなかった。 #13732 を修正。
1.3.2
前奏曲
Qiskit 1.3.2 は 1.3 シリーズのマイナーバグフィックスリリースです。
合成アップグレードに関する注意事項
- の高位合成プラグインは
LinearFunctionの高位合成プラグインは、 メソッドにLinearFunction以外のオブジェクトがrunメソッドに渡されたときにエラーが発生しなくなりました。 その代わりに、他のプラグインと同じNoneを返すようになった。 このエラーの発生を信頼した場合は、手動でインスタンス・チェックを行うことができる。
バグ修正
-
これまでは
CommutationCheckerの整流関係を熱心にキャッシュしていた。Instructionparamsの整流関係をキャッシュしていた。 このため、命令の定義が属性以外の追加情報に依存している場合、不正確な結果につながる可能性がある。params属性だけでなく、例えばPauliEvolutionGate. この動作は修正され、整流チェッカーはQiskitネイティブの標準ゲートに対してのみ整流を熱心にキャッシュするようになりました。 カスタム・ゲートの場合、この変更はパフォーマンス・コストがかかるかもしれないが、安全でないキャッシュを避けることによって正しい結果を保証する。 -
のバグを修正しました。
CommutationCheckerのバグを修正しました。params属性に数値以外の値(たとえばPauliGateのような)属性に数値以外の値を持つ命令の整流関係をチェックするとエラーが発生するバグを修正しました。 #13570を修正。 -
は
CommutationCheckerのコミュテーションを正しく処理しなかった。CRXGate,CRYGateとCRZGateこれらの場合、これらのゲートはどのようなゲートともコミュートすると誤って仮定されていた。 この動作は修正され、回転角度が の倍数である場合に限り、これらのゲートはどのゲートとも正しくコミュケートされるようになった。 -
以下の回路ライブラリ関数を
num_qubits=1で呼び出すとエラーが発生するバグを修正:efficient_su2(),real_amplitudes(),excitation_preserving()とpauli_two_design()(1量子ビットの場合、これらの回路には2量子ビットのゲートは含まれません)。 #13480を修正。 -
の高位合成ルーチンに
"mcmt"という名前の命令が誤って渡されるバグを修正した。MCMTGateの高位合成ルーチンに不正に渡され、失敗または無効な結果になるバグを修正した。 この問題は、たとえばMCMTこの問題は、例えば、"mcmt"という名前の回路を処理し、それを暗黙のうちに命令に変換する場合(例えば、それを別の回路に追加する場合)に発生する可能性があります。 修正 #13563。 -
のデフォルトの積式合成が、演算子のすべての同一項を正しく扱えないというバグを修正した。
PauliEvolutionGateのデフォルトの積式合成が、演算子内のすべての同一項を正しく扱えなかったバグを修正した。 全同一項は、-evolution_timeに等しいグローバルな位相を導入するはずであるが、ファクター2だけずれており、パラメータ化された時間では壊れる可能性がある。 修正 #13625。 修正 #13675。 修正 #13644。 -
を使用したパウリ進化合成で生成される回路の不整合を修正した。
SuzukiTrotterまたはLieTrotter(デフォルト)メソッドで生成された回路の不整合を修正。 パラメータ化された進化時間の場合、結果として得られる回路には、スプリアスなゼロ複素数部分を持つパラメータが含まれ、それが次の出力に影響した。ParameterExpression.sympify(). 出力には正しく実数値のみが含まれるようになった。 修正 #13642。 -
を使用すると、元のオブジェクトの長さが1であった場合に、誤った形状の位相属性が生成されるバグを修正。
PauliList.insert()がqubit=Trueで、元のオブジェクトの長さが 1 の場合に、誤った形状の位相属性を生成する原因となっていたバグを修正しました。 修正 #13623。 -
のバグを修正。
qasm3.Exporterのバグを修正しました。このバグにより、ユニタリー・ゲートを処理する際、paramsフィールドの処理が正しく行われず、エクスポータがクラッシュしていました。 修正 #13362。 -
メソッドのバグを修正。
Target.instruction_supported()メソッドで、self.num_qubits==Noneを持つターゲットが、サポートされている基底セットとは関係なく、常にFalseを返してしまうバグを修正。 -
トランスパイラー・パスの
UnitarySynthesisトランスパイラ・パスのバグを修正しました。UnitaryGateが正しく合成されないというトランスパイラ・パスのバグを修正しました。 そのため、例えば、最後に処理されたブロックで回路が上書きされたり、そのようなブロックの後で測定に遭遇すると内部がパニックに陥ったりした。 #13586を修正。 -
のバグを修正した。
UnitarySynthesisトランスパイラー・パスのバグを修正。 non-2-qubit ゲートが利用可能な2量子ビット基底に含まれてしまい、次元の不一致のためにTwoQubitWeylDecompositionがパニックに陥る。 -
を初期化する際のバグを修正した。
SparsePauliOpYcoeffsを初期化すると、係数が1に近くなるが浮動小数点エラーが発生するバグを修正した。 係数はデフォルトで正しく1になっている。 修正 #13522。
1.3.1
前奏曲
Qiskit 1.3.1 は 1.3 シリーズのマイナーバグフィックスリリースです。
回路アップグレードに関する注意事項
- ゲートのジェネリック制御方法は、ゲートがすでにサポートされている場合に、ゲートをサポートされているベースに変換しようとすることを避けるようになった。 これにより、制御されたゲートの合成が若干変わるかもしれないが、2量子ビットのゲート数が増えることはないはずだ。
バグ修正
-
、ブロック内に定義がない命令に対して
QuantumCircuit.decompose()c_ifを呼び出すとエラーが発生するバグを修正した。 #13493を修正。 -
制御フロー操作内部の操作(例えば
QuantumCircuit.for_loop()) を呼び出すと、正しく分解されなかった。QuantumCircuit.decompose(). #13544を修正。 -
のデフォルト定義を追加した。
FullAdderGate,HalfAdderGate,ModularAdderGateおよびMultiplierGateゲートのデフォルト定義を追加した。Operatorをこれらのゲートを含む量子回路から構築できるようにした。 -
が必要とするクリーンなアンシラ量子ビットの数を修正した。
FullAdderSynthesisV95,HalfAdderSynthesisV95およびModularAdderSynthesisV95プラグインに必要なクリーンなアンシラ量子ビットの数を修正。 -
不足していた
FullAdderSynthesisDefaultに最適な分解を選択するプラグインを追加した。FullAdderGateの最適な分解を選択するプラグインを追加。 -
固定
HalfAdderSynthesisDefaultおよびModularAdderSynthesisDefaultプラグインHalfAdderGateとModularAdderGateに対して、利用可能なクリーンなアンシラ量子ビットの数に基づいて最適な分解を選択する。 -
パラメータ割り当て時の不正なキャッシュ動作を修正。
EquivalenceLibrary内の定義が壊れてしまうことがありました。 これにより、基底翻訳を並行して実行する際の予期せぬ問題が解決される。 修正 #13504。 -
パラメータ化されたグローバル位相を持つ回路を処理する際に、パラメータ割り当て時にグローバル位相が正しく割り当てられない一連のバグを修正。 これまでに報告されているケースは以下の通り:
- を呼び出した後にパラメータを割り当てる。
QuantumCircuit.decompose()を呼び出した後、パラメータを割り当てる - DAGから構築された回路に、パラメータを割り当てる。
dag_to_circuit() - で作成された回路にパラメータを割り当てる。
pauli_twirl_2q_gates()で作成された回路にパラメータを割り当てる
修正 #13534。
- を呼び出した後にパラメータを割り当てる。
-
のバグを修正。
RZGate.control()のバグを修正した。 #13473 を修正。
1.3.0
前奏曲
Qiskitバージョン 1.3.0、トランスパイラのパフォーマンスと品質が大幅に改善されました。 この新バージョンのQiskitには多くの新機能、修正、改善が導入されています:
Qiskitのトランスピレーションの中核となるデータ構造は、内部的にRustに移植されている。 これには次のようなコンポーネントが含まれる。
DAGCircuit,Target,EquivalenceLibraryなどが含まれる。 これらすべてのデータ構造のパブリックAPIは変更されていないが、書き換え後のパフォーマンスは向上している。プリセットパスマネージャで使用されるトランスパイラパスの大半がRustに移植され、その結果、 ベンチプレスのベンチマークを実行した場合、Qiskit 1.2.4 と比較して平均 6x の全体的なランタイムの改善が得られました。 書き換えの恩恵を大きく受けた、特にインパクトのあるパスは以下の通りだ。
BasisTranslator,CommutationAnalysis,ConsolidateBlocksとUnitarySynthesis. 移植されたパスの完全なリストについては、機能リリースノートを参照してください。コンパイル品質と回路構築速度を向上させる回路ライブラリの改良。 オペレーションは現在、次のように区別されている:
- 構造的な操作は、一意な分解を持ち、関数として表現される。
QuantumCircuit(を返す関数として表現される(たとえばreal_amplitudes()).これらの関数のほとんどはRustで構築されているため、回路構築の実行時間が大幅に短縮される。- さまざまな分解を使用して実装できる抽象的な操作は、次のように表されます。
GateまたはInstruction(で表される(たとえばPauliEvolutionGate).これにより、抽象的な量子回路を構築し、コンパイラに最適な分解を選択させることができる。抽象回路記述の使用は、以下の改良と組み合わせることで特に強力になります。
HighLevelSynthesisトランスパイラ・パスは、アイドル補助量子ビットを考慮して、与えられたゲートに対して利用可能な最良の分解を見つけることができるようになりました。Python 3.8 が2024-10年にサポート終了となったため、最低限サポートされる Python のバージョンは 3.9 となった。 Python 3.13 の公式サポートもこのリリースで追加された。
回路の特徴
-
の機能が改善された。
CommutationCheckerの機能を改善し、以下のパラメータ付きゲートのサポートを追加した:RXXGate,RYYGate,RZZGate,RZXGate,RXGate,RYGate,RZGate,PhaseGate,U1Gate,CRXGate,CRYGate,CRZGate,CPhaseGate.以前は、これらは束縛されたパラメーターでのみサポートされていた。 -
新しい関数
quantum_volume()量子体積QuantumCircuitオブジェクトを生成する関数を追加した。 クロスほか ランダム化モデル回路を用いた量子コンピュータの検証, Phys. Rev. A 100, 032328 (2019). この新しい関数は、既存のQuantumVolumeオブジェクトを返すという点で、既存のQuantumCircuitオブジェクトを返すという点です。 もうひとつは、この新しい関数がマルチスレッド化され、Rubstで実装されているため、出力回路 ~10x。QuantumVolumeクラスよりも高速に出力回路を生成します。 -
引数
QuantumVolumeclassical_permutationTrueクラスを構築する際の実行時のパフォーマンスを改善した。 内部的にはquantum_volume()関数を呼び出すようになった。この関数はRustで書かれており、量子ボリューム回路を生成する際に ~10x。 -
新しい回路操作関数
pauli_twirl_2q_gates()を追加した。この関数を使うと、与えられた回路にパウリ・ツワーリングを適用することができる。 これは、固定された2量子ビットゲートのセットを回転させる場合にのみ機能する。CXGate,ECRGate,CZGate,iSwapGate.例えばfrom qiskit.circuit import QuantumCircuit, pauli_twirl_2q_gates qc = QuantumCircuit(2) qc.cx(0, 1) twirled_circuit = pauli_twirl_2q_gates(qc, seed=123456) twirled_circuit.draw("mpl")
-
2つの -qubitレジスタのインプレース加算のためのバイナリ演算ゲートが追加された( )。このゲートは
ModularAdderGateはモジュロ加算を実装している。HalfAdderGateはキャリーアウト量子ビットを含みFullAdderGateはキャリー・インとキャリー・アウトの両方の量子ビットを含む。 詳細と例については、それぞれのドキュメントを参照してください。などの既存のライブラリ回路とは対照的に、抽象ゲートを扱うことで、コンパイラ(またはユーザ)は回路のコンテキストに応じて最適なゲート合成を選択することができます。
CDKMRippleCarryAdder抽象ゲートを扱うことで、コンパイラ(またはユーザ)は回路のコンテキストに応じて最適なゲート合成を選択できる。 -
を追加した。
MultiplierGate2つの -qubitレジスタの乗算、つまり 。詳細と例はクラス・ドキュメントを参照。 -
のブール論理量子回路は、次のように等価表現される。
qiskit.circuit.libraryに相当するGateオブジェクトとして表現できるようになった。HighLevelSynthesisトランスパイラ・パスとプラグイン・インフラストラクチャで使用できるようになりました。AndGate代表AND,OrGate代表OR,BitwiseXorGate代表XOR,InnerProductGateを表す。InnerProduct.
-
の特別な実装が追加された。
__eq__()の特別な実装がすべての標準ライブラリ回路ゲートに追加された。 標準的なゲートのほとんどはすでにこの方式に特化していたが、そうでないものもいくつかあり、予期せぬ場所で大幅なスローダウンを引き起こす可能性があった。 -
追加
evolved_operator_ansatz(),hamiltonian_variational_ansatz()そしてqaoa_ansatz()を回路ライブラリに追加し、作用素展開に基づく変分回路を実装した。evolved_operator_ansatz()とqaoa_ansatz()は関数的に等価である。EvolvedOperatorAnsatzとQAOAAnsatzと同等だが、一般的にはより高性能である。ハミルトニアン
hamiltonian_variational_ansatz()は、単一のハミルトニアンを受け取り、それを自動的に通約項に分割してハミルトニアン変分アサッツを実装するように設計されています。 これはすでにEvolvedOperatorAnsatzを使って手動で行うこともできたが、より便利になった。 -
追加
grover_operator()を追加し、Groverのアルゴリズムや振幅推定/増幅などで使われるGrover演算子回路を構成できるようにした。 この関数はGroverOperatorに似ているが、マルチ制御Xゲートの実装を選択する必要はなく、コンパイラに最適な分解を決定させる。 さらに、回路を不透明なゲートに包み込むこともなく、移調に必要な分解回数が減るため、より高速になる。from qiskit.circuit import QuantumCircuit from qiskit.circuit.library import grover_operator oracle = QuantumCircuit(2) oracle.z(0) # good state = first qubit is |1> grover_op = grover_operator(oracle, insert_barriers=True) grover_op.draw('mpl')
-
新しいデータ属性、
qiskit.circuit.CONTROL_FLOW_OP_NAMESは、与えられたInstructionがコントロール・フロー操作であるかどうかを、名前から簡単に見つけてチェックすることができる。 -
標準等価ライブラリ(
SessionEquivalenceLibrary)は、Qiskitの標準ライブラリ 2q 連続イジング型相互作用(例えばCPhaseGate,RZZGate,RZXGateなど) を局所等価関係を使って直接変換できるルールが追加されました。 以前は、これらの変換のいくつかが2-CX形式を経由していたため、回路生成の効率が悪かった。注一般的に
BasisTranslatorに対して "最良 "の等価関係を見つけることは保証されない。Targetに対して "最良の "等価関係を見つけることは保証されないが、等価関係が存在すれば必ず見つける。 出力を向上させるために、より高価なトランスパイラの再合成とゲート最適化パスに頼っている。 これらのパスは、離散的な超制御2量子ビット相互作用の場合ほどには、連続的にパラメトライズされた2量子ビット相互作用を持つ基底セットには有効ではありません。 -
に新しい引数
"apply_synthesis"を追加した。Decomposeこれにより、トランスパイラ・パスは、合成ルーチンによってのみ定義されるオブジェクトを分解するために高位合成を適用することができる。 例:from qiskit import QuantumCircuit from qiskit.quantum_info import Clifford from qiskit.transpiler.passes import Decompose cliff = Clifford(HGate()) circuit = QuantumCircuit(1) circuit.append(cliff, [0]) # Clifford has no .definition, it is only defined by synthesis nothing_happened = Decompose()(circuit) # this internally runs the HighLevelSynthesis pass to decompose the Clifford decomposed = Decompose(apply_synthesis=True)(circuit) -
を追加した。
iqp()瞬間量子多項式時間(IQP)回路を構築する機能を追加した。 既存のIQPクラスに加えて、ランダムなIQP回路の構築も可能である:from qiskit.circuit.library import random_iqp random_iqp = random_iqp(num_qubits=4) random_iqp.draw('mpl')
-
を追加した。
MCMTGateを追加し、マルチ・コントロール・マルチ・ターゲットの操作をゲートとして表現できるようにした。 この既存の回路のゲート表現MCMTこのゲート表現により、コンパイラは回路に存在する補助量子ビットの数と状態に応じて、利用可能な最良の実装を選択することができます。希望する実装は、高位合成プラグインを指定することで選択できる:
from qiskit import QuantumCircuit, transpile from qiskit.circuit.library import MCMTGate, HGate from qiskit.transpiler.passes import HLSConfig # used for the synthesis config mcmt = MCMTGate(HGate(), num_ctrl_qubits=5, num_target_qubits=3) circuit = QuantumCircuit(20) circuit.append(mcmt, range(mcmt.num_qubits)) config = HLSConfig(mcmt=["vchain"]) # alternatively use the "noaux" method synthesized = transpile(circuit, hls_config=config)さらに
MCMTGateは、制御量子ビットのカスタム(つまりオープン)制御状態もサポートしている。 -
回路ライブラリーの近代化の一環として、以下の量子回路もオブジェクトとして表現されるか、合成法を用いて構築することができる。
Gateオブジェクトとして表現されるか、合成法を使用して構築することができます:GraphStateで表される。GraphStateGate,FourierCheckingを使用して構築できる。fourier_checking(),UnitaryOverlapを使用して構築できる。unitary_overlap(),HiddenLinearFunctionを使用して構築できる。hidden_linear_function(),PhaseEstimationを使用して構築できる。phase_estimation().
-
この
CommutationCheckerクラスはRustで書き直された。 このクラスは以前と同じ機能とパブリックAPIを保持しているが、ほとんどの場合において大幅に高速化されている。 -
PauliFeatureMapそしてZZFeatureMapでは、キーが量子ビットの数を表し、値がどの量子ビットが互いにエンタングルされているかを定義する整数タプルのリストである辞書として、エンタングルメントの指定をサポートしています。 これにより、特定の量子アルゴリズムに合わせた特徴マップをより柔軟に構築できる。 使用例:from qiskit.circuit.library import PauliFeatureMap entanglement = { 1: [(0,), (2,)], 2: [(0, 1), (1, 2)], 3: [(0, 1, 2)], } qc = PauliFeatureMap(3, reps=2, paulis=['Z', 'ZZ', 'ZZZ'], entanglement=entanglement, insert_barriers=True) qc.decompose().draw('mpl') -
その
count_ops()メソッドはQuantumCircuitのメソッドはRustで書き直されている。 今では3倍から9倍速く走る。 -
回路ライブラリ関数の追加
pauli_feature_map(),z_feature_map(),zz_feature_map()を追加した。 これらの関数は、現在の回路ライブラリ・オブジェクトよりも約 8x 速い、PauliFeatureMap,ZFeatureMapおよびZZFeatureMapよりも高速であり、将来的にはこれらに取って代わる予定である。これらの機能は、ドロップイン交換として使用することができる:
from qiskit.circuit.library import pauli_feature_map, PauliFeatureMap fm = pauli_feature_map(20, paulis=["z", "xx", "yyy"]) also_fm = PauliFeatureMap(20, paulis=["z", "xx", "yyy"]).decompose()
プリミティブ機能
-
にレベル1データのサポートが追加された。
BackendSamplerV2run()また、ラップされたBackendV2. 実行オプションは、options辞書内の"run_options"エントリを使用して指定することができます。BackendSamplerV2."run_options"のエントリーは、バックエンドのrun()メソッドに渡す引数名と値を対応付ける辞書でなければならない。 実行オプションで"meas_level = 1 "を設定すると、バックエンドからの結果はビット配列(レベル2フォーマット)ではなく、レベル1の結果として扱われる。 -
EstimatorそしてStatevectorEstimator入力回路がいくつかのサブシステムのリセットを含む場合、確率的な方法で期待値を返す。 以前は再現できなかった結果が、ランダムなシードを設定すれば再現できるようになった。 例:from qiskit.primitives import StatevectorEstimator estimator = StatevectorEstimator(seed=123)または:
from qiskit.primitives import Estimator estimator = Estimator(options={"seed":123})
OpenQASM 特徴
- クラス
qasm3.CustomGateはプログラムで検査できるようになった。 そのconstructor,name,num_paramsそしてnum_qubitsは、オブジェクトが構築された後、 Python から見ることができるようになった。 これにより、次のような提供されたデータ属性の内容を検査することができる。STDGATES_INC_GATES.
QPYの特長
- オブジェクトのQiskitネイティブ表現を追加する新しいQPYフォーマットバージョン13を追加。
ParameterExpressionオブジェクトを追加しました。
量子情報の特徴
-
の性能は
SparsePauliOp.from_operator()の性能は、 Qiskit 1.0 で紹介されたアルゴリズム改善手法の上に最適化されています。 完全に密な行列の場合、以前より約5倍高速になり、すべてのパウリ項を含む 10q 演算子を分解するのに約 40ms かかる。 -
に新しい引数
assume_unitaryを追加。qiskit.quantum_info.Operator.power().Trueの場合、Operatorを小数乗にするために、シューアの分解に基づくより高速な方法を用いる。 -
追加
SparsePauliOp.to_sparse_list()を追加しました。 これはSparsePauliOp.from_sparse_list(). 例:from qiskit.quantum_info import SparsePauliOp op = SparsePauliOp(["XIII", "IZZI"], coeffs=[1, 2]) sparse = op.to_sparse_list() # [("X", [3], 1), ("ZZ", [1, 2], 2)] other = SparsePauliOp.from_sparse_list(sparse, op.num_qubits) print(other == op) # True -
の性能は
Pauli.to_label()は大きなパウリに対して著しく改善された。 -
メソッド
Operator.power()は新しいパラメータbranch_cut_rotationを持つ。 これはルートの分岐点を移動させるために使用でき、どの行列が主ルートとして選ばれるかに影響する。 デフォルトでは、(パウリ作用素のような)実負の固有値を持つ作用素の根が数値精度の違いに対してより安定するように、小さな正の回転に設定されています。 -
新しいobservableクラスが追加されました。
SparseObservableと同様、観測値を項の総和で表す。SparsePauliOpと似ているが、2つの相違点がある:- それぞれの完全な項は、(事実上)一連の
(qubit, bit_term)ペアとして保存され、その項のアイデンティティを受ける量子ビットは保存されない。 これにより、ポーリスの加重和 のような観測値のメモリ使用量が大幅に改善される。 - 1量子ビットの項アルファベットは演算子空間に対して完全すぎる。
SparsePauliOpのような)パウリ演算子だけでなく、 のようなパウリ演算子の固有状態への射影子も表すことができる。このような投影子は、対応するパウリ作用素と同様にハードウェア上で効率的に測定することができるが、次のような場合は指数関数的な数が必要になる。SparsePauliOpを表現するためには指数関数的な数の項が必要になりますが、 クビット上ではSparseObservableは一つの項しか必要としません。
を構築し、操作することができる。
SparseObservableのユーザーにはおなじみのインターフェイスを使ってSparsePauliOp:from qiskit.quantum_info import SparseObservable obs = SparseObservable.from_sparse_list([ ("XZY", (2, 1, 0), 1.5j), ("+-", (100, 99), 0.5j), ("01", (50, 49), 0.5), ])SparseObservableプリミティブ(qiskit.primitives)への入力形式としてはサポートされていないが、将来的にはこれらのインターフェイスを拡張して、これらの形式を含むようにする予定である。 - それぞれの完全な項は、(事実上)一連の
合成機能
-
合成機能の追加
synth_mcx_gray_code()およびsynth_mcx_noaux_v24()を追加した。 これらの機能は、追加のアンシラ量子ビットを必要としない。 -
合成機能の追加
synth_c3x()とsynth_c4x()を追加し、それぞれ3制御と4制御のXゲートを合成するようにした。 -
合成機能の追加
synth_mcx_n_dirty_i15()ダーティな補助量子ビットを用いて 制御のマルチ制御Xゲートを合成し、最大で CXゲートを持つ回路を生成する。 アル。 (arXiv:1501.06911). -
合成機能の追加
synth_mcx_n_clean_m15()マスロフ( arXiv:1508.03273 )による、 クリーンな補助量子ビットを使って、 CXゲートを持つ回路を生成する、 制御を持つマルチ制御Xゲートを合成する関数を追加。 -
合成機能の追加
synth_mcx_1_clean_b95()Barencoら( arXiv:quant-ph/9503016 )による、 CXゲートを持つ回路を生成する単一のクリーンな補助量子ビットを使用して、 制御を持つマルチ制御Xゲートを合成する機能を追加。 -
追加
adder_qft_d00(),adder_ripple_c04()とadder_ripple_v95()で加算ゲートを合成する、ModularAdderGate,HalfAdderGateを追加した。FullAdderGate. -
追加
multiplier_cumulative_h18()とmultiplier_qft_r17()を合成するMultiplierGate. -
追加
synth_mcmt_vchain()高位合成プラグインとともに、線形数のトフォリゲートと k-1 k制御量子ビット用の補助量子ビットを持つマルチ制御マルチターゲットゲートを合成するためにMCMTSynthesisVChain. -
のハイレベル合成プラグイン構造を追加した。
MCMTGateを含むMCMTSynthesisNoAux(補助量子ビットなし)、前述のMCMTSynthesisVChain(num_control - 1補助量子ビットを使用)、およびMCMTSynthesisDefaultを追加し、コンパイラが最適な分解を選択できるようにしました。 -
この関数
random_clifford()はRustに移植され、実行時間が3倍改善された。 -
追加
ProductFormula.expand()積式の展開をスパース・パウリ形式で見ることができます。 例えば、ハミルトニアンの2次トロッター展開のフォーマットを次のように問い合わせることができる:from qiskit.quantum_info import SparsePauliOp from qiskit.circuit.library import PauliEvolutionGate from qiskit.synthesis.evolution import SuzukiTrotter hamiltonian = SparsePauliOp(["IX", "XI", "ZZ"], coeffs=[-1, -1, 1]) evo = PauliEvolutionGate(hamiltonian, time=3.14) trotter = SuzukiTrotter(order=2) print(trotter.expand(evo))を印刷する
[('X', [0], -3.14), ('X', [1], -3.14), ('ZZ', [0, 1], 6.28), ('X', [1], -3.14), ('X', [0], -3.14)] -
のプラグイン構造を追加。
PauliEvolutionGate. デフォルトのプラグインPauliEvolutionSynthesisDefaultは以前と同じように回路を構築するが、内部的にRustを使用しているため、より高速である。 回路が大きいほど(例えば。 ハミルトニアンサイズ、タイムステップ数、スズキ・トロッター次数によって)、高速化が大きくなる。 例えば、10回のタイムステップと4次のトロッター式を持つ100量子ビットのハイゼンベルグ・ハミルトニアンは、現在では ~9.4x。 新しいプラグインは、PauliEvolutionSynthesisRustiqは、 (de) BrugièreとMartielによる論文「ハミルトンシミュレーション回路のより高速でより短い合成」 に記載され、 Rustiq に実装されている合成アルゴリズムを使用します。 例:from qiskit.circuit import QuantumCircuit from qiskit.quantum_info import SparsePauliOp from qiskit.circuit.library import PauliEvolutionGate from qiskit.compiler import transpile from qiskit.transpiler.passes import HLSConfig op = SparsePauliOp(["XXX", "YYY", "IZZ"]) qc = QuantumCircuit(4) qc.append(PauliEvolutionGate(op), [0, 1, 3]) config = HLSConfig(PauliEvolution=[("rustiq", {"upto_phase": False})]) tqc = transpile(qc, basis_gates=["cx", "u"], hls_config=config) tqc.draw(output='mpl')
このコード・スニペットでは、 Rustiq プラグインを使って量子回路qcのオブジェクトを合成している。
PauliEvolutionGateオブジェクトを合成する。 このプラグインは、追加オプションupto_phase = Falseで呼び出され、グローバル位相が保持されない可能性がある代償として、より小さな回路を得ることができます。 サポートされるオプションの全リストはPauliEvolutionSynthesisRustiq. -
港
synth_cz_depth_line_mr()からラストへ。 この関数は、MaslovとRoettelerの方法に基づいて、線形最近傍(LNN)接続用のCZ回路を合成する。 350x350 のバイナリ行列では,Rust の実装により,約 30x の高速化が得られる. -
ポート
synth_permutation_reverse_lnn_kms()をRustに移植し、Kutin, Moulton, Smithline法を用いてLNNアーキテクチャの逆順列を合成する。 -
に新しい引数
preserve_orderを追加しました。ProductFormulaこれは、最終的な回路の深さを圧縮するために、積の式展開の前にハミルトニアンのPauli項を並べ替えることができます。 これをFalseに設定すると、次のような形の項ができる
に並び替えられる
これは、 RZZ と RYY の回転が並行して行われることを意味する。
このオプションはプラグインのインターフェイスで設定できる:
from qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import PauliEvolutionGate
from qiskit.quantum_info import SparsePauliOp
from qiskit.synthesis.evolution import SuzukiTrotter
from qiskit.transpiler.passes import HLSConfig
op = SparsePauliOp(["XXII", "IYYI", "IIZZ"])
time, reps = 0.1, 1
synthesis = SuzukiTrotter(order=2, reps=reps)
hls_config = HLSConfig(PauliEvolution=[("default", {"preserve_order": False})])
circuit = QuantumCircuit(op.num_qubits)
circuit.append(PauliEvolutionGate(op, time), circuit.qubits)
tqc = transpile(circuit, basis_gates=["u", "cx"], hls_config=hls_config)
tqc.draw('mpl')
トランスパイラ機能
-
引数
matrix_basedをCollectCliffordsを追加する。 新しいパラメータmatrix_based=Trueの場合CollectCliffordsトランスパイラ・パスは、特定のパラメータに対してクリフォード・ゲートであるユニタリー・ゲートを集めることができる。RZGateゲートを収集することができます。 -
最適化レベル
RemoveIdentityEquivalentトランスパイラー・パスは、最適化レベル2と3のプリセット・パス・マネージャーの一部として実行されるようになった。 このパスは、initとoptimizationの両ステージで実行される。なぜなら、このパスが適用する最適化は両ステージで有効であり、パスの実行は高速だからである。 -
を合成するための複数のハイレベル合成プラグインを追加した。
MCXGate:MCXSynthesisNCleanM15に基づいている。synth_mcx_n_clean_m15().MCXSynthesisNDirtyI15に基づいている。synth_mcx_n_dirty_i15().MCXSynthesis1CleanB95に基づいている。synth_mcx_1_clean_b95().MCXSynthesisNoAuxV24に基づいている。synth_mcx_noaux_v24().MCXSynthesisGrayCodeに基づいている。synth_mcx_gray_code().
また、次も検索されます:
MCXSynthesisDefaultクリーンなアンシラ量子ビットとダーティなアンシラ量子ビットの数に基づいて、最も効率的な合成方法を選択する。
一例として、次の回路の移調を考えてみよう:
from qiskit.circuit import QuantumCircuit from qiskit.compiler import transpile qc = QuantumCircuit(7) qc.x(0) qc.mcx([0, 1, 2, 3], [4]) qc.mcx([0, 1, 2, 3, 4], [5]) qc.mcx([0, 1, 2, 3, 4, 5], [6]) transpile(qc).draw('mpl', fold=-1)
最初のMCXゲートでは、量子ビット
5と6をクリーンなアンシラとして使用することができ、利用可能な最良の合成方法synth_mcx_n_clean_m15が選択される。 2つ目のMCXゲートでは、6、synth_mcx_n_clean_m15の方法は適用されないので、synth_mcx_1_clean_b95の方法が選択される。 3番目のMCXゲートでは、アンシラ量子ビットは存在せず、synth_mcx_noaux_v24。 -
トランスパイラーの
SabreLayoutトランスパイラ・パスが更新され、layout_trialsキーワード引数の値とは無関係に、デフォルトでさらに 2 回または 3 回のレイアウト試行が実行されるようになりました。 些細なレイアウトとその逆がすべてのバックエンドに含まれている。DenseLayout1.2.0 で追加されたトライアルと同じように、すべてのバックエンドに含まれている。 これに加えて、バックエンドが127、133、156量子ビットの場合、 IBM バックエンドヘビーヘックス接続グラフ上の最大のリングが追加される。 これは、これらの一般的に実行されるバックエンドのいくつかのサーキットにとっては良い出発点となり得るが、他のすべてのサーキットにとっては、追加の "ランダムトライアル "に過ぎない。 -
は
DAGCircuitがRustで再実装された。 この Python クラスの書き換えは、以前の Python 実装と完全にAPI互換性があるはずだ。 このクラスは以前は rustworkxを使って実装されており、その基礎となるデータグラフ構造はRustに存在していたが、クラスの実装とすべてのデータは Python。 この新バージョンのDAGCircuitこの新しいバージョンは、すべてのデータに対してラスト・ネイティブ表現を保存し、静止時の命令用に設計された圧縮されたqubitとclbit表現により、よりメモリ効率が高くなっている。 を完全に操作するトランスパイラ・パスが可能になる。DAGCircuitを完全に操作できるようになり、パフォーマンスが向上する。 -
に新しい引数
qubits_initially_zeroが追加された。qiskit.compiler.transpile(),generate_preset_pass_manager()とPassManagerConfig. デフォルト値のTrueに設定すると、量子ビットは最初に の状態にあると仮定されるため、個々のトランスパイラ・パスの最適化の機会が増える可能性があります。 特にHighLevelSynthesisトランスパイラ・パスは、特に、状態 のアイドル補助量子ビットが利用可能な場合、各ゲートに対してより良い分解を選択します。MCXGate特にトランスパイラ・パスは、 のアイドル補助量子ビットが利用可能な場合、回路の各ゲートに対してより良い分解を選択します。しかし、量子ビットを適切に初期化しないバックエンドのためにトランスパイルする場合や、より大きな量子回路のサブサーキットのトランスパイラパスを手動で呼び出す場合など、
qubits_initially_zeroをFalseに設定すべき場合があります。 -
トランスパイラ・パスのコンストラクタは、追加引数を受け付けるようになった。
HighLevelSynthesisトランスパイラ・パスのコンストラクタは、追加の引数を受け付けるようになりました:qubits_initially_zero。Trueに設定すると、パスは量子ビットが初期状態 にあると仮定します。さらに、パスは実行中、クリーンな補助量子ビットとダーティな補助量子ビットを追跡し、kwargsnum_clean_ancillasとnum_dirty_ancillasを使ってこの情報をプラグインに渡します。 -
トランスパイラ・パスのアンシラ量子ビットの取り扱いを改善。
HighLevelSynthesisトランスパイラ・パスの 例えば、回路はカスタム・ゲートを持ち、その定義にはMCXGates. これで、内部MCXGateの合成アルゴリズムは、カスタムゲートの定義の外側で、グローバル回路で利用可能なアンシラ量子ビットを使用することができます。 -
新しいメソッド
DAGCircuit.control_flow_op_nodes()メソッドを追加した。DAGOpNodeを含むDAGCircuitを含むControlFlowOp. これはDAGCircuit.op_nodes()メソッドを使いControlFlowOpクラスをフィルターとして渡すことで可能だったが、この新しい関数の方がより高速に処理を実行できる。 -
によって返され、内部で使用されます。
generate_preset_pass_manager()によって返されtranspile()で使用されるトランスパイラ・パスの大半はRustに移植された。 これにより、各パスのランタイム性能が大幅に改善され、トランスパイラの全体的な運用効率が大幅に向上した。 今回のリリースでRustに移植されたパスのリストは以下の通り:ConsolidateBlocksBasisTranslatorCommutationAnalysisCommutativeCancellationElidePermutationsOptimize1qGatesDecompositionUnitarySynthesisGateDirectionCheckGateDirectionRemoveDiagonalGatesBeforeMeasureCheckMapSplit2QUnitariesFilterOpNodesDepthSizeGatesInBasisInverseCancellationBarrierBeforeFinalMeasurements
-
新しいトランスパイラー・パスが追加された、
RemoveIdentityEquivalentこのパスは、ある許容範囲まで同一性と等価なゲートを削除するために使用される。 例えば、こんな回路があったとする:
をなくすことができる。
CPhaseGate:from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import RemoveIdentityEquivalent qc = QuantumCircuit(2) qc.cp(1e-20, 0, 1) removal_pass = RemoveIdentityEquivalent() result = removal_pass(qc) result.draw("mpl")
-
パスが
ConsolidateBlocksパスはCollect2qBlocksパスに相当するパスが内部的に実行されます。 以前はCollect2qBlocksまたはCollect1qRunsを実行する前にConsolidateBlocksをConsolidateBlocksの前に実行されなければならなかった。 内部でコレクションを行うことで、パスによるオーバーヘッドが削減される。 もしCollect2qBlocksまたはCollect1qRunsがConsolidateBlocksが先に実行された場合、プロパティセットからそれらのパスによって収集された実行が使用され、パスの動作に変更はない。 -
トランスパイラー・パス
RemoveDiagonalGatesBeforeMeasureトランスパイラー・パスは、より多くの対角線ゲートを含むようにアップグレードされた:PhaseGate,CPhaseGate,CSGate,CSdgGateそしてCCZGate. さらにRemoveDiagonalGatesBeforeMeasureのコードはRustに移植され、20量子ビット回路で x20。
可視化機能
- 可視化関数には、新しい引数
timeline_drawer()可視化関数には新しい引数targetが追加された。Targetオブジェクトを指定します。 デフォルトでは、この関数はInstruction.durationを使用しますが、ターゲットを指定すると、代わりにターゲット内部のタイミング詳細を活用します。
既知の問題
- を含む回路でQPYフォーマット10、11、または12を使用する場合、ペイロードを生成した環境にインストールされた パッケージのバージョン(
ParameterExpressionを含む回路でQPY書式10、11、12を使用する場合、ペイロードを生成した環境にインストールされたsymengineパッケージのバージョン(qpy.dump())が、ペイロードがロードされた環境にインストールされたsymengineのバージョン(qpy.load())にインストールされている のバージョンと一致しない場合、エラーが発生します。 このエラーが発生した場合は、エラーメッセージにあるsymengine。qpy.load(). QPYフォーマットのバージョン13以降(または10以前)では、この問題は発生しません。 したがってParameterExpressionオブジェクトをシリアライズしている場合はScheduleBlockオブジェクトをシリアライズしている場合は、この問題を避けるためにバージョン13を使用することをお勧めします。
アップグレードの注意
-
次のクラスでは、 の操作を使ってPauli-Y演算子を対角化する:
PauliEvolutionGate,EvolvedOperatorAnsatzそしてPauliFeatureMap. 以前は、これらのクラスは または を基底変換として使用していた。 で表される 。SXGateで表される演算を使うと、シングルトンとして実装されたゲートを1つだけ使うので、より効率的である。以前のゲートの使い方に頼っていた場合は、Qiskit 1.2 で回路を構築し、次のようにしてエクスポートすることをお勧めします。
qpy.dump()でエクスポートするか、カスタムTransformationPassでエクスポートすることをお勧めします。 -
Python の最小サポートバージョンは 3.9 となり、以前の最小サポートバージョン 3.8 から引き上げられた。 この変更が必要になったのは、上流の cPython プロジェクトが Python 3.8 をサポートしなくなったからである。
回路アップグレードに関する注意事項
- この
QuantumVolumeクラスは、以前のQiskitリリースから、与えられたシード値に対して異なるユニタリー行列と順列を持つ回路を生成します。 これは、回路生成に新しい内部乱数発生器を使用し、より高速に回路を生成するためである。 同じシードで正確な回路が必要な場合は、Qiskitの以前のリリースを使用して、flatten=True引数で回路を生成し、その回路をqpy.dump()で回路をエクスポートし、このリリースでロードします。
プリミティブのアップグレードに関する注意事項
- を使用する場合
BackendSamplerV2を使うと、ラップされたインスタンスのrun()メソッドに回路を渡す前に、回路のメタデータがクリアされなくなる。BackendV2インスタンスの この動作に依存していた場合は、メタデータを手動でクリアしてからBackendSamplerV2.run()を呼び出す前にcircuit.metadata.clear()
QPY アップグレードに関する注意事項
- この
qpy.dump()関数はデフォルトでバージョン13の書式を出力するようになった。 つまり、デフォルトでこの関数を使用して生成されたペイロードは、Qiskit 1.3.0 以降としか互換性がありません。 ペイロードを以前のバージョンのQiskitでロードする必要がある場合は、versionフラグをqpy.dump()フラグを使用してください。 詳細は QPY互換性を参照。
トランスパイラ アップグレード ノート
-
DAGNodeオブジェクト(およびそのサブクラスDAGInNode,DAGOutNodeおよびDAGOpNodeメソッドから同じオブジェクトへの参照を返さなくなりました。DAGCircuitメソッドから同じオブジェクトへの参照を返さなくなりました。 これは、すべての返されたノードが同じオブジェクトへの共有参照であることを保証するものではなかった。 しかしDAGCircuitへの移行に伴い、新しいDAGNodeのインスタンスは、ノードが Python に返されると、その場で生成される。 これらのオブジェクトは、==や、__eq__に依存する類似のチェックを使用して等しいと評価されるが、同じオブジェクトとして識別されなくなる。 -
インスタンス
DAGOpNodeインスタンスはDAGCircuitから返されるインスタンスは、もはやDAGに保存されている基礎データへの共有参照ではない。 以前のリリースでは、次のようなことが可能だった:for node in dag.op_nodes(): node.op = new_opしかし、この種の突然変異は、DAGの内部キャッシュを壊し、データ構造の破損を引き起こす可能性があるため、常に健全ではなかった。 代わりに
DAGCircuitを使うべきである。DAGCircuit.substitute_node()またはDAGCircuit.substitute_node_with_dag(). 例えば、上記のコードブロックはこうなる:for node in dag.op_nodes(): dag.substitute_node(node, new_op)これは、 1.2.0 のアップグレードノートに類似している。
DAGOpNode.op属性ではなくDAGOpNodeそのものではなく、属性の変異について言及されています。 しかし、 1.3、これは内部のop属性だけでなく、オブジェクト全体に及ぶ。 一般的に、この種の突然変異は常に不健全であり、サポートされていなかったが、以前は場合によっては機能する可能性があった。 -
ここで
transpile()は、量子ビットが初期状態 にあると仮定している。この仮定を避けるには、引数qubits_initially_zeroをFalseに設定すればよい。
非推奨のメモ
-
この
qiskit.pulseモジュールとその関連機能はすべて非推奨となり、Qiskit 2.0.0 で削除される予定です。 これは、パルスをサポートする主要なバックエンド・プロバイダーが IBM であり、パルス・レベルのアクセスは現在 IBM のバックエンドのサブセットでしかサポートされておらず、その新しいアーキテクチャではサポートされていないからである。 同様に、 パルス・レベル・アクセスは2025年に削除されると発表している。パルス・アクセスをサポートする機能を使用している最大のプロバイダーがいなくなれば、Qiskitにとってのこの機能の重要性は著しく低下し、削除されるパッケージの継続的なメンテナンスのオーバーヘッドと天秤にかける必要がある。のすべてのpulseコードが非推奨になります。
qiskit.pulseのすべてのpulseコード、およびpulseに依存または関連する機能(pulseの可視化、シリアライズ、カスタム較正サポートなど)が含まれます。 詳細については、以下の非推奨セクションを参照のこと。Pulseパッケージ全体は、Qiskitの直接関連コンポーネントとともに、 Qiskit Dynamics リポジトリに移され、パルスと低レベル制御のシミュレーションがさらに可能になります。 Qiskit 1.x は、使用期限が切れるまで
qiskit.pulseサポートし続けます。
回路の廃止予定
-
非推奨の
Instruction.condition属性とInstruction.c_if()メソッドを廃止しました。 これらはQiskit 2.0 で、Qiskitデータモデルでの使用とともに削除されます。 この機能は、回路の古典的な状態を記述できる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 qc.if_test((qc.clbits[0], True)): qc.x(0) with qc.if_test((qc.clbits[1], False)): qc.z(1) qc.measure(0, 0) qc.measure(1, 1)現在では廃止された
ConvertConditionsToIfOpsトランスパイラ・パスは、既存の回路に対してこの変換を自動化するために使用できます。 -
Qiskit Pulseパッケージの廃止に伴い、以下の依存関係も廃止されます:
qiskit.circuit.QuantumCircuit.calibrationsqiskit.circuit.QuantumCircuit.has_calibration_for()qiskit.circuit.QuantumCircuit.add_calibration()qiskit.dagcircuit.DAGCircuit.calibrationsqiskit.dagcircuit.DAGCircuit.has_calibration_for()qiskit.dagcircuit.DAGCircuit.add_calibration()qiskit.dagcircuit.DAGDependency.calibrations
-
その
QuantumCircuit.unitとQuantumCircuit.duration属性は非推奨となり、 Qiskit 2.0.0 で削除される予定です。 これらの属性は、回路上で実行される推定時間とその時間の単位を追跡するために使用された。 しかし、これらの属性の値は、トランスパイラが正しい設定で実行された場合にのみ適切に入力されるため、常に制限されていました。 の持続時間の合計の最も長いパスに基づいて推測したに過ぎず、回路内の制御フローや条件分岐を正しく考慮することはできない。DAGCircuitであり、回路の制御フローや条件分岐を正しく考慮することはできない。 -
その
DAGCircuit.unitとDAGCircuit.duration属性は非推奨となり、 Qiskit 2.0.0 で削除される予定です。 これらの属性は、回路上で実行される推定時間とその時間の単位を追跡するために使用された。 しかし、これらの属性の値は、トランスパイラが正しい設定で実行された場合にのみ適切に入力されるため、常に制限されていました。 の持続時間の合計の最も長いパスに基づいて推測したに過ぎず、回路内の制御フローや条件分岐を正しく考慮することはできない。DAGCircuitであり、回路の制御フローや条件分岐を正しく考慮することはできない。 -
その
Instruction.durationとInstruction.unit属性は非推奨となり、 Qiskit 2.0.0 で削除される予定です。unitdurationこれには、任意のqiskit.circuit.Instructionまたはサブクラスの引数を設定することも含まれます。 これらの属性は、カスタム実行期間とその期間を表す単位を個々の命令に付加するために使用された。 しかし、ゲートの持続時間の真実の源はBackendV2Targetであり、バックエンドでサポートされている各命令の持続時間を含んでいます。 インストラクションの継続時間は、通常ユーザーが調整できるものではなく、バックエンドの不変のプロパティである。 以前、この機能を使ってゲートの持続時間を変えて実験していたのなら、指定されたフィールドのInstructionProperties.durationフィールドをTargetでの単位は常に秒です)。Target).
プロバイダーの廃止予定
-
この
BasicSimulator.configuration()メソッドは非推奨で、 2.0.0 で削除される予定です。 このメソッドは、廃止されたBackendV1モデルの一部であるレガシーなproviders.models.BackendConfigurationインスタンスを返した。 このモデルはBackendV2制約がバックエンドのインスタンスまたは基礎となるTarget(backend.target) に格納されます。以下は、
BackendConfigurationの最も一般的な属性にアクセスするためのクイックガイドです。BackendV2モデルにアクセスするための簡単なガイドです:BackendV1 model (deprecated) ------------> BackendV2 model ---------------------------- --------------- backend.configuration().backend_name backend.name backend.configuration().backend_version backend.backend_version backend.configuration().n_qubits backend.num_qubits backend.configuration().num_qubits backend.num_qubits backend.configuration().basis_gates backend.target.operation_names (*) backend.configuration().coupling_map backend.target.build_coupling_map() backend.configuration().local No representation backend.configuration().simulator No representation backend.configuration().conditional No representation backend.configuration().open_pulse No representation backend.configuration().memory No representation backend.configuration().max_shots No representation(ⅳ*)
Backend.target.operation_namesには、basis_gatesと追加の非ゲート命令が含まれていることに注意してください。実装によっては、出力をフィルタリングする必要があるかもしれません。モデルへの移行の詳細については、 このガイドを参照してください。
BackendV2モデルへの移行については、このガイドを参照してください。 -
Qiskit Pulseパッケージの非推奨化の一環として、
pulseクラスqiskit.providers.BackendV2内のすべてのパルス関連機能が非推奨となります。 これには以下の方法が含まれます:その結果
qiskit.providers.BackendV2Converterクラスとqiskit.providers.fake_provider.GenericBackendV2クラスの対応するチャネル・メソッドも非推奨となります。pulse_channelscalibrate_instructionsさらにBackendV2引数は非推奨です。 -
引数
defaultsは廃止されました。qiskit.providers.convert_to_target()関数から非推奨となっています。
QPYの廃止予定機能
- Qiskit Pulseパッケージの非推奨の一部として、シリアライズ
qiskit.pulse.ScheduleBlock-ベースのペイロードのシリアライズも非推奨となります。 特にqiskit.pulse.ScheduleBlockオブジェクトをqiskit.qpy.dump().
トランスパイラーの非推奨機能
-
非推奨
StochasticSwapに取って代わられたSabreSwap. クラスがトランスパイル関数から呼び出される場合、変更は例えば次のようになる: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 )to:-->
tqc = transpile( qc, routing_method="sabre", layout_method="sabre", seed_transpiler=12342, target=backend.target )一方、パス・マネージャーはこう変わる:
passmanager = PassManager(StochasticSwap(coupling, 20, 13)) new_qc = passmanager.run(qc)to:-->
passmanager = PassManager(SabreSwap(backend.target, "basic")) new_qc = passmanager.run(qc) -
トランスパイラパス
ConvertConditionsToIfOpsは非推奨となり、 Qiskit 2.0.0 で削除される予定です。 このクラスは現在非推奨です。Instruction.conditionは非推奨となり、 2.0.0 で削除される予定です。 -
basis_gates引数によるカスタムゲートの提供は、以下の両者では非推奨。transpile()とgenerate_preset_pass_manager(). この機能はQiskit 2.0 で削除されます。 カスタム・ゲートはTarget引数target。 インスタンスはTargetインスタンスをゼロから構築するかTarget.from_configuration()custom_name_mappingメソッドを使うこともできる。 例: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 ) -
Qiskit Pulseパッケージの廃止の一環として、
qiskit.transpiler.Targetclass 内のpulse関連の側面が廃止予定です。 次のものが含まれます。update_from_instruction_schedule_map()has_calibration()get_calibration()instruction_schedule_map()
さらに、以下のトランスパイラパスも廃止予定となります:
-
の
inst_map。generate_preset_pass_manager(),from_configuration(),PassManagerConfiginitializerとgenerate_scheduling()の引数は非推奨となっている。 -
calibrationイニシャライザー・メソッドにおけるInstructionProperties()引数は非推奨です。 -
以下
transpile()とgenerate_preset_pass_manager()引数は非推奨。Target:instruction_durationstiming_constraintsおよびbackend_properties。 これらの引数は、次のようにしてターゲットを構築するために使用できる。Target.from_configuration():Target.from_configuration( ... backend_properties = backend_properties, instruction_durations = instruction_durations, timing_constraints = timing_constraints ) -
メソッドは
PassManagerConfig.from_backend()メソッドはBackendV12.0 型の入力をサポートしなくなります。BackendV1は非推奨であり、実装はBackendV2.
各種 非推奨
-
qiskit.result.mitigationモジュールは非推奨となり、Qiskit 2.0 で削除される予定です。 非推奨にはLocalReadoutMitigatorクラスとCorrelatedReadoutMitigatorクラスと関連するユーティリティ関数が含まれます。 これらの機能は、以下のmthreeパッケージに取って代わられた。 https://github.com/Qiskit/qiskit-addon-mthree. -
Qiskit Pulseパッケージの廃止に伴い、以下の関数およびクラスも廃止されます:
バグ修正
-
でのパフォーマンスのリグレッションを修正しました。
QuantumCircuit.assign_parameters()Qiskit 1.2.0 で導入された、タイトなループでメソッドを呼び出すと、パラメトリックな回路から少数のパラメーターしか各反復でバインドされないというパフォーマンスのリグレッションを修正しました。 可能であれば、すべての代入を同時に行ってassign_parameters()これは、入力の正規化とエラーチェックのオーバーヘッドに費やす時間の割合を減らすためである。 -
については
BasicSimulatorの場合、configuration()メソッドによって返されるコンフィギュレーション・インスタンスのbasis_gatesエントリーは、dict_keysインスタンスではなくリストになり、期待される型と一致し、コンフィギュレーション・インスタンスをディープ・コピーできるようになった。 -
の問題を修正しました。
DAGCircuit.apply_operation_back()とDAGCircuit.apply_operation_front()での問題を修正した。Clbitオブジェクトをqargs引数の入力に設定すると、黙って受け入れられてしまう問題を修正した。 型の不一致が正しく認識され、例外が発生するように修正された。 -
のデコレーターが欠落していたのを修正した。
C3SXGateがGate.to_matrix()が呼ばれた場合に失敗していたのを修正した。 ゲートマトリックスは期待通りに戻ってきた。 -
のバグを修正した。
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を修正。
-
"circular"、"sca"。NLocal回路とその派生回路のエンタングルメントに関するバグを修正した。 2量子ビット以上のエンタングルメント・ブロックの場合、以前は円形のエンタングルメントにはいくつかの接続が欠けていた。 例えば、4量子ビットでブロック・サイズが3の場合、以前は次のようなコードが使われていた:[(2, 3, 0), (0, 1, 2), (1, 2, 3)]が、現在は
(3, 0, 1)、正しく接続が追加されている:[(2, 3, 0), (3, 0, 1), (0, 1, 2), (1, 2, 3)]そのため、
"circular"と"sca"のエンタングルには、レイヤーごとにnum_qubitsのエンタングルブロックが使用されている。 -
トランスパイラー・パスに
CollectCliffordsを追加する。 特に、ゲートを追加した。ECRGate,DCXGate,iSwapGate,SXGateとSXdgGateを追加した。 -
のバグを修正した。
QuantumCircuit.decompose()で合成できるオブジェクトがHighLevelSynthesisで合成できるオブジェクトが、最初に合成され、すぐに分解される(つまり、1回ではなく2回分解される)バグを修正した。 などのゲートに影響を与えた。MCXGateやCliffordなどのゲートに影響を及ぼした。 -
のバグを修正した。
QuantumCircuit.decompose()"gates_to_decompose"引数で明示的に設定した場合、定義のない高レベルオブジェクトが分解されないというバグを修正した。 例えば、以前は以下のようにしても分解が行われなかったが、現在は期待通りに動作する:from qiskit import QuantumCircuit from qiskit.quantum_info import Clifford from qiskit.transpiler.passes import Decompose cliff = Clifford(HGate()) circuit = QuantumCircuit(1) circuit.append(cliff, [0]) decomposed = Decompose(gates_to_decompose=["clifford"])(circuit) -
以前は
HighLevelSynthesisトランスパイラ・パスは、合成プラグインが利用可能な命令を、その命令がすでにターゲットでサポートされているか、明示的に渡されたbasis_gatesの一部であるかに関係なく、合成していました。 この動作は修正され、すでにサポートされている命令は合成されなくなった。 -
トランスパイルパスは
InverseCancellationはControlFlowOp操作に再帰します。QuantumCircuit. 以前は、制御フロー・ブロック内の逆ゲート・ペアは無視され、キャンセルされる可能性があった。 詳細は #13437を参照。 -
のバグを修正。
Isometryのバグを修正した。UnitaryGate.control()のエラーにつながるバグを修正した。UnitaryGateが2つ以上あった場合にエラーになるバグを修正。 -
属性を使用する場合
QuantumCircuit.parameters属性は、パラメトリック回路でQuantumCircuit.copy_empty_like()を使用した場合、属性は正しく空になります。 以前は、内部キャッシュは無効化されることなくコピーされていた。 修正 #12617。 -
QuantumCircuit.depth()のようなオペランドを持たない演算も正しく処理できるようになりました。GlobalPhaseGate. -
QuantumCircuit.depth()は、深度計算の一部として、リアルタイム式で使用される変数とclbitsをカウントするようになった。 -
を修正しました。
SolovayKitaev既存の.npyファイルから基本近似値を読み込む際のトランスパイラ・パスを修正。 以前は、(ゲートのキャンセルなどによる)さらなる削減を可能にする保存された近似値をロードすると、実行時に失敗することがあった。 さらに、U(2)ゲート積とSO(3)表現の大域的な位相差は、保存-再読み込み手順の間に失われた。 修正 Qiskit/qiskit#12576. -
を
SparsePauliOp.paulisがPauliListが非ゼロ位相で設定されている場合、複数のSparsePauliOpメソッドを呼び出すと不正確な結果になるバグを修正した。 これでSparsePauliOp.paulisがPauliListに吸収され、入力の位相はSparsePauliOp.coeffsに吸収され、入力PauliListはゼロに設定される。 -
引数でdraw関数が呼び出されたときにパルススケジュールを描画しない
qiskit.visualization.pulse_v2.interface.drawのバグを修正。BackendV2引数で呼び出された場合にパルススケジュールを描画しないバグを修正しました。 V2 バックエンドはハードウェア・チャンネルの周波数を報告しないので、生成された図面は「no freq」と表示される 各チャンネルのラベルの下。 -
の問題を修正しました。
dag_drawer()とDAGCircuit.draw()の問題を修正しました。DAGCircuitインスタンスを視覚化しようとするとVarビジュアライザーが例外を発生させる問題を修正しました。 この動作は修正され、期待される視覚化が生成されます。 -
この
VF2Layoutを渡すと例外が発生する。Targetを渡すと例外が発生する。 これはAer 0.13 からのターゲットの場合である。 この問題は解決されました。 -
メソッド呼び出し時のエラーを修正
Gate.repeat(). 詳細は #11990を参照。 -
状態ベクトルが正規化されていない場合に
Statevector.expectation_value()に起因するバグを修正した。 -
コンストラクタ
GenericBackendV2は、指定されたバックエンドのサイズでは割り当てられない基底ゲートを受け入れるため、不正なバックエンドを作成する可能性がありました。 つまり、1量子ビットを持つバックエンドは、2量子ビットのゲートを持つ基底を受け入れるべきではない。 -
ParameterExpressionが更新され、 Python の組み込み数値型のインスタンス(floatやintなど)と比較する完全束縛インスタンスも、他のインスタンスと一致するハッシュ値を持つようになった。 この変更により、これらの型が辞書のキーとして互換性を持って使用できるようになった。 12488を参照。 -
OpenQASM 2パーサー(
qiskit.qasm2) は、64 ビット整数に収まらない整数の条件式を扱えるようになった。 #12773 を修正。 -
インポートされた OpenQASM 2プログラムのカスタム・ゲート(
gateステートメントに由来するもの)は、実装を持つようになった。Gate.to_matrix()実装を持つことになる。 以前は行列の定義がなかったため、 OpenQASM 2 を経由するラウンドトリップは、ゲート行列を導き出す能力を不必要に失う可能性があった。 ただし、この行列は、内部ゲート定義の行列を再帰的に求めることによって計算される。Operatorと同じように、行列は内部ゲート定義の行列を再帰的に求めることによって計算される。 -
以前は
DAGCircuit.replace_block_with_op()n-qubitオペレーションをmqubitのブロックに置くことができ、DAGを無効な状態にすることができた。 この動作は修正され、この試行ではDAGCircuitError. -
固定
Operator.power()シューア形式が対角でない行列(例えば、ほとんどの非ユニタリー行列)に対して非整数乗で呼び出された場合。 -
Operator.power()は、 固有値を持つユニタリー行列の分数行列のべき乗から期待される主値を、より確実に返すようになった。 浮動小数点の丸め効果によって、行列がブランチ・カットの負側に固有値を持つこ とがあり(正確な数学的関係がそうでなくても)、さまざまなBLAS呼び出しの不正確さによって、 誤ってブランチ・カットの間違った側を見つけることがあるからである。Operator.power()これで行列の累乗の分岐カットの位置が、 から離れた小さな複素数回転にシフトされた。これは問題を解決するのではなく、通常現れるタイプの演算子に対して、それがはるかに目立ちにくい場所にシフトしただけである。 新しいbranch_cut_rotationパラメータを使用すると、これをよりコントロールできるようになる。13305を参照。
-
のプロセス単位の非決定性を修正した。
SparsePauliOp.to_matrix(). 合計における浮動小数点演算の正確な順序は、以前はプロセスごとに異なっていたが、同じスクリプトの異なる呼び出し間で同じになる。 13413を参照。 -
Target.has_calibration()が更新され、命令プロパティにNone、ターゲットに追加された命令に対して例外を発生させないようになった。 #12525 を修正。