Skip to main content
IBM Quantum Platform

Qiskit 0.25 リリースノート


0.25.4

Terra 0.17.2

前奏曲

これは、 0.17.1 リリースからのいくつかの問題を修正したバグフィックスリリースです。 このリリースで最も重要なのは QuantumInstance クラスの互換性を修正しました。 BackendV1 をベースにしたバックエンドで実行する場合の互換性を修正しました。 これにより、次のようなアルゴリズムやアプリケーションがすべて修正される。 qiskit.algorithms または qiskit.opflow で構築されたすべてのアルゴリズムとアプリケーションを修正します。

バグ修正

エア 0.8.2

変更なし

イグニス 0.6.0

変更なし

アクア 0.9.1

変更なし

IBM Q プロバイダー 0.12.3

変更なし


0.25.3

Terra 0.17.1

変更なし

エア 0.8.2

既知の問題

  • QasmSimulatorAerSimulator の extended_stabilizer メソッドにおいて、特定のパウリ演算子成分に対して不正な値を返すため、 SaveExpectationValueSaveExpectationValueVariance が無効化されました。 詳しくは#1227 <https://github.com/Qiskit/qiskit-aer/issues/1227> を参照。

バグ修正

  • basis_gates コンフィギュレーション属性の設定方法に関するパフォーマンスの問題を修正。 以前はバックエンドクラスに意図しない副作用があり、シミュレーションの繰り返し実行時間が漸増することがありました。 詳しくは#1229 <https://github.com/Qiskit/qiskit-aer/issues/1229> を参照。
  • "multiplexer" シミュレータ命令において、ターゲット量子ビットとコントロール量子ビットの順序がQiskit命令の順序と逆になっていたバグを修正。
  • 0.8.0、GPUシミュレーションでGPUメモリに加えて不要なホスト・メモリが割り当てられるバグが修正されました。
  • QasmSimulatorAerSimulatorstabilizer シミュレーターメソッドにおいて、 save_expectation_valuesnapshot_expectation_value の期待値が特定の Y パウリに対して誤った符号を持つ可能性があるバグを修正。

イグニス 0.6.0

変更なし

アクア 0.9.1

変更なし

IBM Q プロバイダー 0.12.3

変更なし


0.25.2

Terra 0.17.1

変更なし

エア 0.8.1

変更なし

イグニス 0.6.0

変更なし

アクア 0.9.1

変更なし

IBM Q プロバイダー 0.12.3

その他の注意事項

  • qiskit.providers.ibmq.experiment.analysis_result.AnalysisResult fit 属性がオプションになった。

0.25.1

Terra 0.17.1

前奏曲

これは、 0.17.0 リリースからのいくつかの問題を修正したバグフィックスリリースです。 このリリースで最も重要なのは、 0.17.0 リリースで誤って構築された sdist パッケージが修正されたことです。このパッケージは実際にはビルド可能ではなく、プリコンパイルされたバイナリが利用できないプラットフォームでのインストールをブロックしていました。

バグ修正

  • 出力に global_phase 属性が出力 QuantumCircuit オブジェクトに保存されない問題を修正しました。 qiskit.circuit.QuantumCircuit.reverse_bits() メソッドが呼び出されたときに 例:

    import math
    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(3, 2, global_phase=math.pi)
    qc.h(0)
    qc.s(1)
    qc.cx(0, 1)
    qc.measure(0, 1)
    qc.x(0)
    qc.y(1)
    
    reversed = qc.reverse_bits()
    print(reversed.global_phase)

    π\pi を正しく印刷するようになった。

  • トランスパイラのパス Unroller が、定義に1つのルールを含むネストされた命令の場合にグローバル・フェーズを保持しなかった問題を修正しました。 修正 #6134

  • parameter 属性が、 オブジェクトのユニタリー行列に設定されていなかった問題を修正しました。 ControlledGateUnitaryGate 属性が UnitaryGate オブジェクトのユニタリー行列に設定されていなかった問題を修正しました。 以前は、 control() ControlledGate を構築していた。 parameter 属性は、 UnitaryGate 行列の制御バージョンに設定されていた。 これにより、ベースとなる UnitaryGate オブジェクトの parameter が変更され、それに続く inverse() を呼び出すと、ダブル・コントロール UnitaryGate の逆が作成されることになる。 5750を修正

  • プリセット・パス・マネージャーに関する問題を修正 level_0_pass_managerlevel_1_pass_manager (の optimization_level 0 と 1 に相当)の問題を修正しました。 transpile())で、要求されたベースでない回路が生成される場合があった問題を修正した。

  • 学習率と摂動の自動較正で SPSA を学習率と摂動の自動較正(つまり learning_rateperturbation はイニシャライザーで None )、今後のすべての最適化のためにキャリブレーションを保存します。 その代わり、キャリブレーションは新しい目的関数ごとに行う必要がある。

エア 0.8.1

バグ修正

  • AerSimulatorQasmSimulator シミュレータの matrix_product_state メソッドを使用する際、クラウスエラーでノイズの多いシミュレーションを実行する際の問題を修正しました。 以前の行列積状態シミュレーション法では、クラウス行列を適用した後、隣接する量子ビットに変化が伝播しなかった。 これは、シミュレーションからの出力が正しくなるように修正された。 1184と #1205を修正
  • qiskit.extensions.Initialize 命令が、 AerSimulator および QasmSimulator シミュレータの statevector および matrix_product_state シミュレーションメソッドの測定サンプリング最適化を、それが最初の回路命令であっても、すべての量子ビットに適用され、したがって決定論的であっても、無効にしてしまう問題を修正しました。 修正 #1210
  • AerSimulator および QasmSimulator シミュレータの extended_stabilizer シミュレーション・メソッドで SaveStatevector および SnapshotStatevector 命令を使用すると、正規化されていない状態ベクトルが返される問題を修正しました。 #1196を修正
  • matrix_product_state シミュレーション・メソッドには、これまでなかったセット・ステート命令( qiskit.providers.aer.library.SetMatrixProductState )がサポートされ、回路のシミュレーション・ステートを設定できるようになりました。

イグニス 0.6.0

変更なし

アクア 0.9.1

IBM Q プロバイダー 0.12.2

変更なし


0.25.0

