Skip to main content
IBM Quantum Platform

Qiskit 0.37 リリースノート


0.37.2

Terra 0.21.2

前奏曲

Qiskit Terra 0.21.2 は主にバグフィクスリリースで、ドキュメントページもいくつか改善されています。

バグ修正

  • aer_simulator_statevector_gpu でQiskit AerのGPUシミュレータや他のアルゴリズムランナーを使用した場合、一部の関数でstatevectorメソッドとして正しく認識されるようになりました。 QuantumInstance およびその他のアルゴリズムランナーを使用する場合、いくつかの関数が statevector メソッドとして正しく認識されるようになりました。

  • を修正した。 UCGate.inverse() メソッドを修正しました。

  • QuantumCircuit.compose() は、コントロール・フロー・ビルダー・コンテキスト内で inplace=True 引数とともに使用された場合、正しく機能するようになった。 以前は、命令は制御フローの範囲外に追加されていた。 8433を修正。

  • バウンド ParameterExpressionsymengine がインストールされていて、bound 式がプレーンな 1j でなかった場合に、bound が real と認識されないバグを修正した。 例:

    from qiskit.circuit import Parameter
    
    x = Parameter("x")
    expr = 1j * x
    bound = expr.bind({x: 2})
    print(bound.is_real())  # used to be True, but is now False
  • のQPYシリアライズとデシリアライズを修正しました。 ControlledGatectrl_state のシリアライズとデシリアライズを修正しました。 修正 #8549

  • drive_channel(), measure_channel(), acquire_channel(), control_channel() のメソッド呼び出しで対応するパルス・チャンネル・オブジェクトを返すよう、 qiskit.providers.fake_provider.backends のすべての偽バックエンドが更新された。

  • より大きな問題で Z2Symmetries.taper() を実行するためのサポートを修正。 以前は、この方法は大容量のメモリーを必要とし、一般的に大きな問題では失敗の原因となっていた。 この修正の副作用として、パフォーマンスが大幅に向上した。

エア 0.10.4

変更なし

IBM Q プロバイダー 0.19.2

変更なし


0.37.1

Terra 0.21.1

バグ修正

  • メソッドの問題を修正した。 QuantumCircuit.decompose() メソッドの gates_to_decompose 引数に Gate クラスのリストを渡したときの問題を修正した。 回路内のいずれかのゲートにラベルが設定されていた場合、この引数は正しく処理されず、出力分解が gates_to_decompose リストで明示的にゲートを誤ってスキップする原因となる。

  • 修正 to_instruction() 以前は UnitaryGate を指数化せずに作ろうとしていたのを修正した。 この演算子は一般的にユニタリーではないので、これはエラーとなった(もし偶然ユニタリーであったとしても、それは期待された結果ではないだろう)。

    これで to_instruction() を正しく呼び出すと、それが保持する演算子の時間発展を実行するゲートが生成される:

    >>> from qiskit.opflow import EvolvedOp, X
    >>> op = EvolvedOp(0.5 * X)
    >>> op.to_instruction()
    Instruction(
        name='unitary', num_qubits=1, num_clbits=0,
        params=[array([[0.87758256+0.j, 0.-0.47942554j], [0.-0.47942554j, 0.87758256+0.j]])]
    )
  • 関数の問題を修正しました。 marginal_distribution() 関数の問題を修正しました: indices の引数に numpy 配列が渡されると、関数がエラーを発生します。 8283を修正

  • 以前は CircuitStateFn から構築された VectorStateFn. これは、ステートベクトルが Initialize 、回路に変換されたためである。 この問題は、代わりに StatePreparation という命令を使うことでこの問題を解決できる。

    例えば、今ならこうできる:

    from qiskit import QuantumCircuit
    from qiskit.opflow import StateFn
    
    left = StateFn([0, 1])
    left_circuit = left.to_circuit_op().primitive
    
    right_circuit = QuantumCircuit(1)
    right_circuit.x(0)
    
    overlap = left_circuit.inverse().compose(right_circuit)  # this line raised an error before!
  • のバグを修正した。 Optimizer クラスのバグを修正した。 settings から新しいオプティマイザー・インスタンスを再構築すると、新しいオプティマイザーと以前のオプティマイザーの両方の設定がデフォルトにリセットされる不具合を修正。 このため、特に Optimizer オブジェクトが Qiskit Runtime。

    オプティマイザーオブジェクトが正しく再構築されるようになった:

    >>> from qiskit.algorithms.optimizers import COBYLA
    >>> original = COBYLA(maxiter=1)
    >>> reconstructed = COBYLA(**original.settings)
    >>> reconstructed._options["maxiter"]
    1  # used to be 1000!
  • の引数 limit_amplitude が、個々の SymbolicPulse または Waveform インスタンスの引数がパラメータ検証で正しく反映されなかった問題を修正しました。 さらに、QPYスケジュール dump() はグローバル・クラス変数を保存するのではなく、インスタンスに結び付けられた limit_amplitude の値を正しく保存するように修正されました。

  • のペアワイズもつれ構造を修正する。 NLocal 回路。 のバグにつながった。 ZZFeatureMapentanglement="pairwise" 、エラーが発生する。 これで、目的のフィーチャーマップが正しく作成されるようになった:

    from qiskit.circuit.library import ZZFeatureMap
    encoding = ZZFeatureMap(4, entanglement="pairwise", reps=1)
    print(encoding.decompose().draw())

    上記のプリント:

         ┌───┐┌─────────────┐
    q_0: ┤ H ├┤ P(2.0*x[0]) ├──■────────────────────────────────────■────────────────────────────────────────────
         ├───┤├─────────────┤┌─┴─┐┌──────────────────────────────┐┌─┴─┐
    q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ X ├┤ P(2.0*- x[0])*- x[1])) ├┤ X ├──■────────────────────────────────────■──
         ├───┤├─────────────┤└───┘└──────────────────────────────┘└───┘┌─┴─┐┌──────────────────────────────┐┌─┴─┐
    q_2: ┤ H ├┤ P(2.0*x[2]) ├──■────────────────────────────────────■──┤ X ├┤ P(2.0*- x[1])*- x[2])) ├┤ X ├
         ├───┤├─────────────┤┌─┴─┐┌──────────────────────────────┐┌─┴─┐└───┘└──────────────────────────────┘└───┘
    q_3: ┤ H ├┤ P(2.0*x[3]) ├┤ X ├┤ P(2.0*- x[2])*- x[3])) ├┤ X ├──────────────────────────────────────────
         └───┘└─────────────┘└───┘└──────────────────────────────┘└───┘
  • クラスのグローバル・フェイズの処理に関する問題を修正した。 UCGate クラスの

