Skip to main content
IBM Quantum Platform

PrepareSlaterDeterminant

class PrepareSlaterDeterminant(occupation, rotation_unitary)

Basi: FermionicGate

Calcola un determinante di Slater a partire da un’occupazione e da una rotazione orbitale.

Questa porta è costituita da un’operazione di riferimento InitializeModes seguita da un OrbitalRotation: essa dichiara che le modalità su cui agisce iniziano nel determinante definito da e occupation vengono poi ruotate di rotation_unitary. Poiché l'occupazione iniziale è nota, nella transpilazione di questa porta è possibile utilizzare la forma rettangolare givens_decomposition_slater() per ottenere una sintesi con un numero ridotto di porte (vedi GivensDecompositionSlaterDeterminantSynthesis), anziché la decomposizione quadrata completa che un da OrbitalRotation solo richiederebbe.

In base alla convenzione aijUjiaja^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_jOrbitalRotation , la rotazione delle modalità occupate le mappa sulle colonne corrispondenti di rotation_unitary; tali colonne generano lo spazio occupato del determinante di Slater preparato.

Semantica della simulazione

Nella simulazione, questo gate è del tipo “validate-then-rotate” (convalida e poi rotazione), non un generatore di stati: dato un vettore di stato in ingresso, verifica che il vettore sia confinato nel sottospazio definito occupation da (tramite InitializeModes) e poi applica rotation_unitary (tramite OrbitalRotation). Richiede quindi un vettore di stato di riferimento reale, preparato esternamente (ad esempio tramite ffsim.slater_determinant()). Il comportamento del produttore – ovvero l'emissione dei gate che definiscono l'occupazione di riferimento – risiede nel plugin di sintesi, non nel percorso di simulazione.

È proprio l'applicazione (anziché l'omissione) della rotazione a garantire che la fusione di un InitializeModes e di un OrbitalRotation in questo singolo gate lasci inalterato lo stato finale simulato.

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 l’occupazione di riferimento per ciascuna modalità su cui agisce questo gate.
  • rotation_unitary (np.ndarray) – la matrice unitaria n×nn \times n UU che definisce la rotazione orbitale tramite aijUjiaja^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j, dove nn è il numero di modi (len(occupation)). Deve essere quadrata e unitaria; ciò è responsabilità del chiamante e non viene verificato.

Aumenti

ValueError – se non è rotation_unitary una matrice quadrata la cui dimensione corrisponde alla lunghezza di occupation.


Attributi

occupation

L'occupazione di riferimento (un valore booleano per ciascuna modalità) a cui viene applicata la rotazione.

rotation_unitary

La matrice unitaria che rappresenta i coefficienti di rotazione orbitale.

Metodi del protocollo

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

Convalida l'occupazione di riferimento e applica la rotazione, inserendo le modalità in vec.

Delegati alla definizione del gate (_build_definition()): il primo InitializeModes verifica che vec sia limitato al sottospazio occupation definito da e il successivo lo OrbitalRotation ruota. Si vedano quei “gate” per _apply_unitary_placed_ la semantica completa (confinamento del sottospazio e rifiuto delle rotazioni che miscelano gli spin).

Parametri

  • vec (ndarray) – il vettore di stato di riferimento da convalidare e ruotare.
  • 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.
  • 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.

Risultati

Il vettore trasformato.

Tipo di restituzione

ndarray

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