Skip to main content
IBM Quantum Platform

Qiskit 0.12 リリースノート


0.12.0

Terra 0.9

前奏曲

0.9 リリースには多くの新機能とバグ修正が含まれている。 今回のリリースの最大の変更点は、 PassManagers の新しいデバッグ機能である。 これには、 PassManager, を視覚化する機能、 PassManager, にコールバック関数を追加する機能、 PassManager で実行されたパスのロギングなどが含まれる。 さらにこのリリースでは、回路の初期レイアウトを設定する方法が標準化されています。 initial_layout qiskit.compiler.transpile() 、。回路内の量子ビットは、デバイス上にある欲求の量子ビットに配置される。 qiskit.execute() 回路のビジュアル化では、レイアウトでトランスパイルされた回路をビジュアル化する際にも、このことが明確に表示されるようになりました。

新機能

  • DAGCircuit オブジェクト(すなわち、操作の依存関係が明示されている QuantumCircuit のグラフ表現)は、 .draw() メソッドで可視化できるようになった。 これはQiskitの理念である「簡単な視覚化」に沿ったものだ。 .draw() メソッドをサポートする他のオブジェクトには、 QuantumCircuitPassManagerSchedule がある。

  • 指定されたバックエンドのエラーマップをプロットする新しい可視化関数 qiskit.visualization.plot_error_map() を追加。 qiskit-ibmq-providerからバックエンドオブジェクトを受け取り、そのデバイスの現在のエラーマップをプロットします。

  • qiskit.QuantumCircuit.draw()qiskit.visualization.circuit_drawer() の両方が、可視化における量子ビットのレイアウト情報の注釈をサポートするようになりました。 描画される QuantumCircuit オブジェクトにレイアウト・メタデータ(通常、 transpile() 呼び出しから出力される回路にのみ設定される)が含まれている場合、デフォルトでそのレイアウトがダイアグラムに表示されます。 これはすべてのサーキットドロワーのバックエンドに対して行われる。 例:

    from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
    from qiskit.compiler import transpile
    
    qr = QuantumRegister(2, 'userqr')
    cr = ClassicalRegister(2, 'c0')
    qc = QuantumCircuit(qr, cr)
    qc.h(qr[0])
    qc.cx(qr[0], qr[1])
    qc.y(qr[0])
    qc.x(qr[1])
    qc.measure(qr, cr)
    
    # Melbourne coupling map
    coupling_map = [[1, 0], [1, 2], [2, 3], [4, 3], [4, 10], [5, 4],
                    [5, 6], [5, 9], [6, 8], [7, 8], [9, 8], [9, 10],
                    [11, 3], [11, 10], [11, 12], [12, 2], [13, 1],
                    [13, 12]]
    qc_result = transpile(qc, basis_gates=['u1', 'u2', 'u3', 'cx', 'id'],
                          coupling_map=coupling_map, optimization_level=0)
    qc.draw(output='text')

    のような図が得られる:

                      ┌──────────┐┌──────────┐┌───┐┌──────────┐┌──────────────────┐┌─┐
       (userqr0) q0|0>U2(0,pi) ├┤ U2(0,pi) ├┤ X ├┤ U2(0,pi) ├┤ U3(pi,pi/2,pi/2) ├┤M├───
                      ├──────────┤└──────────┘└─┬─┘├──────────┤└─┬─────────────┬──┘└╥┘┌─┐
       (userqr1) q1|0>U2(0,pi) ├──────────────■──┤ U2(0,pi) ├──┤ U3(pi,0,pi) ├────╫─┤M├
                      └──────────┘                 └──────────┘  └─────────────┘    ║ └╥┘
      (ancilla0) q2|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla1) q3|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla2) q4|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla3) q5|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla4) q6|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla5) q7|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla6) q8|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla7) q9|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
     (ancilla8) q10|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
     (ancilla9) q11|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
    (ancilla10) q12|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
    (ancilla11) q13|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
              c0_0: 0 ══════════════════════════════════════════════════════════════╩══╬═
    
              c0_1: 0 ═════════════════════════════════════════════════════════════════╩═

    トランスパイルされた回路(またはレイアウトが設定された他の回路)にレイアウトを表示したくない場合は、両方の関数に新しいブール値のkwarg、 with_layout (デフォルトは True )があります。 False に設定すると、出力回路のレイアウト注釈が無効になります。

  • 新しい解析パス CountOpsLongest が追加され、DAGCircuitの最長パスでの操作回数を取得できるようになった。 使用すると、プロパティ・セット・ディクショナリに count_ops_longest_path キーが追加されます。 パスマネージャーには、次のような方法で追加できる:

    from qiskit.transpiler.passes import CountOpsLongestPath
    from qiskit.transpiler.passes import CxCancellation
    from qiskit.transpiler import PassManager
    
    pm = PassManager()
    pm.append(CountOpsLongestPath())

    そして、次のような方法でプロパティセット値を介して最長パスにアクセスする:

    pm.append(
        CxCancellation(),
        condition=lambda property_set: property_set[
            'count_ops_longest_path'] < 5)

    これは、最長パスに基づいてそのパスの条件を設定する。

  • パルス・ライブラリ・モジュール qiskit.pulse.pulse_lib に、非正規化双曲線secant SamplePulse オブジェクトと非正規化双曲線secant derviative SamplePulse オブジェクトをそれぞれ作成するための2つの新しい関数 sech()sech_deriv() が追加された。

  • 新しいkwargオプション vertical_compressionQuantumCircuit.draw() メソッドと qiskit.visualization.circuit_drawer() 関数に追加された。 このオプションは text バックエンドでのみ動作します。 このオプションは、 highmedium (デフォルト)、 low のいずれかに設定することで、出力の視覚化で使用される垂直方向のスペースを調整することができます。

  • QuantumCircuit.draw() メソッドと qiskit.visualization.circuit_drawer() 関数に、新しい kwarg boolean オプション idle_wires が追加された。 すべてのドロワーバックエンドで機能する。 引出し呼び出しで idle_wires が False に設定されている場合、引出しは、出力量子回路可視化で回路要素を持たないビットを描画しない。

  • 新しい PassManager ビジュアライザー機能 qiskit.visualization.pass_mamanger_drawer() が追加された。 この関数は、 PassManager オブジェクトを受け取り、 PassManager で実行されるすべてのパスのフロー制御図を生成します。

  • PassManager を作成する際、コールバック関数を指定できるようになりました。この関数を指定すると、各パスの実行後に実行されます。 この関数は、各パス実行後のパス・マネージャーの状態を含むkwargsのセットを呼び出しごとに渡される。 現在、これらのkwargsは以下の通りである:

    • pass_ (Pass): 実行されるパス
    • dag (DAGCircuit): パスのダグ出力
    • time (float): パス実行時間
    • property_set (PropertySet): プロパティセット
    • count (int): パス実行のインデックス

    ただし、これらの引数は 0.9 リリース用に設定されたものであり、パス・マネージャーの内部を暴露しているため、将来のリリースで変更される可能性があることに注意する必要がある。

    例えば、各パスが実行された後に回路出力を視覚化するコールバック関数を作成するために使用することができます:

    from qiskit.transpiler import PassManager
    
    def my_callback(**kwargs):
        print(kwargs['dag'])
    
    pm = PassManager(callback=my_callback)

    さらに、 qiskit.compiler.transpile() を使用する場合は、コールバック関数を指定することもできます:

    from qiskit.compiler import transpile
    
    def my_callback(**kwargs):
        print(kwargs['pass'])
    
    transpile(circ, callback=my_callback)
  • qiskit.pulse.Schedule クラスに新しいメソッド filter() が追加された。 これにより、スケジュール内の指示をフィルタリングすることができます。 例えば、命令の種類でフィルタリングする:

    from qiskit.pulse import Schedule
    from qiskit.pulse.commands import Acquire
    from qiskit.pulse.commands import AcquireInstruction
    from qiskit.pulse.commands import FrameChange
    
    sched = Schedule(name='MyExperiment')
    sched.insert(0, FrameChange(phase=-1.57)(device))
    sched.insert(60, Acquire(5))
    acquire_sched = sched.filter(instruction_types=[AcquireInstruction])
  • いくつかのタイプのゲートに対する追加の分解方法。 これらの方法は、ゲートを一連のCNOTと単一量子ビットゲートに分解するために、異なる分解技術を使用する。 以下のメソッドが導入されました。

    メソッド
    説明
    QuantumCircuit.iso()m量子ビットからn量子ビットへの任意のアイソメトリを回路に追加する。 これにより、n個の量子ビットに任意のユニタリーをアタッチしたり(m=n)、n個の量子ビットの任意の状態を準備することができる( m=0 )
    QuantumCircuit.diag_gate()回路に斜めのゲートを加える
    QuantumCircuit.squ()任意の 2x2 ユニタリーを3つの回転ゲートに分解し、回路に加える
    QuantumCircuit.ucg()均一に制御されたゲート(多重化ゲートとも呼ばれる)を回路に取り付ける
    QuantumCircuit.ucx()一様に制御された(多重化されたとも呼ばれる)Rx回転ゲートを回路に取り付ける
    QuantumCircuit.ucy()均一に制御された(多重化されたとも呼ばれる)Ry回転ゲートを回路に取り付ける
    QuantumCircuit.ucz()均一に制御された(多重化されたとも呼ばれる)Rz回転ゲートを回路に取り付ける
  • Gray-SynthとPatel-Markov-Hayesアルゴリズムの追加によるCNOT-PhaseおよびCNOT-Only線形回路の合成。 これらの関数により、一次関数が与えられたCNOTゲートのみで構成される回路や、行列記述が与えられたCNOTゲートと位相ゲートのみで構成される回路を合成することができる。

  • qiskit.circuit.random モジュールに新しい関数 random_circuit が追加された。 この関数は、異なるゲートをランダムに選択して回路に追加することにより、指定されたサイズのランダムな回路を生成する。 例えば、深さ10の5量子ビット回路を生成するのに使うことができる:

    from qiskit.circuit.random import random_circuit
    
    circ = random_circuit(5, 10)
  • qiskit.compiler.transpile() 関数に新しい kwarg output_names が追加された。 このkwargは文字列または文字列のリストを取り込み、 transpile() の呼び出しによって返される出力回路の回路名の値として使用する。 例:

    from qiskit.compiler import transpile
    my_circs = [circ_a, circ_b]
    tcirc_a, tcirc_b = transpile(my_circs,
                                 output_names=['Circuit A', 'Circuit B'])

    tcirc_a と tcirc_b の name 属性はそれぞれ 'Circuit A''Circuit B' になる。

  • qiskit.quantum_info.Operatorqiskit.quantum_info.Statevector クラスに新しいメソッド equiv() が追加された。 これらのメソッドは、2番目の Operator オブジェクトまたは Statevector がグローバル位相まで等価であるかどうかをチェックするために使用される。

  • ユーザー設定ファイルにいくつかの新しいオプションが追加された:

    • circuit_drawer フィールドが自動値を受け付けるようになった。 circuit_drawer フィールドの値として設定された場合、デフォルトのドロワーバックエンドは、それが利用可能であれば mpl となり、そうでなければ text バックエンドが使われます。
    • 新しいフィールド circuit_mpl_style を使って、matplotlib の回路ドロワーが使うデフォルトのスタイルを設定することができます。 このフィールドに有効な値は、 bwdefault で、それぞれデフォルトを白黒またはデフォルトのカラースタイルに設定します。
    • 新しいフィールド transpile_optimization_level を使って、 qiskit.compiler.transpile() への呼び出しに使用するデフォルトのトランスパイラ最適化レベルを設定することができる。 値は0、1、2、3のいずれかに設定できる。
  • 新しいパルス・コマンドを導入 Delay パルスに挿入可能 Schedule。 このコマンドは duration を受け付け、任意の Channel に追加することができる。 ディレイの間、他のコマンドをチャンネルにスケジュールすることはできない。

    ディレイは他のパルス・コマンドと同様に追加できる。 例:

    from qiskit import pulse
    
    drive_channel = pulse.DriveChannel(0)
    delay = pulse.Delay(20)
    
    sched = pulse.Schedule()
    sched += delay(drive_channel)

