Qiskit SDK 2.0 リリースノート
2.0.3
前奏曲
Qiskit v2.0.3 は、 v2.0 マイナーバージョンシリーズのバグフィックスリリースです。
バグ修正
-
ApplyLayoutはゼロ量子ビットを適用するケースを正しく処理するようになった。Layout. の"layout"フィールドが等しくても、以前はレイアウトが設定されていないと主張していた。PropertySetのフィールドがLayout()に等しくても、レイアウトが設定されていないと主張していた。 -
トランスパイラー・パスの
ElidePermutationsトランスパイラ・パスの問題を修正しました。PermutationGate演算が存在する場合に出力順列が正しく更新されないという問題を修正しました。 その結果、出力回路が不正確になり、property_setのvirtual_permutation_layoutプロパティも不正確に設定されることになる。 より大きなPassManagerの一部として実行された場合も、不正確なTranspileLayoutで返される。QuantumCircuit.layoutを返すことになる。 -
のバグを修正。
HighLevelSynthesisパスのバグを修正。Instructionオブジェクトを もしQuantumCircuitによって返されたInstruction.definitionカスタム・オブジェクトのClbitオブジェクトが含まれていた場合、これらの古典的なビットは誤ってInstruction.definitionQuantumCircuitの対応するインデックスにマッピングするのではなくQuantumCircuit. -
のバグを修正しました。
PauliEvolutionSynthesisDefaultとPauliEvolutionSynthesisRustiqプラグインで、preserve_order=False. プラグインの動作が復元され、トランスパイルパイプライン全体を通して元の回路が保持されるようになった。 -
rustworkx の最小サポートバージョン 0.15 との互換性の問題を修正。 特定の入力で
VF2LayoutとVF2PostLayoutは、以前は rustworkx 0.16.0 で追加された rustworkx メソッドを使用していました。このため、サポート対象としてリストされている古いリリースの rustworkx を使用するとエラーが発生します。 -
SabreLayoutそしてSabreSwapを使う回路にルーティング結果を適用してもパニックになることはありません。expr.VarまたはStretchオブジェクトを使用する回路にルーティング結果を適用してもパニックが発生しなくなりました。 -
qiskit.circuit.library.quantum_volume()を入力として扱うように更新された。numpy.random.Generatorをseed引数の入力として扱うように更新された。 以前は、このようなジェネレーターの引数は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(). 以前の実装では、 ゲートのべき乗ではなく、 ゲートのべき乗を誤って使用していた。 -
SabreLayoutは、回路のnameおよびmetadataフィールドを正しく伝播するようになりました。 -
ユニタリー合成プラグイン
SolovayKitaevSynthesisユニタリー合成プラグインにおいて、異なる基底ゲートでプラグインを繰り返し実行すると、最初に実行した基底ゲートのみが不正に再利用されてしまう問題を修正した。 この問題は、基本的な近似値をキャッシュする際に基底ゲートを無視していたことに起因する。 -
トランスパイラー・パスの問題を修正。
SolovayKitaevトランスパイラー・パスの内部再帰で180度の回転に遭遇した場合にパスがクラッシュする問題を修正しました。 -
トランスパイラー・パスの問題を修正。
SolovayKitaevtranspilerパスの問題を修正しました。生成された近似の位相が正しい値から 。 これは内部 表現に起因するもので、量子ビットゲート行列の正しい符号を得るためには追加の処理が必要である。 9552を修正 -
ストレッチ(
QuantumCircuit.add_stretch()を参照) がプリセットのパスマネージャ (transpile()およびgenerate_preset_pass_manager())を使用して正常にコンパイルできるようになりました。例えば、 IBM Quantum Eagle デバイスのようなアライメント制約を持つバックエンドをターゲットにしている場合、ibm_sherbrooke。 -
のフォールバック・エラー・ヒューリスティック
VF2LayoutとVF2PostLayoutでのフォールバック・エラー・ヒューリスティックは、エラー率が報告されていないときに使用され、以前は1以上のエラーを割り当てることができた。
2.0.0
前奏曲
この度、Qiskit v2.0.0 の性能と機能を向上させる新機能を搭載し、リリースする運びとなりました。 Qiskit v2.0.0 の主な特徴は以下の通り:
- オブジェクトの構築と相互作用のための C APIを導入。
SparseObservableオブジェクトの構築と相互作用のための この最初のコンパイル言語インターフェイスは、Qiskitの進化における重要なマイルストーンであり、 v2.x リリースシリーズを通してその範囲を広げていく予定です。 初期のC APIは実験的なものであり、マイナー・バージョンでは私たちのバージョン戦略に従って APIが変更される可能性があります。- 新しい
BoxOpこれは、 OpenQASM 3 のボックスの概念に対応し、一連の命令をグループ化して後の処理やカスタム・スケジューリングに利用できる。 この演算子は、トワリング、ノイズ学習、ストレッチベースのスケジューリングなどのアプリケーションに有用である。stretch。Delayこれは、タイミングを意識した命令間の関係を表現することを可能にします。 新しいStretch型は、既存の古典的な式システムを拡張し、回路構築時に設計意図を把握し、コンパイル時に解決することを可能にする。 詳細は OpenQASM のドキュメントを参照。- 合成の改善
Targetのような任意の角度をサポートする分数2量子ビット基底ゲートが含まれている場合、合成を改善します。RZXGateまたはRZZGateこれにより、合成回路のゲート数が大幅に削減される。- ランタイム性能の向上、特に回路構築ステップでの性能向上。 ベンチプレスベンチマークでは、Qiskit v1.3 と比較して、 2x のスピードアップを示しています。 この改善は、以下のようなラスト・ゲートのネイティブ表現の追加活用など、さまざまな貢献の組み合わせによって達成される。
UnitaryGateなどの追加的なRustゲート表現の活用や、レガシーなデータモデル要素の削除など、さまざまな貢献によって達成されています。
v1.0.0 リリース時に文書化されたセマンティック・バージョニング・ポリシーに沿って、このメジャー・リリースには、 v1.x リリース・シリーズと下位互換性のない API の変更も含まれています。 特に、 .c_if() メソッド、 qobj モジュール、 BackendV1、 qiskit.pulse、非推奨の V1 プリミティブ参照実装など、Qiskitデータモデルのいくつかの非推奨コンポーネントが削除された。 これらの削除やAPIの変更の詳細については、アップグレードリリースノートのセクションを参照してください。 削除されたAPIは、Qiskit v1.4.x リリースではまだサポートされており、さらに6ヶ月間バグフィックスが行われ、1年間セキュリティアップデートが行われます。
新機能
-
Linux aarch64 プラットフォームのサポートは、ティア1サポートに昇格した:
/ガイド/install-qiskit#オペレーティングシステムサポート
v1.x リリースシリーズでは、以前のサポートレベルであるティア2から。
-
疎な観測値を構築し操作するための新しいC APIを導入した。 このリリースのAPIサーフェスは非常に小さいものですが、その範囲は
SparseObservableSDKが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')
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')
-
新しいコントロールフロー 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量子ビット・ゲートの数を削減。 例:
-
古典的なリアルタイム式モジュールは
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(). 結果の式はDurationのduration引数として使える。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を追加した。 これらは:ExactReciprocalGate(を置き換えるExactReciprocal)IntegerComparatorGate(を置き換えるIntegerComparator)LinearPauliRotationsGate(を置き換えるLinearPauliRotations)PiecewiseLinearPauliRotationsGate(を置き換えるPiecewiseLinearPauliRotations)PiecewiseChebyshevGate(を置き換えるPiecewiseChebyshev)PiecewisePolynomialPauliRotationsGate(を置き換えるPiecewisePolynomialPauliRotations)PolynomialPauliRotationsGate(を置き換えるPolynomialPauliRotations)LinearAmplitudeFunctionGate(を置き換えるLinearAmplitudeFunction)QuadraticFormGate(を置き換えるQuadraticForm)WeightedSumGate(を置き換えるWeightedAdder)
プリミティブ機能
- 新しい
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 )
量子情報の特徴
-
新しい
SparseObservable.to_sparse_list()メソッドを追加した。SparseObservable. 例:from qiskit.quantum_info import SparseObservable obs = SparseObservable.from_list([("+II", 1), ("-II", 1)]) print(obs.to_sparse_list()) # [("+", [2], 1), ("-", [2], 1)] -
新しい
SparseObservable.as_paulis()すべての射影を展開することにより、スパース観測値をポーリスのみで表現するメソッドを追加。 例:from qiskit.quantum_info import SparseObservable obs = SparseObservable("+-") obs_paulis = obs.as_paulis() # 1/4 ( II + XI - IX - XX ) -
Qiskit v2.0.0 は
SparsePauliOpからSparseObservableから構築できるようになりました。SparsePauliOp.from_sparse_observable(). ここで重要なのはSparseObservableオブジェクトはプロジェクターを効率的に表現できる。SparsePauliOp. -
SparseObservableメソッドを使った演算子の合成をサポートするようになった。compose()他のquantum_infoクラスと同様である。 これは行列の乗算に似ているが、この方法は完全に行列を使わない。 -
SparseObservable.BitTermは新しい属性を持つ、labelこの属性には、文字列ラベルで用語を表現するために使われる1文字の Python 文字列が含まれます。
合成機能
-
新しい
TwoQubitControlledUDecomposerのような基底2量子ビット分数ゲートで任意の2量子ビットユニタリーを分解するクラスを追加した。RZZGate(と局所的に等価な2量子ビットゲート)。RZZGateと局所的に等価な2量子ビットゲートを追加。)例:
from qiskit.circuit.library import RZZGate from qiskit.synthesis import TwoQubitControlledUDecomposer from qiskit.quantum_info import random_unitary unitary = random_unitary(4, seed=1) decomposer = TwoQubitControlledUDecomposer(RZZGate, euler_basis="ZXZ") circ = decomposer(unitary) circ.draw(output='mpl') -
この
synth_cnot_depth_line_kms()パスはRustに移植され、予備的ベンチマークでは 20x のスピードアップを示した。 -
この
synth_cx_cz_depth_line_my()パスはRustに移植され、予備的ベンチマークでは 70x のスピードアップを示した。 -
合成機能の追加
synth_integer_comparator_2s()とsynth_integer_comparator_greedy()を追加した。IntegerComparatorGate. 対応する高位合成プラグインはIntComparatorSynthesis2sとIntComparatorSynthesisNoAux. 利用可能な補助量子ビットに基づいて最適な分解をコンパイラに選択させるには、次のようにします。IntComparatorSynthesisDefault. -
追加
synth_weighted_sum_carry()オブジェクトを合成するためにWeightedSumGateオブジェクトを追加した。 現在のところ、これはWeightedSumGate対応する高位合成プラグインWeightedSumSynthesisDefault.
トランスパイラ機能
-
任意の角度を含む
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これは、量子ビットのサブセットまたは特定のパウリ文字列を測定したときの回路のライトコーンを返します。例えば、次のような回路の場合:
パスを通すことで、結果に影響しないゲートをなくすことができる:
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")
-
新しい引数
max_block_widthをBlockCollectorクラスとCollectLinearFunctionsとCollectCliffordsトランスパイラ・パスに新しい引数を追加した。 この引数により、ノードのブロックが定義される最大量子ビット数を制限することができる。例:
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. これは、部分的に適用されたコンパイルを再開したり、以前のコンパイルで行われた特定の分析を新しい場所で再利用するために使用できる。 -
スケジューリング・パス
PadDelayとPadDynamicalDecouplingのコンストラクターに新しい引数が追加された:targetとdurations。 これらはTargetまたはInstructionDurationsをそれぞれ指定する。 パスが実行されたときの命令持続時間にアクセスするには、引数の1つが必要である。 -
新しい
seconds_to_dt()メソッドをTargetクラスに新しいメソッドを追加しました。 これは、秒単位の継続時間を、属性で指定されたシステム時間分解能の離散化された時間ステップ数に変換するために使用されます。Target.dt属性で指定されたシステム時間分解能の離散化された時間ステップ数に変換するために使用されます。 これは通常InstructionProperties.durationdtの単位に変換するのに便利である。 -
トランスパイラー・パスは
Split2QUnitariesトランスパイラー・パスは、検討中のユニタリーが1つのゲートとして書ける場合を扱えるようにアップグレードされました。SwapGateゲートと2つの単一量子ビットゲートとして書ける場合を扱えるようになりました。 この場合、ユニタリーは分割され、仮想スワッピングも適用される。ElidePermutations. この機能は、 :class`.Split2QUnitaries` のコンストラクタにある新しい引数、split_swapを使って制御することができる。この引数を使えば、スワップ等価ゲートの分割を無効にすることができる。
各種 機能
-
qiskit.utilsQiskitの並列化設定をよりよく制御・検査するためのユーティリティが追加されました。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バージョンでも使用できます。
-
モジュールの関数
sequenceとscheduleはcompilerモジュールはQiskit v1.3 で非推奨となったため削除されました。 彼らは、バックエンドの定義を使って回路をパルス成分に変換できることに依存していたが、この機能はもはや存在しない。 そのため、代替案はなく、削除された。 これらの削除はPulseパッケージに関するもので、Qiskit 2.0 でも削除されていることに注意してください。
回路アップグレードに関する注意事項
-
BitとRegisterおよびそのサブクラスは、 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')
この変更は合成効果に影響する可能性がありますが、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メソッドを使用します:castcbit_argument_conversioncls_instancescls_prefixqbit_argument_conversion
は、Qiskit 1.2 で非推奨となったため、削除されました。 これらのメソッドは内部的なヘルパー関数であり、パブリックAPIになることは意図されていなかった。 代わりの選手はいない。
-
非推奨の
InstructionとGateduration、unitが削除されたため、unitやdurationの引数を任意のqiskit.circuit.Instructionまたはサブクラスに設定することはできなくなりました。 これらの属性はQiskit v1.3.0 で非推奨となり、カスタム実行期間とその期間の単位を個々の命令に添付するために使用されていました。 しかし、ゲートの持続時間の真実の源はBackendV2Targetであり、バックエンドでサポートされている各命令の継続時間が含まれています。 通常、命令の継続時間はユーザーが調整できるものではなく、バックエンドの不変のプロパティである。 以前、この機能を使ってさまざまなゲート・デュレーションを試したことがある場合は、指定されたフィールドのInstructionProperties.durationフィールドをTargetフィールドを変異させることができます。 (単位は常にTarget.) -
の非推奨属性は
qiskit.circuit.InstructionとGate:conditionは削除されました。 この機能はIfElseOpクラスに取って代わられた。 この属性は v1.3.0 リリースで非推奨となりました。 -
非推奨の
InstructionおよびGate:c_ifとcondition_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メソッドがQuantumCircuitとDAGCircuitクラスから削除され、add_calibrationQuantumCircuit. -
qiskit.circuit.classicalfunctionモジュールが取り外された。 このモジュールはtweedledumライブラリに依存しており、新しいバージョンの Python とは互換性がありません。 代わりにPhaseOracleGateクラスとBitFlipOracleGateクラスを使ってブーリアン式から回路を生成することができる。 -
の内部表現は
UnitaryGateをQuantumCircuitの内部表現が変更された。 回路に格納されたオブジェクトは、回路に追加されたオブジェクトと必ずしも共通参照を共有しなくなる。 この動作は決して保証されておらず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.
プリミティブのアップグレードに関する注意事項
-
BackendV1。BackendSamplerV2とBackendEstimatorV2クラスはbackend入力引数でBackendV1型の入力を受け付けなくなりました。 -
Qiskit v1.2 で非推奨とされていた、原始的な V1 実装と V1-exclusive 非バージョン型のエイリアスが削除されました。 これらのインターフェイスは、 V2 に取って代わられた。 この削除には、 V1 インターフェースを実装する以下のクラスが含まれます:
EstimatorV2、StatevectorEstimatorSamplerV2、StatevectorSamplerBackendEstimatorV2、BackendEstimatorV2BackendSamplerV2、BackendSamplerV2
また、次のような非バージョン型のエイリアスもある:
BaseEstimatorの別名。BaseEstimatorV1BaseSamplerの別名。BaseSamplerV1
この削除は、明示的にバージョン管理された
BaseEstimatorV1およびBaseSamplerV1抽象インターフェース定義や、関連する結果クラスやジョブクラスには影響しない。 バージョン管理されていないBaseEstimatorのような V1-type のエイリアスを使用している場合は、バージョン管理された型(BaseEstimatorV1).さらに、以下のユーティリティ関数が削除された。 これらの関数は、プリミティブ V1 の実装でのみ使用されていた:
init_circuit回路を初期化するにはStatevectorから回路を初期化するにはQuantumCircuit.initialize()を使う。init_observable代わりにSparsePauliOpのコンストラクタを使う。final_measurement_mappingQuantumCircuit.layout()を使用してください。SparsePauliOp.apply_layout()を使ってレイアウトのオペレータを調整します。 そうでない場合は、mthree.utils.final_measurement_mappingを使用する。 詳細は Mthreeユーティリティ関数を参照。
プロバイダー向けアップグレードノート
-
の
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モデルの構成要素を表すために使用されたものである:BackendConfigurationBackendPropertiesBackendStatusQasmBackendConfigurationPulseBackendConfigurationUchannelLOGateConfigPulseDefaultsPulseQobjDefCommandGatePropertiesNduvJobStatus:このクラスは、より広く使用されているJobStatusPulseDefaults
-
BackendV2Converterクラス:BackendV1からBackendV2 -
convert_to_target関数:レガシーな コンポーネントからTargetレガシーBackendV1コンポーネント (BackendConfigurationやBackendPropertiesなど) からインスタンスを構築する -
BackendPropertyErrorおよびBackendConfigurationError: 削除されたクラスにリンクされた例外
-
-
バックエンドは
BasicSimulatorバックエンドはもはや古典的な制御フローをシミュレートできない。.c_if()/.conditionを使用して制御フローをモデル化することのみをサポートしていましたが、現在この構造はQiskitデータモデルから削除されています。 -
非推奨の
BackendV1に基づくすべての偽のバックエンド・クラスは、モジュールから削除されました。providers.fake_providerモジュールから削除されました。 これらのクラスはQiskit 1.2 以降非推奨となっており、非推奨のBackendV1ワークフローの一部でした。 テストでの使用はGenericBackendV2クラスに置き換えられました。BackendV2のカスタムインスタンスを作成することができます。BackendV2.run(). 撤去の影響はある:-
基本クラス:
FakeBackendFakePulseBackendFakeQasmBackend
-
特別なテスト目的のための偽のバックエンド:
Fake1QFakeOpenPulse2QFakeOpenPulse3Q
-
レガシーな偽のバックエンド:
Fake5QV1Fake20QV1Fake7QPulseV1Fake27QPulseV1Fake127QPulseV1
-
-
Qiskit v2.0.0 のパルス除去の一環として、以下のメソッドが削除されました:
qiskit.providers.BackendV2.instruction_schedule_mapqiskit.providers.BackendV2.drive_channelqiskit.providers.BackendV2.measure_channelqiskit.providers.BackendV2.acquire_channelqiskit.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を削除。 これらのインターフェイス定義が提供する抽象化は、name、backends、get_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 リリースでは、symengineとsympyは常にインストールが保証されていました。 しかし、 v2.x からは、これは難しい要件ではなくなっており、symengineを使用して生成されたQPYファイルをデシリアライズする場合にのみ必要になる可能性があります。 これらのQPYペイロードの解析には、symengineが必要である。これは、 v10、 v11、 v12 のフォーマット仕様の一部であるためである。 ペイロードがそれを必要とする場合、互換性のあるバージョンのsymengine(0.11.0または0.13.0) をインストールすることが唯一の選択肢です。 同様に、sympy。ParameterExpressionエンコーディングに使用された。 -
最小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"を明示的に設定することができます。 -
レガシーなスケジューリングパス
ASAPSchedule、ALAPSchedule、DynamicalDecoupling、AlignMeasuresは削除され、更新された代替案が採用された。ALAPScheduleAnalysis,ASAPScheduleAnalysis,PadDynamicalDecouplingおよびConstrainedRescheduleが削除された。 これらは、新しいスケジューリングワークフローがレガシーワークフローに取って代わった後、Qiskit v1.1 で非推奨となりました。 -
target、またはbasis_gatesのセットが指定されていない場合、トランスパイラ・パスは、以前よりも少ないレイヤーで、注釈付き演算を持つ回路を合成する。HighLevelSynthesisトランスパイラ・パスは、アノテーションされたオペレーションを持つ回路を、以前よりも少ないレイヤーのラッピングで合成します(これは、例えば、次のように生成された回路で起こります)。multiplier_cumulative_h18()). -
キーワード引数
property_setはBasePassManager.run()で予約されており、フロントエンド表現から内部表現へのサブクラスの変換に転送されるkwargとして使用することはできません。 -
Qiskitでは、トランスパイルパイプラインにおける
BackendPropertiesオブジェクトの以下の非推奨用途が削除されました。 2.0:backend_propertiesの入力引数。transpile()backend_propertiesの入力引数。PassManagerConfigbackend_propertiesの入力引数。generate_preset_pass_manager()backend_propertiesの入力引数。generate_routing_passmanager()backend_propertiesの入力引数。generate_translation_passmanager()backend_properties入力引数Target.from_configuration()
以下のパスも更新され、
target:backend_propの入力引数。DenseLayoutpropertiesの入力引数。VF2Layoutpropertiesおよびcoupling_mapの入力引数VF2PostLayoutbackend_propsの入力引数。UnitarySynthesis
BackendPropertiesクラスは、BackendV1ワークフローの一部であったため、Qiskit v1.2 以降非推奨となっています。 ゲートエラーや持続時間などの特定の命令プロパティは、構築時にTargetに追加することができます。Target.add_instruction()メソッドに追加することができ、target入力引数を通して関連するトランスパイラ・パスに伝達されます。 -
BackendV1モデルが削除された結果、以下のトランスパイラ・オブジェクトの受け入れ可能な入力タイプが更新された:- その
generate_preset_pass_manager()とtranspile()関数は、backendの入力引数にBackendV1型の入力を受け付けなくなった。 - この
Target.from_configuration()メソッドはbackend_properties引数を受け付けなくなった Target.target_to_backend_properties()メソッドは削除されました
- その
-
トランス
ResetAfterMeasureSimplificationトランスパイラー・パスはIfElseOpの実行条件にXGateconditionを使うようになりました。 これは、condition属性がQiskitデータモデルから削除されたためです。 -
非推奨の
ConvertConditionsToIfOpsトランスパイラー・パスは削除されました。 の基礎となるcondition属性は削除された。Instructionクラスは削除されたので、このトランスパイラ・パスは変換元がなくなった。 代わりにIfElseOpを使って古典的な操作の実行条件を指定する。 -
その
PadDelayとPadDynamicalDecouplingトランスパイラ・パスが構築される際に新しい引数を要求するようになった。targetまたはdurationsのどちらかを指定する必要がある。TargetまたはInstructionDurationsで指定する必要がある。 これがないと、パスは回路内の命令の持続時間を判断できず、エラーとなる。 以前は、これらのパスはオブジェクトのduration。Instructionオブジェクトの -
以前は非推奨だった
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_durationstiming_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引数が削除された:- その
generate_preset_pass_manager()とtranspile()機能 - その
Target.from_configuration()メソッド - クラスのコンストラクタ
PassManagerConfigクラスのコンストラクタです
キャリブレーションサポートは廃止された:
calibrationはInstructionPropertiesコンストラクタから削除され、そのクラスのプロパティではなくなりました。has_calibration、get_calibration、instruction_schedule_map、update_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_wiresをFalseに設定し、アイドルワイヤーを隠す:┌───┐┌─┐ 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 リリースでは、symengineとsympyは常にインストールされていることが保証されていましたが、 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.assemblefunctionqiskit.assembler.assemble_circuitsfunctionqiskit.assembler.assemble_schedulesfunctionqiskit.assembler.disassemblefunctionqiskit.assembler.RunConfigクラスqiskit.circuit.Instruction.assembleメソッド
-
Qiskit v1.2.0 で非推奨となった
Qobj構造体と関連クラスは削除されました。 これらはBackendV1ワークフローの一部として導入されたもので、バックエンドとのやりとりにはもはや必要ない。BackendV2バックエンドとのやりとりにはもはや必要ありません。 この削除は以下のクラスに影響する:QobjExperimentHeaderQobjHeaderQasmQobjQasmQobjInstructionQasmQobjExperimentConfigQasmQobjExperimentQasmQobjConfigQasmExperimentCalibrationsGateCalibrationPulseQobjPulseQobjInstructionPulseQobjExperimentConfigPulseQobjExperimentPulseQobjConfigQobjMeasurementOptionPulseLibraryItem
-
以前は
qobj/utils.pyで定義されていたMeasLevelとMeasReturnTypeのクラスは、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.schedulerのsequenceおよびschedule_circuit関数とScheduleConfigクラスが削除されました。 -
qiskit.result.mitigationモジュールは Qiskit v1.3 で非推奨となったため削除されました。 この削除には、LocalReadoutMitigatorとCorrelatedReadoutMitigatorのクラスと、関連するユーティリティが含まれる。 Qiskitには代替パスがありません。その機能は`mthreeアドオンに取って代わられたからです。 <https://github.com/Qiskit/qiskit-addon-mthree> `__
回路の廃止予定
-
非推奨の
QuantumCircuit.duration属性は、当初の予定通りこのリリースでは削除されませんでした。 代わりにQiskit v3.0.0 のリリースの一部として削除される予定です。 この機能はQuantumCircuit.estimate_duration()メソッドに取って代わられました。 -
の非推奨タプル・ライク・インターフェースは、このリリースでは削除されなかった。
CircuitInstructionの非推奨インターフェイスは、当初の予定通りこのリリースでは削除されませんでした。 代わりにQiskit v3.0.0 で削除されます。 代わりにoperation,qubitsとclbitsを使う。 -
Multiple-Control-Multiple-Target回路クラス
MCMTは、現在では非推奨となり、次のように置き換えられました。MCMTGateに置き換えられました。Gateに置き換えられました。 回路の代わりにゲートを使うことで、コンパイラーはより高い抽象度でオブジェクトを推論することができ、複数の合成プラグインを適用することができる。
トランスパイラーの非推奨機能
-
非推奨の
DAGCircuit.duration属性は、当初の予定通りこのリリースでは削除されませんでした。 代わりにQiskit v3.0.0 のリリースの一部として削除される予定です。 この機能はQuantumCircuit.estimate_duration()メソッドに取って代わられました。 -
の引数
propagate_condition。DAGCircuit.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)のように)関数のように呼び出すと、パスの要求が尊重されるようになります。 例えばALAPScheduleAnalysisはTimeUnitConversionなどのパスをスケジューリングする。 を使ったパスの実行は、常にこの要件を尊重していた。PassManagerを使ったパスの実行は常にこの要件を尊重していたが、これまではパスを直接呼び出した場合は尊重されなかった。 -
サブクラスが
TranspilerErrorサブクラスがPassManger.run()の呼び出しの内部でパスによって発生した場合、例外は消去された型で連鎖例外になるのではなく、ロスレスで伝搬されるようになりました。 -
SabreSwapは、ルーティング中に制御フローブロックからアイドル量子ビットワイヤーを収縮させなくなる。 これは一般的には有効な最適化だが、ルーティング・パスの副作用としては期待できないものだった。 これでContractIdleWiresInControlFlowパスを使ってこの収縮を行うことができる。 -
SparsePauliOp.to_matrixのプロセス単位の非決定性を修正した。 合計における浮動小数点演算の正確な順序は、以前はプロセスごとに異なっていたが、同じスクリプトの異なる呼び出し間で同じになる。 13413を参照。