filter_diagonal_terms
filter_diagonal_terms(op)
Filtra os termos de um operador que são diagonais na base de números de ocupação.
Isso remove todos os termos da expressão fornecida FermionOperator que sejam um produto de operadores numéricos ( ). Isso inclui o termo constante (um produto de zero operadores numéricos), operadores numéricos isolados, bem como produtos de ordem superior, como .
Uma das principais razões para filtrar esses termos surge durante a evolução temporal dos operadores, na qual esses termos diagonais não afetam a evolução temporal, a não ser pela introdução de uma fase global. Consequentemente, as sequências de bits amostradas a partir de um estado que sofreu evolução temporal permanecem inalteradas. Recomenda-se, portanto, removê-los, por exemplo, ao preparar um hamiltoniano de estrutura eletrônica para a evolução temporal do tipo “ qDRIFT ” () utilizada por SqDRIFT,, pois isso evita uma sobrecarga de amostragem que, de outra forma, seria desnecessária.
O operador fornecido deve seguir a ordem normal! Essa é uma suposição subjacente à implementação que não está sendo verificada. Veja normal_ordered() como obter um operador dessa forma.
O operador é modificado no próprio local. Se ele rastrear índices de grupo (ver groups), os termos remanescentes mantêm seu agrupamento relativo, mas os índices de grupo são reatribuídos a um intervalo contíguo a partir de 0. Portanto, você não deve contar com a preservação do índice de grupo específico de qualquer termo ao chamar essa função.
>>> 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))]
Parâmetros
op – o operador de ordem normal cujos termos diagonais devem ser filtrados.