Qiskit 0.7 リリースノート
0.7
Qiskit 0.7 では Qiskit Aer を導入し、Qiskit Terra と組み合わせました。
Terra 0.7
新機能
このリリースには、いくつかの新機能と多くのバグ修正が含まれています。 このリリースで、回路図、ヒストグラム、ブロッホ・ベクトル、および状態の可視化のインターフェイスが安定したことが宣言された。 さらに、今回のリリースでは、Qiskitのすべての側面において、定義され標準化されたビット順序/エンディアンが含まれています。 これらはすべてこのリリースで安定したインターフェイスとして宣言されており、今後の変更について適切で長い非推奨期間の警告がない限り、将来にわたって破壊的な変更が加えられることはない。
また、以下の新機能も導入された:
- 新しいアスキーアート回路図出力モード
circuit.draw()、print(circuit)の呼び出しで回路の描画を可能にする、QuantumCircuitオブジェクトからの新しい回路描画インターフェイス- 回路のDAG表現を描画するビジュアライザー
- ローカルなmatplotlibベースの状態プロットにおけるヒントン図のための新しい量子状態プロットタイプ
QuantumCircuitクラスの新しいコンストラクタ・メソッド2つfrom_qasm_str()とfrom_qasm_file()により、回路オブジェクトを簡単に作成できる。 OpenQASM- テンサードされた状態ベクトルまたは密度行列からブロッホ・ベクトルをプロットする新関数
plot_bloch_multivector() - ショットごとの測定結果は、シミュレーターや一部のデバイスで利用可能です。 これらは、
compile()またはexecute()を呼び出す際に、memorykwarg をTrueに設定し、Resultオブジェクトのget_memory()メソッドを使用してアクセスできる。 qiskit.quantum_info、量子状態を扱うためのパウリ・オブジェクトとメソッドが刷新されたモジュール- 回路解析と変換のための新しいトランスパイルパス:
CommutationAnalysisCommutationTransformation,CXCancellation,Decompose,Unroll,Optimize1QGates,CheckMap,CXDirection、BarrierBeforeFinalMeasurements - トランスパイラに新しいスワップマッパーの代替パスが追加された:
BasicSwapLookaheadSwap、StochasticSwap - 分析パス、変換パス、パス・マネージャのグローバル
property_set、パスのリピート・アンティル制御をサポートする、より高度なトランスパイラ・インフラストラクチャ
互換性に関する考慮事項
0.7 リリースの一環として、以下のものが非推奨となり、将来のリリースでは削除されるか、後方互換性のない形で変更される予定です。 厳密には必要ではないが、これらは次のリリースの前に調整することで、壊れるような変更を避けることができる。
plot_circuit()qiskit.tools.visualization の、、 は非推奨。latex_circuit_drawer()generate_latex_source()matplotlib_circuit_drawer()代わりに、同じモジュールのcircuit_drawer()関数を使うべきである。すべての非推奨関数の機能をミラーリングするkwargオプションがある。- 現在のデフォルト出力である
circuit_drawer()(latexを使用し、pythonにフォールバックする)は非推奨であり、今後のリリースではデフォルトでtextの出力を使用するように変更される予定です。 qiskit.wrapper.load_qasm_string()とqiskit.wrapper.load_qasm_file()関数は非推奨であり、代わりにQuantumCircuit.from_qasm_str()とQuantumCircuit.from_qasm_file()のコンストラクタ・メソッドを使用すべきである。stylekwarg辞書のplot_barriersとreverse_bitsキーは非推奨であり、代わりにqiskit.tools.visualization.circuit_drawer()kwargsplot_barriersとreverse_bitsを使用すべきである。plot_state()、iplot_state()。 代わりに、plot_state_*()とiplot_state_*()関数を、必要な可視化メソッドに対して呼び出す必要がある。skip_transpiler引数はcompile()とexecute()から廃止された。 その代わりに、PassManagerを直接使用することができます。pass_managerを空白のPassManagerオブジェクトに設定するには、次のようにします。PassManager()transpile_dag()関数formatkwarg を使ってさまざまな出力フォーマットを出力することは非推奨である。代わりに、デフォルトの出力DAGCircuitオブジェクトを希望のフォーマットに変換する必要がある。- アンローラーは非推奨となり、今後はDAGからDAGへのアンローリングのみがサポートされる。
このリリースでは、いくつかの後方互換性のある変更が加えられていることにご注意ください。 以下のノートには、これらの変更に対応するための情報が記載されている。
Resultオブジェクトの変更
結果オブジェクトをより一貫性のある安定したインターフェースに書き換える一環として、結果オブジェクトに格納されたデータへのアクセス方法にいくつかの変更が加えられた。 まず、 get_data() メソッドの名前が変更され、 data() となった。 この変更に伴い、関数が返すデータ形式も変更される。 後処理をする代わりに、バックエンドから生データを返すようになった。 例えば、以前のバージョンでは、こう呼ぶことができた:
result = execute(circuit, backend).result()
unitary = result.get_data()['unitary']
print(unitary)のようなユニタリー行列を返す:
[[1+0j, 0+0.5j], [0-0.5j][-1+0j]]しかし今、(名前の変更されたメソッドで)呼び出すと:
result.data()['unitary']のようなものが返される:
[[[1, 0], [0, -0.5]], [[0, -0.5], [-1, 0]]]ポスト処理結果を 0.7 リリース前と同じフォーマットで取得するには、結果オブジェクトの get_counts()、 get_statevector()、 get_unitary() メソッドを、それぞれ get_data()['counts']、 get_data()['statevector']、 get_data()['unitary'] の代わりに使用する必要があります。
さらに、 len() 、 Result オブジェクトに対するインデックスのサポートは削除された。 その代わりに、Resultオブジェクトの後処理メソッドからの出力を処理する必要がある。
また、 Result クラスから get_snapshot() と get_snapshots() メソッドが削除された。 代わりに、 Result.data()['snapshots'] を使ってスナップショットにアクセスすることができる。
可視化の変更
0.7 リリースでビジュアライゼーションに加えられた最大の変更点は、 Matplotlib とその他のビジュアライゼーションの依存関係をプロジェクト要件から削除したことである。 これは、Qiskitのインストールに必要な要件と設定を簡素化するために行われた。 text、 latex、 latex_source 以外の可視化(すべてのjupyterマジックを含む)をサーキットドロワーに使用する場合は、可視化の依存関係がインストールされていることを手動で確認する必要があります。 そのためにQiskit Terraパッケージのオプション要件を活用することができます:
pip install qiskit-terra[visualization]これとは別に、安定化の一環としていくつかのインターフェイスに変更が加えられており、既存のコードに影響を与える可能性がある。 一つ目は、 circuit_drawer() 関数の basis kwarg が受け付けられなくなったこと。 回路図を描く際に使用する基底ゲートの調整を circuit_drawer() に頼っていた場合、 circuit_drawer() を呼び出す前にこの作業を行う必要がある。 例:
from qiskit.tools import visualization
visualization.circuit_drawer(circuit, basis_gates='x,U,CX')になるように調整しなければならない:
from qiskit import BasicAer
from qiskit import transpiler
from qiskit.tools import visualization
backend = BasicAer.backend('qasm_simulator')
draw_circ = transpiler.transpile(circuit, backend, basis_gates='x,U,CX')
visualization.circuit_drawer(draw_circ)今後は、 circuit_drawer() 機能が、可視化モジュールにおける回路描画の唯一のインターフェイスとなる。 0.7 リリース以前には、異なる出力バックエンドを使用したり、回路を描画するための出力を変更したりする他の関数がいくつかあった。 しかし、それ以外の機能はすべて非推奨となり、その機能は circuit_drawer() のオプションとして統合された。
その他の可視化機能、 plot_histogram() と plot_state() についても、アップグレード時に確認すべき変更がいくつかあります。 第一に、これらの関数からの出力が変更された。以前のリリースでは、これらの関数は出力をインタラクティブに視覚化して表示していた。 しかし、その代わりに matplotlib.Figure オブジェクトを返すように変更された。 これにより、ビジュアライゼーションを保存または表示する前に、ビジュアライゼーションを操作するための柔軟性とオプションが大幅に向上します。 そのためには、これらの機能の消費方法を調整する必要がある。 例えば、このリリース以前は、電話をかけるときに
plot_histogram(counts)
plot_state(rho)は、可視化を表示するために新しいウィンドウ(matplotlibバックエンドに依存)を開きます。 しかし、 0.7、この動作を反映させるために、出力に対して show() 。 例:
plot_histogram(counts).show()
plot_state(rho).show()または:
hist_fig = plot_histogram(counts)
state_fig = plot_state(rho)
hist_fig.show()
state_fig.show()これはJupyterの外で実行する場合のみであることに注意してください。 Jupyterノートブックは、 matplotlib.Figure オブジェクトのレンダリング方法をネイティブに理解しているため、Jupyter環境内での調整は必要ない。
しかし、Figureオブジェクトを返すことで、出力を扱うための柔軟性が増す。 例えば、単に図を表示するだけでなく、 savefig() メソッドを活用して直接ファイルに保存できるようになりました。 例:
hist_fig = plot_histogram(counts)
state_fig = plot_state(rho)
hist_fig.savefig('histogram.png')
state_fig.savefig('state_plot.png')これらの関数で変わったもう一つの重要な点は、jupyterで実行する場合である。 0.6 リリース plot_state() と plot_histogram() では、jupyter で実行する場合、視覚化をレンダリングするために外部でホストされている Javascript ライブラリにネットワーク経由で到達可能な場合、デフォルトの動作としてインタラクティブな Javascript プロットが使用されました。 そうでなければ、matplotlibのバージョンを使うだけだ。 しかし、 0.7 リリースでは、このようなことはなくなり、代わりにインタラクティブなプロット用の別個の関数、 iplot_state() と iplot_histogram() が使用されるようになりました。 plot_state() と plot_histogram() 、常にmatplotlibバージョンを使用する。
さらに、このリリースから、 plot_state() 関数は非推奨となり、量子状態をプロットする方法ごとに個別のメソッドを呼び出すようになりました。 plot_state() 関数は 0.9 がリリースされるまで機能し続けるが、使用されるたびに警告が発せられる。 この
キスキット・テラ 0.6 | Qiskit Terra 0.7 + |
|---|---|
| plot_state(rho) | plot_state_city(rho) |
| plot_state(rho, method='city') | plot_state_city(rho) |
| plot_state(rho, method='paulivec') | plot_state_paulivec(rho) |
| plot_state(rho, method='qsphere') | plot_state_qsphere(rho) |
| plot_state(rho, method='bloch') | plot_bloch_multivector(rho) |
| plot_state(rho, method='hinton') | plot_state_hinton(rho) |
インタラクティブなJSに相当する iplot_state()。 関数名はすべて同じで、各関数の前にiがつくだけである。 例えば、 iplot_state(rho, method='paulivec') は iplot_state_paulivec(rho)。
バックエンドの変更
0.7 リリースでの改良に伴い、アップグレードの際に注意すべきバックエンドに関することがいくつかあります。 最大の変更点は、 qiskit` ネームスペースのルートにおけるプロバイダー・インスタンスの再構築である。 Aer プロバイダーはデフォルトではインストールされておらず、 qiskit-aer パッケージのインストールが必要です。 このパッケージには、新しい高性能フル機能シミュレータが含まれています。 pip install qiskit 経由でインストールした場合は、すでにインストールされているはずだ。 pythonシミュレーターは qiskit.BasicAer 、古いC++シミュレーターは qiskit.LegacySimulators。 これは、C++シミュレータが見つからない場合に、暗黙のうちにpythonベースのシミュレータにフォールバックしていたのが、存在しなくなったことも意味します。 もし、ローカルのC++ベースのシミュレータバックエンドを要求し、それが見つからない場合、例外が発生します。
さらに、これまで非推奨だったトップレベル関数 register() と available_backends() が削除された。 また、非推奨の backend.parameters() と backend.calibration() メソッドが削除され、 backend.properties() が採用された。 これらの変更の詳細については、 0.6 リリースノートの「 バックエンドとの連携 」を参照してください。
backend.jobs() と backend.retrieve_jobs() の呼び出しは、これらのジョブからの結果を返さなくなった。 その代わりに、返されたジョブ・オブジェクトに対して result() メソッドを呼び出す必要があります。
コンパイラ、トランスパイラ、およびアンローラの変更
コンパイラー・インターフェースを安定させる努力の一環として、コンパイラー機能を利用する際に注意すべきいくつかの変更があった。 まず重要なのは、 qiskit.transpiler.transpile() 関数が、 QuantumCircuit オブジェクト(またはそのリスト)を受け取り、 QuantumCircuit オブジェクト(またはそのリスト)を返すようになったことである。 DAG処理は現在、内部で行われている。
また、 qiskit.converters の関数を使えば、回路、DAG、Qobjを簡単に切り替えることができます。
エア 0.1
新機能
アエルは3つのシミュレーターバックエンドを提供する:
QasmSimulator実験と測定結果を返すシミュレーションStatevectorSimulatorゼロの状態に作用する量子回路の最終的な状態ベクトルを返すUnitarySimulator量子回路のユニタリー行列を返します
noise モジュール:以下のような高度なノイズモデリング機能が含まれています。 QasmSimulator
NoiseModel,QuantumError,ReadoutError誤差がある場合のQiskit量子回路のシミュレーションのためのクラスerrorsサブモジュールには、以下のタイプの量子エラーについてQuantumErrorオブジェクトを生成する関数が含まれています:クラウス、混合ユニタリー、コヒーレントユニタリー、パウリ、脱分極、熱緩和、振幅減衰、位相減衰、位相と振幅の複合減衰deviceデバイスのBackendPropertiesに基づいてノイズモデルを自動生成するサブモジュール
utils モジュールである:
qobj_utilsは、Qiskit Terra APIではまだサポートされていない特別なシミュレータ命令を挿入するために、Qobjを直接修正するための関数を提供します。
アクア 0.4
新機能
-
アルゴリズムとコンポーネントのためのプログラム的API - 各コンポーネントは、単一の(空でない)コンストラクタ呼び出しによってインスタンス化および初期化できるようになりました
-
QuantumInstanceアルゴリズムとバックエンドを切り離すためのAPI -QuantumInstanceはバックエンドとその設定をカプセル化する -
新しいプログラムAPIを説明するドキュメントとJupyter Notebooksの更新
-
勾配ベース最適化器の透過的並列化
-
マルチコントロール-NOT(cnx)オペレーション
-
プラグ可能なアルゴリズム・コンポーネント
RandomDistribution -
RandomDistributionの具体的な実装:BernoulliDistributionLogNormalDistribution,MultivariateDistribution,MultivariateNormalDistribution,MultivariateUniformDistribution,NormalDistribution,UniformDistribution, およびUnivariateDistribution -
UncertaintyProblemの具体的な実装:FixedIncomeExpectedValueEuropeanCallExpectedValueEuropeanCallDelta -
振幅推定アルゴリズム
-
Qiskit 最適化:最適化問題のための新しいイジングモデル 厳密被覆、集合パッキング、頂点被覆、閥、グラフ分割
-
Qiskit AI:
FeatureMapプラガブル・インターフェースを拡張する新しいフィーチャーマップ:PauliExpansionとPauliZExpansion- トレーニングモデルのシリアライズ/デシリアライズ機構
-
Qiskitファイナンス
- ベルヌーイ確率変数の振幅推定:単一量子ビット問題における振幅推定の例示
- 複数の一変量および多変量ランダム分布のロード
- ヨーロピアン・コール・オプション:期待値とデルタ(一変量分布を使用)
- 債券資産のプライシング:期待値(多変量分布の使用)
-
Operatorクラスのパウリ・ストリングはテラ 0.7 と並んでいる。 現在、n-qubit pauli文字列の順序はq_{n-1}...q{0}である。したがって、Operatorクラスの(デ)シリア(save_to_dictとload_from_dict)も、Pauliクラスの変更を採用するように変更される。
互換性に関する考慮事項
HartreeFockプラガブルタイプのコンポーネントInitialStateが Qiskit Chemistry に移動したUCCSDプラガブルタイプのコンポーネントVariationalFormが Qiskit Chemistry に移動した