Qiskit 0.45 リリースノート
このページにはQiskit 0.45 のリリースノートが含まれています。 Qiskitの古い "メタパッケージ "構造を含むすべてのリリースノートについては、 リリースノートをご覧ください。 メタパッケージのバージョン表については、 Qiskit 0.44 リリースノートをご覧ください。
0.45.3
前奏曲
Qiskit 0.45.3。 ImportError1.0 を発生させるだけで、コードの変更はありません。
エラーに関するヘルプ、Qiskit 1.0 の準備、およびより詳細な背景情報については、 新しいパッケージングに関する移行ガイドをお読みください。
Qiskit 1.0 は、Qiskit 0.45.3 の約2週間後、2024年2月15日にリリースされる予定です。 この変更は積極的に行われている。
Qiskitのパッケージ構造はQiskit 1.0 で変更されており、残念ながら変更された要件を pip に完全に伝えることはできません。特に、環境が初期設定された後に pip install --upgrade コマンドが実行された場合。 Qiskitの 1.0 以前のすべてのバージョン(このバージョンを含む)には、Qiskit 1.0 とのインストールの競合があり、 pip では解決できません。
import qiskit で ImportError が発生した場合、あなたの環境は無効な状態にあり、Qiskit 0.45/0.46 と 1.0 の両方のバージョンに到達可能です。 新しい仮想環境を作成し、2つのバージョンのうち1 つだけをインストールする必要があります。 特に Qiskit 1.0 をインストールするつもりなら、 qiskit-terra に依存するパッケージがインストールされていない必要があります。これらのパッケージは Qiskit 1.0 と互換性がないため、更新する必要があります。 Qiskit 0.45 または 0.46 をインストールしようとする場合、 qiskit>=1.0 をインストールしようとするものがないことを確認する必要があります。
Qiskit ベースのライブラリを開発していて、まだ qiskit-terra に依存している場合、 qiskit にのみ依存する新しいパッケージを緊急にリリースすべきです。 バージョン 0.44 以降、 qiskit パッケージには、 qiskit-terra コンパイラーコア(現在は単に「Qiskit」と呼ばれるコンポーネント)のみが含まれています。したがって、最小バージョンが 0.44 の場合、 qiskit-terra>=0.44 の依存関係を qiskit>=0.44 に切り替えても、インストールされるものに変更はありません。 テストと準備の詳細と推奨事項については、 マイグレーションガイドの開発者向けセクションを参照してください。
0.45.2
前奏曲
Qiskit 0.45.2 は小さなパッチリリースで、 0.45 リリースシリーズで見つかったいくつかのバグを修正しています。
バグ修正
-
電話
copy()またはcopy_empty_like()を呼び出すと、BlueprintCircuit。global_phaseをコピーに正しく伝搬するようになった。 以前は、コピー後のグローバル位相は常にゼロだった。 -
QPY
qpy.dump()とqpy.load())はクリフォード演算子(Clifford). -
mplの回路ドロワーで、デフォルトのケースが空の場合、テキストがボックスの端を越えて印刷される問題を修正。SwitchCaseOpデフォルトのケースが空の場合、テキストが -
の量子ビット引数ブロードキャストは
QuantumCircuit.delay()は、意図した通り、個々のDelayを生成するようになった。 以前は、特定の反復記号(例えばsetのような)が与えられた場合、代わりに無言で無効な回路を生成し、異常な場所で失敗する可能性があった。 -
のゲートの.較正データをロードしようとするとエラーになるバグを修正しました。
Targetをロードしようとするとエラーになるバグを修正。 これは、バックエンドが部分的な較正データしか報告しない場合に発生します。たとえば、コマンド定義で波形パルスを参照しても、その波形パルスがパルス・ライブラリに含まれていない場合などです。 この状況では、Qiskitパルスオブジェクトを構築することができず、結果としてキャリブレーション用のパルススケジュールを構築することができません。 校正データが不完全な場合Target較正データが不完全な場合、較正がまったく報告されていないのと同じように扱われ、例外は発生しません。 -
の問題を修正しました。
Optimize1qGatesDecomposition0.0トランスパイラ・パスの問題を修正した。Target. これは現在では修正され、エラー率(ゲート数を含む)が同じであればOptimize1qGatesDecompositionが回路のゲートに優先するように修正された。 10568を修正 -
OptimizeSwapBeforeMeasureパスにおいて、スワップ命令とメジャー命令を含む回路が誤って最適化される問題を修正。 このコミットでは、バグを修正するためにDAGCircuit.successors()をDAGCircuit.descendants(). また、バグが修正されていることを確認するために、いくつかのテストを追加した。 例:from qiskit import QuantumCircuit from qiskit.transpiler.passes import OptimizeSwapBeforeMeasure pass_ = OptimizeSwapBeforeMeasure() qc = QuantumCircuit(2, 1) qc.swap(0, 1) qc.measure(0, 0) qc.measure(0, 0) print(qc.draw()) print(pass_(qc).draw())は以前は印刷されていた:
┌─┐┌─┐ q_0: ─X─┤M├┤M├ │ └╥┘└╥┘ q_1: ─X──╫──╫─ ║ ║ c: 1/════╩══╩═ 0 0 ┌─┐ q_0: ┤M├─── └╥┘┌─┐ q_1: ─╫─┤M├ ║ └╥┘ c: 1/═╩══╩═ 0 0そして今、2つ目のサーキットは正しく最適化されている:
q_0: ────── ┌─┐┌─┐ q_1: ┤M├┤M├ └╥┘└╥┘ c: 1/═╩══╩═ 0 0 -
のバグを修正。
StabilizerState文字列表現のバグを修正。
0.45.1
前奏曲
Qiskit Terra 0.45.1 は小さなパッチリリースで、 0.45 リリースシリーズで見つかったいくつかのバグを修正しています。 Python 3.12 を公式にサポートした最初のリリースでもある。 0.45.1 リリースでは、 Python 3.8, 3.9, 3.10, 3.11, 3.12 をサポートしています。
新機能
- Qiskit を Python 3.12 で使用するためのサポートを追加した。 このリリースの時点で、Qiskit は Python のバージョン 3.8、 3.9、 3.10、 3.11、 3.12 での実行をサポートしています。
バグ修正
-
QuantumCircuit.barrier()を入力として与えられた場合、正しい出力を生成するようになった。setを入力の1つとして与えると、正しい出力を生成するようになりました。 以前は、無効なオペレーションを回路に追加していたが、実際には通常、観測可能な問題は発生しない。 11208を修正 -
プロパティ
Instruction.condition_bitsは、実行時の古典式 (qiskit.circuit.classical). -
を修正しました。
hash()Qiskit PulseChannelオブジェクト (DriveChannelPython のような)オブジェクトを修正しました。 -
OpenQASM 2からインポートされた条件付きのカスタムゲートは、ピクルスやディープコピーを行った際にも、その条件を正しく保持するようになりました。 以前は、条件付きのカスタム・ゲート( OpenQASM 2ファイル内の
gateステートメントで定義)は、コピーまたはピクルスにすると、その条件が失われていました。 -
のQPYデシリアライズを修正しました。
StatePreparationおよびInitialize回路命令のデシリアライズを修正。 #11158 を修正。 -
のバグを修正した。
SabreLayoutレジスタ情報をLayoutオブジェクトへのレジスタ情報の追加に失敗するバグを修正した。TranspileLayout.initial_layout. での回路可視化に影響を与えた。QuantumCircuit.draw()とcircuit_drawer()を使用した回路の可視化に影響を及ぼし、レジスター名を使用した仮想量子ビットのラベル(例えば、q0)ではなく、Qubit[QuantumRegister(6, 'q', 0)]という形式の仮想量子ビットのラベルが表示されてしまいます。 11038を修正 -
の問題を修正しました。
qpy.dump()オブジェクトをシリアライズする際に、use_symengineの値を無視する可能性がある問題を修正しました。ScheduleBlockオブジェクトをシリアライズする際に これは、シンボリック表現にsymengineを使用していると報告するが、実際にはsympyのシリアル化されたデータを含んでいるため、無効なQPYペイロードが生成される結果となる。 -
バリアーを含む入力回路が与えられた場合、初期化時に
UnitaryOverlapがエラーとなるバグを修正した。
0.45.0
前奏曲
Qiskit 0.45.0 は、 1.0 の前の最後の機能リリースです。 これは、私たちが最初のメジャー・バージョン・リリースで計画しているAPIの変更に備えるもので、以前に非推奨とされた機能の多くの削除や、一連の新しい非推奨事項が含まれる。
プロジェクトがQiskitに依存している場合、Qiskit 1.0 でサポートされなくなる機能に依存している可能性があります。 このため、サポートされるバージョンを <1.0 に積極的にキャップすることをお勧めします。
Qiskit 0.45.0 の主な特徴は以下の通り:
- 本リリースから、Qiskit標準回路ライブラリのすべての非パラメトリックゲートがシングルトンになりました。 デフォルトでは、これらのゲートはメモリ上で1つのインスタンスを共有するため、特定のタイプのゲート、例えば
XGateがインスタンス化されると、それ以降のXGateのインスタンスは、最初のものへの参照となります。 この結果、回路内で同じタイプのゲートを複数使用する場合、メモリ使用量と構築オーバーヘッドが削減される。 この機能を実現するために、新しい基本クラスが導入された:SingletonInstructionそしてSingletonGate. 詳細はフィーチャーノートを参照。 - 新しい汎用パス・マネージャー・インターフェースを追加しました。
qiskit.passmanagerモジュールにあります。 これは、Qiskitトランスパイラを構築するために使用されたパスマネージャの一般化であり、ユーザーが異なる中間表現(IR)を使用する新しいパスマネージャを作成できるようにするための汎用フレームワークを導入しています。 このモジュールには、汎用パス・マネージャー・ベース・クラス、フロー・コントローラー、パス・マネージャー・タスクの実行を管理するために必要なインフラストラクチャーが含まれている。 新しいインターフェースは、既存のパス・マネージャーを再構築するために使われた。qiskit.transpilerモジュールの既存のパス・マネージャーを再構築し、コードの技術的負債を一掃し、使いやすさとパフォーマンスを向上させた。 詳細については、機能およびアップグレードノートを参照してください。 - 0.45.0 によって、ユーザーはトランスパイラが実行するレイアウトの並べ替えをよりうまく操作できるようになる。 クラスに含まれるデータは
TranspileLayoutクラスに含まれるデータは、一連の新しいメソッドと属性によって、よりアクセスしやすくなりました。 そして新しいSparsePauliOp.apply_layout()また、新しいメソッドにより、トランスパイラへの入力回路用に構築されたSparsePauliOpobservableを適用することができます。 詳細はフィーチャーノートを参照。 - 最後に**、** 新しい
AnnotatedOperationこれは、複雑な回路命令を、修飾子のセットを持つ基本命令として定式化することを可能にします。 の逆数を実装する特定の演算型の代わりに、アノテーションされた演算型を使うことができる。RXGateの制御された逆数を実装する特定の演算型の代わりにRXGateを使うことができます。 詳細はフィーチャーノートを参照。
回路の特徴
-
のサブクラスである
AnnotatedOperationのサブクラスでありOperationのサブクラスであり、"修飾子 "のリストによって変更された "基本操作 "を表す新しいクラスを追加した。 基本操作はOperationで、現在サポートされている修飾子の型はInverseModifier,ControlModifierおよびPowerModifier. 修飾子はリストに表示された順に適用される。次に例を挙げます。
gate = AnnotatedOperation( base_op=SGate(), modifiers=[ InverseModifier(), ControlModifier(1), InverseModifier(), PowerModifier(2), ], )は
gate = SGate().inverse().control(1).inverse().power(2)と論理的に等価である:gate = AnnotatedOperation( AnnotatedOperation(SGate(), [InverseModifier(), ControlModifier(1)]), [InverseModifier(), PowerModifier(2)], )しかし、この同等性は論理的なものでしかなく、内部表現は大きく異なる。
便宜上、単一の修飾子を直接渡すこともできる。したがって、
AnnotatedGate(SGate(), [ControlModifier(1)])はAnnotatedGate(SGate(), ControlModifier(1))と等価である。アノテーションされた操作の特徴は、操作の宣言時に回路定義が構築されるのではなく、トランスコンパイル時、特にトランスパイラ・パスの間にのみ行われることである。
HighLevelSynthesisトランスパイラ・パスの間にのみ行われます。アノテーションされた演算は、量子回路に追加できる「より上位の」あるいは「より抽象的な」オブジェクトとみなすこともできる。 これにより、この上位レベルの表現を利用したトランスパイラ最適化パスを記述することができ、例えば、その逆ゲートがすぐに続くゲートを削除することができます(ゲートとその逆ゲートの両方が最初に単純なゲートに合成される場合、この削減は不可能になる可能性があることに注意してください)。
ある意味で、注釈付き操作は
ControlledGateの拡張とみなすことができる。 将来的にはControlledGateによってAnnotatedOperation. 制御されたゲートと同様に、トランスパイラーは、レイアウト/配線が行われる前に注釈付き演算を合成する。つまり、再帰的に定義された
definition回路の内部に現れることはできない。 後にこの制限を取り除く予定です。 -
に新しいオプション
max_num_qubitsを追加した。qiskit.circuit.CommutationChecker.commute()これは、より高価な行列乗算ベースの可換性チェックのために考慮する最大量子ビット数を指定します。 これにより、 のサイズの配列を内部的に確保する必要がなくなる。より単純な可換性チェック(例えば、2つの量子演算が量子ビットの不連続な集合に対して行われる場合、量子演算は可換となる)は、この制限なしに機能し続ける。 -
クラスのコンストラクタに新しい引数
check_inputを追加。UnitaryGateクラスのコンストラクタに新しい引数 このフラグは、入力オブジェクトがユニタリー行列を表すというデフォルトの初期化チェックを無効にするために使用する。 これは、入力がすでにユニタリー行列であることがわかっている場合にUnitaryGateオブジェクトの生成を高速化することができる。 この新しいオプションは、このような場合にのみ使用すべきである。なぜなら、Falseに設定され、入力がユニタリーでない場合、UnitaryGateオブジェクトが無効になってしまうからである。 -
新しいメソッド
Parameter.assign()が追加された。 このメソッドは、主に次のような回路のパフォーマンスを向上させるための高速パスとして機能する。QuantumCircuit.assign_parameters()このメソッドは主に、後で代入される単なる1つのパラメータである「式」を主に含む回路の一般的な場合に、その性能を向上させるための高速パスとして機能する。 -
のパフォーマンスが向上した。
QuantumCircuit.assign_parameters()のパフォーマンスが向上した。 -
つの新クラスを導入、
SingletonInstructionとSingletonGateのサブクラスであるInstructionとGateのサブクラスであり、その型のすべてのオブジェクトに対して単一のインスタンスを使用する。 このクラスの背後にある意図は、グローバルな共有ステートを持つというトレードオフと引き換えに、回路内で複数のゲートを使用する際のメモリと構築のオーバーヘッドを最小限に抑えることである。 このため、このクラスは、インスタンスに保存された一意かつ/または変更可能な状態を持たないゲートにのみ適用される。 例えば、その最たる例がXGateはステートを含まないのでSingletonGate一方RXGateはアングル・パラメータをインスタンスに格納する。SingletonGateなぜなら、単一の共有グローバル・インスタンスではパラメータ値を表現できないからだ。シングルトンクラスを使うときに注意しなければならないもう1つの潜在的な問題は、データモデルがミュータブルな状態をサポートしていることだ。
Instructionデータモデルがいくつかの変更可能な状態をサポートしていることです。 具体的にはlabel,duration,unitそしてcondition属性はすべてInstructionおよびその直接のサブクラスでは、すべてアクセス可能で変更可能です。 しかしこれは、以下の方法で共有オブジェクトを持つこととは相容れない。SingletonInstruction. のインスタンスでは、これらの属性を直接設定することはできず、例外が発生します。SingletonInstructionインスタンスでは、これらの属性を直接設定することは許されず、例外が発生します。 特定のインスタンスにそれらが必要な場合は、以下を使用して変更可能なインスタンスを確保する必要があります。Instruction.to_mutable()(またはInstruction.c_if()のためにcondition).label,durationとunitは、クラス構築の際にキーワード引数として与えることもできる。 -
以下の標準ライブラリ・ゲートは、現在、以下のインスタンスである。
SingletonGate:つまり、これらのクラスが(例えば)以下のようにインスタンス化された場合
XGate()コンストラクタのデフォルトをすべて使用すると、単一のグローバルインスタンスを共有することになります。 この結果、これらのタイプの1つ以上のオブジェクトのメモリ・オーバーヘッドが大幅に削減され、オブジェクトの構築時間が大幅に短縮された。 -
のサブクラスである
SingletonControlledGateのサブクラスを導入した。ControlledGateのサブクラスである新しいクラスを導入しました。 このクラスの背後にある意図は、グローバルな共有ステートを持つというトレードオフと引き換えに、回路内で複数のゲートを使用する際のメモリと構築のオーバーヘッドを最小限に抑えることである。 このため、このクラスは、インスタンスに保存された一意的かつ/または変更可能な状態を持たないゲートにのみ適用される。 例えばCXGateはステートを含まないのでSingletonControlledGate(このリリースではそうなっている)。 これに対してCRXGateは角度パラメーターをインスタンス・データの一部として保存するためSingletonControlledGate.を使用する際に注意しなければならないもうひとつの潜在的な問題は
SingletonControlledGateを使うときに注意すべきもうひとつの潜在的な問題はControlledGateが突然変異をサポートしていることである。 具体的にはlabel,duration,unit,conditionそしてctrl_state属性はすべてControlledGateしかしSingletonControlledGateサブクラスでのこれらの属性の変更は許可されておらず、例外が発生します。 これらの属性はカスタマイズできるが、作成時(つまりコンストラクター経由)に限られる。 その場合、新しく構築されたゲートは、グローバルに共有されたインスタンスではなく、カスタム・ステートを持つ別のインスタンスとなる。 また、SingletonControlledGate.to_mutable()メソッドを使用して、ゲート・オブジェクトの変更可能なコピーを取得し、他のInstructionオブジェクトのように属性を変更することもできます。 -
以下の標準ライブラリ・ゲートは、現在、以下のインスタンスである。
SingletonControlledGate:つまり、
label、condition、duration、unit、ctrl_stateが作成時にインスタンスに設定されない限り、新しいゲート・オブジェクトが作成されるたびに、それらはすべて単一のグローバル・インスタンスを共有することになる。 この結果、これらのタイプの1つ以上のオブジェクトのメモリ・オーバーヘッドが大幅に削減される。 -
新しいメソッド
Instruction.to_mutable()と属性Instruction.mutable新しいメソッドと属性が追加された。Instructionメソッドと属性を追加しました。 の導入によりSingletonGateを導入することで、これらのメソッドは命令オブジェクトの突然変異を扱うための統一されたインターフェイスを持つことができる。 -
属性
Instruction.base_classこれは、命令の "ベース "タイプを取得する。 多くの命令はtype(obj) == obj.base_classを満たすが、シングルトン・インスタンスのSingletonInstructionとSingletonGateのシングルトン・インスタンスは、そのベース・タイプのサブクラスである。 newbase_class属性を使って、これらの基底クラスを見つけることができます。 他のサブクラスがそのbase_class他のサブクラスが -
Qiskit回路ライブラリに
UnitaryOverlap回路をQiskit回路ライブラリに追加した。 これは、全ゼロ状態の出力分布の確率を見ることによって、あるいは等価的に、全ゼロ状態へのプロジェクターの期待値を計算することによって、ユニタリーによって生成された状態の忠実度を計算するために使用することができる。 これは、機械学習や量子化学における励起状態の計算などの応用に役立つ。
パルス機能
-
回路対パルスのスケジューリング
BackendV2.# import a fake backend which is a sub-class of BackendV2 from qiskit.providers.fake_provider import FakePerth from qiskit.compiler.scheduler import schedule from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(1, 1) qc.x(0) qc.measure(0,0) sched = schedule(circuits=qc, backend=FakePerth())それ以来
BackendV2がサポートしていなかったためschedule()schedule()関数をサポートしていなかったため、backend引数にBackendV2. 詳細は #10837を参照。
OpenQASM 特徴
-
OpenQASM 2 モジュール
qiskit.qasm2は、エクスポート関数dump()とdumps(). これらは、前述と非常によく似た方法で使用される。QuantumCircuit.qasm():from qiskit import qasm2, QuantumCircuit qc = QuantumCircuit(2, 2) qc.h(0) qc.cx(0, 1) qc.measure([0, 1], [0, 1]) print(qasm2.dumps(qc))新しい関数は
QuantumCircuit.qasm()と同じコードに由来し、 OpenQASM 3 (qiskit.qasm3)とQPY(qiskit.qpy)モジュールと比較して、より首尾一貫したインターフェイスを提供する。 メソッド名qasm()は OpenQASM のバージョンを示すものではありませんでした。また、このメソッドが追加された当初から、Qiskitはいくつかの直列化モジュールを獲得しており、混同されやすくなっています。
QPYの特長
-
QPYは、パルス・スケジュール・ブロック内の記号式だけでなく、
ParameterExpression型のオブジェクトの symengine ネイティブなシリアライズとデシリアライズの使用をサポートするようになりました。 これはより高速なシリアライゼーションだが、すべてのプラットフォームでサポートされているわけではない。 ペイロードをデシリアライズするためにqpyが必要とするので、このオプションを設定する前に、ターゲットプラットフォームがsymengineライブラリでサポートされていることを確認してください。この機能は
qpy.dump()のuse_symengineパラメーターで有効にすることができる:from qiskit.circuit import QuantumCircuit, Parameter from qiskit import qpy theta = Parameter("theta") phi = Parameter("phi") sum_param = theta + phi qc = QuantumCircuit(1) qc.rz(sum_param, 0) qc.measure_all() with open('bell.qpy', 'wb') as fd: qpy.dump(qc, fd, use_symengine=True) with open('bell.qpy', 'rb') as fd: new_qc = qpy.load(fd)[0]
量子情報の特徴
-
追加
Clifford.from_linear_function()そしてClifford.from_permutation()メソッドを追加しました。CliffordからLinearFunctionとPermutationGateをそれぞれ追加した。 その結果CliffordはaLinearFunction, aPermutationGateまたはそのようなゲートを含む量子回路から直接構成できるようになった。 -
この
Operatorクラスにdraw()メソッドが追加され、テキスト行列、IPython LaTeX オブジェクト、 LaTeX ソースとして表示できるようになりました。 デフォルトの描画タイプは、オペレータのASCII__repr__。 -
新しいメソッドを追加、
apply_layout()メソッドをSparsePauliOpクラスに追加しました。 このメソッドはTranspileLayoutレイアウトを適用するために使用されます。SparsePauliOpこのメソッドは、トランスパイラからのレイアウトを、トランスパイラへの入力回路用に構築されたobservableに適用するために使用されます。 これによりBaseEstimatorインプリメンテーションやローカルトランスパイルがより簡単になります。 例:from qiskit.circuit.library import RealAmplitudes from qiskit.quantum_info import SparsePauliOp from qiskit.primitives import BackendEstimator from qiskit.compiler import transpile from qiskit.providers.fake_provider import FakeNairobiV2 psi = RealAmplitudes(num_qubits=2, reps=2) H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)]) backend = FakeNairobiV2() estimator = BackendEstimator(backend=backend, skip_transpilation=True) thetas = [0, 1, 1, 2, 3, 5] transpiled_psi = transpile(psi, backend, optimization_level=3) permuted_op = H1.apply_layout(transpiled_psi.layout) res = estimator.run(transpiled_psi, permuted_op, thetas)ここで入力回路は、
runに渡される前にローカルでトランスパイルされる。H1Transpilationは、元の回路を2量子ビットから7量子ビットに拡張し(backendのサイズ)、そのレイアウトを順列化する。apply_layout()によって実行された変換を反映する。transpile().
トランスパイラ機能
-
この
HighLevelSynthesis型のオブジェクトを持つ回路を合成するように拡張されている。AnnotatedOperation. -
新しい
qiskit.passmanagerモジュールが追加されました。 このモジュールは汎用のパス・マネージャーとフロー・コントローラーを実装し、パス・マネージャー・タスクの実行を管理するインフラを提供する。 モジュールは、パス (GenericPass)とフロー・コントローラ(BaseController) と、パス・マネージャの実行を管理するための新しいインターフェース・クラスpassmanager.Taskを提供します (Task.execute()メソッドを参照)。 フローコントローラはパスのコレクションであり、コントローラはタスクパイプラインに再帰的にネストすることができる。 また、ベース・クラスは入出力オブジェクト・タイプを認識していないため、最適化するためには特定のプログラム・タイプに合わせてサブクラス化する必要があることにも注意しなければならない。 この統一された設計により、従来のパス・マネージャの複雑さが軽減され、実行ロジックのディスパッチやタスク構造の再正規化を処理するためにRunningPassManagerのようなクラスを使用する必要がなくなった。 このqiskit.transpilerモジュールは、ジェネリック・パス・マネージャーをベースに既存のパス・マネージャーを再構築するために再編成された。 詳しくはアップグレードノートをご覧ください。 -
新しい分析
SabrePreLayoutの開始レイアウトを作成する新しい解析パスを追加した。SabreLayoutの開始レイアウトを作成し、そのレイアウトをプロパティ・セット値sabre_starting_layoutsに書き込みます。このパスは、完全なグラフ同型を見つけることに成功するまで、カップリング・マップに「余分な」辺をどんどん追加していくことで機能する。
VF2Layoutが完全なグラフ同型を見つけるまで。 より正確には、補強されたカップリング・マップは、元のカップリング・マップにおいて所定の距離d以内にあるノード間のエッジを含み、dの値は同型が見つかるまで増加する。 また、このパスでは、局所的な最小値が見つかるまで、レイアウトに関わる余分なエッジの数を最小化するオプションもある。 これには、余分なエッジを取り除きVF2Layoutを呼び出して、同型がまだ存在するかどうかをチェックする。以下は
SabrePreLayout前にSabreLayout:import math from qiskit.transpiler import CouplingMap, PassManager from qiskit.circuit.library import EfficientSU2 from qiskit.transpiler.passes import SabrePreLayout, SabreLayout qc = EfficientSU2(16, entanglement='circular', reps=6, flatten=True) qc.assign_parameters([math.pi / 2] * len(qc.parameters), inplace=True) qc.measure_all() coupling_map = CouplingMap.from_heavy_hex(7) pm = PassManager( [ SabrePreLayout(coupling_map=coupling_map), SabreLayout(coupling_map), ] ) pm.run(qc) -
引数
coupling_map、target、use_qubit_indicesをトランスパイラ・パスに追加。HighLevelSynthesisを追加した。 引数targetはターゲット・バックエンドを指定し、パス内で呼び出される合成プラグインが、カップリング・マップやサポートされるゲート・セットなど、ターゲット固有のすべての情報にアクセスできるようにする。 引数coupling_mapはカップリング・マップを指定するのみで、targetが指定されていない場合にのみ使用される。 引数use_qubit_indicesは、レイアウトが設定される前と後のどちらで上位レベル合成パスが実行されているか、つまり、上位レベルオブジェクトの量子ビットインデックスがターゲットバックエンド上の量子ビットインデックスに対応しているかを示します。 -
引数
coupling_map、target、qubitsを以下に追加。HighLevelSynthesisPlugin. 位置引数targetはターゲット・バックエンドを指定し、プラグインがカップリング・マップやサポートされるゲート・セットなど、ターゲット固有のすべての情報にアクセスできるようにする。 位置引数coupling_mapは、カップリング・マップを指定するだけであり、targetが指定されていない場合にのみ使用される。 位置引数qubitsは、合成が物理回路上で行われる場合に、上位レベルのオブジェクトが定義される量子ビットのリストを指定する。Noneの値は、まだレイアウトが決定されていないことを示す。これにより、合成プラグインのオプションを、プラグイン用の一般的なインターフェイスオプション(すなわち、
coupling_map、target、qubits)と、プラグイン固有のオプション(optionsを介して指定される自由形式の構成辞書)に、よりきれいに分離することができます。 この変更は後方互換性があり、もしcoupling_map, などのオプションがプラグインのrun()メソッドに明示的に追加されていない場合、それらはoptionsの一部として表示されることに注意すべきである。 -
その
DAGCircuitメソッドapply_operation_back()とapply_operation_front()Falseメソッドにcheckキーワード引数が追加された。DAGCircuitキーワード引数を持つようになった。 これは、トランスパイラ・パスの間など、DAGが既知の良好なデータから構築されるときのパフォーマンス最適化として有用である。 -
メソッド
CouplingMap.reduce()は、追加の引数check_if_connectedを受け付けるようになった(デフォルトはTrue)。 これは以前の動作に対応し、縮小されたカップリング・マップが接続されたままかどうかをチェックし、そうでない場合はCouplingError。Falseに設定すると、チェックがスキップされ、切断された縮小カップリング・マップが可能になる。 -
のコンストラクタが追加された。
HighLevelSynthesisトランスパイラ・パスのコンストラクタは、追加引数equivalence_library、basis_gates、min_qubitsを受け付けるようになった。 と同様にカスタム定義をアンロールできるようになった。UnrollCustomDefinitionsそのため、後者のパスの機能を完全に受け継いでいる。 特にHighLevelSynthesisは再帰的になり、初期実装での見落としが修正された。 したがって、targetまたはbasis_gates、HighLevelSynthesisは、ターゲットでサポートされているか、等価ライブラリに属しているゲートだけを残して、回路内のすべての高レベルオブジェクト、注釈付き演算、カスタムゲートを再帰的に合成します。 これによりHighLevelSynthesisの代わりにUnrollCustomDefinitions. 一方、targetもbasis_gatesも指定されていない場合、パスは "トップレベル "の高レベルオブジェクトと注釈付き操作のみを合成する。つまり、カスタムゲートdefinitionフィールドに再帰的に降下することはない。 これはUnrollCustomDefinitions(これは何もしない)、および高位合成パスの古い動作の両方と互換性があります。これは中間変換として使用でき、HLSConfigで指定された高位オブジェクトのみを合成します。 -
のパフォーマンスを大幅に改善した。
MergeAdjacentBarriersバリアーをマージするために完全なDAGを再構築していたトランスパイラー・パスのパフォーマンスが大幅に向上した。 -
トランスパイラー・パスのコンストラクターに新しいキーワード引数、
min_qubitsを追加。BasisTranslatorを追加した。 0以外の値に設定すると、回路内で変換する演算をフィルタリングするための最小量子ビット数を設定するために使用される。 例えば、min_qubits=3を設定するとBasisTranslatorインスタンスは、3つ以上の量子ビットを操作する回路のゲートだけを変換します。 -
トランスパイラー・パスのコンストラクターに新しいキーワード引数、
min_qubitsを追加。UnrollCustomDefinitionsを追加した。 0以外の値に設定すると、回路内で変換する演算をフィルタリングするための最小量子ビット数を設定するために使用される。 例えば、min_qubits=3を設定するとUnrollCustomDefinitionsインスタンスは、3つ以上の量子ビットを操作する回路のゲートだけを変換します。 -
を追加した。
SabreLayoutパスのサポートが追加された。 トランスパイラーSabreLayoutトランスパイラ・パスは、通常、完全にランダムなレイアウトから始まる複数のレイアウト試行を実行し、その後、スワップを挿入する代わりにそのレイアウトを順列化するルーティング・パスを使用して、スワップ・ゲートがより少なくなるレイアウトを見つける。 この新機能によりAnalysisPassの前にSabreLayout"sabre_starting_layout"を実行することができる。SabreLayoutに、内部試験で使用する追加の開始レイアウトを提供する。 例えばDenseLayoutの1つのトライアルの開始点としてSabreLayoutの1つのトライアルの開始点として実行したい場合は、次のようにする:from qiskit.providers.fake_provider import FakeSherbrooke from qiskit.transpiler import AnalysisPass, PassManager from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.transpiler.passes import DenseLayout class SabreDenseLayoutTrial(AnalysisPass): def __init__(self, target): self.dense_pass = DenseLayout(target=target) super().__init__() def run(self, dag): self.dense_pass.run(dag) self.property_set["sabre_starting_layouts"] = [self.dense_pass.property_set["layout"]] backend = FakeSherbrooke() opt_level_1 = generate_preset_pass_manager(1, backend) pre_layout = PassManager([SabreDenseLayoutTrial(backend.target)]) opt_level_1.pre_layout = pre_layoutそして、
opt_level_1StagedPassManagerを回路で実行するとDenseLayoutパスの出力はSabreLayout最適化レベル1のデフォルトで実行される5つの完全ランダム試行に加え、パスの出力が試行の1つに使用されます。 -
シングル・パルスRXゲート校正をオンザフライで生成するために、2つの新しいトランスパイラー・パスが追加された。 P.Gokhale et al, Optimized Quantum Compilation for Near-Term Algorithms with OpenPulse (2020)に記載されているように、これらのシングルパルスRX校正はゲート時間を半分に短縮する、 arXiv:2004.11205.
生成する必要のあるRXキャリブレーションデータの量を減らすため、
NormalizeRXAngleをラップする。RXGate回転角度を[0, pi]にラップし、RX(pi/2)とRX(pi)をSXGateとXGateに置き換え、回転角度を量子化する。 このパスはRXCalibrationBuilderの前に実行する必要がある。によって最適化された。
NormalizeRXAngleによって最適化され、校正データ量が削減され、より正確なハードウェア校正パルスを利用できるようになりました。 によって生成された検量線はRXCalibrationBuilderによって生成された検量線はSXGate較正からブートストラップされる。 振幅は、任意の回転角度になるようにリニアにスケーリングされる。このようなシングル・パルス校正は
RXGateこのようなシングル・パルス校正は、2つのパルスで構成される従来のシーケンスに比べ、校正時間を半分に短縮することができる。SXGate半分に短縮できる。 このゲートタイムの短縮により、忠実度が向上する可能性がある。 -
に新しいメソッドを追加した。
TranspileLayout,initial_index_layout()およびrouting_permutation()のリストビューを生成するために使用されます。TranspileLayout.initial_layoutとTranspileLayout.final_layout属性のリスト・ビューを生成するために使われます。 例えばfinal_layout属性がLayout({ qr[0]: 2, qr[1]: 3, qr[2]: 0, qr[3]: 1, })すると
routing_permutation()が返される:[2, 3, 0, 1] -
に新しいメソッドを追加した。
TranspileLayout,initial_virtual_layout()これはTranspileLayout.initial_layout属性と同等ですが、回路に追加されたアンシラ量子ビットをフィルタリングするオプションを与えます。 デフォルトではTranspileLayout.initial_layoutは通常、トランスパイラによって追加されたすべてのアンシラを含む。 -
新しいメソッドを追加した、
final_index_layout()とfinal_virtual_layout()を追加した。TranspileLayoutクラスに追加した。 これらのメソッドは、最終的なレイアウト(入力回路の量子ビットの出力における最終的な位置へのマッピング)を返すために使用される。 これはfinal_layout属性とは異なる。Layoutオブジェクトである。 このfinal_index_layout()メソッドは、トランスパイラへの入力回路における各クォビットの出力位置を示すリストを返します。 例えば、オリジナルの回路がある:qc = QuantumCircuit(3) qc.h(0) qc.cx(0, 1) qc.cx(0, 2)トランスパイラーからの出力はこうだった:
tqc = QuantumCircuit(3) tqc.h(2) tqc.cx(2, 1) tqc.swap(0, 1) tqc.cx(2, 1)からの出力は
final_index_layout()のリストを返す:[2, 0, 1]を返します。
final_virtual_layout()オブジェクトとして返す。Layoutオブジェクトとして返す:Layout({ qc.qubits[0]: 2, qc.qubits[1]: 0, qc.qubits[2]: 1, })
可視化機能
-
条件を
ExprメソッドとQuantumCircuit.draw()メソッドとcircuit_drawer()を持つ回路を視覚化する際に、条件をメソッドControlFlowOpを持つ回路を可視化するときに、条件をメソッドと関数の式として表示する機能を追加しました。 -
matplotlibサーキットドロワーに、 IBM Quantum Platform の配色をベースにした"iqp"と"iqp-dark"のカラースタイルを追加。 -
TextDrawerではControlFlowOpから構築された操作は、if、else、while、for、switch/caseを含み、直接インスタンス化されたものであれQuantumCircuitControlFlowOps で定義された回路が完全に表示され、括弧で回路が区切られます。 -
パルス・タイムライン・ドローワー用にカスタム・スタイルシートを定義する場合
qiskit.visualization.timeline_drawer()のカスタムスタイルシートを定義するとき、オブジェクト属性accepts_programがTrueに設定されている "generator" 関数は、描画される完全なスケジュールを含む追加のキーワード引数programを受け取ります。QuantumCircuitを含むキーワード引数を受け取ります。 -
からの可視化
plot_gate_map(),plot_coupling_map().plot_error_map(), とplot_circuit_layout()関数は、多数の量子ビットを持つバックエンドのレイアウトをレンダリングするために大幅に改善された。 これは、rustworkxのgraphviz_draw()関数を通じて graphvizを活用し、大量の量子ビットに対応する、より洗練されたアルゴリズムによるグラフレイアウトを実行することで達成された。
各種 機能
-
の符号を表現するためのサポートを追加した。
ParameterExpression. 具体的な値を代入してnumpy.signや他のライブラリ関数を使う代わりに、ユーザはParameterExpressionクラスのインスタンスを使用して符号を計算し、式が完全に代入される前に符号を扱うことができます。これは次のように使用できます。
from qiskit.circuit import Parameter b = Parameter("phi") sign_value = b.sign() print("sign of an unassigned Parameter is: ", sign_value) print("Sign of a Parameter assigned to -3 is: ", sign_value.assign(b,-3))詳細は #10360を参照。
-
Parameterコンストラクタに高度なキーワード引数uuidが追加されました。Parameterを同じ名前の別のものと等しくするために使うことができます。 これは通常、ユーザーが使うべきものではなく、カスタムのシリアライゼーションとデシリアライゼーションに最も有用である。
回路アップグレードに関する注意事項
-
その
ControlledGate.definitionメソッドからの出力のGate.control()メソッドからの出力は、以前のリリースと比較して異なる可能性があります。 メソッドの内部生成ではGate.control()メソッドの内部生成は、現在では非推奨となっているUnrollerトランスパイラ・パスを使わなくなったため、異なる定義が生成される可能性があります。 出力ControlledGateオブジェクトの定義は、以前に生成されたものとユニタリー等価になる。 しかし、もしGate.control()で回路を保存し、新しいリリースでロードすることができる。qpy.dump()で保存し、新しいリリースでそれをロードすることができる。 -
クラスのプロパティ
num_ancilla_qubitsPolynomialPauliRotations0.23.0 プロパティは削除されました。 代わりにPolynomialPauliRotations.num_ancillas. -
以下の標準ライブラリゲート:
を設定することができなくなった。
label,condition,durationまたはunit(およびctrl_stateやControlledGateサブクラスの場合) オブジェクトをインスタンス化した後でなければなりません。 を使用して設定することができる。conditionを使用して設定することができます。c_if(). を使うことができる。to_mutable()を使って命令の変更可能なコピーを取得し、元のオブジェクトの代わりにそのコピーのセッターを使うことができる。label,durationとunit、これらのゲートの構築時にキーワード引数として与えることができ、ミュータブルなインスタンスが自動的に返される。 この変更は、これらのクラスをSingletonGateとSingletonControlledGate型に変換することで、これらのゲートの繰り返しインスタンスのメモリ・フットプリントを大幅に削減するためである。 -
と相互作用するものについては
Gate,OperationまたはInstructionオブジェクトと相互作用するもの、あるいはQuantumCircuitまたはDAGCircuitクラスでは、インスタンスに共有参照を使うのが一般的になっていることに注意する必要がある。 以前は、回路操作のインスタンスを再利用して共有することは可能だったが、あまり一般的ではなく、コピーすると一意のインスタンスが生成されていた。 のため、このリリースから変更されました。SingletonInstructionとSingletonGateが利用できるようになった(そして、多くの標準ライブラリ・ゲートがそれらを基に構築されるようになった)。 これらのオブジェクトの使い方が、回路操作ごとにユニークなインスタンスを想定している場合、これは潜在的な問題になる。なぜなら、同じタイプの操作の間で共有状態が再利用されることになるからだ(コピーとディープコピーによって持続する)。 オブジェクトの変異可能性をチェックするためにInstruction.mutable属性に頼ったり、あるいはInstruction.to_mutable()を使って任意の命令の変更可能なコピーを取得することができます。 -
より
Instructionインスタンス(シングルトンを返すインスタンス)は、もはや厳密には満足しない(例えば):type(XGate()) is XGateしかし、返されるオブジェクトは標準的なサブクラスであることに変わりはない。
isinstance()(型チェックを行う正しい方法)は正しく機能し続ける。 いくつかの命令はすでにこの特性を持っていた(例えばMCXGate), しかし、より多くの標準的なゲートがこれを行うため、現在ではより一般的になっている。何らかの理由でゲートの "基本 "型を必要とする場合、インスタンス化できない合成シングルトン・サブクラスを省略する場合は、以下を参照してください。
Instruction.base_class. -
の定義は
UnitaryGateを定義する。UGateで定義されます。U3Gateクラスで定義されます。
プロバイダー向けアップグレードノート
-
を使用しています。
QasmSimulatorPyに含まれる python ベースのシミュレータです。qiskit.providers.basicaer'h'に含まれるようになりました。HGate)、'p'(PhaseGate)、'u'(UGate)が含まれています。 -
メソッド内の引数
channelPulseBackendConfiguration.control()の引数は削除される。 2021年12月にリリースされたQiskit 0.33 (with Terra 0.19 )で非推奨となった。 代わりにqubits。 -
の引数
qobj[Qobj]をQasmSimulatorPy.run()をrun_input[QuantumCircuit or list]以下にコードをマイグレーションする例を示します:
# Importing necessary Qiskit libraries from qiskit import transpile, QuantumCircuit from qiskit.aer import QasmSimulator # Defining the Quantum Circuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() # Transpile the circuit to optimize for the target simulator simulator = QasmSimulator() transpiled_circuit = transpile(qc, simulator) # Run the simulation job = simulator.run(transpiled_circuit, shots=1024) # Get the simulation result result = job.result()これらはすべて、 0.22 (2022年10月13日リリース)から非推奨となり、現在は削除されている。
パルス アップグレード ノート
-
関数
qiskit.scheduler.utils.format_meas_map()、qiskit.scheduler.utils.measure()、qiskit.scheduler.utils.measure_all()は、それぞれqiskit.pulse.utils.format_meas_map()、qiskit.pulse.macros.measure()、qiskit.pulse.macros.measure_all()に移動した。 以前のロケーションはQiskit 0.20.0 (Terra 0.15.0, released on 2020-08-10)で非推奨となり、サポートされなくなりました。 -
クラスのメソッド
to_dictpulse.transforms.AlignmentKind,pulse.transforms.AlignEquispacedおよびpulse.transforms.AlignFuncのメソッドは削除される。 これらは2022年6月にリリースされたQiskit 0.37 (Terra 0.21 )で非推奨となった。
QPY アップグレードに関する注意事項
- 関数の最初の位置引数に対するキーワード
circuitsの使用は、2022 年 6 月にリリースされた Qiskit (Terra とともに)で非推奨となったため削除されました。qiskit.qpy.dump()は、2022年6月にリリースされたQiskit 0.37 (with Terra 0.21 ) でその使用が非推奨となったため、削除されました。 その代わりに、programsというキーワードを使えば(あるいは単に引数を位置的に渡せば)、同じように動作する。
量子情報アップグレードに関する注意事項
-
このメソッドは
qiskit.quantum_info.pauli_basis()はもうpauli_list引数を受け付けない。 2022年10月にリリースされたQiskit 0.39 (with Terra 0.22 )で非推奨となった。 -
qiskit.quantum_info.randomモジュールの関数random_stabilizer_tableは削除された。 2022年10月にリリースされたQiskit 0.39 (with Terra 0.22 )で非推奨となった。 代わりに、qiskit.quantum_info.random.random_pauli_list()。 -
qiskit.quantum_info.PauliTable、qiskit.quantum_info.StabilizerTable。 関数random_pauli_table()も削除された。 これらは2023年5月にリリースされたQiskit 0.43 (Terra 0.24 )で非推奨となった。 代わりにPauliListそしてrandom_pauli_list(). -
のイニシャライザーへの引数
zとxは、Qiskit Terra (2021年4月リリース) で非推奨となったため削除されました。Pauliは、Qiskit Terra 0.17 (2021年4月リリース) で非推奨となったため、削除されました。xとzのペアは、代わりに1つのタプルとして位置的に渡されるべきである (Pauli((z, x)))。 -
のイニシャライザーへの引数
labelは、Qiskit Terra (2021年4月リリース) で非推奨となったため削除されました。Pauliの引数は、Qiskit Terra 0.17 (2021年4月リリース) で非推奨とされたため、削除されました。 代わりに、Pauli("XYZ")のようにラベルの位置を指定する。 -
Qiskit Terra 0.21 (2022年6月リリース)で非推奨となったため、
qiskit.quantum_info.operators.pauliからのインポートはできなくなりました。 代わりにqiskit.quantum_infoから直接インポートする。
合成アップグレードに関する注意事項
- のパラメータ
order。synthesis.SuzukiTrotterコンストラクタのパラメータに奇数を指定すると、非推奨の警告ではなく例外が発生します。 鈴木の積公式は対称的であるため、偶数次に対してのみ定義される。
トランスパイラ アップグレード ノート
-
パス・マネージャーのリファクタリング努力の結果、既存のフロー・コントローラーは、以下のようになった:
FlowControllerLinear,ConditionalControllerそしてDoWhileControllerのサブクラスとなった。BaseController. これらのコントローラは__iter__()メソッドの実装を削除していることに注意してください。 これは、各内部タスクが実行された後、コンパイル状態がスレッド化される。 -
RunningPassManagerクラスの機能は、新しいパスマネージャーフレームワーク (BasePassManagerとBaseController). 実行中のパスマネージャは、ステートレスフローコントローラ(本質的にはFlowControllerLinearのエイリアス)である。パスマネージャはタスクパイプラインの構築を担当し、コントローラは関連するタスクの実行を担当する。RunningPassManagerをサブクラス化することは、もはや推奨されない。このクラスは、将来のリリースでは、フローコントローラに完全に置き換えられる予定である。 -
新しいクラスが導入された、
WorkflowStatusクラスが導入された。 このポータブル・オブジェクトは、パス・マネージャーの実行時に作成され、基礎となるタスクに引き渡される。 このようなステータスは、以前はRunningPassManager、インスタンス変数で管理されていた。 -
トランスパイラ固有の
transpiler.PassManager(で使用)はtranspile()のサブクラスであるpassmanager.BasePassManager. しかし、このクラス階層の変更によって、一般向けのAPIが壊れることはない。 -
パスマネージャー実行中に発生する例外は、新しく導入された
PassManagerError. 一般的なパス・マネージャの場合、パス・マネージャ・マシンの一般的な失敗によってPassManagerErrorが発生するが、トランスパイラ固有のtranspile.PassManagerは、現在、これを固有のTranspilerErrorでラップします。 このラッピングは将来的に外される予定だ。 -
パスマネージャー・フレームワークにおける
FencedObjectの使用は廃止された。 このラッパー・クラスは、変更可能なオブジェクト属性を変更から保護することはできません。 分析パスは入力IRを変更すべきではなく、コントローラーはプロパティセットを更新すべきではない、など。 パスがオブジェクトの属性を変更しないようにするのは、パス・マネージャー開発者の責任です、 -
プラグイン名
defaultは、 プラグインステージinit、layout、optimization、schedulingのために予約されている。 これらのステージは以前はこのプラグイン名を予約していませんでしたが、defaultの名前が、これらのステージに対するQiskitの組み込みデフォルトメソッドを表すために使われるようになりました。 これらのステージでプラグインにこれらの名前を使用していた場合、Qiskitの使用法と衝突するため、プラグインの名前を変更する必要があります。 -
プリセット・パスマネージャーで
RemoveResetInZeroStateクラスの使用を無効にする。 以前はtranspile()またはgenerate_preset_pass_manager()optimization_levelをレベル1、2、3で実行すると、次のようになる。RemoveResetInZeroState. しかし、このパスでは、リセットで明示的にゼロに設定しない限り、任意の初期状態の概念を禁止した。 コンパイル・パイプラインの一部としてパスを実行する必要がある場合は、次のように実行できる:pm = generate_preset_pass_manager(1, backend) pm.init.append(RemoveResetInZeroState()) pm.run(circuit)回路コンパイルのためにこの機能を保持する。
-
非推奨のトランスパイラのルーティングパス、
BIPMappingが削除されました。 Qiskit 0.43.0 リリースで非推奨とされました。 これは外部プラグインパッケージに置き換えられました:qiskit-bip-mapper。 この新しいパッケージの詳細は、パッケージのgithubリポジトリで見ることができる:このパスを別のプラグインパッケージにした理由は2つあります:1つ目は、CPLEXに依存すると使いにくくなること、2つ目は、プラグインパッケージの方が
transpile(). このパスをサポートするためにcplexとdocplexをインストールするためのオプションの追加bip-mapperは、Qiskit のオプションで必要なものがなくなったため、削除されました。 -
メソッドの引数
qubitsInstructionDurations.get()メソッドの引数Qubit(またはそれらのリスト)を受け入れない。 この機能は2021年12月にリリースされたQiskit 0.33 (with Terra 0.19 )で非推奨となりました。 代わりに、量子ビットのインデックスには整数を使う。 -
の引数
qubit_channel_mappingを削除した。RZXCalibrationBuilderこれはQiskit 0.39 (2022年10月リリース、qiskit-terra 0.22 ) で非推奨となりました -
での
transpiler.CouplingMapメソッドsubgraphは、 0.20 で非推奨として削除された。reduce()をメソッドsubgraphの代わりに使うことができる。
可視化アップグレードに関する注意事項
-
の最初の位置引数にキーワード
rhoを使用するサポートを削除した。plot_state_hinton(),plot_bloch_multivector(),plot_state_city(),plot_state_paulivec()およびplot_state_qsphere().rhoの代わりにstateを使用することができる。 すべての機能がqiskit.pulse.macrosとqiskit.pulse.utilsに移動したため、qiskit.scheduler.utilsを削除した。 これらはすべて、 0.15 (2020年8月6日リリース)から非推奨となり、現在は削除されている。 -
クラス・コンストラクタの引数
qregs,cregs,layoutおよびvisualization.QCircuitImageの引数global_phaseは、 0.20 で非推奨となったため削除されました。 -
可視化機能:
plot_gate_map(),plot_coupling_map().plot_error_map()そしてplot_circuit_layout()が機能するためには、 graphvizがインストールされている必要があります。 この変更は、より多くの量子ビットを持つバックエンドを可視化するために必要だった。 この追加的な外部要件は、これらの機能が以前から必要としていたオプションの依存関係に追加されるものである。 graphvizのインストール方法はこちらをご覧ください: https://graphviz.org/download/
各種 アップグレードの注意
-
この
QuasiDistributionの値には浮動小数点エラーが含まれる可能性がある。QuasiDistribution.__repr__numpy.round()パラメータndigitsはクラス属性__ndigits__で操作できる。 デフォルトは15。 -
クラス
qiskit.qobj.Qobj。 2021年12月にリリースされたQiskit 0.33 (with Terra 0.19 )で非推奨となった。 代わりにqiskit.qobj.QasmQobjまたはqiskit.qobj.PulseQobj. -
デコレーター
qiskit.utils.deprecation.deprecate_function()は Qiskit 0.39.0 (2022 年 10 月にリリースされた qiskit-terra 0.22.0 ) から非推奨となり、現在は削除されています。 代わりにqiskit.utils.deprecate_func()代わりに -
この関数
execute()はもう引数qobj_idとqobj_headerを受け取らない。 これらの使用は、2022年6月にリリースされたQiskit 0.37 (with Terra 0.21 )で非推奨となった。 -
トランスピレーションパス
qiskit.transpiler.passes.CXDirection。 その使用は、2022年6月にリリースされたQiskit 0.37 (with Terra 0.21 )で非推奨となった。 代わりに、より一般的なGateDirectionを使う。 -
トランスピレーションパス
qiskit.transpiler.passes.CheckCXDirection。 その使用は、2022年6月にリリースされたQiskit 0.37 (with Terra 0.21 )で非推奨となった。 代わりに、より一般的なCheckGateDirectionを使う。 -
Qiskit をソースからビルドするには、言語バージョン 1.64 と互換性のある Rust コンパイラが必要です。 これは、以前のバージョンのQiskitのビルドでサポートされていたRustの最小バージョン 1.61。
アルゴリズムの廃止
qiskit.utils.validationとqiskit.utils.algorithm_globalsのアルゴリズム・ユーティルは現在非推奨となっており、リリース日から3ヶ月以内に削除される予定です。 これらのutilsは、レガシーアルゴリズムとプリミティブアルゴリズムに基づくワークフローをサポートするために、qiskit.algorithmsモジュールとともに導入された。 現在、qiskit.algorithmsは非推奨となり、プリミティブベースのアルゴリズムのコードベースはスタンドアロンライブラリに移行されたため、これらのユーティリティはQiskitのコンテキストでは使用されなくなりました。 アプリケーションが許可しているなら、 qiskit_algorithmsを使うようにコードを移行することを推奨する。この場合、qiskit_algorithms.utilsから、algorithm_globalsとvalidationの関連ユーティリティをインポートできるようになる。 なお、従来の機能は新しいパッケージに移行されていません。
回路の廃止予定
-
qargsまたはcargsの引数にNoneを渡す。DAGCircuit.apply_operation_back()またはapply_operation_front()は非推奨であり、Qiskit 1.0 で削除される予定です。 これは以前からタイピングのドキュメントに明確に反しているが、Qiskitでは黙認されている。 代わりに、Noneではなく、()を渡してください。 -
このメソッド
QuantumCircuit.bind_parameters()メソッドは現在非推奨となっており、リリース日から3ヶ月以内にコードベースから削除される予定です。 その機能はQuantumCircuit.assign_parameters()完全に置き換えることができる。 代わりにQuantumCircuit.assign_parameters()を使ってください。 -
の重複ゲートメソッドを非推奨とする。
QuantumCircuit. 適用されるルールは、メソッド名がゲート名を反映することである。CXGateはQuantumCircuit.cx()を介して追加されQuantumCircuit.cnot(). 非推奨は以下の通り:QuantumCircuit.cnot()賛成QuantumCircuit.cx()QuantumCircuit.toffoli()賛成QuantumCircuit.ccx()QuantumCircuit.fredkin()賛成QuantumCircuit.cswap()QuantumCircuit.mct()賛成QuantumCircuit.mcx()QuantumCircuit.i()賛成QuantumCircuit.id()
ただし
QuantumCircuit.i()が唯一の例外であることに注意してほしい。QuantumCircuit.id()の方がより直感的にアイデンティティを表し、より多く使われるため、私たちはこれを選んだ。 -
Qiskitのゲートと操作の構造を合理化するために
qiskit.extensionsモジュールは非推奨となっており、将来のリリースでは非推奨となる予定です。 以下のオブジェクトはqiskit.circuit.libraryDiagonalGate,HamiltonianGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
これらの命令はこのリリースではすでに非推奨となっている、
SingleQubitUnitary代わりにlibrary.UnitaryGate,SnapshotこれはQiskit Aerの保存指示に取って代わられました、
回路方式とともに
また、以下の回路方式は非推奨となっている
QuantumCircuit.diagonal(),QuantumCircuit.hamiltonian(),QuantumCircuit.isometry()そしてQuantumCircuit.iso(),QuantumCircuit.uc(),QuantumCircuit.ucrx(),QuantumCircuit.ucry(),QuantumCircuit.ucrz().
モジュール全体が非推奨であるため、次のようになる。
ExtensionError. -
あまり使われていない
QuantumCircuitクラスデータ属性headerとextension_libは非推奨であり、削除される予定です。 これらはそれぞれ、 OpenQASM 2.0 version header statementとqelib1.incinclude statementの文字列を保持していた。 代替案は提供されない。これらはほとんどが内部的な詳細として意図されたものだ。
トランスパイラーの非推奨機能
-
フローコントローラのファクトリーメソッド
FlowController.controller_factory()はFlowController.add_flow_controller()そしてFlowController.remove_flow_controller(). 将来的にはBasePassManager.append()メソッドでのキーワード引数によるタスク構築も非推奨となる。 コントローラーは明示的にインスタンス化され、パス・マネージャーに追加されなければならない。 例えば、以前使われていた従来の構文pm.append([task1, task2], condition=lambda x: x["value1"] > 10)に置き換えなければならない
controller = ConditionalController([task1, task2], condition=lambda x: x["value1"] > 10) pm.append(controller)後者は、特に複数のキーワード引数を一緒に指定した場合に、コントローラの順序をより正確に制御することができ、複数のパイプラインを持つ可能性のある、またはコンストラクタで単一の単純な条件関数を取らない一般的なフローコントローラを構築することができます。
-
その
FlowControllerLinear.append(),DoWhileController.append()およびConditionalController.append()メソッドはすべて直ちに非推奨となる。 パスマネージャータスクパイプラインの構築は、現在ではBasePassManagerの役割となり、個々のフローコントローラはこのメソッドを必要としない。 フローコントローラーの場合、すべてのパスをコンストラクターに直接一度に指定する必要がある。 -
一般的な属性名と変数名
passesは、モジュール全体でtasksに置き換えられている。qiskit.passmanagerモジュールに置き換えられる。 タスクはpassとcontrollerの和を示さなければならず、単数形のpassは Python キーワードと衝突することに注意。 その意味で、タスクの使用は非常に望ましい。 -
この
Unrollerトランスパイラ・パスは非推奨となり、将来のリリースでは削除される予定です。 はUnrollerに取って代わられた。BasisTranslatorに取って代わられた。これは同様の機能を提供するが、より一般的な方法で提供するので、回路をどのようなユニバーサル基底セットにも変換できる。 このUnrollerクラスが機能するのは、回路のゲート定義がターゲット基底の観点から再帰的に定義されている場合のみである。UGateそしてCXGate. もしUnrollerパスを使用している場合は、フォームのカスタム・パス・マネージャを使用することで置き換えることができます:from qiskit.transpiler import PassManager from qiskit.transpiler.passes import UnrollCustomDefinitions, BasisTranslator from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel pm = PassManager( [ UnrollCustomDefinitions(sel, basis_gates=basis_gates), BasisTranslator(sel, target_basis=basis_gates), ] ) pm.run(circuit) -
の
translation_methodキーワード引数に値"unroller"を使用する。transpile()とgenerate_preset_pass_manager()は非推奨となった。 この翻訳段階プラグインは、"unroller"プラグインと同様に動作しますが、より広範なターゲットバックエンドセットをサポートするデフォルトの"translator"メソッドに取って代わられたため、将来のリリースで Qiskit から削除される予定です。
可視化の非推奨機能
-
デフォルトのスタイルが
"iqp"スタイル(以前は"iqx")に変更されたため、デフォルトのmatplotlibドローワー設定はFutureWarningを発行するようになりました。 旧デフォルトは"clifford"。 警告を無効にするには、希望のスタイルを明示的に設定する。 g.:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.x(0) circuit.h(0) circuit.cp(0.5, 0, 1) circuit.draw("mpl", style="clifford") # or style="iqp" -
に回路を渡すことは
qiskit.visualization.timeline_drawer()に渡すことは非推奨である。 スケジューリング解析パスのいずれかを通過した回路のみ(たとえばALAPScheduleAnalysisまたはASAPScheduleAnalysis)を通過した回路だけが可視化されます。 旧式のスケジューリングパス(例えばALAPScheduleまたはASAPScheduleなど)を使っている場合は、次のように実行することで、 スケジューリング情報を伝播させることができる:from qiskit import transpile from qiskit.transpiler import InstructionDurations scheduled = transpile( my_old_style_circuit, optimization_level=0, scheduling_method="alap", instruction_durations=InstructionDurations(), )この動作は以前、Qiskit 0.37 で非推奨になる予定でしたが、警告のバグにより、今までユーザーに表示されませんでした。 この動作は Qiskit 1.0 で削除されます。
バグ修正
-
の行列乗算ベースの可換性チェックで考慮される最大量子ビット数がデフォルトで3個に制限されました。
CommutationCheckerはデフォルトで 3 に制限されています。 #10488を修正 -
トランスパイラー・パスは
GateDirectionトランスパイラ・パスは、連続的なRYGateこれは、いくつかの離散基底セットターゲットの信頼性を若干高めるのに役立つはずだ。 一般的にtranspile()は、連続パラメタ化された演算を含まない基底集合を部分的にしかサポートしていないため、このような状況で常に成功するとは限らず、ほぼ間違いなく最適な結果は得られないだろう。 -
固定
CommutationAnalysisワイヤ上のゲートを集合にグループ化し、各集合は対になるゲートのみを含むように。 これにより、CommutationCancellation、不健全な最適化が実行されるのを防ぐことができる。 8020 参照 -
CUGateを呼び出している間、正しく動作するようになりました。QuantumCircuit.assign_parameters(). 以前は、最初の回路割り当てからしばらくすると、さまざまな奇妙なエラーが発生していた。 7326 、#7410 、#9627 、#10002 、#10131を参照のこと。 -
コントロール・フロー・ビルダー・インターフェイス(コンテキスト・マネージャーフォームの
QuantumCircuit.if_test(),while_loop(),for_loop()およびswitch()) は、そのブロック内の個別のグローバルフェーズの進行を正しく追跡するようになった。 ビルダースコープ内のQuantumCircuit.global_phaseに代入することで、内部ブロックにグローバルフェーズを追加できる:from math import pi from qiskit import QuantumCircuit qc = QuantumCircuit(3, 3) qc.global_phase = pi / 2 # Set the outer circuit's global phase. with qc.if_test((qc.clbits[0], False)) as else_: # The global phase advancement in a control-flow block begins at 0, # because it represents how much the phase will be advanced by an # execution of the block. The defined phase of the outer scope is not # affected by this set. qc.global_phase = pi with else_: # Similarly, the `else` block may induce a different global-phase # advancement to the `if`, so it can also be set separately. qc.global_phase = 1.5 * pi # The phase advancement caused directly by the outer scope is independent # of the phase advancement conditionally caused by each control-flow path. assert qc.global_phase == pi / 2の意味は
QuantumCircuit.global_phaseの意味は、ブロックの1回の実行に固有なグローバルフェーズの前進とみなされる。 このブロックが入力されると、プログラム全体のすべての量子ビットの位相が進むという点で、 グローバルな位相進みであることに変わりはない。 -
"iqx"および"iqx-dark"matplotlib カラースキームのカラーリングを修正。RZGate,RZZGateマルチ)コントロールされたPhaseGateとiSwapGateを間違った色で描いていました。 -
のハッシュは
ParameterのハッシュはParameterExpressionのハッシュと等しくなる。 以前はハッシュが異なっていたため、次のような場合にハッシュマップに偽のエントリーが追加されていた。ParameterとParameterExpressionの値が同じマップに混在している場合、 Python のデータモデルに違反するため、ハッシュマップに偽の追加エントリが発生していました。 -
QPYシリアライズ(
qiskit.qpy)のデシリアライズに失敗するバグを修正しました。 #10802 を修正。 -
の実装を修正した。
random_statevector()の実装を修正した。 -
パス
NoiseAdaptiveLayoutはオプション引数としてCouplingMapをオプションの引数として取るようになった。 これは、プラグインがconfiguration()とproperties()の場合のようにFakeMelbourne. 7677を修正。 -
方法
QuantumCircuit.copy()とcopy_empty_like()メソッドは、name引数の型が正しくない場合、無効な回路を生成する代わりにエラーを発生するようになりました。 -
"decay"のヒューリスティックSabreSwapとSabreLayoutのヒューリスティックは、仮想量子ビットのスワップの "深さ "を誤って追跡するのではなく、物理量子ビットの深さを正しく追跡するようになりました。 -
の見落としを修正。
ECRGateオブジェクトの構築時にECRGate.label属性の設定を妨げていた 他のすべてのGateクラスとサブクラスは、コンストラクタでlabelキーワード引数を設定できます。 -
コンストラクタ
Gate(および標準ライブラリ・サブクラス)のコンストラクタでdurationとunit属性をキーワード引数として設定できない問題を修正しました。 親クラスはInstructionはこの設定をサポートしていたがGateは以前はこのインターフェイスを正しく公開していませんでした。 -
SparsePauliOp、静的メソッドに空のイテラブルを渡すデフォルト初期化を可能にするサポートを追加。from_list()とfrom_sparse_list(). 修正 #10159。 -
での(非推奨)
Optimizerクラスの使用には、非推奨の代替パスがありませんでした。AQCには非推奨の代替パスがありませんでした。これは Qiskit 0.44 で導入されるべきでした。 を実装した callable を受け付けるようになった。Minimizerプロトコルを実装した callable を受け付けるようになりました。 callableは次の例のようになる:from scipy.optimize import minimize from qiskit.transpiler.synthesis.aqc.aqc import AQC optimizer = partial(minimize, args=(), method="L-BFGS-B", options={"maxiter": 200}) aqc = AQC(optimizer=optimizer) -
の問題を修正した。
Barrierクラスの問題を修正しました。 インスタンスをBarrierインスタンスをQuantumCircuitにインスタンスを追加するときQuantumCircuit.append()メソッドでインスタンスを追加するとき、以前はバリアのサイズが指定されたqargsと一致するかどうかの検証はありませんでした。 -
BlockCollapserトランスパイラ・パスは、同じクラシック・レジスタに複数の条件が含まれる回路を正しく処理するようになりました。 -
BlueprintCircuit半パブリックメソッドQuantumCircuit._append()がブループリントがビルドされていない状態で使用された場合、サブクラスが正しく動作するようになりました*。* -
のズーム、フォントサイズ、マージンを調整した。
plot_state_city()を調整した。 小節とゼロ振幅平面のZオーダー動作を修正し、負の実数値小節の表示を修正。
その他の注意事項
-
このバージョンのQiskitは、まだリリースされていないNumpy 2.x シリーズに対してコンパイルされていない拡張機能を含んでいるため、Numpy 1.x シリーズに明示的に固定されています。 Numpy 2.x をサポートしたQiskitの新バージョンを可能な限り早くリリースする予定です。
私たちが互換性のあるバージョンをリリースする前に、Qiskitを無理にNumpy 2と一緒にインストールしようとした場合、あなたのパッケージマネージャが古いバージョンのQiskit(同じピンを持っていませんが、まだ互換性がない可能性があります)にリゾルブするのを防ぐことはできません。
-
の動作を変更した。
VF2LayoutとVF2PostLayoutトランスパイラ・パスの動作を修正した。以前は、入力回路が十分に大きければ、マルチスレッドを使って内部スコアリングを実行していた。 マルチスレッドの使用は、当初意図していたようなパフォーマンス向上ではなく、パフォーマンス低下を引き起こすことが示されたため、現在ではパスから削除されている。