diff --git a/mp_api/client/mprester.py b/mp_api/client/mprester.py index 0fab2eca..c7855866 100644 --- a/mp_api/client/mprester.py +++ b/mp_api/client/mprester.py @@ -1399,7 +1399,8 @@ def get_entries_in_chemsys( ) n = len(unmixed) entries = apply_corrections( - MaterialsProjectDFTMixingScheme(), + # strict structure matching, as for MP's pre-built phase diagrams + MaterialsProjectDFTMixingScheme(fuzzy_matching=False), unmixed, description="Re-mixing GGA(+U)/r2SCAN entries", log=f"Re-mixing {n:,} GGA(+U)/r2SCAN entries onto a common energy scale", diff --git a/pyproject.toml b/pyproject.toml index 15342ee1..562ff0bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ classifiers = [ ] dependencies = [ - "pymatgen>2024.2.20", + "pymatgen>=2026.9.23", # MaterialsProjectDFTMixingScheme fix for local re-mixes "requests>=2.23.0", "monty>=2024.12.10", "emmet-core>=0.88.0", diff --git a/tests/client/test_mprester.py b/tests/client/test_mprester.py index 1dbb8f04..12c25cab 100644 --- a/tests/client/test_mprester.py +++ b/tests/client/test_mprester.py @@ -46,6 +46,7 @@ from mp_api.client import MPRester from mp_api.client.core import MPRestError, MPRestWarning from mp_api.client.core.settings import _DEFAULT_ENDPOINT +from mp_api.client.routes.materials.thermo import ThermoRester try: from mp_api.client.contribs import ContribsClient as contribs_client @@ -331,6 +332,18 @@ def test_get_entries_in_chemsys(self, mpr): ): mpr.get_entries_in_chemsys([Element.from_Z(1 + i).name for i in range(10)]) + def test_get_entries_in_chemsys_remix_matches_served(self, mpr, monkeypatch): + """The client-side re-mix (used when MP has no pre-built phase diagram) matches + MP's pre-built phase diagram rules.""" + served = mpr.get_entries_in_chemsys("O") + monkeypatch.setattr( # force the re-mix + ThermoRester, "get_phase_diagram_from_chemsys", lambda *args, **kwargs: None + ) + remixed = mpr.get_entries_in_chemsys("O") + assert {str(e.entry_id): e.energy_per_atom for e in remixed} == pytest.approx( + {str(e.entry_id): e.energy_per_atom for e in served} + ) + def test_get_entries_in_chemsys_mixed_hull(self, mpr): """Mixed GGA(+U)/r2SCAN entries must all sit on one energy scale (issue #1104).