filter_diagonal_terms
filter_diagonal_terms(op)
Élimine les termes d'un opérateur qui sont diagonaux dans la base des nombres d'occupation.
Cette opération supprime tous les termes de l'expression fournie FermionOperator qui sont des produits d'opérateurs numériques ( ). Cela inclut le terme constant (produit de zéro opérateur numérique), les opérateurs numériques simples, ainsi que les produits d'ordre supérieur tels que .
L'une des principales raisons justifiant le filtrage de ces termes apparaît dans le cadre de l'évolution temporelle des opérateurs, où ces termes diagonaux n'influencent pas l'évolution temporelle, si ce n'est en introduisant une phase globale. Par conséquent, les chaînes de bits échantillonnées à partir d'un état ayant évolué dans le temps ne sont pas affectées. Il est donc recommandé de les supprimer, par exemple lors de la préparation d’un hamiltonien de structure électronique pour l’évolution temporelle de l’ qDRIFT, telle qu’utilisée par SqDRIFT,, car cela permet d’éviter une surcharge d’échantillonnage qui serait sinon inutile.
L'opérateur fourni doit respecter l'ordre normal! Il s'agit d'une hypothèse sous-jacente de la mise en œuvre qui n'est pas vérifiée. Voir normal_ordered() pour savoir comment obtenir un opérateur de cette forme.
L'opérateur est modifié directement. S'il suit des indices de groupe (voir groups), les termes restants conservent leur regroupement relatif, mais les indices de groupe sont réattribués à une plage contiguë commençant à 0. Vous ne devez donc pas partir du principe que l'index de groupe spécifique d'un terme quelconque sera conservé lors d'un appel à cette fonction.
>>> 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))]
Paramètres
op – l'opérateur à ordre normal dont il faut filtrer les termes diagonaux.