このリリースはQiskit Aquaプロジェクトを正式に非推奨とします。 従って、将来のリリースでは、 qiskit-aqua パッケージは Qiskit メタパッケージから削除されます。つまり、その将来のリリースでは、 pip install qiskitqiskit-aqua を含まなくなります。 qiskit-aquaが提供するアプリケーションモジュールは、いくつかの新しいパッケージに分割された: qiskit-optimization qiskit-nature, qiskit-machine-learning, および qiskit-finance。 これらのパッケージは、単独でインストールすることもできる(標準のpip installコマンドで、例えば pip install qiskit-nature ) またはQiskitメタパッケージの残りの部分をオプションのエクストラとして(例えば pip install 'qiskit[finance,optimization]' または pip install 'qiskit[all]' コア・アルゴリズムと演算子フローは現在、qiskit-terraの一部として以下の場所に存在する。 qiskit.algorithmsqiskit.opflow. Aquaの既存の使用方法に応じて、アプリケーションパッケージまたはQiskit Terraの新しいモジュールを使用する必要があります。 Qiskit Aquaからの移行方法については、 移行ガイドをご参照ください。

Terra 0.17.0

前奏曲

Qiskit Terra 0.17.0 には多くの新機能とバグ修正が含まれています。 今回のリリースの主な新機能は qiskit.algorithmsqiskit.opflowqiskit.aqua モジュールの導入である。

新機能

  • qiskit.pulse.call() 、パラメータ化されたサブルーチンと共に Parameter オブジェクトとパラメータ化されたサブルーチンを受け取ることができます。 これにより Parameter オブジェクトに異なる値を割り当てることができる。

    例:

    from qiskit.circuit import Parameter
    from qiskit import pulse
    
    amp = Parameter('amp')
    
    with pulse.build() as subroutine:
        pulse.play(pulse.Gaussian(160, amp, 40), DriveChannel(0))
    
    with pulse.build() as main_prog:
        pulse.call(subroutine, amp=0.1)
        pulse.call(subroutine, amp=0.3)
  • には新しいフィールドがある。 qiskit.providers.models.QasmBackendConfiguration には新しいフィールド processor_type が追加された。このフィールドは、バックエンドのプロセッサーに関する情報を提供するために、 {"family": <str>, "revision": <str>, segment: <str>} という形式で使用することができる。 例: {"family": "Canary", "revision": "1.0", segment: "A"}

  • が追加された。 qiskit.pulse.Scheduleqiskit.pulse.Instructionqiskit.pulse.Channel の各クラスには、 parameter プロパティが追加されました。 Parameter プロパティを持つようになった。 is_parameterized()True メソッドが追加されました。

    例:

    from qiskit.circuit import Parameter
    from qiskit import pulse
    
    shift = Parameter('alpha')
    
    schedule = pulse.Schedule()
    schedule += pulse.SetFrequency(shift, pulse.DriveChannel(0))
    
    assert schedule.is_parameterized() == True
    print(schedule.parameters)
  • を追加した。 PiecewiseChebyshev を追加した。 qiskit.circuit.library を追加し、入力関数の区分的チェビシェフ近似を実装。 与えられた関数 f(x)f(x) と次数 dd に対して、このクラスは与えられた区間上の f(x)f(x) に対する nn クビット上の区分的多項式チェビシェフ近似を実装します。 近似の多項式はすべて次数 dd

    例:

    import numpy as np
    from qiskit import QuantumCircuit
    from qiskit.circuit.library.arithmetic.piecewise_chebyshev import PiecewiseChebyshev
    f_x, degree, breakpoints, num_state_qubits = lambda x: np.arcsin(1 / x), 2, [2, 4], 2
    pw_approximation = PiecewiseChebyshev(f_x, degree, breakpoints, num_state_qubits)
    pw_approximation._build()
    qc = QuantumCircuit(pw_approximation.num_qubits)
    qc.h(list(range(num_state_qubits)))
    qc.append(pw_approximation.to_instruction(), qc.qubits)
    qc.draw(output='mpl')
  • その BackendProperties クラスには現在 readout_length() 指定された量子ビットの読み出し長さ [(秒)] を返すメソッドです。

  • 新しいクラス ScheduleBlockqiskit.pulse モジュールに追加された。 このクラスはパルス・プログラムの新しい表現を提供する。 この表現はパルス・ビルダー構文に最も適しており、相対命令順序に基づいている。

    この表現では、各命令の開始時間( t0 )を指定する代わりに、 alignment_context 。 命令の開始時間は、指定された変換と命令の相対位置で暗黙的に割り当てられる。

    つまり ScheduleBlock は遅延命令スケジューリングを可能にする。つまり、命令の持続時間に任意のパラメーターを割り当てることができる。

    例:

    from qiskit.pulse import ScheduleBlock, DriveChannel, Gaussian
    from qiskit.pulse.instructions import Play, Call
    from qiskit.pulse.transforms import AlignRight
    from qiskit.circuit import Parameter
    
    dur = Parameter('rabi_duration')
    
    block = ScheduleBlock(alignment_context=AlignRight())
    block += Play(Gaussian(dur, 0.1, dur/4), DriveChannel(0))
    block += Call(measure_sched)  # subroutine defined elsewhere

    このコードは、ガウスパルスの持続時間をスキャンし、その後に測定( measure_sched )を行う実験、すなわちラビ実験を定義している。 block オブジェクトは、ターゲット期間値を割り当てることで、スキャンした期間ごとに再利用できます。

  • に新しい関数 array_to_latex() を追加した。 qiskit.visualization モジュールを追加した。この関数を使うと、 LaTeX でベクトルや行列を表現し、視覚化することができる。

    from qiskit.visualization import array_to_latex
    from numpy import sqrt, exp, pi
    mat = [[0, exp(pi*.75j)],
           [1/sqrt(8), 0.875]]
    array_to_latex(mat)
  • その StatevectorDensityMatrix クラスには draw() メソッドが追加され、オブジェクトをテキスト行列、IPython Latexオブジェクト、Latexソース、Q-球、Bloch球、Hintonプロットとして描画できるようになりました。 デフォルトでは、出力タイプは __repr__ からの同等の出力であるが、このデフォルトは、 state_drawer オプションを設定することにより、ユーザー設定ファイルで変更することができる。 例:

    from qiskit.quantum_info import DensityMatrix
    dm = DensityMatrix.from_label('r0')
    dm.draw('latex')
    from qiskit.quantum_info import Statevector
    sv = Statevector.from_label('+r')
    sv.draw('qsphere')

    さらに draw() メソッドがこれらのクラスの ipython 表示に使われるようになりました。 Statevector または DensityMatrix オブジェクトがjupyterノートブックに表示されるとき、その出力タイプがオブジェクトに使われます。

  • パルス qiskit.pulse.Instruction オブジェクトとパラメトリック・パルス・オブジェクト(例 Gaussian の使用がサポートされました。 ParameterParameterExpressionduration オブジェクトをサポートするようになりました。 例:

    from qiskit.circuit import Parameter
    from qiskit.pulse import Gaussian
    
    dur = Parameter('x_pulse_duration')
    double_dur = dur * 2
    rx_pulse = Gaussian(dur, 0.1, dur/4)
    double_rx_pulse = Gaussian(double_dir, 0.1, dur/4)

    パラメータ化された命令( duration )を作成することはできますが、束縛されていないパラメータを持つ命令( duration )をスケジュールに追加することは、新しく導入された表現でのみサポートされていることに注意してください。 ScheduleBlock. 詳細については、既知の問題のリリースノートをご覧ください。

  • その run() のメソッドは QasmSimulatorPy, StatevectorSimulatorPyおよび UnitarySimulatorPy バックエンドのメソッドは QuantumCircuit (または QuantumCircuit オブジェクトのリスト)を入力として受け取るようになった。 以前の QasmQobj オブジェクトは今のところまだサポートされているが、将来のリリースでは非推奨となる予定だ。

    この使い方の例については、こちらを参照のこと:

    from qiskit import transpile, QuantumCircuit
    
    from qiskit.providers.basicaer import BasicAer
    
    backend = BasicAer.get_backend('qasm_simulator')
    
    circuit = QuantumCircuit(2)
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.measure_all()
    
    tqc = transpile(circuit, backend)
    result = backend.run(tqc, shots=4096).result()
  • トランス CommutativeCancellation トランスパイラ・パスは、コンストラクタ basis_gates に新しいオプションのkwargを持ち、ターゲット・バックエンドの基底ゲート名のリストを受け取ります。 指定すると、パスは basis_gates kwargのゲートのみを使用する。 以前は、パスが自動的に次のゲートと入れ替わっていた。 ZGateU1Gate を無条件に置換していた。 basis_gates kwargでは、これを避けるために、ターゲット・ベースに存在するZ回転ゲートを指定することができる。

  • クラスとサブクラスのコンストラクタは Bit クラスおよびサブクラスのコンストラクタです、 Qubit, Clbitおよび AncillaQubitのコンストラクタが更新され、2つのパラメータ registerindex がオプションになりました。 これにより、レジスタに依存しないビット・オブジェクトの作成が可能になる。

  • 新しいクラス BooleanExpressionqiskit.circuit.classicalfunction モジュールに追加された。 このクラスは、 Python ブーリアン式からオラクルを作成することができます。 例:

    from qiskit.circuit import BooleanExpression, QuantumCircuit
    
    expression = BooleanExpression('~x & (y | z)')
    circuit = QuantumCircuit(4)
    circuit.append(expression, [0, 1, 2, 3])
    circuit.draw('mpl')
    circuit.decompose().draw('mpl')

    また BooleanExpression にはメソッドもある、 from_dimacs_file()メソッドがあり、 DIMACS-CNF 形式で記述された数式を読み込むことができる。 例:

    from qiskit.circuit import BooleanExpression, QuantumCircuit
    
    boolean_exp = BooleanExpression.from_dimacs_file("simple_v3_c2.cnf")
    circuit = QuantumCircuit(boolean_exp.num_qubits)
    circuit.append(boolean_exp, range(boolean_exp.num_qubits))
    circuit.draw('text')
         ┌───────────────────┐
    q_0:0
         │                   │
    q_1:1
         │  SIMPLE_V3_C2.CNF │
    q_2:2
         │                   │
    q_3:3
         └───────────────────┘
    circuit.decompose().draw('text')
    q_0: ──o────o────────────
           │    │
    q_1: ──■────o────■───────
           │    │    │
    q_2: ──■────┼────o────■──
         ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
    q_3: ┤ X ├┤ X ├┤ X ├┤ X ├
         └───┘└───┘└───┘└───┘
  • 新しいクラスを追加しました、 PhaseOracleqiskit.circuit.library モジュールに追加されました。 このクラスは、 Python 論理式から位相オラクル回路を構築することができます。

    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    oracle = PhaseOracle('x1 & x2 & (not x3)')
    oracle.draw('mpl')

    これらのフェイズオークルは、より大きなアルゴリズムの一部として使用することができる。 qiskit.algorithms.AmplificationProblem:

    from qiskit.algorithms import AmplificationProblem, Grover
    from qiskit import BasicAer
    
    backend = BasicAer.get_backend('qasm_simulator')
    
    problem = AmplificationProblem(oracle, is_good_state=oracle.evaluate_bitstring)
    grover = Grover(quantum_instance=backend)
    result = grover.amplify(problem)
    result.top_measurement

    クラスには PhaseOracle クラスには from_dimacs_file() メソッドもあり、 DIMACS-CNF 形式の数式を記述するファイルからフェーズ・オラクルを構築できます。

    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    oracle = PhaseOracle.from_dimacs_file("simple_v3_c2.cnf")
    oracle.draw('text')
    state_0: ─o───────o──────────────
              │ ┌───┐ │ ┌───┐
    state_1: ─■─┤ X ├─■─┤ X ├─■──────
              │ └───┘   └───┘ │ ┌───┐
    state_2: ─■───────────────o─┤ Z ├
                                └───┘
  • すべてのトランスパイラー・パスが(つまり BasePass のインスタンスが)直接呼び出せるようになった。 パスの呼び出しは、パスを QuantumCircuit オブジェクト上でパスを実行するための便利なインターフェイスを提供します。

    例えば、次のような単一の変換パスを実行する。 BasisTranslatorで実行できる:

    from qiskit import QuantumCircuit
    from qiskit.transpiler.passes import BasisTranslator
    from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
    
    circuit = QuantumCircuit(1)
    circuit.h(0)
    
    pass_instance = BasisTranslator(sel, ['rx', 'rz', 'cx'])
    result = pass_instance(circuit)
    result.draw(output='mpl')

    分析パスを実行する際、プロパティセット( dict または PropertySet )をパラメータとして追加する必要があり、"インプレース "で変更される可能性があります。 例:

    from qiskit import QuantumCircuit
    from qiskit.transpiler.passes import Depth
    
    circuit = QuantumCircuit(1)
    circuit.h(0)
    
    property_set = {}
    pass_instance = Depth()
    pass_instance(circuit, property_set)
    print(property_set)
  • この QasmQobjConfig クラスは meas_levelmeas_return に対してオプションの kwarg を持つようになった。 これらのフィールドを使用することで QasmQobj これらのフィールドを使用することで、回路ジョブの meas_level=1 (カーネル化されたデータ)をサポートするジョブペイロードを生成できるようになります(以前はオブジェクトに対してのみ公開されていました)。 PulseQobj オブジェクトに対してのみ公開されていた)。 この assemble() 関数が更新され QasmQobj オブジェクトに対してこのフィールドを設定するように更新されました。

  • 新しい tensor() メソッドが QuantumCircuit クラスに追加されました。 この方法は、既存の回路に別の回路をテンソリングすることを可能にする。 この方法は qiskit.quantum_info.Operator.tensor() であり、Qiskitのリトルエンディアンの規約と一致している。

    例:

    from qiskit import QuantumCircuit
    top = QuantumCircuit(1)
    top.x(0);
    bottom = QuantumCircuit(2)
    bottom.cry(0.2, 0, 1);
    bottom.tensor(top).draw(output='mpl')
  • この qiskit.circuit.QuantumCircuit クラスは、任意の自由形式のメタデータをサポートするようになりました。 metadata 属性で任意の自由形式のメタデータをサポートするようになりました。 ユーザー(または QuantumCircuitまたはその上に構築されたプログラム)は、回路を追跡するために使用するメタデータを回路に添付することができる。 例:

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2, user_metadata_field_1='my_metadata',
                        user_metadata_field_2='my_other_value')

    または:

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.metadata = {'user_metadata_field_1': 'my_metadata',
                   'user_metadata_field_2': 'my_other_value'}

    このメタデータは、回路の実行に影響を与えるために使用されるのではなく、オブジェクトの寿命の間、回路を追跡するために使用されるだけである。 metadatatranspile()assemble(). プロバイダーに期待されるのは、返される結果にメタデータを関連付けることである。そうすれば、ユーザーは現在 QuantumCircuit.name でできるのと同じように、回路のメタデータに基づいて結果をフィルタリングできる。

  • 新しい演算子クラスの追加 CNOTDihedralqiskit.quantum_info モジュールに追加されました。 このクラスは、量子ゲートによって生成されるCNOT-Dihedral群を表すのに使われる。 CXGate, TGateXGate.

  • & (__and__) 二項演算子を BaseOperator サブクラス (例 qiskit.quantum_info.Operator)に二項演算子を追加します。 qiskit.quantum_info モジュールに追加します。 これは、クラス compose() メソッドを呼び出すための省略記法です (つまり A & B == A.compose(B))。

    例:

    import qiskit.quantum_info as qi
    
    qi.Pauli('X') & qi.Pauli('Y')
  • & (__and__) 二項演算子を追加します。 qiskit.quantum_info.Statevector および qiskit.quantum_info.DensityMatrix クラスに追加します。 これは、クラス evolve() メソッドを呼び出すための省略記法です (つまり psi & U == psi.evolve(U))。

    例:

    import qiskit.quantum_info as qi
    
    qi.Statevector.from_label('0') & qi.Pauli('X')
  • 新しい2量子ビットゲートが追加された、 ECRGateモジュールに追加された。 qiskit.circuit.library モジュールに追加された、 ecr() が追加されました。 QuantumCircuit クラスが追加されました。 ECRゲートは、2つの CR(π4)CR(\frac{π}{4}) パルスで、その間にエコーを発生させる。 XGate エコー用 このゲートは CXGate (と等価である(ローカルの前後回転でCNOTに変換できる)。 これは、現在の IBM ハードウェア上のネイティブゲートであり、これにコンパイルすることで、プリ/ポスト回転を回路の残りの部分にマージすることができる。

  • に新しいkwarg approximation_degree が追加された。 transpile() 関数に追加された。 有効な値は0から1の範囲で、大きいほど近似度が低いことを意味する。 これは、回路近似を実験するための発見的なダイヤルである。 この数値の具体的な解釈は各パスに委ねられ、各パスはこの数値を使ってパスの近似バージョンを実行することができる。 具体例としては UnitarySynthesis パスや、離散ゲートセットへのトランスレータなどがある。 パスがこのオプションをサポートしていない場合、正確な変換を意味する。

  • 2つの新しいトランスパイラー・パッセージ GateDirectionqiskit.transpiler.passes.CheckGateDirectionqiskit.transpiler.passes モジュールに追加された。 これらの新しいパスは、 CXDirectionCheckCXDirection (どちらも現在は非推奨。詳細は非推奨ノートを参照)の、より一般的な置き換えとなるよう意図されており、同じ機能を実行するが、他のゲートでも動作する。 CXGate.

  • Windows上で実行する場合 parallel_map() 関数の並列実行が有効になりました(デフォルトではまだ無効です)。 これを行うには、ユーザー設定ファイルで parallel = True を設定するか、 QISKIT_PARALLEL 環境変数を TRUE に設定する(これは transpile()assemble() にも影響します。 parallel_map() を内部的に使用する)。 Windowsで並列実行を有効にする場合、 Python Windowsのプロセス起動方法に関する制限があることに注意することが重要です。Windowsでの並列実行に関する制限の詳細については、以下の「既知の問題」セクションを参照してください。

  • 新しい関数 hellinger_distance()モジュールが追加されました。 qiskit.quantum_info モジュールに追加された。

  • モジュールの decompose_clifford()qiskit.quantum_info 関数(これは qiskit.quantum_info.Clifford.to_circuit() メソッドによって内部的に使用される)には新しいkwarg method があり、これを 'AG' または 'greedy' に設定することで使用する合成メソッドを選択することができる。 デフォルトでは、3量子ビット以上の場合、 'greedy' 。これは、Bravyiらによるクリフォード要素合成のための非最適な貪欲コンパイルルーチンを使用している。 ...そして..、 これは、以前使われていたAaronson-Gottesman法(2つ以上の量子ビットの場合)と比較して、一般的に優れたCXコストをもたらす。 method='AG' を設定することで、 method kwarg を使って、以前のデフォルトのアロンソン・ゴッテスマン法に戻すことができる。

  • モジュールの Initializeqiskit.extensions モジュールのクラスが整数を用いて構築できるようになった。 整数の'1'ビットは、対応する量子ビットの回路に ResetXGate を挿入する。 これはqiskitの標準的なリトルエンディアンの慣例で行われる。つまり、整数の右端のビットがqubit 0に設定される。 例えば、 Initialize のパラメーターを 5 に設定すると、量子ビット0と2が値1に設定される。

    from qiskit.extensions import Initialize
    
    initialize = Initialize(13)
    initialize.definition.draw('mpl')
  • モジュールの Initializeqiskit.extensions モジュールの qiskit.quantum_info.Statevector.from_label() メソッドに似ている)。 パウリのラベルは、パウリ固有状態Z、X、Yの基底状態を指す。 これらのラベルはQiskitの標準的なリトルエンディアン表記を使用します。例えば、 '01' というラベルは、qubit 0を 1|1\rangle、qubit 1を 0|0\rangle に初期化します。

    from qiskit.extensions import Initialize
    
    initialize = Initialize("10+-lr")
    initialize.definition.draw('mpl')
  • のコンストラクタのクワーグ、 template_list は、トランスパイラ・パスのコンストラクタのためのクワーグである。 qiskit.transpiler.passes.TemplateOptimization トランスパイラ・パスのコンストラクタのkwargが QuantumCircuitDAGDependency オブジェクトのリストの取り込みに対応した。 以前は QuantumCircuit オブジェクトに変換されていた)。 DAGDependency オブジェクト)だけが入力リストで受け入れられた。

  • 新しいトランスパイラー・パス qiskit.transpiler.passes.RZXCalibrationBuilder較正を生成し、量子回路に追加することができます。 このパスでは、較正された CXGate オブジェクトのキャリブレーションを作成します。 qiskit.circuit.library.RZXGate オブジェクトのキャリブレーションを作成します。 スケジュールは、エコー・クロス共振ゲートの GaussianSquare パルスを伸縮させることによって作成される。

  • を使用するための新しいテンプレート回路が qiskit.circuit.library.RZXGate を使用するための新しいテンプレート回路が qiskit.circuit.library モジュールに追加される(例 rzx_yz). これにより TemplateOptimization パスと qiskit.transpiler.passes.RZXCalibrationBuilder パスとペアリングすることで、 CNOT - P(theta) - CNOT のようなゲート・シーケンスを自動的に検出し、キャリブレーションに基づいてより効率的な回路に置き換えることができます。 qiskit.circuit.library.RZXGate 較正を伴う。

  • に対する matplotlib の出力タイプ。 circuit_drawer() および draw() クラスの QuantumCircuit クラスのメソッドは、可視化スタイルを設定するための設定ファイルをサポートするようになりました。 以前のリリースでは、 mpl のドロワーの色やその他の表示機能をカスタマイズするために、 dict を取り込む style kwarg を渡すことができる基本的な機能があった。 この辞書は、辞書を渡すことなくJSONファイルから直接ロードできるように拡張された。 これにより、 style kwargにスタイルファイル名を文字列として渡すことで、ユーザーは新しいスタイルファイルを作成し、そのスタイルをビジュアライゼーションに使用することができる。

    この機能を利用するには、ユーザー設定ファイルで circuit_mpl_style_path オプションを設定する必要があります。 このオプションはqiskitにスタイルJSONファイルを検索させたいパスに設定する必要があります。 複数のパス・エントリーを指定する場合は、 : で区切ってください。 例えば、ユーザー設定ファイルで circuit_mpl_style_path = ~/.qiskit:~/user_styles を設定すると、 ~/.qiskit~/user_styles の両方にあるJSONファイルを探します。

  • 新しいクワーグ、 format_marginal が関数 marginal_counts() に追加された。 True に設定すると、回路内の cregs に従ってカウント出力がフォーマットされ、欠落したインデックスは _ で表現される。 例:

    from qiskit import QuantumCircuit, execute, BasicAer, result
    from qiskit.result.utils import marginal_counts
    qc = QuantumCircuit(5, 5)
    qc.x(0)
    qc.measure(0, 0)
    
    result = execute(qc, BasicAer.get_backend('qasm_simulator')).result()
    print(marginal_counts(result.get_counts(), [0, 2, 4], format_marginal=True))
  • のパフォーマンスを向上させた。 qiskit.quantum_info.Statevector.expectation_value()qiskit.quantum_info.DensityMatrix.expectation_value() 演算子が Pauli または SparsePauliOp 演算子である場合の

  • ユーザー設定ファイルには、 num_processesparallel という2つの設定オプションが追加された。 parallel_map(). parallel オプションはブール値で、複数プロセスで実行するかどうかを指定する。 parallel_map() を複数プロセスで実行するかどうかを指定する。 False に設定すると parallel_map() の呼び出しはシリアルに実行され、 True に設定すると並列実行が可能になる。 num_processes オプションは、並列実行時に使用するCPU数を設定する整数を取る。 デフォルトでは、システムのCPUコア数を使用する。

  • のデフォルトの動作を制御するために使用できる2つの新しい環境変数、 QISKIT_PARALLELQISKIT_NUM_PROCS があります。 parallel_map(). QISKIT_PARALLEL オプションは、 TRUE (大文字小文字は問わない)に設定すると、デフォルトで parallel_map() が呼ばれたときに複数のプロセスで実行されるように設定する。 それ以外の値に設定された場合 parallel_map() はシリアルに実行される。 QISKIT_NUM_PROCS には、デフォルトのプロセス数として使用される整数(たとえば QISKIT_NUM_PROCS=5 )を指定する。 いずれも、ユーザー設定ファイルに設定された同等のオプションよりも優先される。

  • 新しいメソッド gradient()メソッドが ParameterExpression クラスに追加されました。 このメソッドは、オブジェクトの勾配を評価するために使われる。 ParameterExpression オブジェクトの

  • __eq__ メソッド(つまり、 == 演算子が使われたときに呼び出されるもの)は、数値との比較を可能にした。 ParameterExpression のメソッドでは、数値との比較ができるようになった。 の2つのインスタンスを比較することしかできなかった。 ParameterExpression==。 例:

    from qiskit.circuit import Parameter
    
    x = Parameter("x")
    y = x + 2
    y = y.assign(x, -1)
    
    assert y == 1
  • PauliFeatureMap モジュールの qiskit.circuit.libraryα\alpha モジュールのクラスは、コンストラクタで kwarg alpha を使って設定するか、生成後に alpha 属性を設定することで調整できます。 以前はこの値は 2.0 に固定されていた。 この属性を調整することで、決定境界をよりよく制御することができ、データセットの中で明示的にスケーリングする必要なく、入力フィーチャをさらに柔軟に扱うことができる。

  • 新しい Gate クラスが追加されました、 PauliGateが追加された。 qiskit.circuit.library モジュールと対応するメソッド pauli()が追加された。 QuantumCircuit クラスに追加された。 この新しいゲートクラスは、異なる量子ビットに複数の個別ポーリゲートを同時に適用することを可能にする。 これは主に、この新しいゲートを使って複数の同時パウリゲートをより効率的に実装できるシミュレーターに役立つ。

  • を改善する。 qiskit.quantum_info.Pauli オペレーター このクラスは現在、複素係数を含む完全なN量子ビット・パウリ群の要素を表している。 以下の Operator API メソッドをサポートするようになりました。 compose(), dot(), tensor() などを含む演算子APIメソッドをサポートするようになった。composeとdotは完全なパウリ群に関して定義されている。

    このクラスは、便宜上パウリの文字列表現との変換も可能にしている。

    例 :

    from qiskit.quantum_info import Pauli
    
    P1 = Pauli('XYZ')
    P2 = Pauli('YZX')
    P1.dot(P2)

    パウリはまた、以下のオブジェクトに直接付加することもできる。 QuantumCircuit オブジェクト

    from qiskit import QuantumCircuit
    from qiskit.quantum_info import Pauli
    
    circ = QuantumCircuit(3)
    circ.append(Pauli('XYZ'), [0, 1, 2])
    circ.draw(output='mpl')

    追加メソッドにより、2つのPauliが(メソッドを用いて)交わるか(メソッドを用いて)反交わるかを計算することができる。 commutes() を使う)、または(反 anticommutes() メソッドを使う)、クリフォード共役 P=C.P.CP^\prime = C.P.C^\dagger から得られる Pauli を計算することができる。 evolve() メソッドを使って計算することができる。

    クラスのAPIドキュメントを参照してください。 Pauli クラスの API ドキュメントを参照してください。

  • 新しい関数 random_pauli()モジュールが追加されました。 qiskit.quantum_info モジュールに追加された。

  • 新しいクラス PiecewisePolynomialPauliRotationsqiskit.circuit.library モジュールに追加された。 この回路ライブラリ要素は、ブレークポイントと係数によって定義される区分的多項式関数( f(x)f(x) )を量子ビットの振幅にマッピングするために使用されます。 ブレークポイント (x0,...,xJ)(x_0, ..., x_J)[0,2n1][0, 2^n-1] のサブセットであり、 nn は状態量子ビットの数である。 対応する係数 [aj,1,...,aj,d][a_{j,1},...,a_{j,d}]dd はすべての多項式の中で最も次数の高いものである。 そして、 f(x)f(x) は次のように定義される:

