Skip to main content
IBM Quantum Platform

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 definito occupation e 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.

Attenzione

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 è un int): le modalità norb sono direttamente orbitali; la verifica avviene nello spazio a C(norb, nelec)-dimensioni.
  • Spinful (nelec è una coppia): secondo la convenzione "block-spin", le modalità 0..norb sono orbitali alfa e le modalità norb..2*norb sono 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 norb modalità sono orbitali); una coppia indica l'interpretazione delle modalità 2 * norb con 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 vec viene 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

ndarray

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.