Skip to content

Commit 0ed8215

Browse files
authored
Fix #929 Raise error for non-physical terms (#1086)
Raise ValueError for issue [929](#929) when terms are unexpected because only one- and two-body operators are present in molecular Hamiltonian (See Eq. (4) - (7) in https://www.nature.com/articles/ncomms5213)
1 parent e4395e1 commit 0ed8215

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

src/openfermion/measurements/equality_constraint_projection.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ def linearize_term(term, n_orbitals):
5151
r = term[2][0]
5252
s = term[3][0]
5353
return 1 + n_orbitals**2 + p + q * n_orbitals + r * n_orbitals**2 + s * n_orbitals**3
54+
raise ValueError(
55+
'Expect one-body (2 terms) or two-body (4 terms) operator but got {} terms. '.format(
56+
len(term)
57+
)
58+
)
5459

5560

5661
def unlinearize_term(index, n_orbitals):

src/openfermion/measurements/equality_constraint_projection_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import unittest
1515
import numpy
1616

17+
from openfermion.ops.operators import FermionOperator
1718
from openfermion.chem import MolecularData
1819
from openfermion.config import DATA_DIRECTORY
1920
from openfermion.transforms.opconversions import get_fermion_operator
@@ -59,6 +60,11 @@ def test_linearize_term(self):
5960
self.assertFalse(index in past_terms)
6061
past_terms.add(index)
6162

63+
def test_error_with_non_physical_term(self):
64+
non_physical_operator = FermionOperator((0, 1))
65+
with self.assertRaises(ValueError):
66+
linearize_term(non_physical_operator.terms, self.n_orbitals)
67+
6268
def test_unlinearize_term_consistency(self):
6369
for term, _ in self.fermion_hamiltonian.terms.items():
6470
index = linearize_term(term, self.n_orbitals)

0 commit comments

Comments
 (0)