Skip to main content
IBM Quantum Platform

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 fase sci_solver viene eseguita su ogni processo, quindi un’implementazione personalizzata e distribuita sci_solver può 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


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

Note sull'aggiornamento

Note di deprecazione

Correzioni di bug


0.11.0

Nuove funzioni

Note sull'aggiornamento

Correzioni di bug

  • Corretta una conversione di tipo da float a integer che riguardava il modulo qubit

0.10.0

Note sull'aggiornamento

Note di deprecazione

  • L'argomento avg_occupancies di qiskit_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 si spin_sq discostava dall' spin^2 e della funzione d'onda in uscita.

0.9.0

Note sull'aggiornamento

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_seed ora accettano anche un'istanza numpy.random.Generator come rand_seed.

Note sull'aggiornamento


0.7.0

Correzioni di bug


0.6.0

Note sull'aggiornamento

  • L'uso di addresses come argomento chiave per e qiskit_addon_sqd.fermion.solve_fermion() non qiskit_addon_sqd.fermion.optimize_orbitals() è più supportato. Gli utenti possono comunque passare addresses come 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 di qiskit_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 come tuple(spin_dn, spin_up); mentre qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs() restituisce le configurazioni come tuple(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 addresses e qiskit_addon_sqd.fermion.solve_fermion() qiskit_addon_sqd.fermion.optimize_orbitals() è stato deprecato a favore di bitstring_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 ora qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight() richiedono che gli hamming_left argomenti hamming_right e vengano specificati come argomenti chiave. Inoltre, gli argomenti n_batches samples_per_batch e di qiskit_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 ora qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight() accettano l’argomento posizionale hamming_right prima dell’argomento hamming_left per 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,
    )
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.