InitializeModes
class InitializeModes(occupation)
Basi: FermionicGate
Prepara (o, in caso di simulazione, certifica) l'occupazione di una modalità fermionica.
Questo gate indica l'occupazione prevista delle modalità su cui è impostato. Il suo comportamento dipende da come viene utilizzato il circuito:
- Transpilato (sintetizzato in porte quantistiche): produce lo stato – il plugin di sintesi emette le porte che impostano le modalità specificate sul loro stato di occupazione, come ci si aspetterebbe da una porta di inizializzazione.
- Simulato (
_apply_unitary_()): funge da validatore piuttosto che da produttore. Dato un vettore di stato, verifica che l'ampiezza del vettore sia confinata nel sottospazio da esso definitooccupatione restituisce il vettore invariato, certificando – senza modificarlo – che lo stato in ingresso sia il riferimento previsto, in modo che le trasformazioni successive agiscano su di esso.
In entrambe le modalità, il gate limita solo gli orbitali indicati dai nomi di occupazione (e, per ogni settore di spin, solo lungo l’asse di quel settore), quindi è possibile posizionare diversi InitializeModes gate in parallelo per generare in modo indipendente frammenti disgiunti di uno stato – ad esempio, un gate per ogni settore di spin o uno per ogni gruppo di orbitali. Un gate spinful può coprire un singolo settore (o una sua parte qualsiasi) oppure specificare interamente entrambi i settori, ma una copertura parziale di entrambi viene rifiutata (vedi _apply_unitary_placed_()).
Utilizzare from_hartree_fock() per costruire l’occupazione di un riferimento di Hartree-Fock.
Si tratta di un prototipo in fase iniziale di sviluppo. Si prega di prestare attenzione alle modifiche all'interfaccia che potrebbero essere apportate senza preavviso durante la fase di sviluppo pre-rilascio di questo pacchetto.
L'inizializzazione di un'istanza di questo gate può essere effettuata utilizzando gli argomenti elencati di seguito.
Parametri
occupation (Sequence[bool]) – una sequenza di valori booleani che indica lo stato di occupazione per ciascuna modalità nel circuito che viene FermionicRegister inizializzato da questo gate.
Attributi
occupation
La sequenza di valori booleani che indica lo stato di occupazione per ciascuna modalità nel circuito che viene FermionicRegister inizializzato da questo gate.
Metodi
from_hartree_fock
classmethod from_hartree_fock(norb, nelec)
Crea la porta per l'occupazione di riferimento di Hartree-Fock di (norb, nelec).
Il determinante di Hartree-Fock riempie gli orbitali con indice più basso di ciascun settore di spin. Il fatto che il riferimento sia senza spin o con spin si deduce da nelec (un int seleziona l'interpretazione senza spin delle norb modi; una (n_alpha, n_beta) coppia seleziona l'interpretazione con spin a blocchi delle 2 * norb modi). Posizionare il gate restituito sul registro corrispondente per certificare uno stato di riferimento di Hartree-Fock.
Parametri
- norb (int) – il numero di orbitali spaziali.
- 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.
Risultati
Un gate InitializeModes il cui valore è il determinante di Hartree-Fock.
Aumenti
ValueError – se il numero di elettroni supera quello degli orbitali norb disponibili in un settore.
Tipo di restituzione
Metodi del protocollo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Assicura che vec sia limitato al sottospazio di occupazione di questo gate, restituendolo inalterato.
A differenza di un gate di trasformazione, questo gate non modifica lo stato: verifica che l’ampiezza vecdi rientri interamente nel sottospazio definito occupation da, e, in tal caso, restituisce invariato vec . Il sottospazio è l'insieme dei determinanti la cui occupazione coincide con quella di questo gate sugli orbitali da esso indicati, lasciando libero ogni orbitale non indicato; pertanto, un'occupazione parziale (un frammento di un settore) ammette un'intera famiglia di determinanti e il controllo si combina con altri gate InitializeModes paralleli.
La modalità locale del gate ( occupation una bandiera per ogni modalità locale) viene inserita nel registro globale tramite freg_indices: la modalità locale i vincola la modalità globale freg_indices[i]. Le modalità globali vengono quindi interpretate secondo la convenzione (norb, nelec) :
- Senza spin (
nelecè unint): le modalitànorbsono direttamente orbitali; la verifica avviene nello spazio aC(norb, nelec)-dimensioni. - Spinful (
nelecè una coppia): secondo la convenzione "block-spin", le modalità0..norbsono orbitali alfa e le modalitànorb..2*norbsono orbitali beta. Un gate che interessa un singolo settore vincola l’asse di stato(dim_a, dim_b)di quel settore (un insieme di righe complete per un gate alfa, o di colonne complete per un gate beta) e lascia libero l’altro asse, quindi si combina con i gate paralleli sull’altro settore. Un gate può anche coprire entrambi i settori, ma solo quando blocca un determinante completo (tutti gli orbitali di entrambi i settori indicati, senza lasciarne nessuno libero); uno straddle parziale – che vincola alcuni orbitali di entrambi i settori lasciandone altri liberi – viene rifiutato, poiché non è un prodotto di sottospazi per asse e non può essere composto (utilizzare invece un gate per settore).
La verifica riguarda il confinamento, non l'uguaglianza: un'ampiezza in entrata può avere qualsiasi fase e qualsiasi ampiezza all'interno del sottospazio (una fase globale o una normalizzazione sono fisicamente irrilevanti), quindi ciò convalida il riferimento senza vincolarlo a uno specifico vettore determinante.
Parametri
- vec (ndarray) – il vettore di stato da convalidare. La sua lunghezza deve corrispondere alla dimensione del settore
(norb, nelec). - 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) – Accettato in quanto conforme al protocollo, ma non ha alcun effetto: questo gate non modifica lo stato, quindi
vecviene restituito così com’è a prescindere. - freg_indices (list[int]) – gli indici delle modalità assolute (globali) a cui si mappano le modalità locali di questo gate.
Risultati
L'input vec, immutato, una volta verificato il suo confinamento nel sottospazio di occupazione.
Aumenti
ValueError – se una modalità occupata ricade al di fuori dell'intervallo implicito da norb; se un gate con spin si estende parzialmente su entrambi i settori di spin (senza fissare un determinante completo); se la lunghezza vecdi non corrisponde alla dimensione del settore (norb, nelec) ; oppure se vec ha un'ampiezza al di fuori del sottospazio definito dall'occupazione.
Tipo di restituzione