diff --git a/src/openfermion/measurements/equality_constraint_projection.py b/src/openfermion/measurements/equality_constraint_projection.py index 2ba9d6e6..184a7ab4 100644 --- a/src/openfermion/measurements/equality_constraint_projection.py +++ b/src/openfermion/measurements/equality_constraint_projection.py @@ -51,6 +51,11 @@ def linearize_term(term, n_orbitals): r = term[2][0] s = term[3][0] return 1 + n_orbitals**2 + p + q * n_orbitals + r * n_orbitals**2 + s * n_orbitals**3 + raise ValueError( + 'Expect one-body (2 terms) or two-body (4 terms) operator but got {} terms. '.format( + len(term) + ) + ) def unlinearize_term(index, n_orbitals): diff --git a/src/openfermion/measurements/equality_constraint_projection_test.py b/src/openfermion/measurements/equality_constraint_projection_test.py index d59f6a9f..f1a64fcb 100644 --- a/src/openfermion/measurements/equality_constraint_projection_test.py +++ b/src/openfermion/measurements/equality_constraint_projection_test.py @@ -14,6 +14,7 @@ import unittest import numpy +from openfermion.ops.operators import FermionOperator from openfermion.chem import MolecularData from openfermion.config import DATA_DIRECTORY from openfermion.transforms.opconversions import get_fermion_operator @@ -59,6 +60,11 @@ def test_linearize_term(self): self.assertFalse(index in past_terms) past_terms.add(index) + def test_error_with_non_physical_term(self): + non_physical_operator = FermionOperator((0, 1)) + with self.assertRaises(ValueError): + linearize_term(non_physical_operator.terms, self.n_orbitals) + def test_unlinearize_term_consistency(self): for term, _ in self.fermion_hamiltonian.terms.items(): index = linearize_term(term, self.n_orbitals)