f(x)={0,x<x0i=0i=daj,ixi,xjx<xj+1\begin{split}f(x) = \begin{cases} 0, x < x_0 \\ \sum_{i=0}^{i=d}a_{j,i} x^i, x_j \leq x < x_{j+1} \end{cases}\end{split}

ここで暗黙のうちに xJ+1=2nx_{J+1} = 2^n を仮定する。そして、振幅に適用されるマッピングは次式で与えられる

Fx0=cos(pj(x))x0+sin(pj(x))x1F|x\rangle |0\rangle = \cos(p_j(x))|x\rangle |0\rangle + \sin(p_j(x))|x\rangle |1\rangle

このマッピングは、制御されたパウリY回転に基づいており、次のように構成されている。 PolynomialPauliRotations.

  • 新しいモジュール qiskit.algorithms が導入された。 このモジュールは、 qiskit.aqua.algorithms モジュール(現在は非推奨)により提供されていたものと同等の機能を含み、量子アルゴリズムを構築するためのビルディングブロックを提供します。 qiskit-aqua からこの新しいモジュールへの移行の詳細については、 移行ガイドを参照してください。

  • 新しいモジュール qiskit.opflow が導入された。 このモジュールは、以前 qiskit.aqua.operators (現在は非推奨)モジュールによって提供されていたものと同等の機能を含み、量子アルゴリズムを構築するために使用される演算子と状態関数を提供します。 qiskit-aqua からこの新しいモジュールへの移行の詳細については、 移行ガイドを参照してください。

  • これは Linux aarch64 システム用のプリコンパイルされたバイナリーホイールを含む最初のリリースです。 manylinux2014 互換の aarch64 Linux システムを使用している場合、 PyPI, で利用可能なコンパイル済みホイールがあるため、qiskit-terra をインストールするためにソースからビルドする必要はなくなりました。

  • この qiskit.quantum_info.process_fidelity() 関数は、非ユニタリー・ターゲット・チャンネルで使用できるようになった。 この場合、返される値は正規化された値の qiskit.quantum_info.state_fidelity() 正規化された qiskit.quantum_info.Choi 行列と等価である。

    qiskit.quantum_info.average_gate_fidelity()qiskit.quantum_info.gate_error() 関数はターゲット・チャンネルがユニタリーであることを要求し、ユニタリーでない場合は例外を発生させる。

  • 新しいパルスビルダー機能 qiskit.pulse.macro() を追加。 これにより、通常の Python 関数をマクロとして装飾することができる。 これにより、パルスビルダー機能を装飾機能内で使用できるようになる。 このビルダーマクロは、パルスビルディングコンテキスト内から呼び出すことができ、コードの再利用が可能になる。

    例:

    from qiskit import pulse
    
    @pulse.macro
    def measure(qubit: int):
        pulse.play(pulse.GaussianSquare(16384, 256, 15872),
                   pulse.MeasureChannel(qubit))
        mem_slot = pulse.MemorySlot(0)
        pulse.acquire(16384, pulse.AcquireChannel(0), mem_slot)
        return mem_slot
    
    with pulse.build(backend=backend) as sched:
        mem_slot = measure(0)
        print(f"Qubit measured into {mem_slot}")
    
    sched.draw()
  • 新しいクラス、 PauliTwoDesignが追加された。 qiskit.circuit.library に追加された。 https://arxiv.org/pdf/1803.11173.pdf 例えば、この回路は次のようになる:

    from qiskit.circuit.library import PauliTwoDesign
    circuit = PauliTwoDesign(4, reps=2, seed=5, insert_barriers=True)
    circuit.decompose().draw(output='mpl')
  • 新しいパルスドローワー qiskit.visualization.pulse_v2.draw()qiskit.visualization.pulse_drawer_v2 とエイリアスされている)が利用可能になった。 この新しいパルスドロアでは、オリジナルのパルスドロア(pulse_drawer()).

    • 長いパルス命令の切り捨て。
    • パラメトリックパルスの可視化。
    • 新しいスタイルシート IQXStandard, IQXSimple, IQXDebugging.
    • システム情報(チャンネル周波数など)の視覚化 指定することによって qiskit.providers.Backend オブジェクトを指定して視覚化する。
    • 生成されたプロットをさらに拡張できるように、プロット用に axis オブジェクトを指定する。

    新しいスタイルシートは、出力画像の見た目を動的に変更するコールバック関数を取ることができる。例えば、チャンネルの集合を再構成したり、命令の詳細を表示したり、パルスエンベロープの見た目を更新したり... カスタム・コールバック関数を作成し、それをスタイルシート・インスタンスに送り込むことで、ドロワーのコードを変更することなく、図の外観を変更することができます。 詳細はパルスドロワーモジュールのドキュメントを参照のこと。

    なお、ファイル保存は Matplotlib に委譲された。 画像ファイルを保存するには、返された Figure オブジェクトを使って savefig メソッドを呼び出す必要があります。

  • メソッドを reverse_qargs() メソッドを qiskit.quantum_info.Statevector クラスと qiskit.quantum_info.DensityMatrix クラスにメソッドを追加します。 この方法は、状態中のサブシステムの順序を逆にするもので、N量子ビット状態に対する qiskit.circuit.QuantumCircuit.reverse_bits() と等価である。 例:

    from qiskit.circuit.library import QFT
    from qiskit.quantum_info import Statevector
    
    circ = QFT(3)
    
    state1 = Statevector.from_instruction(circ)
    state2 = Statevector.from_instruction(circ.reverse_bits())
    
    state1.reverse_qargs() == state2
  • メソッドを reverse_qargs() メソッドを qiskit.quantum_info.Operator クラスにメソッドを追加します。 この方法は作用素の部分系の順序を逆にするもので、N量子ビット作用素の方法と等価である。 qiskit.circuit.QuantumCircuit.reverse_bits() と等価である。 例:

    from qiskit.circuit.library import QFT
    from qiskit.quantum_info import Operator
    
    circ = QFT(3)
    
    op1 = Operator(circ)
    op2 = Operator(circ.reverse_bits())
    
    op1.reverse_qargs() == op2
  • latex 出力メソッド qiskit.visualization.circuit_drawer() 関数と draw() メソッドは、出力可視化のゲートにユーザー定義のラベルを使用するようになりました。 例:

    import math
    
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.rx(math.pi/2, 0, label='My Special Rotation')
    
    qc.draw(output='latex')
  • routing_method kwargは、新しいオプションを受け付けるようになった。 transpile() 関数は新しいオプション 'none' を受け付けるようになった。 routing_method='none' 、トランスパレーションの一部としてルーティング・パスは実行されない。 回路がカップリング・マップに適合しない場合は TranspilerError 例外が発生する。

  • 新しいゲートクラス、 RVGateqiskit.circuit.library モジュールに追加された。 QuantumCircuit メソッド rv(). は RVGate に似た一般的な回転ゲートです。 UGateしかし、オイラー角を指定する代わりに、回転ベクトルの3つの成分を指定する。ベクトルの方向は回転軸を指定し、大きさはラジアン単位で軸に対する回転角度を指定する。 例:

    import math
    
    import np
    
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(1)
    theta = math.pi / 5
    phi = math.pi / 3
    # RGate axis:
    axis = np.array([math.cos(phi), math.sin(phi)])
    rotation_vector = theta * axis
    qc.rv(*rotation_vector, 0)
  • アンバインド Parameter オブジェクトで使用される QuantumCircuit オブジェクトは名前順にソートされます。 これは parameters 属性によって返されるパラメータに対して有効になります。 さらに qiskit.circuit.QuantumCircuit.bind_parameters()qiskit.circuit.QuantumCircuit.assign_parameters() メソッドに値のリストを取り込むことができるようになり、名前順に並べ替えてパラメータにバインド/代入できるようになりました。 以前は、これらのメソッドはパラメータと値の辞書を取るだけだった。 例:

    from qiskit.circuit import QuantumCircuit, Parameter
    
    circuit = QuantumCircuit(1)
    circuit.rx(Parameter('x'), 0)
    circuit.ry(Parameter('y'), 0)
    
    print(circuit.parameters)
    
    bound = circuit.bind_parameters([1, 2])
    bound.draw(output='mpl')
  • のコンストラクタは qiskit.quantum_info.Statevectorqiskit.quantum_info.DensityMatrix クラスのコンストラクタは QuantumCircuit オブジェクトを受け取って StatevectorDensityMatrix0|0\rangle オブジェクトを構築することができるようになりました。例えば

    from qiskit import QuantumCircuit
    from qiskit.quantum_info import Statevector
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    statevector = Statevector(qc)
    statevector.draw(output='latex')
  • 新しい偽のバックエンド・クラスは、 qiskit.test.mock。 これらには、 ibmq_casablancaibmq_sydneyibmq_mumbaiibmq_limaibmq_belemibmq_quito のモック・バージョンが含まれている。他の偽のバックエンドと同様に、これらにはキャリブレーション・データのスナップショットが含まれている(すなわち、 backend.defaults() ) およびエラーデータ(すなわち backend.properties() ) 実際のシステムから取得したもので、ローカルテスト、コンパイル、シミュレーションに使用できる。

