Notas de la versión de la diagonalización cuántica basada en muestras (SQD)
0.12.1
Notas de actualización
- Python 3.10 ahora es la versión mínima requerida. Se ha dejado de ofrecer soporte para Python 3.9.
0.12.0
Nuevas funciones
-
Añadido el argumento
max_dima la funciónqiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()función Este argumento se utiliza para limitar la dimensión del subespacio SCI. -
Se ha introducido la
qiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()función.
Notas de actualización
qiskit_addon_sqd.fermion.SCIStateahora toma dos argumentos adicionales necesarios,norbynelec. Se trata de un cambio radical.
Notas sobre características en desuso
-
qiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()ha quedado obsoleto. En su lugar, utiliceqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left(). -
qiskit_addon_sqd.subsampling.postselect_and_subsample()ha quedado obsoleto. En su lugar, utiliceqiskit_addon_sqd.subsampling.postselect_by_hamming_right_and_left()yqiskit_addon_sqd.subsampling.subsample().
Corrección de errores
-
Se ha corregido un error en
qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()por el que la conversión de cadenas de bits a cadenas CI podía ser incorrecta cuando el número de orbitales era superior a 53. -
Se ha corregido un error por el que al guardar y cargar
qiskit_addon_sqd.fermion.SCIStatese producía un error. -
Se ha añadido una nota de publicación a la versión 0.11 para un cambio de última hora que afecta a
qiskit_addon_sqd.fermion.SCIState.
0.11.0
Nuevas funciones
-
Añadida una nueva función
qiskit_addon_sqd.fermion.diagonalize_fermionic_hamiltonian()para servir como punto de entrada principal al algoritmo SQD. Consulte los tutoriales actualizados para ver una demostración de cómo utilizar esta función. -
qiskit_addon_sqd.fermion.solve_fermion()ahora acepta un argumentoshiftutilizado para desplazar estados que tienen el espín equivocado, .
Notas de actualización
qiskit_addon_sqd.fermion.solve_fermion()yqiskit_addon_sqd.fermion.optimize_orbitals()aceptan ahora la direcciónkwargs, que se pasará directamente a pyscf.fci.selected_ci.kernel_fixed_space para calcular el estado objetivo. El argumentomax_davidsondebe pasarse ahora comomax_cycleen ambas funciones.
Corrección de errores
- Corregida una conversión de tipo flotante a entero que afectaba al módulo
qubit
0.10.0
Notas de actualización
- Eliminado
qiskit_addon_sqd.fermion.flip_orbital_occupancies(). Los usuarios ya no necesitan voltear la salida de ocupaciones orbitales deqiskit_addon_sqd.fermion.solve_fermion()yqiskit_addon_sqd.fermion.optimize_orbitals()ya que se mostrarán en el orden esperado porqiskit_addon_sqd.configuration_recovery.recover_configurations()tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])).
Notas sobre características en desuso
-
El argumento
avg_occupanciesdeqiskit_addon_sqd.configuration_recovery.recover_configurations()debe ser ahora una tupla length-2 que contenga las ocupaciones de spin-up y spin-down, respectivamente.Formato antiguo:
array([occ_b_N, ..., occ_b_0, occ_a_N, ..., occ_a_0])Nuevo formato:
tuple(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Corrección de errores
- Se ha corregido un error que provocaba que la energía de salida de
qiskit_addon_sqd.fermion.solve_fermion()fuera incorrecta cuando laspin_sqde entrada se desviaba de la spin^2 de la función de onda de salida.
0.9.0
Notas de actualización
qiskit_addon_sqd.fermion.optimize_orbitals()yqiskit_addon_sqd.fermion.rotate_integrals()requieren ahora quek_flatespecifique el triángulo superior (sin incluir la diagonal) de la matriz de rotación, en lugar de la matriz completa.
Corrección de errores
-
Se ha corregido un error de indexación en
qiskit_addon_sqd.configuration_recovery()que provocaba que los bits de la mitad derecha de la cadena de bits estuvieran invertidos con respecto a las ocupaciones de los oritales asociados a la mitad izquierda de la cadena de bits. -
pyscf ya no se considera una dependencia en Windows, donde falla al instalarse. Sin embargo, Windows sigue siendo una plataforma no compatible.
0.8.0
Nuevas funciones
-
Se ha añadido compatibilidad con Python 3.9.
-
Todas las funciones que toman un argumento
rand_seedaceptan ahora también una instancianumpy.random.Generatorcomorand_seed.
Notas de actualización
- El estado básico devuelto por
qiskit_addon_sqd.fermion.solve_fermion()será ahora una instancia deqiskit_addon_sqd.fermion.SCIStateen lugar de una instancia de PySCFSCIVector.
0.7.0
Corrección de errores
-
Se ha corregido un error en
qiskit_addon_sqd.fermion.solve_fermion()yqiskit_addon_sqd.fermion.optimize_orbitals()que hacía que los determinantes de spin-up y spin-down se invirtieran incorrectamente antes de resolver. -
Se ha corregido un error en los flujos de trabajo abiertos que provocaba que
qiskit_addon_sqd.fermion.optimize_orbitals()se bloqueara con un errormalloc.
0.6.0
Notas de actualización
-
Especificando
addressescomo argumento de palabra clave paraqiskit_addon_sqd.fermion.solve_fermion()yqiskit_addon_sqd.fermion.optimize_orbitals()ya no es compatible. Los usuarios aún pueden pasaraddressescomo primer argumento posicional; sin embargo, este uso está obsoleto. Se recomienda a los usuarios que pasen la matriz de bits que define el subespacio como primer argumento posicional a estas funciones, como se muestra a continuación.Para actualizar, cambie 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 sobre características en desuso
-
La función
qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()ha quedado obsoleta en favor deqiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs(). Estas dos funciones se comportan igual con una excepción clave -qiskit_addon_sqd.fermion.bitstring_matrix_to_sorted_addresses()devuelve las configuraciones comotuple(spin_dn, spin_up); mientras que,qiskit_addon_sqd.fermion.bitstring_matrix_to_ci_strs()devuelve las configuraciones 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) -
El argumento
addressesdeqiskit_addon_sqd.fermion.solve_fermion()yqiskit_addon_sqd.fermion.optimize_orbitals()ha quedado obsoleto en favor debitstring_matrix. Ya no es necesario que los usuarios conviertan sus configuraciones en números enteros; en su lugar, ahora deben pasar la matriz de bits que especifica el subespacio sobre el que proyectar y diagonalizar el hamiltoniano. La conversión a la representación entera de los determinantes se hará internamente.
Corrección de errores
-
Se ha corregido un error en
qiskit_addon_sqd.configuration_recovery.recover_configurations()que a veces provocaba un error de división por cero al calcular la probabilidad de cambio de bit individual. -
Se corrige un error que hacía que la recuperación de la configuración fallara en cadenas de bits de longitud superior a 72.
0.5.0
Notas de actualización
-
En
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample()yqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()ahora requieren que los argumentoshamming_rightyhamming_leftse especifiquen como argumentos de palabra clave. Además, los argumentossamples_per_batchyn_batchesdeqiskit_addon_sqd.subsampling.postselect_and_subsample()deben pasarse ahora como argumentos de palabra clave.Para actualizar
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, )debe cambiarse por
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
Se trata de una versión menor que introduce un par de pequeños pero importantes cambios en la API. Estos cambios permiten un patrón más coherente a la hora de especificar el número de electrones alfa y beta en todas las funciones químicas y no químicas de la API.
Notas de actualización
-
En
qiskit_addon_sqd.counts.generate_counts_bipartite_hamming(),qiskit_addon_sqd.subsampling.postselect_and_subsample()yqiskit_addon_sqd.configuration_recovery.post_select_by_hamming_weight()toman ahora el argumento posicionalhamming_rightantes que el argumentohamming_leftpara ajustarse mejor al resto del flujo de trabajo.Para actualizar
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, )debe cambiarse por
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, )