Skip to content

Commit

Permalink
Added check_simulation_cell in utils (#117)
Browse files Browse the repository at this point in the history
* Added equal cell tolerance

* Defining logic in __eq__ methods of Cell and AtomicCell

* Moved testing to test_model_system

Added __ne__ method

* Add todo

* Fix == testing failing

* Added __ne__ testing
  • Loading branch information
JosePizarro3 authored Sep 18, 2024
1 parent 8cf4685 commit 96f4a91
Show file tree
Hide file tree
Showing 5 changed files with 238 additions and 7 deletions.
10 changes: 7 additions & 3 deletions src/nomad_simulations/schema_packages/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,19 @@
class NOMADSimulationsEntryPoint(SchemaPackageEntryPoint):
dos_energy_tolerance: float = Field(
8.01088e-21,
description='Tolerance of the DOS energies in Joules to match the reference of energies in the DOS normalize function.',
description='Tolerance (in joules) of the DOS energies to match the reference of energies in the DOS normalize function.',
)
dos_intensities_threshold: float = Field(
1e-8,
description='Threshold value at which the DOS intensities are considered non-zero.',
description='Threshold value (in joules^-1) at which the DOS intensities are considered non-zero.',
)
occupation_tolerance: float = Field(
1e-3,
description='Tolerance for the occupation of a eigenstate to be non-occupied.',
)
fermi_surface_tolerance: float = Field(
1e-8,
description='Tolerance for energies to be close to the Fermi level and hence define the Fermi surface of a material.',
description='Tolerance (in joules) for energies to be close to the Fermi level and hence define the Fermi surface of a material.',
)
symmetry_tolerance: float = Field(
0.1, description='Tolerance for the symmetry analyzer used from MatID.'
Expand All @@ -48,6 +48,10 @@ class NOMADSimulationsEntryPoint(SchemaPackageEntryPoint):
64,
description='Limite of the number of atoms in the unit cell to be treated for the system type classification from MatID to work. This is done to avoid overhead of the package.',
)
equal_cell_positions_tolerance: float = Field(
1e-12,
description='Tolerance (in meters) for the cell positions to be considered equal.',
)

def load(self):
from nomad_simulations.schema_packages.general import m_package
Expand Down
57 changes: 57 additions & 0 deletions src/nomad_simulations/schema_packages/model_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,40 @@ class Cell(GeometricSpace):
""",
)

def _check_positions(self, positions_1, positions_2) -> list:
# Check that all the `positions`` of `cell_1` match with the ones in `cell_2`
check_positions = []
for i1, pos1 in enumerate(positions_1):
for i2, pos2 in enumerate(positions_2):
if np.allclose(
pos1, pos2, atol=configuration.equal_cell_positions_tolerance
):
check_positions.append([i1, i2])
break
return check_positions

def __eq__(self, other) -> bool:
# TODO implement checks on `lattice_vectors` and other quantities to ensure the equality of primitive cells
if not isinstance(other, Cell):
return False

# If the `positions` are empty, return False
if self.positions is None or other.positions is None:
return False

# The `positions` should have the same length (same number of positions)
if len(self.positions) != len(other.positions):
return False
n_positions = len(self.positions)

check_positions = self._check_positions(self.positions, other.positions)
if len(check_positions) != n_positions:
return False
return True

def __ne__(self, other) -> bool:
return not self.__eq__(other)

def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
super().normalize(archive, logger)

Expand Down Expand Up @@ -339,6 +373,29 @@ def __init__(self, m_def: 'Section' = None, m_context: 'Context' = None, **kwarg
# Set the name of the section
self.name = self.m_def.name

def __eq__(self, other) -> bool:
if not isinstance(other, AtomicCell):
return False

# Compare positions using the parent sections's `__eq__` method
if not super().__eq__(other):
return False

# Check that the `chemical_symbol` of the atoms in `cell_1` match with the ones in `cell_2`
check_positions = self._check_positions(self.positions, other.positions)
try:
for atom in check_positions:
element_1 = self.atoms_state[atom[0]].chemical_symbol
element_2 = other.atoms_state[atom[1]].chemical_symbol
if element_1 != element_2:
return False
except Exception:
return False
return True

def __ne__(self, other) -> bool:
return not self.__eq__(other)

def to_ase_atoms(self, logger: 'BoundLogger') -> Optional[ase.Atoms]:
"""
Generates an ASE Atoms object with the most basic information from the parsed `AtomicCell`
Expand Down
7 changes: 7 additions & 0 deletions src/nomad_simulations/schema_packages/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,20 @@
from typing import TYPE_CHECKING

import numpy as np
from nomad.config import config

if TYPE_CHECKING:
from typing import Optional

from nomad.datamodel.data import ArchiveSection
from structlog.stdlib import BoundLogger

from nomad_simulations.schema_packages.model_system import Cell

configuration = config.get_plugin_entry_point(
'nomad_simulations.schema_packages:nomad_simulations_plugin'
)


def get_sibling_section(
section: 'ArchiveSection',
Expand Down
154 changes: 154 additions & 0 deletions tests/test_model_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@
import pytest
from nomad.datamodel import EntryArchive

from nomad_simulations.schema_packages.atoms_state import AtomsState
from nomad_simulations.schema_packages.model_system import (
AtomicCell,
Cell,
ChemicalFormula,
ModelSystem,
Symmetry,
Expand All @@ -32,11 +35,162 @@
from .conftest import generate_atomic_cell


class TestCell:
"""
Test the `Cell` section defined in model_system.py
"""

@pytest.mark.parametrize(
'cell_1, cell_2, result',
[
(Cell(), None, False), # one cell is None
(Cell(), Cell(), False), # both cells are empty
(
Cell(positions=[[1, 0, 0]]),
Cell(),
False,
), # one cell has positions, the other is empty
(
Cell(positions=[[1, 0, 0], [0, 1, 0]]),
Cell(positions=[[1, 0, 0]]),
False,
), # length mismatch
(
Cell(positions=[[1, 0, 0], [0, 1, 0]]),
Cell(positions=[[1, 0, 0], [0, -1, 0]]),
False,
), # different positions
(
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
True,
), # same ordered positions
(
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
Cell(positions=[[1, 0, 0], [0, 0, 1], [0, 1, 0]]),
True,
), # different ordered positions but same cell
],
)
def test_eq_ne(self, cell_1: Cell, cell_2: Cell, result: bool):
"""
Test the `__eq__` and `__ne__` operator functions of `Cell`.
"""
assert (cell_1 == cell_2) == result
assert (cell_1 != cell_2) != result


class TestAtomicCell:
"""
Test the `AtomicCell`, `Cell` and `GeometricSpace` classes defined in model_system.py
"""

@pytest.mark.parametrize(
'cell_1, cell_2, result',
[
(Cell(), None, False), # one cell is None
(Cell(), Cell(), False), # both cells are empty
(
Cell(positions=[[1, 0, 0]]),
Cell(),
False,
), # one cell has positions, the other is empty
(
Cell(positions=[[1, 0, 0], [0, 1, 0]]),
Cell(positions=[[1, 0, 0]]),
False,
), # length mismatch
(
Cell(positions=[[1, 0, 0], [0, 1, 0]]),
Cell(positions=[[1, 0, 0], [0, -1, 0]]),
False,
), # different positions
(
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
True,
), # same ordered positions
(
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
Cell(positions=[[1, 0, 0], [0, 0, 1], [0, 1, 0]]),
True,
), # different ordered positions but same cell
(
AtomicCell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
Cell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
False,
), # one atomic cell and another cell (missing chemical symbols)
(
AtomicCell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
AtomicCell(positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
False,
), # missing chemical symbols
(
AtomicCell(
positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
atoms_state=[
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='O'),
],
),
AtomicCell(
positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
atoms_state=[
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='O'),
],
),
True,
), # same ordered positions and chemical symbols
(
AtomicCell(
positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
atoms_state=[
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='O'),
],
),
AtomicCell(
positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
atoms_state=[
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='Cu'),
AtomsState(chemical_symbol='O'),
],
),
False,
), # same ordered positions but different chemical symbols
(
AtomicCell(
positions=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
atoms_state=[
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='O'),
],
),
AtomicCell(
positions=[[1, 0, 0], [0, 0, 1], [0, 1, 0]],
atoms_state=[
AtomsState(chemical_symbol='H'),
AtomsState(chemical_symbol='O'),
AtomsState(chemical_symbol='H'),
],
),
True,
), # different ordered positions but same chemical symbols
],
)
def test_eq_ne(self, cell_1: Cell, cell_2: Cell, result: bool):
"""
Test the `__eq__` and `__ne__` operator functions of `AtomicCell`.
"""
assert (cell_1 == cell_2) == result
assert (cell_1 != cell_2) != result

