Probenbasierte Quantendiagonalisierung (SQD) Versionshinweise
0.13.0
Neue Funktionen
-
Es wurde Unterstützung für Python 3.13 sowie Python 3.14 hinzugefügt. Da keine Änderungen am Code erforderlich waren, sollten auch ältere Versionen auf Python, 3.13 und 3.14 funktionieren.
-
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()können nun gemeinsam von allen Prozessen einer Multiprozess-Ausführung (SPMD) aufgerufen werden, beispielsweise unter MPI. Bei dieser Aufrufweise wird der Schrittsci_solverin jedem Prozess ausgeführt, sodass eine benutzerdefinierte, verteilte Lösung jede Diagonalisierung auf die verfügbaren Prozesse verteilensci_solverkann; der Rest der Konfigurations- und Wiederherstellungsschleife läuft ausschließlich im Steuerprozess ab, und der Rückgabewert ist in jedem Prozess identisch. Das Verhalten bei einem einzelnen Prozess bleibt unverändert. Weitere Informationen zur Unterstützung von Multi-Prozess- und Multi-Thread-Beschleunigung durch das Paket finden Sie unter „Unterstützung für Multi-Prozess- und Multi-Thread-Beschleunigung“.
Hinweise zu veralteten Versionen
- Die Funktionen
qiskit_addon_sqd.fermion.rotate_integrals()undqiskit_addon_sqd.fermion.optimize_orbitals()sind nun veraltet. Informationen dazu, wie Sie die Hamilton-Basis stattdessen mit dem ffsim-Paket optimieren können, finden Sie im Leitfaden zur Orbitaloptimierung.
0.12.1
Anmerkungen zu Upgrades
- Python 3.10 ist jetzt die erforderliche Mindestversion. Die Unterstützung für Python 3.9 wurde eingestellt.
0.12.0
Neue Funktionen
-
Das Argument
max_dimwurde zur Funktionqiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()hinzugefügt. Dieses Argument dient dazu, die Dimension des SCI-Unterraums zu begrenzen. -
Die Funktion
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()wurde eingeführt.
Anmerkungen zu Upgrades
qiskit_addon_sqd.fermion.SCIStateerfordert nun zwei zusätzliche Argumente:norbundnelec. Dies ist eine Kompatibilitätsänderung.
Hinweise zu veralteten Versionen
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()ist nun veraltet. Verwenden Sie stattdessenqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left(). -
qiskit_addon_sqd.subsampling.postselect_and_subsample()ist nun veraltet. Verwenden Sie stattdessen undqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()qiskit_addon_sqd.subsampling.subsample().
Fehlerkorrekturen
-
Es wurde ein Fehler behoben, bei
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()dem die Konvertierung von Bitfolgen in CI-Zeichenketten fehlerhaft sein konnte, wenn die Anzahl der Orbitalen größer als 53 war. -
Ein Fehler wurde behoben, durch den beim Speichern und Laden von Objekten
qiskit_addon_sqd.fermion.SCIStateein Fehler auftrat. -
Für die Version 0.11 wurde eine Versionshinweis hinzugefügt, der eine inkompatible Änderung in Bezug auf
qiskit_addon_sqd.fermion.SCIState. beschreibt.
0.11.0
Neue Funktionen
-
Es wurde eine neue Funktion hinzugefügt,
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()die als Haupteinstiegspunkt für den SQD-Algorithmus dient. -
qiskit_addon_sqd.fermion.solve_fermion()akzeptiert nun ein Argumentshiftzum Verschieben von Zuständen mit falschem Spin: .
Anmerkungen zu Upgrades
qiskit_addon_sqd.fermion.solve_fermion()und akzeptieren nunqiskit_addon_sqd.fermion.optimize_orbitals()„trailing“kwargs, das intern direkt an „ pyscf.fci.selected_ci.kernel_fixed_space “ übergeben wird, um den Zielzustand zu berechnen. Das Argumentmax_davidsonsollte nun inmax_cyclebeiden Funktionen wie folgt übergeben werden.
Fehlerkorrekturen
- Ein Fehler bei der Umwandlung von Float in Integer, der das Modul
qubitbetraf, wurde behoben
0.10.0
Anmerkungen zu Upgrades
- Entfernt
qiskit_addon_sqd.fermion.flip_orbital_occupancies(). Die Benutzer müssen die von undqiskit_addon_sqd.fermion.solve_fermion()ausgegebenen Orbitalbelegungen nicht mehr umkehrenqiskit_addon_sqd.fermion.optimize_orbitals(); sie werden in der von erwarteten Reihenfolge ausgegebenqiskit_addon_sqd.configuration_recovery.recover_configurations():tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])).
Hinweise zu veralteten Versionen
-
Das Argument
avg_occupanciesfürqiskit_addon_sqd.configuration_recovery.recover_configurations()sollte nun ein Tupel vom Typ „ length-2 “ sein, das die Besetzungsgrade bei „Spin-up“ bzw. „Spin-down“ enthält.Altes Format:
array([occ_b_N, ..., occ_b_0, occ_a_N, ..., occ_a_0])Neues Format:
tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Fehlerkorrekturen
- Es wurde ein Fehler behoben, der dazu führte,
qiskit_addon_sqd.fermion.solve_fermion()dass die Energieabgabe von falsch war, wenn die Eingangsgröße vom spin^2 us der Ausgangswellenfunktion abwichspin_sq.
0.9.0
Anmerkungen zu Upgrades
qiskit_addon_sqd.fermion.optimize_orbitals()und erfordernqiskit_addon_sqd.fermion.rotate_integrals()nunk_flatdie Angabe des oberen Dreiecks (ohne Diagonale) der Rotationsmatrix anstelle der gesamten Matrix.
Fehlerkorrekturen
-
Es wurde ein Indizierungsfehler behoben, der
qiskit_addon_sqd.configuration_recovery()dazu führte, dass Bits in der rechten Hälfte der Bitfolge im Verhältnis zu den Belegungen der Orbitalen, die der linken Hälfte der Bitfolge zugeordnet sind, vertauscht wurden. -
pyscf wird nicht mehr als Abhängigkeit von Windows betrachtet, wo es nicht installiert werden kann. Windows bleibt jedoch eine nicht unterstützte Plattform.
0.8.0
Neue Funktionen
-
Unterstützung für Python 3.9 hinzugefügt.
-
Alle Funktionen, die ein
rand_seedArgument annehmen, akzeptieren nun auch einenumpy.random.GeneratorInstanz alsrand_seed.
Anmerkungen zu Upgrades
- Der von zurückgegebene Grundzustand
qiskit_addon_sqd.fermion.solve_fermion()ist nun eine Instanz vonqiskit_addon_sqd.fermion.SCIStateund keine InstanzSCIVectorvon „ PySCF “.
0.7.0
Fehlerkorrekturen
-
Es wurde ein Fehler in und
qiskit_addon_sqd.fermion.solve_fermion()behoben, derqiskit_addon_sqd.fermion.optimize_orbitals()dazu führte, dass die Determinanten für Spin-up und Spin-down vor der Lösung falsch vertauscht wurden. -
Ein Fehler in Open-Shell-Workflows wurde behoben, der dazu führte,
qiskit_addon_sqd.fermion.optimize_orbitals()dass das Programm mit einer Fehlermeldungmallocabstürzte.
0.6.0
Anmerkungen zu Upgrades
-
Die Angabe von
addressesals Schlüsselwortargument fürqiskit_addon_sqd.fermion.solve_fermion()undqiskit_addon_sqd.fermion.optimize_orbitals()wird nicht mehr unterstützt. Benutzer können weiterhinaddressesals erstes Positionsargument übergeben; diese Verwendung ist jedoch veraltet. Den Benutzern wird empfohlen, die den Unterraum definierende Bitstring-Matrix als erste Positionsargumente an diese Funktionen zu übergeben, wie unten gezeigt.Zum Aktualisieren ändern Sie diesen Code
# 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, )
Hinweise zu veralteten Versionen
-
Die Funktion
qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()wurde zugunsten von … als veraltet markiertqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs(). Diese beiden Funktionen verhalten sich identisch, mit einer entscheidenden Ausnahme:qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()gibt die Konfigurationen als zurücktuple(spin_dn, spin_up), während die Konfigurationen als zurückgibtqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()tuple(spin_up, spin_dn).zur Migration
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) -
Das Argument
addressesfür undqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals()wird zugunsten von nicht mehr empfohlenbitstring_matrix. Die Benutzer müssen ihre Konfigurationen nicht mehr in Ganzzahlen umwandeln; stattdessen sollten sie nun die Bitstring-Matrix übergeben, die den Unterraum angibt, auf den der Hamilton-Operator projiziert und diagonalisiert werden soll. Die Umwandlung in die ganzzahlige Darstellung von Determinanten erfolgt intern.
Fehlerkorrekturen
-
Es wurde ein Fehler behoben, der
qiskit_addon_sqd.configuration_recovery.recover_configurations()bei der Berechnung der Wahrscheinlichkeit eines einzelnen Bit-Flips gelegentlich zu einem Division-durch-Null-Fehler führte. -
Behebt einen Fehler, der dazu führte, dass die Wiederherstellung der Konfiguration bei Bitstrings mit einer Länge von mehr als 72 fehlschlug.
0.5.0
Anmerkungen zu Upgrades
-
Die Funktionen
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), und erfordern nunqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight(), dass die Argumentehamming_lefthamming_rightund als Schlüsselwortargumente angegeben werden. Außerdemqiskit_addon_sqd.subsampling.postselect_and_subsample()sollten die Argumenten_batchesundsamples_per_batchan nun als Schlüsselwortargumente übergeben werden.Zum Upgrade
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, )sollte geändert werden in
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
Vorspiel
Dies ist eine kleinere Version, die ein paar kleine, aber wichtige Änderungen an der API einführt. Diese Änderungen ermöglichen ein konsistenteres Muster bei der Angabe der Anzahl von Alpha- und Beta-Elektronen sowohl in den chemischen als auch in den nicht-chemischen Funktionen der API.
Anmerkungen zu Upgrades
-
Die Funktionen
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), und nehmen nunqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()dashamming_rightPositionsargument vor demhamming_leftArgument auf, um sich besser an den restlichen Arbeitsablauf anzupassen.Zum Upgrade
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, )sollte geändert werden in
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, )