サンプルベース量子対角化(SQD)リリースノート
0.13.0
新機能
-
Python 3.13 および Python 3.14 のサポートを追加しました。 コードの変更は必要なかったため、以前のリリースでも Python、 3.13、および 3.14 で動作するものと予想されます。
-
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()MPIなどの環境下において、マルチプロセス(SPMD)実行のすべてのプロセスから、これらをまとめて呼び出すことができるようになった。 この方法で呼び出されると、このステップsci_solverはすべてのプロセスで実行されるため、カスタム分散アルゴリズムによって、各対角化処理を利用可能なプロセス間で分散させsci_solverることができます。設定復旧ループの残りの部分は制御プロセスだけで実行され、戻り値はすべてのプロセスで同じになります。 単一プロセスの動作には変更はありません。 このパッケージによるマルチプロセスおよびマルチスレッドによる高速化のサポートに関する詳細については、「マルチプロセスおよびマルチスレッドによる高速化のサポート」を参照してください。
非推奨のメモ
- および
qiskit_addon_sqd.fermion.optimize_orbitals()関qiskit_addon_sqd.fermion.rotate_integrals()数は、現在非推奨となっています。 ffsim パッケージを使用してハミルトニアン基底を最適化する方法については、 軌道最適化ガイドを参照してください。
0.12.1
アップグレードの注意
- Python 3.10 現在、最低限必要なバージョンです。 Python 3.9 のサポートは終了しました。
0.12.0
新機能
-
関数
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()に引max_dim数を追加しました。 この議論は、SCI部分空間の次元を制限するために用いられる。 -
関数を導入しました
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()。
アップグレードの注意
qiskit_addon_sqd.fermion.SCIState現在、さらに2つの必須引数、norbおよび を受け取るようになりましたnelec。 これは互換性を損なう変更です。
非推奨のメモ
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()現在は非推奨となっています。 その代わりに、. を使用してくださいqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()。 -
qiskit_addon_sqd.subsampling.postselect_and_subsample()現在は非推奨となっています。 その代わりに、qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()と を使用してくださいqiskit_addon_sqd.subsampling.subsample()。
バグ修正
-
軌道数が 53 を超える場合、ビット文字列から CI 文字列への変換が正しく行われないという
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()バグを修正しました。 -
オブジェクト
qiskit_addon_sqd.fermion.SCIStateの保存や読み込みを行うとエラーが発生していた不具合を修正しました。 -
バージョン 0.11 に、
qiskit_addon_sqd.fermion.SCIState.に関する互換性を損なう変更に関するリリースノートを追加しました。
0.11.0
新機能
-
SQDアルゴリズムのメインエントリポイント
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()となる新しい関数を追加しました。 -
qiskit_addon_sqd.fermion.solve_fermion()スピンが間違っている状態をシフトさせるために使用される引数shift、 を受け付けるようになりました。
アップグレードの注意
qiskit_addon_sqd.fermion.solve_fermion()また、末尾の を受け入れるようになりましたqiskit_addon_sqd.fermion.optimize_orbitals()kwargs。これは内部で pyscf.fci.selected_ci.kernel_fixed_space に直接渡され、目標状態の計算に使用されます。 この引max_davidson数は、両方の関数max_cycleで として渡されるべきです。
バグ修正
qubitモジュールに影響する浮動小数点から整数への型変換を修正
0.10.0
アップグレードの注意
- 削除しました
qiskit_addon_sqd.fermion.flip_orbital_occupancies()。 ユーザーは、およびqiskit_addon_sqd.fermion.solve_fermion()から出力される軌道占有度を反転させる必要がなくなりましたqiskit_addon_sqd.fermion.optimize_orbitals()。これらは、が想定する順序で出力されますqiskit_addon_sqd.configuration_recovery.recover_configurations():tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))。
非推奨のメモ
-
の引
avg_occupancies数は、スピンアップおよびスピンダウンの占有数をそれぞれ含む length-2 のタプルであるqiskit_addon_sqd.configuration_recovery.recover_configurations()必要があります。古いフォーマット:
array([occ_b_N, ..., occ_b_0, occ_a_N, ..., occ_a_0])新しいフォーマット:
tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
バグ修正
- 入力 が出力波動関数の spin^2 から逸脱
spin_sqした場合に、 からのエネルギー出力が不正確になるqiskit_addon_sqd.fermion.solve_fermion()バグを修正しました。
0.9.0
アップグレードの注意
qiskit_addon_sqd.fermion.optimize_orbitals()また、現在qiskit_addon_sqd.fermion.rotate_integrals()では、行列全体ではなく、回転行列の上三角部分(対角要素を含まない)をk_flat指定する必要があります。
バグ修正
-
ビット列の右半分にあるビットが、ビット列の左半分に関連付けられた軌道の占有状態に対して反転してしまう原因とな
qiskit_addon_sqd.configuration_recovery()っていたインデックス付けのエラーを修正しました。 -
pyscfは、インストールに失敗するWindowsの依存関係とはみなされなくなった。 しかし、ウィンドウズは依然として未サポートのプラットフォームである。
0.8.0
新機能
-
Python 3.9 のサポートを追加した。
-
引数
rand_seedを取るすべての関数は、numpy.random.Generatorインスタンスもrand_seedとして受け付けるようになった。
アップグレードの注意
- によって返される基底状態は、 PySCF
SCIVectorのインスタンスではなくqiskit_addon_sqd.fermion.SCIState、のインスタンスqiskit_addon_sqd.fermion.solve_fermion()となります。
0.7.0
バグ修正
-
および
qiskit_addon_sqd.fermion.solve_fermion()におけるバグを修正しました。このqiskit_addon_sqd.fermion.optimize_orbitals()バグにより、解く前にスピンアップとスピンダウンの行列式が誤って反転してしまう問題がありました。 -
open-shell ワークフローにおけるバグを修正しました。このバグにより、 エラー
mallocが発生し、クラッシュqiskit_addon_sqd.fermion.optimize_orbitals()していました。
0.6.0
アップグレードの注意
-
および
qiskit_addon_sqd.fermion.solve_fermion()のキーワード引数addressesとして を指定することは、もはやサポートされてqiskit_addon_sqd.fermion.optimize_orbitals()いません。 ユーザーは引き続きpassを最初の位置引数addressesとして指定できますが、この使い方は非推奨となっています。 ユーザーは、以下に示すように、部分空間を定義するビット文字列行列を、これらの関数の最初の位置引数として渡すことを推奨します。アップグレードするには、次のコードを変更します
# DEPRECATED CODE from qiskit_addon_sqd.fermion import ( bitstring_matrix_to_sorted_addresses, solve_fermion, optimize_orbitals, ) bitstring_matrix = ... addresses = bitstring_matrix_to_sorted_addresses(bitstring_matrix, open_shell=open_shell) energy, coeffs, occs, spin = solve_fermion( addresses=addresses, hcore=hcore, eri=eri, ) ... e_oo, rotation, occs_oo = optimize_orbitals( addresses=addresses, hcore=hcore, eri=eri, ) ### SHOULD BECOME ### # NEW CODE from qiskit_addon_sqd.fermion import solve_fermion, optimize_orbitals bitstring_matrix = ... energy, coeffs, occs, spin = solve_fermion( bitstring_matrix, hcore=hcore, eri=eri, ) ... e_oo, rotation, occs_oo = optimize_orbitals( bitstring_matrix, hcore=hcore, eri=eri, )
非推奨のメモ
-
この関
qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()数は、に取って代わられるため、非推奨となりましたqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()。 これら2つの関数は、1つの重要な違いを除いて同じように動作しますtuple(spin_dn, spin_up)。すなわち、は設定をとして返すqiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()のに対し、は設定をとしてqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()返しますtuple(spin_up, spin_dn)。移行するには
from qiskit_addon_sqd.fermion import ( bitstring_matrix_to_sorted_addresses, bitstring_matrix_to_ci_strs, ) # DEPRECATED CODE bs_matrix = ... addr_dn, addr_up = bitstring_matrix_to_sorted_addresses(bs_matrix, open_shell=True) ### SHOULD BECOME ### # NEW CODE bs_matrix = ... ci_strs_up, ci_strs_dn = bitstring_matrix_to_ci_strs(bs_matrix, open_shell=True) -
および
qiskit_addon_sqd.fermion.solve_fermion()の引addresses数は、に置き換えられるため、非推奨となっていますqiskit_addon_sqd.fermion.optimize_orbitals()bitstring_matrix。 ユーザーは、設定を整数に変換する必要がなくなりました。代わりに、ハミルトニアンを投影して対角化する部分空間を指定するビット文字列行列を引数として渡す必要があります。 行列式の整数表現への変換は内部的に行われます。
バグ修正
-
個々のビット反転確率を計算する際に、まれに除算によるゼロ除算エラーが発生
qiskit_addon_sqd.configuration_recovery.recover_configurations()していたバグを修正しました。 -
長さが72を超えるビット列でコンフィギュレーション・リカバリーに失敗するバグを修正。
0.5.0
アップグレードの注意
-
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming()、qiskit_addon_sqd.subsampling.postselect_and_subsample()、および は、qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()現在、 およびhamming_rightの引hamming_left数をキーワード引数として指定する必要がある。 また、の `n_batches` 引数およびsamples_per_batch`` は、今後はキーワード引数として渡す必要がありますqiskit_addon_sqd.subsampling.postselect_and_subsample()。アップグレード
from qiskit_addon_sqd.configuration_recovery import post_select_by_hamming_weight from qiskit_addon_sqd.subsampling import postselect_and_subsample from qiskit_addon_sqd.counts import generate_counts_bipartite_hamming counts = generate_counts_bipartite_hamming(num_samples, num_bits, num_elec_a, num_elec_b) ... bs_mat = post_select_by_hamming_weight(bs_mat_full, num_elec_a, num_elec_b) ... batches = postselect_and_subsample( bs_mat, probs_arr, num_elec_a, num_elec_b, samples_per_batch, num_batches, )に変更すべきである
from qiskit_addon_sqd.configuration_recovery import post_select_by_hamming_weight from qiskit_addon_sqd.subsampling import postselect_and_subsample from qiskit_addon_sqd.counts import generate_counts_bipartite_hamming counts = generate_counts_bipartite_hamming(num_samples, num_bits, hamming_right=num_elec_a, hamming_left=num_elec_b) ... bs_mat = post_select_by_hamming_weight(bs_mat_full, hamming_right=num_elec_a, hamming_left=num_elec_b) ... batches = postselect_and_subsample( bs_mat, probs_arr, hamming_right=num_elec_a, hamming_left=num_elec_b, samples_per_batch=samples_per_batch, num_batches=num_batches, )
0.4.0
前奏曲
これはマイナー・リリースであり、APIに小さな、しかし重要な、変更を加えるものである。 これらの変更により、APIの化学関数と非化学関数の両方を通して、アルファ電子とベータ電子の数を指定するパターンをより一貫したものにすることができる。
アップグレードの注意
-
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming()、qiskit_addon_sqd.subsampling.postselect_and_subsample()、および は、ワークフローの他の部分との整合性を高めるため、引hamming_left数の前に位置hamming_right引数を取るようになりましたqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()。アップグレード
from qiskit_addon_sqd.configuration_recovery import post_select_by_hamming_weight from qiskit_addon_sqd.subsampling import postselect_and_subsample from qiskit_addon_sqd.counts import generate_counts_bipartite_hamming counts = generate_counts_bipartite_hamming(num_samples, num_bits, num_elec_b, num_elec_a) ... bs_mat = post_select_by_hamming_weight(bs_mat_full, num_elec_b, num_elec_a) ... batches = postselect_and_subsample( bs_mat, probs_arr, num_elec_b, num_elec_a, samples_per_batch, n_batches, )に変更すべきである
from qiskit_addon_sqd.configuration_recovery import post_select_by_hamming_weight from qiskit_addon_sqd.subsampling import postselect_and_subsample from qiskit_addon_sqd.counts import generate_counts_bipartite_hamming counts = generate_counts_bipartite_hamming(num_samples, num_bits, num_elec_a, num_elec_b) bs_mat = post_select_by_hamming_weight(bs_mat_full, num_elec_a, num_elec_b) ... batches = postselect_and_subsample( bs_mat, probs_arr, num_elec_a, num_elec_b, samples_per_batch, n_batches, )