アップグレードの注意

  • 以前は非推奨だった qiskit._util モジュールが削除された。 qiskit.util を代わりに使うべきである。

  • QuantumCircuit.count_ops() メソッドは dict の代わりに OrderedDict オブジェクトを返すようになった。 OrderedDictdict のサブクラスなので、ほとんどのユースケースで互換性があるはずだ。 しかし、タイプチェックやその他のクラスチェックは更新する必要があるかもしれない。

  • DAGCircuit.width() 、量子ビットと古典ビットの合計数を返すようになった。 以前は量子ビットの数を返すだけだった。 量子ビットの数だけが必要な場合は、 DAGCircuit.num_qubits()

  • 関数 DAGCircuit.num_cbits() は削除された。 その代わりに、 DAGCircuit.num_clbits()

  • 個々の量子ビットと古典ビットは、もはや (register, index) タプルとしては表現されない。 これらは現在、QubitとClbitクラスのインスタンスである。 個々のビットを扱う場合は、タプルの代わりにこれらの新しいクラスを探すように、使用法や型チェックを更新してください。

  • プリセットのパスマネージャークラス qiskit.transpiler.preset_passmanagers.default_pass_managerqiskit.transpiler.preset_passmanagers.default_pass_manager_simulatorqiskit.compiler.transpile() コールの以前のデフォルトパスマネージャ)は削除されました。 手動でこのパスを使用していた場合は、 qiskit.transpile.preset_passmanagers.level1_pass_manager

  • LegacySwap パスは削除された。 カスタムパスマネージャーで使用していた場合は、より高速で安定したバージョンである StochasticSwap 。 すべてのプリセット・パスマネージャーは、 LegacySwap の代わりに StochasticSwap パスを使用するように更新されました。

  • 以下の非推奨の qiskit.dagcircuit.DAGCircuit メソッドは削除されました:

    • DAGCircuit.get_qubits() - 代わりに DAGCircuit.qubits()

    • DAGCircuit.get_bits() - 代わりに DAGCircuit.clbits()

    • DAGCircuit.qasm() - qiskit.converters.dag_to_circuit()QuantumCircuit.qasm() を組み合わせて使う。 例:

      from qiskit.dagcircuit import DAGCircuit
      from qiskit.converters import dag_to_circuit
      my_dag = DAGCircuit()
      qasm = dag_to_circuit(my_dag).qasm()
    • DAGCircuit.get_op_nodes() - 代わりに DAGCircuit.op_nodes() 。 返り値の型は、 get_op_nodes() で返されていたタプルのリストではなく、 op_nodes()DAGNode オブジェクトのリストであることに注意。

    • DAGCircuit.get_gate_nodes() - 代わりに DAGCircuit.gate_nodes() 。 返り値の型は、 get_gate_nodes() で返されていたタプルのリストではなく、 gate_nodes()DAGNode オブジェクトのリストであることに注意。

    • DAGCircuit.get_named_nodes() - 代わりに DAGCircuit.named_nodes()get_named_nodes() によって返されたnode_idsのリストの代わりに、 named_nodes()DAGNode オブジェクトのリストが返されることに注意。

    • DAGCircuit.get_2q_nodes() - 代わりに DAGCircuit.twoQ_gates()get_2q_nodes() で返されていたdata_dictsのリストの代わりに、 twoQ_gates()DAGNode オブジェクトのリストが返されることに注意。

    • DAGCircuit.get_3q_or_more_nodes() - 代わりに DAGCircuit.threeQ_or_more_gates() 。 返り値の型は、 get_3q_or_more_nodes() で返されていたタプルのリストではなく、 threeQ_or_more_gates()DAGNode オブジェクトのリストであることに注意。

  • 以下の qiskit.dagcircuit.DAGCircuit メソッドでは、 node_id をパラメータとして受け付けるサポートが廃止されました。 これは削除され、現在は DAGNode オブジェクトのみが入力として受け入れられる:

    • successors()
    • predecessors()
    • ancestors()
    • descendants()
    • bfs_successors()
    • quantum_successors()
    • remove_op_node()
    • remove_ancestors_of()
    • remove_descendants_of()
    • remove_nonancestors_of()
    • remove_nondescendants_of()
    • substitute_node_with_dag()
  • qiskit.dagcircuit.DAGCircuit メソッド rename_register() は削除された。 これはすべてのqiskitコードで使われていない。 もし外部関数に依存しているのであれば、外部関数を再実装しなければならない。

  • qiskit.dagcircuit.DAGCircuit プロパティ multi_graph は削除されました。 networkx multi_graph オブジェクトへの直接アクセスはサポートされなくなりました。 代わりに DAGCircuit クラスが提供するAPIを使うべきである。

  • 非推奨の例外クラス qiskit.qiskiterror.QiskitError は削除されました。 代わりに qiskit.exceptions.QiskitError を使うべきだ。

  • qiskit.transpiler.PassManager コンストラクタの boolean kwargs、 ignore_requiresignore_preserves が削除された。 これらはもはや有効な選択肢ではない。

  • モジュール qiskit.tools.logging は取り外された。 このモジュールは何にも使われておらず、 Python の標準ライブラリ logging モジュールが提供するインターフェイスを超えるものは何もない。 ロギングにカスタムフォーマッタを設定したい場合は、代わりに標準ライブラリ logging モジュールを使用する。

  • CompositeGate クラスは削除された。 その代わりに、回路から直接命令オブジェクトを作成し、それを回路に追加する必要があります。 例えば、次のように実行できる:

    custom_gate_circ = qiskit.QuantumCircuit(2)
    custom_gate_circ.x(1)
    custom_gate_circ.h(0)
    custom_gate_circ.cx(0, 1)
    custom_gate = custom_gate_circ.to_instruction()
  • 以前は非推奨だったkwargs、 qiskit.compiler.assemble() 用の seedconfig は削除され、代わりにそれぞれ seed_simulatorrun_config

  • 以前は非推奨だったコンバーター qiskit.converters.qobj_to_circuits()qiskit.converters.circuits_to_qobj() は削除された。 代わりにそれぞれ qiskit.assembler.disassemble()qiskit.compiler.assemble()

  • 以前は非推奨だった qiskit.compiler.transpile() 用の kwarg seed_mapper は削除された。 代わりに seed_transpiler

  • これまで非推奨であった qiskit.execute() 関数の kwargs seedseed_mapperconfigcircuits は削除された。 代わりに、 seed_simulatorseed_transpilerrun_configexperiments の各引数を使用する。

  • 以前は非推奨だった qiskit.tools.qcvv モジュールは削除されました。代わりに qiskit-ignis を使ってください。

  • これまで非推奨だった関数 qiskit.transpiler.transpile()qiskit.transpiler.transpile_dag() は削除された。 代わりに qiskit.compiler.transpile を使うべきだ。 transpile_dag() を使っていた場合は、ランニングに置き換えることができる:

    circ = qiskit.converters.dag_to_circuit(dag)
    out_circ = qiskit.compiler.transpile(circ)
    qiskit.converters.circuit_to_dag(out_circ)
  • 以前は非推奨だった関数 qiskit.compile() は削除され、代わりに qiskit.compiler.transpile()qiskit.compiler.assemble() を使用する必要があります。

  • qiskit.tools.jupyter 、jupyterのセル・マジック %%qiskit_progress_bar がライン・マジックに変更された。 これはマジックがどのように使われ、どのように機能するかをよりよく反映させるために行われた。 既存のノートブックで %%qiskit_progress_bar のセルマジックを使っていた場合は、代わりに %qiskit_progress_bar に変更して、これをラインマジックに更新する必要があります。 それ以外はすべて同じように振る舞うはずだ。

  • 非推奨の関数 qiskit.tools.qi.qi.random_unitary_matrix() は削除されました。 代わりに qiskit.quantum_info.random.random_unitary()

  • 非推奨の関数 qiskit.tools.qi.qi.random_density_matrix() は削除されました。 代わりに qiskit.quantum_info.random.random_density_matrix()

  • 非推奨の関数 qiskit.tools.qi.qi.purity() は削除されました。 代わりに qiskit.quantum_info.purity()

  • 非推奨の QuantumCircuit._attach() メソッドは削除されました。 代わりに QuantumCircuit.append()

  • qiskit.qasm.Qasm メソッド get_filename() は削除された。 代わりに return_filename()

  • 非推奨の qiskit.mapper モジュールは削除されました。 関数とクラスとその代替のリストは以下の通り:

    • qiskit.mapper.CouplingMap qiskit.transpiler.CouplingMap
    • qiskit.mapper.Layout代わりに qiskit.transpiler.Layout を使うべきである
    • qiskit.mapper.compiling.euler_angles_1q()代わりに qiskit.quantum_info.synthesis.euler_angles_1q() を使うべきである
    • qiskit.mapper.compiling.two_qubit_kak() qiskit.quantum_info.synthesis.two_qubit_cnot_decompose()

    非推奨の例外クラス qiskit.mapper.exceptions.CouplingErrorqiskit.mapper.exceptions.LayoutError は、 qiskit.mapper モジュールなしでは何の役にも立たないので、代替はない。

  • qiskit.pulse.samplers モジュールは qiskit.pulse.pulse_lib.samplers に移動した。 qiskit.pulse.samplers のインポートを qiskit.pulse.pulse_lib.samplers に更新する必要がある。

  • seabornは関数 qiskit.visualization.plot_state_qsphere() の依存関係になった。 これは、視覚化のために適切な角度カラーマップを生成するために必要である。 qiskit-terra[visualization] extras install target が更新され、 seaborn>=0.9.0 がインストールされるようになった。ビジュアライゼーションを使用していて、特に plot_state_qsphere() 関数を使用している場合は、 seaborn をインストールするか、手動で以下を実行する。 pip install seaborn>=0.9.0

  • これまで非推奨だった関数 qiksit.visualization.plot_stateqiskit.visualization.iplot_state は削除された。 その代わりに、プロットタイプごとに固有の関数を使用する必要があります。 以下の表を参照して、非推奨の関数と同等の新しい関数を対応させることができる:

    キスキット・テラ 0.6
    Qiskit Terra 0.7 +
    plot_state(rho)plot_state_city(rho)
    plot_state(rho, method='city')plot_state_city(rho)
    plot_state(rho, method='paulivec')plot_state_paulivec(rho)
    plot_state(rho, method='qsphere')plot_state_qsphere(rho)
    plot_state(rho, method='bloch')plot_bloch_multivector(rho)
    plot_state(rho, method='hinton')plot_state_hinton(rho)
  • latex および latex_source 回路引出しバックエンドに対する pylatexenc および pillow の依存関係は、要件としてリストされなくなった。 latex circuit drawersを使用する場合は、両方のパッケージがインストールされていることを確認するか、setuptools extrasを使ってqiskit-terraと一緒にインストールしてください:

    pip install qiskit-terra[visualization]
  • qiskit.IBMQ または qiskit.Aer のいずれかがセットアップできなかった場合、 qiskit 名前空間のルートがインポート時に警告を発するようになった。 これは、 qiskit 名前空間にあるものがインポートされるたびに発生する。 これらの警告は、qiskitを実行しているときにqiskit-aerおよびqiskit-ibmq-providerパッケージが見つからない場合に、ユーザーに前もって明確に伝えるために追加されました。 パッケージが足りないのか、python パッケージング/pip が要素を間違ってインストールしたのかは、使おうとして ImportError が空になるまでわからないことがあります。 これらの警告は、よく使われるエイリアスが欠落している場合、前もって明確にする必要がある。

    しかし、qiskit-aerもqiskit-ibmq-providerも使わないというユーザーにとっては、これはさらなるノイズの原因になるかもしれません。 これらの警告は、 Python の標準ライブラリ warnings を使って簡単に抑制できる。 この2行をqiskitからのインポートの前に置くことで、警告を抑制することができます:

    import warnings
    warnings.filterwarnings('ignore', category=RuntimeWarning,
                            module='qiskit')

    これにより、qiskit-aerやqiskit-ibmq-providerがインストールされていない場合に発生する警告は抑制されますが、qiskitやその他のパッケージによって発生するその他の警告は保持されます。

