Skip to content
8 changes: 8 additions & 0 deletions src/openfermion/linalg/sparse_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import itertools
from functools import reduce
import warnings
import numpy.linalg
import numpy

Expand Down Expand Up @@ -1270,6 +1271,13 @@ def get_sparse_operator(operator, n_qubits=None, trunc=None, hbar=1.0):
elif isinstance(operator, FermionOperator):
return jordan_wigner_sparse(operator, n_qubits)
elif isinstance(operator, QubitOperator):
if hasattr(operator, "simplify"):
operator.simplify()
else:
warnings.warn(
"QubitOperator.simplify() not found. "
"Ensure your operator is simplified to avoid errors."
)
return qubit_operator_sparse(operator, n_qubits)
elif isinstance(operator, (BosonOperator, QuadOperator)):
return boson_operator_sparse(operator, trunc, hbar)
Expand Down
5 changes: 5 additions & 0 deletions src/openfermion/linalg/sparse_tools_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1841,6 +1841,11 @@ def test_sparse_matrix_linearity(self):
self.assertEqual(list(sparse2.data), [2] * 8)
self.assertEqual(list(sparse2.indices), [0, 3, 5, 6, 9, 10, 12, 15])

def test_get_sparse_operator_simplifies_qubit_operator(self):
op = QubitOperator('X0') + QubitOperator('X0')
sparse = get_sparse_operator(op)
self.assertIsNotNone(sparse)


class GetSparseOperatorFermionTest(unittest.TestCase):
def test_sparse_matrix_zero_n_qubit(self):
Expand Down
Loading