Skip to main content
IBM Quantum Platform

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_run True メソッドが機能しない問題を修正しました。 修正 #10147

  • 新しいスタイルの ClbitQubits(レジスタを持たないビット)を持つ回路のコピーで、含む回路からこれらのビットへの参照が壊れることがあり、シリアライズと回路の視覚化で問題が発生する問題を修正しました。 修正 #10409

  • これにより CheckMap コントロール・フロー・ビルダー・インターフェイスで作成された入れ子の条件構造を扱っても、トランスパイラー・パスがエラーになることはなくなった。 10394を参照。

  • でコンテキストが初期化されたときにパルスビルダーが失敗する不具合を修正した。 BackendV2.

  • パルスの出力を固定 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_valuesresult.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-cu11qiskit-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_aer

Qiskit 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 で間違った期待値を返すバグを修正。

アップグレードの注意

  • に同じ回路と複数のパラメータを渡した場合のパフォーマンスが向上した。 Estimatorapproximation=True

非推奨のメモ

  • meth:~.AerSimulator.runのオプションは正しい型を使用する必要がある。

バグ修正

  • AER::Config の導入によるパフォーマンスの低下が修正された。 このクラスには多くのフィールドがあるが、 AER::Transpile::CircuitOptimization で頻繁にコピーされる。 元々、 json_t (コンフィギュレーション用の旧クラス)も頻繁にコピーされていたが、ほとんどの場合エントリーがあるので、このコピーのオーバーヘッドは問題にならない。 この修正により、 AER::Transpile::CircuitOptimizationAER::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 のリリース以降に発見されたいくつかのバグを修正するものです。

アップグレードの注意