エア 0.10.4

変更なし

IBM Q プロバイダー 0.19.2

変更なし


0.37.0

このリリースは、QiskitからのQiskit Ignisプロジェクトのサポートを正式に終了するものです。 これは元々 0.33.0 リリースで非推奨とされていたもので、そのリリースで文書化された通り、 qiskit-ignis パッケージは Qiskit メタパッケージから削除されました。つまり、今後のリリースでは pip install qiskitqiskit-ignis が含まれなくなります。 ただし、python のパッケージングには制限があるため、既存の qiskit-ignis を自動的に削除することはできません。 以前のバージョンからアップグレードする場合は、 pip uninstall qiskit-ignis で Qiskit Ignis を手動でアンインストールするか、新しい python 環境にメタパッケージをインストールすることをお勧めします。

Qiskit Ignisは Qiskit Experiments プロジェクトに取って代わられた。 Qiskit IgnisからQiskit Experimentsへの移行方法については移行ガイドをご参照ください。

Terra 0.21.0

前奏曲

Qiskit 0.21.0 リリースのハイライトは以下の通り:

  • パルスのシリアライズをサポート ScheduleBlock 経由 qiskit.qpy. QPYフォーマットがバージョン5に更新され、パルススケジュールを含む定義が追加された。 これをサポートするために SymbolicPulse クラスが導入され、記号式でパラメトリック・パルス波形を定義できるようになった。
  • プリセット・パス・マネージャーの操作性を改善。 新しい関数 generate_preset_pass_manager() と同等のパス・マネージャーを簡単に生成できる。 transpile() を簡単に生成できる。 さらに、プリセット・パス・マネージャーが StagedPassManager のインスタンスになった。
  • 属性の内部データ構造のリファクタリング。 QuantumCircuit.data 属性の内部データ構造をリファクタリングしました。 以前は、 (instruction, qubits, clbits) という形式のタプルのリストだったが、現在はオブジェクトのリストになっている。 CircuitInstruction オブジェクトのリストである。 この CircuitInstruction オブジェクトは、以前のタプルベースのアクセスとの後方互換性があるが、実行時のオーバーヘッドがかかる。

さらに、トランスパイラーが改良され、より高品質な出力が可能になった。 などの新しいパスの導入も含まれる。 VF2PostLayoutToqmSwap