非推奨のメモ

  • UCX ゲートは非推奨。 もしあなたのコードでこれらのゲートを使っているなら、代わりに u3cx 。 例えば、回路ゲート関数 circuit.u_base()circuit.cx_base() を使用している場合、それぞれ circuit.u3()circuit.cx() に更新する必要があります。

  • u0 ゲートは非推奨となり、複数の iden ゲートを使用するようになった。 あなたの回路で u0 ゲートを使用している場合は、 iden を使用するように呼び出しを更新する必要があります。 例えば、以前の回路で circuit.u0(2)

    circuit.iden()
    circuit.iden()

    代わりに使用します。

  • qiskit.pulse.DeviceSpecification クラスは現在非推奨。 代わりに qiskit.pulse.PulseChannelSpec を使うべきだ。

  • インデックスによる qiskit.circuit.Qubitqiskit.circuit.Clbitqiskit.circuit.Bit クラスへのアクセスは非推奨です(これらのクラスが置き換わった (register, index) タプルとの互換性のため)。 代わりに registerindex

  • qiskit.QuantumCircuit メソッド append にタプル (register, index) としてビットを渡すことは非推奨である。 代わりにビット・オブジェクトを直接使うべきである。

  • タプル (register, index)qiskit.transpiler.Layout オブジェクトの要素へのアクセスは非推奨。 その代わりに、ビット・オブジェクトを直接使うべきである。

  • qiskit.transpiler.Layout コンストラクタのメソッド qiskit.transpiler.Layout.from_tuplelist() は非推奨。 代わりにコンストラクタ qiskit.transpiler.Layout.from_qubit_list()

  • モジュール qiskit.pulse.ops は廃止されました。 それが提供するすべての機能:

    • union
    • flatten
    • shift
    • insert
    • append

    は、 qiskit.pulse.Scheduleqiskit.pulse.Instruction クラスで直接利用できる同等のメソッドを持っている。 それらの方法を代わりに使うべきである。

  • qiskit.qasm.Qasm メソッド get_tokens() は非推奨。 その代わり、 generate_tokens()

  • qiskit.qasm.qasmparser.QasmParser メソッド get_tokens() は非推奨。 その代わり、 read_tokens()

  • Qobjクラスの as_dict() メソッドは非推奨となり、今後削除される予定です。 その代わりに to_dict()

