OrbitalRotation
class OrbitalRotation(rotation_unitary)
Bases : FermionicGate
Met en œuvre une rotation orbitale.
Pour une matrice unitaire d’ e (rotation_unitary), cette porte met en œuvre le changement de base à une particule qui associe aux opérateurs de création les éléments suivants :
ce qui revient à appliquer l'opérateur unitaire à N corps
Le nombre de modes fermioniques sur lesquels agit la porte correspond à la dimension de rotation_unitary.
L'initialisation d'une instance de cette porte peut s'effectuer à l'aide des arguments indiqués ci-dessous.
Paramètres
rotation_unitary (np.ndarray) – la matrice unitaire définissant la rotation orbitale via . Elle doit être carrée et unitaire; cela relève de la responsabilité de l'appelant et n'est pas vérifié.
Attributs
rotation_unitary
La matrice unitaire représentant les coefficients de rotation orbitale.
Méthodes
from_t1_amplitudes
classmethod from_t1_amplitudes(t1)
Construit une rotation orbitale à partir des amplitudes d' s (singles).
La rotation est l' unitaire, où la matrice d'amplitude d' est intégrée dans le générateur anti-hermiten sur l'ensemble des orbitales
les orbitales occupées étant classées avant les orbitales virtuelles. Il s'agit de la rotation orbitale à excitation unique intégrée dans l'ansatz (L)UCJ lorsqu'il est initialisé à partir d'amplitudes de type « coupled-cluster »; voir UCJ.
Paramètres
t1 (ndarray) – les amplitudes de l' (nocc, nvrt), où nocc est nvrt le nombre d'orbitales occupées et le nombre d'orbitales virtuelles.
Retours
Une action OrbitalRotation sur les modes d' , dont la forme est rotation_unitary .
Type de retour
Méthodes protocolaires
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Applique la rotation orbitale après l'avoir appliquée aux modes globaux du vecteur.
La matrice locale de la porte ( rotation_unitary une matrice d' s agissant sur les modes num_modes de la porte) est d'abord intégrée dans le registre complet : une matrice identité dont le nombre de modes correspond à celui du vecteur d'état, avec inscrit rotation_unitary dans les lignes/colonnes sélectionnées par freg_indices.
Dans le cas « spinful », la matrice intégrée doit être diagonale par blocs par rapport à la séparation alpha/bêta. Une rotation comportant des blocs hors diagonale alpha/bêta non nuls mélange les secteurs de spin, ce qui ne préserve pas les nombres d'électrons alpha/bêta individuels et, par conséquent, fait sortir l'amplitude du secteur (n_alpha, n_beta) fixe – une opération que le vecteur d'état du secteur fixe ne peut pas représenter. Une telle rotation est rejetée avec un ValueError.
La matrice intégrée est ensuite appliquée de l'une des deux manières suivantes :
- Voie rapide (uniquement si
ffsimest installé) : la matrice intégrée est appliquée via le noyau de rotation de Givensffsim.apply_orbital_rotation()de. Selon la convention « spinful » pour les blocs de spin (les modes0..norbcorrespondent aux orbitales alpha, les modesnorb..2*norbaux orbitales bêta), les deux blocs diagonaux correspondent aux rotations par spin transmises à ffsim sous la forme(mat_a, mat_b). - Parcours général : dans le cas contraire (c'est-à-dire lorsque n'est
ffsimpas disponible), la rotation est appliquée sous la forme de l'évolution sous son générateur , où est la matrice intégrée. est converti en un viascipy``LinearOperatorlinear_operator()(grâce au noyau matrice-vecteur FCI natif) puis appliqué viascipy.sparse.linalg.expm_multiply(). Cela correspond àEvolution._apply_unitary_placed_().
Paramètres
- vec (ndarray) – le vecteur d'état sur lequel agir.
- norb (int) – le nombre d'orbitales spatiales du vecteur d'état global.
- nelec (int |tuple[int, int]) – soit un seul nombre entier pour un système sans spin, soit une paire de nombres entiers indiquant le nombre de fermions de spin alpha et de fermions de spin bêta. Un entier correspond à l'interprétation des modes sans spin (les modes
norbsont des orbitales); une paire correspond à l'interprétation des modes avec spin(orb, spin)par blocs (les modes2 * norbsont des orbitales). - copy (bool) – s'il faut copier le vecteur avant d'effectuer une opération dessus.
- freg_indices (list[int]) – les indices des modes absolus (globaux) auxquels se superposent les modes locaux de cette porte. La rotation est appliquée à ces modes globaux avant d'être mise en œuvre.
Retours
Le vecteur transformé.
Augmentations
ValueError – si nelec est une paire à spin et si la rotation (appliquée) mélange les secteurs de spin alpha et bêta.
Type de retour