Skip to main content
IBM Quantum Platform

PrepareSlaterDeterminant

class PrepareSlaterDeterminant(occupation, rotation_unitary)

Basen: FermionicGate

Ermittelt eine Slater-Determinante aus einer Besetzung und einer Orbitalrotation.

Dieses Gatter setzt sich aus einer InitializeModes Referenzbelegung gefolgt von einem zusammen OrbitalRotation: Es legt fest, dass die Moden, auf die es einwirkt, in der durch definierten Determinante beginnen und occupation anschließend um gedreht werden rotation_unitary. Da die anfängliche Belegung bekannt ist, kann bei der Transpilation dieses Gatters die rechteckige Zerlegung für givens_decomposition_slater() eine Synthese mit reduzierter Gatteranzahl (siehe GivensDecompositionSlaterDeterminantSynthesis) verwendet werden, anstatt der vollständigen quadratischen Zerlegung, die ein OrbitalRotation allein erfordern würde.

Gemäß der Konvention OrbitalRotation ai†↦∑jUjiaj†a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j werden die besetzten Moden durch Rotation auf die entsprechenden Spalten von abgebildet rotation_unitary; diese Spalten spannen den besetzten Raum des vorbereiteten Slater-Determinanten ab.

Simulationssemantik

In der Simulation handelt es sich bei diesem Gatter um ein „Validate-then-Rotate“-Gatter und nicht um einen Zustandsgenerator: Bei einem eingehenden Zustandsvektor wird geprüft, ob der Vektor auf den durch definierten occupation Unterraum beschränkt ist (über InitializeModes), und anschließend wird angewendet ( rotation_unitary über OrbitalRotation). Daher ist ein realer Referenzzustandsvektor erforderlich, der extern bereitgestellt wird (z. B. über ffsim.slater_determinant()). Das Verhalten des Generators – das Ausgeben der Gates, die die Referenzbelegung festlegen – ist im Synthese-Plugin implementiert, nicht im Simulationspfad.

Das Anwenden (anstatt das Weglassen) der Rotation gewährleistet, dass das Zusammenführen eines InitializeModes und eines zu OrbitalRotation diesem einzelnen Gatter den simulierten Endzustand unverändert lässt.

Vorsicht

Dies ist ein früher Entwicklungsprototyp. Bitte beachten Sie, dass es während der Vorab-Entwicklungsphase 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 Referenzzustand für jeden Modus angibt, auf den dieses Gatter einwirkt.
  • rotation_unitary (np.ndarray) – Die unitäre Matrix „ n×nn \times n “ UU definiert die Orbitalrotation über ai†↦∑jUjiaj†a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j, wobei nn die Anzahl der Moden (len(occupation)) ist. Sie muss quadratisch und unitär sein; dies liegt in der Verantwortung des Aufrufers und wird nicht überprüft.

Erhöhungen

ValueError – wenn keine quadratische Matrix ist rotation_unitary , deren Dimension mit der Länge von übereinstimmt occupation.


Attribute

occupation

Der Referenzberuf (ein boolescher Wert pro Modus), auf den die Drehung angewendet wird.

rotation_unitary

Die Einheitsmatrix, die die Drehkoeffizienten der Bahnen darstellt.

Protokollmethoden

_apply_unitary_placed_

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

Überprüft den Referenzberuf und wendet die Rotation an, wobei die Modi auf platziert werden vec.

Abbilder auf die Definition des Tors (_build_definition()): Das vorangestellte InitializeModes stellt sicher, dass auf den von definierten occupation Unterraum beschränkt vec ist, und das nachfolgende dreht OrbitalRotation diesen. Siehe diese Gatter für _apply_unitary_placed_ die vollständige Semantik (Unterraum-Einschränkung und die Ablehnung von Spin-Mischungsrotationen).

Parameter

  • vec (ndarray) – der Referenzzustandsvektor, der validiert und gedreht 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.
  • 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 Gatters abgebildet werden.

Rückgabe

Der transformierte Vektor.

Rückgabetyp

ndarray

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.