filter_diagonal_terms
filter_diagonal_terms(op)
Filtert die Terme eines Operators heraus, die in der Besetzungszahlbasis diagonal sind.
Dadurch werden alle Terme aus dem angegebenen Ausdruck entfernt, FermionOperator die ein Produkt von Zahlenoperatoren sind ( ). Dazu gehören der Konstantenausdruck (ein Produkt aus null Zahlenoperatoren), einzelne Zahlenoperatoren sowie Produkte höherer Ordnung wie beispielsweise .
Ein wichtiger Grund für das Herausfiltern solcher Terme ergibt sich im Rahmen der Zeitentwicklung von Operatoren, bei der solche Diagonalterme – abgesehen von der Einführung einer globalen Phase – keinen Einfluss auf die Zeitentwicklung haben. Folglich bleiben Bitstrings, die aus einem zeitlich entwickelten Zustand entnommen wurden, davon unberührt. Es wird daher empfohlen, diese zu entfernen, beispielsweise bei der Erstellung eines Hamilton-Operators für die Elektronenstruktur im Rahmen der von SqDRIFT, verwendeten Zeitentwicklung „ qDRIFT “, da dadurch ein ansonsten unnötiger Mehraufwand bei der Abtastung vermieden wird.
Der angegebene Operator muss normal geordnet sein! Dies ist eine der Implementierung zugrunde liegende Annahme, die nicht überprüft wird. Siehe normal_ordered() für eine Anleitung, wie man einen Operator dieser Form erhält.
Der Operator wird an Ort und Stelle geändert. Wenn Gruppenindizes nachverfolgt werden (siehe groups), behalten die verbleibenden Terme ihre relative Gruppierung bei, die Gruppenindizes werden jedoch einem zusammenhängenden Bereich neu zugewiesen, der bei 0 beginnt. Sie dürfen sich daher nicht darauf verlassen, dass der spezifische Gruppenindex eines Terms bei einem Aufruf dieser Funktion erhalten bleibt.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.filtering import filter_diagonal_terms
>>> op = FermionOperator.from_dict(
... {
... (): 1.0, # constant (diagonal)
... ((True, 0), (False, 0)): 2.0, # n_0 (diagonal)
... ((True, 0), (True, 1), (False, 1), (False, 0)): 3.0, # n_0 n_1 (diagonal)
... ((True, 0), (False, 1)): 4.0, # a†_0 a_1 (off-diagonal)
... }
... )
>>> filter_diagonal_terms(op)
>>> list(op.iter_terms())
[([(True, 0), (False, 1)], (4+0j))]
Parameter
op – der normalgeordnete Operator, dessen Diagonalelemente herausgefiltert werden sollen.