新機能

  • 新しいクラスを追加しました、 qiskit.transpiler.StagedPassManagerを追加した。 PassManager これは、回路コンパイルを実行するために定義されたフェーズを持つパイプラインを持つサブクラスです。 各フェーズは PassManager オブジェクトであり、一定の順序で実行される。 例:

    from qiskit.transpiler.passes import *
    from qiskit.transpiler import PassManager, StagedPassManager
    
    basis_gates = ['rx', 'ry', 'rxx']
    init = PassManager([UnitarySynthesis(basis_gates, min_qubits=3), Unroll3qOrMore()])
    translate = PassManager([Collect2qBlocks(),
                             ConsolidateBlocks(basis_gates=basis_gates),
                             UnitarySynthesis(basis_gates)])
    
    staged_pm = StagedPassManager(stages=['init', 'translation'], init=init, translation=translate)
  • メソッドを追加した。 PauliList.group_commuting()SparsePauliOp.group_commuting()メソッドを追加した。このメソッドは、これらの演算子をサブリストに分割し、各要素が他のすべての演算子と交わるようにする。 例:

    from qiskit.quantum_info import PauliList, SparsePauliOp
    
    groups = PauliList(["XX", "YY", "IZ", "ZZ"]).group_commuting()
    # 'groups' is [PauliList(['IZ', 'ZZ']), PauliList(['XX', 'YY'])]
    
    op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ", 2j), ("ZZ", 1j)])
    groups = op.group_commuting()
    # 'groups' is [
    #     SparsePauliOp(['IZ', 'ZZ'], coeffs=[0.+2.j, 0.+1.j]),
    #     SparsePauliOp(['XX', 'YY'], coeffs=[2.+0.j, 1.+0.j]),
    # ]
  • 新しい関数を追加、 marginal_distribution()この関数は、ビット列の入力辞書を(例えば Counts). これは既存の marginal_counts() 関数に似ているが、3つの重要な違いがある。 一つ目は marginal_counts() は辞書か Results オブジェクトのどちらかで動作するのに対し marginal_distribution() は辞書でのみ動作する。 もうひとつは marginal_counts()indices 引数のインデックスの順序を尊重しないのに対し marginal_distribution() は、 indices の順序に基づいて出力ビットを並べ替える。 3つ目の違いは marginal_distribution() その実装はRustで書かれており、辞書入力を疎外するためだけに合理化されているので、より速くなるはずだ。

  • モジュールの BaseOperator サブクラスに、 @ (__matmul__) 二項演算子を追加した。 qiskit.quantum_info モジュールに追加した。 これは、クラスの dot メソッド(A @ B == A.dot(B))を呼び出す省略記法である。

  • に新しいオプション引数 reps を追加。 QuantumCircuit.decompose()に新しいオプション引数を追加した。 例:

    from qiskit import QuantumCircuit
    
    circuit = QuantumCircuit(1)
    circuit.ry(0.5, 0)
    
    # Equivalent to circuit.decompose().decompose()
    circuit.decompose(reps=2)
    
    # decompose 2 times, but only RY gate 2 times and R gate 1 times
    circuit.decompose(gates_to_decompose=['ry','r'], reps=2)
  • 新しいパルス・ベース・クラスを追加 SymbolicPulse. これは従来の ParametricPulseに代わるものである。 新しい基本クラスでは、パルスエンベロープ関数とパラメータ検証関数は記号式オブジェクトで表現される。 新しいクラスは、これらの記号方程式を記号計算ライブラリを通して簡単に直列化できるので、自己完結的で移植可能なパルス・データを提供する。

  • の非エルミート作用素のサポートを追加した。 AerPauliExpectation. これにより、Aerの高速スナップショット期待値計算を、 QEOM のようなアルゴリズムで使用することができる。

  • Qiskit教科書の配色を使用した新しい回路図スタイル、 textbook を追加。

  • 新しい属性 QuantumCircuit.op_start_times は、スケジューリング解析パスの1つが回路上で実行されると入力されます。 これは、例えば、インストラクション・タイムで回路インストラクションを得るために使用することができる:

    from qiskit import QuantumCircuit, transpile
    from qiskit.providers.fake_provider import FakeMontreal
    
    backend = FakeMontreal()
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    qct = transpile(
        qc, backend, initial_layout=[0, 1], coupling_map=[[0, 1]], scheduling_method="alap"
    )
    scheduled_insts = list(zip(qct.op_start_times, qct.data))
  • 新しいメソッド QuantumCircuit.clear() これは QuantumCircuit.

  • 新しいメソッド QuantumCircuit.copy_empty_like() これは QuantumCircuit インスタンスのクリアされたコピーを取得するために使用される新しいメソッドを追加しました。 これは論理的には qc.copy().clear() と同等だが、より高速でメモリ効率も高い。 これは、同じリソース(量子ビット、古典ビット、メタデータなど)がすでに追加された新しい空の回路が必要な場合に便利である。

  • この Target.instruction_supported() メソッドは、2つの新しいキーワード引数、 operation_classparameters をサポートするようになった。 これらの引数を使って instruction_supported() メソッドは、パラメータ値を持つ特定の操作が Target オブジェクトでサポートされているかどうかをチェックするために使うことができます。 例えば TargettargetRXGateθ=π2\theta = \frac{\pi}{2}

    from math import pi
    from qiskit.circuit.library import RXGate
    
    target.instruction_supported(operation_class=RXGate, parameters=[pi/2])

    これは、 targetTrue 、。 RXGateθ=π2\theta = \frac{\pi}{2} False を返す。

  • トロッター化に基づく量子リアルタイム進化アルゴリズムを追加 qiskit.algorithms.TrotterQRTE. 新しい量子時間発展フレームワークに準拠しており ProductFormulaPauliEvolutionGate を実装している。

    from qiskit.algorithms import EvolutionProblem
    from qiskit.algorithms.evolvers.trotterization import TrotterQRTE
    from qiskit.opflow import X, Z, StateFn, SummedOp
    
    operator = SummedOp([X, Z])
    initial_state = StateFn([1, 0])
    time = 1
    evolution_problem = EvolutionProblem(operator, time, initial_state)
    
    trotter_qrte = TrotterQRTE()
    evolution_result = trotter_qrte.evolve(evolution_problem)
    evolved_state_circuit = evolution_result.evolved_state
  • 新機能 generate_preset_pass_manager() を追加した。 PassManager オブジェクトを素早く生成するために使用できる新しい関数を追加した。 PassManager が内部的に使用する transpile() 関数を追加した。 例:

    from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
    from qiskit.providers.fake_provider import FakeWashingtonV2
    
    # Generate an optimization level 3 pass manager targeting FakeWashingtonV2
    pass_manager = generate_preset_pass_manager(3, FakeWashingtonV2())
  • 新しい関数 marginal_memory() この関数は、ショット・メモリ配列をマージナル化するために使用される。 この関数は、ショットメモリアレイと注目するインデックスを与えると、マジナイズされたショットメモリアレイを返します。 この関数は、メモリ・サポートの marginal_counts()memory Results メソッドのメモリサポートとは異なります。

  • プリミティブ・インターフェイスが拡張され、 __call__ メソッドの引数として、インデックスに加えてオブジェクトを受け付けるようになった。 parameter_values 引数をオプションにできるようになった。

  • OpenQASM 3 エクスポーター (qiskit.qasm3)は、明示的な遅延を持つ回路のエクスポートをサポートするようになりました。 QuantumCircuit.delay().

  • に新しいレイアウト配線法を追加した。 transpile()追加した。 これを使用するには、オプションパッケージの Qiskit TOQMをインストールする必要があります。 の routing_method kwargは、追加値をサポートしている。 transpile() は追加の値、 'toqm' をサポートしている。これはTOQMを介したレイアウトとルーティングを有効にするために使われる。

    Terraとともに qiskit-toqm

    pip install qiskit-terra[toqm]
  • 任意のユニタリーに量子シャノン分解を適用する新しいモジュール qiskit.quantum_info.synthesis.qsd を追加。 この機能は、デフォルトのユニタリー・シンセシス・トランスパイラ・パスの従来のアイソメトリー・ベースのアプローチに取って代わるものである。 UnitaryGate.

    量子シャノン分解は、2量子ビット以上のユニタリー行列を分解する際に、アイソメトリ実装の約半分のcnotゲートを使用する。

  • スカラー倍をサポートする quantum_info モジュールのスカラー倍をサポートするクラスは、左右どちらからでもスカラー倍できるようになった。 以前は左からのスカラー倍率しか受け付けなかった。

  • トランスパイラー・パスは LookaheadSwap (パス( transpile()routing_method="lookahead" で使用される)トランスパイラ・パスのパフォーマンスが改善され、およそ3倍速くなりました。 これは純粋に計算の効率が良くなっただけで、アルゴリズムの複雑さは変わらない。 たいていの場合 SabreSwap (routing_method="sabre") のような最新のルーティング・アルゴリズムの方がはるかに性能が高いだろう。

  • 新しいトランスパイラー・パスが追加された。 トランスパイラーのパス Commuting2qGateRouter は、スワップ戦略を用いて、カップリング・マップに通勤ゲートのブロックをルーティングする。 実際、ルーティングは難しい問題であるが、CZネットワークのようにゲートが通勤している場合はかなり簡単である。 QAOAでは通常、通勤ゲートのブロックも見られる。 このような場合は、あらかじめ定義されたSWAPゲートのレイヤーセットを適用するスワップ戦略を用いて対処することができる。 さらに、この新しいトランスパイラー・パスは、 FindCommutingPauliEvolutions 、2量子ビットの項がコミュティングされたパウリ進化のブロックを識別する。 ここで、スワップ戦略はクラス SwapStrategy によって指定される。 スワップ戦略は、最良の結果を得るために、カップリング・マップと、理想的には回路に合わせて調整する必要がある。

  • Qiskitライブラリに新しいオプティマイザを導入し、変分量子アルゴリズムのパラメータ最適化をサポート。 これは一変量限界分布アルゴリズム(UMDA)であり、分布推定アルゴリズムの特殊なタイプである。 例:

    from qiskit.opflow import X, Z, I
    from qiskit import Aer
    from qiskit.algorithms.optimizers import UMDA
    from qiskit.algorithms import QAOA
    from qiskit.utils import QuantumInstance
    
    H2_op = (-1.052373245772859 * I ^ I) + \
            (0.39793742484318045 * I ^ Z) + \
            (-0.39793742484318045 * Z ^ I) + \
            (-0.01128010425623538 * Z ^ Z) + \
            (0.18093119978423156 * X ^ X)
    
    p = 2  # Toy example: 2 layers with 2 parameters in each layer: 4 variables
    
    opt = UMDA(maxiter=100, size_gen=20)
    backend = Aer.get_backend('statevector_simulator')
    vqe = QAOA(opt,
               quantum_instance=QuantumInstance(backend=backend),
               reps=p)
    
    result = vqe.compute_minimum_eigenvalue(operator=H2_op)
  • トランスパイラ・パスのコンストラクタには Unroll3qOrMore トランスパイラ・パスのコンストラクタには、2つの新しいオプションのキーワード引数、 targetbasis_gates があります。 これらのオプションは、対象となるバックエンドを記述するために Target または supported basis gate をそれぞれ指定し、対象となるバックエンドを記述します。 回路内のオペレーションが target または basis_gates にある場合、ターゲット・デバイスがそのオペレーションをネイティブにサポートしているため、パスによってアンロールされることはない。

  • QPYシリアライゼーションは、以下をサポートするようにアップグレードされました。 ScheduleBlock. これでパルスプログラムをバイナリで保存し、後でロードすることができる:

    from qiskit import pulse, qpy
    
    with pulse.build() as schedule:
        pulse.play(pulse.Gaussian(160, 0.1, 40), pulse.DriveChannel(0))
    
    with open('schedule.qpy', 'wb') as fd:
        qpy.dump(schedule, fd)
    
    with open('schedule.qpy', 'rb') as fd:
        new_schedule = qpy.load(fd)[0]

    これは QuantumCircuit. データ構造の詳細については SCHEDULE_BLOCKを参照のこと。

  • 新しいトランスパイラー・パスを追加、 VF2PostLayout. このパスは、コンパイルパイプラインの新しいフェーズ/機能、ポストレイアウトまたはポスト最適化量子ビット選択を実行する新しいタイプである。 このパスの背後にある考え方は、トランスパイラで最適化ループを終了した後、回路内の各クビットの最終的なゲートカウントを知ることで、回路を実行するためにバックエンドでよりパフォーマンスの高い量子ビットのサブセットを見つけることができる可能性があるということです。 このパスは、ターゲットとなるバックエンドの接続性グラフの中から同型の部分グラフを探し、見つかった部分グラフ上の回路全体のエラーレートを調べ、回路のエラーレートが最も低いレイアウトを返す。

    このパスは VF2Layout パスと似ており、内部的にはどちらも retworkxの同じ VF2 の実装を使用しています。 しかし VF2PostLayout は、初期レイアウト、配線、基底変換、および最適化パスの実行後に実行されるように設計されており、レイアウトがすでに適用され、回路が配線され、すべてのゲートがターゲット基底にある場合にのみ機能します。 これは、新しいレイアウトを適用してもターゲット・デバイス上で回路を実行できるようにするために必要です。 VF2Layout 一方、完璧な初期レイアウトを見つけるように設計されており、どんな回路にも対応できる。

  • トランスパイラー ApplyLayout トランスパイラ・パスは、レイアウトが一度適用された後に回路上のレイアウトを更新することをサポートするようになりました。 必須の layout フィールドに加えて) post_layout フィールドが存在する場合、パスが実行されると、 property_setApplyLayout パスが実行されると、新しいレイアウトを適用するためにレイアウトが更新されます。 を返します。 DAGCircuit を返します。 layout プロパティセットは、元のレイアウトの仮想量子ビットを新しい post_layout フィールドの物理量子ビットにマップするように更新されます。

  • によって生成されるプリセット・パス・マネージャー level_1_pass_manager(), level_2_pass_manager()level_3_pass_manager() で生成されたプリセット・パス・マネージャーで、それぞれ optimization_level 1、2、3に対応する。 transpile() 関数上でそれぞれ VF2PostLayout パスが実行されます。 これにより、トランスパイラーは、ターゲット・バックエンドの異なる物理量子ビットを見つけ、その上で回路を実行することができる。 パスは実行されない。 VF2PostLayoutlayout_method, routing_method, initial_layout の引数を手動で指定した場合、パスは実行されません。 transpile(). パスは、物理回路を実行するためにバックエンドでより性能の良い量子ビットのサブセットを見つけることができれば、代わりに代替の量子ビットを使用するように回路のレイアウトを調整する。

  • このアルゴリズムは、基底状態(VQEと同様に計算される)から開始し、前の反復で計算された状態に直交し、ansatz上で計算したときにエネルギーが最小となる固有状態を計算しようとする修正されたコスト関数を最適化することによって、各固有状態を反復計算する。 実装されているインターフェイスはVQEと非常に似ており、以下のような形になっている:

    from qiskit.algorithms import VQD
    from qiskit.utils import QuantumInstance
    from qiskit.circuit.library import TwoLocal
    from qiskit.algorithms.optimizers import COBYLA
    from qiskit import BasicAer
    from qiskit.opflow import I,Z,X
    
    h2_op = (
        -1.052373245772859 * (I ^ I)
        + 0.39793742484318045 * (I ^ Z)
        - 0.39793742484318045 * (Z ^ I)
        - 0.01128010425623538 * (Z ^ Z)
        + 0.18093119978423156 * (X ^ X)
    )
    
    vqd = VQD(k =2, ansatz = TwoLocal(rotation_blocks="ry", entanglement_blocks="cz"),optimizer = COBYLA(maxiter = 0), quantum_instance = QuantumInstance(
                BasicAer.get_backend("qasm_simulator"), shots = 2048)
            )
    vqd_res = vqd.compute_eigenvalues(op)

    この特定のコード・スニペットは、2つの固有値を生成する(基底状態と第1励起状態) テストも実装されている。

