Skip to content

Commit 792c389

Browse files
add oxy evo tests
1 parent a8210aa commit 792c389

7 files changed

Lines changed: 48 additions & 53 deletions

File tree

mp_api/client/core/utils.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import orjson
77
from emmet.core import __version__ as _EMMET_CORE_VER
8+
from emmet.core.mpid_ext import validate_identifier
89
from monty.json import MontyDecoder
910
from packaging.version import parse as parse_version
1011

@@ -35,13 +36,6 @@ def _compare_emmet_ver(
3536
f"__{op_to_op.get(op,op)}__",
3637
)(parse_version(ref_version))
3738

38-
39-
if _compare_emmet_ver("0.85.0", ">="):
40-
from emmet.core.mpid_ext import validate_identifier
41-
else:
42-
validate_identifier = None
43-
44-
4539
def load_json(json_like: str | bytes, deser: bool = False, encoding: str = "utf-8"):
4640
"""Utility to load json in consistent manner."""
4741
data = orjson.loads(

mp_api/client/mprester.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from emmet.core.mpid import MPID, AlphaID
1212
from emmet.core.settings import EmmetSettings
1313
from emmet.core.tasks import TaskDoc
14+
from emmet.core.types.enums import ThermoType
1415
from emmet.core.vasp.calc_types import CalcType
1516
from packaging import version
1617
from pymatgen.analysis.phase_diagram import PhaseDiagram
@@ -25,7 +26,7 @@
2526
from mp_api.client.core import BaseRester, MPRestError
2627
from mp_api.client.core._oxygen_evolution import OxygenEvolution
2728
from mp_api.client.core.settings import MAPIClientSettings
28-
from mp_api.client.core.utils import _compare_emmet_ver, load_json, validate_ids
29+
from mp_api.client.core.utils import load_json, validate_ids
2930
from mp_api.client.routes import GeneralStoreRester, MessagesRester, UserSettingsRester
3031
from mp_api.client.routes.materials import (
3132
AbsorptionRester,
@@ -60,11 +61,6 @@
6061
from mp_api.client.routes.materials.materials import MaterialsRester
6162
from mp_api.client.routes.molecules import MoleculeRester
6263

63-
if _compare_emmet_ver("0.85.0", ">="):
64-
from emmet.core.types.enums import ThermoType
65-
else:
66-
from emmet.core.thermo import ThermoType
67-
6864
if TYPE_CHECKING:
6965
from typing import Any, Literal
7066

mp_api/client/routes/materials/thermo.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,12 @@
44

55
import numpy as np
66
from emmet.core.thermo import ThermoDoc
7+
from emmet.core.types.enums import ThermoType
78
from pymatgen.analysis.phase_diagram import PhaseDiagram
89
from pymatgen.core import Element
910

1011
from mp_api.client.core import BaseRester
11-
from mp_api.client.core.utils import _compare_emmet_ver, load_json, validate_ids
12-
13-
if _compare_emmet_ver("0.85.0", ">="):
14-
from emmet.core.types.enums import ThermoType
15-
else:
16-
from emmet.core.thermo import ThermoType
12+
from mp_api.client.core.utils import load_json, validate_ids
1713

1814

1915
class ThermoRester(BaseRester):

mp_api/client/routes/materials/xas.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,7 @@
99
from mp_api.client.core.utils import validate_ids
1010

1111
if TYPE_CHECKING:
12-
from mp_api.client.core.utils import _compare_emmet_ver
13-
14-
if _compare_emmet_ver("0.85.0", ">="):
15-
from emmet.core.types.enums import XasEdge, XasType
16-
else:
17-
from emmet.core.xas import (
18-
Edge as XasEdge,
19-
)
20-
from emmet.core.xas import (
21-
Type as XasType,
22-
)
12+
from emmet.core.types.enums import XasEdge, XasType
2313

2414

2515
class XASRester(BaseRester):

tests/materials/test_thermo.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,10 @@
22
from core_function import client_search_testing
33

44
import pytest
5+
from emmet.core.types.enums import ThermoType
56
from pymatgen.analysis.phase_diagram import PhaseDiagram
67

78
from mp_api.client.routes.materials.thermo import ThermoRester
8-
from mp_api.client.core.utils import _compare_emmet_ver
9-
10-
if _compare_emmet_ver("0.85.0", ">="):
11-
from emmet.core.types.enums import ThermoType
12-
else:
13-
from emmet.core.thermo import ThermoType
14-
159

1610
@pytest.fixture
1711
def rester():

tests/materials/test_xas.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,11 @@
22
from core_function import client_search_testing
33

44
import pytest
5+
6+
from emmet.core.types.enums import XasEdge, XasType
57
from pymatgen.core.periodic_table import Element
68

79
from mp_api.client.routes.materials.xas import XASRester
8-
from mp_api.client.core.utils import _compare_emmet_ver
9-
10-
if _compare_emmet_ver("0.85.0", ">="):
11-
from emmet.core.types.enums import XasEdge, XasType
12-
else:
13-
from emmet.core.xas import (
14-
Type as XasType,
15-
Edge as XasEdge,
16-
)
1710

1811

1912
@pytest.fixture

tests/test_mprester.py

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@
55

66
import numpy as np
77
import pytest
8+
from emmet.core.mpid import MPID, AlphaID
89
from emmet.core.tasks import TaskDoc
910
from emmet.core.vasp.calc_types import CalcType
11+
from emmet.core.phonon import PhononDOS, PhononBS
12+
from emmet.core.types.enums import ThermoType
13+
1014
from pymatgen.analysis.phase_diagram import PhaseDiagram
1115
from pymatgen.analysis.pourbaix_diagram import IonEntry, PourbaixDiagram, PourbaixEntry
1216
from pymatgen.analysis.wulff import WulffShape
1317
from pymatgen.core import SETTINGS
18+
from pymatgen.core.composition import Composition
1419
from pymatgen.core.ion import Ion
1520
from pymatgen.core.periodic_table import Element
1621
from pymatgen.electronic_structure.bandstructure import (
@@ -26,17 +31,10 @@
2631
from pymatgen.entries.computed_entries import ComputedEntry, GibbsComputedStructureEntry
2732
from pymatgen.io.cif import CifParser
2833
from pymatgen.io.vasp import Chgcar
29-
from emmet.core.phonon import PhononDOS, PhononBS
3034

3135
from mp_api.client import MPRester
3236
from mp_api.client.core.client import MPRestError
3337
from mp_api.client.core.settings import MAPIClientSettings
34-
from mp_api.client.core.utils import _compare_emmet_ver
35-
36-
if _compare_emmet_ver("0.85.0", ">="):
37-
from emmet.core.types.enums import ThermoType
38-
else:
39-
from emmet.core.thermo import ThermoType
4038

4139

4240
@pytest.fixture()
@@ -361,6 +359,9 @@ def test_get_api_key_endpoint_from_env_var(self, monkeypatch: pytest.MonkeyPatch
361359
assert MPRester().api_key == self.fake_mp_api_key
362360
assert MPRester().endpoint == self.default_endpoint
363361

362+
monkeypatch.setenv("MP_API_ENDPOINT", self.default_endpoint[:-1])
363+
assert MPRester().endpoint.endswith("/")
364+
364365
def test_get_api_key_endpoint_from_settings(self, monkeypatch: pytest.MonkeyPatch):
365366
"""Test environment variable "MP_API_KEY" is not set and
366367
get "PMG_MAPI_KEY" from "SETTINGS".
@@ -522,3 +523,34 @@ def test_get_stability(self, chemsys, thermo_type):
522523
data = dct
523524
break
524525
assert pd.get_e_above_hull(entry) == pytest.approx(data["e_above_hull"])
526+
527+
@pytest.mark.parametrize(
528+
"mpid, working_ion, thermo_type",
529+
[
530+
("mp-1248282","Al", ThermoType.GGA_GGA_U),
531+
(MPID("mp-1248282"),Element.Al, "R2SCAN"),
532+
(AlphaID("mp-1248282"),"Al",ThermoType.GGA_GGA_U_R2SCAN),
533+
]
534+
)
535+
def test_oxygen_evolution(self, mpid, working_ion, thermo_type, mpr):
536+
# Ensure oxygen evolution data has the anticipated schema
537+
# and is robust to different permutations of input
538+
539+
oxy_evo = mpr.get_oxygen_evolution(
540+
mpid, working_ion, thermo_type = thermo_type
541+
)
542+
assert all(
543+
isinstance(entry.get(k),np.ndarray)
544+
for entry in oxy_evo.values()
545+
for k in ("mu","evolution","temperature","reaction")
546+
)
547+
assert all(Composition(k).formula == k for k in oxy_evo)
548+
549+
def test_oxygen_evolution_bad_input(self,mpr):
550+
# Ensure oxygen evolution fails gracefully if no O present
551+
# or no insertion electrode data
552+
with pytest.raises(ValueError,match="No oxygen in the host"):
553+
_ = mpr.get_oxygen_evolution("mp-2207",Element.K)
554+
555+
with pytest.raises(ValueError, match="No available insertion electrode data"):
556+
_ = mpr.get_oxygen_evolution("mp-2207","Al")

0 commit comments

Comments
 (0)