OrbitalRotation
class OrbitalRotation(rotation_unitary)
Basen: FermionicGate
Führt eine Umlaufdrehung durch.
Für eine unitäre Matrix (rotation_unitary) mit der Form „ “ implementiert dieses Gate den Basiswechsel für ein einzelnes Teilchen, der die Erzeugungsoperatoren wie folgt abbildet:
was der Anwendung der unitaren Vielteilchen-Operation entspricht
Die Anzahl der fermionischen Moden, auf die das Gatter einwirkt, entspricht der Dimension von rotation_unitary.
Die Initialisierung einer Instanz dieses Gatters kann mit den unten aufgeführten Argumenten erfolgen.
Parameter
rotation_unitary (np.ndarray) – die -Unitar-Matrix , die die Orbitalrotation über definiert. Sie muss quadratisch und unitar sein; dies liegt in der Verantwortung des Aufrufers und wird nicht überprüft.
Attribute
rotation_unitary
Die Einheitsmatrix, die die Drehkoeffizienten der Bahnen darstellt.
Methoden
from_t1_amplitudes
classmethod from_t1_amplitudes(t1)
Erzeugt eine Orbitalrotation aus den Amplituden „ “ (Einzelamplituden).
Die Rotation ist die unitäre , wobei die Amplitudenmatrix in den antihermitischen Generator über alle Orbitale eingebettet ist
wobei die besetzten Orbitalen vor den virtuellen aufgeführt werden. Dies ist die Orbitalrotation bei Einzelanregung, die in den (L)UCJ-Ansatz einfließt, wenn dieser aus Amplituden des Coupled-Cluster-Verfahrens initialisiert wird; siehe UCJ.
Parameter
t1 (ndarray) – die Amplituden von „ “ der Form (nocc, nvrt), wobei die Anzahl der besetzten Orbitalen und die Anzahl der virtuellen Orbitalen nvrt ist nocc .
Rückgabe
Eine auf die -Modi wirkende OrbitalRotation , deren ist rotation_unitary .
Rückgabetyp
Protokollmethoden
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Wendet die Orbitalrotation an, nachdem sie auf die globalen Moden des Vektors angewendet wurde.
Die lokale Matrix des Gates ( rotation_unitary eine -Matrix, die auf die Moden num_modes des Gates wirkt) wird zunächst in das vollständige Register eingebettet: eine Identitätsmatrix mit der Anzahl der Moden des Zustandsvektors, wobei in die durch ausgewählten Zeilen bzw. Spalten rotation_unitary eingetragen wird freg_indices.
Im Fall mit Spin muss die eingebettete Matrix über die Alpha/Beta-Aufteilung hinweg blockdiagonal sein. Eine Rotation mit nicht-null-wertigen Alpha-/Beta-Blöcken außerhalb der Diagonalen mischt die Spinsektoren, wodurch die individuellen Alpha-/Beta-Elektronenzahlen nicht erhalten bleiben und somit die Amplitude aus dem festen (n_alpha, n_beta) Sektor herausabgebildet wird – eine Operation, die der Zustandsvektor des festen Sektors nicht darstellen kann. Eine solche Rotation wird mit einem ValueError. abgelehnt.
Die eingebettete Matrix wird dann über den Givens-Rotationskern ffsim.apply_orbital_rotation()von … angewendet. Gemäß der „Spinful“-Block-Spin-Konvention (Modi 0..norb sind Alpha-Orbitale, Modi norb..2*norb sind Beta-Orbitale) sind die beiden Diagonalblöcke die pro Spin berechneten Rotationen, die als an ffsim übergeben werden (mat_a, mat_b).
Parameter
- vec (ndarray) – der Zustandsvektor, auf den die Aktion angewendet werden soll.
- 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 Paar ganzer Zahlen, das die Anzahl der Alpha- und Beta-Fermionen angibt. Eine ganze Zahl wählt die Interpretation der spinlosen Moden (die Moden
norbsind Orbitalen); ein Zahlenpaar wählt die Interpretation der Moden2 * norbals spinbehaftete(orb, spin)Block-Spin-Moden. - copy (bool) – ob der Vektor vor der Bearbeitung kopiert werden soll.
- freg_indices (list[int]) – die absoluten (globalen) Modenindizes, auf die die lokalen Moden dieses Gitters abgebildet werden. Die Drehung wird vor ihrer Anwendung in diese globalen Moden eingebettet.
Rückgabe
Der transformierte Vektor.
Erhöhungen
- MissingOptionalLibraryError – falls ffsim nicht installiert ist.
- ValueError – wenn ein Spinpaar
nelecist und die (eingebrachte) Rotation die Alpha- und Beta-Spinsektoren vermischt.
Rückgabetyp