バグ修正

  • CU3Gate の定義は、統制された U3Gate の正規の定義と同等に変更された。

  • パス・マネージャーにおけるレイアウトの扱いが標準化された。 これにより、レイアウトの処理に関するいくつかの問題が修正された。 qiskit.compiler.transpile()qiskit.execute()initial_layout kwarg パラメーターは、回路をトランスパイルする際に、回路からデバイス上の希望する量子ビットに配置します。

  • BasicAer シミュレータにn-qubitユニタリーのサポートが追加され、シミュレータの基底ゲートのセットに unitary (任意のユニタリーゲート)が追加された

  • qiskit.visualization.plost_state_qsphere() 、いくつかの問題が修正された。 Q Sphereの可視化出力が正しく生成されるようになり、以下の点が更新されました:

    • すべての相補的な基底状態は対蹠的である

    • 位相は球面上のラインとマーカーの色で示される


    • 確率はその線とマーカーの体積の半透明度によって示される

      球面

その他の注意事項

  • qiskit.compiler.transpile()qiskit.execute() のデフォルト PassManager は、 qiskit.transpile.preset_passmanagers.level1_pass_manager で定義された最適化レベル 1 パス・マネージャーに変更された。

  • すべての回路描画バックエンドは、出力ビジュアライゼーションにおいて、回路のゲート・パラメータをπの公分数として表現するようになった。 パラメータの値が円周率の分数で表せる場合は、数値の代わりにそれが使われる。

  • qiskit.assembler.assemble_schedules() を使用する場合、使用する memory_slots の数を指定しないと、入力スケジュールの獲得数に基づいて数が推測されます。

  • qiskit.dagcircuit.DAGCircuit プロパティ node_counter の非推奨警告が削除されました。 警告された動作の変更は、警告が追加された時点で有効になっていたため、変更されたことを警告しても何の意味もない。

  • PassManager.run() を呼び出すと、各パスの実行に対して INFO レベルの python ロギングメッセージが出力されるようになりました。 これらのメッセージには、パス名とパスの合計実行時間が含まれます。 Python の標準ロギングが使用されたのは、Qiskit-Terraのロギングが他のアプリケーションやライブラリと標準的な方法で統合できるためです。 トランスパイラのロギングはすべて、 logging.getLogger('qiskit.transpiler) が使用する qiskit.transpiler 名前空間の下で行われる。 例えば、トランスパイラのDEBUGレベルのロギングを有効にするには、次のように実行します:

    import logging
    
    logging.basicConfig()
    logging.getLogger('qiskit.transpiler').setLevel(logging.DEBUG)

    これは、トランスパイラのログレベルをDEBUGに設定し、これらのメッセージを標準エラー出力するように設定します。

エア 0.3

  • 新しい高性能密度行列シミュレーターがあり、私たちの騒音モデルと組み合わせて使用することで、より現実のシナリオをシミュレートすることができます。
  • マトリックス・プロダクト・ステート(MPS)シミュレーターを追加しました。 MPSは、強い相関や高度なもつれ状態が存在する場合でも、いくつかのクラスの量子回路を効率的にシミュレーションできる。 MPSが適用可能なケースでは、数百量子ビット以上の回路を、観測値の期待値を求める目的などで、正確にシミュレートすることができる。
  • スナップショットはすべてのシミュレーターで実行できます。
  • これで、理想的な回路だけでなく、読み出し誤差のあるサンプリング回路も測定できるようになった。
  • ノイズの存在に伴う回路の最適化をいくつか増やした。
  • より良い2量子ビット誤差近似が含まれている。
  • ノイジーなシミュレーションをより簡単に、より高速に行うためのツールも含まれている。
  • 浮動小数点の数値精度をあまり必要としないシミュレーションでパフォーマンスが向上。

イグニス 0.2

新機能

バグ修正

  • RBフィットエラーのバグを修正
  • フィッティングする量子ビットインデックスを選択する際の特性フィッティングのバグを修正

その他の注意事項

  • 測定緩和が複数の結果に適用された場合、並行して動作するようになりました
  • RBフィッターの推測値が向上

アクア 0.6

追加

  • 相対相トッフォリゲート rccx (2コントロールあり)、 rcccx (3コントロールあり)。

  • 変分形式 RYCRX

  • mct への新しい 'basic-no-ancilla' モード。

  • マルチ制御回転ゲート mcrx, mcry, および mcrz 一般的な u3 ゲートとしては、グレイコードの実装ではサポートされていません

  • 化学ROHFオープンシェル

    • すべてのドライバーに対応しています: Gaussian16 PyQuante, PySCF および PSI4
    • HartreeFock 初期状態、UCCSD変分形式、パリティマッピングのための2量子ビット削減が、オープンシェルをサポートするために異なるアルファ粒子数とベータ粒子数をサポートするようになりました
  • 化学UHFオープンシェル対応

    • すべてのドライバーに対応しています: Gaussian16 PyQuante, PySCF および PSI4
    • QMoleculeが拡張され、個別のベータに対する積分や係数などを含むようになった
  • 化学QMoleculeに原子軌道基準の積分が追加され、実験へのアクセスが容易になりました

    • すべてのドライバーに対応しています: Gaussian16 PyQuante, PySCF および PSI4
  • 化学: PyQuante および PySCF ドライバの追加設定

    • 収束許容値と最大収束反復制御。
    • PySCF 初期推測の選択について
  • 化学: PyQuante および PySCF の計算からデバッグログに処理出力が追加されました ( Gaussian16 および PSI4 の出力はすでにデバッグログに追加されていました)

  • 化学qiskit-chemistry を qiskit-aqua にマージした

  • MatrixOperator, WeightedPauliOperator , TPBGroupedPauliOperator クラスを追加。

  • evolution_instruction 関数を追加し、時間発展のレジスタレス命令を得る。

  • op_converter モジュールを追加し、異なるタイプの演算子の変換を担当する場所を統一。

  • Z2 シンメトリー情報をカプセル化し、Operatorをテーパリングするためのヘルパーメソッドを持つ Z2Symmetries クラスを追加しました。

  • 振幅推定:最尤ポスト処理と信頼区間計算を追加。

  • 最尤振幅推定(MLAE):最尤推定に基づく新しい振幅推定アルゴリズムを実装し、必要な量子ビット数と回路深度を削減。

  • (区分的)線形および多項式に制御されたパウリ回転回路を追加。

  • 分子の励起状態を研究するために q_equation_of_motion 、参照状態を準備するために2つのアルゴリズムを追加する。

変更

  • 中間結果を構築するために相対位相トッフォリゲートを使用することにより、 mct'の 'basic' モードを改善する。
  • Qiskit Terraの新しく導入された Qubit クラスに適応する。
  • QPE/IQPE が入力 Operator オブジェクトを変更できないようにする。
  • PyEDA 対応するオラクルの基本的な論理演算は SymPy で処理されるようになった。
  • Operator クラスをリファクタリングし、各表現は独自のクラス MatrixOperatorWeightedPauliOperatorTPBGroupedPauliOperator を持つ。
  • evolution_instructionpower は、CRZゲートのシータに直接適用されていたが、新しいバージョンは、パワーを実装するために回路を繰り返す。
  • CircuitCache はデフォルトではオフで、環境変数 QISKIT_AQUA_CIRCUIT_CACHE で設定できる。

バグ修正

  • 1 の値が1つしかない真理値表に対して、 TruthTableOracle が誤った回路を構築してしまうバグ。
  • PyEDAの不確定性によるバグ。
  • QPE/IQPEの平行移動と伸張の計算にバグがあった。
  • 化学:Bravyi-Kitaevマッピングは量子ビット数が2のべき乗でない場合に修正された
  • QuantumInstanceinitial_layout をリストで設定する。

削除済み

  • 一般的な多制御回転ゲート mcu3 は取り除かれ、多制御回転ゲート mcrxmcry、および mcrz

非推奨

  • Operator クラスは非推奨となり、 MatrixOperatorWeightedPauliOperatorTPBGroupedPauliOperator の使用が推奨されます。

IBM Q プロバイダー 0.3

変更なし

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