アップグレードの注意

  • のパルス・クラスは qiskit.pulse.library のサブクラスである SymbolicPulse ではなく ParametricPulse. 利用可能なクラスは次のように変更されません。 Gaussian, GaussianSquare, Dragそして Constant. SymbolicPulse には完全な下位互換性があり、機能の損失はないはずだ。

  • の各要素のデータ型が変更された。 QuantumCircuit.data の各要素のデータ型が変更された。 以前は単純な3つのタプルで構成されていた。 Instructionのリスト Qubitのリスト、そして Clbitのインスタンスであった。 CircuitInstruction.

    この新しいクラスの属性は operation, qubitsclbitsで、前のタプルの要素に対応する。 しかし qubitsclbitslistsではなく、 tuple インスタンスになった。

    この新しいクラスは、インデックスの要素にアクセスしようとしたり、それを反復処理しようとしたりすると、古い3タプルとまったく同じ動作をする。 これには qubitsclbits 要素をリストにキャストすることも含まれる。 これは後方互換性を保つためである。 Qiskit Terra 0.21 からは、これらの要素にアクセスする好ましい方法ではなくなっています。 その代わりに、前述の属性アクセス形式を使うべきである。

    これは、Terraのデータ構造のさらなる開発を可能にするためである。 QuantumCircuit データ構造をさらに発展させることができるようにするためである。 今後予定されている開発には、動的パラメータ化された回路や、深層回路のメモリ使用量の全体的な削減などがある。

  • トランスパイラパスのみで使用される python-constraint 依存関係は、Qiskit Terra パッケージの要件リストではなくなりました。 CSPLayout トランスパイラパスのみに使用される 依存関係は、Qiskit Terra パッケージの要件リストにはもはやありません。 これは CSPLayout のどのプリセットパスマネージャーでも、デフォルトではパスが使われなくなったからです。 transpile(). パスはまだ利用可能だが、それを使う場合は手動で python-contraint をインストールするか、 qiskit-terra をインストールする際に、例えば csp-layout のエクストラを使う必要がある:

    pip install "qiskit-terra[csp-layout]"
  • が出力するQPYバージョン・フォーマットのバージョンは、バージョン5に引き上げられた。 qpy.dump() はバージョン5に増加した。 この新しいフォーマットのバージョンは以前のバージョンと互換性がなく、QPYバージョン5を扱えないデシリアライザーでロードしようとするとエラーになる。 この変更は、制御されたゲートを適切に表現し、デフォルト以外の制御状態を表現するためのサポートを修正するために必要だった。

  • Qiskit Terraのコンパイル済みRust拡張の最小サポートRustバージョン(MSRV)が 1.56.1 になりました。 つまり、Qiskit Terraをソースからビルドする場合、サポートされるRustコンパイラの最も古いバージョンは 1.56.1。 古いバージョンのRustコンパイラを使用している場合、Qiskitをソースからビルドし続けるには新しいバージョンにアップデートする必要があります。 この変更は、多くのアップストリーム依存ファイルも最小サポートバージョンを更新したため、必要になった。

  • に複数の回路が提供される場合、回路スケジューリングは並列に実行されるようになりました。 schedule(). 詳細は #2695を参照。

  • これまで非推奨だった BaseBackendBaseJobBaseProvider の各クラスはすべて削除された。 これらはもともと、 0.18.0 リリースで非推奨となっていた。 これらのクラスの代わりに、バージョン管理されたプロバイダー・インターフェース・クラスを使用する必要があります。 BackendV2, JobV1そして ProviderV1.

  • のコンストラクタの backend 引数が削除されました。 RZXCalibrationBuilder のコンストラクタの引数が削除されました。 これはもともと、 0.19.0 リリースで非推奨となっていた。 代わりに Backend オブジェクトに instruction_schedule_mapqubit_channel_mapping を問い合わせ、コンストラクタに直接渡します。 例えば BackendV1 バックエンドで

    from qiskit.transpiler.passes import RZXCalibrationBuilder
    from qiskit.providers.fake_provider import FakeMumbai
    
    backend = FakeMumbai()
    inst_map = backend.defaults().instruction_schedule_map
    channel_map = backend.configuration().qubit_channel_mapping
    cal_pass = RZXCalibrationBuilder(
        instruction_schedule_map=inst_map,
        qubit_channel_mapping=channel_map,
    )

    または BackendV2 バックエンドがある:

    from qiskit.transpiler.passes import RZXCalibrationBuilder
    from qiskit.providers.fake_provider import FakeMumbaiV2
    
    backend = FakeMumbaiV2()
    inst_map = backend.instruction_schedule_map
    channel_map = {bit: backend.drive_channel(bit) for bit in range(backend.num_qubits)}
    cal_pass = RZXCalibrationBuilder(
        instruction_schedule_map=inst_map,
        qubit_channel_mapping=channel_map,
    )
  • BasicAer バックエンドの測定ショット制限が削除されました。

  • DAGNode については、以前に非推奨とされていた typeopqargscargswire のkwargsと属性が削除された。 これらはもともと、 0.19.0 リリースで非推奨となっていた。 opqargscargs のクワーグと属性は、 DAGOpNode のインスタンス上でのみアクセス可能であり、 wire のクワーグと属性は、 DAGInNode または DAGOutNode のインスタンス上でのみアクセス可能である。

  • 非推奨の関数 pauli_group() は削除されました。 もともとQiskit Terra 0.17 では非推奨だった。

  • のいくつかの非推奨メソッドが削除されました。 Pauli のいくつかのメソッドが削除されました。これらはもともと Qiskit Terra 0.17 で非推奨とされていたものです。 これらは以下の通りである:


    sgn_prod

    使用 Pauli.compose() または Pauli.dot() を使う。


    to_spmatrix

    代わりに Pauli.to_matrix() を代わりに引数 sparse=True


    kron

    使用する Pauli.expand()ただし、これは既存のオブジェクトを変異させるのではなく、新しいオブジェクトを返すことに注意。


    update_z および update_x

    オブジェクトの zx 属性を直接設定する。


    insert_paulis

    使用 Pauli.insert().


    append_paulis

    使用 Pauli.expand().


    delete_qubits

    使用 Pauli.delete().


    pauli_single

    手動でラベルを作成し、イニシャライザーに直接渡す:

    Pauli("I" * index + pauli_label + "I" * (num_qubits - index - len(pauli_label)))

    random

    代わりに quantum_info.random_pauli() 代わりに

  • クラスから optimize メソッドを削除した。 Optimizer メソッドを削除しました。 minimize() メソッドに取って代わられました。 唯一の例外は SPSA非推奨の警告が出なかったので、そのメソッドはまだ保持されている。

  • Result は、 datestatusheader 属性を常に含むように変更された(指定されていない場合は、 None に設定される)。

  • Python 3.7 shared-memory38 が依存関係になった。 これは、 Python 3.7 の依存関係として追加されたもので、より新しいバージョンの Python の標準ライブラリにある共有メモリ構造を活用できるようにするためのものである。 Python >= 3.8 で実行している場合、追加の依存関係は必要ない。

  • Instruction ラベルが命令作成時にタイプチェックされるようになりました。

  • QPY のシリアライズがアップグレードされました。 QuantumCircuit にアップグレードされました。 QuantumCircuit.calibrations. QPY バージョン 5 では、以下の較正項目のみがシリアライズできます。 ScheduleBlock 型の校正項目のみをシリアル化できます。

  • の定義が変更された。 XXPlusYYGate の定義が変更された。 詳細は #7969を参照。

  • によって生成されるプリセット・パス・マネージャー level_1_pass_manager(), level_2_pass_manager()および level_3_pass_manager() によって生成され transpile() 関数の optimization_level の引数1、2、3によってそれぞれ生成されるプリセット・パス・マネージャーは、トランスパイラー・パスに厳しい時間制限を設定しなくなった。 VF2Layout トランスパイラ・パスに厳しい時間制限を設けることはなくなった。 これは、一定の制限時間(レベル1は 100ms、レベル2は10秒、レベル3は60秒)までは、より良い代替の完璧なレイアウトを見つけようとするのを止めないことを意味する。このようにすると、完璧なレイアウトが利用可能な場合のコンパイルの再現性が制限されるからだ。 つまり、パスを使ったときの出力は以前とは異なるかもしれないが、どのような場合でも、以前の出力よりもノイズの少ない量子ビットのセットが見つかった場合にのみ変化する。 以前の動作を維持したい場合は、 パス用のコンストラクタに 引数を設定するカスタム PassManager を作成し、 VF2Layout パス用のコンストラクタに time_limit 引数を設定します。

