Skip to content

Commit 7c74022

Browse files
Fix MPID assignment in electrode workflow (#956)
* fix mpid in electrode * fix mpid in electrode * ensure unique mpid * precommit * change mpid assignment logic to assign ULIDs on the fly as needed * precommit * remove missing test fixture call
1 parent 28ba426 commit 7c74022

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

src/atomate2/common/jobs/electrode.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
from typing import TYPE_CHECKING, Callable, NamedTuple
77

88
from emmet.core.electrode import InsertionElectrodeDoc
9+
from emmet.core.mpid import MPID
910
from emmet.core.structure_group import StructureGroupDoc
1011
from jobflow import Flow, Maker, Response, job
1112
from pymatgen.analysis.defects.generators import ChargeInterstitialGenerator
1213
from pymatgen.entries.computed_entries import ComputedStructureEntry
14+
from ulid import ULID
1315

1416
if TYPE_CHECKING:
1517
from pathlib import Path
@@ -154,13 +156,23 @@ def get_computed_entries(
154156
return multi
155157
# keep the [1] for now, if jobflow supports NamedTuple, we can do this much cleaner
156158
s_ = RelaxJobSummary._make(single)
157-
s_.entry.entry_id = s_.uuid
159+
160+
# Ensure that the entry_id is an acceptable MPID
161+
try:
162+
entry_id = MPID(s_.uuid)
163+
except ValueError:
164+
entry_id = ULID()
165+
s_.entry.entry_id = str(entry_id)
166+
167+
# Store UUID for provenance
168+
s_.entry.data["UUID"] = s_.uuid
169+
158170
ent = ComputedStructureEntry(
159171
structure=s_.structure,
160172
energy=s_.entry.energy,
161173
parameters=s_.entry.parameters,
162174
data=s_.entry.data,
163-
entry_id=s_.uuid,
175+
entry_id=s_.entry.entry_id,
164176
)
165177
return [*multi, ent]
166178

tests/vasp/flows/test_electrode.py

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,7 @@
11
from __future__ import annotations
22

3-
from unittest import mock
43

5-
import pytest
6-
from jobflow.settings import JobflowSettings
7-
8-
9-
@pytest.fixture()
10-
def mock_jobflow_settings(memory_jobstore):
11-
"""Set the UID_TYPE to "ulid" to make sure the documents can be sorted.
12-
13-
See: https://github.com/materialsproject/jobflow/issues/519#issuecomment-1906850096
14-
"""
15-
16-
settings = JobflowSettings(JOB_STORE=memory_jobstore, UID_TYPE="ulid")
17-
18-
with mock.patch("jobflow.SETTINGS", settings):
19-
yield
20-
21-
22-
def test_electrode_makers(mock_vasp, clean_dir, test_dir, mock_jobflow_settings):
4+
def test_electrode_makers(mock_vasp, clean_dir, test_dir):
235
from emmet.core.electrode import InsertionElectrodeDoc
246
from jobflow import OutputReference, run_locally
257
from monty.serialization import loadfn
@@ -32,7 +14,6 @@ def test_electrode_makers(mock_vasp, clean_dir, test_dir, mock_jobflow_settings)
3214
update_user_incar_settings,
3315
update_user_kpoints_settings,
3416
)
35-
# mock the default setting
3617

3718
# mapping from job name to directory containing test files
3819
ref_paths = {

0 commit comments

Comments
 (0)