Qiskit 0.25 リリースノート
0.25.4
Terra 0.17.2
前奏曲
これは、 0.17.1 リリースからのいくつかの問題を修正したバグフィックスリリースです。 このリリースで最も重要なのは QuantumInstance クラスの互換性を修正しました。 BackendV1 をベースにしたバックエンドで実行する場合の互換性を修正しました。 これにより、次のようなアルゴリズムやアプリケーションがすべて修正される。 qiskit.algorithms または qiskit.opflow で構築されたすべてのアルゴリズムとアプリケーションを修正します。
バグ修正
- トランスパイラ・パスの問題を修正しました。
BasisTranslatorトランスパイラ・パスの問題を修正しました。 その結果、実行時間が長くなり、最適な結果が得られなくなる可能性がある。 修正 #6085 SPSAで、callbackkwarg を介してコールバック関数でオプティマイザが初期化された場合、エラーが発生する可能性があった問題を修正。- の問題を修正した。
qiskit.quantum_info.Statevector.expectation_value()qiskit.quantum_info.DensityMatrix.expectation_value`methods where the ``qargs`()演算子がPauliまたはSparsePauliOp演算子が 修正 #6303 - メソッドの問題を修正しました。
qiskit.quantum_info.Pauli.evolve()メソッドの問題を修正した。CZGate,CYGateまたはSwapGateゲートで qiskit.opflow.SparseVectorStateFn.to_dict_fn()メソッドにおいて、以前はインデックス・エラーによりオール・ゼロ状態のエントリーが最大1つしかなかった問題を修正。qiskit.opflow.SparseVectorStateFn.equals()メソッドの問題を修正し、単一要素のスパース・ベクトル比較の代わりにTrueまたはFalseを適切に返すようにした。- の問題を修正しました。
StatevectorとDensityMatrix確率メソッドqiskit.quantum_info.Statevector.probabilities(),qiskit.quantum_info.Statevector.probabilities_dict(),qiskit.quantum_info.DensityMatrix.probabilities(),qiskit.quantum_info.DensityMatrix.probabilities_dict()ここで、返される確率はqargskwarg の特定の値に対して誤った順序を持つ可能性がある。 修正 #6320 - オブジェクトとの乗算を
TaperedPauliSumOpクラスがサポートしていなかった問題を修正した。ParameterExpressionassign_parameters()オブジェクトとの乗算をサポートしておらず、またParameterExpressionメソッドを持っていなかった。 修正 #6127 - をベースにしたバックエンドで
QuantumInstanceクラスの互換性を修正しました。BackendV1をベースとしたバックエンドで実行する場合の互換性を修正しました。 6280を修正
エア 0.8.2
変更なし
イグニス 0.6.0
変更なし
アクア 0.9.1
変更なし
IBM Q プロバイダー 0.12.3
変更なし
0.25.3
Terra 0.17.1
変更なし
エア 0.8.2
既知の問題
QasmSimulator、AerSimulatorの extended_stabilizer メソッドにおいて、特定のパウリ演算子成分に対して不正な値を返すため、SaveExpectationValue、SaveExpectationValueVarianceが無効化されました。 詳しくは#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メモリに加えて不要なホスト・メモリが割り当てられるバグが修正されました。
QasmSimulatorとAerSimulatorのstabilizerシミュレーターメソッドにおいて、save_expectation_valueとsnapshot_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.AnalysisResultfit属性がオプションになった。
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)は を正しく印刷するようになった。
-
トランスパイラのパス
Unrollerが、定義に1つのルールを含むネストされた命令の場合にグローバル・フェーズを保持しなかった問題を修正しました。 修正 #6134 -
の
parameter属性が、 オブジェクトのユニタリー行列に設定されていなかった問題を修正しました。ControlledGateUnitaryGate属性がUnitaryGateオブジェクトのユニタリー行列に設定されていなかった問題を修正しました。 以前は、control()ControlledGateを構築していた。parameter属性は、UnitaryGate行列の制御バージョンに設定されていた。 これにより、ベースとなるUnitaryGateオブジェクトのparameterが変更され、それに続くinverse()を呼び出すと、ダブル・コントロールUnitaryGateの逆が作成されることになる。 5750を修正 -
プリセット・パス・マネージャーに関する問題を修正
level_0_pass_managerとlevel_1_pass_manager(のoptimization_level0 と 1 に相当)の問題を修正しました。transpile())で、要求されたベースでない回路が生成される場合があった問題を修正した。 -
学習率と摂動の自動較正で
SPSAを学習率と摂動の自動較正(つまりlearning_rateとperturbationはイニシャライザーでNone)、今後のすべての最適化のためにキャリブレーションを保存します。 その代わり、キャリブレーションは新しい目的関数ごとに行う必要がある。
エア 0.8.1
バグ修正
AerSimulator、QasmSimulatorシミュレータのmatrix_product_stateメソッドを使用する際、クラウスエラーでノイズの多いシミュレーションを実行する際の問題を修正しました。 以前の行列積状態シミュレーション法では、クラウス行列を適用した後、隣接する量子ビットに変化が伝播しなかった。 これは、シミュレーションからの出力が正しくなるように修正された。 1184と #1205を修正qiskit.extensions.Initialize命令が、AerSimulatorおよびQasmSimulatorシミュレータのstatevectorおよびmatrix_product_stateシミュレーションメソッドの測定サンプリング最適化を、それが最初の回路命令であっても、すべての量子ビットに適用され、したがって決定論的であっても、無効にしてしまう問題を修正しました。 修正 #1210AerSimulatorおよび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 qiskit は qiskit-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.algorithms と qiskit.opflow. Aquaの既存の使用方法に応じて、アプリケーションパッケージまたはQiskit Terraの新しいモジュールを使用する必要があります。 Qiskit Aquaからの移行方法については、 移行ガイドをご参照ください。
Terra 0.17.0
前奏曲
Qiskit Terra 0.17.0 には多くの新機能とバグ修正が含まれています。 今回のリリースの主な新機能は qiskit.algorithms と qiskit.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.Instruction、qiskit.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を追加し、入力関数の区分的チェビシェフ近似を実装。 与えられた関数 と次数 に対して、このクラスは与えられた区間上の に対する クビット上の区分的多項式チェビシェフ近似を実装します。 近似の多項式はすべて次数 。例:
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()指定された量子ビットの読み出し長さ [(秒)] を返すメソッドです。 -
新しいクラス
ScheduleBlockがqiskit.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) -
その
StatevectorとDensityMatrixクラスには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の使用がサポートされました。ParameterとParameterExpressiondurationオブジェクトをサポートするようになりました。 例: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_gateskwargのゲートのみを使用する。 以前は、パスが自動的に次のゲートと入れ替わっていた。ZGateをU1Gateを無条件に置換していた。basis_gateskwargでは、これを避けるために、ターゲット・ベースに存在するZ回転ゲートを指定することができる。 -
クラスとサブクラスのコンストラクタは
Bitクラスおよびサブクラスのコンストラクタです、Qubit,ClbitおよびAncillaQubitのコンストラクタが更新され、2つのパラメータregisterとindexがオプションになりました。 これにより、レジスタに依存しないビット・オブジェクトの作成が可能になる。 -
新しいクラス
BooleanExpressionがqiskit.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 ├ └───┘└───┘└───┘└───┘ -
新しいクラスを追加しました、
PhaseOracleがqiskit.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_levelとmeas_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'}このメタデータは、回路の実行に影響を与えるために使用されるのではなく、オブジェクトの寿命の間、回路を追跡するために使用されるだけである。
metadata。transpile()とassemble(). プロバイダーに期待されるのは、返される結果にメタデータを関連付けることである。そうすれば、ユーザーは現在QuantumCircuit.nameでできるのと同じように、回路のメタデータに基づいて結果をフィルタリングできる。 -
新しい演算子クラスの追加
CNOTDihedralがqiskit.quantum_infoモジュールに追加されました。 このクラスは、量子ゲートによって生成されるCNOT-Dihedral群を表すのに使われる。CXGate,TGateとXGate. -
&(__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つの パルスで、その間にエコーを発生させる。XGateエコー用 このゲートはCXGate(と等価である(ローカルの前後回転でCNOTに変換できる)。 これは、現在の IBM ハードウェア上のネイティブゲートであり、これにコンパイルすることで、プリ/ポスト回転を回路の残りの部分にマージすることができる。 -
に新しいkwarg
approximation_degreeが追加された。transpile()関数に追加された。 有効な値は0から1の範囲で、大きいほど近似度が低いことを意味する。 これは、回路近似を実験するための発見的なダイヤルである。 この数値の具体的な解釈は各パスに委ねられ、各パスはこの数値を使ってパスの近似バージョンを実行することができる。 具体例としてはUnitarySynthesisパスや、離散ゲートセットへのトランスレータなどがある。 パスがこのオプションをサポートしていない場合、正確な変換を意味する。 -
2つの新しいトランスパイラー・パッセージ
GateDirectionとqiskit.transpiler.passes.CheckGateDirectionがqiskit.transpiler.passesモジュールに追加された。 これらの新しいパスは、CXDirectionとCheckCXDirection(どちらも現在は非推奨。詳細は非推奨ノートを参照)の、より一般的な置き換えとなるよう意図されており、同じ機能を実行するが、他のゲートでも動作する。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()メソッドによって内部的に使用される)には新しいkwargmethodがあり、これを'AG'または'greedy'に設定することで使用する合成メソッドを選択することができる。 デフォルトでは、3量子ビット以上の場合、'greedy'。これは、Bravyiらによるクリフォード要素合成のための非最適な貪欲コンパイルルーチンを使用している。 ...そして..、 これは、以前使われていたAaronson-Gottesman法(2つ以上の量子ビットの場合)と比較して、一般的に優れたCXコストをもたらす。method='AG'を設定することで、methodkwarg を使って、以前のデフォルトのアロンソン・ゴッテスマン法に戻すことができる。 -
モジュールの
Initialize。qiskit.extensionsモジュールのクラスが整数を用いて構築できるようになった。 整数の'1'ビットは、対応する量子ビットの回路にResetとXGateを挿入する。 これはqiskitの標準的なリトルエンディアンの慣例で行われる。つまり、整数の右端のビットがqubit 0に設定される。 例えば、Initializeのパラメーターを5に設定すると、量子ビット0と2が値1に設定される。from qiskit.extensions import Initialize initialize = Initialize(13) initialize.definition.draw('mpl') -
モジュールの
Initialize。qiskit.extensionsモジュールのqiskit.quantum_info.Statevector.from_label()メソッドに似ている)。 パウリのラベルは、パウリ固有状態Z、X、Yの基底状態を指す。 これらのラベルはQiskitの標準的なリトルエンディアン表記を使用します。例えば、'01'というラベルは、qubit 0を 、qubit 1を に初期化します。from qiskit.extensions import Initialize initialize = Initialize("10+-lr") initialize.definition.draw('mpl') -
のコンストラクタのクワーグ、
template_listは、トランスパイラ・パスのコンストラクタのためのクワーグである。qiskit.transpiler.passes.TemplateOptimizationトランスパイラ・パスのコンストラクタのkwargがQuantumCircuitとDAGDependencyオブジェクトのリストの取り込みに対応した。 以前は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を取り込むstylekwarg を渡すことができる基本的な機能があった。 この辞書は、辞書を渡すことなくJSONファイルから直接ロードできるように拡張された。 これにより、stylekwargにスタイルファイル名を文字列として渡すことで、ユーザーは新しいスタイルファイルを作成し、そのスタイルをビジュアライゼーションに使用することができる。この機能を利用するには、ユーザー設定ファイルで
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_processesとparallelという2つの設定オプションが追加された。parallel_map().parallelオプションはブール値で、複数プロセスで実行するかどうかを指定する。parallel_map()を複数プロセスで実行するかどうかを指定する。Falseに設定するとparallel_map()の呼び出しはシリアルに実行され、Trueに設定すると並列実行が可能になる。num_processesオプションは、並列実行時に使用するCPU数を設定する整数を取る。 デフォルトでは、システムのCPUコア数を使用する。 -
のデフォルトの動作を制御するために使用できる2つの新しい環境変数、
QISKIT_PARALLELとQISKIT_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モジュールのクラスは、コンストラクタで kwargalphaを使って設定するか、生成後に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()メソッドを使う)、クリフォード共役 から得られる Pauli を計算することができる。evolve()メソッドを使って計算することができる。クラスのAPIドキュメントを参照してください。
Pauliクラスの API ドキュメントを参照してください。 -
新しい関数
random_pauli()モジュールが追加されました。qiskit.quantum_infoモジュールに追加された。 -
新しいクラス
PiecewisePolynomialPauliRotationsがqiskit.circuit.libraryモジュールに追加された。 この回路ライブラリ要素は、ブレークポイントと係数によって定義される区分的多項式関数( )を量子ビットの振幅にマッピングするために使用されます。 ブレークポイント は のサブセットであり、 は状態量子ビットの数である。 対応する係数 、 はすべての多項式の中で最も次数の高いものである。 そして、 は次のように定義される:
ここで暗黙のうちに を仮定する。そして、振幅に適用されるマッピングは次式で与えられる
このマッピングは、制御されたパウリ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_methodkwargは、新しいオプションを受け付けるようになった。transpile()関数は新しいオプション'none'を受け付けるようになった。routing_method='none'、トランスパレーションの一部としてルーティング・パスは実行されない。 回路がカップリング・マップに適合しない場合はTranspilerError例外が発生する。 -
新しいゲートクラス、
RVGateがqiskit.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.Statevectorとqiskit.quantum_info.DensityMatrixクラスのコンストラクタはQuantumCircuitオブジェクトを受け取ってStatevectorとDensityMatrixオブジェクトを構築することができるようになりました。例えば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_casablanca、ibmq_sydney、ibmq_mumbai、ibmq_lima、ibmq_belem、ibmq_quitoのモック・バージョンが含まれている。他の偽のバックエンドと同様に、これらにはキャリブレーション・データのスナップショットが含まれている(すなわち、backend.defaults()) およびエラーデータ(すなわちbackend.properties()) 実際のシステムから取得したもので、ローカルテスト、コンパイル、シミュレーションに使用できる。
既知の問題
-
パラメータ化された
duration(すなわち、durationの値が未束縛である)を持つqiskit.pulse.Instructionオブジェクトを追加しようとする。ParameterまたはParameterExpressionオブジェクト)をqiskit.pulse.Scheduleに追加することはサポートされていません。 そのようなことをしようとすると、UnassignedDurationErrorPulseErrorが発生する。 これは、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_level1、2、3に使用される)。transpile()およびexecute()関数で1,2,3に対して使用される)は、1量子ビットゲート最適化のために無条件にOptimize1qGatesDecompositionを無条件に使用するようになりました。 以前は、これらのパス・マネージャーはOptimize1qGates基底ゲートにu1、u2、u3のいずれかが含まれる場合、パスを使用していた。 古い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.ThreadPoolExecutorやfutures.ProcessPoolExecutorのような別のスレッドやプロセスで実行する何かでラップする必要があります。 -
BasicAer シミュレーターの
allow_sample_measuringオプションがデフォルトの から に変更されました。QasmSimulatorPyのオプションがデフォルトのFalseからTrueに変更されました。 これは、入力回路がサンプル測定をサポートしていれば(それが有効になっていなくても)サンプル測定を使用する、シミュレータの実際のデフォルトの動作をよりよく反映させるために行われました。 サンプル測定をサポートしない回路を実行する場合(つまり、Reset操作がある場合、または量子ビットの測定後に操作がある場合)、以下を呼び出す際にこのオプションを明示的にFalseに設定する必要があります。run(). -
トランスパイラー・パスは
CommutativeCancellationトランスパイラ・パスはターゲット基底のゲートを認識するようになり、指定された基底のゲートのみを使用するようになった。 以前は、パスは無条件でZGateをU1Gate. しかし、パスが基底を認識し、ターゲット基底を指定するためのkwarg(basis_gates)を持つようになったため、kwargが設定されていない場合、動作が変わる可能性がある。basis_gateskwargが使用されず、回路内に可変z回転ゲートがない場合、可換キャンセルは起こらない。 -
Register(の親クラスであるQuantumRegisterとClassicalRegisterとBit(の親クラスであるQubitとClbitの親クラス)のオブジェクトはイミュータブルになった。 以前のリリースではsizeまたはname属性の値を調整することが可能でした。Registerオブジェクトとindexまたはregister属性の値を調整することが可能でした。Bitオブジェクトの しかしこれは、これらの属性がレジスタやビットの不変プロパティとして扱われるため、(dictのような)ハッシュに依存するコンテナ構造を破損する不健全な動作につながります(詳細は #4705を参照してください)。 この不健全な動作を避けるために、この属性はRegisterとBitの属性は、初期生成後には設定できなくなります。 以前、実行時にオブジェクトを調整していた場合は、新しい値で新しいRegisterまたはBitオブジェクトを作成する必要があります。 -
DAGCircuit.__eq__メソッド(これは==演算子で使用される)。DAGCircuitとQuantumCircuitインスタンスの構造的な等しさをチェックするために使われるglobal_phaseとcalibrations属性が含まれるようになりました。 これは、以前のリリースでは同等と評価されていた回路が、回路間で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 メソッドは削除されました。 代わりに、qubitsとclbits属性を使用する必要があります。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.FakeOpenPulse2Qとqiskit.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.Aerとqiskit.IBMQのトップレベル属性が遅延ロードされるようになりました。 これは、オブジェクトが常に存在するようになり、qiskit-aerまたはqiskit-ibmq-providerがインストールされていない(または Python で見つからない)場合、インポート時に警告が発生しなくなることを意味する。 これらのモジュール属性を使って、qiskit-aerやqiskit-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.Aerとqiskit.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モジュールからのインポート時に発せられることはなくなった。 -
以前は非推奨だった
conditionkwarg forqiskit.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_networkxqiskit.dagcircuit.DAGCircuit.from_networkxqiskit.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_PARALLELをTrueに設定します。 -
クラスのコンストラクタの
callback。PassManagerクラスのコンストラクタは削除されました。 このkwargは、 0.13.0 リリース(2020年4月9日)以降、非推奨となっている。 代わりに、callbackkwargを直接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.Channelやqiskit.pulse.PulseChannelのような接頭辞のないベースチャンネルをインスタンス化することはできなくなった。 これらのクラスは、qiskit.pulse.DriveChannelのような、さまざまなユーザー向けチャネル・クラスのタイプを分類するために設計されているが、ターゲット・リソースとしての定義はない。 以前はqiskit.pulse.Channelかqiskit.pulse.PulseChannelのどちらかを直接インスタンス化していた場合、これはもう許されない。 適切なサブクラスを使用してください。 -
の
require_cpおよび/またはrequire_tpkwargs の場合。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モジュールのクラスは、テンソルのリトルエンディアン表現を使ってフーリエ変換を計算するようになった。つまり、計算基底が整数のリトルエンディアン・ビット順序に対応すると仮定すると、 状態は にマップされる。 など。 これは、ビット順序にリトルエンディアンの規約を使用する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.executeqiskit.executeこの場合、 Python がqiskit.executeをモジュールとして扱い、その逆の場合は が関数として扱われることになる。 モジュール名の変更は、この衝突を避けるために必要だった。 モジュールを取得するためにqiskit.executeをインポートしている場合(典型的な使用法はfrom qiskit.execute import execute)、代わりにqiskit.execute_functionを使用するように更新する必要があります。qiskit.executeは常に関数に解決されるようになった。 -
qiskit.compiler.transpile、qiskit.compiler.assemble、qiskit.compiler.schedule、qiskit.compiler.sequenceのモジュール名がそれぞれqiskit.compiler.transpiler、qiskit.compiler.assembler、qiskit.compiler.scheduler、qiskit.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()、ミラーリングの代わりにゲートの順番を逆にするだけである。 -
への最初の位置引数として浮動小数点数(
scalekwarg用)を渡すサポートは廃止された。qiskit.circuit.QuantumCircuit.draw()への最初の位置引数として 0.12.0、非推奨となった。 メソッドの最初の位置引数はqiskit.circuit.QuantumCircuit.draw()メソッドへの最初の位置引数はoutputkwargで、これは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.librarySamplePulseWaveformqiskit.pulse.libraryConstantPulseConstant(モジュール名変更) pulse.pulse_libモジュールqiskit.pulse.libraryクラス旧方式新方式ParametricPulseget_sample_pulseget_waveformInstructioncommand該当なし。 コマンドとインストラクションが統一された。 命令データに関する情報を得るには、 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の値(サンプル時間)がdtkwargで明示的に、あるいは 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_indices1とbit_indices2が追加された。BitそれぞれのDAGNodeのqubitsまたはclbitsリストのインデックスに対応付けることが期待される。DAGCircuit. 非推奨期間中、これらの引数はオプションであり、指定されない場合、マッピングは各インスタンスのregisterとindexプロパティに基づいて自動的に構築される。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():qiskit.pulse.channels.Channel,qiskit.pulse.library.Pulse,qiskit.pulse.instructions.Instruction,
およびそのサブクラスは現在非推奨となっており、将来のリリースで削除される予定です。 この機能は
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メソッドのqubitskwarg にインスタンスを渡すサポートは廃止され、将来のリリースでは削除される予定です。qiskit.transpiler.InstructionDurations.get()メソッドの kwarg にインスタンスを渡すサポートは非推奨となり、将来のリリースで削除される予定です。 代わりにget()メソッドを呼び出す必要があります。 -
BaseOperatorのcomposeメソッドを呼び出すために@(__matmul__) を使用することは推奨されません。Operator) を使用することは非推奨であり、将来のリリースで削除される予定です。 このqiskit.quantum_info.Operator.compose()メソッドは直接使うこともできるし、&(__and__) 演算子を使って呼び出すこともできる。 -
メソッドの呼び出しには
*(__mul__) を使う。dot()BaseOperatorメソッドの呼び出しに使用することは推奨されません。qiskit.quantum_info.Operator) を使用することは非推奨であり、将来のリリースで削除される予定です。 代わりにdot()を直接呼び出すことができる。 -
のメソッドを呼び出すには、
@(__matmul__) を使う。evolve()メソッドを呼び出すためにqiskit.quantum_info.Statevectorとqiskit.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クラスの主な目的は、 と の両方に共通の基本クラスとして使用することであった。ScheduleとInstructionの共通の基底クラスであった。ScheduleComponentの入力を受け入れることを明示的に型チェックまたは文書化しているところは、InstructionまたはSchedule. -
IBMQ API ペイロードの JSON スキーマ・ファイルと使用法は非推奨であり、将来のリリースで削除される予定です。 これには、
qiskit.schemasモジュールとqiskit.validationモジュールの下にあるすべてのものが含まれる。 また、validatekwargs forqiskit.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: [...]}])ここで、
pv1とpv2はオブジェクトである。ParameterVectorオブジェクトです。 5467を修正 -
クラスのパラメトリック・パルスのラベルが、サンプリングされたパルスのように適切に設定されていなかった問題を修正した。
PulseQobjInstructionクラスのパラメトリック・パルスのラベルが、サンプリング・パルスのように適切に設定されていなかった問題を修正しました。 また、これはPulseDefaultsからインポートされるパルス名も正しく設定される。Backendx90x90mなどからインポートされたパルス名が適切に設定される。 5363を修正 -
バインドされていないパラメーターが
global_phaseオブジェクトのQuantumCircuitオブジェクトのparameters属性に表示されず、バインドできない問題を修正しました。 #5806を修正 -
その
calibrations属性はQuantumCircuitオブジェクトの属性は、+=(つまりextend()メソッド) と+(つまりcombine()メソッド) が使われたときに保存されるようになりました。 5930と #5908を修正 -
クラスの
nameクラスのセッター・メソッドRegister(の親クラスであるQuantumRegisterとClassicalRegisterのセッター・メソッドは、 OpenQASM 仕様に従って、代入された文字列が有効なレジスタ名であるかどうかをチェックしませんでした。 このチェックは、以前はコンストラクタで名前が指定された場合にのみ実行されていましたが、name属性に直接無効な値を設定しても例外が発生するように修正されました。 5461を修正 -
の問題を修正しました。
qiskit.visualization.circuit_drawer()関数とqiskit.circuit.QuantumCircuit.draw()メソッドの問題を修正しました。QuantumCircuit関数とメソッドの問題を修正しました。Gateを使用したMeasure。ClassicalRegisterの左側に表示される可能性がありました。GateをMeasureの左に表示することができた。 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.n、n+1ブレークポイントを設定することができる。 これは、最後の区間の終わりから までの関数が恒等式であるために重要である。 -
サーキット・クラスで
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オブジェクトをQuantumCircuitでparameter_binds。executeでオブジェクトをバインドすると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_wireskwargをFalseに設定しても、オブジェクトのワイヤーは表示される。Delayオブジェクトが表示される。 ワイヤー上にオブジェクトしかない場合、アイドルワイヤーが視覚化から削除されるように修正されました。Delayオブジェクトがある場合、アイドルワイヤが視覚化から削除されるように修正されました。 -
以前は、
layout_methodkwargオプションがtranspile()関数にoptimization_levelkwargを >= 2に設定し、パスが実行されるようにしていました。qiskit.transpiler.passes.CSPLayoutが実行されるようにCSPLayoutが解を見つけた場合、layout_methodのメソッドは実行されませんでした。 これは、layout_methodが指定された場合、常に尊重されるように修正された。 5409を修正 -
引数
coupling_map=None(明示的に設定されているか、デフォルト値として暗黙的に設定されているか、backendkwargを介して設定されている)の場合、トランスパイル処理は回路を「埋め込む」ものではなかった。 つまり、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を修正 -
のヘルパー量子ビットの割り当てを改善した。
PolynomialPauliRotationsとPiecewiseLinearPauliRotationsのヘルパー量子ビットの割り当てを改善し、これらの回路の実装をより効率的にした。 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オブジェクトがQuantumCircuitでqiskit.compiler.transpile()の単位がDelayの単位に変換されない問題を修正した。Backendbackendkwarg が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の状態ベクトル法および密度行列法に追加。 -
AerSimulator、QasmSimulator、StatevectorSimulator、UnitarySimulatorバックエンドの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シミュレータ・バックエンドを追加しますautomaticstatevectorstabilizerdensity_matrixmatrix_product_stateunitarysuperop
デフォルトの自動メソッドでは、回路命令とノイズ・モデル(ある場合)に基づいて、実行回路ごとに個別にシミュレーション・メソッドが自動的に選択されます。 特定のメソッドでシミュレータを初期化するには、methodオプションを使います。
状態ベクトル法、密度行列法、ユニタリー法のGPUシミュレーションは、
device='GPU'バックエンドオプションを設定することで有効にすることができます。unitary、superopのメソッドは、実行回路のユニタリー行列またはスーパーオペレータ行列をシミュレートするため、測定をサポートしていないことに注意してください。そのため、新しいsave_unitary()、save_superop()、save_state()命令のいずれかを使用して、返される結果にシミュレータの状態を保存する必要があります。 同様に、他のシミュレーション方法の状態も、適切な命令を使って保存することができる。 詳細はqiskit.providers.aer.libraryAPIドキュメントを参照。なお、
AerSimulatorシミュレータは、QasmSimulator、StatevectorSimulator、UnitarySimulatorバックエンドに取って代わるもので、将来のリリースでは非推奨となる予定です。 -
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メソッドを追加。 このノルム推定法は、AerSimulatorとQasmSimulatorのバックエンドに以下のオプションを渡すことで使用できるsimulator = QasmSimulator( method='extended_stabilizer', extended_stabilizer_sampling_method='norm_estimation')このノルム推定法は、
metropolisまたはresampled_metropolisの代替案よりも低速だが、出力分布が疎な回路ではより優れた性能を発揮する。 詳しくはQasmSimulatorのドキュメントを参照。 -
シミュレータの状態をさまざまな形式で保存するための命令を追加します。 これらの指示は
qiskit.providers.aer.library.SaveDensityMatrixqiskit.providers.aer.library.SaveMatrixProductStateqiskit.providers.aer.library.SaveStabilizerqiskit.providers.aer.library.SaveStateqiskit.providers.aer.library.SaveStatevectorqiskit.providers.aer.library.SaveStatevectorDictqiskit.providers.aer.library.SaveUnitary
これらの命令は、Aerをインポートする際に
QuantumCircuitに追加されるsave_density_matrix、save_matrix_product_state、save_stabilizer、save_state、save_statevector、save_statevector_dict、save_unitary回路メソッドを使用して量子回路に追加することができます。各命令のメソッド互換性の詳細については、
qiskit.providers.aer.libraryAPIドキュメントを参照のこと。なお、スナップショット命令
SnapshotStatevector,SnapshotDensityMatrix,SnapshotStabilizerはまだサポートされていますが、将来のリリースでは非推奨となる予定です。 -
シミュレータの状態 に対して,エルミート演算子 の期待値 ,または期待値と分散 を保存するための
qiskit.providers.aer.library.SaveExpectationValueとqiskit.providers.aer.library.SaveExpectationValueVariance量子回路命令を追加します.これらの命令は、Aerのインポート時にQuantumCircuitに追加されるsave_expectation_valueおよびsave_expectation_value_variance回路メソッドを使用して量子回路に追加することができます。なお、スナップショット命令
SnapshotExpectationValueはまだサポートされているが、将来のリリースでは非推奨となる予定である。 -
qiskit.providers.aer.library.SaveProbabilities、qiskit.providers.aer.library.SaveProbabilitiesDict量子回路命令を追加し、シミュレータ状態の Z-basis 測定のすべての測定結果確率を保存する。 これらの命令は、Aerのインポート時にQuantumCircuitに追加されるsave_probabilities、save_probabilities_dictの回路メソッドを使用することで、量子回路に追加することができる。なお、スナップショット命令
SnapshotProbabilitiesはまだサポートされているが、将来のリリースでは非推奨となる予定である。 -
qiskit.providers.aer.library.SaveAmplitudes、qiskit.providers.aer.library.SaveAmplitudesSquared、サポートされるシミュレーション手法の選択複素状態ベクトル振幅、または選択確率(振幅の2乗)を保存するための回路命令を追加します。 これらの命令は、Aerのインポート時にQuantumCircuitに追加されるsave_amplitudes、save_amplitudes_squaredの回路メソッドを使用して量子回路に追加することができる。 -
シミュレーターの状態を設定する方法を追加。 これらの命令は、回路内の全数の量子ビットに対して定義されなければならない。 回路のどのポイントにも適用でき、シミュレータの状態を指定されたもので上書きします。 追加された指示は以下の通り
qiskit.providers.aer.library.SetDensityMatrixqiskit.providers.aer.library.SetStabilizerqiskit.providers.aer.library.SetStatevectorqiskit.providers.aer.library.SetUnitary
これらの命令は、Aerをインポートする際に
QuantumCircuitに追加されるset_density_matrix、set_stabilizer、set_statevector、set_unitary回路メソッドを使用して量子回路に追加することができます。各命令のメソッド互換性の詳細については、
qiskit.providers.aer.libraryAPIドキュメントを参照のこと。 -
"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.hpのStateOpSetにおいて、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 では見つからない。
QasmSimulatorのfrom_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法による較正に使用される関数によって生成される回路数は から (ここで は量子ビット数)に減少している。
アップグレードの注意
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 もインストールする必要があります。
バグ修正
- エラー緩和クラス
TensoredExpvalMeasMitigatorとCTMPExpvalMeasMitigatorにおいて、qubitskwarg が指定されていない場合、期待値メソッド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.algorithms と qiskit.opflow. Aquaの既存の使用方法に応じて、アプリケーションパッケージまたはQiskit Terraの新しいモジュールを使用する必要があります。
Qiskit Aquaからの移行方法については、 移行ガイドをご参照ください。
IBM Q プロバイダー 0.12.2
変更なし