OrbitalRotation
class OrbitalRotation(rotation_unitary)
Bases: FermionicGate
Implementa una rotación orbital.
Dada una matriz unitaria de tipo « » (rotation_unitary), esta puerta implementa el cambio de base de una sola partícula que mapea los operadores de creación como
lo cual equivale a aplicar el operador unitario de muchos cuerpos
El número de modos fermiónicos sobre los que actúa la puerta es la dimensión de rotation_unitary.
La inicialización de una instancia de esta puerta se puede realizar con los argumentos que se indican a continuación.
Parámetros
rotation_unitary (np.ndarray) – la matriz unitaria que define la rotación orbital mediante . Debe ser cuadrada y unitaria; esto es responsabilidad de quien la invoca y no se verifica.
Atributos
rotation_unitary
La matriz unitaria que representa los coeficientes de rotación orbital.
Métodos
from_t1_amplitudes
classmethod from_t1_amplitudes(t1)
Construye una rotación orbital a partir de amplitudes de « » (singles).
La rotación es el generador unitario , donde la matriz de amplitudes está integrada en el generador antihermitiano sobre todos los orbitales
con los orbitales ocupados ordenados antes que los virtuales. Se trata de la rotación orbital de excitación única que se introduce en el ansatz (L)UCJ cuando se inicializa a partir de amplitudes de clúster acoplado; véase UCJ.
Parámetros
t1 (ndarray) – las amplitudes de la función de onda « » de forma (nocc, nvrt), donde nocc es el número de orbitales ocupados y nvrt es el número de orbitales virtuales.
Devuelve
Una acción OrbitalRotation sobre los modos de , cuyo valor es rotation_unitary .
Tipo de retorno
Métodos del protocolo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Aplica la rotación orbital tras situarla en los modos globales del vector.
La parte local de la puerta ( rotation_unitary una matriz de tipo « » que actúa sobre los modos num_modes de la puerta) se integra primero en el registro completo: una matriz identidad del número de modos del vector de estado, en cuyas filas y columnas se escribe rotation_unitary el valor indicado por freg_indices.
En el caso de «spinful», la matriz incrustada debe ser diagonal por bloques a lo largo de la división alfa/beta. Una rotación con bloques fuera de la diagonal con valores alfa/beta distintos de cero mezcla los sectores de espín, lo que no conserva los recuentos individuales de electrones alfa/beta y, por lo tanto, desplaza la amplitud fuera del sector (n_alpha, n_beta) fijo —una operación que el vector de estado del sector fijo no puede representar—. Dicha rotación se rechaza con un ValueError.
A continuación, la matriz incrustada se aplica de una de estas dos formas:
- Ruta rápida (solo si
ffsimestá instalado): la matriz incrustada se aplica mediante el núcleo de rotación de Givensffsim.apply_orbital_rotation()de. Según la convención de bloques de espín de Spinful (los modos0..norbson orbitales alfa, los modosnorb..2*norbson orbitales beta), los dos bloques diagonales son las rotaciones por espín que se pasan a ffsim como(mat_a, mat_b). - Ruta general : en caso contrario (es decir, cuando no está
ffsimdisponible), la rotación se aplica como la evolución bajo su generador , donde es la matriz incrustada. se convierte en un mediantescipy``LinearOperatorlinear_operator()(con el apoyo del núcleo matriz-vector nativo de FCI) y se aplica mediantescipy.sparse.linalg.expm_multiply(). Esto es un reflejo deEvolution._apply_unitary_placed_()...
Parámetros
- vec (ndarray) – el vector de estado sobre el que actuar.
- norb (int) – el número de orbitales espaciales del vector de estado global.
- nelec (int |tuple[int, int]) – o bien un único número entero para un sistema sin espín, o bien un par de números enteros que representan el número de fermiones de espín alfa y de espín beta. Un número entero selecciona la interpretación de modos sin espín (los modos
norbson orbitales); un par selecciona la interpretación de modos2 * norbcon espín en(orb, spin)bloques. - copy (bool) – si se debe copiar el vector antes de realizar operaciones con él.
- freg_indices (list[int]) – los índices de los modos absolutos (globales) a los que se asignan los modos locales de esta puerta. La rotación se integra en estos modos globales antes de aplicarse.
Devuelve
El vector transformado.
Subidas
ValueError – si nelec es un par con espín y la rotación (aplicada) mezcla los sectores de espín alfa y beta.
Tipo de retorno