Notas de versão da diagonalização quântica baseada em amostras (SQD)
0.13.0
Novos Recurso
-
Foi adicionado suporte para Python, 3.13 e Python, 3.14. Não foi necessário fazer alterações no código, portanto, espera-se que as versões mais antigas também funcionem em Python, 3.13 e 3.14.
-
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()agora podem ser chamadas coletivamente a partir de todos os processos de uma execução multiprocessada (SPMD), por exemplo, no ambiente MPI. Quando invocado dessa forma, a etapasci_solveré executada em todos os processos; assim, um algoritmo personalizado e distribuídosci_solverpode distribuir cada diagonalização entre os processos disponíveis; o restante do ciclo de recuperação da configuração é executado apenas no processo de controle, e o valor de retorno é o mesmo em todos os processos. O comportamento de um único processo permanece inalterado. Consulte “Suporte à aceleração multiprocesso e multithread” para obter detalhes sobre o suporte do pacote à aceleração multiprocesso e multithread.
Notas de descontinuação
- As
qiskit_addon_sqd.fermion.rotate_integrals()funções eqiskit_addon_sqd.fermion.optimize_orbitals()estão agora obsoletas. Consulte o guia de otimização orbital para saber como otimizar a base do hamiltoniano usando o pacote ffsim.
0.12.1
Notas da Atualização
- Python 3.10 é agora a versão mínima exigida. O suporte para Python 3.9 foi descontinuado.
0.12.0
Novos Recurso
-
Adicionou-se o argumento
max_dimà funçãoqiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian(). Esse argumento é utilizado para limitar a dimensão do subespaço SCI. -
Apresentou a função
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left().
Notas da Atualização
qiskit_addon_sqd.fermion.SCIStateagora aceita dois argumentos obrigatórios adicionais:norbenelec. Essa é uma alteração que causa incompatibilidade.
Notas de descontinuação
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()agora está obsoleto. Em vez disso, useqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left(). -
qiskit_addon_sqd.subsampling.postselect_and_subsample()agora está obsoleto. Em vez disso, use eqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()qiskit_addon_sqd.subsampling.subsample().
Correções de bugs
-
Corrigimos um bug no
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()qual a conversão de sequências de bits em strings CI poderia estar incorreta quando o número de orbitais fosse superior a 53. -
Corrigimos um bug que fazia com que salvar e carregar objetos
qiskit_addon_sqd.fermion.SCIStateresultasse em um erro. -
Foi adicionada uma nota de lançamento à versão 0.11 referente a uma alteração que causa incompatibilidade envolvendo
qiskit_addon_sqd.fermion.SCIState.
0.11.0
Novos Recurso
-
Foi adicionada uma nova função
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()para servir como ponto de entrada principal do algoritmo SQD. -
qiskit_addon_sqd.fermion.solve_fermion()agora aceita um argumentoshiftusado para alterar estados com spin incorreto, .
Notas da Atualização
qiskit_addon_sqd.fermion.solve_fermion()e agoraqiskit_addon_sqd.fermion.optimize_orbitals()aceita parâmetros adicionaiskwargs, que serão repassados diretamente para o pyscf.fci.selected_ci.kernel_fixed_space nos bastidores para calcular o estado alvo. O argumentomax_davidsondeve agora ser passado da mesma forma emmax_cycleambas as funções.
Correções de bugs
- Correção de uma conversão de tipo float para inteiro que afetava o módulo
qubit
0.10.0
Notas da Atualização
- Removido
qiskit_addon_sqd.fermion.flip_orbital_occupancies(). Os usuários não precisam mais inverter a ordem das ocupações orbitais geradas por eqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals(); elas serão exibidas na ordem esperada porqiskit_addon_sqd.configuration_recovery.recover_configurations():tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])).
Notas de descontinuação
-
O argumento
avg_occupanciesparaqiskit_addon_sqd.configuration_recovery.recover_configurations()deve agora ser uma tupla do tipolength-2contendo as ocupações de spin-up e spin-down, respectivamente.Formato antigo:
array([occ_b_N, ..., occ_b_0, occ_a_N, ..., occ_a_0])Novo formato:
tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Correções de bugs
- Corrigimos um erro que fazia com que a produção de energia de
qiskit_addon_sqd.fermion.solve_fermion()fosse incorreta quando a entrada se desviaspin_sqdo spin^2 e da função de onda de saída.
0.9.0
Notas da Atualização
qiskit_addon_sqd.fermion.optimize_orbitals()e agoraqiskit_addon_sqd.fermion.rotate_integrals()é necessáriok_flatespecificar o triângulo superior (sem incluir a diagonal) da matriz de rotação, em vez da matriz completa.
Correções de bugs
-
Corrigimos um erro de indexação que
qiskit_addon_sqd.configuration_recovery()fazia com que os bits da metade direita da sequência de bits fossem invertidos em relação às ocupações dos orbitais associados à metade esquerda da sequência de bits. -
o pyscf não é mais considerado uma dependência do Windows, onde ele não é instalado. No entanto, o Windows continua sendo uma plataforma sem suporte.
0.8.0
Novos Recurso
-
Foi adicionado suporte para Python 3.9.
-
Todas as funções que recebem um argumento
rand_seedagora também aceitam uma instâncianumpy.random.Generatorcomorand_seed.
Notas da Atualização
- O estado fundamental retornado por agora
qiskit_addon_sqd.fermion.solve_fermion()será uma instância deqiskit_addon_sqd.fermion.SCIState, em vez de uma instânciaSCIVectorde PySCF.
0.7.0
Correções de bugs
-
Corrigimos um erro em e
qiskit_addon_sqd.fermion.solve_fermion()queqiskit_addon_sqd.fermion.optimize_orbitals()fazia com que os determinantes para spin-up e spin-down fossem invertidos incorretamente antes da resolução. -
Corrigimos um bug nos fluxos de trabalho do open-shell que causava
qiskit_addon_sqd.fermion.optimize_orbitals()uma falha com um erromalloc.
0.6.0
Notas da Atualização
-
A especificação de
addressescomo argumento-chave para eqiskit_addon_sqd.fermion.solve_fermion()nãoqiskit_addon_sqd.fermion.optimize_orbitals()é mais suportada. Os usuários ainda podem passaraddressescomo primeiro argumento posicional; no entanto, esse uso está obsoleto. Recomenda-se que os usuários passem a matriz de sequências de bits que define o subespaço como os primeiros argumentos posicionais dessas funções, conforme mostrado a seguir.Para atualizar, altere este código
# 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, )
Notas de descontinuação
-
A função
qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()foi considerada obsoleta e substituída porqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs(). Essas duas funções se comportam da mesma forma, com uma exceção importante:qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()retorna as configurações comotuple(spin_dn, spin_up); já queqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()retorna as configurações comotuple(spin_up, spin_dn).para migrar
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) -
O argumento
addressespara eqiskit_addon_sqd.fermion.solve_fermion()qiskit_addon_sqd.fermion.optimize_orbitals()foi descontinuado em favor debitstring_matrix. Os usuários não precisam mais converter suas configurações em números inteiros; em vez disso, devem agora passar a matriz de sequência de bits que especifica o subespaço no qual se deve projetar e diagonalizar o hamiltoniano. A conversão dos determinantes para a representação inteira será feita internamente.
Correções de bugs
-
Corrigimos um bug que
qiskit_addon_sqd.configuration_recovery.recover_configurations(), às vezes, causava um erro de divisão por zero ao calcular a probabilidade de inversão de bits individual. -
Corrige um erro que fazia com que a recuperação da configuração falhasse em cadeias de bits de comprimento superior a 72.
0.5.0
Notas da Atualização
-
As funções
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), e agoraqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()exigem que os argumentoshamming_lefthamming_righte sejam especificados como argumentos-chave. Além disso, os argumentosn_batchessamples_per_batche da funçãoqiskit_addon_sqd.subsampling.postselect_and_subsample()devem agora ser passados como argumentos-chave.Para atualizar
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, )deve ser alterado para
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
Prelúdio
Esta é uma versão secundária que introduz algumas pequenas, mas importantes, mudanças significativas na API. Essas alterações permitem um padrão mais consistente na especificação do número de elétrons alfa e beta nas funções químicas e não químicas da API.
Notas da Atualização
-
Os argumentos
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), e agoraqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()recebem o argumentohamming_rightposicional antes dohamming_leftargumento, para se adequarem melhor ao restante do fluxo de trabalho.Para atualizar
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, )deve ser alterado para
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, )