OrbitalRotation
class OrbitalRotation(rotation_unitary)
Basi: FermionicGate
Esegue una rotazione orbitale.
Data una matrice unitaria di a (rotation_unitary), questo gate implementa il cambio di base a particella singola che mappa gli operatori di creazione come
il che equivale ad applicare l'operatore unitario a molti corpi
Il numero di modi fermionici su cui agisce il gate è pari alla dimensione di rotation_unitary.
L'inizializzazione di un'istanza di questo gate può essere effettuata utilizzando gli argomenti elencati di seguito.
Parametri
rotation_unitary (np.ndarray) – la matrice unitaria che definisce la rotazione orbitale tramite . Deve essere quadrata e unitaria; ciò è a carico del chiamante e non viene verificato.
Attributi
rotation_unitary
La matrice unitaria che rappresenta i coefficienti di rotazione orbitale.
Metodi
from_t1_amplitudes
classmethod from_t1_amplitudes(t1)
Costruisce una rotazione orbitale a partire dalle ampiezze di un e (singole).
La rotazione è l’ e unitario, in cui la matrice di ampiezza è incorporata nel generatore anti-ermitiano su tutti gli orbitali
con gli orbitali occupati elencati prima di quelli virtuali. Si tratta della rotazione orbitale a eccitazione singola che entra nell’ansatz (L)UCJ quando viene inizializzata a partire dalle ampiezze del metodo dei cluster accoppiati; vedi UCJ.
Parametri
t1 (ndarray) – le ampiezze di e di forma (nocc, nvrt), dove nocc è il numero di orbitali occupati e nvrt è il numero di orbitali virtuali.
Risultati
Un'azione OrbitalRotation sulle modalità di , la cui è rotation_unitary .
Tipo di restituzione
Metodi del protocollo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Applica la rotazione orbitale dopo averla inserita nelle modalità globali del vettore.
La parte locale del gate ( rotation_unitary una matrice di tipo e che agisce sulle modalità num_modes del gate) viene innanzitutto incorporata nel registro completo: una matrice identità con numero di modalità pari a quello del vettore di stato, in cui viene rotation_unitary inserito nelle righe/colonne selezionate da freg_indices.
Nel caso "spinful", la matrice incorporata deve essere diagonale a blocchi rispetto alla suddivisione alfa/beta. Una rotazione con blocchi fuori diagonale alfa/beta diversi da zero mescola i settori di spin, il che non conserva il numero individuale di elettroni alfa/beta e quindi mappa l'ampiezza al di fuori del settore (n_alpha, n_beta) fisso – un'operazione che il vettore di stato a settore fisso non è in grado di rappresentare. Una rotazione di questo tipo viene respinta con un ValueError.
La matrice incorporata viene quindi applicata in uno dei due modi seguenti:
- Percorso veloce (solo se
ffsimè installato): la matrice incorporata viene applicata tramite il kernel di rotazione di Givensffsim.apply_orbital_rotation()di. In base alla convenzione "spinful block-spin" (i modi0..norbsono orbitali alfa, i modinorb..2*norbsono orbitali beta), i due blocchi diagonali corrispondono alle rotazioni per spin passate a ffsim come(mat_a, mat_b). - Percorso generale : in caso contrario (ovvero quando non
ffsimè disponibile), la rotazione viene applicata come evoluzione sotto il suo generatore , dove è la matrice incorporata. viene convertita in unascipy``LinearOperatortramitelinear_operator()(supportata dal kernel matrice-vettore nativo di FCI) e applicata tramitescipy.sparse.linalg.expm_multiply(). Questo rispecchiaEvolution._apply_unitary_placed_().
Parametri
- vec (ndarray) – il vettore di stato su cui agire.
- norb (int) – il numero di orbitali spaziali del vettore di stato globale.
- nelec (int |tuple[int, int]) – o un singolo numero intero per un sistema senza spin, oppure una coppia di numeri interi che indicano il numero di fermioni con spin alfa e beta. Un numero intero indica l'interpretazione delle modalità senza spin (le
norbmodalità sono orbitali); una coppia indica l'interpretazione delle modalità2 * norbcon spin a(orb, spin)blocchi. - copy (bool) – se copiare il vettore prima di eseguire operazioni su di esso.
- freg_indices (list[int]) – gli indici delle modalità assolute (globali) a cui si mappano le modalità locali di questo gate. La rotazione viene incorporata in queste modalità globali prima di essere applicata.
Risultati
Il vettore trasformato.
Aumenti
ValueError – se nelec è una coppia con spin e la rotazione (applicata) mescola i settori di spin alfa e beta.
Tipo di restituzione