Note di rilascio sulla diagonalizzazione quantistica basata sui campioni (SQD)
0.13.0
Nuove funzioni
-
È stato aggiunto il supporto per Python, 3.13, Python e 3.14. Non sono state necessarie modifiche al codice, quindi le versioni precedenti dovrebbero funzionare anche su Python, 3.13 e 3.14.
-
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()possono ora essere richiamate collettivamente da tutti i processi di un’esecuzione multiprocesso (SPMD), ad esempio in ambiente MPI. Quando viene richiamata in questo modo, la fasesci_solverviene eseguita su ogni processo, quindi un’implementazione personalizzata e distribuitasci_solverpuò distribuire ciascuna diagonalizzazione tra i processi disponibili; il resto del ciclo di recupero della configurazione viene eseguito esclusivamente sul processo di controllo e il valore restituito è lo stesso su ogni processo. Il comportamento del singolo processo rimane invariato. Per ulteriori dettagli sul supporto offerto dal pacchetto per l'accelerazione multi-processo e multi-thread, consultare la sezione "Supporto per l'accelerazione multi-processo e multi-thread".
Note di deprecazione
- Le funzioni
qiskit_addon_sqd.fermion.rotate_integrals()eqiskit_addon_sqd.fermion.optimize_orbitals()sono ora deprecate. Per sapere come ottimizzare invece la base hamiltoniana con il pacchetto ffsim, consultare la guida all'ottimizzazione orbitale.
0.12.1
Note sull'aggiornamento
- Python 3.10 è ora la versione minima richiesta. Il supporto per Python 3.9 è stato interrotto.
0.12.0
Nuove funzioni
-
È stato aggiunto l’argomento
max_dimalla funzioneqiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian(). Questo argomento viene utilizzato per limitare la dimensione del sottospazio SCI. -
È stata introdotta la funzione
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left().
Note sull'aggiornamento
qiskit_addon_sqd.fermion.SCIStateora richiede due argomenti obbligatori aggiuntivi, enorbnelec. Si tratta di una modifica che comporta incompatibilità.
Note di deprecazione
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()è ora obsoleto. Utilizza inveceqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left(). -
qiskit_addon_sqd.subsampling.postselect_and_subsample()è ora obsoleto. Utilizza invece eqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()qiskit_addon_sqd.subsampling.subsample().
Correzioni di bug
-
È stato risolto un bug per
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()cui la conversione delle stringhe di bit in stringhe CI poteva risultare errata quando il numero di orbitali era superiore a 53. -
È stato risolto un bug che causava un errore durante il salvataggio e il caricamento degli oggetti
qiskit_addon_sqd.fermion.SCIState. -
È stata aggiunta una nota di rilascio alla versione 0.11 relativa a una modifica che comporta l'incompatibilità con
qiskit_addon_sqd.fermion.SCIState.
0.11.0
Nuove funzioni
-
È stata aggiunta una nuova funzione
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()che funge da punto di ingresso principale per l'algoritmo SQD. -
qiskit_addon_sqd.fermion.solve_fermion()ora accetta un argomentoshiftutilizzato per modificare gli stati con spin errato, .
Note sull'aggiornamento
qiskit_addon_sqd.fermion.solve_fermion()e oraqiskit_addon_sqd.fermion.optimize_orbitals()accetta i caratteri finalikwargs, che verranno passati direttamente a pyscf.fci.selected_ci.kernel_fixed_space dietro le quinte per calcolare lo stato di destinazione. L'argomentomax_davidsondovrebbe ora essere passato comemax_cyclein entrambe le funzioni.
Correzioni di bug
- Corretta una conversione di tipo da float a integer che riguardava il modulo
qubit
0.10.0
Note sull'aggiornamento
- Rimosso
qiskit_addon_sqd.fermion.flip_orbital_occupancies(). Gli utenti non dovranno più invertire l'ordine dei dati relativi alle occupazioni orbitali forniti da eqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals(); tali dati verranno infatti forniti nell'ordine previsto daqiskit_addon_sqd.configuration_recovery.recover_configurations():tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])).
Note di deprecazione
-
L'argomento
avg_occupanciesdiqiskit_addon_sqd.configuration_recovery.recover_configurations()dovrebbe ora essere una tupla di tipo length-2, contenente rispettivamente le occupazioni in stato di spin-up e spin-down.Vecchio formato:
array([occ_b_N, ..., occ_b_0, occ_a_N, ..., occ_a_0])Nuovo formato:
tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Correzioni di bug
- È stato risolto un bug che causava
qiskit_addon_sqd.fermion.solve_fermion()un valore errato dell'energia in uscita da quando l'input sispin_sqdiscostava dall' spin^2 e della funzione d'onda in uscita.
0.9.0
Note sull'aggiornamento
qiskit_addon_sqd.fermion.optimize_orbitals()e oraqiskit_addon_sqd.fermion.rotate_integrals()è necessariok_flatspecificare il triangolo superiore (esclusa la diagonale) della matrice di rotazione, anziché l'intera matrice.
Correzioni di bug
-
È stato risolto un errore di indicizzazione che
qiskit_addon_sqd.configuration_recovery()causava l'inversione dei bit nella metà destra della stringa di bit rispetto alle occupazioni degli orbitali associati alla metà sinistra della stringa di bit. -
pyscf non è più considerato una dipendenza in Windows, dove non riesce a installarsi. Tuttavia, Windows rimane una piattaforma non supportata.
0.8.0
Nuove funzioni
-
Aggiunto il supporto per Python 3.9.
-
Tutte le funzioni che accettano un argomento
rand_seedora accettano anche un'istanzanumpy.random.Generatorcomerand_seed.
Note sull'aggiornamento
- Lo stato fondamentale restituito da
qiskit_addon_sqd.fermion.solve_fermion()sarà ora un’istanza diqiskit_addon_sqd.fermion.SCIState, anziché un’istanzaSCIVectordi PySCF.
0.7.0
Correzioni di bug
-
È stato risolto un bug in e
qiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals()che causava un'inversione errata dei determinanti per lo spin-up e lo spin-down prima della risoluzione. -
È stato risolto un bug nei flussi di lavoro open-shell che causava
qiskit_addon_sqd.fermion.optimize_orbitals()il crash del programma con un erroremalloc.
0.6.0
Note sull'aggiornamento
-
L'uso di
addressescome argomento chiave per eqiskit_addon_sqd.fermion.solve_fermion()nonqiskit_addon_sqd.fermion.optimize_orbitals()è più supportato. Gli utenti possono comunque passareaddressescome primo argomento posizionale; tuttavia, questo utilizzo è deprecato. Si consiglia agli utenti di passare la matrice di stringhe di bit che definisce il sottospazio come primi argomenti posizionali a queste funzioni, come illustrato di seguito.Per aggiornare, modificare questo codice
# 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, )
Note di deprecazione
-
La funzione
qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()è stata deprecata a favore diqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs(). Queste due funzioni funzionano allo stesso modo, con un’unica eccezione fondamentale:qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()restituisce le configurazioni cometuple(spin_dn, spin_up); mentreqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()restituisce le configurazioni cometuple(spin_up, spin_dn).per migrare
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'argomento
addresseseqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals()è stato deprecato a favore dibitstring_matrix. Gli utenti non sono più tenuti a convertire le proprie configurazioni in numeri interi; devono invece fornire la matrice di stringhe di bit che specifica il sottospazio su cui proiettare e diagonalizzare l'hamiltoniano. La conversione nella rappresentazione intera dei determinanti verrà effettuata internamente.
Correzioni di bug
-
È stato risolto un bug
qiskit_addon_sqd.configuration_recovery.recover_configurations()che talvolta causava un errore di divisione per zero durante il calcolo della probabilità di inversione di un singolo bit. -
Corregge un bug che causava il fallimento del ripristino della configurazione su bitstring di lunghezza superiore a 72.
0.5.0
Note sull'aggiornamento
-
Le funzioni
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), e oraqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()richiedono che glihamming_leftargomentihamming_righte vengano specificati come argomenti chiave. Inoltre, gli argomentin_batchessamples_per_batche diqiskit_addon_sqd.subsampling.postselect_and_subsample()dovrebbero ora essere passati come argomenti chiave.Per aggiornare
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, )dovrebbe essere cambiato 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
Preludio
Si tratta di una versione minore che introduce un paio di piccole, ma importanti, modifiche all'API. Queste modifiche consentono di specificare in modo più coerente il numero di elettroni alfa e beta in tutte le funzioni chimiche e non chimiche dell'API.
Note sull'aggiornamento
-
I parametri
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), e oraqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()accettano l’argomento posizionalehamming_rightprima dell’argomentohamming_leftper allinearsi meglio con il resto del flusso di lavoro.Per aggiornare
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, )dovrebbe essere cambiato 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, )