Qiskit 0.13 リリースノート
0.13.0
Terra 0.10.0
前奏曲
0.10.0 リリースにはいくつかの新機能とバグ修正が含まれている。 このリリースの最大の変更点は、Qiskitをトラップ型イオントラップ・バックエンドで使用するための初期サポートが追加されたことです。
新機能
-
QuantumCircuitに新しいメソッドを導入し、回路の末端での測定値のシームレスな追加や削除を可能にした。measure_all()回路内のすべての量子ビットに
barrier、続いてmeasure操作を加える。 回路内の量子ビット数に等しいサイズのClassicalRegister。measure_active()回路内のすべてのアクティブな量子ビットに
barrier、続いてmeasure操作を追加する。 量子ビットは、少なくとも1つの他の演算が作用していればアクティブである。 回路内のアクティブな量子ビットの数に等しいサイズのClassicalRegister。remove_final_measurements()回路からすべての最終測定値とその前の
barrierを削除する。 計測は、バリアや他の計測を除き、他の操作が続かない場合、"最終 "とみなされる。 測定値が取り除かれた後、ClassicalRegisterのクラシックビットがすべてアイドル(オペレーションが付加されていない)であれば、ClassicalRegister。例:
# Using measure_all() circuit = QuantumCircuit(2) circuit.h(0) circuit.measure_all() circuit.draw() # A ClassicalRegister with prefix measure was created. # It has 2 clbits because there are 2 qubits to measure ┌───┐ ░ ┌─┐ q_0: |0>┤ H ├─░─┤M├─── └───┘ ░ └╥┘┌─┐ q_1: |0>──────░──╫─┤M├ ░ ║ └╥┘ measure_0: 0 ═════════╩══╬═ ║ measure_1: 0 ════════════╩═ # Using measure_active() circuit = QuantumCircuit(2) circuit.h(0) circuit.measure_active() circuit.draw() # This ClassicalRegister only has 1 clbit because only 1 qubit is active ┌───┐ ░ ┌─┐ q_0: |0>┤ H ├─░─┤M├ └───┘ ░ └╥┘ q_1: |0>──────░──╫─ ░ ║ measure_0: 0 ═════════╩═ # Using remove_final_measurements() # Assuming circuit_all and circuit_active are the circuits from the measure_all and # measure_active examples above respectively circuit_all.remove_final_measurements() circuit_all.draw() # The ClassicalRegister is removed because, after the measurements were removed, # all of its clbits were idle ┌───┐ q_0: |0>┤ H ├ └───┘ q_1: |0>───── circuit_active.remove_final_measurements() circuit_active.draw() # This will result in the same circuit ┌───┐ q_0: |0>┤ H ├ └───┘ q_1: |0>───── -
イオントラップ・バックエンドでの実験実行の初期サポートが追加されました。
-
Rxxゲート(rxx)とグローバルMølmer-Sørensenゲート(ms)が標準ゲートセットに追加された。
-
CnotからRxx/Rx/Ryへのデコンポーザー
cnot_rxx_decompose、シングル量子ビットのオイラー角デコンポーザーOneQubitEulerDecomposer、quantum_info.synthesisモジュールに追加された。 -
U3、Cnotゲートで定義された回路をRxx,Ry,Rxで定義された回路に展開するトランスパイラパス
MSBasisDecomposer。 このパスは、サポートされる基本ゲートに「rxx」ゲートを含むバックエンドのプリセット・パスマネージャーに含まれる。 -
qiskit.test.mockのバックエンドには、実際のデバイス較正データのスナップショットが含まれるようになりました。 各バックエンドのproperties()。 これは、ノイズ適応トランスパイラパスやシミュレーション用デバイスノイズモデルなど、バックエンドプロパティに依存するあらゆるコードのテストに使用できる。 これにより、ライブ・バックエンドに行く必要なく、より迅速なテストと開発サイクルが実現する。 -
Result クラスが部分的な結果を返すことを許可します。 成功した実験と失敗した実験を含む有効な結果スキーマがロードされた場合、成功した実験からのデータへのアクセスを可能にする一方、失敗した実験に対しては例外を発生させ、失敗した結果に対して適切なエラーメッセージを表示する。
-
以下の可視化機能に
axkwarg が追加されました:qiskit.visualization.plot_histogramqiskit.visualization.plot_state_paulivecqiskit.visualization.plot_state_qsphereqiskit.visualization.circuit_drawer(mplバックエンドのみ)qiskit.QuantumCircuit.draw(mplバックエンドのみ)
このkwargは、
matplotlib.axes.Axesオブジェクトを可視化関数に渡すために使われます。 これにより、これらの視覚化機能をより大きな視覚化ワークフローに統合することができる。 また、ax kwargが指定された場合、可視化関数からの戻りはない。 -
以下の可視化機能に、
ax_realおよびax_imagkwarg が追加されました:qiskit.visualization.plot_state_hintonqiskit.visualization.plot_state_city
これらの新しいkargは、他の可視化関数に新しく追加された
axkwargと同じ働きをします。 しかし、これらのプロットは2つの軸(1つは実数成分用、もう1つは虚数成分用)を使っている。 また、2つのkwargsを持つことで、常に両方のビジュアライゼーションを行うのではなく、どちらか一方のコンポーネントのビジュアライゼーションのみを生成する柔軟性も提供する。 例:from matplotlib import pyplot as plt from qiskit.visualization import plot_state_hinton ax = plt.gca() plot_state_hinton(psi, ax_real=ax)は実コンポーネントのプロットのみを生成する。
-
指定したパス・マネージャーを新しいメソッドreplaceで編集できるようになった。 この方法は、パスマネージャー内の特定のステージを置き換えることができ、プリセットのパスマネージャーを扱うときに便利です。 例えば、最適化レベル0で使用されるパス・マネージャーのレイアウト・セレクターを編集してみましょう:
from qiskit.transpiler.preset_passmanagers.level0 import level_0_pass_manager from qiskit.transpiler.transpile_config import TranspileConfig pass_manager = level_0_pass_manager(TranspileConfig(coupling_map=CouplingMap([[0,1]]))) pass_manager.draw()[0] FlowLinear: SetLayout [1] Conditional: TrivialLayout [2] FlowLinear: FullAncillaAllocation, EnlargeWithAncilla, ApplyLayout [3] FlowLinear: Unrollerレイアウトの選択はステージ [1で]設定される。 と置き換えてみよう。 DenseLayout:
from qiskit.transpiler.passes import DenseLayout pass_manager.replace(1, DenseLayout(coupling_map), condition=lambda property_set: not property_set['layout']) pass_manager.draw()[0] FlowLinear: SetLayout [1] Conditional: DenseLayout [2] FlowLinear: FullAncillaAllocation, EnlargeWithAncilla, ApplyLayout [3] FlowLinear: Unroller無条件に置き換えたい場合は、set-itemショートカットを使うことができる:
pass_manager[1] = DenseLayout(coupling_map) pass_manager.draw()[0] FlowLinear: SetLayout [1] FlowLinear: DenseLayout [2] FlowLinear: FullAncillaAllocation, EnlargeWithAncilla, ApplyLayout [3] FlowLinear: Unroller -
新しいパルス・コマンドを導入
Delayパルスに挿入可能Schedule。 このコマンドはdurationを受け付け、任意のChannelに追加することができる。 ディレイの間、他のコマンドをチャンネルにスケジュールすることはできない。ディレイは他のパルス・コマンドと同様に追加できる。 例:
from qiskit import pulse from qiskit.pulse.utils import pad dc0 = pulse.DriveChannel(0) delay = pulse.Delay(1) test_pulse = pulse.SamplePulse([1.0]) sched = pulse.Schedule() sched += test_pulse(dc0).shift(1) # build padded schedule by hand ref_sched = delay(dc0) | sched # pad schedule padded_sched = pad(sched) assert padded_sched == ref_schedまた、パディングするチャンネルを追加したり、パディングする時間を指定したりすることもできる:
from qiskit import pulse from qiskit.pulse.utils import pad dc0 = pulse.DriveChannel(0) dc1 = pulse.DriveChannel(1) delay = pulse.Delay(1) test_pulse = pulse.SamplePulse([1.0]) sched = pulse.Schedule() sched += test_pulse(dc0).shift(1) # build padded schedule by hand ref_sched = delay(dc0) | delay(dc1) | sched # pad schedule across both channels until up until the first time step padded_sched = pad(sched, channels=[dc0, dc1], until=1) assert padded_sched == ref_sched
アップグレードの注意
-
qiskit.QuantumCircuitオブジェクトのdata属性への割り当てと変更は、QuantumCircuitAPI 全体で使用されているのと同じルールに従って検証されるようになった。 これは、data属性が既知のフォーマットであると仮定できるようになったため、回路APIのパフォーマンスを向上させるために行われた。 以前、回路オブジェクトのdata属性を手動で変更していた場合、その変更によって、コンテキストを持つ命令リスト以外のデータ構造が次のような形式になった場合、この方法は使えなくなる可能性がある。[(instruction, qargs, cargs)] -
トランスパイラの最適化レベル 2 用のデフォルトのパスマ ネージャが、
NoiseAdaptiveLayoutの代わりにDenseLayoutのレイアウト選択メカニズムをデフォルトで使用するようになりました。Denselayoutパスもノイズを考慮したものに変更されている。 -
非推奨の
DeviceSpecificationクラスは削除されました。 代わりに、PulseChannelSpec。 例えば、次のように実行できる:device = pulse.PulseChannelSpec.from_backend(backend) device.drives[0] # for DeviceSpecification, this was device.q[0].drive device.memoryslots # this was device.mem -
非推奨モジュール
qiskit.pulse.opsは削除されました。Schedule、Instructionメソッドを直接使う。 例えばops.union(schedule_0, schedule_1) ops.union(instruction, schedule) # etcその代わりに、以下のように使ってください:
schedule_0.union(schedule_1) instruction.union(schedule)これと同じパターンが、他の
ops関数にも当てはまる:insertshift、append、flatten。
非推奨のメモ
qiskit.circuit.Instructionのcontrolプロパティを古典的なコントロールに使用することは非推奨となりました。 将来的には、この特性は量子制御に利用されるだろう。 古典的な条件付き操作は、代わりにqiskit.circuit.Instructionのconditionプロパティで処理される。qiskit.qasm.node.Node型のオブジェクトでqiskit.circuit.Instructionパラメータを設定するサポートは廃止されました。Node以前にパラメータとして使われていたオブジェクトは、新しいInstructionオブジェクトを初期化する前、あるいはInstruction.paramsセッターを呼び出す前に、サポートされている型に変換する必要があります。 サポートされるタイプは、int、float、complex、str、qiskit.circuit.ParameterExpression、numpy.ndarray。- qiskit 0.9.0 リリースでは、ビット(量子ビットと古典ビットの両方)の表現が、
(register, index)形式のタプルから、qiskit.circuit.Qubitおよびqiskit.circuit.Clbitクラスのインスタンスに変更されました。 後方互換性のため、タプルからオブジェクトへの移行に伴い、レガシー・タプルとビット・クラスの等価比較がサポートされた。 このサポートは現在非推奨であり、将来的に削除される予定である。 今後はタプルの代わりにビットクラスを使うべきだ。 qiskit.QuantumCircuit.draw()、qiskit.visualization.circuit_drawer()のいずれかにmpl出力が使用され、stylekwarg が使用される場合、style`辞書の一部としてサポートされていない辞書キーを渡すことは非推奨となった。 これまではこれらの未知の引数は黙って無視されていたが、今後はサポートされていないキーは例外を発生させる。- テキスト出力モードの
qiskit.QuantumCircuit.draw()メソッドおよびqiskit.visualization.circuit_drawer()関数のline lengthkwarg は非推奨。 これは、foldkwargに置き換わりました。このkwargは、テキスト出力モードでは同じように動作します(しかし、mpl出力モードもサポートするようになりました)。line_length将来のリリースでは削除される予定なので、代わりにfold。 qiskit.QuantumCircuit.draw()メソッドとqiskit.visualization.circuit_drawer()関数のstyledict kwarg のfoldフィールドは非推奨となった。 両機能ともfoldkwarg に置き換えられている。 このクワーグはstyle dictのフィールドと同じように振る舞う。
バグ修正
- あらゆる種類の回路図の基礎となる命令レイヤーは、右/左のジャスティフィケーションに対応するように変更された。 その結果、トポロジー的には以前のバージョンのレンダリングと同等だが、視覚的には以前のレンダリングとは異なる出力が得られることがある。 問題 #2802 を修正
- パルスQobjの
QobjExperimentHeaderにmemory_slotsを追加する。 これは、meas_level=2パルス実験の結果のデータフォーマットのバグを修正したものである。 測定された量子状態は、memory_slotsに設定された数値に基づき、ゼロパディングされたビット列として返される。 - rzzゲートの対称性を反映させるため、ラテックス回路引き出しのrzzゲートの視覚化を修正し、 cu1 ゲートと一致するようにした。 この修正はqcircuit latexパッケージのcdsコマンドに基づいている。 問題 #1957 を修正
その他の注意事項
matplotlib.figure.Figure可視化関数から返されるオブジェクトは、デフォルトでは常に閉じられなくなりました。 その代わり、返される図オブジェクトは、設定されたmatplotlibバックエンドがインラインjupyterバックエンドである場合にのみクローズされます(%matplotlib inlineまたは%matplotlib notebookで設定)。 出力図オブジェクトは、jupyterノートブックでの出力の重複を避けるために、これらのバックエンドではまだ閉じられています(これが、Figure.close()が最初に追加された理由です)。
エア 0.3
変更なし
イグニス 0.2
変更なし
アクア 0.6
変更なし
IBM Q プロバイダー 0.3
変更なし