quantumlib / OpenFermion

The electronic structure package for quantum computers.
Apache License 2.0
1.51k stars 372 forks source link

Bad behavior when working with sympy #885

Open Earendil-WBG opened 2 months ago

Earendil-WBG commented 2 months ago

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