非推奨のメモ

  • コール timeline_drawer() は非推奨となりました。 すべての回路は、たとえ遅延命令だけで構成されていても、 scheduling_method のキーワード引数 transpile() に格納されているスケジュール情報を生成するために QuantumCircuit.op_start_times.

  • のコンバーター関数は、 メソッドとともに、非推奨となりました。 NetworkXDAGCircuit.to_networkx()from_networkx() のコンバータ関数と DAGDependency.to_networkx() メソッドは非推奨となり、将来のリリースで削除される予定です。 Qiskitは、qiskit-terra 0.12.0 リリース以来、グラフライブラリとして retworkxを使用しており、それ以来、networkxコンバータ関数は非可逆である。 これらはもともと、retworkxにはない NetworkX’s アルゴリズムライブラリの機能をユーザーが活用できるように追加されたものです。 それ以来、retworkxは成熟し、より多くの機能を提供しています。 DAGCircuit はretworkxと緊密に結合して動作している。 これらのコンバーター・メソッドを持っていても、今後の価値は限定的であるため、将来のリリースでは削除される予定である。

  • モジュールからいくつかの古いトグル (HAS_MATPLOTLIB, HAS_PDFTOCAIRO, HAS_PYLATEX and HAS_PIL) にアクセスすることは非推奨となりました。 qiskit.visualization モジュールからのアクセスは非推奨となり、これらのインポートパスはQiskit Terraの将来のバージョンで削除される予定です。 同じオブジェクトにアクセスするには qiskit.utils.optionalsこのテスターには、Terraのオプション依存関係のほとんどすべてのテスターが含まれている。

  • qiskit.test.mock モジュールは非推奨となりました。 以前は qiskit.test.mock で利用可能だった偽のバックエンドと偽のプロバイダクラスは、Terra 以降では qiskit.providers.fake_provider0.20.0 でアクセスできるようになりました。 この変更は、Qiskitの一部として偽のバックエンドクラスをサポートすることへの適切なコミットメントを表しています。

  • を呼び出すときの引数の名前。 Estimator または Sampler オブジェクトを関数として呼び出すときの引数の名前は、 circuit_indicesobservable_indices から circuitsobservables に変更された。

  • qobj_idqobj_header キーワード引数は非推奨となり、将来のリリースでは削除される予定です。 execute() 関数のキーワード引数は非推奨となり、将来のリリースで削除される予定です。 BaseBackend クラスが削除されて以来、どのバックエンドも Qobj オブジェクトを直接実行することはサポートしておらず、代わりに直接 QuantumCircuit オブジェクトでのみ動作します。

  • のイニシャライザーへの引数 xzlabel はQiskit Terra で非推奨として文書化されていましたが、バグにより実行時に期待した警告が表示されませんでした。 Pauli への引数はQiskit Terra 0.17 で非推奨として文書化されていましたが、バグにより実行時に期待された警告が表示されませんでした。 警告は正しく表示され、Qiskit Terra 0.23 以降では引数は削除されます。 xz のペアは、1つのタプル (Pauli((z, x))) として位置指定で渡す。文字列 label は、第1引数 (Pauli("XYZ")) の位置で渡されるべきである。

  • この SPSA.optimize() メソッドは廃止され SPSA.minimize()に取って代わります。 このメソッドは、以前よりも多くの情報を含む完全な結果オブジェクトを返すことに注意してください。

  • の引数 circuits は非推奨である。 qpy.dump() の引数は非推奨となり、 programs に置き換えられました。

  • AlignmentKind.to_dict() メソッドは非推奨となり、削除される予定です。

