InitializeModes
class InitializeModes(occupation)
Basen: FermionicGate
Berechnet (oder bestätigt im Simulationsfall) die Besetzung eines fermionischen Modus.
Dieses Gatter gibt die beabsichtigte Belegung der Modi an, auf denen es platziert ist. Sein Verhalten hängt davon ab, wie die Schaltung genutzt wird:
- Transpiliert (zu Qubit-Gates synthetisiert): Es erzeugt den Zustand – das Synthese-Plugin gibt die Gates aus, die die benannten Moden auf ihre Belegung setzen, wie man es von einem Initialisierungs-Gate erwarten würde.
- Simuliert (
_apply_unitary_()): Es fungiert eher als Validator denn als Produzent. Anhand eines Zustandsvektors prüft sie, ob die Amplitude des Vektors auf den von ihmoccupationdefinierten Unterraum beschränkt ist, und gibt den Vektor unverändert zurück. Damit bestätigt sie – ohne ihn zu verändern –, dass der eingehende Zustand der beabsichtigte Referenzzustand ist, sodass die nachfolgenden Transformationen auf ihn angewendet werden können.
In beiden Modi beschränkt das Gate nur die Orbitalen, deren Belegungsbezeichnungen angegeben sind (und pro Spinsektor nur entlang der Achse dieses Sektors), sodass mehrere InitializeModes Gates parallel angeordnet werden können, um voneinander getrennte Fragmente eines Zustands unabhängig voneinander zu initialisieren – z. B. ein Gate pro Spinsektor oder eines pro Orbitalgruppe. Ein „Spinful“-Gate kann einen einzelnen Sektor (oder einen beliebigen Teil davon) abdecken oder beide Sektoren vollständig spezifizieren, eine teilweise Überlappung beider Sektoren wird jedoch abgelehnt (siehe _apply_unitary_placed_()).
Verwenden Sie from_hartree_fock() zur Konstruktion der Besetzung einer Hartree-Fock-Referenz.
Dies ist ein früher Entwicklungsprototyp. Bitte beachten Sie, dass es während der Entwicklungsphase vor der Veröffentlichung dieses Pakets ohne Vorankündigung zu Änderungen an der Benutzeroberfläche kommen kann.
Die Initialisierung einer Instanz dieses Gatters kann mit den unten aufgeführten Argumenten erfolgen.
Parameter
occupation (Sequence[bool]) – eine Folge von Booleschen Werten, die den Zustand für jeden Modus in dem durch dieses Gatter FermionicRegister initialisierten System angeben.
Attribute
occupation
Die Folge von Booleschen Werten, die den Belegungsstatus für jeden Modus in dem durch dieses Gatter FermionicRegister initialisierten System angibt.
Methoden
from_hartree_fock
classmethod from_hartree_fock(norb, nelec)
Erstellt das Gate für die Hartree-Fock-Referenzbesetzung von (norb, nelec).
Die Hartree-Fock-Determinante füllt die Orbitalen mit den niedrigsten Indizes jedes Spin-Sektors aus. Ob es sich um eine spinlose oder eine spinbehaftete Referenz handelt, lässt sich daraus ableiten, dass ( nelec ein die spinlose Interpretation der norb Modi int auswählt; ein (n_alpha, n_beta) Paar wählt die spinbehaftete Block-Spin-Interpretation der Modi 2 * norb aus). Setzen Sie das zurückgegebene Gate auf das entsprechende Register, um einen Hartree-Fock-Referenzzustand zu zertifizieren.
Parameter
- norb (int) – die Anzahl der Raumorbitale.
- nelec (int |tuple[int, int]) – entweder eine einzelne ganze Zahl für ein spinloses System oder ein Paar ganzer Zahlen, das die Anzahl der Alpha- und Beta-Fermionen angibt.
Rückgabe
Ein InitializeModes Gate, dessen Belegung der Hartree-Fock-Determinante entspricht.
Erhöhungen
ValueError – wenn die Elektronenzahl die Anzahl der in einem Sektor verfügbaren Orbitalen norb übersteigt.
Rückgabetyp
Protokollmethoden
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Stellt sicher, dass auf den Belegungsunterraum dieses Gatters beschränkt vec bleibt und unverändert zurückgegeben wird.
Im Gegensatz zu einem Transformationsgatter verändert dieses Gatter den Zustand nicht: Es prüft, ob die Amplitude vecvon vollständig in dem von occupation definierten Unterraum liegt, und gibt in diesem Fall vec unverändert zurück. Der Unterraum ist die Menge der Determinanten, deren Belegung mit diesem Tor auf den darin benannten Orbitalen übereinstimmt, wobei jedes nicht benannte Orbital frei bleibt – eine Teilbelegung (ein Fragment eines Sektors) umfasst also eine ganze Familie von Determinanten, und die Prüfung lässt sich mit anderen parallelen InitializeModes Toren kombinieren.
Der lokale Modus des Gatters ( occupation ein Flag pro lokalem Modus) wird über in das globale Register geschrieben freg_indices: Der lokale Modus schränkt i den globalen Modus ein freg_indices[i]. Die globalen Moden werden dann gemäß der folgenden Konvention (norb, nelec) interpretiert:
- Spinlos (
nelecist einint): DienorbModen sind direkt Orbitalen; die Überprüfung erfolgt über denC(norb, nelec)-dimensionalen Raum. - Spinful (
nelecist ein Paar): Nach der Block-Spin-Konvention0..norbsindnorb..2*norbdie Moden Alpha-Orbitale und die Moden Beta-Orbitale. Ein Gatter, das einen einzelnen Sektor berührt, schränkt die(dim_a, dim_b)Zustandsachse dieses Sektors ein (eine Menge vollständiger Zeilen bei einem Alpha-Gatter bzw. vollständiger Spalten bei einem Beta-Gatter) und lässt die andere Achse frei, sodass es sich mit parallelen Gattern auf dem anderen Sektor kombinieren lässt. Ein Gate kann auch beide Sektoren abdecken, jedoch nur, wenn es einen vollständigen Determinanten festlegt (alle Orbitalen beider Sektoren sind benannt, keines bleibt frei); eine teilweise Überlappung – bei der einige Orbitalen beider Sektoren festgelegt werden, während andere frei bleiben – wird abgelehnt, da es sich nicht um ein Produkt von achsbezogenen Unterräumen handelt und keine Zusammensetzung möglich ist (verwenden Sie stattdessen ein Gate pro Sektor).
Die Überprüfung bezieht sich auf die Einschränkung, nicht auf die Gleichheit: Eine eingehende Amplitude kann innerhalb des Unterraums jede beliebige Phase und jede beliebige Größe annehmen (eine globale Phase oder Normierung ist physikalisch irrelevant), wodurch die Referenz validiert wird, ohne sie an einen bestimmten Determinantenvektor zu binden.
Parameter
- vec (ndarray) – der zu validierende Zustandsvektor. Seine Länge muss mit der
(norb, nelec)Sektordimension übereinstimmen. - norb (int) – die Anzahl der räumlichen Orbitalen des globalen Zustandsvektors.
- nelec (int |tuple[int, int]) – entweder eine einzelne ganze Zahl für ein spinloses System oder ein Ganzzahlpaar, das die Anzahl der Alpha- und Beta-Fermionen angibt. Eine ganze Zahl wählt die Interpretation als spinlose Moden (die Moden
norbsind Orbitalen); ein Zahlenpaar wählt die Interpretation der Moden2 * norbals spinbehaftete(orb, spin)Block-Spin-Moden. - copy (bool) – Wird aufgrund der Protokollkonformität akzeptiert, hat jedoch keine Auswirkung – dieses Gatter verändert den Zustand nicht, sodass ohnehin unverändert zurückgegeben
vecwird. - freg_indices (list[int]) – die absoluten (globalen) Modenindizes, auf die die lokalen Moden dieses Gitters abgebildet werden.
Rückgabe
Die Eingabe bleibt unverändert vec, sobald überprüft wurde, dass sie auf den Besetzungsunterraum beschränkt ist.
Erhöhungen
ValueError – wenn ein besetzter Modus außerhalb des durch implizierten Bereichs liegt norb; wenn ein Spin-Gate teilweise beide Spinsektoren überspannt (ohne einen vollständigen Determinantenwert festzulegen); wenn die Länge vecvon nicht mit der (norb, nelec) Sektordimension übereinstimmt; oder wenn eine Amplitude außerhalb des durch die Besetzung definierten Unterraums vec aufweist.
Rückgabetyp