From e8501cc9e084b19a71f593eb7cd9ec07c312536f Mon Sep 17 00:00:00 2001 From: Sean Kavanagh Date: Sun, 25 Oct 2026 08:47:14 +0000 Subject: [PATCH 1/2] Re-mix GGA(+U)/r2SCAN entries without fuzzy matching, as for MP's pre-built phase diagrams --- mp_api/client/mprester.py | 3 ++- tests/client/test_mprester.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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/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). From bed57cef3517553840f1c28b131bbd74990d9d83 Mon Sep 17 00:00:00 2001 From: Sean Kavanagh Date: Tue, 20 Oct 2026 13:34:38 +0100 Subject: [PATCH 2/2] Require pymatgen>=2026.9.23 for the fixed mixing scheme (materialsproject/pymatgen#4704) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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",