バグ修正

  • 引数がモジュラス1であることをチェックするために DiagonalGate が追加された。

  • に与えられた重複した量子ビットのインデックスが正しくエラーになるようになりました。 SparsePauliOp.from_sparse_list() は、以前の値を黙って上書きするのではなく、正しくエラーを発生するようになりました。 新しいキーワード引数 do_checks=False を渡すことで、古い動作にアクセスできる。

  • 視覚化によって timeline_drawer() 視覚化によって古典的なレジスタ・スロットの位置がずれることはなくなった。

  • のパラメータ検証は GaussianSquare のパラメータ検証は、構築前と構築後で一貫性が保たれるようになった。 詳細は #7882を参照。

  • その BackendV2-をベースにした qiskit.providers.fake_provider モジュールの FakeMontrealV2をサポートするようになりました。 Delay 操作に対応しました。 target 属性でサポートするようになりました。 以前は QuantumCircuit 遅延を含むオブジェクトは、これらのバックエンドにコンパイルすることができなかった。

  • TridiagonalToeplitz.eigs_bounds() で、負の固有値がある場合に誤った固有値境界が返されるバグを修正。 詳細は #7939を参照。

  • LaTeX statevector drawer が max_size パラメータを無視するバグを修正。

  • コンストラクタ PassManagerConfig.from_backend() オブジェクトから PassManagerConfig インスタンスから BackendV2 インスタンスから 以前はこれが正しく処理されず BackendV2 オブジェクトで実行すると失敗していました。

  • QPYシリアライズ(qpy.dump())およびデシリアライズ(qpy.load())のサポートを修正しました。 QuantumCircuit カスタム ControlledGate オブジェクトのシリアライズとデシリアライズのサポートを修正しました。 以前は qpy.load() によって例外が発生していた。 ControlledGate. 修正 #7999

  • QPYシリアライズ(qpy.dump())およびデシリアライズ(qpy.load())のサポートを修正しました。 QuantumCircuit カスタム MCPhaseGate オブジェクトのシリアライズとデシリアライズのサポートを修正しました。 以前は qpy.load() を再構築しようとすると MCPhaseGate.

  • QPYシリアライズ(qpy.dump())およびデシリアライズ(qpy.load())のサポートを修正しました。 QuantumCircuit オブジェクトのシリアライズとデシリアライズのサポートを修正しました。 これまでは、直列化処理と再構築された回路によって、オープン制御の状態が失われていた。

  • 固定 QuantumCircuit.reverse_bits() レジスタレスを含む回路で QubitClbit. 例えば、以下のようになります:

    from qiskit.circuit import QuantumCircuit, Qubit, Clbit
    
    qc = QuantumCircuit([Qubit(), Clbit()])
    qc.h(0).c_if(qc.clbits[0], 0)
    qc.reverse_bits()
  • ConfigurableFakeBackend.t2 属性が、以前は提供された t1 の値に基づいて誤って設定されていたのを修正。

  • の問題を修正しました。 BackendV2-からの偽のバックエンドクラスに基づく qiskit.providers.fake_provider モジュールのような FakeMontrealV2 属性(および dt 属性(および Target.dt 属性の値)が正しく秒に変換されていなかった問題を修正しました。 このため、これらの偽のバックエンドをスケジューリングで使用すると問題が発生する。

  • のバグを修正。 plot_histogram() のバグを修正した。 number_to_keep の引数がキーの数より小さい場合。 以下のコードはエラーを吐かなくなり、正しく整列されます:

    from qiskit.visualization import plot_histogram
    data = {'00': 3, '01': 5, '11': 8, '10': 11}
    plot_histogram(data, number_to_keep=2)
  • パラメータ化されたインスタンスの構築と作業のパフォーマンスが向上した。 QuantumCircuit 比較的少数のパラメータを共有する多数のゲートを持つインスタンスの構築と作業のパフォーマンスが向上した。

  • OpenQASM 3 エクスポーター(qiskit.qasm3)は、 basis_gates オプションで非標準ゲートの定義を生成しようとしなくなった。

  • のゲッターを修正した。 OptimizerResult.nitゲッターを修正しました。

  • オブジェクトの文字列表現のバグを修正。 Result オブジェクトの文字列表現のバグを修正しました。

  • の問題を修正した。 transpile()basis_gates キーワード引数で基底ゲート文字列のリストを与えたり、 キーワード引数で暗黙のうちに Targettarget 入力が正しく解釈されず、リストされたゲートのサブセットが各回路に使用される問題を修正しました。

  • トランスパイラー・パスの UnitarySynthesis トランスパイラ・パスの問題を修正しました。 Target コンストラクタの target キーワード引数で、演算に量子ビットの制限がないもの(理想的なシミュレータ・ターゲットの場合など)が指定された場合にエラーになるトランスパイラ・パスの問題を修正しました。

  • メソッド qiskit.result.marginal_counts()メソッドは、パルスバックエンドから ResultQobjExperimentHeader を持つ ExperimentResult オブジェクトの配列が含まれ、それらの ExperimentHeaders にはcreg_sizesインスタンス変数がないからである。 シミュレーターのバックエンド(例えばAer)から Result 、そのインスタンス変数が存在することになる。 フィールドが存在しないか、Noneでない場合、creg_sizesを必要とするロジックをスキップするように、 marginal_counts

  • OpenQASM 2 エクスポーター(QuantumCircuit.qasm())は、定義されたすべての量子ビットに影響を与えない UnitaryGate を正しく定義するようになりました。 修正 #8224

  • の再現性に関する問題を修正した。 transpile()optimization_level 関数の再現性の問題を修正しました。 以前は、完璧なレイアウト(SWAPゲートを必要としないレイアウト)が複数ある場合、 seed_transpiler 引数が設定されているかどうかに関係なく、選択されたレイアウトと出力回路が異なる場合がありました。

エア 0.10.4

変更なし

IBM Q プロバイダー 0.19.2

バグ修正

  • 今度のterraリリースでは、最終リリースの前にリリース候補がタグ付けされる。 しかし、qiskit-ibmq-providerはバージョンを解析しようとしており、バージョン文字列にpreleaseサフィックスがないと仮定しているため、パッケージのバージョン文字列の変更は現在ブロックされています(詳細は #8200を参照してください)。 PEP440 PR #1135 はこのバージョン解析を修正し、pypa/packagingプロジェクトからの正規表現を使用するようにしました。 これにより、terraはqiskit-ibmq-providerを壊すことなく、 0.21.0rc1 タグをリリースできるようになる。
  • threading.currentThread および notifyAll は、 Python 3.10 (2021年10月)で非推奨となり、 Python 3.12 (2023年10月)で削除される予定である。 PR #1133 では、これらを threading.current_thread に置き換え、 notify_all では Python 2.6 を追加した(2008年10月)。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。