Notas de versão da diagonalização quântica baseada em amostras (SQD)
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
-
Adicionado o argumento
max_dimà funçãoqiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()função. Esse argumento é usado para limitar a dimensão do subespaço SCI. -
Introduziu a função
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()função.
Notas da Atualização
qiskit_addon_sqd.fermion.SCIStateagora recebe dois argumentos adicionais obrigatórios,norbenelec. Essa é uma mudança radical.
Notas de descontinuação
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()está obsoleto. Em vez disso, useqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left(). -
qiskit_addon_sqd.subsampling.postselect_and_subsample()está obsoleto. Em vez disso, useqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()eqiskit_addon_sqd.subsampling.subsample().
Correções de bugs
-
Foi corrigido um bug no
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()no qual a conversão de cadeias de bits em cadeias de CI poderia estar incorreta quando o número de orbitais fosse maior que 53. -
Foi corrigido um bug no qual salvar e carregar objetos
qiskit_addon_sqd.fermion.SCIStateresultavam em um erro. -
Foi adicionada uma nota de versão à versão 0.11 para uma alteração de ruptura envolvendo
qiskit_addon_sqd.fermion.SCIState.
0.11.0
Novos Recurso
-
Adicionada uma nova função
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()para servir como o ponto de entrada principal do algoritmo SQD. Consulte os tutoriais atualizados para obter uma demonstração de como usar essa função. -
qiskit_addon_sqd.fermion.solve_fermion()agora aceita um argumentoshiftusado para mudar os estados que têm o spin errado, .
Notas da Atualização
qiskit_addon_sqd.fermion.solve_fermion()eqiskit_addon_sqd.fermion.optimize_orbitals()agora aceitamkwargs, que será passado diretamente para pyscf.fci.selected_ci.kernel_fixed_space para calcular o estado de destino. O argumentomax_davidsonagora deve ser passado comomax_cycleem ambas 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 saída de ocupações orbitais deqiskit_addon_sqd.fermion.solve_fermion()eqiskit_addon_sqd.fermion.optimize_orbitals()elas serão geradas 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 length-2 contendo 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
- Corrigido um bug que fazia com que a saída de energia do
qiskit_addon_sqd.fermion.solve_fermion()fosse incorreta quando a entradaspin_sqse desviava da spin^2 da função de onda de saída.
0.9.0
Notas da Atualização
qiskit_addon_sqd.fermion.optimize_orbitals()eqiskit_addon_sqd.fermion.rotate_integrals()agora exigem que o sitek_flatespecifique o triângulo superior (sem incluir a diagonal) da matriz de rotação, em vez da matriz inteira.
Correções de bugs
-
Corrigido um erro de indexação em
qiskit_addon_sqd.configuration_recovery()que fazia com que os bits na metade direita da cadeia de bits fossem invertidos em relação às ocupações dos orbitais associados à metade esquerda da cadeia 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
qiskit_addon_sqd.fermion.solve_fermion()agora será uma instância deqiskit_addon_sqd.fermion.SCIStateem vez de uma instância de PySCFSCIVector.
0.7.0
Correções de bugs
-
Corrigido um erro no
qiskit_addon_sqd.fermion.solve_fermion()eqiskit_addon_sqd.fermion.optimize_orbitals()que fazia com que os determinantes de spin-up e spin-down fossem invertidos incorretamente antes da solução. -
Foi corrigido um bug em fluxos de trabalho de shell aberto que fazia com que o
qiskit_addon_sqd.fermion.optimize_orbitals()travasse com um erromalloc.
0.6.0
Notas da Atualização
-
Especificando
addressescomo um argumento de palavra-chave paraqiskit_addon_sqd.fermion.solve_fermion()eqiskit_addon_sqd.fermion.optimize_orbitals()não é mais suportado. Os usuários ainda podem passaraddressescomo o primeiro argumento posicional; no entanto, esse uso está obsoleto. Os usuários são incentivados a passar a matriz de bitstring que define o subespaço como os primeiros argumentos posicionais para essas funções, conforme mostrado abaixo.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 preterida em favor deqiskit_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); enquanto,qiskit_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
addressesparaqiskit_addon_sqd.fermion.solve_fermion()eqiskit_addon_sqd.fermion.optimize_orbitals()foi preterido em favor debitstring_matrix. Não é mais necessário que os usuários convertam suas configurações em números inteiros; em vez disso, eles agora devem passar a matriz de bitstring especificando o subespaço no qual projetar e diagonalizar o Hamiltoniano. A conversão para a representação inteira dos determinantes será feita internamente.
Correções de bugs
-
Corrigido um bug no
qiskit_addon_sqd.configuration_recovery.recover_configurations()que, às vezes, causava um erro de divisão por zero ao calcular a probabilidade individual de inversão de bits. -
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
-
O
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), eqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()agora exigem que os argumentoshamming_rightehamming_leftsejam especificados como argumentos de palavra-chave. Além disso, os argumentossamples_per_batchen_batchesparaqiskit_addon_sqd.subsampling.postselect_and_subsample()agora devem ser passados como argumentos de palavra-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
-
O
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample(), eqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()agora usam o argumento posicionalhamming_rightantes do argumentohamming_leftpara corresponder 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, )