既知の問題

  • パラメータ化された duration (すなわち、 duration の値が未束縛である)を持つ qiskit.pulse.Instruction オブジェクトを追加しようとする。 Parameter または ParameterExpression オブジェクト)を qiskit.pulse.Schedule に追加することはサポートされていません。 そのようなことをしようとすると、 UnassignedDurationError PulseError が発生する。 これは、 Instruction オーバーラップ制約の現在の評価方法の限界である。 これは ScheduleBlockオーバーラップ制約は実行直前に評価される。

  • Windowsシステムで並列実行が有効になっている場合 parallel_map() 並列実行が有効になっている場合、 if __name__ == '__main__': ブロックの外側で実行されているスクリプトから呼び出されると、並列実行が機能しないことがある。 これは、 Python、Windows上で並列プロセスを起動する方法によるものだ。 を呼び出すスクリプトによって RuntimeError または AttributeError が発生した場合、そのスクリプトは、 または を呼び出します。 parallel_map() を呼び出すスクリプトで parallel_map() または が発生する場合 ( を内部的に使用する関数 transpile()を呼び出すスクリプト ( if __name__ == '__main__': を内部的に使用する関数を含む) によって発生する場合は、スクリプトの呼び出しを 内に埋め込むことで、問題を回避することができます。 例:

    from qiskit import QuantumCircuit, QiskitError
    from qiskit import execute, Aer
    
    qc1 = QuantumCircuit(2, 2)
    qc1.h(0)
    qc1.cx(0, 1)
    qc1.measure([0,1], [0,1])
    # making another circuit: superpositions
    qc2 = QuantumCircuit(2, 2)
    qc2.h([0,1])
    qc2.measure([0,1], [0,1])
    execute([qc1, qc2], Aer.get_backend('qasm_simulator'))

    この照会は、次のように変更する必要があります。

    from qiskit import QuantumCircuit, QiskitError
    from qiskit import execute, Aer
    
    def main():
        qc1 = QuantumCircuit(2, 2)
        qc1.h(0)
        qc1.cx(0, 1)
        qc1.measure([0,1], [0,1])
        # making another circuit: superpositions
        qc2 = QuantumCircuit(2, 2)
        qc2.h([0,1])
        qc2.measure([0,1], [0,1])
        execute([qc1, qc2], Aer.get_backend('qasm_simulator'))
    
    if __name__ == '__main__':
        main()

    Windowsの並列処理でエラーが発生した場合。

アップグレードの注意

  • プリセット・パス・マネージャー level_1_pass_manager, level_2_pass_managerおよび level_3_pass_manager (の optimization_level 1、2、3に使用される)。 transpile() および execute() 関数で1,2,3に対して使用される)は、1量子ビットゲート最適化のために無条件に Optimize1qGatesDecomposition を無条件に使用するようになりました。 以前は、これらのパス・マネージャーは Optimize1qGates 基底ゲートに u1u2u3 のいずれかが含まれる場合、パスを使用していた。 古い Optimize1qGates を使いたい場合は、カスタム PassManager を構築する必要がある。

  • パラメータ化された QuantumCircuitパラメータ化された global_phase 属性が簡略化された形で返されることはありません。 ParameterExpression.

    例:

    qc = QuantumCircuit(1)
    theta = Parameter('theta')
    
    qc.rz(theta, 0)
    qc.rz(-theta, 0)
    
    print(transpile(qc, basis_gates=['p']).global_phase)

    これまでは 0 を返していたが、今後は -0.5*theta + 0.5*theta を返す。 この変更が必要だったのは、記号式の簡略化にはかなりの時間がかかるため、特に回路オブジェクトの数が多い場合、実行時のパフォーマンスが大きく低下するのを避けるためだった。 ParameterExpression オブジェクトが多い場合は特にそうです。

  • バックエンドから返される BasicAerJobBasicAer バックエンドから返されるジョブオブジェクトは、同期インスタンスである JobV1. つまり run() の呼び出しはシミュレーションの実行が終了するまでブロックされます。 以前の非同期動作に戻したい場合は、 や。 run()futures.ThreadPoolExecutorfutures.ProcessPoolExecutor のような別のスレッドやプロセスで実行する何かでラップする必要があります。

  • BasicAer シミュレーターの allow_sample_measuring オプションがデフォルトの から に変更されました。 QasmSimulatorPy のオプションがデフォルトの False から True に変更されました。 これは、入力回路がサンプル測定をサポートしていれば(それが有効になっていなくても)サンプル測定を使用する、シミュレータの実際のデフォルトの動作をよりよく反映させるために行われました。 サンプル測定をサポートしない回路を実行する場合(つまり、 Reset 操作がある場合、または量子ビットの測定後に操作がある場合)、以下を呼び出す際にこのオプションを明示的に False に設定する必要があります。 run().

  • トランスパイラー・パスは CommutativeCancellation トランスパイラ・パスはターゲット基底のゲートを認識するようになり、指定された基底のゲートのみを使用するようになった。 以前は、パスは無条件で ZGateU1Gate. しかし、パスが基底を認識し、ターゲット基底を指定するためのkwarg( basis_gates )を持つようになったため、kwargが設定されていない場合、動作が変わる可能性がある。 basis_gates kwargが使用されず、回路内に可変z回転ゲートがない場合、可換キャンセルは起こらない。

  • Register (の親クラスである QuantumRegisterClassicalRegisterBit (の親クラスである QubitClbitの親クラス)のオブジェクトはイミュータブルになった。 以前のリリースでは size または name 属性の値を調整することが可能でした。 Register オブジェクトと index または register 属性の値を調整することが可能でした。 Bit オブジェクトの しかしこれは、これらの属性がレジスタやビットの不変プロパティとして扱われるため、(dictのような)ハッシュに依存するコンテナ構造を破損する不健全な動作につながります(詳細は #4705を参照してください)。 この不健全な動作を避けるために、この属性は RegisterBit の属性は、初期生成後には設定できなくなります。 以前、実行時にオブジェクトを調整していた場合は、新しい値で新しい Register または Bit オブジェクトを作成する必要があります。

  • DAGCircuit.__eq__ メソッド(これは == 演算子で使用される)。 DAGCircuitQuantumCircuit インスタンスの構造的な等しさをチェックするために使われる global_phasecalibrations 属性が含まれるようになりました。 これは、以前のリリースでは同等と評価されていた回路が、回路間で global_phase または calibrations が異なれば、そうでなくなる可能性があることを意味する。 例えば、以前のリリースでは、これは True を返す:

    import math
    
    from qiskit import QuantumCircuit
    
    qc1 = QuantumCircuit(1)
    qc1.x(0)
    
    qc2 = QuantumCircuit(1, global_phase=math.pi)
    qc2.x(0)
    
    print(qc2 == qc1)

    しかし、回路の global_phase 属性が異なるため、 False を返すようになった。

  • クラスの qubits()clbits() メソッドは削除されました。 DAGCircuit0.15.0 メソッドは削除されました。 代わりに、 qubitsclbits 属性を使用する必要があります。 DAGCircuit クラスの 例えば、あなたが走っていたとする:

    from qiskit.dagcircuit import DAGCircuit
    
    dag = DAGCircuit()
    qubits = dag.qubits()

    それに取って代わるだろう:

    from qiskit.dagcircuit import DAGCircuit
    
    dag = DAGCircuit()
    qubits = dag.qubits
  • 偽パルス・バックエンドの PulseDefaults 偽パルスバックエンド qiskit.test.mock.FakeOpenPulse2Qqiskit.test.mock.FakeOpenPulse3Q が返すパルスシーケンスがより現実的な定義に更新された。 これらの偽のバックエンド・クラスを使用している場合は、これらの変更に伴い、使用方法を更新する必要があるかもしれません。

  • モジュールの decompose_clifford() 関数で使われるデフォルトの合成メソッド。 quantum_info モジュールの qiskit.quantum_info.Clifford.to_circuit() メソッドによって内部的に使用される)によって使用されるデフォルトの合成法は、現在、Bravyi et. ...そして..、 これは通常、旧来のデフォルトと比較してより良いCXコストをもたらす。 以前のAaronson-Gottesmanメソッドに戻す必要がある場合は、 method='AG'

  • 0.15.0 リリースで非推奨とされていたモジュール qiskit.visualization.interactive が削除されました。 代わりに、matplotlibベースの可視化を使うべきだ:

    インタラクティブ機能の削除
    同等のmatplotlib関数
    iplot_bloch_multivectorqiskit.visualization.plot_bloch_multivector()
    iplot_state_cityqiskit.visualization.plot_state_city()
    iplot_state_qsphereqiskit.visualization.plot_state_qsphere()
    iplot_state_hintonqiskit.visualization.plot_state_hinton()
    iplot_histogramqiskit.visualization.plot_histogram()
    iplot_state_paulivecqiskit.visualization.plot_state_paulivec()
  • qiskit.Aerqiskit.IBMQ のトップレベル属性が遅延ロードされるようになりました。 これは、オブジェクトが常に存在するようになり、 qiskit-aer または qiskit-ibmq-provider がインストールされていない(または Python で見つからない)場合、インポート時に警告が発生しなくなることを意味する。 これらのモジュール属性を使って、 qiskit-aerqiskit-ibmq-provider の存在をチェックし、 None と明示的に比較したり、属性がないことを探したりしていた場合、これらは常にオブジェクトとして定義されるようになったため、もはや機能しない。 つまり、次のようなことだ:

    try:
        from qiskit import Aer
    except ImportError:
        print("Aer not available")
    
    or::
    
    try:
        from qiskit import IBMQ
    except ImportError:
        print("IBMQ not available")

    はもはや機能しない。 代わりに、これらのプロバイダーが存在するかどうかを判断するには、明示的に qiskit.providers.aer.Aerqiskit.providers.ibmq.IBMQ を使用します:

    try:
        from qiskit.providers.aer import Aer
    except ImportError:
        print("Aer not available")
    
    try:
        from qiskit.providers.ibmq import IBMQ
    except ImportError:
        print("IBMQ not available")

    をチェックするか、代わりに bool(qiskit.Aer)bool(qiskit.IBMQ)

    import qiskit
    
    if not qiskit.Aer:
        print("Aer not available")
    if not qiskit.IBMQ:
        print("IBMQ not available")

    この変更は、qiskitパッケージ間の潜在的なインポートサイクルの問題を回避し、またAerやIBMQを使用していない場合のインポート時間を改善するために必要であった。

  • ユーザー設定ファイルのオプション suppress_packaging_warnings オプションと環境変数 QISKIT_SUPPRESS_PACKAGING_WARNINGS は、もはや何の効果もなく、黙って無視される。 このオプションが制御していた警告は削除され、 qiskit モジュールからのインポート時に発せられることはなくなった。

  • 以前は非推奨だった condition kwarg for qiskit.dagcircuit.DAGNode コンストラクタは削除されました。 0.15.0、非推奨となった。 代わりに、古典的な条件を Instruction オブジェクトに古典的条件を設定しなければならない。 DAGNodeop に渡されるオブジェクトに古典的な条件を設定する必要があります。

  • 新しい Register (の親クラスである QuantumRegister および ClassicalRegisterの親クラスである)または QuantumCircuit オブジェクトを作成する場合 (例: QuantumCircuit(2))、ビット数を整数で指定するか、曖昧さのない整数にキャスト可能な別の型 (例: 2.0)で指定する必要があります。 非整数の値は、そのような場合の意図が不明確であったため(端数ビットを持つことはできない)、エラーが発生するようになった。 変更理由の詳細については、#4855を参照してください: #4855

  • networkxは qiskit-terraの要件ではなくなりました。 qiskit-terra内部でのnetworkxの使用は、3つのメソッドを除いてすべて削除されました:

    • qiskit.dagcircuit.DAGCircuit.to_networkx
    • qiskit.dagcircuit.DAGCircuit.from_networkx
    • qiskit.dagcircuit.DAGDependency.to_networkx

    これらの方法のいずれかを使用している場合、それらを使用し続けるには、お使いの環境にnetworkxを手動でインストールする必要があります。

  • デフォルトでは、 macOS で Python >= 3.8 の場合 parallel_map() は複数プロセスで実行されなくなります。 これは、以前のリリースではデフォルトの動作が parallel_map() が複数のプロセスを起動させるというものだった。 この変更は、 macOS の新しいバージョンで、 Python 3.8、 3.9 のマルチプロセッシングが信頼できないか、 Python 3.8、 fork の代わりに spawn で新しいプロセスを起動するように変更されたため、大幅なオーバーヘッドが追加されたためである。 Python >= 3.8 で macOS の並列実行を再度有効にするには、ユーザー設定ファイル parallel オプションを使用するか、環境変数 QISKIT_PARALLELTrue に設定します。

  • クラスのコンストラクタの callbackPassManager クラスのコンストラクタは削除されました。 このkwargは、 0.13.0 リリース(2020年4月9日)以降、非推奨となっている。 代わりに、 callback kwargを直接 qiskit.transpiler.PassManager.run() メソッドに直接渡すことができます。 例えば、あなたが

    from qiskit.circuit.random import random_circuit
    from qiskit.transpiler import PassManager
    
    qc = random_circuit(2, 2)
    
    def callback(**kwargs)
      print(kwargs['pass_'])
    
    pm = PassManager(callback=callback)
    pm.run(qc)

    と置き換えることができる:

    from qiskit.circuit.random import random_circuit
    from qiskit.transpiler import PassManager
    
    qc = random_circuit(2, 2)
    
    def callback(**kwargs)
      print(kwargs['pass_'])
    
    pm = PassManager()
    pm.run(qc, callback=callback)
  • qiskit.pulse.Channelqiskit.pulse.PulseChannel のような接頭辞のないベースチャンネルをインスタンス化することはできなくなった。 これらのクラスは、 qiskit.pulse.DriveChannel のような、さまざまなユーザー向けチャネル・クラスのタイプを分類するために設計されているが、ターゲット・リソースとしての定義はない。 以前は qiskit.pulse.Channelqiskit.pulse.PulseChannel のどちらかを直接インスタンス化していた場合、これはもう許されない。 適切なサブクラスを使用してください。

  • require_cp および/または require_tp kwargs の場合。 qiskit.quantum_info.process_fidelity(), qiskit.quantum_info.average_gate_fidelity(), qiskit.quantum_info.gate_error() のkwargsが True の場合、入力チャネルがそれぞれ非CPまたは非TPの場合は例外を発生させるという以前の動作ではなく、警告のみをログに記録するようになった。 QiskitError のkwargsが の場合、入力チャネルが非CPまたは非TPの場合は、それぞれ例外を発生させる以前の動作ではなく、警告のみをログに記録するようになりました。

  • QFT モジュールの qiskit.circuit.library モジュールのクラスは、テンソルのリトルエンディアン表現を使ってフーリエ変換を計算するようになった。つまり、計算基底が整数のリトルエンディアン・ビット順序に対応すると仮定すると、 1|1\rangle 状態は 01+2..|0\rangle - |1\rangle + |2\rangle - .. にマップされる。 0=000,1=001|0\rangle = |000\rangle, |1\rangle = |001\rangle など。 これは、ビット順序にリトルエンディアンの規約を使用するQiskitの他の部分との一貫性を高めるために行われた。 以前のビット順に依存していた場合は、 reverse_bits() メソッドを使って以前の動作に戻すことができる。 例:

    from qiskit.circuit.library import QFT
    
    qft = QFT(5).reverse_bits()
  • 以前は dict であった qiskit.__qiskit_version__ モジュール属性は、インポート時ではなく、実行時に qiskit 要素のバージョンをチェックするカスタム読み取り専用 Mapping オブジェクトを返すようになりました。 これはqiskitのインポートパスを高速化し、実行時にパッケージからバージョンが必要な場合にのみ要素パッケージをインポートすることで、インポートサイクルの可能性を排除するために行われました。 これは、 dict と完全に互換性があるはずで、ほとんどの通常の使用ケースでは違いはないだろう。 しかし、一部のアプリケーションがコンテンツの変異や明示的なタイプチェックに依存していた場合、この変更に対応するためのアップデートが必要になるかもしれない。

  • qiskit.execute モジュールは次のように名前が変更された。 qiskit.execute_function. これは、 として再エキスポートされる execute() 関数が qiskit.execute として再エクスポートされる。 qiskit.execute qiskit.execute この場合、 Python が qiskit.execute をモジュールとして扱い、その逆の場合は が関数として扱われることになる。 モジュール名の変更は、この衝突を避けるために必要だった。 モジュールを取得するために qiskit.execute をインポートしている場合(典型的な使用法は from qiskit.execute import execute )、代わりに qiskit.execute_function を使用するように更新する必要があります。 qiskit.execute は常に関数に解決されるようになった。

  • qiskit.compiler.transpileqiskit.compiler.assembleqiskit.compiler.scheduleqiskit.compiler.sequence のモジュール名がそれぞれ qiskit.compiler.transpilerqiskit.compiler.assemblerqiskit.compiler.schedulerqiskit.compiler.sequence に変更された。 これは、モジュールと再エクスポートされた関数のパスとの間の名前の衝突を避けるために必要だった。 qiskit.compiler.transpile(), qiskit.compiler.assemble(), qiskit.compiler.schedule()qiskit.compiler.sequence(). 状況によっては、モジュールパスと再エクスポートされた関数パスの間でこの名前の衝突が生じ、 Python、関数を使用するつもりがインポートされた関数をモジュールとして扱ったり、その逆を行ったりして、不可解なエラーにつながることがあった。 モジュール名の変更は、この衝突を避けるために必要だった。 以前、モジュールを取得するためにimportsを使っていた場合(典型的な使い方は、 likefrom qiskit.compiler.transpile import transpile )、新しいモジュールパスを使うように更新する必要があります。 qiskit.compiler.transpile(), qiskit.compiler.assemble(), qiskit.compiler.schedule()qiskit.compiler.sequence() は常に関数に解決されます。

  • この qiskit.quantum_info.Quaternion クラスは qiskit.quantum_info.operator サブモジュールから qiskit.quantum_info.synthesis サブモジュールに移動されました。 ルート・モジュールからインポートしている場合は変更する必要はない。 qiskit.quantum_info モジュールからインポートしていた場合は変更する必要はないが、 qiskit.quantum_info.operator からインポートしていた場合は、インポートパスを更新する必要がある。

  • 2020年4月のQiskit Terra 0.14.0 リリース以降、非推奨となった QuantumCircuit.mcmt メソッドを削除しました。 メソッドの代わりに MCMT クラスを使ってマルチ・コントロール・マルチ・ターゲット・ゲートを構築し qiskit.circuit.QuantumCircuit.append() または qiskit.circuit.QuantumCircuit.compose() を使って回路に追加してください。

    例えば、次のように置き換えることができる:

    circuit.mcmt(ZGate(), [0, 1, 2], [3, 4])

    上記の行を、次の行に置き換えます。

    from qiskit.circuit.library import MCMT
    mcmt = MCMT(ZGate(), 3, 2)
    circuit.compose(mcmt, range(5))
  • 2020年4月のQiskit Terra 0.14.0 リリース以降、非推奨となった QuantumCircuit.diag_gate メソッドを削除しました。 代わりに diagonal() メソッドを使う。 QuantumCircuit.

  • 2020年4月のQiskit Terra 0.14.0 リリース以降、非推奨となった QuantumCircuit.ucy メソッドを削除しました。 代わりに ucry() メソッドを使う。 QuantumCircuit.

  • mirror() 以前は非推奨だった qiskit.circuit.QuantumCircuit メソッドは削除されました。 0.15.0、非推奨となった。 その代わりに qiskit.circuit.QuantumCircuit.reverse_ops() メソッドを使うべきである。ミラーリングは回路の出力量子ビットのスワップと混同される可能性があるからだ。 reverse_ops() 、ミラーリングの代わりにゲートの順番を逆にするだけである。

  • への最初の位置引数として浮動小数点数( scale kwarg用)を渡すサポートは廃止された。 qiskit.circuit.QuantumCircuit.draw() への最初の位置引数として 0.12.0、非推奨となった。 メソッドの最初の位置引数は qiskit.circuit.QuantumCircuit.draw() メソッドへの最初の位置引数は output kwargで、これはfloatを受け付けない。 その代わり、 scale を位置的に使うのではなく、名前付きのクワーグとして使うべきだ。

    例えば、以前 draw

    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.draw(0.75, output='mpl')

    とする必要がある:

    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.draw(output='mpl', scale=0.75)

    または:

    qc.draw('mpl', scale=0.75)
  • Qiskit Pulse (qiskit.pulse)のうち、 0.15.0 リリース(2020 年 8 月)で非推奨となった機能は削除されました。 変更点は以下の通り:

    モジュール
    新規
    qiskit.pulse.librarySamplePulseWaveform
    qiskit.pulse.libraryConstantPulseConstant
    (モジュール名変更)pulse.pulse_lib モジュールqiskit.pulse.library
    クラス
    旧方式
    新方式
    ParametricPulseget_sample_pulseget_waveform
    Instructioncommand該当なし。 コマンドとインストラクションが統一された。 命令データに関する情報を得るには、 operands()
    Acquireacquires, mem_slots, reg_slotsacquire(), mem_slot(), reg_slot(). (この Acquire 命令はもはや複数の量子ビットをブロードキャストしない)
  • 以前はエッジに保持されていた DAGCircuit が削除された。 代わりに、エッジは以前は辞書に含まれていた Bit'wire' インスタンスを保持するようになった。 to_networkx() によって返された NetworkX グラフは、エッジ属性用の辞書をまだ持っているが、 'name' フィールドにはもう入力されないことに注意。

  • parameters クラスの QuantumCircuit クラスの属性はもはや set を返しません。 その代わりに、 set が提供するすべてのメソッドを(非推奨ではあるが)実装した ParameterView オブジェクトを返す。 これは、名前順に並べられたパラメータを保持するモデルをサポートするために行われた。 属性によって返される set の以前の使用法と完全に互換性がなければなりません。 parameters 属性によって返される以前の使用法と完全に互換性があるべきです。

  • で実行する場合 transpile()QuantumCircuit 命令で delay() 命令で実行される場合、dt(サンプル時間)の値が transpile()もしdtの値(サンプル時間)が dt kwargで明示的に、あるいは kwargで渡された オブジェクトの BackendConfigurationbackend を介して渡された Backend オブジェクトの場合、単位はdtに変換されます。

  • meas_map (これはオブジェクトの属性である。 PulseBackendConfigurationmeas_map オブジェクトの属性である。 schedule(), assemble(), sequence()または execute() 関数の対応するkwargである)の解釈は、ハードウェアの真の制約によりマッチするように更新された。 このデータのフォーマットはリストのリストであり、内側のリストの項目は量子ビットのラベルを指定する整数である。 以下に例を示します。

    [[A, B, C], [D, E, F, G]]

    以前は、 meas_map 制約は、1つの量子ビットが獲得された場合(例えばA)、その量子ビットとサブグループを共有する他のすべての量子ビット(BとC)は、同時に、同じ期間獲得されなければならないというように解釈されていた。 この制約は緩和された。 一度の獲得でそれ以上の獲得は必要ない。 (Aを獲得すれば、BとCを獲得する必要はない ) その代わり、同じ測定グループの量子ビットを部分的に重複して取得することはできません。 meas_map は、共有の取得リソースを指定していると考えてください( t=1000 から t=2000 に A を取得する場合、 1000<t<2000 から始まる B を取得することはできません)。 例:

    # Good
    meas_map = [[0, 1]]
    # Acquire a subset of [0, 1]
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    
    # Acquire 0 and 1 together (same start time, same duration)
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1))
    
    # Acquire 0 and 1 disjointly
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1)) << 10
    
    # Acquisitions overlap, but 0 and 1 aren't in the same measurement
    # grouping
    meas_map = [[0], [1]]
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1)) << 1
    
    # Bad: 0 and 1 are in the same grouping, but acquisitions
    # partially overlap
    meas_map = [[0, 1]]
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1)) << 1

