Skip to content

Commit

Permalink
add tests for Mesh and NumericalIntegration
Browse files Browse the repository at this point in the history
  • Loading branch information
EBB2675 committed Nov 20, 2024
1 parent e8fb5ef commit 4826f0c
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 7 deletions.
9 changes: 6 additions & 3 deletions src/nomad_simulations/schema_packages/basis_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,11 +247,14 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
if self.n_primitive is not None:
if self.exponents is not None and len(self.exponents) != self.n_primitive:
raise ValueError(
f"Mismatch in number of exponents: expected {self.n_primitive}, found {len(self.exponents)}."
f'Mismatch in number of exponents: expected {self.n_primitive}, found {len(self.exponents)}.'
)
if self.contraction_coefficients is not None and len(self.contraction_coefficients) != self.n_primitive:
if (
self.contraction_coefficients is not None
and len(self.contraction_coefficients) != self.n_primitive
):
raise ValueError(
f"Mismatch in number of contraction coefficients: expected {self.n_primitive}, found {len(self.contraction_coefficients)}."
f'Mismatch in number of contraction coefficients: expected {self.n_primitive}, found {len(self.contraction_coefficients)}.'
)


Expand Down
6 changes: 6 additions & 0 deletions src/nomad_simulations/schema_packages/numerical_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,12 @@ class NumericalIntegration(NumericalSettings):

def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
super().normalize(archive, logger)
valid_coordinates = ['full', 'radial', 'angular', None]
if self.coordinate not in valid_coordinates:
logger.warning(
f'Invalid coordinate value: {self.coordinate}. Resetting to None.'
)
self.coordinate = None


class KSpaceFunctionalities:
Expand Down
6 changes: 2 additions & 4 deletions tests/test_basis_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,7 @@ def test_atom_centered_basis_set_normalize() -> None:
# Add checks for normalized behavior, if any
assert bs.basis_set == 'cc-pVTZ'


def test_atom_centered_basis_set_invalid_data() -> None:
"""Test behavior with missing or invalid data."""
bs = AtomCenteredBasisSet(
Expand All @@ -522,8 +523,5 @@ def test_atom_centered_basis_set_invalid_data() -> None:
bs.functional_composition = [invalid_function]

# Call normalize to trigger validation
with pytest.raises(ValueError, match="Mismatch in number of exponents"):
with pytest.raises(ValueError, match='Mismatch in number of exponents'):
invalid_function.normalize(None, logger)



81 changes: 81 additions & 0 deletions tests/test_numerical_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
KLinePath,
KMesh,
KSpaceFunctionalities,
Mesh,
NumericalIntegration,
)

from . import logger
Expand Down Expand Up @@ -377,3 +379,82 @@ def test_resolve_points(self, k_line_path: KLinePath):
]
)
assert np.allclose(k_line_path.points, points)


@pytest.mark.parametrize(
'dimensionality, expected_warning',
[
(3, None), # Valid case
(2, None), # Valid case
(
5,
'`dimensionality` meshes different than 1, 2, or 3 are not supported.',
), # Invalid
(
0,
'`dimensionality` meshes different than 1, 2, or 3 are not supported.',
), # Invalid
],
)
def test_mesh_dimensionality_validation(dimensionality, expected_warning, caplog):
mesh = Mesh(dimensionality=dimensionality)
mesh.normalize(None, logger)
if expected_warning:
assert expected_warning in caplog.text
else:
assert caplog.text == ''


@pytest.mark.parametrize(
'dimensionality, grid, points',
[
(3, [10, 10, 10], None), # Valid grid, no points defined yet
(3, None, None), # Missing grid and points
(
3,
[10, 10, 10],
[[0, 0, 0], [1, 1, 1]],
), # Valid points (though fewer than grid suggests)
],
)
def test_mesh_grid_and_points(dimensionality, grid, points):
mesh = Mesh(dimensionality=dimensionality, grid=grid, points=points)
assert mesh.dimensionality == dimensionality
if grid is not None:
assert np.allclose(mesh.grid, grid)
else:
assert mesh.grid == grid
if points is not None:
assert np.allclose(mesh.points, points)
else:
assert mesh.points == points


