Qiskit 0.15 リリースノート
0.15.0
Terra 0.12.0
前奏曲
0.12.0 リリースにはいくつかの新機能とバグ修正が含まれている。 今回のリリースの最大の変更点は、パラメトリック・パルスのサポートが OpenPulse に追加されたことだ。 これらはパルス・コマンドで、パルスを記述するためにサンプル・ポイントではなくパラメータを取る。 0.12.0 Python 3.8 をサポートする最初のリリースでもある。 また、 Python 3.5 サポートの非推奨化の始まりでもある。アップストリームコミュニティがサポートを停止した時点で削除される。
新機能
-
パス
qiskit.transpiler.passes.CSPLayoutには2つの新しいパラメーターが追加された:call_limitとtime_limit。 これらのオプションにより、パスの実行時間を制限することができる。call_limitオプションは、バックトラック・ソルバーの再帰関数を呼び出す回数を制限する。 同様に、time_limit、ソルバーの実行時間(秒)を制限する。 デフォルトはそれぞれ1000コールと10秒。 -
qiskit.pulse.Acquireが単一の量子ビットに適用できるようになった。 これにより、すべての操作が単一のチャンネルに適用されるため、パルス・プログラミングの一貫性が増し、理屈が簡単になる。 例:acquire = Acquire(duration=10) schedule = Schedule() schedule.insert(60, acquire(AcquireChannel(0), MemorySlot(0), RegisterSlot(0))) schedule.insert(60, acquire(AcquireChannel(1), MemorySlot(1), RegisterSlot(1))) -
新しいメソッド
qiskit.transpiler.CouplingMap.draw()が追加された。qiskit.transpiler.CouplingMapに新しいメソッドが追加された。 例:from qiskit.transpiler import CouplingMap coupling_map = CouplingMap( [[0, 1], [1, 0], [1, 2], [1, 3], [2, 1], [3, 1], [3, 4], [4, 3]]) coupling_map.draw() -
OpenPulse にパラメトリック・パルスが追加された。 これらはバックエンドによってパラメータ化され、理解されるパルスコマンドである。 任意のパルス形状は、 SamplePulse コマンドでもサポートされている。 新たにサポートされたパルスクラスは以下の通り:
qiskit.pulse.ConstantPulseqiskit.pulse.Dragqiskit.pulse.Gaussianqiskit.pulse.GaussianSquare
他のパルスコマンドと同様に使用できる。 以下に例を示します:
from qiskit.pulse import (Schedule, Gaussian, Drag, ConstantPulse, GaussianSquare) sched = Schedule(name='parametric_demo') sched += Gaussian(duration=25, sigma=4, amp=0.5j)(DriveChannel(0)) sched += Drag(duration=25, amp=0.1, sigma=5, beta=4)(DriveChannel(1)) sched += ConstantPulse(duration=25, amp=0.3+0.1j)(DriveChannel(1)) sched += GaussianSquare(duration=1500, amp=0.2, sigma=8, width=140)(MeasureChannel(0)) << sched.duration出来上がったスケジュールは、
qiskit.pulse.pulse_libを使って構築された SamplePulse スケジュールに似ているが、波形のサンプリングはバックエンドによって実行される。 この方法はqiskit.pulse.Schedule.draw()は通常通り使用できる。 しかし、コマンドはqiskit.pulse.ParametricPulse.get_sample_pulse()メソッドでSamplePulseに変換されるため、表示されるパルスはバックエンドがサンプリングするのと同じように連続関数をサンプリングしない可能性がある。この機能を使えば、どのバックエンドでもパルス・プログラムを作成できるが、バックエンドがパラメトリック・パルスをサポートしていない場合、パルスは
SamplePulseオブジェクトに変換される。 これらをサポートするバックエンドは、以下の新しい属性を持つことになる:backend.configuration().parametric_pulses: List[str] # e.g. ['gaussian', 'drag', 'constant']バックエンドはQiskitで定義されたパラメトリックパルスをすべてサポートする必要はないことに注意してください。
バックエンドがパラメトリックパルスをサポートし、パルススケジュールがそれらでビルドされる場合、アセンブルされるQobjはかなり小さくなる。 パラメトリック・パルスのみで構築された PulseQobj のサイズは、命令数にのみ依存する。一方、それ以外の方法で構築された PulseQobj のサイズは、(すべてのサンプルに値を指定しなければならないため)命令時間と共に大きくなる。
-
qiskit.scheduler モジュールにユーティリティ関数
qiskit.scheduler.measure()とqiskit.scheduler.measure_all()を追加。 これらの関数はqiskit.pulse.ScheduleOpenPulse オブジェクトを返します。 例:from qiskit.scheduler import measure, measure_all measure_q0_schedule = measure(qubits=[0], backend=backend) measure_all_schedule = measure_all(backend) measure_custom_schedule = measure(qubits=[0], inst_map=backend.defaults().instruction_schedule_map, meas_map=[[0]], qubit_mem_slots={0: 1}) -
パルス
qiskit.pulse.Scheduleオブジェクトの表現が改善され、単純なスケジュールであれば、 Python 式が有効になるはずだ。 -
その
qiskit.circuit.QuantumCircuitメソッドqiskit.circuit.QuantumCircuit.measure_active(),qiskit.circuit.QuantumCircuit.measure_all()そしてqiskit.circuit.QuantumCircuit.remove_final_measurements()は、inplace。inplaceをFalseに設定すると、この関数は回路の修正コピーを返す。 これは、回路オブジェクトをインプレースで変更し、何も返さないデフォルトの動作とは異なる。 -
いくつかの新しいコンストラクタ・メソッドが
qiskit.transpiler.CouplingMapクラスにいくつかの新しいコンストラクタ・メソッドが追加されました。 新しいコンストラクタのメソッドは以下の通り:例えば、新しいコンストラクタを使って、5個の量子ビットを線形に連結したカップリング・マップを得るには、次のようにします:
from qiskit.transpiler import CouplingMap coupling_map = CouplingMap.from_line(5) coupling_map.draw() -
新しいパスを導入
qiskit.transpiler.passes.CrosstalkAdaptiveSchedule. このパスは、クロストーク・ノイズが番組に与える影響を軽減することを目的としている。 これは、バックエンドからのクロストーク特性データを使用してゲートをスケジューリングする。 ゲートのペアが高いクロストークを持つ場合、バリアを使って直列化される。 ナイーブな直列化は、デコヒーレンス・エラーを引き起こすので有害である。 したがって、このパスでは、クロストークとデコヒーレンス・エラーの影響を最小化するスケジュールを計算するために、SMT最適化アプローチを使用する。つまり、回路は物理量子ビットで表現され、スワップゲートが挿入され、必要に応じてCNOTに分解されている。 この回路とクロストーク特性データを用いて、 Z3 最適化を行い、出力として新しい予定回路を構築する。
サーキット・サーキットでパスを使用する:
dag = circuit_to_dag(circ) pass_ = CrosstalkAdaptiveSchedule(backend_prop, crosstalk_prop) scheduled_dag = pass_.run(dag) scheduled_circ = dag_to_circuit(scheduled_dag)backend_propはqiskit.providers.models.BackendPropertiesオブジェクトです。crosstalk_propは条件付きエラーレートを指定するディクトである。 2つのゲートg1とg2、crosstalk_prop[g1][g2]は、g1とg2が同時に実行されたときのg1の条件付きエラー率を指定する。crosstalk_propを生成する方法は、qiskit-ignisの将来のリリースで追加される予定です。 それまでは、自分のデバイスのクロストーク特性をすでに知っているか、手作業でデバイスの特性評価実験を書かなければならない。 -
最適化レベル1のプリセット・パス・マネージャーで
qiskit.transpiler.preset_passmanagers.level_1_pass_manager()もしqiskit.transpiler.passes.TrivialLayoutレイアウトパスが特定の回路に完全にマッチしない場合、代わりにqiskit.transpiler.passes.DenseLayoutを代わりに使用します。 -
新しい抽象メソッド
qiskit.quantum_info.Operator.dot()BaseOperatorを含む、その抽象クラスのすべての実装に含まれる。qiskit.quantum_info.OperatorおよびQuantumChannel(例、qiskit.quantum_info.Choi) オブジェクトに含まれるようになりました。 このメソッドは、右演算子乗算a.dot(b)を返す。これは演算子qiskit.quantum_info.Operator.compose()frontTrueメソッドを呼び出すのと同じです。 -
追加
qiskit.quantum_info.average_gate_fidelity()とqiskit.quantum_info.gate_error()関数をqiskit.quantum_infoモジュールが追加された。qiskit.quantum_info.OperatorとQuantumChannel(例えばqiskit.quantum_info.Choi)オブジェクトを扱えるようにした。 -
を追加した。
qiskit.quantum_info.partial_trace()関数をqiskit.quantum_infoで動作するqiskit.quantum_info.Statevectorとqiskit.quantum_info.DensityMatrix量子状態クラス 例:from qiskit.quantum_info.states import Statevector from qiskit.quantum_info.states import DensityMatrix from qiskit.quantum_info.states import partial_trace psi = Statevector.from_label('10+') partial_trace(psi, [0, 1]) rho = DensityMatrix.from_label('10+') partial_trace(rho, [0, 1]) -
いつ
qiskit.circuit.QuantumCircuit.draw()またはqiskit.visualization.circuit_drawer()がwith_layoutkwargをTrue(デフォルト)に設定して呼び出された場合、出力の可視化は物理量子ビットを整数として表示し、仮想量子ビットと明確に区別するようになります。例:
from qiskit import QuantumCircuit from qiskit import transpile from qiskit.test.mock import FakeVigo qc = QuantumCircuit(3) qc.h(0) qc.cx(0, 1) qc.cx(0, 2) transpiled_qc = transpile(qc, FakeVigo()) transpiled_qc.draw(output='mpl') -
新しい状態測定関数を
qiskit.quantum_infoモジュールに追加した:qiskit.quantum_info.entropy(),qiskit.quantum_info.mutual_information(),qiskit.quantum_info.concurrence()そしてqiskit.quantum_info.entanglement_of_formation(). これらの関数はqiskit.quantum_info.Statevectorクラスとqiskit.quantum_info.DensityMatrixクラスで動作します。 -
の単一量子ビットゲートの分解法は、Z,X,Z軸の3回転を特徴とする の基底も含むように拡張された。
qiskit.quantum_info.synthesis.one_qubit_decompose.OneQubitEulerDecomposerの単一量子ビットゲートの分解法が拡張され、Z,X,Z軸の3回転を特徴とする'ZXZ'基底も含まれるようになった。 このことは、一般的な 2x2 演算子は以下のベースに分解できることを意味する:U3U1X,ZYZ,ZXZ,XYX,ZXZ.
既知の問題
-
を使用する関数を実行する。
qiskit.tools.parallel_map()(例えばqiskit.execute.execute()、qiskit.compiler.transpile()およびqiskit.transpiler.PassManager.run()Python 3.8 MacOS を使用した関数の実行は、if __name__ == '__main__':ブロックの外側で実行されているスクリプトから呼び出された場合、動作しないことがあります。 その他の環境ではこの問題は発生しない。 これは、 MacOS の Python 3.8 による並列プロセスの起動方法が変更されたためである。parallel_map()を直接呼び出しているスクリプトや、 Python 3.8 MacOS で内部的に使用している関数を呼び出すときにRuntimeErrorやAttributeErrorが発生する場合は、スクリプトの呼び出しをif __name__ == '__main__':内に埋め込むことで、問題を回避できるはずです。 例:from qiskit import QuantumCircuit, QiskitError from qiskit import execute, BasicAer qc1 = QuantumCircuit(2, 2) qc1.h(0) qc1.cx(0, 1) qc1.measure([0,1], [0,1]) # making another circuit: superpositions qc2 = QuantumCircuit(2, 2) qc2.h([0,1]) qc2.measure([0,1], [0,1]) execute([qc1, qc2], BasicAer.get_backend('qasm_simulator'))この照会は、次のように変更する必要があります。
from qiskit import QuantumCircuit, QiskitError from qiskit import execute, BasicAer def main(): qc1 = QuantumCircuit(2, 2) qc1.h(0) qc1.cx(0, 1) qc1.measure([0,1], [0,1]) # making another circuit: superpositions qc2 = QuantumCircuit(2, 2) qc2.h([0,1]) qc2.measure([0,1], [0,1]) execute([qc1, qc2], BasicAer.get_backend('qasm_simulator')) if __name__ == '__main__': main()Python 3.8 MacOS でエラーが発生した場合。
アップグレードの注意
-
Pulseバックエンドの設定オブジェクトの
rep_timeパラメータの値が、マイクロ秒ではなく秒単位になりました。PulseBackendConfigurationオブジェクトが最初に初期化されたとき、そのことを示す警告がユーザーに発せられる。 -
の引数
rep_time。qiskit.compiler.assemble()の引数は、マイクロ秒単位ではなく秒単位になった。 これは、他のすべてをパルスにしたユニットを作るために行われた。rep_timeに値を渡していた場合は、この変更を考慮して値を更新してください。 -
オブジェクトの
base_gateプロパティの値がqiskit.circuit.ControlledGateオブジェクトのプロパティの値が、ベース・ゲートのクラスからベース・ゲートのクラスのインスタンスに変更されました。 -
の
base_gate_nameプロパティは削除された。qiskit.circuit.ControlledGateオブジェクトのbase_gate.nameにアクセスすることで、ベースゲートの名前を得ることができます。 例:from qiskit import QuantumCircuit from qiskit.extensions import HGate qc = QuantumCircuit(3) cch_gate = HGate().control(2) base_gate_name = cch_gate.base_gate.name -
変更点
qiskit.quantum_info.Operatorマジックメソッドを変更し、__mul__(これは python の乗算演算で実行されます。演算の左手が定義されている場合) が右行列の乗算 (つまりqiskit.quantum_info.Operator.dot()), と__rmul__(左側に__mul__が定義されていない場合、pythonの乗算演算によって右側から実行される)はスカラー倍算を実装している(つまりqiskit.quantum_info.Operator.multiply())。 以前はどちらの方法もスカラー倍算を実装していた。 -
関数の第2引数
qiskit.quantum_info.process_fidelity()関数の第2引数、targetはオプションになった。 ターゲット・ユニタリーが指定されない場合は、入力チャネルのプロセス・フィデリティが、 アイデンティティ演算子とともに返される。 -
qiskit.compiler.assemble()はバックエンドに設定されたmax_shotsの値を尊重するようになりました。shotskwargにバックエンドの設定で設定された最大ショットを超える値が指定された場合、この関数はQiskitError例外が発生するようになりました。 さらに、shots引数が与えられない場合、デフォルト値は1024(以前の動作)またはバックエンドからのmax_shots、いずれか低い方となる。
非推奨のメモ
-
にゲートを追加するメソッドは、キーワード引数が省略されている。
qiskit.circuit.QuantumCircuitにゲートを追加するメソッドで、キーワード引数が省略されたもの(例:ctl、tgt)は、キーワード引数の名前が変更され、よりわかりやすくなりました(例:control_qubit、target_qubit)。古い名前は廃止されました。QuantumCircuitメソッドの新旧呼び出しシグネチャを含む表を以下に示す。指示タイプ旧署名新しい署名qiskit.extensions.HGateqc.h(q)qc.h(qubit)qiskit.extensions.CHGateqc.ch(ctl, tgt)qc.ch((control_qubit, target_qubit))qiskit.extensions.IdGateqc.iden(q)qc.iden(qubit)qiskit.extensions.RGateqc.iden(q)qc.iden(qubit)qiskit.extensions.RGateqc.r(theta, phi, q)qc.r(theta, phi, qubit)qiskit.extensions.RXGateqc.rx(theta, q)qc.rx(theta, qubit)qiskit.extensions.CrxGateqc.crx(theta, ctl, tgt)qc.crx(theta, control_qubit, target_qubit)qiskit.extensions.RYGateqc.ry(theta, q)qc.ry(theta, qubit)qiskit.extensions.CryGateqc.cry(theta, ctl, tgt)qc.cry(theta, control_qubit, target_qubit)qiskit.extensions.RZGateqc.rz(phi, q)qc.rz(phi, qubit)qiskit.extensions.CrzGateqc.crz(theta, ctl, tgt)qc.crz(theta, control_qubit, target_qubit)qiskit.extensions.SGateqc.s(q)qc.s(qubit)qiskit.extensions.SdgGateqc.sdg(q)qc.sdg(qubit)qiskit.extensions.FredkinGateqc.cswap(ctl, tgt1, tgt2)qc.cswap(control_qubit, target_qubit1, target_qubit2)qiskit.extensions.TGateqc.t(q)qc.t(qubit)qiskit.extensions.TdgGateqc.tdg(q)qc.tdg(qubit)qiskit.extensions.U1Gateqc.u1(theta, q)qc.u1(theta, qubit)qiskit.extensions.Cu1Gateqc.cu1(theta, ctl, tgt)qc.cu1(theta, control_qubit, target_qubit)qiskit.extensions.U2Gateqc.u2(phi, lam, q)qc.u2(phi, lam, qubit)qiskit.extensions.U3Gateqc.u3(theta, phi, lam, q)qc.u3(theta, phi, lam, qubit)qiskit.extensions.Cu3Gateqc.cu3(theta, phi, lam, ctl, tgt)qc.cu3(theta, phi, lam, control_qubit, target_qubit)qiskit.extensions.XGateqc.x(q)qc.x(qubit)qiskit.extensions.CnotGateqc.cx(ctl, tgt)qc.cx(control_qubit, target_qubit)qiskit.extensions.ToffoliGateqc.ccx(ctl1, ctl2, tgt)qc.ccx(control_qubit1, control_qubit2, target_qubit)qiskit.extensions.YGateqc.y(q)qc.y(qubit)qiskit.extensions.CyGateqc.cy(ctl, tgt)qc.cy(control_qubit, target_qubit)qiskit.extensions.ZGateqc.z(q)qc.z(qubit)qiskit.extensions.CzGateqc.cz(ctl, tgt)qc.cz(control_qubit, target_qubit) -
複数の量子ビットで
qiskit.pulse.Acquireを実行することは非推奨であり、将来のリリースで削除される予定です。 さらに、qiskit.pulse.AcquireInstructionのパラメータmem_slotsとreg_slotsは廃止された。 代わりにreg_slot、mem_slot。 -
の属性は廃止されました。
qiskit.providers.models.PulseDefaultsクラスcircuit_instruction_mapの属性は非推奨となり、将来のリリースでは削除される予定です。 代わりに、新しい属性instruction_schedule_mapを使用する必要があります。 これは、属性値の型(InstructionScheduleMap)に合わせるためである。 -
qiskit.pulse.PersistentValueコマンドは非推奨であり、将来のリリースで削除される予定である。 同様の機能は、qiskit.pulse.ConstantPulseコマンド(新しいパラメトリック・パルスのひとつ)でも実現できる。 以下を見比べてほしい:from qiskit.pulse import Schedule, PersistentValue, ConstantPulse, \ DriveChannel # deprecated implementation sched_w_pv = Schedule() sched_w_pv += PersistentValue(value=0.5)(DriveChannel(0)) sched_w_pv += PersistentValue(value=0)(DriveChannel(0)) << 10 # preferred implementation sched_w_const = Schedule() sched_w_const += ConstantPulse(duration=10, amp=0.5)(DriveChannel(0)) -
Python 3.5 のサポートは非推奨です。 サポートは、アップストリームの Python コミュニティのバージョン終了日(2020/09/13)後の最初のリリースで削除される。
-
の
require_cptpkwarg は非推奨。qiskit.quantum_info.process_fidelity()関数のkwargは非推奨となり、将来のリリースで削除される予定です。require_cpとrequire_tpの2つの独立したkwargsに取って代わられている。 -
の
scaleパラメータを設定する。qiskit.circuit.QuantumCircuit.draw()とqiskit.visualization.circuit_drawer()を最初の位置引数として設定することは非推奨であり、将来のリリースでは削除される予定です。 その代わりに、キーワード引数としてscale。 -
qiskit.tools.qi.qiモジュールは非推奨であり、将来のリリースで削除される予定である。 モジュール内のレガシー関数は、すべてモジュール内の関数とクラスに取って代わられた。qiskit.quantum_infoモジュールに取って代わられました。 非推奨関数とその代替関数の表は以下の通り:非推奨置換qiskit.tools.partial_trace()qiskit.quantum_info.partial_trace()qiskit.tools.choi_to_pauli()qiskit.quantum_info.Choiそしてquantum_info.PTMqiskit.tools.chop()numpy.roundqiskit.tools.qi.qi.outernumpy.outerqiskit.tools.concurrence()qiskit.quantum_info.concurrence()qiskit.tools.shannon_entropy()qiskit.quantum_info.shannon_entropy()qiskit.tools.entropy()qiskit.quantum_info.entropy()qiskit.tools.mutual_information()qiskit.quantum_info.mutual_information()qiskit.tools.entanglement_of_formation()qiskit.quantum_info.entanglement_of_formation()qiskit.tools.is_pos_def()quantum_info.operators.predicates.is_positive_semidefinite_matrix -
qiskit.quantum_info.states.statesモジュールは非推奨であり、将来のリリースで削除される予定である。 モジュール内のレガシー関数は、すべてモジュール内の関数とクラスに取って代わられた。qiskit.quantum_infoモジュールに取って代わられました。非推奨置換qiskit.quantum_info.states.states.basis_stateqiskit.quantum_info.Statevector.from_label()qiskit.quantum_info.states.states.projectorqiskit.quantum_info.DensityMatrix -
ScheduleおよびPulseオブジェクトのdraw()メソッドのscalingパラメーターは非推奨となり、将来のリリースで削除される予定です。 代わりに、新しいscaleパラメータを使うべきである。 これは、パルス図と回路図に一貫性を持たせるためである。 例:#The consistency in parameters is seen below #For circuits circuit = QuantumCircuit() circuit.draw(scale=0.2) #For pulses pulse = SamplePulse() pulse.draw(scale=0.2) #For schedules schedule = Schedule() schedule.draw(scale=0.2)
バグ修正
- 以前は
qiskit.circuit.QuantumCircuit.bind_parameters()を回路を分解する前に呼び出すと、分解されたゲートに境界値が正しく代入されませんでした。 これは、結合と分解がどのような順序で起きてもよいように解決されている。 問題#2482と 問題#3509を修正 Collect2qBlocks、既存のブロック内にゲートを設けるかどうかを決定する際、これまでは古典的な条件を考慮していなかった。 その結果、optimization_level=3でトランスパイルする際に、古典的なコンディションが失われてしまうケースもあった。 これは、古典的な条件付きゲートがブロックに含まれないように解決された。 問題#3215を修正- の回路引き出しの出力タイプはすべて
qiskit.circuit.QuantumCircuit.draw()およびqiskit.visualization.circuit_drawer()のすべての出力タイプは、描画制御されたカスタムゲートのための固定および/または改良されたサポートを持っています。 問題#3546、 問題#3763、および問題#3764を修正 - のドキュメントに説明と例が追加されました。
qiskit.circuit.QuantumCircuitメソッドに説明と例が追加された:qiskit.circuit.QuantumCircuit.ccx(),qiskit.circuit.QuantumCircuit.ch(),qiskit.circuit.QuantumCircuit.crz(),qiskit.circuit.QuantumCircuit.cswap()qiskit.circuit.QuantumCircuit.cu1(),qiskit.circuit.QuantumCircuit.cu3()、qiskit.circuit.QuantumCircuit.cx(),qiskit.circuit.QuantumCircuit.cy(),qiskit.circuit.QuantumCircuit.cz(),qiskit.circuit.QuantumCircuit.h()qiskit.circuit.QuantumCircuit.iden()、qiskit.circuit.QuantumCircuit.rx(),qiskit.circuit.QuantumCircuit.ry(),qiskit.circuit.QuantumCircuit.rz(),qiskit.circuit.QuantumCircuit.s(),qiskit.circuit.QuantumCircuit.sdg(),qiskit.circuit.QuantumCircuit.swap(),qiskit.circuit.QuantumCircuit.t(),qiskit.circuit.QuantumCircuit.tdg()qiskit.circuit.QuantumCircuit.u1(),qiskit.circuit.QuantumCircuit.u2(),qiskit.circuit.QuantumCircuit.u3()、qiskit.circuit.QuantumCircuit.x(),qiskit.circuit.QuantumCircuit.y(),qiskit.circuit.QuantumCircuit.z(). 問題 #3400 を修正 - 回路可視化における複素数パラメータの取り扱いを修正。 問題 #3640 を修正
その他の注意事項
- ディレクトリのトランスパイラ・パスは、機能別に分類しやすいようにサブディレクトリに整理されました。
qiskit.transpiler.passesディレクトリのトランスパイラ・パスは、機能別に分類しやすいようにサブディレクトリに整理されています。 これらはまだすべて、qiskit.transpiler.passesネームスペースでアクセスできる。
エア 0.4.0
追加
- IBMQバックエンド用の基本的なデバイスノイズモデルを構築するための
NoiseModel.from_backendを追加しました(#569)QasmSimulator,StatevectorSimulator,UnitarySimulatorにマルチGPU対応シミュレーションメソッドを追加。 qasm シミュレータには、gpu 版の密度行列法と状態ベクトル法があり、backend_optionsの"method": "density_matrix_gpu"または"method": "statevector_gpu"を使ってアクセスできます。 ステートベクターシミュレーターgpuメソッドは、"method": "statevector_gpu"を使用してアクセスできます。 ユニタリーシミュレーターGPUメソッドは、"method": "unitary_gpu"を使ってアクセスできます。 これらのバックエンドはCUDAを使用し、NVidia GPUを必要とする(#544)PulseSimulatorバックエンドを追加 (#542)PulseSimulator(#496、#493)で使用されるモデルを表すPulseSystemModel、HamiltonianModelクラスを追加- パラメータリストから
PulseSystemModelオブジェクトを生成するduffing_model_generatorsを追加 (#516)- ODE関数ソルバーをC++に移行 (#442, #350)
- 高レベルパルスシミュレータテストを追加 (#379)
- CMakeのBLAS_LIB_PATHフラグでBLAS libを探すパスを設定 (#543)
変更
- シミュレータのソースコードを整理するため、
srcディレクトリの構造を変更。 シミュレータコントローラのヘッダはsrc/controllers、シミュレータメソッドのStateヘッダはsrc/simulators(#544) に移動しました- いくつかの関数の場所を移動しました(#568):*
qiskit.provider.aer.noise.errorsの内容をqiskit.providers.noiseモジュールに移動しました。qiskit.provider.aer.noise.utilsの内容をqiskit.provider.aer.utilsモジュールに移動しました。- 回路内の連続するゲートを集約(融合)する最適化をデフォルトで有効にした(#579)。
非推奨
- 非推奨の
utils.qobj_utils関数 (#568)- 非推奨
qiskit.providers.aer.noise.device.basic_device_noise_model. これはNoiseModel.from_backendメソッド (#569) に取って代わられた
削除済み
- 0.3 (#568) で非推奨となった
NoiseModel.as_dict,QuantumError.as_dict,ReadoutError.as_dict,QuantumError.kronメソッドを削除しました。
イグニス 0.2
変更なし
アクア 0.6
変更なし
IBM Q プロバイダー 0.4.6
追加
-
IBMQBackendにいくつかの新しいメソッドが追加された:wait_for_final_state()はジョブが終了するまでブロックする。 コールバック関数を受け取り、クエリごとに呼び出してフィードバックを提供する。active_jobs()バックエンドに送信されたジョブのうち、現在未完了のステータスのものを返します。job_limit()バックエンドのジョブ制限を返します。remaining_jobs_count()は、ジョブの上限に達するまでにバックエンドに送信できるジョブの数を返します。
-
QueueInfoに、キュー情報を整形した文字列を返す新しいメソッドformat()が追加されました。 -
IBMQJobの3つのメソッドが追加された:done()running()、cancelled()の3つのメソッドが追加された。 -
qiskit.providers.ibmq.ibmqbackend.IBMQBackend.run()オプションのjob_tagsパラメータを受け付けるようになった。 指定された場合、job_tagsはジョブに割り当てられ、後にqiskit.providers.ibmq.ibmqbackend.IBMQBackend.jobs()でフィルターとして使用できる。 -
IBMQJobManager新しいメソッドretrieve_job_set()が追加され、ジョブセットIDを使用して以前に送信されたジョブセットを取得できるようになりました。
変更
Exception、より専門的なクラスが追加された。 ただし、その親例外(IBMQAccountErrorなど)は引き続きキャッチできる。 また、例外クラスIBMQApiUrlErrorはIBMQAccountCredentialsInvalidUrlとIBMQAccountCredentialsInvalidTokenに置き換えられている。
非推奨
- プロトコルを指定しないプロキシURLの使用 (例:
http://) は、最近の Python の変更により非推奨となりました。