Skip to content

Commit 7601ed2

Browse files
Improve reliability and tests for map_particle_hole_dm_to_one_pdm (#1241)
This change addresses a potential ZeroDivisionError in `map_particle_hole_dm_to_one_pdm` by raising a `ValueError` when the denominator is zero. It also adds a unit test to verify this behavior and ensure edge cases are handled correctly. --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 6338095 commit 7601ed2

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

src/openfermion/utils/rdm_mapping_functions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,6 @@ def map_particle_hole_dm_to_one_pdm(phdm, num_particles, num_basis_functions):
202202
Returns:
203203
opdm (numpy.ndarray): the 1-RDM transformed from a 1-RDM.
204204
"""
205+
if num_particles > num_basis_functions:
206+
raise ValueError('Number of particles cannot exceed number of basis functions.')
205207
return numpy.einsum('prrq', phdm) / (num_basis_functions - num_particles + 1)

src/openfermion/utils/rdm_mapping_functions_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,14 @@ def test_phdm_conversions_h2_631g(self):
171171
test_tpdm = map_particle_hole_dm_to_two_pdm(true_phdm, molecule.fci_one_rdm)
172172
assert numpy.allclose(test_tpdm, molecule.fci_two_rdm)
173173

174+
def test_map_particle_hole_dm_to_one_pdm_edge_cases(self):
175+
# Trigger division by zero
176+
phdm = numpy.zeros((2, 2, 2, 2))
177+
num_particles = 3
178+
num_basis_functions = 2
179+
with self.assertRaises(ValueError):
180+
map_particle_hole_dm_to_one_pdm(phdm, num_particles, num_basis_functions)
181+
174182
def test_phdm_conversions_h2_sto3g(self):
175183
filename = "H2_sto-3g_singlet_1.4.hdf5"
176184
molecule = MolecularData(filename=os.path.join(DATA_DIRECTORY, filename))

0 commit comments

Comments
 (0)