def test_mesh_spacing_normalization():
mesh = Mesh(dimensionality=3, grid=[10, 10, 10], spacing=[0.1, 0.1, 0.1])
mesh.normalize(None, logger)
assert np.allclose(mesh.spacing, [0.1, 0.1, 0.1])


def test_numerical_integration_mesh():
mesh = Mesh(dimensionality=3, grid=[10, 10, 10])
integration = NumericalIntegration(mesh=mesh)
assert integration.mesh.dimensionality == 3
assert np.allclose(integration.mesh.grid, [10, 10, 10])


@pytest.mark.parametrize(
'integration_thresh, weight_cutoff',
[
(1e-6, 1e-3), # Valid thresholds
(None, 1e-3), # Missing integration threshold
(1e-6, None), # Missing weight cutoff
(None, None), # Both thresholds missing
],
)
def test_numerical_integration_thresholds(integration_thresh, weight_cutoff):
integration = NumericalIntegration(
integration_thresh=integration_thresh, weight_cutoff=weight_cutoff
)
assert integration.integration_thresh == integration_thresh
assert integration.weight_cutoff == weight_cutoff

1 comment on commit 4826f0c

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
src/nomad_simulations
   __init__.py4250%3–4
   _version.py11282%5–6
src/nomad_simulations/schema_packages
   __init__.py15287%39–41
   atoms_state.py1902189%13–15, 201–204, 228, 283–284, 352–353, 355, 537, 549–550, 611–615, 630–634, 641
   basis_set.py2552989%8–9, 122–133, 172–185, 252–256, 484–488, 510–511, 555–558, 677, 708, 710
   general.py89891%4–7, 121, 185, 295–296, 306
   model_method.py2737971%10–12, 171–174, 177–184, 276–277, 297, 318–339, 355–381, 384–401, 587, 780, 791, 833–840, 878, 897, 977, 1034, 1109, 1223, 1236
   model_system.py3483789%45–51, 235, 254, 258, 261, 264, 290, 376–377, 454–455, 472–473, 686–689, 736–743, 917–918, 1140–1144, 1150–1151, 1159–1160, 1165, 1188
   numerical_settings.py2786776%12–14, 204–210, 280, 282–283, 286–289, 293–294, 301–304, 313–316, 320–323, 325–328, 333–336, 342–345, 532–559, 634, 669–672, 696, 699, 744, 746–749, 753, 757, 804, 808–829, 884–885, 952, 974
   outputs.py1201092%9–10, 252–255, 295–298, 323, 325, 362, 381
   physical_property.py102793%20–22, 202, 331–333
   variables.py861286%8–10, 98, 121, 145, 167, 189, 211, 233, 256, 276
src/nomad_simulations/schema_packages/properties
   band_gap.py51590%8–10, 135–136
   band_structure.py1232580%9–11, 232–265, 278, 285, 321–322, 325, 372–373, 378
   energies.py42979%7–9, 36, 57, 82, 103, 119, 134
   fermi_surface.py17476%7–9, 40
   forces.py22673%7–9, 36, 56, 79
   greens_function.py991387%7–9, 210–211, 214, 235–236, 239, 260–261, 264, 400
   hopping_matrix.py29583%7–9, 58, 94
   permittivity.py48883%7–9, 97–105
   spectral_profile.py26012851%9–11, 57–60, 95–98, 199–300, 356–368, 393–396, 416, 421–424, 466–502, 526, 573–576, 592–593, 598–604
   thermodynamics.py752764%7–9, 35, 56, 72, 81, 90, 101, 110, 137, 147, 157, 172–174, 177, 193, 213–215, 218, 234, 254–256, 259
src/nomad_simulations/schema_packages/utils
   utils.py791680%8–11, 65–74, 83–84, 89, 92, 169–170
TOTAL262752280% 

Tests Skipped Failures Errors Time
423 0 💤 0 ❌ 0 🔥 6.587s ⏱️

Please sign in to comment.