Qiskit 0.20 リリースノート
0.20.1
Terra 0.15.2
バグ修正
- パラメータ化された
Gateインスタンスのdefinition属性にアクセスすると、生成されたQuantumCircuitが無効なParameterTableで生成されていたため、QuantumCircuit.parametersからの読み取りやQuantumCircuit.bind_parametersの呼び出しで、バインドされていないパラメータが誤って報告されていました。 これは既に解決されています。 SXGate().inverse()は以前、'sx_dg'ゲートを正しいdefinitionで返したが、正しくないto_matrixであった。 これは、SXGate().inverse()がSXdgGate()を返すように、またその逆も返すように更新された。Instruction.inverse()サブクラスでオーバーライドされていない場合、to_matrixメソッドが正しくないGateインスタンスを返すことがある。 不正確なto_matrixメソッドのインスタンスは削除された。- ゼロでない
angleを持つC3XGateでは、C3XGate.inverse()を介してゲートを反転させると、以前は不正な逆ゲートが生成されていた。 これは修正された。 .inverse()を呼び出すと、同じモードのゲートを返すようにMCXGateのモードが更新された。 これにより、MCXVChainゲートの逆数を含む回路をトランスパイルするとエラーが発生する場合があるという問題が解決された。- これまでは、
PhaseGate.controlを介して多重制御位相ゲートを作成すると、MCU1Gateゲートが返されていました。 これは、MCPhaseGate。 - 以前は、
MCPhaseGateを含む回路を分解しようとすると、MCPhaseGateの定義に矛盾があるためエラーが発生した。 これは修正された。 QuantumCircuit.composeとDAGCircuit.compose、入力回路に複数のClassicalRegisterが含まれる場合、条件付きゲートの翻訳が誤っているケースがあった。 これは既に解決されています。- 空のデータ辞書から
qiskit.result.Countsオブジェクトを作成する際の問題を修正しました。 これで空のCountsオブジェクトを作成します。 このmost_frequent()メソッドも更新され、オブジェクトが空のときにより説明的な例外が発生するようになった。 5017を修正 - 異なるレジスタで回路を拡張すると、それに応じて
qregsとcregsのプロパティが更新されるが、qubitsとclbitsのリストは更新されない。 これらはもはやレジスタから生成されるものではなく、キャッシュされたリストであるため、レジスタとビットの不一致につながる。 これは修正され、extendメソッドは明示的にキャッシュされたビットリストを更新する。 - meth:~qiskit.circuit.ControlledGate.inverse メソッドの具体的な実装において、
ctrl_stateパラメータが保持されないバグを修正。 - 長いパルス・スケジュールが再帰エラーを投げる原因となっていたバグが修正された。
エア 0.6.1
変更なし
イグニス 0.4.0
変更なし
アクア 0.7.5
変更なし
IBM Q プロバイダー 0.8.0
変更なし
0.20.0
Terra 0.15.1
前奏曲
0.15.0 リリースにはいくつかの新機能とバグ修正が含まれている。 今回のリリースのハイライトは以下の通り:
今回のリリースでは、トランスパイラに任意の基底変換が導入された。 例えば、RZ、RY、RZ、CZ、 iSwap ゲートを実装したバックエンドなどです。
この QuantumCircuit クラスがグローバル・フェイズを追跡するようになりました。 つまり、グローバル位相を持つ回路を制御する場合、相対位相が正しく追加され、ゲートマトリックスの定義は、グローバル位相まで等しくなるのではなく、正確になります。
新機能
-
新しいDAGクラス
qiskit.dagcircuit.DAGDependencyこのDAGでは、ノードは操作(ゲート、メジャー、バリアなど)である エッジは2つの操作間の非整合を表す。 -
に4つの新しい関数が追加された。
qiskit.convertersに追加された。DAGDependency. 以下のような関数があります。circuit_to_dagdependency()オブジェクトからQuantumCircuitオブジェクトからDAGDependencyオブジェクトに変換する。dagdependency_to_circuit()オブジェクトからDAGDependencyオブジェクトからQuantumCircuitオブジェクトに変換する。dag_to_dagdependency()オブジェクトからDAGCircuitオブジェクトからDAGDependencyオブジェクトに変換する。dagdependency_to_dag()オブジェクトからDAGDependencyオブジェクトからDAGCircuitオブジェクトに変換する。
例:
from qiskit.converters.dagdependency_to_circuit import dagdependency_to_circuit from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit circuit_in = QuantumCircuit(2) circuit_in.h(qr[0]) circuit_in.h(qr[1]) dag_dependency = circuit_to_dagdependency(circuit_in) circuit_out = dagdepency_to_circuit(dag_dependency) -
に2つの新しいトランスパイラー・パスが追加された。
qiskit.transpiler.passes1つ目はUnrollCustomDefinitionsは、回路内のすべての命令をそのdefinitionプロパティに従って回路内のすべての命令を展開し、指定されたbasis_gates、または指定されたEquivalenceLibrary. もうひとつはBasisTranslatorは、提供されたEquivalenceLibraryを使用して、指定されたベースで回路命令を書き換える。 -
に新しいキーワード引数
translation_methodが追加された。transpile()キーワード引数が追加され、回路を利用可能なデバイス・ゲートに変換するために使用する方法を選択できるようになりました。 例えば、transpile(circ, backend, translation_method='translator')です。 有効な選択項目は、以下のとおりです。'unroller'を使用する。Unrollerパス'translator'を使用する。BasisTranslatorパス。'synthesis'を使用する。UnitarySynthesisパス。
デフォルト値は
'translator'です。 -
カウント結果データを扱う新しいクラスが追加されました、
qiskit.result.Countsが追加されました。 このクラスはdictのサブクラスであり、他の辞書と同様に扱うことができる。 しかし、実験からのカウント結果を扱うためのヘルパー・メソッドや属性が含まれており、オブジェクト初期化時のバイナリ文字列の後処理やフォーマットも処理する。 ACountsオブジェクトは、整数、'0x4a'形式の16進数文字列、'0b1101'形式の2進数文字列、レジスタとメモリ・スロットにまたがってフォーマットされたビット文字列(すなわち'00 10')、またはdit文字列をキーとするカウントの辞書を渡すことで作成できる。 例:from qiskit.result import Counts counts = Counts({"0x0': 1, '0x1', 3, '0x2': 1020}) -
オブジェクトを構築するための新しいメソッド
qiskit.dagcircuit.DAGCircuitfrom_networkx()オブジェクトを構築するメソッドが追加された。 このメソッドは networkxMultiDiGraphオブジェクト(to_networkx()が返す形式)を受け取り、新しいDAGCircuitオブジェクトを返します。 この関数の背後にある意図は、 retworkx APIから関数が欠落している場合に、トランスパイラ・パスの作者がnetworkxのグラフ・アルゴリズム・ライブラリを活用できるようにすることです。 このような場合、 retworkxのissue trackerで issueが開かれる(あるいはプルリクエストが提出される)ことを期待したい。 -
init_qubits。assemble()とexecute()に追加されました。 この機能をサポートするバックエンドの場合、init_qubitsを使用して、回路を実行するバックエンドが各ショットの開始時に初期化シーケンスを挿入するかどうかを制御することができる。 デフォルトではTrue。つまり、各ショットの開始時にすべての量子ビットが基底状態にあると仮定できる。 しかし、init_qubitsをFalseに設定すると、各実験の開始時およびショット間で、量子ビットが初期化されなくなる。 このフラグが効果を発揮するためには、回路を実行しているバックエンドがこの機能をサポートしていなければならないことに注意してほしい。 -
に新しいクワーグ
rep_delayが追加された。qiskit.compiler.assemble()qiskit.execute.execute()PulseQobjtConfig.qiskit この新しいkwargは、プログラムの実行間隔を示すために使用されます。 これは、rep_delaysとして設定された有効な値のリストの中から、バックエンドのPulseBackendConfigurationオブジェクトからbackend.configuration().rep_delaysとしてアクセスできます)。rep_delaykwargは、動的な反復練習が可能なバックエンドでのみ動作します。 これはバックエンドのPulseBackendConfigurationオブジェクトのdynamic_reprate_enabled属性として示されます。dynamic_reprate_enabledがFalseの場合、rep_timeで指定された値が使用される。qiskit.compiler.assemble()rep_delayではなく、qiskit.execute.execute()、またはPulseQobjtConfigのコンストラクタが使用される。rep_timeが指定できるのは、番組間のディレイではなく、番組の継続時間だけである。 -
qiskit.schemasのqobj_schema.jsonJSON Schema ファイルが更新され、pulse qobjs のオプション設定プロパティとしてrep_delayが追加されました。 -
mod:qiskit.schemas の
backend_configuration_schema.jsonJSON Schema ファイルが更新され、パルスバックエンド設定のオプションプロパティとしてrep_delay_rangeとdefault_rep_delayが追加されました。 -
新しい属性が追加された、
global_phaseこれはグローバル・フェイズのトラッキングに使われる。qiskit.circuit.QuantumCircuitクラスに追加された。 例:import math from qiskit import QuantumCircuit circ = QuantumCircuit(1, global_phase=math.pi) circ.u1(0)上記の例では、
circ.global_phase、グローバルフェイズを変更したり、問い合わせたりすることもできる。 いずれの場合も、設定はラジアン単位である。 回路が命令またはゲートに変換される場合、グローバル位相は最初の量子ビットの2つの単一量子ビット回転で表される。これにより、オブジェクトを消費する他のメソッドや関数は
QuantumCircuitオブジェクトを消費する他のメソッドや関数がグローバル・フェーズを考慮に入れることができます。 次のような例を挙げてみます。 でglobal_phase属性でto_matrix()メソッドは、大域的な位相までではなく、ゲートの分解に正確に対応できるようになりました。同じ属性が
DAGCircuitクラスとQuantumCircuitとDAGCircuit. -
2つの新しいクラス
AncillaRegisterとAncillaQubitがqiskit.circuitモジュールに追加されました。 のサブクラスです。QuantumRegisterとQubitのサブクラスであり、量子ビットがアンシラであることを示すことができる。 これにより、これらの量子ビットをより大規模な回路やアルゴリズムで再利用できるようになる。 -
新しいメソッド
control()が追加された。QuantumCircuit. このメソッドはQuantumCircuitオブジェクトの制御されたバージョンを返します。 この機能には、以前はGateクラスを通してのみアクセス可能でした。 -
新しいメソッド
repeat()メソッドがQuantumCircuitクラスに追加されました。 これは、元の回路の指定された繰り返し数を含む新しい回路オブジェクトを返す。 例:from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) repeated_qc = qc.repeat(3) repeated_qc.decompose().draw(output='mpl')パラメータは参照によってコピーされる。つまり、回路の1つのインスタンスでパラメータを更新すると、すべての繰り返しが更新される。
-
新しいメソッド
reverse_bits()メソッドがQuantumCircuitクラスに追加されました。 この方法は、回路内のビット(量子ビットと古典ビットの両方)の順序を逆にする。 これは、回路をリトルエンディアンからビッグエンディアンに切り替えたり、その逆に切り替えたりするのに使うことができる。 -
新しいメソッド、
combine_into_edge_map()が追加された。qiskit.transpiler.Layoutクラスに追加された。 この方法によって、2つのオブジェクトLayoutつの回路を構成するための量子ビットマップに変換することができる。 -
qiskit.test.mock.utilsモジュールに新しいクラスConfigurableFakeBackendが追加された。 この新しいクラスは、テスト用に設定可能なモック・バックエンドを作成することができます。 例:from qiskit.test.mock.utils import ConfigurableFakeBackend backend = ConfigurableFakeBackend("Tashkent", n_qubits=100, version="0.0.1", basis_gates=['u1'], qubit_t1=99., qubit_t2=146., qubit_frequency=5., qubit_readout_error=0.01, single_qubit_gates=['u1'])は100量子ビットのバックエンドオブジェクトを生成し、コンストラクタで指定された他のすべてのパラメータを持つ。
-
新しいメソッド
draw()メソッドがqiskit.circuit.EquivalenceLibraryクラスに追加されました。 このメソッドは、デバッグに便利な等価ライブラリーの内容を描画するために使用できる。 例:from numpy import pi from qiskit.circuit import EquivalenceLibrary from qiskit.circuit import QuantumCircuit from qiskit.circuit import QuantumRegister from qiskit.circuit import Parameter from qiskit.circuit.library import HGate from qiskit.circuit.library import U2Gate from qiskit.circuit.library import U3Gate my_equiv_library = EquivalenceLibrary() q = QuantumRegister(1, 'q') def_h = QuantumCircuit(q) def_h.append(U2Gate(0, pi), [q[0]], []) my_equiv_library.add_equivalence(HGate(), def_h) theta = Parameter('theta') phi = Parameter('phi') lam = Parameter('lam') def_u2 = QuantumCircuit(q) def_u2.append(U3Gate(pi / 2, phi, lam), [q[0]], []) my_equiv_library.add_equivalence(U2Gate(phi, lam), def_u2) my_equiv_library.draw() -
に新しいフェーズ命令
SetPhaseが追加されました。qiskit.pulse. この命令は、後続パルスの位相を指定された位相(ラジアン単位。 例:import numpy as np from qiskit.pulse import DriveChannel from qiskit.pulse import Schedule from qiskit.pulse import SetPhase sched = Schedule() sched += SetPhase(np.pi, DriveChannel(0))この例では、
SetPhase命令の後、DriveChannel(0)に印加されるパルスの位相は、 ラジアンに設定される。 -
新しいパルス命令
ShiftFrequencyが追加された。qiskit.pulse.instructions. この命令により、チャンネルの周波数を設定周波数からシフトすることができる。 例:from qiskit.pulse import DriveChannel from qiskit.pulse import Schedule from qiskit.pulse import ShiftFrequency sched = Schedule() sched += ShiftFrequency(-340e6, DriveChannel(0))この例では、
ShiftFrequencyコマンドの後にDriveChannel(0)に印加されるすべてのパルスは、エンベロープの a 周波数が 340MHz でデクリメントされる。 -
新しいメソッド
conjugate()メソッドがParameterExpressionクラスに追加されました。 これにより、エラーを出さずにnumpy.conj()。 オブジェクトは実在する。ParameterExpressionオブジェクトは実在するので、それ自身を返す。 この動作は、 Python float/intsに似ている。 -
新しいクラス
PhaseEstimationが追加された。qiskit.circuit.library. この回路ライブラリクラスは、以下の位相推定アルゴリズムのオリジナルの定式化で使用された回路です。 arXiv:quant-ph/9511026. 位相推定は、対応する固有状態 が与えられたユニタリー作用素 の固有値 の位相 を推定する作業である。つまり
この推定(ひいてはこの回路)は、ショールのアルゴリズムや量子振幅推定など、いくつかのよく知られたアルゴリズムの中心的なルーチンである。
-
その
qiskit.visualization関数plot_state_qsphere()は新しいkwargshow_state_labelsを持ち、qsphere可視化の各blobにラベルを付けるかどうかを制御するのに使われる。 デフォルトでは、このkwargはTrueに設定され、デフォルトで各blobの横に基底状態が表示される。 この機能は、show_state_labelskwarg をFalseに設定することで、無効にすることができ、以前の動作に戻すことができる。 -
その
qiskit.visualization関数plot_state_qsphere()は新しいkwargshow_state_phasesを持ち、デフォルトではFalseに設定されている。Trueに設定すると、各基底状態の位相を表示する。 -
その
qiskit.visualization関数plot_state_qsphere()は新しいkwarguse_degreesを持ち、デフォルトではFalseに設定されている。Trueに設定すると、各基底状態の位相が度単位で表示され、右下に位相円も表示される。 -
新しいクラス
QuadraticFormをqiskit.circuit.libraryモジュールに追加されます。 回路ライブラリ要素は、次の操作を実装している
二次形式 、 出力量子ビットの場合。 結果は 、出力量子ビットは2の補数でエンコードされる。 が指定されていない場合、回路はモジュロ演算を適用せずに結果を表現するのに必要な最小の量子ビット数を選択する。 二次形式は、二次項を表す行列、線形項を表すベクトル、定数オフセットを使って指定する。 すべての項が整数の場合、回路は2次形式を正確に実装し、そうでない場合は近似に過ぎない。
例:
import numpy as np
from qiskit.circuit.library import QuadraticForm
A = np.array([[1, 2], [-1, 0]])
b = np.array([3, -3])
c = -2
m = 4
quad_form_circuit = QuadraticForm(m, A, b, c)-
追加
qiskit.quantum_info.Statevector.expectation_value()そしてqiskit.quantum_info.DensityMatrix.expectation_value()の期待値を計算する方法qiskit.quantum_info.Operator. -
のコンストラクタで
seedkwarg を使用できるようになりました。qiskit.circuit.library.QuantumVolumenumpyランダムジェネレータオブジェクトを使用できるようになりました。 以前は整数だけが有効な入力だった。 これはQuantumVolumeこれは、独自の乱数生成機能を持つ大きな関数の一部として統合する場合に便利である。QuantumVolume回路を生成する場合などである。 -
その
QuantumCircuitメソッドcompose()には新しいkwargfrontが追加されている。これは、付加の代わりに、原点回路の前にもう一方の回路を付加するために使うことができる。 例:from qiskit.circuit import QuantumCircuit circ1 = QuantumCircuit(2) circ2 = QuantumCircuit(2) circ2.h(0) circ1.cx(0, 1) circ1.compose(circ2, front=True).draw(output='mpl') -
2つの新しいパス
SabreLayoutとSabreSwapレイアウトと配線がqiskit.transpiler.passes. これらの新しいパスは、Liらに示されたアルゴリズムに基づいている、 "Tackling Qubit Mapping Problem for NISQ-Era Quantum Devices", ASPLOS 2019. またtranspile()関数を使用する際にも、layout_methodkwargを'sabre'、および/またはrouting_methodを'sabre'に設定することで選択できる。SabreLayoutとSabreSwapに設定することで選択することができる。 -
メソッドを
replace()メソッドを追加した。qiskit.pulse.Scheduleメソッドを追加した。 例:.. code-block:: pythonfrom qiskit import pulse
d0 = pulse.DriveChannel(0)
sched = pulse.Schedule ()
old = pulse.Play ( pulse.Constant (100, 1.0 ), d0 ) new = pulse.Play ( pulse.Constant (100, 0.1 ), d0 )
sched += old
sched = sched.replace (古い、新しい)
assert sched == pulse.Schedule (new)
-
に新しいゲート・クラスを追加した。
qiskit.circuit.libraryとして、 、その隣接ゲート 、および制御ゲート に新しいゲートクラスを追加しました。SXGate,SXdgGateおよびCSXGate. またQuantumCircuitオブジェクトに追加することもできる。sx(),sxdg()とcsx()を使ってオブジェクトに追加することもできる。 -
Reset命令のサポートを追加する。qiskit.quantum_info.Statevector.from_instruction(). これは、量子ビットが重ね合わせ状態にある場合に、ゼロ状態への射影を選択するRNGサンプリングを伴うことに注意してください。 サンプリングのシードはseed()メソッドで設定できます。 -
方法
qiskit.circuit.ParameterExpression.subs()とqiskit.circuit.QuantumCircuit.assign_parameters()メソッドはParameterExpressionを代入対象値として受け付けるようになった。例:
from qiskit.circuit import QuantumCircuit, Parameter p = Parameter('p') source = QuantumCircuit(1) source.rz(p, 0) x = Parameter('x') source.assign_parameters({p: x*x})┌──────────┐ q_0: ┤ Rz(x**2) ├ └──────────┘ -
その
QuantumCircuit()メソッドto_gate()メソッドには新しいkwarglabelがあります。Gateオブジェクトのラベルを設定するために使用できます。 例:from qiskit.circuit import QuantumCircuit circuit_gate = QuantumCircuit(2) circuit_gate.h(0) circuit_gate.cx(0, 1) custom_gate = circuit_gate.to_gate(label='My Special Bell') new_circ = QuantumCircuit(2) new_circ.append(custom_gate, [0, 1], []) new_circ.draw(output='mpl') -
を追加した。
UGate,CUGate,PhaseGateとCPhaseGateを対応するQuantumCircuitメソッドu(),cu(),p()およびcp(). ゲートはUGateゲートは3つのオイラー角を持つ一般的な単一量子ビット回転ゲートであり、ゲートはその制御版である。CUGateゲートはその制御バージョン。CUGateは、Uゲートのグローバル位相の可能性を考慮するため、4つのパラメーターを持つ。 そのPhaseGateとCPhaseGateゲートは、任意の角度での一般的な位相ゲートと、その制御版である。 -
新しいクワーグ
cregbundle。qiskit.visualization.circuit_drawer()関数とQuantumCircuitメソッドdraw().Trueに設定すると、textとmplの引き出しの回路ビジュアライゼーションにおいて、クレグが1本の線に束ねられる。 デフォルト値はTrueです。 問題 #4290に対処しました。例:
from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='mpl', cregbundle=True) -
新しいクワーグ
initial_state。qiskit.visualization.circuit_drawer()関数とQuantumCircuitメソッドdraw().Trueに設定すると、すべてのドロワーの回路可視化に初期状態が含まれるようになりました。 問題 #4293に対応しました。例:
from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='mpl', initial_state=True) -
mpl'ドロワーを使用する際、ラベルが表示されるようになりました。 ラベルにはゲートラベルとコントロールラベルの2種類がある。 ゲートラベルは、ディスプレイのゲート名に置き換わる。 コントロールラベルは、ゲートのコントロールの上または下に表示されます。 問題 # 3766、# 4580を修正。
例:
from qiskit import QuantumCircuit from qiskit.circuit.library.standard_gates import YGate circuit = QuantumCircuit(2) circuit.append(YGate(label='A Y Gate').control(label='Y Control'), [0, 1]) circuit.draw(output='mpl')
アップグレードの注意
-
マルチコントロールXゲート(
MCXGrayCode,MCXRecursiveおよびMCXVChain) の実装は、その実装をより正確に記述するためにnameプロパティが変更されている:mcx_grayそれぞれ、mcx_recursive、mcx_vchain。 以前は、これらのゲートはmcxという名前を共有していた。MCXGateと名前を共有していたため、これらのゲートのトランスパイル・シミュレーションが正しく行われなかった。 -
デフォルトでは
qiskit.transpiler.preset_passmanagersはUnrollCustomDefinitionsとBasisTranslatorを使うようになっている。Unroller. これは、新しいパスがより柔軟で、どのような基底セットもターゲットにできるためだが、出力は異なる可能性がある。 以前のデフォルトを使うには、translation_methodkwarg をtranspile()を'unroller'に設定する。 -
と :func
qiskit.converters.circuit_to_gate()と :funcqiskit.converters.circuit\_to\_instruction\コンバータ関数は、生成されたゲートまたは命令を自動的にアクティブSessionEquivalenceLibraryに含んでいた。 これらのコンバーターは、オプションのequivalence_libraryキーワード引数を受け付けるようになり、変換後のインスタンスを登録するかどうか、また登録する場所を指定できるようになった。 デフォルトの動作は、変換後のインスタンスを登録しないように変更されました。 -
のデフォルト値は
cregbundlekwargである。qiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数のデフォルト値がTrueに変更されました。 つまり、デフォルトでは、例えば回路図の古典的なビットがバンドルされることになる:from qiskit.circuit import QuantumCircuit circ = QuantumCircuit(4) circ.x(0) circ.h(1) circ.measure_all() circ.draw(output='mpl')回路図に以前の動作を保持させ、図中に各クラシックビットを表示させたい場合は、
cregbundlekwarg をFalseに設定します。 例:from qiskit.circuit import QuantumCircuit circ = QuantumCircuit(4) circ.x(0) circ.h(1) circ.measure_all() circ.draw(output='mpl', cregbundle=False) -
Scheduleでプロットする。qiskit.pulse.Schedule.draw()とqiskit.visualization.pulse_drawer()を使用すると、デフォルトではイベントテーブルが表示されなくなります。 これは、tablekwarg をTrueに設定することで再度有効にすることができる。 -
パス
RemoveResetInZeroStateは以前、プリセット・パス・マネージャーlevel_0_pass_manager()optimization_level=0に含まれていた。transpile()およびexecute()関数で使用されるプリセット・パス・マネージャーに含まれていました。 しかしRemoveResetInZeroStateは最適化パスであり、最適化レベル0に含めるべきでなかったので削除した。 もしtranspile()を使用する必要がある場合はRemoveResetInZeroStateカスタムパスマネージャーを使うか、optimization_level1、2、3。 -
非推奨のkwarg
line_length。qiskit.visualization.circuit_drawer()関数とqiskit.circuit.QuantumCircuit.draw()メソッドは削除されました。 0.10.0、非推奨となっていた。 その代わりに、foldkwargを使って回路図の幅を調整することができる。 -
の
'mpl'出力モードqiskit.circuit.QuantumCircuit.draw()メソッドとcircuit_drawer()pylatexenc ライブラリがインストールされている必要があります。 これはすでに視覚化のためのオプションの依存関係であったが、以前は'latex'出力モードにのみ必要であった。 これは、matplotlibのゲート用 mathtext ラベルでゲートのサイズを正しく処理するために必要だからです。 -
の非推奨
get_tokensメソッドは削除されました。qiskit.qasm.Qasmとqiskit.qasm.QasmParserは削除されました。 これらのメソッドは、 0.9.0 リリース以降、非推奨となっている。 代わりにqiskit.qasm.Qasm.generate_tokens()、qiskit.qasm.QasmParser.generate_tokens()。 -
非推奨 kwarg
channels_to_plotforqiskit.pulse.Schedule.draw()qiskit.pulse.Instruction.draw()qiskit.visualization.pulse.matplotlib.ScheduleDrawer.drawpulse_drawer()は削除されました。 kwargは 0.11.0 リリース以降非推奨となり、代わりにchannelskwargが使われるようになった。 -
クラスの
circuit_instruction_map属性は廃止されました。qiskit.providers.models.PulseDefaults属性は削除されました。 この属性は、 0.12.0 リリース以降非推奨となり、代わりに使用できるinstruction_schedule_map属性に置き換えられました。 -
の
unionメソッドとScheduleおよびInstructionは、 0.12.0 リリース以降非推奨となり、現在は削除されています。 を使用する。qiskit.pulse.Schedule.insert()kwarg``time=0`` とqiskit.pulse.Instruction.meth()メソッドを使用する。 -
の
drawメソッドに対する非推奨の引数scalingは、 リリース以降、 に置き換えられ、現在は削除されています。ScheduleとInstructionの引数は、 0.12.0 リリース以降、scaleに置き換えられ、現在は削除されています。 代わりにscale。 -
非推奨の
periodqiskit.pulse.library関数は 0.13.0 リリース以降freqに置き換えられ、現在は削除されています。periodの代わりにfreqkwarg を使う。 -
Commandsクラスを含むqiskit.pulse.commandsモジュールは 0.13.0 リリースで非推奨となり、現在は削除されている。 コマンドを使用していた場合は、パルスのコードをアップグレードする必要があります。 例:旧新規Command(args)(channel)Instruction(args, channel)\パイソン 取得(期間)( AcquireChannel(0 )) ``` \パイソン Acquire(duration, AcquireChannel(0 )) | ```python Delay(duration)(channel) ``` | ```python Delay(duration, channel) ``` | | ```python FrameChange(angle)(DriveChannel(0)) ``` | ```python # FrameChange was also renamed ShiftPhase(angle, DriveChannel(0)) ``` | | ```python Gaussian(...)(DriveChannel(0)) ``` | ```python # Pulses need to be `Play`d Play(Gaussian(...), DriveChannel(0)) ``` | -
qiskit.tool.qiモジュールのすべてのクラスと関数は 0.12.0 リリースで非推奨となり、現在は削除されている。 その代わりにqiskit.quantum_infoモジュールと、量子状態や量子演算子を扱うための新しいメソッドやクラスを使ってください。 -
qiskit.quantum_info.basis_stateとqiskit.quantum_info.projectorの関数は Qiskit Terra 0.12.0 で廃止されました。qiskit.quantum_info.QuantumState、その導関数を使用する。qiskit.quantum_info.Statevectorおよびqiskit.quantum_info.DensityMatrixを使う。 -
の対話型プロット関数は、現在では
qiskit.visualization,iplot_bloch_multivector,iplot_state_city,iplot_state_qsphere,iplot_state_hinton,iplot_histogram,iplot_state_paulivecは現在、matplotlib ベースの同等物の非推奨エイリアスに過ぎず、もはやインタラクティブではありません。 これらの関数が依存していたホスティングされた静的JSコードは削除され、もはや機能しない。 彼らが依存していたサイトがもはや存在しないため、通常の非推奨は不可能だった。 -
qiskit.validationのマシュマロを使用した検証コンポーネントは、terra から削除されました。 もはやテラでオブジェクトを作るのに使われることはない。 -
のマシュマロスキーマ・クラスは削除されました。
qiskit.resultクラスで使われなくなったので削除されました。qiskit.result.Resultクラスで使われなくなったので、削除されました。 -
の出力は
to_dict()メソッドの出力はqiskit.result.Resultクラスのメソッドの出力は、もはやJSONを直接シリアライズするためのフォーマットではありません。 これらのクラスのインスタンスに含まれる内容によっては、デフォルトのJSONエンコーダが扱い方を知らない型、例えば複素数やnumpy配列があるかもしれません。to_dict()メソッドの出力を直接JSONシリアライズする場合は、JSONエンコーダーがこれらの型を処理できることを確認する必要があります。 -
一度に複数の量子ビットを取得するオプションは、 0.12.0 リリースで非推奨となり、現在は削除されています。 具体的には、initの引数
mem_slotsとreg_slotsが以下から削除された。qiskit.pulse.instructions.Acquireまた、channel、mem_slot、reg_slotは、入力としてリストが提供されるとエラーとなる。 -
0.13.0 リリースでレガシー networkx ベースの実装へのフォールバックを提供するために導入された
USE_RETWORKX環境変数の使用サポートは削除されました。qiskit.dagcircuit.DAGCircuitを使用するサポートは削除されました。 このフラグは、retworkxへの移行中に、あるリリースの新実装で問題に遭遇したユーザーへの救済措置としてのみ意図されたものです。 -
のモジュールは
qiskit.pulseスケジュール->スケジュールの変換を担当するモジュールの名前がreschedule.pyからtransforms.pyに変更された。 以前のインポートパスは廃止されました。 コードをアップグレードするfrom qiskit.pulse.rescheduler import <X>に置き換えるべきである:
from qiskit.pulse.transforms import <X> -
以前のリリースでは
PassManagerはTransformationPassクラスがPropertySetを変更することを許可していませんでした。 この制限は解除され、TransformationPassクラスは、PropertySetとDAGCircuitの両方に対して、読み取りと書き込みができるようになった。run(). この変更は、TransformationPassクラスをより効率的にするために行われました。PassManager. この変更がなければ、内部状態を再作成するために2つ目の冗長なAnalysisPass。
非推奨のメモ
-
の最初の位置パラメーターの名前。
qiskit.visualization関数のplot_state_hinton(),plot_bloch_multivector(),plot_state_city(),plot_state_paulivec()およびplot_state_qsphere()はrhoからstateに改名された。rhoに値を名前で渡すことは非推奨であり、将来のリリースでは削除される予定である。 代わりに、引数を位置指定で渡すか、新しいパラメータ名stateを使用する必要があります。 -
qiskit.pulse.pulse_libモジュールは非推奨となり、将来のリリースで削除される予定です。 に改名された。qiskit.pulse.libraryという名前に変更された。 -
この
qiskit.circuit.QuantumCircuitメソッドmirror()は非推奨となり、将来のリリースでは削除される予定です。 代わりにqiskit.circuit.QuantumCircuit.reverse_ops()を代わりに使うべきである。ミラーリングは回路の出力量子ビットを入れ替えることと混同される可能性があるからだ。 このreverse_ops()メソッドは、ミラーリングの代わりに適用されるゲートの順番を逆にするだけである。 -
の
qubits()とclbits()メソッドは非推奨であり、将来のリリースでは削除される予定である。qiskit.dagcircuit.DAGCircuitメソッドは非推奨となり、将来のリリースで削除される予定です。 これらは同名のプロパティ、qiskit.dagcircuit.DAGCircuit.qubitsとqiskit.dagcircuit.DAGCircuit.clbitsに置き換えられ、キャッシュされるため、アクセスがより高速になりました。 -
get_sample_pulseqiskit.pulse.library.ParametricPulse派生クラス(たとえばGaussianSquare) のメソッドは非推奨となり、将来のリリースで削除される予定です。 これは、get_waveformメソッド(例えば、get_waveform())に置き換えられている。 -
のオプション引数
conditionを使用する。qiskit.dagcircuit.DAGNode,qiskit.dagcircuit.DAGCircuit.apply_operation_back()およびqiskit.dagcircuit.DAGCircuit.apply_operation_front()のオプション引数の使用は非推奨となり、将来のリリースで削除される予定です。 代わりに、controlqiskit.circuit.Instructionインスタンスに追加されるDAGCircuitに追加されるインスタンスに設定される。 -
set_atol、set_rtolクラスのメソッドは、qiskit.quantum_info.BaseOperator、qiskit.quantum_info.QuantumStateクラス(およびそのサブクラスであるOperatorおよびqiskit.quantum_info.DensityMatrixなど)のクラス・メソッドは非推奨であり、将来のリリースで削除される予定です。 代わりに、.atolと.rtolの属性値をクラスに設定する必要があります。 例:from qiskit.quantum_info import ScalarOp ScalarOp.atol = 3e-5 op = ScalarOp(2) -
からの対話型プロット関数は廃止されました。
qiskit.visualizationiplot_bloch_multivector,iplot_state_city,iplot_state_qsphere,iplot_state_hinton,iplot_histogram,iplot_state_paulivecは非推奨となり、将来のリリースで削除される予定です。 からの matplotlib ベースの等価関数。qiskit.visualization,plot_bloch_multivector(),plot_state_city(),plot_state_qsphere(),plot_state_hinton()plot_state_histogram(), およびplot_state_paulivec()を代わりに使うべきである。 -
パルス命令のプロパティ
acquires、mem_slots、reg_slotsは非推奨であり、将来のリリースで削除される予定である。qiskit.pulse.instructions.Acquirepulse命令のプロパティは非推奨となり、将来のリリースで削除される予定です。 の重複である。channel,mem_slotとreg_slotの重複に過ぎない。Acquire命令は削除された。 -
の
SamplePulseクラスはqiskit.pulseはWaveform.SamplePulseは非推奨であり、将来のリリースで削除される予定です。 -
スタイル辞書のキー
cregbundleは非推奨となり、将来のリリースで削除される予定です。 に追加されたkwargcregbundleに置き換えられている。qiskit.visualization.circuit_drawer()関数とQuantumCircuitメソッドdraw().
バグ修正
-
その
qiskit.circuit.QuantumCircuitメソッドnum_nonlocal_gatesは、以前はマルチ量子ビットqiskit.circuit.Instructionオブジェクト(例えばBarrier)を非局所ゲートの数に含めていた。 これは修正され、非局所的なオブジェクトのみがカウントされるようになった。Gateオブジェクトのみがカウントされるように修正されました。 #4500を修正 -
ControlledGatectrl_stateのインスタンスは、比較されたゲートが等価であっても、等しいと評価されない場合があった。 この問題は、 #4573 の修正により解決されました -
または
qiskit.circuit.QuantumRegisterまたはqiskit.circuit.ClassicalRegister<https://numpy.org/doc/stable/user/basics.types.html> からインデックスでビットにアクセスするとき、以前はCircuitError例外が発生した。 この問題は解決され、 Python の組み込みのint型に加えて numpy 型を使用できるようになった。 #3929 を修正。 -
で複数のアクワイアが同時に存在する場合、
qiskit.pulse.Acquireの最初のqiskit.pulse.configuration.Kernelまたはqiskit.pulse.configuration.Discriminatorだけが使用されるバグが修正されました。qiskit.pulse.Schedule. -
qiskit.pulse.SetFrequencyオブジェクトを作成する際に使用されるSI単位はHzだが、 インスタンスからオブジェクトを作成する際にはGHzに変換する必要がある。PulseQobjInstructionオブジェクトがSetFrequencyインスタンスから作成される場合、GHzに変換する必要がある。 この変換は以前のリリースにはありませんでしたが、修正されました。 -
以前は、制御量子ビットの数をゼロに設定することが可能だったが、その場合、元の、潜在的に制御されていない演算が返される。 オブジェクトだけが持つ属性にアクセスしようとすると、
AttributeError。ControlledGateオブジェクトだけが持つ属性にアクセスしようとすると、。 のゲッターとセッターを追加することで修正された。num_ctrl_qubitsのゲッターとセッターを追加することで修正しました。 4576を修正 -
オープン・コントロールは
Gateオブジェクトdefinition. しかし、ゲートがすでに基底セットに存在する場合、この定義は使用されず、その結果、トランパイル後にバックエンドに誤った回路が送られることになった。 この問題は、Unroller、制御されたゲートが開いている場合にその定義を使用するように修正された。 4437を修正 -
クラスの
insert_barriersキーワード引数は、実際にはハダマード層と進化層の間にバリアを挿入しなかった。ZZFeatureMapクラスのキーワード引数は、実際にはハダマード層と進化層の間にバリアを挿入しなかった。 バリアが適切に挿入されるように修正された。 -
3つ以上の量子ビットを持ついくつかのゲートが、特定の場合にコンパイルに失敗する問題を修正しました。 詳しくは「#4577」をご参照ください。
-
の matplotlib (
'mpl') 出力バックエンド。qiskit.circuit.QuantumCircuitメソッドdraw()とqiskit.visualization.circuit_drawer()関数の出力バックエンドは、kwargscaleが設定されると適切にスケーリングされませんでした。 フォントと線幅が画像の他の部分と一緒に拡大縮小されなかった。 これは修正され、回路図のすべての要素が適切に拡大縮小されるようになりました。 例:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.draw(output='mpl', scale=0.5)#4179 を修正。
-
を初期化または進化させる際の問題を修正しました。
qiskit.quantum_info.Statevectorとqiskit.quantum_info.DensityMatrixBarrierクラスを初期化または進化させると例外が発生する問題を修正しました。 修正 #4461 -
以前は
QuantumCircuitが古典的条件を持つGateにoptimization_level=3を使ったり、 で を上げたりすると、トランスパイラが失敗することがあった。transpile()を使うか、execute()UnboundLocalErrorを上げると、トランスパイラが失敗することがあった。 これはConsolidateBlocksパスを更新することで修正された。 4672を修正。 -
長いゲート名やレジスタ名がオーバーフローしてしまったり、
'mpl'出力バックエンドのqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数の出力バックエンドを使用する際に この問題は、プロポーショナル・フォントの正しいテキスト幅を使用することで修正されました。 4611 、#4605 、#4545 、#4497 、#4449 、#3641 を修正。 -
style` kwarg on the :meth:`qiskit.circuit.QuantumCircuit.draw` or :func:`qiskit.visualization.circuit_drawer` with the ``'mpl'出力バックエンドを使用する際、辞書キー'showindex'をTrueに設定すると、列の先頭のインデックス番号が正しく並びませんでした。 現在では、修正されています。 -
cregbunde=True、'mpl'出力バックエンドでqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数の出力バックエンドで使用し、2つ目のフォールドを測定する場合、測定矢印はcregカウントを上書きします。 これを防ぐため、カウントは左に移された。 #4148 を修正。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数CSwapGateゲートと制御されたRZZGateゲートがボックスではなく、適切なシンボルで表示されるようになりました。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数の出力バックエンドを使用するとto_gate()メソッドを使用して作成されたゲートは、適切な間隔がとれず、回路図の他のゲートと重なる可能性がありました。 この問題は修正された。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()HamiltonianGateのような、配列をパラメータとする関数ゲートが、周囲に過剰なスペースがある状態で表示されることはなくなりました。 #4352を修正。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数を直接インスタンス化することで作成されるジェネリックゲートqiskit.circuit.Gateメソッドを直接インスタンス化することによって作成されたジェネリックゲートは、ゲートの適切な背景色を表示するようになりました。 4496を修正。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数にIsometryまたはInitializeを使用した場合に発生していたAttributeErrorが修正されました。 4439を修正。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数の出力バックエンドを使用した場合、一部のオープン制御ゲートはオープン制御を正しく表示しませんでした。 開いているコントロールが開いている円として正しく表示されるように修正されました。 4248を修正。 -
'mpl'、出力バックエンドにqiskit.circuit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数のfoldkwargを -1 に設定すると、折り返しのない回路が正しく表示されるようになります。 4506を修正。 -
qiskit.pulse.library.discreteからのパラメトリック・パルスは、デフォルトでパラメトリック・パルスの両端がゼロになるようになった。 終点は、関数 に対して となるように定義される。修正 #4317
その他の注意事項
- これまで
qiskit.result.Resultこれまでmarshmallowライブラリを使用して構築されていたクラスは、marshmallowに依存しないようにリファクタリングされました。 この新しい実装はシームレスに移行できるはずですが、以前はマシュマロから継承されていた特定の動作が機能しない場合があります。 非互換性が見つかった場合は、問題を提起してください。
エア 0.6.1
前奏曲
この 0.6.0 リリースでは、Aer プロバイダー内のすべてのシミュレーターのパフォーマンスが大幅に改善され、ソースからビルドする際のビルドシステムが大幅に変更されました。 主な変更点は、SIMDベクトル化のサポート、結合次元切断による行列積状態法の近似、より効率的なパウリ期待値計算、C++結果オブジェクトの Python 変換の大幅な効率化である。 ビルド・システムがアップグレードされ、ソースからビルドする際にコナンを使用して一般的なC++依存関係を管理するようになった。
新機能
-
QasmSimulator の "statevector "と "statevector_gpu "メソッドに密度行列スナップショットのサポートを追加。
-
すべての量子ビットだけでなく、特定の量子ビットの密度行列スナップショットを許可する。 これにより、残りの量子ビットに対する状態の部分トレースが計算される。
-
qiskit.providers.aer.QasmSimulatorの "density_matrix "シミュレーションメソッドにパウリ期待値スナップショットサポートを追加。qiskit.providers.aer.extensions.SnapshotExpectationValue拡張機能を使って回路にスナップショットを追加する。 -
qiskit.providers.aer.QasmSimulatorの "statevector"、"statevector_gpu"、"density_matrix"、"density_matrix_gpu "シミュレーション手法のパウリ期待値スナップショット・アルゴリズムのパフォーマンスが大幅に向上。 -
qiskit.providers.aer.StatevectorSimulatorとqiskit.providers.aer.UnitarySimulatorの両方のバックエンドで、qiskit.providers.aer.QasmSimulatorからゲート融合回路の最適化を有効にする。 -
シミュレーターの結果における平均スナップショットデータのパフォーマンスを改善。 これは、確率、パウリ期待値、密度行列のスナップショットに以下のような効果をもたらします:
qiskit.providers.aer.extensions.SnapshotExpectationValueqiskit.providers.aer.extensions.SnapshotProbabilitiesqiskit.providers.aer.extensions.SnapshotDensityMatrix
-
C++行列クラスの移動コンストラクタの追加とメモリ使用量の改善により、シミュレータの出力を結果に移動する際の行列のコピーを最小限に抑えます。
-
ユニタリーシミュレーターの性能向上
-
MPSの結合次元を制限するために、
QasmSimulatorの "matrix_product_state "シミュレーション方法に近似を追加。近似には2つのモードがある。 どちらもSVDアルゴリズムに従って最小のシュミット係数を破棄する。 近似の程度を制御する2つのパラメータがある:
"matrix_product_state_max_bond_dimension"(int):svd アルゴリズムの最後に保持されるシュミット係数の数の制限を設定します。 この制限を超えた係数は破棄される。 (デフォルト:なし、すなわちボンド次元の制限なし)。"matrix_product_state_truncation_threshold"(倍):平方和がこの閾値より小さい最小の係数を破棄する。 (デフォルト: 1e-16 )。 -
matrix_product_state "
QasmSimulator、メジャー・サンプリングのパフォーマンスを改善した。 -
qiskit.providers.aer.PulseSimulatorにDelay、Phase、SetPhaseパルス命令のサポートを追加。 -
RHS関数への呼び出しをキャッシュすることにより、
qiskit.providers.aer.PulseSimulatorのパフォーマンスを向上させる -
qiskit.providers.aer.PulseSimulatorのbackend_optionsで指定可能な代替DE解決法を紹介する。 -
ムーブ・セマンティクスを使用し、別々の実験の結果を最終的な結果オブジェクトに結合する際に発生していた不要なコピーを削除することで、シミュレータの結果クラスのパフォーマンスを改善。
-
可能な限りmoveセマンティクスを使用し、ベクトルや行列の結果をコピーせずにNumpy配列に移動することで、シミュレータ結果の pybind11 変換のパフォーマンスを大幅に改善。
-
シミュレータのRNGエンジンを32ビットのメルセンヌ・ツイスターエンジンから64ビットのメルセンヌ・ツイスターエンジンに変更。
-
AVX2 命令セットをサポートするシステムで SIMD イントリニックを使用することにより、
qiskit.providers.aer.QasmSimulatorおよびqiskit.providers.aer.StatevectorSimulatorの「ステートベクトル」シミュレーション手法のパフォーマンスが向上します。 AVX2 サポートは自動的に検出され、実行時に有効になる。
アップグレードの注意
-
Conan パッケージ・マネージャーを使用するようにビルド・システムを変更する。 このツールは、C++ソースコードが必要とする依存関係のほとんどを処理する。 コナンのローカルリポジトリに必要なパッケージがない場合、ダウンロードするために、最初のビルド時や依存関係の追加・更新時にインターネット接続が必要になる場合があります。
qiskit-aerのスタンドアロン版をビルドする際には、まずconanをインストールしなければならない:
pip install conan -
C++ コントローラ・クラスでのトランスピレーション・パスの処理方法が変更され、各パスを明示的に呼び出す必要があります。 これにより、各パスをいつ、どのようなパラメーターで呼び出すかを、より細かくカスタマイズすることができる。 特に、 QasmController のシミュレーション手法に応じて、ゲート融合最適化パスのパラメータを異なるものに設定することができます。
-
qiskit.providers.aer.noise.NoiseModel.from_device()にgate_length_unitskwarg を追加し、内部コードの単位変換を処理するために、デバイス・ノイズ・モデル関数でカスタムgate_lengthsを指定できるようにした。 -
スタビライザーシミュレーターのメソッドがサポートするゲートセットにControlled-Y("cy")ゲートを追加。
-
Aerのバックエンドで、terraからの入力qobjオブジェクトのjsonschemaバリデーションが、デフォルトで有効になっていた代わりに、オプトインになった。 qobjのjsonschemaバリデーションを有効にしたい場合は、バックエンドオブジェクトの
qiskit.providers.aer.QasmSimualtor.run()メソッドのvalidatekwargをTrue。 -
シミュレータがサポートする命令、ゲート、スナップショットの検証を容易にするために、 OpSet オブジェクトを基本シミュレータ State クラスに追加します。
-
OpSet クラスをリファクタリング。 OpSet を別のヘッダー・ファイルに移動し、
std::set::containsとstd::algorithm::set_differenceに基づいて、containsとdifferenceのメソッドを追加した。 これらは、 OpSet, から削除された無効と有効の指示に代わるものだが、順序は逆になっている。 これは、他のopsetにないopset命令ではなく、現在のopsetにない他のopsetのリストを返す。 -
測定サンプリングの最適化のチェック方法を改善。 この高価な演算は、回路構築時に1回だけ行われるようになり、シミュレーション時にメモリ要件、シミュレーション方法、最終的な実行をチェックする際に何度も行われることがなくなった。
バグ修正
-
自動的に選択されるシミュレーション方法から "extended_stabilizer "を削除。 これは、拡張スタビライザー法が厳密ではなく、ユーザーがその構成パラメーターを最適化する方法を知らない限り、特定の回路に対して誤った結果を与える可能性があるため、必要なことである。
自動メソッドは、"stabilizer"、"density_matrix"、"statevector "メソッドからのみ選択されるようになった。 statevectorメソッドに対して大きすぎる非クリフォード回路が実行された場合、例外が発生し、代わりに "extended_stabilizer "または "matrix_product_state "メソッドを明示的に使用してみることを提案する。
-
マトリックス積の状態シミュレーション手法のゲート・フュージョンを無効にしました。
-
qiskit.providers.aer.PulseSimulatorでチャンネル評価が正しく行われないバグを修正。 -
qiskit.providers.aer.pulse.system_models.hamiltonian_model.HamiltonianModelクラスのハミルトニアン解析のエッジケースに関するいくつかのマイナーなバグを修正。
イグニス 0.4.0
前奏曲
このリリースの主な変更点は、Terraから更新されたCliffordクラスを統合するために、Randomized Benchmarkingコードをリファクタリングしたことです。 qiskit.quantum_info.Clifford を統合し、CNOT-Dihedralクラスを改良したことです。
新機能
qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()関数は、更新されたCliffordクラスCliffordを使うようにリファクタリングされ、2qubit以上のClifford配列で効率的なランダム化ベンチマーク(RB)ができるようになりました。 さらに、CNOT-Dihedralクラスqiskit.ignis.verification.randomized_benchmarking.CNOTDihedral、numpyの配列を使用し、すべての2量子ビット群要素を保存する事前に生成されたpickleファイルを使用しないことで、より効率的になるようにコードをリファクタリングしました。qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()関数には新たにkwargrand_seedが追加され、RB回路の生成に使用する乱数発生器のシードを指定できるようになった。 これは、再現性のある回路を持つのに便利である。qiskit.ignis.verification.qv_circuits()関数には新たに kwargseedが追加され、量子ボリューム回路の生成に使用する乱数発生器のシードを指定するのに使用できる。 これは、再現性のある回路を持つのに便利である。
アップグレードの注意
qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()関数は、クリフォード・クラスCliffordと更新されたCNOT-Dihedralクラスqiskit.ignis.verification.randomized_benchmarking.CNOTDihedralを使って出力を構築するようになりました。 その結果、前バージョンの出力とは微妙な違いが生じる可能性がある。- 新しい要件 scikit-learn が要件リストに追加されました。 この依存関係は 0.3.0 リリースで追加されたが、そのリリースでは依存関係として適切に公開されていなかった。 これは、
qiskit.ignis.measurement.discriminator.iq_discriminatorsモジュールがインポートされた場合、ImportErrorにつながる。 これは、scikit-learnがqiskit-ignisと一緒にインストールされるように、依存関係として正しくリストされるようになりました。 qiskit.ignis.verification.qv_circuits()関数は、回路をゼロから構築する代わりに、回路ライブラリ・クラスQuantumVolumeを使うようになった。 その結果、前バージョンの出力とは微妙な違いが生じる可能性がある。- 課題#320で要望されたように、トモグラフィのフィッターは、単一の結果ではなく、結果オブジェクトのリストを取得できるようになりました。
非推奨のメモ
-
qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()関数の kwarginterleaved_gatesは非推奨となり、将来のリリースで削除される予定です。interleaved_elemに取って代わられている。 ヘルパー関数qiskit.ignis.verification.randomized_benchmarking.BasicUtils、qiskit.ignis.verification.randomized_benchmarking.CliffordUtils、qiskit.ignis.verification.randomized_benchmarking.DihedralUtilsは非推奨となった。 これらのクラスは、RBに必要なグループ操作を処理するqiskit.ignis.verification.randomized_benchmarking.RBgroup。 このクラスは、qiskit.ignis.verification.randomized_benchmarking.Cliffordに取って代わられる。Clifford. -
qiskit.ignis.verification.qv_circuits()関数の kwargsqrとcrは非推奨となり、将来のリリースで削除される予定です。 を指定するために使用されると文書化されている。qiskit.circuit.QuantumRegisterとqiskit.circuit.ClassicalRegisterを指定するために使われるものとして文書化されていた。 しかし、実際にパラメータが尊重されることはなく、パラメータが設定されているか否かにかかわらず、常に新しいレジスタが作成された。 この動作に変更はなく、これらのkwargsは依然として何の影響も及ぼさないが、どちらかを設定していたかもしれないユーザーへの変更を避けるため、削除される前に非推奨となる。 -
qiskit.ignis.verification.qv_circuits()関数のqubit_listsパラメーターにリストとして量子ビットのサブセットを渡すサポートは非推奨となり、将来のリリースで削除される予定です。 以前は、これはデバイス上で回路を実行するためのレイアウトを指定するために使用されていた。 言い換えれば、5量子ビットのデバイスを持っていて、そのデバイスの量子ビット1、3、4で2量子ビットのQV回路を動作させたいとします。qubit_listsのリストの1つとして[1, 3, 4]を渡すと、5量子ビットの仮想回路が生成され、その仮想回路内の量子ビット1、3、4にqvが適用される。 しかし、この機能は必要ではなく、トランスパイラのinitial_layout、回路がレイアウトセットで埋め込まれているかどうかの概念と重複する。 その代わりにtranspile()またはexecute()、初期レイアウトを設定して実行する。 例えば、上記の例を実行するとこうなる:from qiskit import execute from qiskit.ignis.verification import qv_circuits initial_layout = [1, 3, 4] qv_circs, _ = qv_circuits([list(range3)]) execute(qv_circuits, initial_layout=initial_layout)
バグ修正
- py:func:qiskit.ignis.characterization.calibrations.pulse_schedules.drag_schedules によって挿入される測定パルスの位置に関するバグを修正した。 465番を修正
アクア 0.7.5
新機能
- ADMMOptimizerのCPLEXへのソフト的な依存を削除。 ADMMOptimizerで使用されるデフォルトのオプティマイザは、QUBO問題用の MinimumEigenOptimizer、連続オプティマイザとして SlsqpOptimizer。 ADMMOptimizerのオプティマイザーとして CplexOptimizer。
- 新しいヤフー ファイナンス・プロバイダーが誕生した。
- コンバーターの抽象クラスである
QuadraticProgramConverterを導入。encode/decodeの代わりにconvert/interpretのコンバーター用メソッドを追加した。QuadraticProgramクラスにto_isingとfrom_isingを追加。nameを除くすべてのパラメーターをconvertからコンストラクターに移動した。 コンバーター・パラメーター用のセッター/ゲッターを作成。auto_define_penaltyとinterpretfor``LinearEqualityToPenalty`` を追加。コンバーターのエラーメッセージがより分かりやすくなりました。 - 対応する SciPy 最適化メソッドのラッパーとして SLSQP オプティマイザ
qiskit.optimization.algorithms.SlsqpOptimizerを追加。 これは古典的なオプティマイザーで、量子アルゴリズムに依存せず、CobylaOptimizerの代わりとして使用することができる。 - Cobylaオプティマイザーは、SLSQPオプティマイザーに導入されたマルチスタート機能に対応するように変更されました。 デフォルトでは、オプティマイザーはマルチスタート・モードでは実行されません。
SummedOpは、X + X == 2*XやX + Z == Z + Xのような式がTrueと評価されるような、数学的により正しい等式チェックを行う。
非推奨のメモ
- GSLS オプティマイザー・クラスは
__init__パラメーターmax_iterを廃止し、maxiterを採用した。 SPSA オプティマイザー・クラスは__init__パラメーターmax_trialsを廃止し、maxiterを採用した。 optimize_svm関数はmax_itersパラメータを廃止し、maxiterに変更した。 ADMMParameters クラスは__init__パラメータmax_iterを非推奨とし、maxiterを採用した。 - ising変換クラス
qiskit.optimization.converters.QuadraticProgramToIsingとqiskit.optimization.converters.IsingToQuadraticProgramは非推奨となり、将来のリリースで削除される予定です。 代わりにqiskit.optimization.QuadraticProgramメソッドto_ising()とfrom_ising()を使うべきである。 qiskit.optimization.QuadraticProgramのpprint_as_stringメソッドは非推奨となり、将来のリリースで削除される予定です。 その代わりに、.pprint_as_string()。to_docplex()qiskit.optimization.QuadraticProgramのprettyprintメソッドは非推奨となり、将来のリリースで削除される予定です。 その代わりに、.prettyprint()。to_docplex()
バグ修正
- python version 3.8: macOS, で spawn start メソッドがデフォルトに変更されました。 fork startメソッドは、サブプロセスのクラッシュにつながる可能性があるため、安全でないと考えるべきである。 しかし、PFGSはspawnをサポートしていないので、シングルプロセスに戻す。 詳細は#1109 <https://github.com/qiskit-community/qiskit-aqua/issues/1109> を参照。
CircuitStateFnのバインディング・パラメーターはis_measurementの値をコピーせず、常にis_measurement=Falseを設定していた。 現在では、修正されています。- 以前は、 SummedOp.to_matrix_opはリスト MatrixOp’s (with numpy matrices)を構築し、それらを合計して単一の MatrixOp を返していた。 アルゴリズムによっては(例えばvqe)、何千もの行列を合計する必要があり、行列のリストを構築する際にメモリを使い果たしてしまう。 この変更により、リストは作成されない。 そうではなく、和の各オペランドは行列に変換され、アキュムレータに加算され、捨てられる。
- VQEでバックエンドをstatevectorからqasm_simulatorまたは実デバイスに変更すると、 CircuitSampler 互換性のない再利用によりエラーが発生していた。 VQEは、ユーザーによって入力されなかった場合、常に新しい CircuitSampler、新しい期待値を作成するように変更された。 詳細は#1153 <https://github.com/qiskit-community/qiskit-aqua/issues/1153> を参照。
- ExchangeとWikipediaのファイナンスプロバイダーがQuandlのデータを正しく扱えるように修正されました。 詳細は#775 <https://github.com/qiskit-community/qiskit-aqua/issues/775> を参照。 ファイナンス・プロバイダーの平均ベクトルと共分散行列の計算で0による除算のエラーが修正されました。 詳細は#781 <https://github.com/qiskit-community/qiskit-aqua/issues/781> を参照。
ListOp.combo_fnプロパティは、別の演算子タイプへの変換、トラバース、リデュース、乗算など、いくつかの変換で失われている。 これで、この属性は結果の演算子に伝搬される。SummedOp``s and evaluations with the ``CircuitSamplerのようないくつかの演算子式の評価で、係数が正しく扱われなかったり、完全に無視されたりした。 E.g.~StateFn(0 * (I + Z)) @ Plusを評価しても0にならないか、~StateFn(I) @ ((Plus + Minus) / sqrt(2))の正規化でsqrt(2)のファクターを見逃している。 現在では、修正されています。OptimizationResultいくつかのパブリック・セッターとクラス変数がOptionalに含まれている。 この修正は、mypyとpylintがより効果的に型をチェックできるように、すべてのクラス変数を読み取り専用にします。MinimumEigenOptimizer.solve生成されたビット列は、strとして結果に含まれる。 この修正により、他のアルゴリズムと同じように結果がList[float]。qiskit.optimization.algorithmsのドキュメントには、最適化アルゴリズムに関連するパブリック・クラスがいくつか見当たらない。 この修正により、そのようなクラスがすべてdocstringに追加された。詳細は#1131 <https://github.com/qiskit-community/qiskit-aqua/issues/1131> を参照されたい。OptimizationResult.__init__は、xとvariablesのサイズが一致するかどうかをチェックしなかった(一致するはずだ)。 今回の修正では、両者が一致しない場合にエラーを発生させるチェックを追加し、チェックによって検出されたバグを修正した。 この修正により、test_convertersのOptimizationResult.variable_namesとOptimizationResult.variables_dictに関連するユニットテストも追加された。詳しくは#1167 <https://github.com/qiskit-community/qiskit-aqua/issues/1167> を参照されたい。OperatorStateFnのパラメータバインディングを修正。プリミティブのパラメータをバインディングせず、係数だけをバインディングしていた。op.eval(other)ここでopはOperatorBaseのタイプである。opとotherの量子ビットの数が等しくない場合、無言で無意味な値を返すことがある。 この修正により、正しい動作となる。この場合、入力が無効であるため、値を返すのではなく、エラーを投げることになる。VQEのconstruct_circuitメソッドは、以前はOperatorBase型として評価される期待値を返していた。 この機能はconstruct_expectationに移され、construct_circuitは期待値を計算するために評価される回路のリストを返す。
IBM Q プロバイダー 0.8.0
新機能
IBMQBackend新しいreservations()メソッドが追加され、バックエンドの予約情報を返すようになりました。 さらに、provider.backends.my_reservations()、ご自身で予約照会ができるようになりました。qiskit.providers.ibmq.job.IBMQJob.result()ジョブが失敗した場合、IBMQJobFailureError例外を発生させる。 ジョブ全体が単一の理由で失敗した場合、例外メッセージにはジョブが失敗した理由が含まれるようになりました。- 新しい属性
client_versionがIBMQJobに追加された。qiskit.result.Resultオブジェクトがqiskit.providers.ibmq.job.IBMQJob.result()経由で検索されるようになった。client_versionは辞書で、キーは名前、値はQiskitのようなジョブ投入に使われたクライアントのバージョンです。 least_busy()関数は、新たにオプションのパラメータreservation_lookaheadを取るようになった。 指定された場合、またはデフォルトで指定された場合、バックエンドは、次のn分に予約がある場合、利用できないとみなされる。ここで、nは、reservation_lookaheadの値である。 例えば、デフォルト値の60が使用されている場合、今後60分以内に予約のあるバックエンドはすべて使用不可とみなされる。ManagedResultscombine_results()このメソッドは、すべての管理対象ジョブの結果を結合し、単一のResultオブジェクトを返します。 このResultオブジェクトは、例えばqiskit-ignisフィッターメソッドで使用することができる。
アップグレードの注意
-
以下のフィールドのタイムスタンプがUTCではなくローカルタイムになりました:
qiskit.providers.ibmq.IBMQBackend.properties()によって返されるバックエンドのプロパティ。qiskit.providers.ibmq.job.IBMQJob.properties()によって返されるバックエンドのプロパティ。estimated_start_timeとQueueInfoのestimated_complete_timeは、qiskit.providers.ibmq.job.IBMQJob.queue_info()によって返される。dateである。Resultで、qiskit.providers.ibmq.job.IBMQJob.result()によって返される。
さらに、
qiskit.providers.ibmq.IBMQBackend.properties()のdatetimeパラメーターも、UTCタイムゾーン情報がない限り、ローカルタイムであることが期待される。 -
websockets8.0 Python 3.7 以上を使用する場合は上記が必要になった。websockets7.0 Python 3.6 以下の場合は引き続き使用する。 -
Windowsでは、イベント・ループ・ポリシーは、デフォルトの
WindowsProactorEventLoopPolicyを使用する代わりに、WindowsSelectorEventLoopPolicyに設定されます。 これにより、Windows上でqiskit.providers.ibmq.job.IBMQJob.result()メソッドがハングすることがあった問題が修正された。 修正番号691
非推奨のメモ
- IBM Quantum Experience の資格情報を保存するために
Qconfig.pyを使用することは非推奨であり、次のリリースで削除される予定です。 代わりにqiskitrc(デフォルト)を使うべきだ。
バグ修正
- 返されるジョブの数が多い場合、
qiskit.providers.ibmq.IBMQBackend.jobs()への呼び出しがハングすることがある問題を修正しました。 修正 #674 - オフラインのバックエンドに対してJupyterでエラーマップを構築する際に
ValueError。 706を修正 qiskit.providers.ibmq.IBMQBackend.jobs()は、statuskwarg が'RUNNING'に設定されている場合、IBMQJobオブジェクトの正しいリストを返すようになりました。- パッケージメタデータが更新され、
qiskit-terra>= 0.14.0 への依存が適切に反映されました。 この依存関係は 0.7.0 リリースの一部として暗黙のうちに追加されましたが、パッケージ要件に反映されていなかったため、以前は古すぎるqiskit-terraのバージョンでqiskit-ibmq-providerをインストールすることが可能でした。 677番を修正