非推奨のメモ

  • に2つの新しい引数が追加された。 qiskit.dagcircuit.DAGNode.semantic_eq()bit_indices1bit_indices2 が追加された。 Bit それぞれの DAGNodequbits または clbits リストのインデックスに対応付けることが期待される。 DAGCircuit. 非推奨期間中、これらの引数はオプションであり、指定されない場合、マッピングは各インスタンスの registerindex プロパティに基づいて自動的に構築される。 Bit インスタンスのプロパティに基づいて自動的に構築されます。 しかし、将来のリリースでは、これらは必須引数となり、マッピングはユーザーが提供する必要がある。

  • ビルダー機能 pulse ビルダーの機能

    • qiskit.pulse.call_circuit()
    • qiskit.pulse.call_schedule()

    は非推奨であり、将来のリリースで削除される予定です。 これらの関数は、 qiskit.pulse.call() に統一されている。

  • この qiskit.pulse.Schedule メソッド qiskit.pulse.Schedule.flatten() メソッドは非推奨であり、将来のリリースで削除される予定です。 代わりに qiskit.pulse.transforms.flatten() 関数を使うことができる。

  • 以下のクラスの assign_parameters()

    およびそのサブクラスは現在非推奨となっており、将来のリリースで削除される予定です。 この機能は ScheduleBlock これは、パラメータ化されたパルス・プログラムを構築するための将来の方向性である。

  • parameters

    は非推奨であり、将来のリリースで削除される予定です。 この機能は ScheduleBlock これは、パラメータ化されたパルス・プログラムを構築するための将来の方向性である。

  • Python 3.6 サポートは非推奨となり、将来のリリースで削除される予定です。 サポートが終了したら、使用している Python のバージョンを Python 3.7 以上にアップグレードする必要があります。

  • つの QuantumCircuit メソッド combine()extend() と、それらに対応する Python 演算子 ++= は非推奨であり、将来のリリースで削除される予定です。 代わりに QuantumCircuit メソッド compose() を使うべきである。 この方法によって compose() この方法は、レジスタが一致しない2つの回路をより柔軟に構成することができる。 しかし、非推奨となったメソッドとは異なり、自動的に量子ビット/Clbitsを追加することはない。 新しい量子ビット/Clビットに回路を追加するには qiskit.circuit.QuantumCircuit.tensor() メソッドが使える。 例:

    from qiskit.circuit import QuantumRegister, QuantumCircuit
    
    a = QuantumRegister(2, 'a')
    circuit_a = QuantumCircuit(a)
    circuit_a.cx(0, 1)
    
    b = QuantumRegister(2, 'b')
    circuit_b = QuantumCircuit(b)
    circuit_b.cz(0, 1)
    
    # same as circuit_a + circuit_b (or combine)
    added_with_different_regs = circuit_b.tensor(circuit_a)
    
    # same as circuit_a + circuit_a (or combine)
    added_with_same_regs = circuit_a.compose(circuit_a)
    
    # same as circuit_a += circuit_b (or extend)
    circuit_a = circuit_b.tensor(circuit_a)
    
    # same as circuit_a += circuit_a (or extend)
    circuit_a.compose(circuit_a, inplace=True)
  • インスタンスを Qubit メソッドの qubits kwarg にインスタンスを渡すサポートは廃止され、将来のリリースでは削除される予定です。 qiskit.transpiler.InstructionDurations.get() メソッドの kwarg にインスタンスを渡すサポートは非推奨となり、将来のリリースで削除される予定です。 代わりに get() メソッドを呼び出す必要があります。

  • BaseOperatorcompose メソッドを呼び出すために @ (__matmul__) を使用することは推奨されません。 Operator) を使用することは非推奨であり、将来のリリースで削除される予定です。 この qiskit.quantum_info.Operator.compose() メソッドは直接使うこともできるし、 & (__and__) 演算子を使って呼び出すこともできる。

  • メソッドの呼び出しには * (__mul__) を使う。 dot()BaseOperator メソッドの呼び出しに使用することは推奨されません。 qiskit.quantum_info.Operator) を使用することは非推奨であり、将来のリリースで削除される予定です。 代わりに dot() を直接呼び出すことができる。

  • のメソッドを呼び出すには、 @ (__matmul__) を使う。 evolve() メソッドを呼び出すために qiskit.quantum_info.Statevectorqiskit.quantum_info.DensityMatrix クラスのメソッドを呼び出すために使用することは非推奨であり、将来のリリースで削除される予定です。 evolve メソッドを直接使用することも、 & (__and__) 演算子を使用して呼び出すこともできる。

  • qiskit.pulse.schedule.ParameterizedSchedule クラスは非推奨となり、将来のリリースで削除される予定です。 代わりに Schedule オブジェクトを Parameter オブジェクトで直接パラメータ化することができる:

    from qiskit.circuit import Parameter
    from qiskit.pulse import Schedule
    from qiskit.pulse import ShiftPhase, DriveChannel
    
    theta = Parameter('theta')
    target_schedule = Schedule()
    target_schedule.insert(0, ShiftPhase(theta, DriveChannel(0)), inplace=True)
  • モジュールの qiskit.pulse.ScheduleComponent クラスは廃止されました。 qiskit.pulse クラスは非推奨となり、将来のリリースで削除される予定です。 を使うか、直接 qiskit.pulse.Schedule を使うか、直接 qiskit.pulse.Instruction 。 さらに、 ScheduleComponent クラスの主な目的は、 と の両方に共通の基本クラスとして使用することであった。 ScheduleInstruction の共通の基底クラスであった。 ScheduleComponent の入力を受け入れることを明示的に型チェックまたは文書化しているところは、 Instruction または Schedule.

  • IBMQ API ペイロードの JSON スキーマ・ファイルと使用法は非推奨であり、将来のリリースで削除される予定です。 これには、 qiskit.schemas モジュールと qiskit.validation モジュールの下にあるすべてのものが含まれる。 また、 validate kwargs for qiskit.qobj.QasmQobj.to_dict()qiskit.qobj.QasmQobj.to_dict() のモジュールレベルのfastjsonschemaバリデータも含まれます。 qiskit.qobj (のモジュールレベルのfastjsonschemaバリデータも含まれます(これは非推奨の警告を出しません)。 スキーマファイルは Qiskit/ibmq-schemas リポジトリに移動され、それらはAPIスキーマの正規版として扱われるべきです。 今後は、これらのスキーマのみが更新を受け、スキーマの真実のソースとして使用される。 qiskit-terraにバンドルされているスキーマに依存していた場合は、代わりにそのリポジトリを使用するように更新する必要があります。

  • qiskit.util モジュールは非推奨となり、将来のリリースで削除される予定です。 に取って代わられた。 qiskit.utils に置き換わった。 Python 3.6 では実現不可能だったため、この非推奨化に関して DeprecationWarning は発行されないことに注意。

  • モジュールの CXDirection トランスパイラー・パスは非推奨となり、将来のリリースでは削除される予定です。 qiskit.transpiler.passes モジュールのトランスパイラ・パスは非推奨となり、将来のリリースで削除される予定です。 代わりに GateDirection 。 ゲートを持つ回路の変換もサポートするようになった以外は、 CXDirection と同じ動作をする。 ECRGate ゲートに加えて CXGate ゲートもサポートするようになった。

  • モジュールの CheckCXDirection トランスパイラー・パスは非推奨となり、将来のリリースでは削除される予定です。 qiskit.transpiler.passes モジュールのトランスパイラ・パスは非推奨となり、将来のリリースで削除される予定です。 代わりに CheckGateDirection 。 ゲートのみならず、すべての2qubitゲートの方向チェックもサポートするようになったことを除けば、 CheckCXDirection と同じ動作をする。 CXGate ゲートの方向チェックもサポートするようになった。

  • この WeightedAdder メソッド num_ancilla_qubits() は非推奨であり、将来のリリースでは削除される予定です。 属性に置き換えられました。 qiskit.circuit.library.WeightedAdder.num_ancillas 属性に置き換えられました。

  • クラスの以下のレガシー・メソッドは非推奨です。 qiskit.quantum_info.Pauli クラスの以下のレガシーメソッドは非推奨となりました。 更新されたパウリ・クラスでの置き換え使用については、メソッドのドキュメントを参照してください。

    • from_label()
    • sgn_prod()
    • to_spmatrix()
    • kron()
    • update_z()
    • update_x()
    • insert_paulis()
    • append_paulis()
    • delete_qubits()
    • pauli_single()
    • random()
  • channel または target 引数として list または numpy.ndarray を使用する。 qiskit.quantum_info.process_fidelity(), qiskit.quantum_info.average_gate_fidelity(), qiskit.quantum_info.gate_error()および qiskit.quantum_info.diamond_norm() 関数の引数として または を使用することは非推奨となっており、将来のリリースではサポートされません。 入力は、代わりに Gate または BaseOperator サブクラスオブジェクト (例えば Operator, Choiなど)

  • からの参照へのアクセス Qubit および Clbit インスタンスへの参照は register または index プロパティを介したレジスタへのアクセスは非推奨となり、将来のリリースで削除される予定です。 その代わり Register オブジェクトは Bit オブジェクトを見つけることができる。

  • 現在の qiskit.visualization.pulse_drawer() 関数は非推奨で、将来のリリースでは qiskit.visualization.pulse_drawer_v2() (後方互換性はありません) に置き換えられる予定です。

  • の出力に set 型から継承されたメソッドを使用する。 parameters 属性(以前は set)の出力に 型から継承されたメソッドを使用することは非推奨です。 QuantumCircuit クラスの属性(以前は でした)の出力における、 型から継承されたメソッドの使用は非推奨であり、将来のリリースで削除される予定です。 これには、 add()difference()difference_update()discard()intersection()intersection_update()issubset()issuperset()symmetric_difference()symmetric_difference_update()union()update()__isub__() (これは -= 演算子)、 __ixor__() (これは ^= 演算子)のメソッドが含まれる。

  • メソッドの最初の(そして唯一の)位置引数の名前が変更された。 qiskit.circuit.QuantumCircuit.bind_parameters() メソッドの最初の唯一の位置引数の名前が value_dict から values に変更された。 values_dict という名前で引数を渡すことは非推奨であり、今後のリリースでは削除される予定である。 例えば、以前 bind_parameters()bind_parameters(values_dict={}) bind_parameters({}) のような呼び出しをしていた場合、これは非推奨であり、 に置き換えるべきである。 bind_parameters(values={})

  • メソッドの最初の(そして唯一の)位置引数の名前が変更された。 qiskit.circuit.QuantumCircuit.assign_parameters() メソッドの最初の唯一の位置引数の名前が param_dict から parameters に変更された。 param_dict という名前で引数を渡すことは非推奨であり、今後のリリースでは削除される予定です。 例えば、以前 assign_parameters()assign_parameters(param_dict={}) assign_parameters({}) のような呼び出しをしていた場合、これは非推奨であり、 に置き換えるべきである。 assign_parameters(values={})

バグ修正

  • 関数が execute() 関数が QiskitError 例外を発生させる問題を修正した。 ParameterVectorparameter_bind オブジェクトが渡されると例外が発生する問題を修正しました。 パラメーター。 例えば、次のような呼び出しが可能になった:

    execute(circuit, backend, parameter_binds=[{pv1: [...], pv2: [...]}])

    ここで、 pv1pv2 はオブジェクトである。 ParameterVector オブジェクトです。 5467を修正

  • クラスのパラメトリック・パルスのラベルが、サンプリングされたパルスのように適切に設定されていなかった問題を修正した。 PulseQobjInstruction クラスのパラメトリック・パルスのラベルが、サンプリング・パルスのように適切に設定されていなかった問題を修正しました。 また、これは PulseDefaults からインポートされるパルス名も正しく設定される。 Backendx90 x90mなどからインポートされたパルス名が適切に設定される。 5363を修正

  • バインドされていないパラメーターが global_phase オブジェクトの QuantumCircuit オブジェクトの parameters 属性に表示されず、バインドできない問題を修正しました。 #5806を修正

  • その calibrations 属性は QuantumCircuit オブジェクトの属性は、 += (つまり extend() メソッド) と + (つまり combine() メソッド) が使われたときに保存されるようになりました。 5930と #5908を修正

  • クラスの name クラスのセッター・メソッド Register (の親クラスである QuantumRegisterClassicalRegisterのセッター・メソッドは、 OpenQASM 仕様に従って、代入された文字列が有効なレジスタ名であるかどうかをチェックしませんでした。 このチェックは、以前はコンストラクタで名前が指定された場合にのみ実行されていましたが、 name 属性に直接無効な値を設定しても例外が発生するように修正されました。 5461を修正

  • の問題を修正しました。 qiskit.visualization.circuit_drawer() 関数と qiskit.circuit.QuantumCircuit.draw() メソッドの問題を修正しました。 QuantumCircuit 関数とメソッドの問題を修正しました。 Gate を使用した MeasureClassicalRegisterの左側に表示される可能性がありました。 GateMeasure の左に表示することができた。 5387を修正

  • トランスパイラーのパスでは qiskit.transpiler.passes.CSPLayout において、より低い番号の量子ビットへの偏りが観察された。 この望ましくない偏りは、候補者をシャッフルして結果をランダムにすることで修正されている。 さらに CSPLayout パスの使用法 preset_passmanagersseed_transpiler (レベル2および3)のパスの使い方が調整された。 transpile() が呼び出されたときに 5990を修正

  • オブジェクトの channels フィールドが PulseBackendConfiguration オブジェクトのフィールドが qiskit.providers.models.PulseBackendConfiguration.to_dict メソッドの出力に含まれていなかったバグを修正した。 5579を修正

  • 'circular' エンタングルメントを修正。 qiskit.circuit.library.NLocal 回路がエンタングルメントブロックと同じサイズを持つエッジケース(例えば、2量子ビット回路とCZエンタングルメントゲート)のために、回路クラスのエンタングルメントを修正しました。 この場合、エンタングルメントゲートは1つしかないはずだが、偶然にも1つ目と逆方向に2つ目が追加された。 固定 qiskit-community/qiskit-aqua#1452

  • のブレークポイントの扱いを修正した。 PiecewisePolynomialPauliRotations クラスのブレークポイントの取り扱いを修正した。 qiskit.circuit.library. nn+1 ブレークポイントを設定することができる。 2num qubits2^\text{num qubits} これは、最後の区間の終わりから 2num qubits2^\text{num qubits} までの関数が恒等式であるために重要である。

  • サーキット・クラスで qiskit.circuit.library.Permutation の問題を修正しました。 この問題は qiskit.circuit.library.QuantumVolume も影響する可能性がある。修正 #5812

  • メソッドでQASM出力を生成する際の問題を修正しました。 qasm() メソッドで QuantumCircuit オブジェクトに対して ControlledGate を持つオブジェクトに対してこのメソッドでQASM出力を生成すると、指定されたコントロールの状態とは無関係に、すべてのコントロールが閉じているかのように出力されてしまう問題を修正しました。 これは、生成されたQASMを解析した場合 from_qasm_str() 生成されたQASMを解析すると

    のQASM出力を更新することで修正した。 qasm() これは、 XGate を使ってオープン制御を実装する複合ゲートを定義することによって修正されました。 複合ゲートは <original_gate_name>_o<ctrl_state> のように命名される。 o はオープン制御を表し、 ctrl_state は制御状態の整数値である。 修正 #5443

  • のオブジェクトをバインディングする際の問題を修正しました。 Parameter オブジェクトを QuantumCircuitparameter_bindsexecute でオブジェクトをバインドすると QuantumCircuit オブジェクトが同じ name を持ってしまう問題を修正しました。 この修正により bind_parameters()assign_parameters() として inplace=False

    <base name>-<class instance no.>[-<pid name>]

    ここで、 <base name> は "name "kwargによって与えられた名前である。そうでなければ、デフォルトは "circuit "である。 クラスのインスタンス番号は、クラスのインスタンスが生成されるたびにインクリメントされる。 <pid name> が付加される。 5185を修正

  • scheduler() 関数で、入力回路にバインドされていないオブジェクトが含まれる場合に例外が発生する問題を修正しました。 QuantumCircuit オブジェクトが含まれていた場合に例外が発生する問題を修正した。 5304を修正

  • の問題を修正しました。 qiskit.transpiler.passes.TemplateOptimization トランスパイラ・パスの問題を修正しました。 Parameter オブジェクトを含むテンプレート回路が、テンプレート・マッチング中にパラメータをバインドできない場合、いくつかのシナリオでクラッシュする問題を修正しました。 もし Parameter オブジェクトをバインドできない場合 Parameter は破棄され TemplateOptimization によって無視されます。 5533を修正

  • クラシックビットが適切に処理されない qiskit.visualization.timeline_drawer() 関数で古典ビットが適切に処理されていなかった問題を修正。 5361を修正

  • の問題を修正しました。 qiskit.visualization.circuit_drawer() 関数と qiskit.circuit.QuantumCircuit.draw() メソッドの Delay オブジェクト内の QuantumCircuit オブジェクトの命令がアイドル時間として正しく扱われていなかった問題を修正しました。 そのため、 idle_wires kwargを False に設定しても、オブジェクトのワイヤーは表示される。 Delay オブジェクトが表示される。 ワイヤー上にオブジェクトしかない場合、アイドルワイヤーが視覚化から削除されるように修正されました。 Delay オブジェクトがある場合、アイドルワイヤが視覚化から削除されるように修正されました。

  • 以前は、 layout_method kwargオプションが transpile() 関数に optimization_level kwargを >= 2に設定し、パスが実行されるようにしていました。 qiskit.transpiler.passes.CSPLayout が実行されるように CSPLayout が解を見つけた場合、 layout_method のメソッドは実行されませんでした。 これは、 layout_method が指定された場合、常に尊重されるように修正された。 5409を修正

  • 引数 coupling_map=None (明示的に設定されているか、デフォルト値として暗黙的に設定されているか、 backend kwargを介して設定されている)の場合、トランスパイル処理は回路を「埋め込む」ものではなかった。 つまり、 initial_layout が指定されていても、仮想量子ビットは物理量子ビットに割り当てられなかった。 これは修正され qiskit.compiler.transpile() 関数は回路を埋め込むことによって initial_layout の引数を尊重するように修正されました:

    from qiskit import QuantumCircuit, QuantumRegister
    from qiskit.compiler import transpile
    
    qr = QuantumRegister(2, name='qr')
    circ = QuantumCircuit(qr)
    circ.h(qr[0])
    circ.cx(qr[0], qr[1])
    
    transpile(circ, initial_layout=[1, 0]).draw(output='mpl')

    initial_layout 、回路よりも多くの量子ビットを参照する場合、トランスパイルプロセスは回路をアンシラで拡張する。

    from qiskit import QuantumCircuit, QuantumRegister
    from qiskit.compiler import transpile
    
    qr = QuantumRegister(2, name='qr')
    circ = QuantumCircuit(qr)
    circ.h(qr[0])
    circ.cx(qr[0], qr[1])
    
    transpile(circ, initial_layout=[4, 2], coupling_map=None).draw()

    5345を修正

  • トランスパイラー・パスのコンストラクタに新しいkwarg、 user_cost_dict が追加された。 qiskit.transpiler.passes.TemplateOptimization が追加されました。 これにより、ユーザーは、基礎となるテンプレートマッチングアルゴリズムのゲートに、カスタムコスト辞書を提供することができる。 例:

    from qiskit.transpiler.passes import TemplateOptimization
    
    cost_dict = {'id': 0, 'x': 1, 'y': 1, 'z': 1, 'h': 1, 't': 1}
    pass = TemplateOptimization(user_cost_dict=cost_dict)
  • を渡すときの問題 Counts オブジェクトを get_counts()marginal_counts() が返すオブジェクトを渡すと Counts オブジェクトを生成していた問題が修正されました。 5424を修正

  • のヘルパー量子ビットの割り当てを改善した。 PolynomialPauliRotationsPiecewiseLinearPauliRotations のヘルパー量子ビットの割り当てを改善し、これらの回路の実装をより効率的にした。 5320と 5322を修正

  • に割り当てられたヘルパー量子ビットの使い方を修正。 MCXGate クラスの WeightedAdder クラスの この修正以前は、これらは割り当てられていたが使用されていなかった。 5321を修正

  • 多くの場合、 latex 関数の出力メソッドと qiskit.visualization.circuit_drawer() 関数と draw() メソッドの出力メソッドがゲート名を正しく表示しなかったり、あるべき場所にゲート・パラメータが含まれていなかったりしました。 これで、 mpl 出力メソッドで表示されるのと同じようにゲート名が表示され、パラメータがあるすべてのゲートについてパラメータが表示される。 また、一部のゲートが正しい形で表示されていなかったため、修正した。 5605 、#4938 、#3765を修正

  • クラシック・レジスタを含むサブサーキットで qiskit.circuit.Instruction.to_instruction()Instruction オブジェクトが QuantumCircuit オブジェクトに追加された場合 qiskit.visualization.circuit_drawer() 関数と qiskit.circuit.QuantumCircuit.draw() メソッドからの出力が、本来右に表示されるべきサブサーキットを小節の左に表示する場合がある問題を修正しました。 修正 #5947

  • に関する問題を修正しました。 Delay オブジェクトが QuantumCircuitqiskit.compiler.transpile() の単位が Delay の単位に変換されない問題を修正した。 Backendbackend kwarg が transpile() に設定されている場合、この問題は修正されました。 その結果、ユニットのミスマッチのために、例えばランニングのような誤った動作が発生する可能性がある:

    from qiskit import transpile, execute
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(1)
    qc.delay(100, [0], unit='us')
    
    qc = transpile(qc, backend)
    job = execute(qc, backend)

    の場合、バックエンドの遅延は100タイムス テップ(各タイムステップはdt)ではなく、予想される( 100e-6 / dt)タイムステップになる。 これは修正され qiskit.compiler.transpile() 関数が適切に単位を変換するように修正されました。

その他の注意事項

  • qiskit.test.mock のすべての偽/モック・バックエンドのスナップショットは、最近のデバイスの変更を反映するために更新されました。 これには basis_gates 属性が BackendConfiguration['cx', 'rz', 'sx', 'x', 'id'] のqubitプロパティに readout_length プロパティが追加されました。 BackendPropertiesまた PulseDefaults を更新し、すべてのモック・バックエンドがパラメトリック・パルス・ベースの InstructionScheduleMap インスタンスに対応しました。

エア 0.8.0

前奏曲

0.8 リリースにはいくつかの新機能とバグ修正が含まれている。 このリリースのハイライトは、サポートされているシミュレーション手法のいずれかを使用して回路シミュレーションを実行するための統一された AerSimulator バックエンドの導入、様々な種類のシミュレータ・データを保存するためのカスタム命令を含むシミュレータ命令ライブラリ (qiskit.providers.aer.library)、分散コンピューティング環境上で大規模シミュレーションを実行するためのMPIサポートです。

新機能

  • Python 3.9 のサポートが追加されました。 ソースからビルドすることなく、 Python 3.9、Qiskit Aerを実行できるようになりました。

  • CMakeフラグ DISABLE_CONAN (default=OFF) を追加する。 ソースからインストールする場合、これを ON に設定すると、Conan パッケージ・マネージャーをバイパスして、システムにすでにインストールされているライブラリを見つけることができる。 これは環境変数 DISABLE_CONAN としても利用可能で、CMakeフラグよりも優先される。 これはAERの正式な構築手順ではない。 したがって、ユーザーはCMakeが見つけられるように、必要なライブラリと対応するファイルをすべて提供する責任がある。

  • このリリースには、分散コンピューティング環境上で大規模シミュレーションを実行するためのMPIサポート付きqiskit-aerの構築がサポートされています。 MPI環境でのビルドと実行については、 寄稿ガイドを参照のこと。

  • WindowsでCUDAを有効にしてqiskit-aerをビルドできるようになりました。 GPUをサポートしたソースからビルドする手順については、 コントリビュート・ガイドを参照してください。

  • qiskit-aer Python エクステンションをソースからビルドする場合、 C++ コンパイルを可能にするために、 いくつかのビルド依存関係をプリインストールする必要があります。 エクステンションをビルドする際のユーザーの利便性として、これらのビルドに欠落している依存関係は、 setuptools の通常のインストールステップの前に、 pip を使って自動的にインストールされる。 この問題を解決するために、新しい環境変数 DISABLE_DEPENDENCY_INSTALL が追加された。 Python エクステンションをソースからビルドするときに 1 または ON に設定すると、これらの不足している依存関係の自動インストールが無効になります。

  • 最適化されたN量子ビット・パウリゲート( qiskit.circuit.library.PauliGate) を StatevectorSimulator, UnitarySimulator, および QasmSimulator , AerSimulator の状態ベクトル法および密度行列法に追加。

  • AerSimulatorQasmSimulatorStatevectorSimulatorUnitarySimulator バックエンドの run() メソッドが QuantumCircuit (または QuantumCircuit オブジェクトのリスト)を入力として受け取るようになった。 以前の QasmQobj オブジェクトは今のところまだサポートされているが、将来のリリースでは非推奨となる予定だ。

    この使い方の例については、こちらを参照のこと:

    from qiskit import transpile, QuantumCircuit
    
    from qiskit.providers.aer import Aer
    
    backend = Aer.get_backend('aer_simulator')
    
    circuit = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    qc.measure_all()
    
    tqc = transpile(circuit, backend)
    result = backend.run(tqc, shots=4096).result()
  • PulseSimulator バックエンドの run() メソッドが Schedule (または Schedule オブジェクトのリスト)を入力として受け取るようになりました。 以前の PulseQobj オブジェクトは今のところまだサポートされているが、将来のリリースでは非推奨となる予定だ。

  • 以下のシミュレーション・メソッドをサポートする新しい AerSimulator シミュレータ・バックエンドを追加します

    • automatic
    • statevector
    • stabilizer
    • density_matrix
    • matrix_product_state
    • unitary
    • superop

    デフォルトの自動メソッドでは、回路命令とノイズ・モデル(ある場合)に基づいて、実行回路ごとに個別にシミュレーション・メソッドが自動的に選択されます。 特定のメソッドでシミュレータを初期化するには、methodオプションを使います。

    状態ベクトル法、密度行列法、ユニタリー法のGPUシミュレーションは、 device='GPU' バックエンドオプションを設定することで有効にすることができます。

    unitarysuperop のメソッドは、実行回路のユニタリー行列またはスーパーオペレータ行列をシミュレートするため、測定をサポートしていないことに注意してください。そのため、新しい save_unitary()save_superop()save_state() 命令のいずれかを使用して、返される結果にシミュレータの状態を保存する必要があります。 同様に、他のシミュレーション方法の状態も、適切な命令を使って保存することができる。 詳細は qiskit.providers.aer.library APIドキュメントを参照。

    なお、 AerSimulator シミュレータは、 QasmSimulatorStatevectorSimulatorUnitarySimulator バックエンドに取って代わるもので、将来のリリースでは非推奨となる予定です。

  • AerProvider クラスが更新され、利用可能なすべてのシミュレーション方法とシミュレーション・デバイス用にあらかじめ設定された複数の AerSimulator バックエンドが含まれるようになりました。 新しいバックエンドは、プロバイダー・インターフェースを通じて、以下の名前を使ってアクセスできる

    • "aer_simulator"
    • "aer_simulator_statevector"
    • "aer_simulator_stabilizer"
    • "aer_simulator_density_matrix"
    • "aer_simulator_matrix_product_state"
    • "aer_simulator_extended_stabilizer"
    • "aer_simulator_unitary"
    • "aer_simulator_superop"

    Aerが互換性のあるシステム上にGPUサポート付きでインストールされている場合、以下のGPUバックエンドも利用可能です

    • "aer_simulator_statevector_gpu"
    • "aer_simulator_density_matrix_gpu"
    • "aer_simulator_unitary_gpu"

    例:

    from qiskit import Aer
    
    # Get the GPU statevector simulator backend
    backend = Aer.get_backend('aer_simulator_statevector_gpu')
  • "extended_stabilizer" シミュレーション・メソッド使用時に測定を実行するための新しい norm estimation メソッドを追加。 このノルム推定法は、 AerSimulatorQasmSimulator のバックエンドに以下のオプションを渡すことで使用できる

    simulator = QasmSimulator(
        method='extended_stabilizer',
        extended_stabilizer_sampling_method='norm_estimation')

    このノルム推定法は、 metropolis または resampled_metropolis の代替案よりも低速だが、出力分布が疎な回路ではより優れた性能を発揮する。 詳しくは QasmSimulator のドキュメントを参照。

  • シミュレータの状態をさまざまな形式で保存するための命令を追加します。 これらの指示は

    • qiskit.providers.aer.library.SaveDensityMatrix
    • qiskit.providers.aer.library.SaveMatrixProductState
    • qiskit.providers.aer.library.SaveStabilizer
    • qiskit.providers.aer.library.SaveState
    • qiskit.providers.aer.library.SaveStatevector
    • qiskit.providers.aer.library.SaveStatevectorDict
    • qiskit.providers.aer.library.SaveUnitary

    これらの命令は、Aerをインポートする際に QuantumCircuit に追加される save_density_matrixsave_matrix_product_statesave_stabilizersave_statesave_statevectorsave_statevector_dictsave_unitary 回路メソッドを使用して量子回路に追加することができます。

    各命令のメソッド互換性の詳細については、 qiskit.providers.aer.library APIドキュメントを参照のこと。

    なお、スナップショット命令 SnapshotStatevector, SnapshotDensityMatrix, SnapshotStabilizer はまだサポートされていますが、将来のリリースでは非推奨となる予定です。

  • シミュレータの状態 ρ\rho に対して,エルミート演算子 HH の期待値 H=Tr[Hρ]\langle H\rangle = Tr[H\rho] ,または期待値と分散 Var(H)=H2H2Var(H) = \langle H^2\rangle - \langle H\rangle^2 を保存するための qiskit.providers.aer.library.SaveExpectationValueqiskit.providers.aer.library.SaveExpectationValueVariance 量子回路命令を追加します.これらの命令は、Aerのインポート時に QuantumCircuit に追加される save_expectation_value および save_expectation_value_variance 回路メソッドを使用して量子回路に追加することができます。

    なお、スナップショット命令 SnapshotExpectationValue はまだサポートされているが、将来のリリースでは非推奨となる予定である。

  • qiskit.providers.aer.library.SaveProbabilitiesqiskit.providers.aer.library.SaveProbabilitiesDict 量子回路命令を追加し、シミュレータ状態の Z-basis 測定のすべての測定結果確率を保存する。 これらの命令は、Aerのインポート時に QuantumCircuit に追加される save_probabilitiessave_probabilities_dict の回路メソッドを使用することで、量子回路に追加することができる。

    なお、スナップショット命令 SnapshotProbabilities はまだサポートされているが、将来のリリースでは非推奨となる予定である。

  • qiskit.providers.aer.library.SaveAmplitudesqiskit.providers.aer.library.SaveAmplitudesSquared 、サポートされるシミュレーション手法の選択複素状態ベクトル振幅、または選択確率(振幅の2乗)を保存するための回路命令を追加します。 これらの命令は、Aerのインポート時に QuantumCircuit に追加される save_amplitudessave_amplitudes_squared の回路メソッドを使用して量子回路に追加することができる。

  • シミュレーターの状態を設定する方法を追加。 これらの命令は、回路内の全数の量子ビットに対して定義されなければならない。 回路のどのポイントにも適用でき、シミュレータの状態を指定されたもので上書きします。 追加された指示は以下の通り

    • qiskit.providers.aer.library.SetDensityMatrix
    • qiskit.providers.aer.library.SetStabilizer
    • qiskit.providers.aer.library.SetStatevector
    • qiskit.providers.aer.library.SetUnitary

    これらの命令は、Aerをインポートする際に QuantumCircuit に追加される set_density_matrixset_stabilizerset_statevectorset_unitary 回路メソッドを使用して量子回路に追加することができます。

    各命令のメソッド互換性の詳細については、 qiskit.providers.aer.library APIドキュメントを参照のこと。

  • "matrix_product_state" シミュレーション手法に斜めゲートのサポートを追加。

  • "matrix_product_state" シミュレーション方法に initialize 命令のサポートを追加。

既知の問題

  • "matrix_product_state" 、クラウス・ノイズ・モデルを使って特定の回路をシミュレーションすると、シミュレータがクラッシュするという既知の問題があります。 詳細は #306を参照。

アップグレードの注意

  • コナンの最小バージョンは 1.31.2 に引き上げられた。 の新しいバージョンとの互換性の問題を修正する必要があった。 urllib3 (コナンの依存関係である)の新しいバージョンとの互換性の問題を修正する必要があった。 また、 AppleClang 12のネイティブ・サポートも追加され、新しいアップル・コンピュータを使用しているユーザーには便利だ。

  • pybind11 最低限必要なバージョンは 2.4 ではなく 2.6。 これは、WindowsでCUDAコンパイルをサポートするために必要である。

  • Cythonはビルド依存として削除されました。

  • qiskit-aer 0.7 で非推奨となっていたノイズモデルからの x90 ゲート分解を削除した。 この分解は、通常のノイズモデルの基底ゲートとqiskitトランスパイラを使うことで行われる。

  • "extended_stabilizer" シミュレーション方法の以下のオプションが変更されました。

    • extended_stabilizer_measure_sampling:このオプションは extended_stabilizer_sampling_method というオプションに置き換えられました。
    • extended_stabilizer_mixing_time:このオプションは、 metropolis および resampled_metropolis サンプリングメソッドにのみ適用されることを明確にするため、 extended_stabilizer_metropolis_mixing_time と改名された。
    • extended_stabilizer_norm_estimation_samples:このオプションは extended_stabilizer_norm_estimation_default_samples に改名された。

    ノルム推定サンプリング法の動作の一部を制御する、 extended_stabilizer_norm_estimation_repetitions というオプションが追加された。

非推奨のメモ

  • Python 3.6 サポートは非推奨となり、将来のリリースで削除される予定です。 サポートが終了したら、使用している Python のバージョンを Python 3.7 以上にアップグレードする必要があります。

バグ修正

  • set_options() を使用して返されたバックエンドに設定されたオプションがプロバイダに保存され、同じ名前のバックエンドに対して get_backend() をそれ以降呼び出した場合にも保持される AerProvider のバグを修正。 これで、 backends() を呼び出すたびに、設定可能なシミュレータ・バックエンドの新しいインスタンスが返される。
  • 回路にサポートされていないシミュレータ命令が含まれている場合に返されるエラーメッセージのバグを修正しました。 以前は、サポートされている命令の一部が、サポートされていない命令とともにエラーメッセージに表示されていました。
  • "method""noise_model" オプションを同時に使用する場合、および from_backend() を使用して構築されたシミュレーターで使用する場合に、 QasmSimulator の基底ゲートを設定する際の問題を修正しました。 これでリストアップされた基底ゲートは、バックエンドのコンフィギュレーション、シミュレーション方法、ノイズモデルの基底ゲートがサポートするゲートの交差点となる。 ノイズモデルの基底ゲートとシミュレータの基底ゲートの交点が空の場合、警告が記録されます。
  • "sx"` ゲート SXGatematrix_product_state.hpStateOpSet において、C++ コードでサポートされているゲートとしてリストされていなかったバグを修正。
  • QasmSimulator"density_matrix" メソッドでサポートされる基底ゲートとして "csx", "cu2", "cu3" が誤って表示されていたバグを修正。
  • matrix_product_state_internal.cpp の関数間でパラメータが正しく渡されず、誤ったシミュレーションが行われたり、無効なステートに到達して無限ループに陥るバグを修正。
  • 条件レジスタの幅が64より大きい場合、 c_if が機能しないバグを修正。 1077号参照。
  • 条件付きゲートのノイズが、古典的なレジスタ値に基づいて条件付きゲートが実際に適用されたかどうかに関係なく、常に適用されていたバグ #1153 )を修正。 これで、条件付きゲートのノイズは、条件付きゲートが適用された場合にのみ適用されるようになった。
  • ネストされた OpenMP フラグが、本来設定されるべきでないのに true に設定されていたバグを修正。
  • QasmSimulator の行列積状態メソッドで切り捨てを適用する際のバグを修正。
  • 問題 #1126 :単一量子ビットの測定報告におけるバグを修正。 このバグは、測定値を出力データ構造体にコピーする際に発生した。
  • MPSでは、apply_krausは内部量子ビットではなく、パラメータ量子ビットの入力ビットを直接操作していた。 MPSアルゴリズムでは、量子ビットは常に移動しているので、すべての演算は内部の量子ビットに適用されるべきである。
  • MPS::sample_measureを呼び出すとき、最初にqubitsをデフォルトの順序に並べ替える必要がある。これは qasm_controller.This の仮定であり、メソッドmove_all_qubits_orderingを呼び出すことで行われる。 sample_measure では正しいが、sample_measure では見つからない。
  • QasmSimulatorfrom_backend() メソッドで、コンフィギュレーションの local 属性が常に True に設定されるのではなく、バックエンドの値に設定されるバグを修正。
  • from_backend() および from_backend() において、 basis_gates['id', 'rz', 'sx', 'x', 'cx'] に設定された IBMQ デバイスに正しく設定されないバグを修正。 これでノイズモデルは、バックエンドの基底ゲートと同じ基底ゲートを持つことになる。
  • Extended "extended_stabilizer "シミュレーション・メソッドが出力分布が疎な量子回路で誤った結果を与える問題を修正しました。 詳細と例については #306を参照。

イグニス 0.6.0

新機能

  • qiskit.ignis.mitigation.expval_meas_mitigator_circuits() 関数は改良され、CTMP法による較正に使用される関数によって生成される回路数は O(n)O(n) から O(logn)O(\log{n}) (ここで nn は量子ビット数)に減少している。

アップグレードの注意

  • qiskit.ignis.verification.randomized_benchmarking_seq() 関数は、アップグレードされたCNOTDihedralクラス、 qiskit.ignis.verification.CNOTDihedral を使用しており、2つ以上の量子ビットに対してCNOT-Dihedral Randomized Benchmarkingを実行することができます。
  • pythonパッケージ retworkx はqiskit-ignisをインストールするのに必要なものになりました。 これは、より良いパフォーマンスを得るために、以前の networkx (これはもはや必要条件ではない)の使用に取って代わるものである。
  • scikit-learn の依存性はもはや必須ではなく、現在はオプションの要件となっている。 IQ 測定識別器 (IQDiscriminationFitter, LinearIQDiscriminationFitter, QuadraticIQDiscriminationFitter, または SklearnIQDiscriminator) を使用している場合は、手動で scikit-learn をインストールする必要があります。 pip install scikit-learn を実行するか、 pip install qiskit-ignis[iq] と一緒に qiskit-ignis もインストールする必要があります。

バグ修正

  • エラー緩和クラス TensoredExpvalMeasMitigatorCTMPExpvalMeasMitigator において、 qubits kwarg が指定されていない場合、期待値メソッド expectation_value() で、カウント辞書の古典的なビット数ではなく、緩和器の全クビット数が誤って使用され、パフォーマンスが大幅に低下する問題を修正しました。 修正 #561
  • TomographyFitter, StateTomographyFitter, ProcessTomographyFitter"auto" メソッドを修正し、CVXPY がインストールされ、 SCS 以外のサードパーティ製 SDP ソルバーが利用可能な場合にのみ "cvx" を使用するようにしました。 これは、SCSソルバーが他のソルバー手法よりも精度が低く、密度行列やChoi行列を返すことが多いためである。 qiskit.quantum_info.state_fidelity() または qiskit.quantum_info.process_fidelity() 関数と併用した場合、検証に失敗します。

アクア 0.9.0

このリリースでQiskit Aquaプロジェクトは正式に非推奨となり、今後(このリリースから3ヶ月以内に)Aquaプロジェクトは最終リリースを行い、アーカイブ化されます。 qiskit-aquaが提供するすべての機能は、新しいパッケージまたは他のqiskitパッケージに移行されました。 qiskit-aquaが提供するアプリケーションモジュールは、いくつかの新しいパッケージに分割された: qiskit-optimization qiskit-nature, qiskit-machine-learning, および qiskit-finance。 こ れ ら の パ ッ ケ ー ジ は そ れ 自 体 で イ ン ス ト ールす る こ と も で き ま す し (標準的な pip install コ マ ン ド を 使 っ て、例 え ば pip install qiskit-nature )、 オ プ シ ョ ン の エク ス ト ラ と し て Qiskit メタパッケージの残りの部分と一緒にインス トールすることもできます(例: pip install 'qiskit[finance,optimization]' または pip install 'qiskit[all]'。 アルゴリズムとオペレータフローのコアとなるビルディングブロックは、現在qiskit-terraの一部として qiskit.algorithmsqiskit.opflow. Aquaの既存の使用方法に応じて、アプリケーションパッケージまたはQiskit Terraの新しいモジュールを使用する必要があります。

Qiskit Aquaからの移行方法については、 移行ガイドをご参照ください。

IBM Q プロバイダー 0.12.2

変更なし

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