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 diagonali 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 tramite il kernel di rotazione di Givens ffsim.apply_orbital_rotation()di. In base alla convenzione "spinful block-spin" (le modalità 0..norb sono orbitali alfa, le modalità norb..2*norb sono orbitali beta), i due blocchi diagonali corrispondono alle rotazioni per spin passate a ffsim come (mat_a, mat_b).
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 applicata a queste modalità globali prima di essere eseguita.
Risultati
Il vettore trasformato.
Aumenti
- MissingOptionalLibraryError – se ffsim non è installato.
- ValueError – se
nelecè una coppia con spin e la rotazione (applicata) mescola i settori di spin alfa e beta.
Tipo di restituzione