UCJ
class UCJ(ucj_op)
Basen: FermionicGate
Implementiert den (lokalen) unitaren Cluster-Jastrow-Ansatz ((L)UCJ).
Ein unitärer Jastrow-Operator eines Clusters hat die Form
wobei jedes ein ist OrbitalRotationund jedes ein diagonaler Coulomb-Operator ist
und ist eine optionale abschließende Drehung um die Umlaufbahn. Die Anzahl der Terme entspricht der Anzahl der Ansatzwiederholungen.
Der Operator selbst wird von ffsim erstellt, und dieses Gatter wandelt ihn in ein FermionicCircuit. um. Diese Arbeitsteilung ist bewusst gewählt: ffsim ist für die mathematischen Grundlagen zuständig (doppelte Faktorisierung der „ “-Amplituden, die komprimierte Variante, die Parametervektor-Packung, die von einem Variationsoptimierer gesteuert wird), während dieses Gate das Ergebnis als fermionische Moden ausdrückt, sodass der Transpiler es durch eine beliebige Fermion-zu-Qubit-Kodierung umsetzen kann. Die unveränderte Weitergabe eines ffsim-Operators sorgt dafür, dass beide konsistent bleiben; siehe dazu den Leitfaden zu ffsim-Beziehungen.
Akzeptiert einen der drei UCJ-Operatoren von ffsim, deren Typ die Spinvariante und die Anzahl der Moden festlegt, auf die dieses Gatter wirkt:
UCJOpSpinBalancedwirkt auf2 * norbBlock-Spin-Moden, wobei sich beide Spinsektoren eine Orbitalrotation teilen und die Coulomb-Matrizen diagonal[alpha-alpha, alpha-beta]sind (β-β verwendet α-α wieder, β-α verwendet α-β wieder).UCJOpSpinUnbalancedwirkt auf2 * norbBlock-Spin-Moden mit unabhängigen Rotationen[alpha, beta]und Matrizen[alpha-alpha, alpha-beta, beta-beta].UCJOpSpinlesswirkt auf spinlosenorbModen ein.
ffsim UCJOpSpinless gilt auch für einen Spin-Sektor, in dem seine Tensoren auf beide Spin-Sektoren wirken, ohne dass ein Cross-Spin-Term auftritt. Die Breite eines Gatters muss bei dessen Erstellung festgelegt werden, daher liest dieses Gatter diesen Typ immer als norbSingle-Mode-Register aus. Bauen Sie die Zwei-Register-Leseoperation als einen Operator auf, dessen UCJOpSpinBalanced Alpha-Beta-Block Null ist; dies ist derselbe Operator.
ffsim unterstützt Windows nicht (aufgrund seiner bedingungslosen Abhängigkeit von „ PySCF “), daher erfordert dieses Gate das zusätzliche ffsim „(pip install "qiskit-fermions[ffsim]")“ und ist dort nicht verfügbar. Verwenden Sie WSL unter Windows.
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.
>>> import ffsim
>>> from qiskit_fermions.circuit.library import UCJ
>>> ucj_op = ffsim.random.random_ucj_op_spin_balanced(3, n_reps=1, seed=1234)
>>> gate = UCJ(ucj_op)
>>> gate.norb, gate.num_modes, gate.n_reps
(3, 6, 1)
Die Initialisierung einer Instanz dieses Gatters kann mit dem unten aufgeführten Argument erfolgen.
Parameter
ucj_op (Any) – den ffsim-UCJ-Operator, aus dem die Schaltung aufgebaut werden soll: entweder UCJOpSpinBalanced, oder UCJOpSpinUnbalanced UCJOpSpinless. Sein Typ bestimmt die Spin-Variante und die Anzahl der Moden, auf die dieses Gatter wirkt (siehe die Docstring der Klasse).
Erhöhungen
- MissingOptionalLibraryError – falls nicht installiert
ffsimist. - TypeError – wenn nicht zu den drei UCJ-Operatortypen von ffsim gehört
ucj_op.
Attribute
n_reps
Die Anzahl der Wiederholungen des Ansatzes.
norb
Die Anzahl der Raumorbitale.
ucj_op
Der ffsim-UCJ-Operator, auf dem die Schaltung dieses Gatters basiert.
Protokollmethoden
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Wendet den Ansatz an, nachdem dessen Moden auf die globalen Moden des Vektors abgebildet wurden.
Dadurch wird die Definition des Gatters erstellt (die Orbitalrotationen pro Wiederholung und die diagonalen Coulomb-Entwicklungen) und auf angewendet vec, wobei die Definitionsschaltung auf die globalen Moden gelegt wird ( freg_indices jede ihrer Anweisungen wird auf die entsprechenden absoluten Moden umbenannt). Die genaue Gate-Sequenz finden Sie _define() unter.
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 spinfreies System oder ein Ganzzahlpaar, das die Anzahlen der Alpha- und Beta-Spin-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 Gitters abgebildet werden.
Rückgabe
Der transformierte Vektor.
Rückgabetyp