Skip to content

Commit ab3aea5

Browse files
port tests over from emmet
1 parent f35867e commit ab3aea5

File tree

8 files changed

+96
-8
lines changed

8 files changed

+96
-8
lines changed

.pre-commit-config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,12 @@ repos:
3535
rev: 25.9.0
3636
hooks:
3737
- id: black
38+
39+
- repo: https://github.com/kynan/nbstripout
40+
rev: 0.8.1
41+
hooks:
42+
- id: nbstripout
43+
args:
44+
- --drop-empty-cells
45+
- --strip-init-cells
46+
- --extra-keys=metadata.kernelspec
Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +0,0 @@
1-
from mpcontribs.lux.projects.esoteric_ephemera.schemas.base import MLTrainDoc
2-
from mpcontribs.lux.projects.esoteric_ephemera.schemas.MatPES_2025_1 import MatPESTrainDoc
3-
from mpcontribs.lux.projects.esoteric_ephemera.schemas.MP_ALOE_2025 import MPAloeTrainDoc
4-
from mpcontribs.lux.projects.esoteric_ephemera.schemas.MPtrj_2022_9 import MPtrjTrainDoc
5-
6-
__all__ = ["MLTrainDoc","MatPESTrainDoc","MPAloeTrainDoc","MPtrjTrainDoc"]

mpcontribs-lux/mpcontribs/lux/projects/esoteric_ephemera/schemas/MatPES_2025_1.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class MatPESTrainDoc(MLTrainDoc):
4545
This schema is used in the data entries for MatPES v2025.1,
4646
which can be downloaded either:
4747
- On [MPContribs](https://materialsproject-contribs.s3.amazonaws.com/index.html#MatPES_2025_1/)
48-
- or on [the site]
48+
- or on [the site](https://matpes.ai)
4949
"""
5050

5151
matpes_id: str | None = Field(None, description="MatPES identifier.")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from mpcontribs.lux.projects.esoteric_ephemera.schemas.base import MLTrainDoc
2+
from mpcontribs.lux.projects.esoteric_ephemera.schemas.MatPES_2025_1 import MatPESTrainDoc
3+
from mpcontribs.lux.projects.esoteric_ephemera.schemas.MP_ALOE_2025 import MPAloeTrainDoc
4+
from mpcontribs.lux.projects.esoteric_ephemera.schemas.MPtrj_2022_9 import MPtrjTrainDoc
5+
6+
__all__ = ["MLTrainDoc","MatPESTrainDoc","MPAloeTrainDoc","MPtrjTrainDoc"]

mpcontribs-lux/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ include-package-data = true
1111

1212
[tool.setuptools.packages.find]
1313
where = ["."]
14-
exclude = ["tests"]
14+
exclude = ["tests","examples","test_data"]
1515
include = ["mpcontribs.lux"]
1616

1717

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:32f19f1d06cadc8b33e995fd093d188484a26fbb70b7993d810e9f72b39dec79
3+
size 12200

mpcontribs-lux/tests/conftest.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""Define common testing fixtures."""
2+
3+
import os
4+
from pathlib import Path
5+
import shutil
6+
import tempfile
7+
8+
import pytest
9+
10+
@pytest.fixture(autouse=True)
11+
def test_dir():
12+
"""Same as clean_dir but is fresh for every test"""
13+
14+
old_cwd = os.getcwd()
15+
new_path = tempfile.mkdtemp()
16+
os.chdir(new_path)
17+
yield
18+
os.chdir(old_cwd)
19+
shutil.rmtree(new_path)
20+
21+
@pytest.fixture(scope="session")
22+
def test_data_dir() -> Path:
23+
return (Path(__file__) / ".." / ".." / "test_data").resolve()
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
"""Test schemas for user esoteric_ephemera."""
2+
3+
import gzip
4+
import json
5+
from pathlib import Path
6+
7+
import numpy as np
8+
import pytest
9+
10+
from emmet.core.math import matrix_3x3_to_voigt
11+
from emmet.core.tasks import TaskDoc
12+
13+
@pytest.fixture(scope="module")
14+
def task_doc(test_data_dir) -> TaskDoc:
15+
with gzip.open(test_data_dir / "by_user" / "esoteric_ephemera" / "r2scan_task.json.gz","rt") as f:
16+
return TaskDoc(**json.load(f))
17+
18+
def test_matpes_doc_from_task_doc(test_dir, task_doc):
19+
20+
from mpcontribs.lux.projects.esoteric_ephemera.schemas import MatPESTrainDoc
21+
22+
matpes_train_docs = MatPESTrainDoc.from_task_doc(task_doc)
23+
24+
assert len(matpes_train_docs) == sum(
25+
len(cr.output.ionic_steps) for cr in task_doc.calcs_reversed
26+
)
27+
28+
ctr = 0
29+
for cr in task_doc.calcs_reversed[::-1]:
30+
for iistep, istep in enumerate(cr.output.ionic_steps):
31+
assert matpes_train_docs[ctr].energy == pytest.approx(istep.e_0_energy)
32+
assert np.allclose(matpes_train_docs[ctr].forces, istep.forces)
33+
34+
assert np.allclose(
35+
matpes_train_docs[ctr].stress, matrix_3x3_to_voigt(istep.stress)
36+
)
37+
38+
if iistep < len(cr.output.ionic_steps) - 1:
39+
assert matpes_train_docs[ctr].bandgap is None
40+
assert (
41+
matpes_train_docs[ctr].structure.site_properties.get("magmom")
42+
is None
43+
)
44+
else:
45+
assert matpes_train_docs[ctr].bandgap == pytest.approx(
46+
cr.output.bandgap
47+
)
48+
assert np.allclose(
49+
matpes_train_docs[ctr].structure.site_properties.get("magmom"),
50+
cr.output.structure.site_properties.get("magmom"),
51+
)
52+
53+
ctr += 1

0 commit comments

Comments
 (0)