Skip to main content
IBM Quantum Platform

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'étape sci_solver s'exécute sur chaque processus; ainsi, une implémentation personnalisée et distribuée sci_solver peut 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


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

Mise à niveau

  • qiskit_addon_sqd.fermion.SCIState prend désormais deux arguments obligatoires supplémentaires, norb et nelec. Il s'agit d'une modification qui entraîne des incompatibilités.

Remarques concernant la dépréciation

Corrections des erreurs


0.11.0

Nouvelles fonctions

Mise à niveau

Corrections des erreurs

  • Correction d'une conversion de type float en type integer affectant le module qubit

0.10.0

Mise à niveau

Remarques concernant la dépréciation

  • L'argument avg_occupancies de la fonction qiskit_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ée spin_sq s'écartait de l' spin^2 e de la fonction d'onde de sortie.

0.9.0

Mise à niveau

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_seed acceptent désormais également une instance numpy.random.Generator comme rand_seed.

Mise à niveau


0.7.0

Corrections des erreurs


0.6.0

Mise à niveau

  • La spécification de addresses en tant qu'argument-clé pour qiskit_addon_sqd.fermion.solve_fermion() et n'est qiskit_addon_sqd.fermion.optimize_orbitals() plus prise en charge. Les utilisateurs peuvent toujours passer addresses comme 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 de qiskit_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 forme tuple(spin_dn, spin_up); tandis que renvoie qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs() les configurations sous la forme tuple(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 addresses de et qiskit_addon_sqd.fermion.solve_fermion() qiskit_addon_sqd.fermion.optimize_orbitals() a été déprécié au profit de bitstring_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 exigent qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight() désormais que les arguments hamming_left hamming_right et soient spécifiés sous forme d'arguments-clés. De plus, les arguments n_batches samples_per_batch et de la fonction qiskit_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çoivent qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight() désormais l'argument hamming_right de position avant l'argument hamming_left afin 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,
    )
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.