OpenFermion icon indicating copy to clipboard operation
OpenFermion copied to clipboard

Bad behavior when working with sympy

Open Earendil-WBG opened this issue 1 year ago • 0 comments

I found that when using sympy expression as coefficients in FermionOperator, the expression would be transformed automatically into float numbers. For example:

from openfermion.ops import FermionOperator
from sympy import Rational

a = FermionOperator('0^ 0', Rational(1, 2))
a

This gives the output:

1/2 [0^ 0]

But when doing:

a = FermionOperator('0^ 0', Rational(1, 2))
b = FermionOperator('1^ 1', Rational(1, 2))
a + b

Then it outputs:

1/2 [0^ 0] +
0.500000000000000 [1^ 1]

Which is not what I would expect. This is probably due to that, in the SymbolicOperator class' addition method (line 435-436):

            for term in addend.terms:
                self.terms[term] = self.terms.get(term, 0.0) + addend.terms[term]

When term isn't find in self, its coefficient is set to 0.0, which might cause some type conversion for sympy expression. Since it originates in SymbolicOperator , it would probably happen in other operator classes.

Version: 1.6.1

Earendil-WBG avatar Jun 14 '24 21:06 Earendil-WBG