バグ修正

  • 更新 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_layouttranspile() を使用すると、回路がどのレジスタにもない量子ビットを含んでいたり、複数のレジスタに存在する量子ビットを含んでいてもエラーにならなくなります。 10125を参照。

  • を介して追加されたマルチ制御Z回転ゲートのゲート分解を修正した。 QuantumCircuit.mcrz(). 以前は、この方法は、Z回転に対して相対的な位相差を持つマルチ制御位相ゲートを実装していた。 以前の動作を得るには QuantumCircuit.mcrz() を使用する。 QuantumCircuit.mcp().

  • を構築する際の PassManagerConfig.from_backend() オブジェクトから PassManagerConfig インスタンスから BackendV1 インスタンスからオブジェクトを構築するときのコンストラクタの問題を修正しました。 以前は、コンストラクタが誤って CouplingMapNone 。 修正 #10171

  • Qiskit 0.24.0 で導入された、2量子ビット合成を準備する前に数値回転角度が記号回転角度に置き換えられなくなるバグを修正。 これは、合成ルーチンが数値行列を必要とするため、例外が発生した。

  • 並行して Optimize1qGatesDecomposition を並列で実行すると、 OneQubitGateErrorMap が picklable でないためにエラーが発生するバグを修正した。

  • のバグを修正した。 VF2LayoutVF2PostLayout パスが潜在的なレイアウトを評価する際に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. 既存のユーザーが新しいワークフローに移行するための、関連する移行ガイドがあります:

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文が追加された。 これは新しい操作クラス SwitchCaseOpQuantumCircuit.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 を返します。

  • ビルトインに新しいルールを追加 EquivalenceLibrary instance: qiskit.circuit.equivalence_library.SessionEquivalenceLibrary. 新たに追加されたルールは以下の通り:

    • CXGate への ECRGate と1量子ビットクリフォードゲート(グローバル位相まで)。
    • HGateSXGate そして SGate (グローバルフェーズまで)。
    • HGateSXdgGate そして SdgGate (グローバルフェーズまで)。
  • のハイレベル合成プラグインを追加した。 LinearFunction および qiskit.quantum_info.Cliffordトランスパイラ・パスから呼び出せる合成メソッドのセットを拡張。 HighLevelSynthesis トランスパイラー・パスの

    利用可能なプラグインは以下の通りです。 LinearFunction 利用可能なプラグインを以下に示します:

    プラグイン名
    高位合成プラグイン
    defaultDefaultSynthesisLinearFunction
    kmsKMSSynthesisLinearFunction
    pmhPMHSynthesisLinearFunction

    利用可能なプラグインは以下の通りです。 qiskit.quantum_info.Clifford 利用可能なプラグインを以下に示します:

    プラグイン名
    高位合成プラグイン
    defaultDefaultSynthesisClifford
    agAGSynthesisClifford
    bmBMSynthesisClifford
    greedyGreedySynthesisClifford
    layersLayerSynthesisClifford
    lnnLayerLnnSynthesisClifford

    各メソッドの詳細については 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標準ゲートの等価性ライブラリで利用可能になりました。 これにより、例えば CRZGateRZZGate プラス RZGateCRYGate をシングル 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 インスタンスを正しく処理できるようになりました。 このような場合、スワップ・ゲートの量子ビット引数がエッジの非ネイティブ方向にあれば、パスは引数の順序を反転させる。

  • その RZXCalibrationBuilderRZXCalibrationBuilderNoEcho トランスパイラパスは、バックエンドのネイティブなエンタングルゲートが 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, CXGateMeasure を持つオブジェクトを構築する。

  • Amy、Azimzadeh、Moscaの各方式を用いたAll-to-AllアーキテクチャのCnot位相回路を合成するための新関数 synth_cnot_phase_aam() 。 この関数は、利用可能な qiskit.transpiler.synthesis.graysynth() 関数と同じですが、より分かりやすい名前を持っており、パッケージツリーにより論理的に配置されています。 この新しい関数は、おそらく将来のリリースで非推奨となるであろうレガシー関数に取って代わるものである。

  • のルーティング・アルゴリズムに内部的な微調整を加えた。 SabreSwap最適化レベルが0でないすべての非動的回路のトランスパイレーションで使用されるルーティング・アルゴリズムの内部調整により、非常に大規模な回路のルーティングが高速化されました。 例えば、 depth-5 QuantumVolume 例えば、1081qubitのヘビーヘックス結合マップの回路をルーティングする時間は約半分になる。

  • トランスパイラー・パスのランタイム・パフォーマンスは Optimize1qGatesDecomposition トランスパイラ・パスの実行性能が大幅に改善された。 これは、パスの計算をすべてRustで書き直すと同時に、パスの実行時に生成される中間オブジェクトの量を減らすことで実現した。 の実行時性能も同様に向上するはずである。 transpile() キーワード引数 optimization_level123 に設定した場合の実行性能も同様に向上するはずである。

  • 新しい合成法を追加 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 を新たにサポートしたパスのリストは以下の通りである:

  • パスマネージャー構築ヘルパー関数 generate_embed_passmanager() は、唯一の位置引数として Target を唯一の位置引数として受け付けるようになりました (現在の名前は coupling_map)。 これは、レイアウトの埋め込みを構築するために使用することができます。 PassManager オブジェクトからではなく Target オブジェクトからではなく CouplingMap.

  • モジュールの以下のレイアウトとルーティングのトランスパイラ・パスは、新しいキーワード引数。 qiskit.transpiler.passes モジュールからの以下のトランスパイラ・パスは、新しいキーワード引数 targetTarget オブジェクトを受け取ります。これは、ターゲットバックエンドの制約をモデル化するために使われます。 キーワード引数 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_qubit supports_gate_errors_by_qubit このプロパティが設定されると、プラグインの run() メソッドの入力オプションに、それぞれ gate_lengths_by_qubitgate_errors_by_qubit フィールドが追加されます。 これらの新しいフィールドは、 gate_lengthsgate_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")
    _images/legacy_release_notes-1.png
  • を渡す新しいパラメータ 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() 制御を、 16n4016n - 40 CX ゲート、 n4n \geq 4 に改善する。この改善は 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デフォルトの実装しかサポートしていない

  • フラグ localComputeUncompute フラグを追加し、局所的な忠実度を計算できるようにしました。

  • 勾配クラスは、入力パラメータの順序に従って勾配の結果を並べ替える。

    例:

    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量子ビットのベル状態のスタビライザー群には、 {II,XX,YY,ZZ}\{II, XX, -YY, ZZ\} という4つの要素が含まれているため、 [XX,ZZ][XX, ZZ][XX,YY][XX, -YY][YY,ZZ][-YY, ZZ] のいずれかによって生成することができる。

  • 新しいメソッドを追加、 partial_transpose()を追加した。 qiskit.quantum_info モジュールの DensityMatrix クラスに追加した。 この方法は、密度行列の部分転置を計算するのに使われる。密度行列は、二項量子系間のもつれを検出するのに必要である。

  • メソッド qiskit.quantum_info.Operator.apply_permutation() 演算子をパーミュテーションで前合成または後合成するメソッドを追加しました。 この方法は一般的な量子力学に有効である。

    以下は、オペレータのビットを並べ替える P.O.PP^\dagger.O.P の計算例である:

    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 クラスの位相は、 2π2\pi の位相が一周期ずれるように定義されている。

  • 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にセットしていた場合、出力される BackendV2Target は、動作可能かどうかにかかわらず、すべてのオペレーションを含んでいた。 新しいフラグを活用することで、これらの非オペレーショナルな量子ビットやゲートをフィルタリングすることができる。 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() 関数に追加した。 この引数は、個々のブロッホ球サブプロットのサイズを設定するために使用できる。 例えば、 nn の量子ビットがあり、 figsize(w, h) に設定されている場合、図全体の幅は nwn \cdot w に設定され、図全体の高さは hh に設定される。

  • 関数に新しいキーワード引数、 font_size を追加。 plot_bloch_multivector() 関数に追加した。 この引数を使用して、出力可視化のフォントサイズを制御することができます。

  • 関数に2つの新しいキーワード引数、 title_font_sizetitle_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() メソッドが呼ばれるまでブロックされない。

