diff --git a/src/openfermion/linalg/sparse_tools.py b/src/openfermion/linalg/sparse_tools.py index a8baf51ea..e12c6eb14 100644 --- a/src/openfermion/linalg/sparse_tools.py +++ b/src/openfermion/linalg/sparse_tools.py @@ -13,6 +13,7 @@ import itertools from functools import reduce +import warnings import numpy.linalg import numpy @@ -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) diff --git a/src/openfermion/linalg/sparse_tools_test.py b/src/openfermion/linalg/sparse_tools_test.py index b889f5859..98a0fe1a3 100644 --- a/src/openfermion/linalg/sparse_tools_test.py +++ b/src/openfermion/linalg/sparse_tools_test.py @@ -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):