Qiskit 0.37 リリースノート
0.37.2
Terra 0.21.2
前奏曲
Qiskit Terra 0.21.2 は主にバグフィクスリリースで、ドキュメントページもいくつか改善されています。
バグ修正
-
aer_simulator_statevector_gpuでQiskit AerのGPUシミュレータや他のアルゴリズムランナーを使用した場合、一部の関数でstatevectorメソッドとして正しく認識されるようになりました。QuantumInstanceおよびその他のアルゴリズムランナーを使用する場合、いくつかの関数が statevector メソッドとして正しく認識されるようになりました。 -
を修正した。
UCGate.inverse()メソッドを修正しました。 -
QuantumCircuit.compose()は、コントロール・フロー・ビルダー・コンテキスト内でinplace=True引数とともに使用された場合、正しく機能するようになった。 以前は、命令は制御フローの範囲外に追加されていた。 8433を修正。 -
バウンド
ParameterExpressionsymengineがインストールされていて、bound 式がプレーンな1jでなかった場合に、bound が real と認識されないバグを修正した。 例:from qiskit.circuit import Parameter x = Parameter("x") expr = 1j * x bound = expr.bind({x: 2}) print(bound.is_real()) # used to be True, but is now False -
のQPYシリアライズとデシリアライズを修正しました。
ControlledGatectrl_stateのシリアライズとデシリアライズを修正しました。 修正 #8549。 -
drive_channel(),measure_channel(),acquire_channel(),control_channel()のメソッド呼び出しで対応するパルス・チャンネル・オブジェクトを返すよう、qiskit.providers.fake_provider.backendsのすべての偽バックエンドが更新された。 -
より大きな問題で
Z2Symmetries.taper()を実行するためのサポートを修正。 以前は、この方法は大容量のメモリーを必要とし、一般的に大きな問題では失敗の原因となっていた。 この修正の副作用として、パフォーマンスが大幅に向上した。
エア 0.10.4
変更なし
IBM Q プロバイダー 0.19.2
変更なし
0.37.1
Terra 0.21.1
バグ修正
-
メソッドの問題を修正した。
QuantumCircuit.decompose()メソッドのgates_to_decompose引数にGateクラスのリストを渡したときの問題を修正した。 回路内のいずれかのゲートにラベルが設定されていた場合、この引数は正しく処理されず、出力分解がgates_to_decomposeリストで明示的にゲートを誤ってスキップする原因となる。 -
修正
to_instruction()以前はUnitaryGateを指数化せずに作ろうとしていたのを修正した。 この演算子は一般的にユニタリーではないので、これはエラーとなった(もし偶然ユニタリーであったとしても、それは期待された結果ではないだろう)。これで
to_instruction()を正しく呼び出すと、それが保持する演算子の時間発展を実行するゲートが生成される:>>> from qiskit.opflow import EvolvedOp, X >>> op = EvolvedOp(0.5 * X) >>> op.to_instruction() Instruction( name='unitary', num_qubits=1, num_clbits=0, params=[array([[0.87758256+0.j, 0.-0.47942554j], [0.-0.47942554j, 0.87758256+0.j]])] ) -
関数の問題を修正しました。
marginal_distribution()関数の問題を修正しました:indicesの引数に numpy 配列が渡されると、関数がエラーを発生します。 8283を修正 -
以前は
CircuitStateFnから構築されたVectorStateFn. これは、ステートベクトルがInitialize、回路に変換されたためである。 この問題は、代わりにStatePreparationという命令を使うことでこの問題を解決できる。例えば、今ならこうできる:
from qiskit import QuantumCircuit from qiskit.opflow import StateFn left = StateFn([0, 1]) left_circuit = left.to_circuit_op().primitive right_circuit = QuantumCircuit(1) right_circuit.x(0) overlap = left_circuit.inverse().compose(right_circuit) # this line raised an error before! -
のバグを修正した。
Optimizerクラスのバグを修正した。settingsから新しいオプティマイザー・インスタンスを再構築すると、新しいオプティマイザーと以前のオプティマイザーの両方の設定がデフォルトにリセットされる不具合を修正。 このため、特にOptimizerオブジェクトが Qiskit Runtime。オプティマイザーオブジェクトが正しく再構築されるようになった:
>>> from qiskit.algorithms.optimizers import COBYLA >>> original = COBYLA(maxiter=1) >>> reconstructed = COBYLA(**original.settings) >>> reconstructed._options["maxiter"] 1 # used to be 1000! -
の引数
limit_amplitudeが、個々のSymbolicPulseまたはWaveformインスタンスの引数がパラメータ検証で正しく反映されなかった問題を修正しました。 さらに、QPYスケジュールdump()はグローバル・クラス変数を保存するのではなく、インスタンスに結び付けられたlimit_amplitudeの値を正しく保存するように修正されました。 -
のペアワイズもつれ構造を修正する。
NLocal回路。 のバグにつながった。ZZFeatureMapentanglement="pairwise"、エラーが発生する。 これで、目的のフィーチャーマップが正しく作成されるようになった:from qiskit.circuit.library import ZZFeatureMap encoding = ZZFeatureMap(4, entanglement="pairwise", reps=1) print(encoding.decompose().draw())上記のプリント:
┌───┐┌─────────────┐ q_0: ┤ H ├┤ P(2.0*x[0]) ├──■────────────────────────────────────■──────────────────────────────────────────── ├───┤├─────────────┤┌─┴─┐┌──────────────────────────────┐┌─┴─┐ q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ X ├┤ P(2.0*(π - x[0])*(π - x[1])) ├┤ X ├──■────────────────────────────────────■── ├───┤├─────────────┤└───┘└──────────────────────────────┘└───┘┌─┴─┐┌──────────────────────────────┐┌─┴─┐ q_2: ┤ H ├┤ P(2.0*x[2]) ├──■────────────────────────────────────■──┤ X ├┤ P(2.0*(π - x[1])*(π - x[2])) ├┤ X ├ ├───┤├─────────────┤┌─┴─┐┌──────────────────────────────┐┌─┴─┐└───┘└──────────────────────────────┘└───┘ q_3: ┤ H ├┤ P(2.0*x[3]) ├┤ X ├┤ P(2.0*(π - x[2])*(π - x[3])) ├┤ X ├────────────────────────────────────────── └───┘└─────────────┘└───┘└──────────────────────────────┘└───┘ -
クラスのグローバル・フェイズの処理に関する問題を修正した。
UCGateクラスの
エア 0.10.4
変更なし
IBM Q プロバイダー 0.19.2
変更なし
0.37.0
このリリースは、QiskitからのQiskit Ignisプロジェクトのサポートを正式に終了するものです。 これは元々 0.33.0 リリースで非推奨とされていたもので、そのリリースで文書化された通り、 qiskit-ignis パッケージは Qiskit メタパッケージから削除されました。つまり、今後のリリースでは pip install qiskit に qiskit-ignis が含まれなくなります。 ただし、python のパッケージングには制限があるため、既存の qiskit-ignis を自動的に削除することはできません。 以前のバージョンからアップグレードする場合は、 pip uninstall qiskit-ignis で Qiskit Ignis を手動でアンインストールするか、新しい python 環境にメタパッケージをインストールすることをお勧めします。
Qiskit Ignisは Qiskit Experiments プロジェクトに取って代わられた。 Qiskit IgnisからQiskit Experimentsへの移行方法については移行ガイドをご参照ください。
Terra 0.21.0
前奏曲
Qiskit 0.21.0 リリースのハイライトは以下の通り:
- パルスのシリアライズをサポート
ScheduleBlock経由qiskit.qpy. QPYフォーマットがバージョン5に更新され、パルススケジュールを含む定義が追加された。 これをサポートするためにSymbolicPulseクラスが導入され、記号式でパラメトリック・パルス波形を定義できるようになった。- プリセット・パス・マネージャーの操作性を改善。 新しい関数
generate_preset_pass_manager()と同等のパス・マネージャーを簡単に生成できる。transpile()を簡単に生成できる。 さらに、プリセット・パス・マネージャーがStagedPassManagerのインスタンスになった。- 属性の内部データ構造のリファクタリング。
QuantumCircuit.data属性の内部データ構造をリファクタリングしました。 以前は、(instruction, qubits, clbits)という形式のタプルのリストだったが、現在はオブジェクトのリストになっている。CircuitInstructionオブジェクトのリストである。 このCircuitInstructionオブジェクトは、以前のタプルベースのアクセスとの後方互換性があるが、実行時のオーバーヘッドがかかる。
さらに、トランスパイラーが改良され、より高品質な出力が可能になった。 などの新しいパスの導入も含まれる。 VF2PostLayout や ToqmSwap。
新機能
-
新しいクラスを追加しました、
qiskit.transpiler.StagedPassManagerを追加した。PassManagerこれは、回路コンパイルを実行するために定義されたフェーズを持つパイプラインを持つサブクラスです。 各フェーズはPassManagerオブジェクトであり、一定の順序で実行される。 例:from qiskit.transpiler.passes import * from qiskit.transpiler import PassManager, StagedPassManager basis_gates = ['rx', 'ry', 'rxx'] init = PassManager([UnitarySynthesis(basis_gates, min_qubits=3), Unroll3qOrMore()]) translate = PassManager([Collect2qBlocks(), ConsolidateBlocks(basis_gates=basis_gates), UnitarySynthesis(basis_gates)]) staged_pm = StagedPassManager(stages=['init', 'translation'], init=init, translation=translate) -
メソッドを追加した。
PauliList.group_commuting()とSparsePauliOp.group_commuting()メソッドを追加した。このメソッドは、これらの演算子をサブリストに分割し、各要素が他のすべての演算子と交わるようにする。 例:from qiskit.quantum_info import PauliList, SparsePauliOp groups = PauliList(["XX", "YY", "IZ", "ZZ"]).group_commuting() # 'groups' is [PauliList(['IZ', 'ZZ']), PauliList(['XX', 'YY'])] op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ", 2j), ("ZZ", 1j)]) groups = op.group_commuting() # 'groups' is [ # SparsePauliOp(['IZ', 'ZZ'], coeffs=[0.+2.j, 0.+1.j]), # SparsePauliOp(['XX', 'YY'], coeffs=[2.+0.j, 1.+0.j]), # ] -
新しい関数を追加、
marginal_distribution()この関数は、ビット列の入力辞書を(例えばCounts). これは既存のmarginal_counts()関数に似ているが、3つの重要な違いがある。 一つ目はmarginal_counts()は辞書かResultsオブジェクトのどちらかで動作するのに対しmarginal_distribution()は辞書でのみ動作する。 もうひとつはmarginal_counts()はindices引数のインデックスの順序を尊重しないのに対しmarginal_distribution()は、indicesの順序に基づいて出力ビットを並べ替える。 3つ目の違いはmarginal_distribution()その実装はRustで書かれており、辞書入力を疎外するためだけに合理化されているので、より速くなるはずだ。 -
モジュールの
BaseOperatorサブクラスに、@(__matmul__) 二項演算子を追加した。qiskit.quantum_infoモジュールに追加した。 これは、クラスのdotメソッド(A @ B == A.dot(B))を呼び出す省略記法である。 -
に新しいオプション引数
repsを追加。QuantumCircuit.decompose()に新しいオプション引数を追加した。 例:from qiskit import QuantumCircuit circuit = QuantumCircuit(1) circuit.ry(0.5, 0) # Equivalent to circuit.decompose().decompose() circuit.decompose(reps=2) # decompose 2 times, but only RY gate 2 times and R gate 1 times circuit.decompose(gates_to_decompose=['ry','r'], reps=2) -
新しいパルス・ベース・クラスを追加
SymbolicPulse. これは従来のParametricPulseに代わるものである。 新しい基本クラスでは、パルスエンベロープ関数とパラメータ検証関数は記号式オブジェクトで表現される。 新しいクラスは、これらの記号方程式を記号計算ライブラリを通して簡単に直列化できるので、自己完結的で移植可能なパルス・データを提供する。 -
の非エルミート作用素のサポートを追加した。
AerPauliExpectation. これにより、Aerの高速スナップショット期待値計算を、QEOMのようなアルゴリズムで使用することができる。 -
Qiskit教科書の配色を使用した新しい回路図スタイル、
textbookを追加。 -
新しい属性
QuantumCircuit.op_start_timesは、スケジューリング解析パスの1つが回路上で実行されると入力されます。 これは、例えば、インストラクション・タイムで回路インストラクションを得るために使用することができる:from qiskit import QuantumCircuit, transpile from qiskit.providers.fake_provider import FakeMontreal backend = FakeMontreal() qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qct = transpile( qc, backend, initial_layout=[0, 1], coupling_map=[[0, 1]], scheduling_method="alap" ) scheduled_insts = list(zip(qct.op_start_times, qct.data)) -
新しいメソッド
QuantumCircuit.clear()これはQuantumCircuit. -
新しいメソッド
QuantumCircuit.copy_empty_like()これはQuantumCircuitインスタンスのクリアされたコピーを取得するために使用される新しいメソッドを追加しました。 これは論理的にはqc.copy().clear()と同等だが、より高速でメモリ効率も高い。 これは、同じリソース(量子ビット、古典ビット、メタデータなど)がすでに追加された新しい空の回路が必要な場合に便利である。 -
この
Target.instruction_supported()メソッドは、2つの新しいキーワード引数、operation_classとparametersをサポートするようになった。 これらの引数を使ってinstruction_supported()メソッドは、パラメータ値を持つ特定の操作がTargetオブジェクトでサポートされているかどうかをチェックするために使うことができます。 例えばTargettargetがRXGateを :from math import pi from qiskit.circuit.library import RXGate target.instruction_supported(operation_class=RXGate, parameters=[pi/2])これは、
targetがTrue、。RXGateFalseを返す。 -
トロッター化に基づく量子リアルタイム進化アルゴリズムを追加
qiskit.algorithms.TrotterQRTE. 新しい量子時間発展フレームワークに準拠しておりProductFormulaとPauliEvolutionGateを実装している。from qiskit.algorithms import EvolutionProblem from qiskit.algorithms.evolvers.trotterization import TrotterQRTE from qiskit.opflow import X, Z, StateFn, SummedOp operator = SummedOp([X, Z]) initial_state = StateFn([1, 0]) time = 1 evolution_problem = EvolutionProblem(operator, time, initial_state) trotter_qrte = TrotterQRTE() evolution_result = trotter_qrte.evolve(evolution_problem) evolved_state_circuit = evolution_result.evolved_state -
新機能
generate_preset_pass_manager()を追加した。PassManagerオブジェクトを素早く生成するために使用できる新しい関数を追加した。PassManagerが内部的に使用するtranspile()関数を追加した。 例:from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import FakeWashingtonV2 # Generate an optimization level 3 pass manager targeting FakeWashingtonV2 pass_manager = generate_preset_pass_manager(3, FakeWashingtonV2()) -
新しい関数
marginal_memory()この関数は、ショット・メモリ配列をマージナル化するために使用される。 この関数は、ショットメモリアレイと注目するインデックスを与えると、マジナイズされたショットメモリアレイを返します。 この関数は、メモリ・サポートのmarginal_counts()memoryResultsメソッドのメモリサポートとは異なります。 -
プリミティブ・インターフェイスが拡張され、
__call__メソッドの引数として、インデックスに加えてオブジェクトを受け付けるようになった。parameter_values引数をオプションにできるようになった。 -
OpenQASM 3 エクスポーター (
qiskit.qasm3)は、明示的な遅延を持つ回路のエクスポートをサポートするようになりました。QuantumCircuit.delay(). -
に新しいレイアウト配線法を追加した。
transpile()を追加した。 これを使用するには、オプションパッケージの Qiskit TOQMをインストールする必要があります。 のrouting_methodkwargは、追加値をサポートしている。transpile()は追加の値、'toqm'をサポートしている。これはTOQMを介したレイアウトとルーティングを有効にするために使われる。Terraとともに
qiskit-toqm:pip install qiskit-terra[toqm] -
任意のユニタリーに量子シャノン分解を適用する新しいモジュール
qiskit.quantum_info.synthesis.qsdを追加。 この機能は、デフォルトのユニタリー・シンセシス・トランスパイラ・パスの従来のアイソメトリー・ベースのアプローチに取って代わるものである。UnitaryGate.量子シャノン分解は、2量子ビット以上のユニタリー行列を分解する際に、アイソメトリ実装の約半分のcnotゲートを使用する。
-
スカラー倍をサポートする
quantum_infoモジュールのスカラー倍をサポートするクラスは、左右どちらからでもスカラー倍できるようになった。 以前は左からのスカラー倍率しか受け付けなかった。 -
トランスパイラー・パスは
LookaheadSwap(パス(transpile()routing_method="lookahead"で使用される)トランスパイラ・パスのパフォーマンスが改善され、およそ3倍速くなりました。 これは純粋に計算の効率が良くなっただけで、アルゴリズムの複雑さは変わらない。 たいていの場合SabreSwap(routing_method="sabre") のような最新のルーティング・アルゴリズムの方がはるかに性能が高いだろう。 -
新しいトランスパイラー・パスが追加された。 トランスパイラーのパス
Commuting2qGateRouterは、スワップ戦略を用いて、カップリング・マップに通勤ゲートのブロックをルーティングする。 実際、ルーティングは難しい問題であるが、CZネットワークのようにゲートが通勤している場合はかなり簡単である。 QAOAでは通常、通勤ゲートのブロックも見られる。 このような場合は、あらかじめ定義されたSWAPゲートのレイヤーセットを適用するスワップ戦略を用いて対処することができる。 さらに、この新しいトランスパイラー・パスは、FindCommutingPauliEvolutions、2量子ビットの項がコミュティングされたパウリ進化のブロックを識別する。 ここで、スワップ戦略はクラスSwapStrategyによって指定される。 スワップ戦略は、最良の結果を得るために、カップリング・マップと、理想的には回路に合わせて調整する必要がある。 -
Qiskitライブラリに新しいオプティマイザを導入し、変分量子アルゴリズムのパラメータ最適化をサポート。 これは一変量限界分布アルゴリズム(UMDA)であり、分布推定アルゴリズムの特殊なタイプである。 例:
from qiskit.opflow import X, Z, I from qiskit import Aer from qiskit.algorithms.optimizers import UMDA from qiskit.algorithms import QAOA from qiskit.utils import QuantumInstance H2_op = (-1.052373245772859 * I ^ I) + \ (0.39793742484318045 * I ^ Z) + \ (-0.39793742484318045 * Z ^ I) + \ (-0.01128010425623538 * Z ^ Z) + \ (0.18093119978423156 * X ^ X) p = 2 # Toy example: 2 layers with 2 parameters in each layer: 4 variables opt = UMDA(maxiter=100, size_gen=20) backend = Aer.get_backend('statevector_simulator') vqe = QAOA(opt, quantum_instance=QuantumInstance(backend=backend), reps=p) result = vqe.compute_minimum_eigenvalue(operator=H2_op) -
トランスパイラ・パスのコンストラクタには
Unroll3qOrMoreトランスパイラ・パスのコンストラクタには、2つの新しいオプションのキーワード引数、targetとbasis_gatesがあります。 これらのオプションは、対象となるバックエンドを記述するためにTargetまたは supported basis gate をそれぞれ指定し、対象となるバックエンドを記述します。 回路内のオペレーションがtargetまたはbasis_gatesにある場合、ターゲット・デバイスがそのオペレーションをネイティブにサポートしているため、パスによってアンロールされることはない。 -
QPYシリアライゼーションは、以下をサポートするようにアップグレードされました。
ScheduleBlock. これでパルスプログラムをバイナリで保存し、後でロードすることができる:from qiskit import pulse, qpy with pulse.build() as schedule: pulse.play(pulse.Gaussian(160, 0.1, 40), pulse.DriveChannel(0)) with open('schedule.qpy', 'wb') as fd: qpy.dump(schedule, fd) with open('schedule.qpy', 'rb') as fd: new_schedule = qpy.load(fd)[0]これは
QuantumCircuit. データ構造の詳細については SCHEDULE_BLOCKを参照のこと。 -
新しいトランスパイラー・パスを追加、
VF2PostLayout. このパスは、コンパイルパイプラインの新しいフェーズ/機能、ポストレイアウトまたはポスト最適化量子ビット選択を実行する新しいタイプである。 このパスの背後にある考え方は、トランスパイラで最適化ループを終了した後、回路内の各クビットの最終的なゲートカウントを知ることで、回路を実行するためにバックエンドでよりパフォーマンスの高い量子ビットのサブセットを見つけることができる可能性があるということです。 このパスは、ターゲットとなるバックエンドの接続性グラフの中から同型の部分グラフを探し、見つかった部分グラフ上の回路全体のエラーレートを調べ、回路のエラーレートが最も低いレイアウトを返す。このパスは
VF2Layoutパスと似ており、内部的にはどちらも retworkxの同じ VF2 の実装を使用しています。 しかしVF2PostLayoutは、初期レイアウト、配線、基底変換、および最適化パスの実行後に実行されるように設計されており、レイアウトがすでに適用され、回路が配線され、すべてのゲートがターゲット基底にある場合にのみ機能します。 これは、新しいレイアウトを適用してもターゲット・デバイス上で回路を実行できるようにするために必要です。VF2Layout一方、完璧な初期レイアウトを見つけるように設計されており、どんな回路にも対応できる。 -
トランスパイラー
ApplyLayoutトランスパイラ・パスは、レイアウトが一度適用された後に回路上のレイアウトを更新することをサポートするようになりました。 必須のlayoutフィールドに加えて)post_layoutフィールドが存在する場合、パスが実行されると、property_set。ApplyLayoutパスが実行されると、新しいレイアウトを適用するためにレイアウトが更新されます。 を返します。DAGCircuitを返します。layoutプロパティセットは、元のレイアウトの仮想量子ビットを新しいpost_layoutフィールドの物理量子ビットにマップするように更新されます。 -
によって生成されるプリセット・パス・マネージャー
level_1_pass_manager(),level_2_pass_manager()とlevel_3_pass_manager()で生成されたプリセット・パス・マネージャーで、それぞれoptimization_level1、2、3に対応する。transpile()関数上でそれぞれVF2PostLayoutパスが実行されます。 これにより、トランスパイラーは、ターゲット・バックエンドの異なる物理量子ビットを見つけ、その上で回路を実行することができる。 パスは実行されない。VF2PostLayoutにlayout_method,routing_method,initial_layoutの引数を手動で指定した場合、パスは実行されません。transpile(). パスは、物理回路を実行するためにバックエンドでより性能の良い量子ビットのサブセットを見つけることができれば、代わりに代替の量子ビットを使用するように回路のレイアウトを調整する。 -
このアルゴリズムは、基底状態(VQEと同様に計算される)から開始し、前の反復で計算された状態に直交し、ansatz上で計算したときにエネルギーが最小となる固有状態を計算しようとする修正されたコスト関数を最適化することによって、各固有状態を反復計算する。 実装されているインターフェイスはVQEと非常に似ており、以下のような形になっている:
from qiskit.algorithms import VQD from qiskit.utils import QuantumInstance from qiskit.circuit.library import TwoLocal from qiskit.algorithms.optimizers import COBYLA from qiskit import BasicAer from qiskit.opflow import I,Z,X h2_op = ( -1.052373245772859 * (I ^ I) + 0.39793742484318045 * (I ^ Z) - 0.39793742484318045 * (Z ^ I) - 0.01128010425623538 * (Z ^ Z) + 0.18093119978423156 * (X ^ X) ) vqd = VQD(k =2, ansatz = TwoLocal(rotation_blocks="ry", entanglement_blocks="cz"),optimizer = COBYLA(maxiter = 0), quantum_instance = QuantumInstance( BasicAer.get_backend("qasm_simulator"), shots = 2048) ) vqd_res = vqd.compute_eigenvalues(op)この特定のコード・スニペットは、2つの固有値を生成する(基底状態と第1励起状態) テストも実装されている。
アップグレードの注意
-
のパルス・クラスは
qiskit.pulse.libraryのサブクラスであるSymbolicPulseではなくParametricPulse. 利用可能なクラスは次のように変更されません。Gaussian,GaussianSquare,DragそしてConstant.SymbolicPulseには完全な下位互換性があり、機能の損失はないはずだ。 -
の各要素のデータ型が変更された。
QuantumCircuit.dataの各要素のデータ型が変更された。 以前は単純な3つのタプルで構成されていた。InstructionのリストQubitのリスト、そしてClbitのインスタンスであった。CircuitInstruction.この新しいクラスの属性は
operation,qubitsとclbitsで、前のタプルの要素に対応する。 しかしqubitsとclbitsはlistsではなく、tupleインスタンスになった。この新しいクラスは、インデックスの要素にアクセスしようとしたり、それを反復処理しようとしたりすると、古い3タプルとまったく同じ動作をする。 これには
qubitsとclbits要素をリストにキャストすることも含まれる。 これは後方互換性を保つためである。 Qiskit Terra 0.21 からは、これらの要素にアクセスする好ましい方法ではなくなっています。 その代わりに、前述の属性アクセス形式を使うべきである。これは、Terraのデータ構造のさらなる開発を可能にするためである。
QuantumCircuitデータ構造をさらに発展させることができるようにするためである。 今後予定されている開発には、動的パラメータ化された回路や、深層回路のメモリ使用量の全体的な削減などがある。 -
トランスパイラパスのみで使用される
python-constraint依存関係は、Qiskit Terra パッケージの要件リストではなくなりました。CSPLayoutトランスパイラパスのみに使用される 依存関係は、Qiskit Terra パッケージの要件リストにはもはやありません。 これはCSPLayoutのどのプリセットパスマネージャーでも、デフォルトではパスが使われなくなったからです。transpile(). パスはまだ利用可能だが、それを使う場合は手動でpython-contraintをインストールするか、qiskit-terraをインストールする際に、例えばcsp-layoutのエクストラを使う必要がある:pip install "qiskit-terra[csp-layout]" -
が出力するQPYバージョン・フォーマットのバージョンは、バージョン5に引き上げられた。
qpy.dump()はバージョン5に増加した。 この新しいフォーマットのバージョンは以前のバージョンと互換性がなく、QPYバージョン5を扱えないデシリアライザーでロードしようとするとエラーになる。 この変更は、制御されたゲートを適切に表現し、デフォルト以外の制御状態を表現するためのサポートを修正するために必要だった。 -
Qiskit Terraのコンパイル済みRust拡張の最小サポートRustバージョン(MSRV)が 1.56.1 になりました。 つまり、Qiskit Terraをソースからビルドする場合、サポートされるRustコンパイラの最も古いバージョンは 1.56.1。 古いバージョンのRustコンパイラを使用している場合、Qiskitをソースからビルドし続けるには新しいバージョンにアップデートする必要があります。 この変更は、多くのアップストリーム依存ファイルも最小サポートバージョンを更新したため、必要になった。
-
に複数の回路が提供される場合、回路スケジューリングは並列に実行されるようになりました。
schedule(). 詳細は #2695を参照。 -
これまで非推奨だった
BaseBackend、BaseJob、BaseProviderの各クラスはすべて削除された。 これらはもともと、 0.18.0 リリースで非推奨となっていた。 これらのクラスの代わりに、バージョン管理されたプロバイダー・インターフェース・クラスを使用する必要があります。BackendV2,JobV1そしてProviderV1. -
のコンストラクタの
backend引数が削除されました。RZXCalibrationBuilderのコンストラクタの引数が削除されました。 これはもともと、 0.19.0 リリースで非推奨となっていた。 代わりにBackendオブジェクトにinstruction_schedule_mapとqubit_channel_mappingを問い合わせ、コンストラクタに直接渡します。 例えばBackendV1バックエンドでfrom qiskit.transpiler.passes import RZXCalibrationBuilder from qiskit.providers.fake_provider import FakeMumbai backend = FakeMumbai() inst_map = backend.defaults().instruction_schedule_map channel_map = backend.configuration().qubit_channel_mapping cal_pass = RZXCalibrationBuilder( instruction_schedule_map=inst_map, qubit_channel_mapping=channel_map, )または
BackendV2バックエンドがある:from qiskit.transpiler.passes import RZXCalibrationBuilder from qiskit.providers.fake_provider import FakeMumbaiV2 backend = FakeMumbaiV2() inst_map = backend.instruction_schedule_map channel_map = {bit: backend.drive_channel(bit) for bit in range(backend.num_qubits)} cal_pass = RZXCalibrationBuilder( instruction_schedule_map=inst_map, qubit_channel_mapping=channel_map, ) -
BasicAerバックエンドの測定ショット制限が削除されました。 -
DAGNodeについては、以前に非推奨とされていたtype、op、qargs、cargs、wireのkwargsと属性が削除された。 これらはもともと、 0.19.0 リリースで非推奨となっていた。op、qargs、cargsのクワーグと属性は、DAGOpNodeのインスタンス上でのみアクセス可能であり、wireのクワーグと属性は、DAGInNodeまたはDAGOutNodeのインスタンス上でのみアクセス可能である。 -
非推奨の関数
pauli_group()は削除されました。 もともとQiskit Terra 0.17 では非推奨だった。 -
のいくつかの非推奨メソッドが削除されました。
Pauliのいくつかのメソッドが削除されました。これらはもともと Qiskit Terra 0.17 で非推奨とされていたものです。 これらは以下の通りである:sgn_prod使用
Pauli.compose()またはPauli.dot()を使う。to_spmatrix代わりに
Pauli.to_matrix()を代わりに引数sparse=True。kron使用する
Pauli.expand()ただし、これは既存のオブジェクトを変異させるのではなく、新しいオブジェクトを返すことに注意。update_zおよびupdate_xオブジェクトの
zとx属性を直接設定する。insert_paulis使用
Pauli.insert().append_paulis使用
Pauli.expand().delete_qubits使用
Pauli.delete().pauli_single手動でラベルを作成し、イニシャライザーに直接渡す:
Pauli("I" * index + pauli_label + "I" * (num_qubits - index - len(pauli_label)))random代わりに
quantum_info.random_pauli()代わりに -
クラスから
optimizeメソッドを削除した。Optimizerメソッドを削除しました。minimize()メソッドに取って代わられました。 唯一の例外はSPSA非推奨の警告が出なかったので、そのメソッドはまだ保持されている。 -
Resultは、date、status、header属性を常に含むように変更された(指定されていない場合は、Noneに設定される)。 -
Python 3.7 shared-memory38 が依存関係になった。 これは、 Python 3.7 の依存関係として追加されたもので、より新しいバージョンの Python の標準ライブラリにある共有メモリ構造を活用できるようにするためのものである。 Python >= 3.8 で実行している場合、追加の依存関係は必要ない。
-
Instructionラベルが命令作成時にタイプチェックされるようになりました。 -
QPY のシリアライズがアップグレードされました。
QuantumCircuitにアップグレードされました。QuantumCircuit.calibrations. QPY バージョン 5 では、以下の較正項目のみがシリアライズできます。ScheduleBlock型の校正項目のみをシリアル化できます。 -
の定義が変更された。
XXPlusYYGateの定義が変更された。 詳細は #7969を参照。 -
によって生成されるプリセット・パス・マネージャー
level_1_pass_manager(),level_2_pass_manager()およびlevel_3_pass_manager()によって生成されtranspile()関数のoptimization_levelの引数1、2、3によってそれぞれ生成されるプリセット・パス・マネージャーは、トランスパイラー・パスに厳しい時間制限を設定しなくなった。VF2Layoutトランスパイラ・パスに厳しい時間制限を設けることはなくなった。 これは、一定の制限時間(レベル1は 100ms、レベル2は10秒、レベル3は60秒)までは、より良い代替の完璧なレイアウトを見つけようとするのを止めないことを意味する。このようにすると、完璧なレイアウトが利用可能な場合のコンパイルの再現性が制限されるからだ。 つまり、パスを使ったときの出力は以前とは異なるかもしれないが、どのような場合でも、以前の出力よりもノイズの少ない量子ビットのセットが見つかった場合にのみ変化する。 以前の動作を維持したい場合は、 パス用のコンストラクタに 引数を設定するカスタムPassManagerを作成し、VF2Layoutパス用のコンストラクタにtime_limit引数を設定します。
非推奨のメモ
-
コール
timeline_drawer()は非推奨となりました。 すべての回路は、たとえ遅延命令だけで構成されていても、scheduling_methodのキーワード引数transpile()に格納されているスケジュール情報を生成するためにQuantumCircuit.op_start_times. -
のコンバーター関数は、 メソッドとともに、非推奨となりました。 NetworkX
DAGCircuit.to_networkx()とfrom_networkx()のコンバータ関数とDAGDependency.to_networkx()メソッドは非推奨となり、将来のリリースで削除される予定です。 Qiskitは、qiskit-terra 0.12.0 リリース以来、グラフライブラリとして retworkxを使用しており、それ以来、networkxコンバータ関数は非可逆である。 これらはもともと、retworkxにはない NetworkX’s アルゴリズムライブラリの機能をユーザーが活用できるように追加されたものです。 それ以来、retworkxは成熟し、より多くの機能を提供しています。DAGCircuitはretworkxと緊密に結合して動作している。 これらのコンバーター・メソッドを持っていても、今後の価値は限定的であるため、将来のリリースでは削除される予定である。 -
モジュールからいくつかの古いトグル (
HAS_MATPLOTLIB,HAS_PDFTOCAIRO,HAS_PYLATEXandHAS_PIL) にアクセスすることは非推奨となりました。qiskit.visualizationモジュールからのアクセスは非推奨となり、これらのインポートパスはQiskit Terraの将来のバージョンで削除される予定です。 同じオブジェクトにアクセスするにはqiskit.utils.optionalsこのテスターには、Terraのオプション依存関係のほとんどすべてのテスターが含まれている。 -
qiskit.test.mockモジュールは非推奨となりました。 以前はqiskit.test.mockで利用可能だった偽のバックエンドと偽のプロバイダクラスは、Terra 以降ではqiskit.providers.fake_provider0.20.0 でアクセスできるようになりました。 この変更は、Qiskitの一部として偽のバックエンドクラスをサポートすることへの適切なコミットメントを表しています。 -
を呼び出すときの引数の名前。
EstimatorまたはSamplerオブジェクトを関数として呼び出すときの引数の名前は、circuit_indicesとobservable_indicesからcircuitsとobservablesに変更された。 -
の
qobj_idとqobj_headerキーワード引数は非推奨となり、将来のリリースでは削除される予定です。execute()関数のキーワード引数は非推奨となり、将来のリリースで削除される予定です。BaseBackendクラスが削除されて以来、どのバックエンドもQobjオブジェクトを直接実行することはサポートしておらず、代わりに直接QuantumCircuitオブジェクトでのみ動作します。 -
のイニシャライザーへの引数
x、z、labelはQiskit Terra で非推奨として文書化されていましたが、バグにより実行時に期待した警告が表示されませんでした。Pauliへの引数はQiskit Terra 0.17 で非推奨として文書化されていましたが、バグにより実行時に期待された警告が表示されませんでした。 警告は正しく表示され、Qiskit Terra 0.23 以降では引数は削除されます。xとzのペアは、1つのタプル (Pauli((z, x))) として位置指定で渡す。文字列labelは、第1引数 (Pauli("XYZ")) の位置で渡されるべきである。 -
この
SPSA.optimize()メソッドは廃止されSPSA.minimize()に取って代わります。 このメソッドは、以前よりも多くの情報を含む完全な結果オブジェクトを返すことに注意してください。 -
の引数
circuitsは非推奨である。qpy.dump()の引数は非推奨となり、programsに置き換えられました。 -
AlignmentKind.to_dict()メソッドは非推奨となり、削除される予定です。
バグ修正
-
引数がモジュラス1であることをチェックするために
DiagonalGateが追加された。 -
に与えられた重複した量子ビットのインデックスが正しくエラーになるようになりました。
SparsePauliOp.from_sparse_list()は、以前の値を黙って上書きするのではなく、正しくエラーを発生するようになりました。 新しいキーワード引数do_checks=Falseを渡すことで、古い動作にアクセスできる。 -
視覚化によって
timeline_drawer()視覚化によって古典的なレジスタ・スロットの位置がずれることはなくなった。 -
のパラメータ検証は
GaussianSquareのパラメータ検証は、構築前と構築後で一貫性が保たれるようになった。 詳細は #7882を参照。 -
その
BackendV2-をベースにしたqiskit.providers.fake_providerモジュールのFakeMontrealV2をサポートするようになりました。Delay操作に対応しました。target属性でサポートするようになりました。 以前はQuantumCircuit遅延を含むオブジェクトは、これらのバックエンドにコンパイルすることができなかった。 -
TridiagonalToeplitz.eigs_bounds()で、負の固有値がある場合に誤った固有値境界が返されるバグを修正。 詳細は #7939を参照。 -
LaTeX statevector drawer が
max_sizeパラメータを無視するバグを修正。 -
コンストラクタ
PassManagerConfig.from_backend()オブジェクトからPassManagerConfigインスタンスからBackendV2インスタンスから 以前はこれが正しく処理されずBackendV2オブジェクトで実行すると失敗していました。 -
QPYシリアライズ(
qpy.dump())およびデシリアライズ(qpy.load())のサポートを修正しました。QuantumCircuitカスタムControlledGateオブジェクトのシリアライズとデシリアライズのサポートを修正しました。 以前はqpy.load()によって例外が発生していた。ControlledGate. 修正 #7999。 -
QPYシリアライズ(
qpy.dump())およびデシリアライズ(qpy.load())のサポートを修正しました。QuantumCircuitカスタムMCPhaseGateオブジェクトのシリアライズとデシリアライズのサポートを修正しました。 以前はqpy.load()を再構築しようとするとMCPhaseGate. -
QPYシリアライズ(
qpy.dump())およびデシリアライズ(qpy.load())のサポートを修正しました。QuantumCircuitオブジェクトのシリアライズとデシリアライズのサポートを修正しました。 これまでは、直列化処理と再構築された回路によって、オープン制御の状態が失われていた。 -
固定
QuantumCircuit.reverse_bits()レジスタレスを含む回路でQubitとClbit. 例えば、以下のようになります:from qiskit.circuit import QuantumCircuit, Qubit, Clbit qc = QuantumCircuit([Qubit(), Clbit()]) qc.h(0).c_if(qc.clbits[0], 0) qc.reverse_bits() -
ConfigurableFakeBackend.t2属性が、以前は提供されたt1の値に基づいて誤って設定されていたのを修正。 -
の問題を修正しました。
BackendV2-からの偽のバックエンドクラスに基づくqiskit.providers.fake_providerモジュールのようなFakeMontrealV2属性(およびdt属性(およびTarget.dt属性の値)が正しく秒に変換されていなかった問題を修正しました。 このため、これらの偽のバックエンドをスケジューリングで使用すると問題が発生する。 -
のバグを修正。
plot_histogram()のバグを修正した。number_to_keepの引数がキーの数より小さい場合。 以下のコードはエラーを吐かなくなり、正しく整列されます:from qiskit.visualization import plot_histogram data = {'00': 3, '01': 5, '11': 8, '10': 11} plot_histogram(data, number_to_keep=2) -
パラメータ化されたインスタンスの構築と作業のパフォーマンスが向上した。
QuantumCircuit比較的少数のパラメータを共有する多数のゲートを持つインスタンスの構築と作業のパフォーマンスが向上した。 -
OpenQASM 3 エクスポーター(
qiskit.qasm3)は、basis_gatesオプションで非標準ゲートの定義を生成しようとしなくなった。 -
のゲッターを修正した。
OptimizerResult.nitゲッターを修正しました。 -
オブジェクトの文字列表現のバグを修正。
Resultオブジェクトの文字列表現のバグを修正しました。 -
の問題を修正した。
transpile()basis_gatesキーワード引数で基底ゲート文字列のリストを与えたり、 キーワード引数で暗黙のうちにTargettarget入力が正しく解釈されず、リストされたゲートのサブセットが各回路に使用される問題を修正しました。 -
トランスパイラー・パスの
UnitarySynthesisトランスパイラ・パスの問題を修正しました。Targetコンストラクタのtargetキーワード引数で、演算に量子ビットの制限がないもの(理想的なシミュレータ・ターゲットの場合など)が指定された場合にエラーになるトランスパイラ・パスの問題を修正しました。 -
メソッド
qiskit.result.marginal_counts()メソッドは、パルスバックエンドからResultQobjExperimentHeaderを持つExperimentResultオブジェクトの配列が含まれ、それらのExperimentHeadersにはcreg_sizesインスタンス変数がないからである。 シミュレーターのバックエンド(例えばAer)からResult、そのインスタンス変数が存在することになる。 フィールドが存在しないか、Noneでない場合、creg_sizesを必要とするロジックをスキップするように、marginal_counts。 -
OpenQASM 2 エクスポーター(
QuantumCircuit.qasm())は、定義されたすべての量子ビットに影響を与えないUnitaryGateを正しく定義するようになりました。 修正 #8224。 -
の再現性に関する問題を修正した。
transpile()optimization_level関数の再現性の問題を修正しました。 以前は、完璧なレイアウト(SWAPゲートを必要としないレイアウト)が複数ある場合、seed_transpiler引数が設定されているかどうかに関係なく、選択されたレイアウトと出力回路が異なる場合がありました。
エア 0.10.4
変更なし
IBM Q プロバイダー 0.19.2
バグ修正
- 今度のterraリリースでは、最終リリースの前にリリース候補がタグ付けされる。 しかし、qiskit-ibmq-providerはバージョンを解析しようとしており、バージョン文字列にpreleaseサフィックスがないと仮定しているため、パッケージのバージョン文字列の変更は現在ブロックされています(詳細は #8200を参照してください)。 PEP440 PR #1135 はこのバージョン解析を修正し、pypa/packagingプロジェクトからの正規表現を使用するようにしました。 これにより、terraはqiskit-ibmq-providerを壊すことなく、 0.21.0rc1 タグをリリースできるようになる。
threading.currentThreadおよびnotifyAllは、 Python 3.10 (2021年10月)で非推奨となり、 Python 3.12 (2023年10月)で削除される予定である。 PR #1133 では、これらをthreading.current_threadに置き換え、notify_allでは Python 2.6 を追加した(2008年10月)。