From a1c4faca2ba553d10be1cd6b5db84a520b31856f Mon Sep 17 00:00:00 2001 From: Aniket Singh Yadav Date: Sun, 21 Sep 2025 09:33:17 +0530 Subject: [PATCH 1/5] Fix: Ensure QubitOperator is simplified before sparse conversion --- src/openfermion/linalg/sparse_tools.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openfermion/linalg/sparse_tools.py b/src/openfermion/linalg/sparse_tools.py index 28e5731a2..967e1ce17 100644 --- a/src/openfermion/linalg/sparse_tools.py +++ b/src/openfermion/linalg/sparse_tools.py @@ -1268,6 +1268,7 @@ 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): + operator.simplify() return qubit_operator_sparse(operator, n_qubits) elif isinstance(operator, (BosonOperator, QuadOperator)): return boson_operator_sparse(operator, trunc, hbar) From 298399c3cdc5d47eddc96f6ad12045f2601e738c Mon Sep 17 00:00:00 2001 From: Aniket Singh Yadav Date: Mon, 13 Oct 2025 12:28:17 +0530 Subject: [PATCH 2/5] Fix get_sparse_operator to handle unsimplified QubitOperator --- src/openfermion/linalg/sparse_tools.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/openfermion/linalg/sparse_tools.py b/src/openfermion/linalg/sparse_tools.py index 967e1ce17..5344dbbda 100644 --- a/src/openfermion/linalg/sparse_tools.py +++ b/src/openfermion/linalg/sparse_tools.py @@ -18,6 +18,7 @@ import scipy import scipy.sparse import scipy.sparse.linalg +import warnings from openfermion.ops.operators import FermionOperator, QubitOperator, BosonOperator, QuadOperator from openfermion.ops.representations import DiagonalCoulombHamiltonian, PolynomialTensor @@ -1268,7 +1269,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): - operator.simplify() + 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) From 339821cb64041fc8a87e1b7eeaac8e6c46432fda Mon Sep 17 00:00:00 2001 From: Aniket Singh Yadav Date: Mon, 13 Oct 2025 12:40:17 +0530 Subject: [PATCH 3/5] Fix get_sparse_operator to handle unsimplified QubitOperator --- src/openfermion/linalg/sparse_tools.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openfermion/linalg/sparse_tools.py b/src/openfermion/linalg/sparse_tools.py index 5344dbbda..844aacf1c 100644 --- a/src/openfermion/linalg/sparse_tools.py +++ b/src/openfermion/linalg/sparse_tools.py @@ -12,13 +12,13 @@ """This module provides functions to interface with scipy.sparse.""" import itertools from functools import reduce +import warnings import numpy.linalg import numpy import scipy import scipy.sparse import scipy.sparse.linalg -import warnings from openfermion.ops.operators import FermionOperator, QubitOperator, BosonOperator, QuadOperator from openfermion.ops.representations import DiagonalCoulombHamiltonian, PolynomialTensor @@ -1273,9 +1273,9 @@ def get_sparse_operator(operator, n_qubits=None, trunc=None, hbar=1.0): operator.simplify() else: warnings.warn( - "QubitOperator.simplify() not found. " - "Ensure your operator is simplified to avoid errors." - ) + "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) From 1b848535c72c86111d9a15230c9c1f2e28741ada Mon Sep 17 00:00:00 2001 From: Aniket Singh Yadav Date: Mon, 13 Oct 2025 13:49:22 +0530 Subject: [PATCH 4/5] Fix get_sparse_operator to handle unsimplified QubitOperator --- src/openfermion/linalg/sparse_tools_test.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/openfermion/linalg/sparse_tools_test.py b/src/openfermion/linalg/sparse_tools_test.py index 30a555e20..e632cc8d1 100644 --- a/src/openfermion/linalg/sparse_tools_test.py +++ b/src/openfermion/linalg/sparse_tools_test.py @@ -1829,6 +1829,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): From 551e3e347fd2b2b6f7652f10ebb2e312421124c9 Mon Sep 17 00:00:00 2001 From: mhucka Date: Fri, 13 Mar 2026 20:31:54 +0000 Subject: [PATCH 5/5] Run files through format-incremental --- src/openfermion/linalg/sparse_tools.py | 7 ++++--- src/openfermion/linalg/sparse_tools_test.py | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/openfermion/linalg/sparse_tools.py b/src/openfermion/linalg/sparse_tools.py index 844aacf1c..4f383a551 100644 --- a/src/openfermion/linalg/sparse_tools.py +++ b/src/openfermion/linalg/sparse_tools.py @@ -10,6 +10,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """This module provides functions to interface with scipy.sparse.""" + import itertools from functools import reduce import warnings @@ -119,7 +120,7 @@ def jordan_wigner_sparse(fermion_operator, n_qubits=None): # Extract triplets from sparse_term. sparse_matrix = sparse_matrix.tocoo(copy=False) values_list.append(sparse_matrix.data) - (row, column) = sparse_matrix.nonzero() + row, column = sparse_matrix.nonzero() row_list.append(row) column_list.append(column) @@ -179,7 +180,7 @@ def qubit_operator_sparse(qubit_operator, n_qubits=None): # Extract triplets from sparse_term. sparse_matrix = kronecker_operators(sparse_operators) values_list.append(sparse_matrix.tocoo(copy=False).data) - (column, row) = sparse_matrix.nonzero() + column, row = sparse_matrix.nonzero() column_list.append(column) row_list.append(row) @@ -1230,7 +1231,7 @@ def boson_operator_sparse(operator, trunc, hbar=1.0): # Extract triplets from sparse_term. values_list.append(term_operator.tocoo(copy=False).data) - (row, column) = term_operator.nonzero() + row, column = term_operator.nonzero() column_list.append(column) row_list.append(row) diff --git a/src/openfermion/linalg/sparse_tools_test.py b/src/openfermion/linalg/sparse_tools_test.py index e632cc8d1..4320e20d7 100644 --- a/src/openfermion/linalg/sparse_tools_test.py +++ b/src/openfermion/linalg/sparse_tools_test.py @@ -10,6 +10,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """Tests for sparse_tools.py.""" + import os import unittest