トランスパイラ アップグレード ノート
  • を使用して最適なレイアウトを検索する際に評価される最大試行回数。 VF2LayoutVF2PostLayout で制限されるようになった。 level_1_pass_manager(), level_2_pass_manager()level_3_pass_manager() をそれぞれ 2 500, 25 000, 250 000, に制限する。 これまでは、可能性のあるすべてのレイアウトが評価された。 この変更は、より大きなデバイス上で、接続されたコンポーネントの数が多い回路のレイアウト採点中にトランスピレーションがハングアップするのを防ぐために行われた。 以前と同じように完全な検索を行うには、トランスパイルされた回路を手動で VF2PostLayout を手動で実行し、 max_trials0 を指定する。

  • condition 以前は非推奨だった DAGDepNode 属性は削除されました。 これは 0.18 リリース(07-2021)で非推奨とされた。 代わりに、 属性の conditionop 属性を使ってください。 その他のノードタイプには、アクセスする条件はない。

  • のデフォルト値は、 metadata です。 DAGCircuitDAGDependency のマッチする metadata 属性との互換性のために、 None から {} に変更されました。 QuantumCircuit.

  • CouplingMap.__eq__`() メソッドが更新され、基礎となるグラフのエッジリストに同じ要素が含まれていることをチェックするようになった。 基礎となるグラフが連結しているという仮定の下で、このチェックはさらに、グラフが同じラベルを持つ同じ数のノードを持つことを保証する。 オブジェクトの等質性をチェックするために CouplingMap() == CouplingMap() を使用しているコードは、 CouplingMap() is CouplingMap() に更新する必要がある。

  • この関数を transpile() 関数を BackendV1 ベースのバックエンドまたは BackendPropertiesbackend_properties キーワード引数を通して実行された場合、この関数はこの情報に基づいて自動的に量子ビットの再マッピングを試みなくなります。 この再マッピングを transpile() このリマッピングを行おうとする方法には根本的な欠陥があり、このようなバックエンドのほとんどの場合、内部エラーが発生することになる。 のフィールドを設定するバックエンドはほとんどない。 BackendProperties フィールドを設定するバックエンドはほとんどありません。 に頼っていた場合、この再マッピングを手動で行う必要がある。 transpile() を頼りにしていた場合、手動でそれを行い、 coupling_mapbackend_properties の引数にマップされた入力を渡す必要がある。この引数は、欠陥のある量子ビットとゲートをフィルタリングしたものである。

  • Qiskit Terraの以前のバージョンと比較して、固定シードに対するトランスパイルの結果が変更されている可能性があります。 が使用するルーティング・アルゴリズムに内部的な調整が加えられているためである。 SabreSwapSabreLayoutで使用される配線アルゴリズムに内部的な調整が加えられたためです。

回路アップグレードに関する注意事項
  • について QuantumCircuitmetadata 属性は常に辞書を返すようになり、辞書にのみ設定できるようになりました。 以前は、デフォルト値は None で、手動で None または辞書に設定することができた。
アルゴリズム更新ノート
  • HHLShor を含む factorizerslinear_solvers の非推奨モジュールは、以下のサイトから削除されました。 qiskit.algorithms. これらの機能はもともと、 0.22.0 リリース(2022年10月13日リリース)の一部として非推奨となっていた。 代わりにQiskitテキストブックからコードにアクセスできます: 線形ソルバー (HHL), 因数分解器 (Shor)
パルス アップグレード ノート
  • Target.update_from_instruction_schedule_map() ターゲット命令でqubitsが欠落しているか、未定義命令で inst_name_map が提供されていない場合、 KeyErrorValueError も発生しなくなった。 前者の場合、未定義の量子ビットに対する入力 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 バージョンと区別するためでした。 このサフィックスがあると、バックエンドオブジェクトを構築するために使用される他のスナップショットデータと不整合が生じる可能性があるため、このサフィックスは削除された。

非推奨のメモ

トランスパイラーの非推奨機能
  • トランスパイラのルーティング・パス、 BIPMapping は非推奨となり、将来のリリースで削除される予定です。 これは外部プラグインパッケージに置き換えられました: qiskit-bip-mapper。 この新しいパッケージの詳細は、パッケージのgithubリポジトリで見ることができる:

    https://github.com/qiskit-community/qiskit-bip-mapper

    このパスは、2つの理由によって別のプラグインパッケージになりました。 transpile().

  • クラスのスペルミス aquire_alignment Target は正しいスペル acquire_alignment に置き換えられました。 古いコンストラクタ引数aquire_alignmentと Target.aquire_alignment は非推奨であり、将来のリリースで削除される予定です。 代わりに Target.acquire_alignment を使う。

回路の廃止予定
  • セッティング QuantumCircuitmetadata 属性を None に設定することは非推奨となり、将来のリリースではサポートされなくなります。 その代わりに、データを含まないようにしたい場合は、空の辞書を設定する必要がある。
アルゴリズムの廃止
量子情報の廃止
  • PauliTableStabilizerTable は非推奨であり、将来のリリースで削除される予定である。 代わりに PauliList を使うべきである。 この変更に伴い、 table() は非推奨となり、 tableau() から直接操作できるようになった。
パルスの廃止
  • Qiskit Pulse オブジェクトの ParameterExpression に複素数の値を代入すると、 PendingDeprecationWarning が発生するようになりました。 これにより、パルスモジュールは、もともとそのような割り当てが不可能だった他のモジュールと整列することになる。 モジュールの複雑なパラメーターの典型的な使用例は、 SymbolicPulse ライブラリーだった。 Qiskit-Terra 0.23.0 の時点で、すべてのライブラリパルスは、 ScalableSymbolicPulse クラスで使用されているように、2 つの浮動小数点 (amp,angle) を使用して複素振幅表現から実数表現に変換されました。 これにより、複雑なパラメーターは必要なくなった。 複雑なパラメータ(特にカスタムビルドパルス)を使用する場合は、同様の方法で変換し、複雑なパラメータの使用を避けるべきである。

バグ修正

  • この AmplitudeEstimation クラスは、入力として EstimationProblemis_good_state が入力として渡された場合、サポートされていないため無視されます。 以前は、アルゴリズムがこのオプションを黙って無視し、予期せぬ結果を招いていた。

  • QuantumCircuit.append() は、操作に適用するクラシック・ビットの数が不正確な場合、正しくエラーを発生するようになった。 修正 #9385

  • その BarrierBeforeFinalMeasurementsMergeAdjacentBarriers トランスパイラ・パスは、以前は、発行される命令の順序が非決定的だった 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 パラメタ化されたオブジェクトを取り囲む不変量をチェックするのは驚くほどコストがかかるので、 通常は新しい回路オブジェクトを構築するよりも効率的ではありません。

  • の中で DAGDependencyTemplateOptimization トランスパイラ・パスの中で構築する場合に、誤った最適化が行われる可能性があるバグを修正した。

  • のバグを修正。 TensoredOp.to_matrix() 演算子のグローバル係数が最終的な行列に複数回乗算されるバグを修正。 さて、グローバル係数は、テンサードされた演算子やステートの数に関係なく、正しく適用される。 修正 #9398

  • トランスパイラ・パスのグローバル・フェイズの処理を修正しました。 UnrollCustomDefinitions トランスパイラ・パスのグローバル・フェイズの処理を修正しました。

  • の型アノテーションを修正。 transpile() 関数の型アノテーションを修正した。 単一の回路が渡されたか、回路のリストが渡されたかによって、戻り値の型が正しく絞り込まれるようになった。

  • バグを修正 IterativePhaseEstimation が間違った回路を生成し、単純なケースでアルゴリズムが失敗する原因となっていたバグを修正した。 修正 #9280

  • からの初期化時にブロードキャストを許可していたバグが修正されました。 PauliListPauliやラベルから初期化されたときにブロードキャストを許可していたバグが修正されました。 例えば、 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_methodlayout_method の引数が設定されておらず、回路内にコントロール・フロー操作が存在しない場合、ルーティングが必要な場合に VF2PostLayout トランスパイラ・パスが実行されませんでした。 というのも、これは期待された動作とは正反対だったからである。 VF2PostLayout は、ヒューリスティック・レイアウト・パスと配線が実行された後に、より良い性能を発揮する可能性のあるレイアウトを見つけることを意図しているからです。 修正 #9936

  • の構築 Statevector から QuantumCircuit を構成してもエラーは発生しなくなった。 これらの操作は、結果として得られる状態ベクトルに大域的な位相を与える。

  • パディング遅延のためのトランスパイラー・パスの問題を修正しました。 Delay 命令。 PadDelayPadDynamicalDecoupling は、ターゲットが量子ビットのための Delay 命令をサポートしないように、量子ビットのアイドル時間をパッドしないように固定されている。 また、レガシースケジューリングパス ASAPScheduleALAPSchedule、内部的に遅延をパッドしているが、これも同様に修正される。 さらに、 transpile()target オブジェクトで PadDelay を呼び出すように修正され、 scheduling_method オプションで呼び出されたときに正しく動作するようになった。 9993を修正

  • メソッドの型アノテーションを修正した。 QuantumCircuit.assign_parameters() メソッドの型アノテーションを修正し、 inplace 引数の値による戻り値の型の変化を正しく反映するようにしました。

  • のパフォーマンス・スケーリングの問題を修正しました。 VF2LayoutVF2PostLayout パス・マネージャーと transpile()のパスで発生するパフォーマンスのスケーリングの問題を修正しました。 これでトランスパイラーは、評価されるレイアウト候補の数に上限を設定できるようになった。

  • state_to_latex() 関数において、意図しない係数の丸めにより無効な LaTeX を生成する可能性があった問題を修正。 これは、 state_drawer() が呼び出されたときにエラーになる可能性もある。 修正 #9297

エア 0.12.0

変更なし

IBM Q プロバイダー 0.20.2

変更なし

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。