Notes de publication sur la diagonalisation quantique basée sur l'échantillon (SQD)
0.13.0
Nouvelles fonctions
-
Ajout de la prise en charge de Python, 3.13, Python et 3.14. Aucune modification du code n'a été nécessaire; les anciennes versions devraient donc également fonctionner sur Python, 3.13 et 3.14.
-
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()peuvent désormais être appelées collectivement depuis tous les processus d'une exécution multiprocessus (SPMD), par exemple sous MPI. Lorsqu'elle est appelée de cette manière, l'étapesci_solvers'exécute sur chaque processus; ainsi, une implémentation personnalisée et distribuéesci_solverpeut répartir chaque diagonalisation entre les processus disponibles; le reste de la boucle de récupération de la configuration s'exécute uniquement sur le processus de contrôle, et la valeur de retour est la même sur tous les processus. Le comportement en mode mono-processus reste inchangé. Consultez la section « Prise en charge de l'accélération multiprocessus et multithread » pour plus de détails sur la prise en charge de l'accélération multiprocessus et multithread par ce package.
Remarques concernant la dépréciation
- Les fonctions
qiskit_addon_sqd.fermion.rotate_integrals()etqiskit_addon_sqd.fermion.optimize_orbitals()sont désormais obsolètes. Pour savoir comment optimiser la base hamiltonienne à l'aide du package ffsim, consultez le guide d'optimisation orbitale.
0.12.1
Mise à niveau
- Python 3.10 est désormais la version minimale requise. La prise en charge de Python 3.9 a été supprimée.
0.12.0
Nouvelles fonctions
-
L'argument
max_dima été ajouté à la fonctionqiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian(). Cet argument sert à limiter la dimension du sous-espace SCI. -
A introduit la fonction
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left().
Mise à niveau
qiskit_addon_sqd.fermion.SCIStateprend désormais deux arguments obligatoires supplémentaires,norbetnelec. Il s'agit d'une modification qui entraîne des incompatibilités.
Remarques concernant la dépréciation
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()est désormais obsolète. Utilisez plutôtqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left(). -
qiskit_addon_sqd.subsampling.postselect_and_subsample()est désormais obsolète. Utilisez plutôt etqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()qiskit_addon_sqd.subsampling.subsample().
Corrections des erreurs
-
Correction d'un bug dans
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()lequel la conversion des chaînes de bits en chaînes CI pouvait être erronée lorsque le nombre d'orbitales était supérieur à 53. -
Correction d'un bug qui provoquait une erreur lors de l'enregistrement et du chargement d'objets
qiskit_addon_sqd.fermion.SCIState. -
Ajout d'une note de mise à jour pour la version 0.11 concernant une modification entraînant une incompatibilité avec
qiskit_addon_sqd.fermion.SCIState.
0.11.0
Nouvelles fonctions
-
Ajout d'une nouvelle fonction destinée à
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()servir de point d'entrée principal à l'algorithme SQD. -
qiskit_addon_sqd.fermion.solve_fermion()accepte désormais un argumentshiftpermettant de modifier les états dont le spin est incorrect : .
Mise à niveau
qiskit_addon_sqd.fermion.solve_fermion()et acceptent désormaisqiskit_addon_sqd.fermion.optimize_orbitals()les valeurs de finkwargs, qui seront transmises directement à pyscf.fci.selected_ci.kernel_fixed_space en arrière-plan pour calculer l'état cible. L'argumentmax_davidsondoit désormais être transmis tel quel dansmax_cycleles deux fonctions.
Corrections des erreurs
- Correction d'une conversion de type float en type integer affectant le module
qubit
0.10.0
Mise à niveau
- Supprimé
qiskit_addon_sqd.fermion.flip_orbital_occupancies(). Les utilisateurs n'ont plus besoin d'inverser l'ordre des données d'occupation orbitale fournies par etqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals(); celles-ci seront désormais fournies dans l'ordre attendu parqiskit_addon_sqd.configuration_recovery.recover_configurations():tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])).
Remarques concernant la dépréciation
-
L'argument
avg_occupanciesde la fonctionqiskit_addon_sqd.configuration_recovery.recover_configurations()doit désormais être un tuple de type length-2, contenant respectivement les occupances « spin-up » et « spin-down ».Ancien format :
array([occ_b_N, ..., occ_b_0, occ_a_N, ..., occ_a_0])Nouveau format :
tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Corrections des erreurs
- Correction d'un bug qui entraînait une valeur erronée de
qiskit_addon_sqd.fermion.solve_fermion()la production d'énergie lorsque l'entréespin_sqs'écartait de l' spin^2 e de la fonction d'onde de sortie.
0.9.0
Mise à niveau
qiskit_addon_sqd.fermion.optimize_orbitals()et il faut désormaisqiskit_addon_sqd.fermion.rotate_integrals()k_flatspécifier le triangle supérieur (sans la diagonale) de la matrice de rotation, plutôt que la matrice dans son ensemble.
Corrections des erreurs
-
Correction d'une erreur d'indexation
qiskit_addon_sqd.configuration_recovery()qui entraînait l'inversion des bits de la moitié droite de la chaîne binaire par rapport à l'occupation des orbitales associées à la moitié gauche de cette chaîne. -
pyscf n'est plus considéré comme une dépendance sous Windows, où il ne s'installe pas. Cependant, Windows reste une plate-forme non prise en charge.
0.8.0
Nouvelles fonctions
-
Ajout de la prise en charge de Python 3.9.
-
Toutes les fonctions qui prennent un argument
rand_seedacceptent désormais également une instancenumpy.random.Generatorcommerand_seed.
Mise à niveau
- L'état fondamental renvoyé par
qiskit_addon_sqd.fermion.solve_fermion()sera désormais une instance deqiskit_addon_sqd.fermion.SCIState, et non plus une instanceSCIVectorde PySCF.
0.7.0
Corrections des erreurs
-
Correction d'un bug dans et
qiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals()qui entraînait une inversion erronée des déterminants pour les états « spin-up » et « spin-down » avant la résolution. -
Correction d'un bug dans les workflows « open-shell » qui provoquait
qiskit_addon_sqd.fermion.optimize_orbitals()un plantage accompagné d'une erreurmalloc.
0.6.0
Mise à niveau
-
La spécification de
addressesen tant qu'argument-clé pourqiskit_addon_sqd.fermion.solve_fermion()et n'estqiskit_addon_sqd.fermion.optimize_orbitals()plus prise en charge. Les utilisateurs peuvent toujours passeraddressescomme premier argument de position; toutefois, cette utilisation est dépréciée. Il est recommandé aux utilisateurs de passer la matrice de chaînes de bits définissant le sous-espace en tant que premiers arguments de position à ces fonctions, comme indiqué ci-dessous.Pour mettre à jour, modifiez le code suivant
# 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, )
Remarques concernant la dépréciation
-
La fonction
qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()a été dépréciée au profit deqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs(). Ces deux fonctions se comportent de la même manière, à une exception près :qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()renvoie les configurations sous la formetuple(spin_dn, spin_up); tandis que renvoieqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()les configurations sous la formetuple(spin_up, spin_dn).à migrer
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) -
L'argument
addressesde etqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals()a été déprécié au profit debitstring_matrix. Les utilisateurs ne sont plus tenus de convertir leurs configurations en nombres entiers; ils doivent désormais fournir la matrice de chaînes de bits spécifiant le sous-espace sur lequel projeter et diagonaliser l'hamiltonien. La conversion des déterminants en nombres entiers sera effectuée en interne.
Corrections des erreurs
-
Correction d'un bug qui
qiskit_addon_sqd.configuration_recovery.recover_configurations()provoquait parfois une erreur de division par zéro lors du calcul de la probabilité de changement de bit pour chaque bit. -
Correction d'un bogue qui entraînait l'échec de la récupération de la configuration pour les chaînes de bits d'une longueur supérieure à 72.
0.5.0
Mise à niveau
-
Les fonctions
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), et exigentqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()désormais que les argumentshamming_lefthamming_rightet soient spécifiés sous forme d'arguments-clés. De plus, les argumentsn_batchessamples_per_batchet de la fonctionqiskit_addon_sqd.subsampling.postselect_and_subsample()doivent désormais être transmis sous forme d'arguments-clés.Pour mettre à niveau
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, )doit être remplacé par
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
Prélude
Il s'agit d'une version mineure qui introduit quelques changements mineurs, mais importants, dans l'API. Ces modifications permettent de spécifier de manière plus cohérente le nombre d'électrons alpha et bêta dans les fonctions chimiques et non chimiques de l'API.
Mise à niveau
-
Les arguments
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), et reçoiventqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()désormais l'argumenthamming_rightde position avant l'argumenthamming_leftafin de mieux s'aligner sur le reste du flux de travail.Pour mettre à niveau
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, )doit être remplacé par
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, )