@pytest.mark.parametrize(
'chemical_symbols, atomic_numbers, formula, lattice_vectors, positions, periodic_boundary_conditions',
[
Expand Down
17 changes: 13 additions & 4 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,25 @@ def test_get_sibling_section():
parent_section.symmetry.append(sibling_section)
assert get_sibling_section(section, '', logger) is None
assert get_sibling_section(section, 'symmetry', logger) == sibling_section
assert get_sibling_section(sibling_section, 'cell', logger) == section
assert get_sibling_section(sibling_section, 'cell', logger).type == section.type
assert get_sibling_section(section, 'symmetry', logger, index_sibling=2) is None
section2 = AtomicCell(type='primitive')
parent_section.cell.append(section2)
assert (
get_sibling_section(sibling_section, 'cell', logger, index_sibling=0) == section
get_sibling_section(sibling_section, 'cell', logger, index_sibling=0).type
== 'original'
)
assert (
get_sibling_section(sibling_section, 'cell', logger, index_sibling=1)
== section2
get_sibling_section(sibling_section, 'cell', logger, index_sibling=0).type
== section.type
)
assert (
get_sibling_section(sibling_section, 'cell', logger, index_sibling=1).type
== section2.type
)
assert (
get_sibling_section(sibling_section, 'cell', logger, index_sibling=1).type
== 'primitive'
)


Expand Down

5 comments on commit 96f4a91

@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%57–59
   atoms_state.py1902189%31–33, 219–222, 246, 301–302, 370–371, 373, 555, 567–568, 629–633, 648–652, 659
   basis_set.py2402888%8–9, 122–133, 172–185, 208, 391–395, 417–418, 462–465, 584, 615, 617
   general.py89891%22–25, 139, 203, 313–314, 324
   model_method.py2657771%28–30, 189–192, 195–202, 294–295, 315, 336–357, 373–399, 402–419, 773, 784, 826–833, 871, 890, 970, 1027, 1102, 1216
   model_system.py3002392%43–45, 382, 577–580, 627–634, 808–809, 1030–1034, 1040–1041, 1049–1050, 1055, 1078
   numerical_settings.py2596176%30–32, 235, 237–238, 241–244, 248–249, 256–259, 268–271, 275–278, 280–283, 288–291, 297–300, 487–514, 589, 624–627, 651, 654, 699, 701–704, 708, 712, 759, 763–784, 839–840, 907
   outputs.py1201092%27–28, 270–273, 313–316, 341, 343, 380, 399
   physical_property.py102793%38–40, 220, 349–351
   variables.py861286%26–28, 116, 139, 163, 185, 207, 229, 251, 274, 294
src/nomad_simulations/schema_packages/properties
   band_gap.py51590%26–28, 153–154
   band_structure.py1232580%27–29, 250–283, 296, 303, 339–340, 343, 390–391, 396
   energies.py42979%25–27, 54, 75, 100, 121, 137, 152
   fermi_surface.py17476%25–27, 58
   forces.py22673%26–28, 55, 75, 98
   greens_function.py991387%25–27, 228–229, 232, 253–254, 257, 278–279, 282, 418
   hopping_matrix.py29583%25–27, 76, 112
   permittivity.py48883%25–27, 115–123
   spectral_profile.py26012851%27–29, 75–78, 113–116, 217–318, 374–386, 411–414, 434, 439–442, 484–520, 544, 591–594, 610–611, 616–622
   thermodynamics.py752764%25–27, 53, 74, 90, 99, 108, 119, 128, 155, 165, 175, 190–192, 195, 211, 231–233, 236, 252, 272–274, 277
src/nomad_simulations/schema_packages/utils
   utils.py711579%27–32, 86–95, 104–105, 110, 113
TOTAL252949880% 

Tests Skipped Failures Errors Time
401 0 💤 0 ❌ 0 🔥 3.741s ⏱️

@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%57–59
   atoms_state.py1902189%31–33, 219–222, 246, 301–302, 370–371, 373, 555, 567–568, 629–633, 648–652, 659
   basis_set.py2402888%8–9, 122–133, 172–185, 208, 391–395, 417–418, 462–465, 584, 615, 617
   general.py89891%22–25, 139, 203, 313–314, 324
   model_method.py2657771%28–30, 189–192, 195–202, 294–295, 315, 336–357, 373–399, 402–419, 773, 784, 826–833, 871, 890, 970, 1027, 1102, 1216
   model_system.py3002392%43–45, 382, 577–580, 627–634, 808–809, 1030–1034, 1040–1041, 1049–1050, 1055, 1078
   numerical_settings.py2596176%30–32, 235, 237–238, 241–244, 248–249, 256–259, 268–271, 275–278, 280–283, 288–291, 297–300, 487–514, 589, 624–627, 651, 654, 699, 701–704, 708, 712, 759, 763–784, 839–840, 907
   outputs.py1201092%27–28, 270–273, 313–316, 341, 343, 380, 399
   physical_property.py102793%38–40, 220, 349–351
   variables.py861286%26–28, 116, 139, 163, 185, 207, 229, 251, 274, 294
src/nomad_simulations/schema_packages/properties
   band_gap.py51590%26–28, 153–154
   band_structure.py1232580%27–29, 250–283, 296, 303, 339–340, 343, 390–391, 396
   energies.py42979%25–27, 54, 75, 100, 121, 137, 152
   fermi_surface.py17476%25–27, 58
   forces.py22673%26–28, 55, 75, 98
   greens_function.py991387%25–27, 228–229, 232, 253–254, 257, 278–279, 282, 418
   hopping_matrix.py29583%25–27, 76, 112
   permittivity.py48883%25–27, 115–123
   spectral_profile.py26012851%27–29, 75–78, 113–116, 217–318, 374–386, 411–414, 434, 439–442, 484–520, 544, 591–594, 610–611, 616–622
   thermodynamics.py752764%25–27, 53, 74, 90, 99, 108, 119, 128, 155, 165, 175, 190–192, 195, 211, 231–233, 236, 252, 272–274, 277
src/nomad_simulations/schema_packages/utils
   utils.py711579%27–32, 86–95, 104–105, 110, 113
TOTAL252949880% 

Tests Skipped Failures Errors Time
401 0 💤 0 ❌ 0 🔥 3.732s ⏱️

@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%57–59
   atoms_state.py1902189%31–33, 219–222, 246, 301–302, 370–371, 373, 555, 567–568, 629–633, 648–652, 659
   basis_set.py2402888%8–9, 122–133, 172–185, 208, 391–395, 417–418, 462–465, 584, 615, 617
   general.py89891%22–25, 139, 203, 313–314, 324
   model_method.py2657771%28–30, 189–192, 195–202, 294–295, 315, 336–357, 373–399, 402–419, 773, 784, 826–833, 871, 890, 970, 1027, 1102, 1216
   model_system.py3002392%43–45, 382, 577–580, 627–634, 808–809, 1030–1034, 1040–1041, 1049–1050, 1055, 1078
   numerical_settings.py2596176%30–32, 235, 237–238, 241–244, 248–249, 256–259, 268–271, 275–278, 280–283, 288–291, 297–300, 487–514, 589, 624–627, 651, 654, 699, 701–704, 708, 712, 759, 763–784, 839–840, 907
   outputs.py1201092%27–28, 270–273, 313–316, 341, 343, 380, 399
   physical_property.py102793%38–40, 220, 349–351
   variables.py861286%26–28, 116, 139, 163, 185, 207, 229, 251, 274, 294
src/nomad_simulations/schema_packages/properties
   band_gap.py51590%26–28, 153–154
   band_structure.py1232580%27–29, 250–283, 296, 303, 339–340, 343, 390–391, 396
   energies.py42979%25–27, 54, 75, 100, 121, 137, 152
   fermi_surface.py17476%25–27, 58
   forces.py22673%26–28, 55, 75, 98
   greens_function.py991387%25–27, 228–229, 232, 253–254, 257, 278–279, 282, 418
   hopping_matrix.py29583%25–27, 76, 112
   permittivity.py48883%25–27, 115–123
   spectral_profile.py26012851%27–29, 75–78, 113–116, 217–318, 374–386, 411–414, 434, 439–442, 484–520, 544, 591–594, 610–611, 616–622
   thermodynamics.py752764%25–27, 53, 74, 90, 99, 108, 119, 128, 155, 165, 175, 190–192, 195, 211, 231–233, 236, 252, 272–274, 277
src/nomad_simulations/schema_packages/utils
   utils.py711579%27–32, 86–95, 104–105, 110, 113
TOTAL252949880% 

Tests Skipped Failures Errors Time
401 0 💤 0 ❌ 0 🔥 3.703s ⏱️

@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%57–59
   atoms_state.py1902189%31–33, 219–222, 246, 301–302, 370–371, 373, 555, 567–568, 629–633, 648–652, 659
   basis_set.py2402888%8–9, 122–133, 172–185, 208, 391–395, 417–418, 462–465, 584, 615, 617
   general.py89891%22–25, 139, 203, 313–314, 324
   model_method.py2657771%28–30, 189–192, 195–202, 294–295, 315, 336–357, 373–399, 402–419, 773, 784, 826–833, 871, 890, 970, 1027, 1102, 1216
   model_system.py3002392%43–45, 382, 577–580, 627–634, 808–809, 1030–1034, 1040–1041, 1049–1050, 1055, 1078
   numerical_settings.py2596176%30–32, 235, 237–238, 241–244, 248–249, 256–259, 268–271, 275–278, 280–283, 288–291, 297–300, 487–514, 589, 624–627, 651, 654, 699, 701–704, 708, 712, 759, 763–784, 839–840, 907
   outputs.py1201092%27–28, 270–273, 313–316, 341, 343, 380, 399
   physical_property.py102793%38–40, 220, 349–351
   variables.py861286%26–28, 116, 139, 163, 185, 207, 229, 251, 274, 294
src/nomad_simulations/schema_packages/properties
   band_gap.py51590%26–28, 153–154
   band_structure.py1232580%27–29, 250–283, 296, 303, 339–340, 343, 390–391, 396
   energies.py42979%25–27, 54, 75, 100, 121, 137, 152
   fermi_surface.py17476%25–27, 58
   forces.py22673%26–28, 55, 75, 98
   greens_function.py991387%25–27, 228–229, 232, 253–254, 257, 278–279, 282, 418
   hopping_matrix.py29583%25–27, 76, 112
   permittivity.py48883%25–27, 115–123
   spectral_profile.py26012851%27–29, 75–78, 113–116, 217–318, 374–386, 411–414, 434, 439–442, 484–520, 544, 591–594, 610–611, 616–622
   thermodynamics.py752764%25–27, 53, 74, 90, 99, 108, 119, 128, 155, 165, 175, 190–192, 195, 211, 231–233, 236, 252, 272–274, 277
src/nomad_simulations/schema_packages/utils
   utils.py711579%27–32, 86–95, 104–105, 110, 113
TOTAL252949880% 

Tests Skipped Failures Errors Time
401 0 💤 0 ❌ 0 🔥 4.019s ⏱️

@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%57–59
   atoms_state.py1902189%31–33, 219–222, 246, 301–302, 370–371, 373, 555, 567–568, 629–633, 648–652, 659
   basis_set.py2402888%8–9, 122–133, 172–185, 208, 391–395, 417–418, 462–465, 584, 615, 617
   general.py89891%22–25, 139, 203, 313–314, 324
   model_method.py2657771%28–30, 189–192, 195–202, 294–295, 315, 336–357, 373–399, 402–419, 773, 784, 826–833, 871, 890, 970, 1027, 1102, 1216
   model_system.py3002392%43–45, 382, 577–580, 627–634, 808–809, 1030–1034, 1040–1041, 1049–1050, 1055, 1078
   numerical_settings.py2596176%30–32, 235, 237–238, 241–244, 248–249, 256–259, 268–271, 275–278, 280–283, 288–291, 297–300, 487–514, 589, 624–627, 651, 654, 699, 701–704, 708, 712, 759, 763–784, 839–840, 907
   outputs.py1201092%27–28, 270–273, 313–316, 341, 343, 380, 399
   physical_property.py102793%38–40, 220, 349–351
   variables.py861286%26–28, 116, 139, 163, 185, 207, 229, 251, 274, 294
src/nomad_simulations/schema_packages/properties
   band_gap.py51590%26–28, 153–154
   band_structure.py1232580%27–29, 250–283, 296, 303, 339–340, 343, 390–391, 396
   energies.py42979%25–27, 54, 75, 100, 121, 137, 152
   fermi_surface.py17476%25–27, 58
   forces.py22673%26–28, 55, 75, 98
   greens_function.py991387%25–27, 228–229, 232, 253–254, 257, 278–279, 282, 418
   hopping_matrix.py29583%25–27, 76, 112
   permittivity.py48883%25–27, 115–123
   spectral_profile.py26012851%27–29, 75–78, 113–116, 217–318, 374–386, 411–414, 434, 439–442, 484–520, 544, 591–594, 610–611, 616–622
   thermodynamics.py752764%25–27, 53, 74, 90, 99, 108, 119, 128, 155, 165, 175, 190–192, 195, 211, 231–233, 236, 252, 272–274, 277
src/nomad_simulations/schema_packages/utils
   utils.py711579%27–32, 86–95, 104–105, 110, 113
TOTAL252949880% 

Tests Skipped Failures Errors Time
401 0 💤 0 ❌ 0 🔥 5.860s ⏱️

Please sign in to comment.