Qiskit 0.43 リリースノート
0.43.3
Terra 0.24.2
前奏曲
Qiskit Terra 0.24.2 はバグフィックスリリースで、 0.24.1 リリース以降に確認されたいくつかのマイナーな問題に対処しています。
アップグレードの注意
dump、QPYフォーマットのバージョンは8に増えた。 この新しいフォーマット・バージョンではQuantumCircuit.layout属性のシリアライズをサポートしています。
バグ修正
-
のデシリアライズを修正した。
DiagonalGateインスタンスのデシリアライズを修正しました。 修正 #10364 -
量子シャノン分解を行う
qs_decomposition()関数が、この分解の恩恵を受けない些細な数値ユニタリーに対して呼び出された場合に、予期しないエラーが発生する問題を修正しました。 このエラーは修正され、そのようなユニタリーは検出され、等価回路が返されるようになった。 10036を修正 -
クラスの問題を修正しました。
BasicSwapクラスの問題を修正しました。BasicSwap.run()fake_runTrueメソッドが機能しない問題を修正しました。 修正 #10147 -
新しいスタイルの
ClbitとQubits(レジスタを持たないビット)を持つ回路のコピーで、含む回路からこれらのビットへの参照が壊れることがあり、シリアライズと回路の視覚化で問題が発生する問題を修正しました。 修正 #10409 -
これにより
CheckMapコントロール・フロー・ビルダー・インターフェイスで作成された入れ子の条件構造を扱っても、トランスパイラー・パスがエラーになることはなくなった。 10394を参照。 -
パルスの出力を固定
measure()とmeasure_all()関数がBackendV2バックエンドで -
からの出力密度行列の次元を、対応する入力密度行列の次元と一致するように修正した。
DensityMatrix.partial_transpose()の出力密度行列の次元を修正し、対応する入力密度行列の次元と一致するようにした。 -
インポート
qiskit.primitivesをインポートしても、非推奨のqiskit.opflowモジュールに起因する これらの警告は、デフォルトの Python フィルタによってユーザーには隠されていた。opflowのeager importをトリガーし、ユーザーによるその後のインポートが警告をトリガーしないことを意味する。 10245を修正 -
OpenQASM 2の出力を修正。
QuantumCircuit.qasm()の出力を修正しました。 理想的には、ほとんどのゲートでこのようなことは起こらないはずだが、複雑なアルゴリズム操作のようなGroverOperatorクラスのような複雑なアルゴリズム操作では、誤ってこのような構造を生成してしまう可能性がある。 10162を参照。 -
の LaTeX ドロワーにおけるリグレッションを修正。
QuantumCircuit.draw()の引き出しのリグレッションを修正しました。 10211を参照。 -
の問題を修正しました。
UnitarySynthesistargetパラメータを使用した場合に、制御フローを持つ回路がターゲットに正しくマッピングされない問題を修正しました。 -
のバグを修正した。
VQDresult.optimal_valuesがresult.optimal_pointsのコピーになっていたバグを修正した。 これで対応する値が返されるようになった。 修正 #10263 -
を具体的な または に変換しようとしたときに返されるエラーメッセージを改善した。
ParameterExpressionを具体的なfloatまたはintに変換しようとしたときに返されるエラーメッセージを改善した。 修正 #9187 -
の
float変換を修正した。ParameterExpressionの変換を修正しました。この変換は、その作成履歴のある時点で、その後キャンセルされた虚数成分を持っていました。 バックエンドに Sympy を使用している場合、これらの変換は通常すでに機能しているはずです。 バックエンドにSymengineを使用している場合、これらの変換はしばしば型エラーで失敗していた。ParameterExpression.is_real()が真であるにもかかわらず、型エラーで失敗することがありました。 修正 #10191 -
を修正した。
qpyのシリアライズを修正した。QuantumCircuit.layoutのシリアライズを修正しました。 以前はlayout属性は、回路をQPYに直列化する際に削除されていました。 修正 #10112
エア 0.12.2
前奏曲
Qiskit Aer 0.12.2 は、 0.12.0 への2番目のパッチリリースです。 これは、 0.12.1 のリリース以降に発見されたいくつかのバグを修正するものです。
アップグレードの注意
-
Qiskit Aerは、GPUシミュレータのCUDAバージョンを 11.2 以上にする必要があります。 以前は、CUDA 10.1 が最小サポートバージョンだった。 この変更は、 cuQuantum のサポートを含め、アップストリームのCUDAエコシステムに変更があったため必要だった。 異なるバージョンのCUDAで動作するユーザーをサポートするため、CUDA 11で動作するための別パッケージが利用可能になりました。
qiskit-aer-gpu-cu11、qiskit-aer-gpuパッケージを使用するにはCUDA 12が必要です。qiskit-aer-gpuパッケージの既存ユーザーで、CUDA 11を使用したい場合は、実行する必要がある:pip uninstall qiskit-aer-gpu && pip install -U qiskit-aer-gpu-cu11以前の CUDA 10.x 互換
qiskit-aer-gpuパッケージのリリースから、新しい CUDA 11 互換パッケージにアップグレードします。 すでにローカルでCUDA 12を実行している場合は、通常通りqiskit-aer-gpuパッケージをアップグレードできます。
バグ修正
-
回路に条件とパラメータがある場合、Aerのパラメータバインディングでパラメータを適用する位置が間違っていたため、回路を正しくシミュレートできませんでした。 これは、条件付きで注入されるbfunc操作への配慮が欠けていることに起因する。 このコミットにより、パラメータは注入されたbfunオペレーションを考慮して正しい位置に設定される。
-
1814.グローバルフェーズのパラメータが正しく設定されていなかった。 https://github.com/Qiskit/qiskit-aer/pull/1814 グローバル位相のパラメータ値がテンプレート回路にコピーされ、実際にシミュレートされる回路にはコピーされませんでした。 このコミットにより、シミュレーション対象の回路にパラメータ値が正しくコピーされた。
-
backend.run()の結果は、AerCircuitを含むため、シリアライズできない。 このコミットにより、メタデータからAerCircuitsが削除され、結果がシリアライズ可能になった。 -
:meth: OpenQASM3 テキストから生成された回路では、量子レジスタに重複した量子ビットインスタンスがあるため、
QuantumCircuit.save_statevector()は機能しません。 このコミットで、:meth:QuantumCircuit.save_statevector()は :data:QuantumCircuit.qubitsを使って保存する量子ビットを取得する。
IBM Q プロバイダー 0.20.2
変えません。
0.43.2
注意として、 Qiskit Aerの qiskit パッケージへの組み込みは非推奨です。 Qiskit Aer ( 0.13 ) の次のマイナーバージョンは qiskit パッケージのどのリリースにも含まれません:
pip install qiskit-aerとしてインポートする:
import qiskit_aerQiskit 0.44 以降、 pip install qiskit コマンドは Qiskit Aer や、すでに新しい IBM Provider に置き換わった IBM Q Provider をインストールしなくなりました。
Terra 0.24.1
変更なし
エア 0.12.1
前奏曲
Qiskit Aer 0.12.1 は、 0.12.0 への最初のパッチリリースです。 これは、 0.12.0 のリリース以降に発見されたいくつかのバグを修正するものです。
既知の問題
abelian_grouping=Trueの時にEstimatorで間違った期待値を返すバグを修正。
アップグレードの注意
- に同じ回路と複数のパラメータを渡した場合のパフォーマンスが向上した。
Estimatorをapproximation=True。
非推奨のメモ
- meth:~.AerSimulator.runのオプションは正しい型を使用する必要がある。
バグ修正
-
AER::Configの導入によるパフォーマンスの低下が修正された。 このクラスには多くのフィールドがあるが、AER::Transpile::CircuitOptimizationで頻繁にコピーされる。 元々、json_t(コンフィギュレーション用の旧クラス)も頻繁にコピーされていたが、ほとんどの場合エントリーがあるので、このコピーのオーバーヘッドは問題にならない。 この修正により、AER::Transpile::CircuitOptimizationはAER::Configをコピーしなくなった。 -
BLAS呼び出しが失敗した場合、ompスレッドは例外を処理しないため、エラーメッセージが表示されずにAerがクラッシュする。 この修正は、ompスレッドが例外を正しくキャッチし、ompループの外で例外を再スローするためのものである。
-
以前は、ゲートのパラメータはC++では検証されなかった。パラメータが(カスタム・ゲートのために)予想より短い場合、セグメンテーション・フォールトがスローされる。 このコミットでは、パラメータの長さが明示されているかどうかのチェックが追加された。 このコミットにより、#1612で報告された問題が修正される。 https://github.com/Qiskit/qiskit-aer/issues/1612
-
0.12.0 以降、回路のパラメータ値は一時的に定数値に置き換えられ、パラメータ値はC++ライブラリで割り当てられる。 したがって、parameter_bindsが指定された場合、シミュレータはconstnatの値をパラメータ値として結果を返す。 今回のコミットで、Aerは回路にパラメータがあるにもかかわらず、parameter_bindsが指定されていない場合にエラーを発生するようになった。
-
Aerのインポート時に、利用可能なデバイスとメソッドが照会されなくなった。
-
以前は、
AerSimulator、シミュレーションの入力と出力の間の一貫性を維持するために回路のメタデータを修正していましたが、その副作用として、シミュレーション中にアプリケーションからメタデータが予期せぬ形で表示されることがありました。 この修正により、内部で一貫性を維持するために回路メタデータを使用する必要がなくなり、アプリケーションに対して常に一貫したメタデータのビューを提供することができる。 -
EstimatorResult のメタデータの分散が複雑であったバグを修正し、float を返すようにした。
-
cuQuautum (AER_ENABLE_CUQUANTUM=true)をサポートするQiskit Aerをコンパイルするためのビルドのブレークを修正した。 この変更は、CPUおよび通常のGPUバイナリのビルドには影響しません。
-
from_backend()、バックエンドのqubitプロパティに T1 と T2 の値がない(つまりNone)場合にエラーが発生するバグを修正。 このコミットでは、NoiseModel.from_backend()とbasic_device_gate_errors()を更新し、qubitを含むqubitに作用するすべてのゲートについて、 T1 と T2 の値がないqubitに、QuantumError(つまり、実質的に熱緩和エラーなし)を追加するようにしました。 1779と #1815を修正。 -
カップリング・マップやデバイスのコンフィギュレーションで量子ビット数が設定されていても、シミュレーション方法を設定すると、その方法に従って量子ビット数が上書きされる不具合を修正しました。 1769番を修正
-
cuQuantum SDKの CMakeLists.txtのライブラリパス設定の修正です。 最新の cuQuantum には CUDA 用のライブラリ 11.x と 12.x が含まれているため、この修正では FindCUDA から返された CUDA バージョンを cuQuantum と cuTENSOR のライブラリのパスに使用します。
-
CUQUANTUM_STATIC=trueでビルドした場合の、 cuQuantum のスタティックリンクライブラリの修正。
-
qobjを使用していないため、MPI並列化は有効になっていない。 この修正により、プロセス数とMPIランクが正しく設定されます。
-
AerCircuitは、バリア命令をスキップしながら演算を繰り返し、回路から生成される。 しかし、バリア命令をスキップすると、パラメーターのバインディングの位置がおかしくなる。 この修正により、barrier()が追加され、パラメーターのバインディングが正しく保たれる。 -
Aerは、
run()の引数としてQobjをサポートしているが、これは非推奨となっている。 しかし、 0.12.0 以降、run_optionsが指定されない場合は常に失敗する。 この修正により、run_optionsなしで Qobj のシミュレーションが可能になります。 -
0.12.0 以降、
AerConfigはシミュレーションの設定に使用され、 meth:~.AerSimulator.run の引数の型チェックは厳密に行われる。 今回のコミットでは、引数の型が予想外のものであった場合のキャストを追加した。 -
:meth: #1821 <https://github.com/Qiskit/qiskit-aer/issues/1821> で報告されているように、int値を持つ
QuantumCircuit.initialize()が正しく処理されていなかった。このコミットでは、initialize 命令を分解することで、このような初期化を可能にしています。 -
QuantumCircuitはglobal_phaseのパラメータ化をサポートしている。 しかし、Aerはそのようなパラメータ化を許可しておらず、トランスパイラがパラメータ化されたグローバル・フェイズを生成する際に失敗した。 このコミットでは、global_phase のパラメータ化をサポートし、以下に関連する問題を解決します。 https://github.com/Qiskit/qiskit-aer/issues/1795, https://github.com/Qiskit/qiskit-aer/issues/1781 および https://github.com/Qiskit/qiskit-aer/issues/1798. -
Aerは、最近のバージョンの OpenMP に対してコンパイルする場合、非推奨の
omp_set_nested()の代わりにomp_set_max_active_levels()を使用するようになった。
IBM Q プロバイダー 0.20.2
変えません。
0.43.1
Terra 0.24.1
前奏曲
Qiskit Terra 0.24.1 は 0.24.0 への最初のパッチリリースである。 これは、 0.24.0 のリリース以降に発見されたいくつかのバグを修正するものです。
アップグレードの注意
- 変更点
QuantumCircuit.assign_parameters()のパラメータに直接バインドするように変更。Instructionインスタンスに直接バインドするように変更。ParameterExpression.float(QuantumCircuit.data[i].operation.params[j])、float(そしてParameterExpression). またInstruction()パラメータはすでにfloat。ParameterExpressionそのため、命令パラメータを扱うコードは、すでに両方のケースを処理する必要がある。 ユーザーに影響を与える可能性が最も高いのは、isinstance。ParameterExpressionをチェックし、その結果によって異なる動作をするコードである。 さらに、qpyはバインドされた数値を、 とは異なる精度でシリアライズします。ParameterExpressionの数値をfloatとは異なる精度でシリアライズします(QuantumCircuit.assign_parameters()).
バグ修正
-
更新
plot_gate_map(),plot_error_map()そしてplot_circuit_layout()を更新し、433qubitのheavy-hex結合マップをサポートした。 これにより、 IBM Quantum 'のibm_seattleバックエンドの地図視覚化を結合することができる。 -
による数値のバインディングを変更しました。
QuantumCircuit.assign_parameters()回路命令パラメータの値と、回路のキャリブレーション・ディクショナリの対応するパラメータ・キーの間のミスマッチを避けるため。 9764と #10166を修正。 に関するアップグレードノートも参照してください。QuantumCircuit.assign_parameters(). -
BlockCollapser、ノードのブロックを折りたたむ際にクラシックビットが無視されるバグを修正。 -
のバグを修正しました。
replace_block_with_op()とreplace_block_with_op()のバグを修正。 -
のバグを修正しました。
QuantumCircuit.compose()サブサーキットのSwitchCaseOp.target属性がベース回路のレジスタに正しくマッピングされていなかったバグを修正。 -
のバグを修正した。
RZXCalibrationBuilderのバグを修正しました。 -
コンストラクタ
BooleanExpression.from_dimacs_file()コンストラクタ・メソッドで、tweedledum がインストールされていない場合に発生する例外の型が、期待されたMissingOptionalLibraryではない問題を修正しました。 修正 #10079 -
の呼び出しで
initial_layout。transpile()を使用すると、回路がどのレジスタにもない量子ビットを含んでいたり、複数のレジスタに存在する量子ビットを含んでいてもエラーにならなくなります。 10125を参照。 -
を介して追加されたマルチ制御Z回転ゲートのゲート分解を修正した。
QuantumCircuit.mcrz(). 以前は、この方法は、Z回転に対して相対的な位相差を持つマルチ制御位相ゲートを実装していた。 以前の動作を得るにはQuantumCircuit.mcrz()を使用する。QuantumCircuit.mcp(). -
を構築する際の
PassManagerConfig.from_backend()オブジェクトからPassManagerConfigインスタンスからBackendV1インスタンスからオブジェクトを構築するときのコンストラクタの問題を修正しました。 以前は、コンストラクタが誤ってCouplingMapNone。 修正 #10171 -
Qiskit 0.24.0 で導入された、2量子ビット合成を準備する前に数値回転角度が記号回転角度に置き換えられなくなるバグを修正。 これは、合成ルーチンが数値行列を必要とするため、例外が発生した。
-
並行して
Optimize1qGatesDecompositionを並列で実行すると、 OneQubitGateErrorMap が picklable でないためにエラーが発生するバグを修正した。 -
のバグを修正した。
VF2LayoutとVF2PostLayoutパスが潜在的なレイアウトを評価する際に1量子ビットのエラー成分を考慮できていなかったバグを修正しました。
エア 0.12.0
変更なし
IBM Q プロバイダー 0.20.2
変更なし
0.43.0
Terra 0.24.0
前奏曲
これは、多数の新機能とバグフィックスを含むメジャー機能リリースである。
このリリースは、 Python 3.7 で Qiskit を実行するためのサポートを含む最終リリースです。 次のマイナーバージョンリリースから、Qiskit の実行には Python >= 3.8 が必要になります。
このリリースのハイライトは
QuantumInstance, OpFlow, およびアルゴリズムの使用廃止
このリリースでは QuantumInstance クラス(および関連するヘルパー・メソッドとクラス)、および qiskit.opflow モジュール、および qiskit.algorithms. この非推奨化は、Qiskit Terra 0.21.0 で始まった長い作業から生まれた。 qiskit.algorithms モジュールをリファクタリングするために primitives. 既存のユーザーが新しいワークフローに移行するための、関連する移行ガイドがあります:
QuantumInstanceマイグレーションガイド https://qisk.it/qi \マイグレーションOpflowマイグレーションガイド https://qisk.it/opflow \マイグレーション- アルゴリズム移行ガイド https://qisk.it/algo \マイグレーション
OpenQASM2 改善
このリリースには、Qiskitの OpenQASM 2.0 サポートの大幅なリファクタリングが含まれています。 最初の変更点は、 OpenQASM 2.0 用の新しいパーサーが qiskit.qasm2 モジュールに この新しいモジュールは、既存の qiskit.qasm モジュールを置き換えます。 新しいパーサーは、言語仕様に対してより明示的で正しい。 また、Rustで実装されており、以前のパーサーよりも大幅に高速化されている。 新しいパーサーと組み合わされて、 OpenQASM 2.0 エクスポーターは大規模なリファクタリングが行われました。 QuantumCircuit.qasm() メソッドを使って QuantumCircuit オブジェクトから
接続が分離されたデバイス向けのトランスパイラサポート
トランスパイラーが、不連続な接続性を持つバックエンドをターゲットにすることをサポートするようになった。 以前は、トランスパイラーは完全に接続されたバックエンド(バックエンド内のすべての量子ビットのペア間で演算を実行するパスが存在する)しかサポートしていなかった。 これで、バックエンドの接続が切断された場合、トランスパイラがバックエンドのレイアウト (Layout Stage )とルーティング (Routing Stage )の適用方法を推論できるようになりました。 接続されているコンポーネント間の接続性がないため、入力回路をハードウェア上で実行できない場合は、説明的なエラーが返されます。
例えば、 IBM Quantum のハードウェア・ロードマップに概説されているHeronデバイスは、制御ハードウェアを共有し、別々の量子プロセッサー間でリアルタイムの古典的通信を行う将来のバックエンドについて説明している。 このサポートにより Target このような将来のデバイスや、同様の制約を持つ他のハードウェアを正確にモデル化することができます。
スイッチ操作
このリリースでは、新しい制御フロー操作であるswitch文が追加された。 これは新しい操作クラス SwitchCaseOp と QuantumCircuit.switch() メソッドを使って実装されています。 これにより、数値入力(古典的なレジスタやビットなど)をオンにして、一致した値に対応する回路を実行することができる。
新機能
-
関数を追加
add_deprecation_to_docstring(),deprecate_arg()およびdeprecate_func()をqiskit.utilsモジュールを追加した。add_deprecation_to_docstring()は、関数のdocstringをSphinxの.. deprecated::ディレクティブを含むように書き換えますので、deprecationはdocsとhelp()で表示されます。 の非推奨デコレータはqiskit.utilsを呼び出す。add_deprecation_to_docstring()を直接呼び出すことができる。@deprecate_func@deprecate_function、関数全体を非推奨にするために使われる。 これは、非推奨メッセージのほとんどを自動生成してくれる。@deprecate_arg@deprecate_arguments、関数の引数を非推奨にするために使われる。 これは、以前の機能よりも有益なメッセージを生成する。 例えば、predicate、非推奨の値やデータ型を使用するような特定の状況のみを非推奨にすることができます。
トランスパイラ機能
-
HLSConfig、指定された高レベルオブジェクトに使用される合成メソッドのリストを指定する代替方法を追加。 以前と同様、合成メソッドは、メソッド名と追加の引数からなるタプルとして指定することができる。 のインスタンスと追加の引数からなるタプルとして指定することができる。HighLevelSynthesisPluginのインスタンスと追加の引数からなるタプルとして指定することもできます。 さらに、追加の引数がない場合、合成メソッドは単に名前またはHighLevelSynthesisPlugin. 次の例は新機能を説明するものである:from qiskit import QuantumCircuit from qiskit.circuit.library.generalized_gates import PermutationGate from qiskit.transpiler import PassManager from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig, HighLevelSynthesis from qiskit.transpiler.passes.synthesis.high_level_synthesis import ACGSynthesisPermutation qc = QuantumCircuit(6) qc.append(PermutationGate([1, 2, 3, 0]), [1, 2, 3, 4]) # All of the ways to specify hls_config are equivalent hls_config = HLSConfig(permutation=[("acg", {})]) hls_config = HLSConfig(permutation=["acg"]) hls_config = HLSConfig(permutation=[(ACGSynthesisPermutation(), {})]) hls_config = HLSConfig(permutation=[ACGSynthesisPermutation()]) # The hls_config can then be passed as an argument to HighLevelSynthesis pm = PassManager(HighLevelSynthesis(hls_config=hls_config)) qc_synthesized = pm.run(qc) -
をサポートした。
CouplingMapオブジェクトにサポートが追加された。 以前はCouplingMapはグラフが連結している場合にのみ構築できた。 これによりCouplingMapを使うことで、複数の別々のチップ上に量子ビットを持つハードウェアのような、不連続な量子ビットを持つハードウェアを表現できるようになります。 -
新しいメソッド
CouplingMap.connected_components()を追加した。CouplingMapの構成部分グラフのリストを得るのに使われる新しいメソッドを追加した。CouplingMap. オブジェクトがCouplingMapオブジェクトが接続されている場合、これは単にCouplingMapを返します。 -
ビルトインに新しいルールを追加
EquivalenceLibraryinstance:qiskit.circuit.equivalence_library.SessionEquivalenceLibrary. 新たに追加されたルールは以下の通り: -
のハイレベル合成プラグインを追加した。
LinearFunctionおよびqiskit.quantum_info.Cliffordトランスパイラ・パスから呼び出せる合成メソッドのセットを拡張。HighLevelSynthesisトランスパイラー・パスの利用可能なプラグインは以下の通りです。
LinearFunction利用可能なプラグインを以下に示します:プラグイン名高位合成プラグインdefaultDefaultSynthesisLinearFunctionkmsKMSSynthesisLinearFunctionpmhPMHSynthesisLinearFunction利用可能なプラグインは以下の通りです。
qiskit.quantum_info.Clifford利用可能なプラグインを以下に示します:プラグイン名高位合成プラグインdefaultDefaultSynthesisCliffordagAGSynthesisCliffordbmBMSynthesisCliffordgreedyGreedySynthesisCliffordlayersLayerSynthesisCliffordlnnLayerLnnSynthesisClifford各メソッドの詳細については
qiskit.synthesis各メソッドの詳細については、ドキュメントを参照してください。次の例は、新しいプラグインのいくつかを示している:
from qiskit.circuit import QuantumCircuit from qiskit.circuit.library import LinearFunction from qiskit.quantum_info import Clifford from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig, HighLevelSynthesis # Create a quantum circuit with one linear function and one clifford qc1 = QuantumCircuit(3) qc1.cx(0, 1) qc1.swap(0, 2) lin_fun = LinearFunction(qc1) qc2 = QuantumCircuit(3) qc2.h(0) qc2.cx(0, 2) cliff = Clifford(qc2) qc = QuantumCircuit(4) qc.append(lin_fun, [0, 1, 2]) qc.append(cliff, [1, 2, 3]) # Choose synthesis methods that adhere to linear-nearest-neighbour connectivity hls_config = HLSConfig(linear_function=["kms"], clifford=["lnn"]) # Synthesize qct = HighLevelSynthesis(hls_config)(qc) print(qct.decompose()) -
新しいトランスパイラー・パスを追加、
MinimumPointこれは、主にPassManager. このパスは、プロパティ・セット内のフィールドの状態を過去の実行期間にわたって追跡し、バックトラックの深さ以上の固定ポイントに達したとき、またはバックトラックの深さに達したときに見つかった最小値を選択するときに、ブール値のフィールドを設定します。 これはFixedPointに代わるもので、後続の実行の間にプロパティ・セット・フィールドに固定値があるかどうかをチェックするだけである。 -
新しいメソッドを追加、
swap_nodes()を追加した。DAGCircuitを追加した。 ここでいう部分接続とは、2つのノードが少なくとも1つのエッジ(量子ビットまたはクリビットを表す)を共有していることを意味する。 ノードがエッジを共有していない場合はDAGCircuitErrorが発生する。 -
新しい合成アルゴリズムの追加
synth_cz_depth_line_mr()CXと位相ゲート(S, SdgまたはZ)を用いた、 2n+2 の2量子ビット深さの線形最近傍(LNN)接続のためのCZ回路の新しい合成アルゴリズムを追加。 合成された回路は量子ビットの順序を戻す。 合成アルゴリズムは、MaslovとRoettelerの論文( https://arxiv.org/abs/1705.09176 ). -
新しい合成アルゴリズムを追加
synth_clifford_depth_lnn()9n+4 層クリフォード合成(synth_clifford_layers()),synth_cnot_depth_line_kms()深さ 5n のCX層を合成する。synth_cz_depth_line_mr()深さ 2n+2 の各CZ層を合成する。 このPRに続いて、MaslovとYangの最近の論文( https://arxiv.org/abs/2210.16195 )に基づく別のPRが予定されている。このPRでは、LNN接続のために深さ 5n のCX-CZ層を合成し、さらに最適化を行うことで、LNN接続のためにクリフォード回路の深さを 7n-4 まで削減する。 -
制御されたパウリ回転と2パウリ回転への変換の間の等価性が、Qiskit標準ゲートの等価性ライブラリで利用可能になりました。 これにより、例えば
CRZGateをRZZGateプラスRZGateやCRYGateをシングルRZXGateプラス・シングル量子ビット・ゲートに変換することができる:from qiskit.circuit import QuantumCircuit from qiskit.compiler import transpile angle = 0.123 circuit = QuantumCircuit(2) circuit.cry(angle, 0, 1) basis = ["id", "sx", "x", "rz", "rzx"] transpiled = transpile(circuit, basis_gates=basis) print(transpiled.draw()) -
に新しいオプション
copy_operationsを追加した。circuit_to_dag()に新しいオプションを追加した。QuantumCircuitから出力QuantumCircuit. 入力 :class`~.QuantumCircuit` が変換後にもう使用されない場合、この深いコピーは不要なオーバーヘッドとなる。QuantumCircuitが破棄されたとしても、共有された参照は望ましくない副作用をもたらす可能性がないからです。 -
に新しいオプション
copy_operationsを追加した。dag_to_circuit()に新しいオプションを追加した。DAGCircuitから出力QuantumCircuit. 入力DAGCircuit変換後に入力がもう使われない場合、この深いコピーは不要なオーバーヘッドとなる。DAGCircuitが破棄されたとしても、共有された参照は望ましくない副作用を持つ可能性がないからです。 -
に新しい関数
passmanager_stage_plugins()を追加した。qiskit.transpiler.preset_passmanagers.pluginモジュールを追加した。 この関数は、プラグイン名からそのクラスタイプへのマッピングを取得するために使用します。 これにより、定義されたパスマネージャーステージプラグインのドキュメントを特定し、照会することができます。 例:>>> from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins >>> passmanager_stage_plugins('routing')['lookahead'].__class__ qiskit.transpiler.preset_passmanagers.builtin_plugins.LookaheadSwapPassManager >>> help(passmanager_stage_plugins('routing')['lookahead']) Help on BasicSwapPassManager in module qiskit.transpiler.preset_passmanagers.builtin_plugins object: class BasicSwapPassManager(qiskit.transpiler.preset_passmanagers.plugin.PassManagerStagePlugin) | Plugin class for routing stage with :class:`~.BasicSwap` ... -
トランスパイラー・パスの
Errorは、msgパラメーターに呼び出し可能な入力も受け付けるようになった。 これらの入力 callables を使用する場合、パスのproperty_set属性が渡され、パス実行時のエラーメッセージに使用される文字列を返すことが期待されます。 例:from qiskit.transpiler.passes import Error def error_message(property_set): size = property_set["size'] return f"The circuit size is: {size}" error_pass = Error(error_message)error_passがパス・マネージャに含まれている場合、"The circuit size is: n"というメッセージを使用してエラーになります。nは、プロパティ・セットに設定されている回路サイズです(通常、パスの前回実行時のものです)。Sizeパス)。 -
この
build_coupling_map()このメソッドには、新しいキーワード引数filter_idle_qubitsがある。Trueにセットすると、出力から演算をサポートしないすべての量子ビットが削除される。CouplingMapを削除します。 -
トランス
GateDirectionトランスパイラ・パスはSwapGateインスタンスを正しく処理できるようになりました。 このような場合、スワップ・ゲートの量子ビット引数がエッジの非ネイティブ方向にあれば、パスは引数の順序を反転させる。 -
その
RZXCalibrationBuilderとRZXCalibrationBuilderNoEchoトランスパイラパスは、バックエンドのネイティブなエンタングルゲートがECRGateバックエンドのネイティブなエンタングルゲートがECRGate. 以前は、パスが正しく機能するのは、エンタングルゲートがCXGate. -
クラスに新しいコンストラクタを追加した。
Targetクラスの新しいコンストラクタを追加しました、Target.from_configuration()これはTargetオブジェクトを構築することができます、CouplingMap,BackendPropertiesなど)。 例:target = Target.from_configuration( basis_gates=["u", "cx", "measure"], coupling_map=CouplingMap.from_line(25), )これは
Targetオブジェクトを構築する。UGate,CXGateとMeasureを持つオブジェクトを構築する。 -
Amy、Azimzadeh、Moscaの各方式を用いたAll-to-AllアーキテクチャのCnot位相回路を合成するための新関数
synth_cnot_phase_aam()。 この関数は、利用可能なqiskit.transpiler.synthesis.graysynth()関数と同じですが、より分かりやすい名前を持っており、パッケージツリーにより論理的に配置されています。 この新しい関数は、おそらく将来のリリースで非推奨となるであろうレガシー関数に取って代わるものである。 -
のルーティング・アルゴリズムに内部的な微調整を加えた。
SabreSwap最適化レベルが0でないすべての非動的回路のトランスパイレーションで使用されるルーティング・アルゴリズムの内部調整により、非常に大規模な回路のルーティングが高速化されました。 例えば、 depth-5QuantumVolume例えば、1081qubitのヘビーヘックス結合マップの回路をルーティングする時間は約半分になる。 -
トランスパイラー・パスのランタイム・パフォーマンスは
Optimize1qGatesDecompositionトランスパイラ・パスの実行性能が大幅に改善された。 これは、パスの計算をすべてRustで書き直すと同時に、パスの実行時に生成される中間オブジェクトの量を減らすことで実現した。 の実行時性能も同様に向上するはずである。transpile()キーワード引数optimization_levelを1、2、3に設定した場合の実行性能も同様に向上するはずである。 -
新しい合成法を追加
synth_stabilizer_layers()スタビライザーの状態を層にする これは、Bravyi and Maslov, ( arxiv:2003.09412 ) のLemma 8で説明されている合成と同様の分解を、安定化状態に影響を与えない最初のハダマード・フリー・サブサーキットなしで提供する。 -
CXと位相ゲート(S、Sdg、Z)を使って、 2n+2、2量子ビットの深さの線形最近傍接続と2つの異なるCX層のスタビライザー状態の新しい合成法
synth_stabilizer_lnn()。 合成アルゴリズムは、MaslovとRoettelerの論文( https://arxiv.org/abs/1705.09176 ). -
パスは
SabreLayoutパスがサポートされるようになった。CouplingMap. 不連続結合をターゲットにする場合、入力DAGCircuitを仮想量子ビットの連結成分に分割し、各成分をそれぞれ の連結成分にマッピングします。CouplingMapレイアウトは各接続成分に対して個別に実行され、すべてのレイアウトが結合されて返されます。 引数routing_passを設定した場合、パスは不連続接続での実行をサポートしないことに注意。 -
以下のレイアウトとルーティングのトランスパイラ・パスは
qiskit.transpiler.passesモジュールからのTargetオブジェクトを受け取ることをサポートするようになりました。このオブジェクトは、最初の位置引数(現在の名前はcoupling_mapまたはbackend_properties)を介して、ターゲットバックエンドの制約をモデル化するために使用されます。新しい
Targetを新たにサポートしたパスのリストは以下の通りである:CSPLayoutFullAncillaAllocationLayout2qDistanceNoiseAdaptiveLayoutSabreLayoutTrivialLayoutBasicSwapBIPMappingLayoutTransformationLookaheadSwapSabreSwapStochasticSwapCheckMap
-
パスマネージャー構築ヘルパー関数
generate_embed_passmanager()は、唯一の位置引数としてTargetを唯一の位置引数として受け付けるようになりました (現在の名前はcoupling_map)。 これは、レイアウトの埋め込みを構築するために使用することができます。PassManagerオブジェクトからではなくTargetオブジェクトからではなくCouplingMap. -
モジュールの以下のレイアウトとルーティングのトランスパイラ・パスは、新しいキーワード引数。
qiskit.transpiler.passesモジュールからの以下のトランスパイラ・パスは、新しいキーワード引数target。Targetオブジェクトを受け取ります。これは、ターゲットバックエンドの制約をモデル化するために使われます。 キーワード引数targetが指定された場合、トランスパイラ・パスの動作で使用されるハードウェア制約の真理源として使用される。 ハードウェア制約を指定するための他の引数、通常はCouplingMap,InstructionScheduleMapまたは基底ゲートリストを取る引数である。 新しい引数target、これらのパスのリストは以下の通り: -
パス・マネージャー構築ヘルパー関数
generate_scheduling()に新しいキーワード引数targetが追加されました。Targetオブジェクトを指定するために使われます。PassManager. この新しい引数が指定された場合、他の引数inst_mapに優先する。 -
で使用される
defaultプラグインは、トランスパイラパスで報告されたエラー率に基づいて1量子ビットと2量子ビットのユニタリー合成を選択するようになりました。UnitarySynthesisで報告されたエラー率に基づいて1量子ビットと2量子ビットのユニタリー合成を選択するようになりました。Target. 特に、プラグインがサポートするすべての可能な合成方法を実行し、エラーが最も少なくなるオプションを選択する。 1量子ビット分解では、パウリ基底(RZ-RX-RZやRZ-RY-RZなど)、一般的なユニタリー基底(Uなど)、その他いくつかの基底を対象とすることができる。 2量子ビット分解の場合、任意の超制御基底(CNOT、 iSWAP, Bなど)または多重制御基底(CZ、CH、 ZZ^.5、 ZX^.2 など)を対象とすることができる。 -
のインターフェイスには、2つの新しいオプション・プロパティがあります。
UnitarySynthesisPluginsupports_gate_lengths_by_qubitsupports_gate_errors_by_qubitこのプロパティが設定されると、プラグインのrun()メソッドの入力オプションに、それぞれgate_lengths_by_qubitとgate_errors_by_qubitフィールドが追加されます。 これらの新しいフィールドは、gate_lengthsとgate_errorsによって提供されるデータの代替ビューであるが、代わりに{(qubits,): [Gate, length]}(ここでGateはその定義のGateのインスタンスである)。 これにより、プラグインは、同じタイプで異なるパラメータが設定されているゲートを扱うことができる。 -
新しいトランスパイラー・パスを追加、
UnrollForLoopsトランスパイラ・パスが追加された。ForLoopOp演算をアンロールするために使用されます。 このパスでは、可能な限り for ループをアンロールします。ContinueLoopOpまたはBreakLoopOpがループのボディブロック内にない場合、可能な限りループを展開する。 例:from qiskit.transpiler.passes import UnrollForLoops from qiskit import QuantumCircuit unroll_pass = UnrollForLoops() qc = QuantumCircuit(1) # For loop over range 5 with qc.for_loop(range(5)) as i: qc.rx(i, 0) # Unroll loop into 5 rx gates unroll_pass(qc).draw("mpl")
-
を渡す新しいパラメータ
max_trialsを追加しました。VF2PostLayoutこのパラメータを指定すると、最適なレイアウトを検索する際に検出・比較されるレイアウトの数が制限されます。 これは、既存のパラメータcall_limitおよびtime_limit(それぞれ、 VF2 アルゴリズムによって実行される状態訪問の数およびpassが費やす総時間を制限するために使用される) とは異なり、潜在的なレイアウトのスコアリングに費やす時間に上限を設けるために使用される。VF2PostLayoutによって費やされる時間の合計を制限するために使用される)とは異なり、潜在的なレイアウトのスコアリングに費やされる時間に上限を設けるために使用される。 -
トランス
CheckMapトランスパイラー・パスのコンストラクターには、新しいキーワード引数property_set_fieldがある。 この引数を使用して、分析結果を保存するプロパティセットのフィールドを指定することができる。 以前は、フィールド"is_swap_mapped"(これがデフォルト)にしか結果を保存できなかった。 これにより、パスの複数のインスタンスの結果を、異なるフィールドのPassManagerを異なるフィールドに格納することができます。
回路の特徴
-
新しいゲートクラスを追加、
GlobalPhaseGateインスタンスにグローバル・フェーズを追加するために使用できます。QuantumCircuitインスタンスにグローバル・フェーズを追加するために使用できます。 -
新しい属性を追加、
layoutを追加した。QuantumCircuitクラスを追加しました。 この属性は通常transpile()またはPassManager.run()( レイアウトステージと ルーティングステージがPassManagerで実行されている場合) でTranspileLayoutという属性が含まれます。transpile(). -
クラスのコンストラクタに新しい引数
var_orderを追加した。PhaseOracleクラスのコンストラクタに、論理式の変数を考慮する順序を設定できるようにするための新しい引数、 を追加しました。 例:from qiskit.tools.visualization import plot_histogram from qiskit.primitives import Sampler from qiskit.circuit.library import PhaseOracle from qiskit.algorithms import Grover, AmplificationProblem oracle = PhaseOracle('((A & C) | (B & D)) & ~(C & D)', var_order=['A', 'B', 'C', 'D']) problem = AmplificationProblem(oracle=oracle, is_good_state=oracle.evaluate_bitstring) grover = Grover(sampler=Sampler()) result = grover.amplify(problem) print(result.circuit_results[0]) -
新しい OpenQASM 2 パーサーは
qiskit.qasm2. これには2つのエントリーポイントがある:qasm2.load()とqasm2.loads()これはそれぞれ、ファイルからと文字列からソース・コードを読み取るためのものである:import qiskit.qasm2 program = """ OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; h q[0]; cx q[0], q[1]; """ bell = qiskit.qasm2.loads(program)この新しいパーサーは、既存のパーサーよりも 10x ほど高速である。
QuantumCircuit.from_qasm_file()とQuantumCircuit.from_qasm_str()での既存のものよりも高速で、各呼び出しのオーバーヘッドも少なくなっている。 新しいパーサーは、より拡張性があり、カスタマイズが可能で、一般的によりタイプセーフです。現在のエキスポーターとは異なり、 OpenQASM 2 ファイル内の定義が Qiskit オブジェクトと衝突しても、カスタム Qiskit オブジェクトを出力しようとしません。 詳細はqiskit.qasm2モジュールのドキュメントを参照のこと。 -
でのマルチ制御パウリ-X回転とパウリ-Y回転の分解を改善する。
QuantumCircuit.mcrx()およびQuantumCircuit.mcry on :math:`n()制御を、 CX ゲート、 に改善する。この改善は arXiv:2302.06377. -
Qiskit は
switchステートメントの表現をサポートするようになりました。SwitchCaseOp命令とQuantumCircuit.switch()メソッドを使用します。 これにより、数値入力(古典的なレジスタやビットなど)をオンにして、一致した値に対応する回路を実行することができる。 複数の値が同じ回路を指し示すことができる。CASE_DEFAULT常に一致するラベルとして使用できる。また、他のコントロール・フロー構成要素と同様に、ビルダー・インターフェースを使用して、これらのスイッチ・ステートメントを構築することもできる:
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister qreg = QuantumRegister(2) creg = ClassicalRegister(2) qc = QuantumCircuit(qreg, creg) qc.h([0, 1]) qc.measure([0, 1], [0, 1]) with qc.switch(creg) as case: with case(0): # if the register is '00' qc.z(0) with case(1, 2): # if the register is '01' or '10' qc.cx(0, 1) with case(case.DEFAULT): # the default case qc.h(0)switchステートメントはQiskitコンパイラスタック全体でサポートされています。transpile()(バックエンドがこの構文のサポートを宣伝していれば)これを含む回路を作ることができ、QPYにシリアライズされます。switchステートメントは、現在のところ OpenQASM 3の機能ではないが、 設計と検討が活発に行われており、近い将来採用される見込みである。 Qiskit Terraは、リンク先のプルリクエストで提案されている OpenQASM 3構文へのこのステートメントのエクスポートを、実験的機能フラグを使って実験的にサポートしています。 この投機的サポートを使用して、switchステートメント回路(上記で作成したものなど)を OpenQASM 3 にエクスポートするには、次のようにする:from qiskit import qasm3 qasm3.dumps(qc, experimental=qasm3.ExperimentalFeatures.SWITCH_CASE_V1)
アルゴリズムの特徴
-
に新しい属性
eigenvalue_threshold属性を追加しました。AdaptVQEクラスに新しい閾値を設定するための属性を追加しました。 -
に新しい属性
gradient_thresholdを追加しました。AdaptVQEクラスに新しい属性を追加しました。thresholdに代わる新しい属性を追加した。 この新しい属性は、既存のthreshold属性と同じ動作をしますが、クラス内に追加のしきい値オプションが導入されているため、より正確な名前が付けられています。 -
を追加した。
EstimationProblem.has_good_state属性を追加した。EstimationProblemがカスタムEstimationProblem.is_good_state属性が追加された。 などの振幅推定器のチェックに便利である。AmplitudeEstimationデフォルトの実装しかサポートしていない -
フラグ
localをComputeUncomputeフラグを追加し、局所的な忠実度を計算できるようにしました。 -
勾配クラスは、入力パラメータの順序に従って勾配の結果を並べ替える。
例:
from qiskit.algorithms.gradients import ParamShiftEstimatorGradient from qiskit.circuit import QuantumCircuit, Parameter from qiskit.primitives import Estimator from qiskit.quantum_info import SparsePauliOp # Create a circuit with a parameter p = {i: Parameter(f'p{i}') for i in range(3)} qc = QuantumCircuit(1) qc.rx(p[0], 0) qc.ry(p[1], 0) qc.rz(p[2], 0) op = SparsePauliOp.from_list([("Z", 1)]) param_values = [0.1, 0.2, 0.3] # Create a gradient object estimator = Estimator() grad = ParamShiftEstimatorGradient(estimator) result = grad.run(qc, op, [param_values]).result() # would produce a gradient of the form [df/dp0, df/dp1, df/dp2] result = grad.run(qc, op, [param_values], parameters=[[p[2], p[0]]]).result() # would produce a gradient of the form [df/dp2, df/dp0] -
時間に依存するハミルトニアン(すなわち、単一パラメトライズされた作用素)を扱うためのサポートを
TrotterQRTEクラスに追加しました。 この作業を容易にするためにnum_timesteps属性とそれにマッチするキーワード引数をTrotterQRTEをコンストラクタに追加しました。 -
クラスの実行中、すべてのタイム・ステップで観測可能な評価のサポートを追加。
TrotterQRTEクラスの実行中に は時間ステップごとに評価される。TimeEvolutionProblem.aux_operatorsは、コンストラクタの入力product_formula引数のProductFormula.reps属性が 1 に設定されている場合、各時間ステップで評価される。 -
アルゴリズムの拡張を追加。
VQDアルゴリズムを拡張し、異なる最小化実行のためのオプティマイザと初期点のリストを渡せるようにした。 例えば、k-番目の初期点とk-番目のオプティマイザは、k-1-番目の予測状態の最適化に使用される。
量子情報の特徴
-
新しいコンストラクタ・メソッドを2つ追加した、
Clifford.from_matrix()とClifford.from_operator()それぞれユニタリー行列と演算子表現からCliffordオブジェクトをそれぞれユニタリ行列表現と演算子表現から生成します。 -
のコンストラクタは
CliffordRz(pi/2)のようなパラメータ化されたゲートを含め、to_matrixメソッドを実装している限り、3量子ビットまでの任意のクリフォードゲートオブジェクトを取ることができる。 -
新しいユーティリティ関数を追加:
commutator(),anti_commutator()そしてdouble_commutator()QuantumChannelなどのLinearOp抽象基底クラスを実装する任意のオブジェクトのコミュテータを計算するために使用されます、SparsePauliOpまたはScalarOp. -
2つのスタビライザー状態の生成集合が同じスタビライザー群を生成するかどうかをチェックするメソッド
StabilizerState.equivを追加。 例えば、2量子ビットのベル状態のスタビライザー群には、 という4つの要素が含まれているため、 、 、 のいずれかによって生成することができる。 -
新しいメソッドを追加、
partial_transpose()を追加した。qiskit.quantum_infoモジュールのDensityMatrixクラスに追加した。 この方法は、密度行列の部分転置を計算するのに使われる。密度行列は、二項量子系間のもつれを検出するのに必要である。 -
メソッド
qiskit.quantum_info.Operator.apply_permutation()演算子をパーミュテーションで前合成または後合成するメソッドを追加しました。 この方法は一般的な量子力学に有効である。以下は、オペレータのビットを並べ替える の計算例である:
import numpy as np from qiskit.quantum_info.operators import Operator op = Operator(np.array(range(576)).reshape((24, 24)), input_dims=(2, 3, 4), output_dims=(2, 3, 4)) perm = [1, 2, 0] inv_perm = [2, 0, 1] conjugate_op = op.apply_permutation(inv_perm, front=True).apply_permutation(perm, front=False)共役演算子の次元は(4, 2, 3) x (4, 2, 3)であり、これはqutritを0、qubitを1、4-quditを2の位置に移動させる並べ替えと一致する。
-
ネイティブに
SparsePauliOpを持つParameterExpressionを持つオブジェクトの構築をネイティブにサポートする。 現在、以下のものがサポートされている:from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp x = Parameter("x") op = SparsePauliOp(["Z", "X"], coeffs=[1, x]) -
を追加した。
SparsePauliOp.assign_parameters()メソッドとSparsePauliOp.parameters属性を追加した。SparsePauliOp. この機能は、例えば次のように使うことができる:from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp x = Parameter("x") op = SparsePauliOp(["Z", "X"], coeffs=[1, x]) # free_params will be: ParameterView([x]) free_params = op.parameters # assign the value 2 to the parameter x bound = op.assign_parameters([2])
パルス機能
-
新しい
SymbolicPulseクラスを追加しました。qiskit.pulse.library) ライブラリに新しいパルスが追加された:これらの新しいクラスは
ScalableSymbolicPulseのインスタンスである。Sawtoothフェーズを除き、動作は対応する波形発生機能(例えばsin()).Sawtoothクラスの位相は、 の位相が一周期ずれるように定義されている。 -
QPY()にサポートを追加。
qiskit.qpy)にサポートが追加されました。ScheduleBlockインスタンスで、サブルーチンへの参照のデータ構造を保持するためのサポートが追加されました。 この機能により、ユーザーはパルス校正などの作業のために、テンプレート・パルス・プログラムをシリアライズおよびデシリアライズすることができる。 例:from qiskit import pulse from qiskit import qpy with pulse.build() as schedule: pulse.reference("cr45p", "q0", "q1") pulse.reference("x", "q0") pulse.reference("cr45p", "q0", "q1") with open('template_ecr.qpy', 'wb') as fd: qpy.dump(schedule, fd) -
校正エントリーに新しいメソッド
CalibrationEntry.user_provided()が追加された。 このメソッドは、エントリがエンドユーザによって定義されたものなのか、バックエンドによって定義されたものなのかをチェックするために呼び出されます。 -
新しいメソッド
Target.get_calibration()メソッドを追加しました。Targetこのメソッドはパラメータargsとkwargsで呼び出すことができ、較正がパラメータでテンプレート化されている場合、パラメータで構築されたパルススケジュールを返します。
プロバイダー機能
-
この
BackendV2Converterクラスのコンストラクタには、新しいキーワード引数filter_faultyがあります。 この引数をTrueに設定すると、コンバータクラスは、入力のペイロードのBackendProperties入力のペイロードBackendV1. 広くは使われていないがBackendPropertiesオブジェクトは、量子ビットとゲートの両方を非動作としてアノテートすることをサポートしている。 以前は、バックエンドがこのフラグをqubitsやgateにセットしていた場合、出力されるBackendV2。Targetは、動作可能かどうかにかかわらず、すべてのオペレーションを含んでいた。 新しいフラグを活用することで、これらの非オペレーショナルな量子ビットやゲートをフィルタリングすることができる。Target. このフラグがセットされている場合、出力されるバックエンドはフル幅で表示されます(例えば、24量子ビットのバックエンドで、4量子ビットが動作不可と表示されていても、24量子ビットであることは表示されます)。Target. -
この
OptionsクラスはMappingプロトコルと__setitem__メソッドを実装しています。 つまりOptionsインスタンスは、削除メソッド(˶_delitem˶, pop, clear)以外は標準辞書と同じインタフェースを提供するようになった。 バリデーターが登録されている場合、鍵の割り当てはバリデーターによって検証される。
可視化機能
-
インスタンスの視覚化に使用される新しい関数、
staged_pass_manager_drawer()を追加。StagedPassManagerインスタンスを可視化するために使用される。 これは、各ステージが外枠として表現された完全なパスマネージャーを描画する。例:
from qiskit.visualization import staged_pass_manager_drawer from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import FakeSherbrooke backend = FakeSherbrooke() pm = generate_preset_pass_manager(3, backend) staged_pass_manager_drawer(pm) -
この
StagedPassManager.draw()メソッドが更新され、全体のパスマネージャーに加え、ステージの視覚化が含まれるようになった。 ステージは、ビジュアライゼーションでは外側のボックスで表されている。 以前のリリースでは、ステージは視覚化に含まれていなかった。 例:from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import FakeSherbrooke backend = FakeSherbrooke() pm = generate_preset_pass_manager(3, backend) pm.draw(pm) -
関数に新しいキーワード引数、
figsizeを追加。plot_bloch_multivector()関数に追加した。 この引数は、個々のブロッホ球サブプロットのサイズを設定するために使用できる。 例えば、 の量子ビットがあり、figsizeが(w, h)に設定されている場合、図全体の幅は に設定され、図全体の高さは に設定される。 -
関数に新しいキーワード引数、
font_sizeを追加。plot_bloch_multivector()関数に追加した。 この引数を使用して、出力可視化のフォントサイズを制御することができます。 -
関数に2つの新しいキーワード引数、
title_font_sizeとtitle_padを追加。plot_bloch_multivector()関数に追加した。 これらの引数は、タイトル全体のフォントサイズとそのパディングをそれぞれ制御するために使用できる。
アップグレードの注意
-
最小サポート Rust バージョン (MSRV) が 1.56.1 から 1.61.0 に引き上げられました。 Qiskitをソースからビルドする場合、Qiskitをビルドできるように、少なくともRust 1.61.0 がインストールされていることを確認する必要があります。 この変更は、いくつかの上流の依存関係がMSRVを増加させたために行われた。
-
2022年10月にリリースされたQiskit Terra 0.22.0 で非推奨となった、コンテキストマネージャーによるプリミティブの使用と、回路、(Estimatorのみobservables)、パラメータによる初期化を削除。
-
PrimitiveJob.submit()実行終了時にブロックされなくなった。 その結果Sampler.run(),BackendSampler.run(),Estimator.run()とBaseEstimator.run()はPrimitiveJob.result()メソッドが呼ばれるまでブロックされない。
トランスパイラ アップグレード ノート
-
を使用して最適なレイアウトを検索する際に評価される最大試行回数。
VF2LayoutとVF2PostLayoutで制限されるようになった。level_1_pass_manager(),level_2_pass_manager()とlevel_3_pass_manager()をそれぞれ2 500,25 000,250 000, に制限する。 これまでは、可能性のあるすべてのレイアウトが評価された。 この変更は、より大きなデバイス上で、接続されたコンポーネントの数が多い回路のレイアウト採点中にトランスピレーションがハングアップするのを防ぐために行われた。 以前と同じように完全な検索を行うには、トランスパイルされた回路を手動でVF2PostLayoutを手動で実行し、max_trialsに0を指定する。 -
condition以前は非推奨だったDAGDepNode属性は削除されました。 これは 0.18 リリース(07-2021)で非推奨とされた。 代わりに、 属性のconditionop属性を使ってください。 その他のノードタイプには、アクセスする条件はない。 -
のデフォルト値は、
metadataです。DAGCircuitとDAGDependencyのマッチするmetadata属性との互換性のために、Noneから{}に変更されました。QuantumCircuit. -
CouplingMap.__eq__`()メソッドが更新され、基礎となるグラフのエッジリストに同じ要素が含まれていることをチェックするようになった。 基礎となるグラフが連結しているという仮定の下で、このチェックはさらに、グラフが同じラベルを持つ同じ数のノードを持つことを保証する。 オブジェクトの等質性をチェックするためにCouplingMap() == CouplingMap()を使用しているコードは、CouplingMap() is CouplingMap()に更新する必要がある。 -
この関数を
transpile()関数をBackendV1ベースのバックエンドまたはBackendPropertiesbackend_propertiesキーワード引数を通して実行された場合、この関数はこの情報に基づいて自動的に量子ビットの再マッピングを試みなくなります。 この再マッピングをtranspile()このリマッピングを行おうとする方法には根本的な欠陥があり、このようなバックエンドのほとんどの場合、内部エラーが発生することになる。 のフィールドを設定するバックエンドはほとんどない。BackendPropertiesフィールドを設定するバックエンドはほとんどありません。 に頼っていた場合、この再マッピングを手動で行う必要がある。transpile()を頼りにしていた場合、手動でそれを行い、coupling_mapとbackend_propertiesの引数にマップされた入力を渡す必要がある。この引数は、欠陥のある量子ビットとゲートをフィルタリングしたものである。 -
Qiskit Terraの以前のバージョンと比較して、固定シードに対するトランスパイルの結果が変更されている可能性があります。 が使用するルーティング・アルゴリズムに内部的な調整が加えられているためである。
SabreSwapとSabreLayoutで使用される配線アルゴリズムに内部的な調整が加えられたためです。
回路アップグレードに関する注意事項
- について
QuantumCircuitmetadata属性は常に辞書を返すようになり、辞書にのみ設定できるようになりました。 以前は、デフォルト値はNoneで、手動でNoneまたは辞書に設定することができた。
アルゴリズム更新ノート
HHLとShorを含むfactorizersとlinear_solversの非推奨モジュールは、以下のサイトから削除されました。qiskit.algorithms. これらの機能はもともと、 0.22.0 リリース(2022年10月13日リリース)の一部として非推奨となっていた。 代わりにQiskitテキストブックからコードにアクセスできます: 線形ソルバー (HHL), 因数分解器 (Shor)
パルス アップグレード ノート
Target.update_from_instruction_schedule_map()ターゲット命令でqubitsが欠落しているか、未定義命令でinst_name_mapが提供されていない場合、KeyErrorもValueErrorも発生しなくなった。 前者の場合、未定義の量子ビットに対する入力InstructionScheduleMapの定義を無視する。 後者の場合、ゲートマッピングは標準Qiskitゲートから引き出され、最後に、マッピングが見つからない場合は、スケジュール名からカスタム不透明Gateオブジェクトが定義されます。
プロバイダー向けアップグレードノート
-
への
max_credits引数は非推奨である。execute(),assemble()およびすべてのQobj設定(たとえばQasmQobjConfigそしてPulseQobjConfig)が削除された。 この議論は、Qiskitの初期バージョンにさかのぼる。Qiskitは、 IBM Quantum のサービス提供により密接に結びついていた。 当時、max_creditsフィールドは、 IBM Quantum 'のサービス提供で使用される「クレジットシステム」の一部であった。 しかし、そのクレジットシステムは IBM Quantum のバックエンドでは3年近く使われておらず、またQiskitはもう IBM Quantum 'のサービス提供とは結びついていない(そして長い間そうではなかった)。 バックエンドでこのオプションに何らかの形で依存していた場合、その実装が フィールドを公開するようにする必要がある。BackendV2max_creditsフィールドを公開する必要があります。Optionsフィールドを公開する必要があります。 -
の
name属性はBackendV2にある偽のバックエンド・クラスの属性は、以前のリリースから変更されています。qiskit.providers.fake_providerの属性が以前のリリースから変更されています。 以前は、クラスとバージョンを区別するために、"_v2"という接尾辞がついていました。BackendV1バージョンと区別するためでした。 このサフィックスがあると、バックエンドオブジェクトを構築するために使用される他のスナップショットデータと不整合が生じる可能性があるため、このサフィックスは削除された。
非推奨のメモ
- モジュール
qiskit.opflowqiskit.utils.backend_utils、qiskit.utils.mitigationqiskit.utils.measurement_error_mitigation, クラスqiskit.utils.QuantumInstanceおよびメソッドfind_regs_by_name(),run_circuits()は非推奨となり、将来のリリースで削除される予定です。 使用QuantumInstanceに取って代わられる。BaseSampler. Opflowマイグレーションを参照。 QuantumInstance マイグレーションを参照。
トランスパイラーの非推奨機能
-
トランスパイラのルーティング・パス、
BIPMappingは非推奨となり、将来のリリースで削除される予定です。 これは外部プラグインパッケージに置き換えられました:qiskit-bip-mapper。 この新しいパッケージの詳細は、パッケージのgithubリポジトリで見ることができる:https://github.com/qiskit-community/qiskit-bip-mapper
このパスは、2つの理由によって別のプラグインパッケージになりました。
transpile(). -
クラスのスペルミス
aquire_alignmentTargetは正しいスペルacquire_alignmentに置き換えられました。 古いコンストラクタ引数aquire_alignmentとTarget.aquire_alignmentは非推奨であり、将来のリリースで削除される予定です。 代わりにTarget.acquire_alignmentを使う。
回路の廃止予定
- セッティング
QuantumCircuitmetadata属性をNoneに設定することは非推奨となり、将来のリリースではサポートされなくなります。 その代わりに、データを含まないようにしたい場合は、空の辞書を設定する必要がある。
アルゴリズムの廃止
-
0.22.0 以降、非推奨とされてきた以下の機能はすべて非推奨となった。 詳細は https://qisk.it/algo。
-
モジュール
qiskit.algorithms.minimum_eigen_solversは非推奨であり、以下に取って代わられる。qiskit.algorithms.minimum_eigensolvers. -
モジュール
qiskit.algorithms.eigen_solversは非推奨であり、以下に取って代わられる。qiskit.algorithms.eigensolvers. -
モジュール
qiskit.algorithms.evolversは非推奨であり、qiskit.algorithms.time_evolversに取って代わられた。 -
クラス
qiskit.algorithms.TrotterQRTEは非推奨であり、次のものに取って代わられる。qiskit.algorithms.time_evolvers.trotterization.TrotterQRTE. -
使用
QuantumInstanceまたはBackendの使用は非推奨であり、以下のクラスではBaseSamplerに取って代わられます: -
使用
QuantumInstanceまたはBackendまたはExpectationBaseは非推奨であり、以下の静的メソッドのBaseSamplerに取って代わられます:get_fidelity() -
関数
eval_observables()は非推奨であり、関数estimate_observables()に取って代わられる。
-
量子情報の廃止
PauliTableとStabilizerTableは非推奨であり、将来のリリースで削除される予定である。 代わりにPauliListを使うべきである。 この変更に伴い、table()は非推奨となり、tableau()から直接操作できるようになった。
パルスの廃止
- Qiskit Pulse オブジェクトの
ParameterExpressionに複素数の値を代入すると、PendingDeprecationWarningが発生するようになりました。 これにより、パルスモジュールは、もともとそのような割り当てが不可能だった他のモジュールと整列することになる。 モジュールの複雑なパラメーターの典型的な使用例は、 SymbolicPulse ライブラリーだった。 Qiskit-Terra 0.23.0 の時点で、すべてのライブラリパルスは、ScalableSymbolicPulseクラスで使用されているように、2 つの浮動小数点 (amp,angle) を使用して複素振幅表現から実数表現に変換されました。 これにより、複雑なパラメーターは必要なくなった。 複雑なパラメータ(特にカスタムビルドパルス)を使用する場合は、同様の方法で変換し、複雑なパラメータの使用を避けるべきである。
バグ修正
-
この
AmplitudeEstimationクラスは、入力としてEstimationProblemis_good_stateが入力として渡された場合、サポートされていないため無視されます。 以前は、アルゴリズムがこのオプションを黙って無視し、予期せぬ結果を招いていた。 -
QuantumCircuit.append()は、操作に適用するクラシック・ビットの数が不正確な場合、正しくエラーを発生するようになった。 修正 #9385。 -
その
BarrierBeforeFinalMeasurementsとMergeAdjacentBarriersトランスパイラ・パスは、以前は、発行される命令の順序が非決定的だったBarrier命令の順序が非決定的であった。 これは回路のセマンティクスを変えるものではないが、全幅でないバリアが存在する限られたケースでは、後のストキャスティック・トランスパイラ・パスが回路の異なるトポロジー順序を見ることになり、その結果、固定されたシードに対して異なる出力が出る可能性がある。 これを避けるため、パスは決定論的になっている。 -
の戻り値の型は
run()は常に最初の引数の型と同じになる。 単一の回路を渡すと単一の回路が返され、長さが1であっても回路のリストを渡すと回路のリストが返される。 9798を参照。 -
のような複素数係数を持つポーリスが正しい値を返さなかったバグを修正した。
PauliOp.adjoint()PauliOp(Pauli("iX"))のように複素数の係数を持つ Paulis に対して正しい値を返さなかったバグを修正した。 修正 #9433。 -
サーキットドロワー機能の不具合を修正
circuit_drawer()とQuantumCircuit.draw()メソッドでQuantumCircuitを表示すると、図面が判読できなくなる問題を修正しました。 修正 #9908 -
サーキットドロワー機能の不具合を修正
circuit_drawer()とQuantumCircuit.draw()textメソッドと引数vertical_compression="low"を使用した場合に、回路のゲートを表すために使用されるボックスの右上隅に不正な文字が使用される問題を修正しました。 -
メソッドの問題を修正しました。
Gate.control()メソッドで、ctrl_state引数のstrまたはNone入力タイプを誤って処理していた問題を修正した。 -
インスタンスの構築におけるエッジケースを修正しました。
Pauliオプションの位相で量子ビットを持たない文字列が有効なラベルとなり、量子ビットを持たない演算子(例えばPauli("-i"))を作ることができるようになりました。 これは、配列フォームや空のスライスを使用する場合にすでに可能であった。 修正 #9720。 -
マクロ
pulseマクロmeasure()BackendV2ベースのバックエンドを使用しているときにqiskit.pulse.macros.measure()以前はBackendV2ベースのバックエンドで使用しようとするとエラーになります。 9488を修正 -
関数の問題を修正しました。
marginal_distribution()関数で、入力カウント辞書が Python int型ではなくnumpy integer型を使用している場合に、誤ってエラーを発生させていた問題を修正しました。 基礎となる関数は常に異なる型を正しく処理するが、この場合、入力型チェックが誤ってTypeError。 -
パラメータがバインドされていない場合に
Parameter.is_real()がNoneを返さないバグを修正。 修正 #8619。 -
を含む回路を出力できるようになった。
C3SXGateは、 OpenQASM 2.0 エクスポーター (QuantumCircuit.qasm())とパーサー(QuantumCircuit.from_qasm_str()). -
QPY()のバグを修正した。
qiskit.qpy)でMCXGate,MCXGrayCodeおよびMCXRecursive、そしてMCXVChainを含む回路がシリアライズに失敗するバグを修正。 9390を参照。 -
トランスパイラのルーティングパスを修正
StochasticSwap,SabreSwap,LookaheadSwapおよびBasicSwapを一貫して発生させるように修正した。TranspilerError.run()coupling_map=Noneを一貫して発生させるように修正した。 以前は、このような場合、これらのパスはエラーを発生させていたが、それらはすべて副作用によるもので、特定の例外は予測できなかった。 修正 #7127 -
手動で
QuantumCircuit.dataを実装する任意のオブジェクトを操作できるようになった。Operationだけでなくcircuit.Instruction. を手動で変異させることは推奨されない。QuantumCircuit.dataパラメタ化されたオブジェクトを取り囲む不変量をチェックするのは驚くほどコストがかかるので、 通常は新しい回路オブジェクトを構築するよりも効率的ではありません。 -
の中で
DAGDependencyをTemplateOptimizationトランスパイラ・パスの中で構築する場合に、誤った最適化が行われる可能性があるバグを修正した。 -
のバグを修正。
TensoredOp.to_matrix()演算子のグローバル係数が最終的な行列に複数回乗算されるバグを修正。 さて、グローバル係数は、テンサードされた演算子やステートの数に関係なく、正しく適用される。 修正 #9398。 -
トランスパイラ・パスのグローバル・フェイズの処理を修正しました。
UnrollCustomDefinitionsトランスパイラ・パスのグローバル・フェイズの処理を修正しました。 -
の型アノテーションを修正。
transpile()関数の型アノテーションを修正した。 単一の回路が渡されたか、回路のリストが渡されたかによって、戻り値の型が正しく絞り込まれるようになった。 -
バグを修正
IterativePhaseEstimationが間違った回路を生成し、単純なケースでアルゴリズムが失敗する原因となっていたバグを修正した。 修正 #9280。 -
からの初期化時にブロードキャストを許可していたバグが修正されました。
PauliListがPauliやラベルから初期化されたときにブロードキャストを許可していたバグが修正されました。 例えば、PauliList(["XXX", "Z"])というコードは、PauliList(["XXX", "ZZZ"])に相当するコードを生成するのではなく、ValueErrorを生成するようになった。 -
OpenQASM 2 エクスポーター(
QuantumCircuit.qasm())は、他のゲートの定義に登場するゲートの重複定義を出力しなくなりました。 7771 、#8086 、#8402 、#8558 、#9805を参照。 -
OpenQASM 2 エクスポーター (
QuantumCircuit.qasm()) は、複数のネストしたUnitaryGate. 4623 、#6712 、#7772 、#8222を参照。 -
OpenQASM 2 エクスポーター(
QuantumCircuit.qasm())は、他のゲートの定義でのみ使用されるゲートの定義を、正しい順序で出力するようになりました。 7769と 7773を参照。 -
Qiskitで定義された標準ゲート、例えば
RZXGateのようなQiskitで定義された標準ゲートは、 OpenQASM 2 エクスポーター(QuantumCircuit.qasm()). 7172を参照してください。 -
量子体積回路 (
QuantumVolume) が OpenQASM 2 エクスポーター (QuantumCircuit.qasm()). 6466と #7051を参照。 -
OpenQASM 2 エクスポーターは、定義が不明なゲートを
opaqueステートメントで出力するようになりました。 5036を参照。 -
オブジェクトのリストを渡されたときに
transpile()が動作しない問題が修正された。CouplingMapオブジェクトのリストを渡されたときに動作しない問題が修正された。 なお、 こ の よ う なカ ッ プ リ ン グ マ ッ プの リ ス ト を渡す こ と は非推奨であ り、 Qiskit Terra 0.25 以降は不可能です。 9885を修正。 -
このリリース以前は、
figsizeの引数plot_bloch_multivector()の引数は可視化では使用されず、そのサイズを変更することは不可能でした(例えば、単一量子ビット状態のために縮小する)。 このリリースでは、figsize引数の使用法を導入することで、この問題を修正した。 -
の問題を修正した。
transpile()のoptimization_level=1(およびgenerate_preset_pass_manager()とlevel_1_pass_manager()によって返されるプリセット・パス・マネージャーでも同様)で、routing_methodとlayout_methodの引数が設定されておらず、回路内にコントロール・フロー操作が存在しない場合、ルーティングが必要な場合にVF2PostLayoutトランスパイラ・パスが実行されませんでした。 というのも、これは期待された動作とは正反対だったからである。VF2PostLayoutは、ヒューリスティック・レイアウト・パスと配線が実行された後に、より良い性能を発揮する可能性のあるレイアウトを見つけることを意図しているからです。 修正 #9936 -
の構築
StatevectorからQuantumCircuitを構成してもエラーは発生しなくなった。 これらの操作は、結果として得られる状態ベクトルに大域的な位相を与える。 -
パディング遅延のためのトランスパイラー・パスの問題を修正しました。
Delay命令。PadDelayとPadDynamicalDecouplingは、ターゲットが量子ビットのためのDelay命令をサポートしないように、量子ビットのアイドル時間をパッドしないように固定されている。 また、レガシースケジューリングパスASAPSchedule、ALAPSchedule、内部的に遅延をパッドしているが、これも同様に修正される。 さらに、transpile()がtargetオブジェクトでPadDelayを呼び出すように修正され、scheduling_methodオプションで呼び出されたときに正しく動作するようになった。 9993を修正 -
メソッドの型アノテーションを修正した。
QuantumCircuit.assign_parameters()メソッドの型アノテーションを修正し、inplace引数の値による戻り値の型の変化を正しく反映するようにしました。 -
のパフォーマンス・スケーリングの問題を修正しました。
VF2LayoutとVF2PostLayoutパス・マネージャーとtranspile()のパスで発生するパフォーマンスのスケーリングの問題を修正しました。 これでトランスパイラーは、評価されるレイアウト候補の数に上限を設定できるようになった。 -
state_to_latex()関数において、意図しない係数の丸めにより無効な LaTeX を生成する可能性があった問題を修正。 これは、state_drawer()が呼び出されたときにエラーになる可能性もある。 修正 #9297。
エア 0.12.0
変更なし
IBM Q プロバイダー 0.20.2
変更なし