From 05423acb9b49a3afc81eb48711c75da43e09d8a0 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 10 Sep 2025 17:22:15 -0700 Subject: [PATCH 1/5] ensure atomate2 imports consistent with new emmet --- src/atomate2/ase/schemas.py | 2 +- src/atomate2/cp2k/schemas/calc_types/_generate.py | 2 +- src/atomate2/cp2k/schemas/calc_types/enums.py | 2 +- src/atomate2/vasp/flows/core.py | 2 +- tests/vasp/flows/test_core.py | 2 +- tests/vasp/flows/test_md.py | 2 +- tests/vasp/jobs/test_md.py | 3 ++- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/atomate2/ase/schemas.py b/src/atomate2/ase/schemas.py index d4a429bcdb..b73b8bf446 100644 --- a/src/atomate2/ase/schemas.py +++ b/src/atomate2/ase/schemas.py @@ -17,7 +17,7 @@ from emmet.core.structure import MoleculeMetadata, StructureMetadata from emmet.core.tasks import TaskState from emmet.core.trajectory import AtomTrajectory -from emmet.core.utils import ValueEnum +from emmet.core.types.enums import ValueEnum from emmet.core.vasp.calculation import StoreTrajectoryOption from pydantic import BaseModel, Field from pymatgen.core import Molecule, Structure diff --git a/src/atomate2/cp2k/schemas/calc_types/_generate.py b/src/atomate2/cp2k/schemas/calc_types/_generate.py index a20ca90468..87bf7ce1bf 100644 --- a/src/atomate2/cp2k/schemas/calc_types/_generate.py +++ b/src/atomate2/cp2k/schemas/calc_types/_generate.py @@ -77,7 +77,7 @@ def get_calc_type_key(rt: str) -> str: Do not edit this by hand. Edit generate.py or run_types.yaml instead. \"\"\"\n -from emmet.core.utils import ValueEnum +from emmet.core.types.enums import ValueEnum """ ) diff --git a/src/atomate2/cp2k/schemas/calc_types/enums.py b/src/atomate2/cp2k/schemas/calc_types/enums.py index 1795b96326..55757b2d4d 100644 --- a/src/atomate2/cp2k/schemas/calc_types/enums.py +++ b/src/atomate2/cp2k/schemas/calc_types/enums.py @@ -4,7 +4,7 @@ Do not edit this by hand. Edit generate.py or run_types.yaml instead. """ -from emmet.core.utils import ValueEnum +from emmet.core.types.enums import ValueEnum class RunType(ValueEnum): diff --git a/src/atomate2/vasp/flows/core.py b/src/atomate2/vasp/flows/core.py index 8076371e4e..55c24400c2 100644 --- a/src/atomate2/vasp/flows/core.py +++ b/src/atomate2/vasp/flows/core.py @@ -6,7 +6,7 @@ from dataclasses import dataclass, field from typing import TYPE_CHECKING -from emmet.core.vasp.calculation import VaspObject +from emmet.core.types.enums import VaspObject from jobflow import Flow, Maker from atomate2.vasp.jobs.core import ( diff --git a/tests/vasp/flows/test_core.py b/tests/vasp/flows/test_core.py index dcebd64ac0..06e7ff347a 100644 --- a/tests/vasp/flows/test_core.py +++ b/tests/vasp/flows/test_core.py @@ -1,6 +1,6 @@ import pytest from emmet.core.tasks import TaskDoc -from emmet.core.vasp.calculation import VaspObject +from emmet.core.types.enums import VaspObject from jobflow import run_locally from pymatgen.electronic_structure.bandstructure import ( BandStructure, diff --git a/tests/vasp/flows/test_md.py b/tests/vasp/flows/test_md.py index 61478740dc..0c0959ad8c 100644 --- a/tests/vasp/flows/test_md.py +++ b/tests/vasp/flows/test_md.py @@ -1,4 +1,4 @@ -from emmet.core.vasp.calculation import VaspObject +from emmet.core.types.enums import VaspObject from jobflow import Flow from atomate2.vasp.flows.md import MultiMDMaker diff --git a/tests/vasp/jobs/test_md.py b/tests/vasp/jobs/test_md.py index 2f5c0c190d..05a8fab83c 100644 --- a/tests/vasp/jobs/test_md.py +++ b/tests/vasp/jobs/test_md.py @@ -1,6 +1,7 @@ import pytest from emmet.core.tasks import TaskDoc -from emmet.core.vasp.calculation import IonicStep, VaspObject +from emmet.core.types.enums import VaspObject +from emmet.core.vasp.calculation import IonicStep from jobflow import run_locally from atomate2.vasp.jobs.md import MDMaker From 8c6da064bf2d360f61968d727ee6e7fc2a59a587 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 24 Sep 2025 08:55:39 -0700 Subject: [PATCH 2/5] more enusm --- pyproject.toml | 2 +- src/atomate2/common/jobs/approx_neb.py | 2 +- src/atomate2/openff/core.py | 2 +- src/atomate2/openmm/jobs/generate.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 85b6254c9b..881f7c9510 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "PyYAML", "click", "custodian>=2024.4.18", - "emmet-core>=v0.84.10rc2", + "emmet-core>=v0.85.0rc0", "jobflow>=0.1.11", "monty>=2024.12.10", "numpy", diff --git a/src/atomate2/common/jobs/approx_neb.py b/src/atomate2/common/jobs/approx_neb.py index 92bf34ad09..40a7314082 100644 --- a/src/atomate2/common/jobs/approx_neb.py +++ b/src/atomate2/common/jobs/approx_neb.py @@ -6,7 +6,7 @@ import numpy as np from emmet.core.neb import HopFailureReason, NebMethod, NebPathwayResult, NebResult -from emmet.core.vasp.task_valid import TaskState +from emmet.core.types.enums import TaskState from jobflow import Flow, Response, job from pymatgen.analysis.diffusion.neb.pathfinder import ChgcarPotential, NEBPathfinder from pymatgen.core import Element diff --git a/src/atomate2/openff/core.py b/src/atomate2/openff/core.py index 97fabd79b2..4b9385c3b8 100644 --- a/src/atomate2/openff/core.py +++ b/src/atomate2/openff/core.py @@ -7,7 +7,7 @@ import openff.toolkit as tk from emmet.core.openff import ClassicalMDTaskDocument, MoleculeSpec -from emmet.core.vasp.task_valid import TaskState +from emmet.core.types.enums import TaskState from jobflow import Response, job from openff.interchange import Interchange from openff.interchange.components._packmol import pack_box diff --git a/src/atomate2/openmm/jobs/generate.py b/src/atomate2/openmm/jobs/generate.py index 3f79d0d449..55890307a6 100644 --- a/src/atomate2/openmm/jobs/generate.py +++ b/src/atomate2/openmm/jobs/generate.py @@ -13,7 +13,7 @@ import numpy as np from emmet.core.openff import MoleculeSpec from emmet.core.openmm import OpenMMTaskDocument -from emmet.core.vasp.task_valid import TaskState +from emmet.core.types.enums import TaskState from jobflow import Response from openmm import Context, LangevinMiddleIntegrator, System, XmlSerializer from openmm.app import PME, ForceField From 736a04efeacf114b15388b1354bc21e2f04c82c9 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 24 Sep 2025 09:01:41 -0700 Subject: [PATCH 3/5] nump deps --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 79f525f9b0..6133f15374 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,9 +70,9 @@ openmm = [ "openmm-mdanalysis-reporter>=0.1.0", "openmm>=8.1.0", ] -fireworks = ["FireWorks==2.0.4"] +fireworks = ["fireworks==2.0.5"] docs = [ - "FireWorks==2.0.4", + "fireworks==2.0.5", "autodoc_pydantic==2.2.0", "furo==2025.7.19", "ipython==8.37.0", @@ -86,10 +86,10 @@ docs = [ ] dev = ["pre-commit>=2.12.1"] tests = [ - "FireWorks==2.0.4", + "fireworks==2.0.5", "nbmake==1.5.5", "pytest-cov==7.0.0", - "pytest-mock==3.15.0", + "pytest-mock==3.15.1", "pytest-split==0.10.0", "pytest-xdist==3.8.0", "pytest==8.4.2", From bf2c62db9334296b6009a75aec05ce2c3aa759d5 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 24 Sep 2025 14:22:27 -0700 Subject: [PATCH 4/5] remove builde rmeta --- src/atomate2/lobster/schemas.py | 6 ------ tests/vasp/lobster/schemas/test_lobster.py | 2 -- 2 files changed, 8 deletions(-) diff --git a/src/atomate2/lobster/schemas.py b/src/atomate2/lobster/schemas.py index ecdd4629fc..445da1ecc6 100644 --- a/src/atomate2/lobster/schemas.py +++ b/src/atomate2/lobster/schemas.py @@ -1072,12 +1072,6 @@ def from_directory( data, allow_bson=True, strict=True, enum_values=True ) json.dump(monty_encoded_json_doc, file) - file.write(",") - data = {"builder_meta": doc.builder_meta} # add builder metadata - monty_encoded_json_doc = jsanitize( - data, allow_bson=False, strict=True, enum_values=True - ) - json.dump(monty_encoded_json_doc, file) del data, monty_encoded_json_doc file.write("]") diff --git a/tests/vasp/lobster/schemas/test_lobster.py b/tests/vasp/lobster/schemas/test_lobster.py index ec72b82fd0..cee8058adc 100644 --- a/tests/vasp/lobster/schemas/test_lobster.py +++ b/tests/vasp/lobster/schemas/test_lobster.py @@ -202,7 +202,6 @@ def test_lobster_task_doc_saved_jsons(lobster_test_dir): "calc_quality_text", "dos", "lso_dos", - "builder_meta", ] for cba_key in expected_cba_keys_json: @@ -256,7 +255,6 @@ def test_lobster_task_doc_saved_jsons(lobster_test_dir): ) expected_computational_data_keys_json = [ - "builder_meta", "structure", "charges", "lobsterout", From c9c05b240cab7c8cfc4ad6351ceac66d17872221 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Thu, 2 Oct 2025 12:23:19 -0700 Subject: [PATCH 5/5] kludge insertion electrode ids into alpha ids as needed --- pyproject.toml | 2 +- src/atomate2/common/jobs/electrode.py | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6133f15374..2e6ab5a0ae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "PyYAML", "click", "custodian>=2024.4.18", - "emmet-core>=v0.85.0rc0", + "emmet-core>=v0.85.0", "jobflow>=0.1.11", "monty>=2024.12.10", "numpy", diff --git a/src/atomate2/common/jobs/electrode.py b/src/atomate2/common/jobs/electrode.py index 427e953b5d..e5192a7a63 100644 --- a/src/atomate2/common/jobs/electrode.py +++ b/src/atomate2/common/jobs/electrode.py @@ -6,13 +6,18 @@ from typing import TYPE_CHECKING, NamedTuple from emmet.core.electrode import InsertionElectrodeDoc -from emmet.core.mpid import MPID +from emmet.core.mpid import MPID, check_ulid from emmet.core.structure_group import StructureGroupDoc from jobflow import Flow, Maker, Response, job from pymatgen.analysis.defects.generators import ChargeInterstitialGenerator from pymatgen.entries.computed_entries import ComputedStructureEntry from ulid import ULID +try: + from emmet.core.mpid import AlphaID +except ImportError: + AlphaID = None + if TYPE_CHECKING: from collections.abc import Callable from pathlib import Path @@ -196,7 +201,12 @@ def get_insertion_electrode_doc( ) -> Response: """Return a `InsertionElectrodeDoc`.""" for ient in computed_entries: - ient.data["material_id"] = ient.entry_id + if AlphaID and check_ulid.fullmatch(ient.entry_id): + # AlphaID not compatible with ULID, MPID is but ID validation + # does not permit ULIDs, just their integer values. + ient.data["material_id"] = AlphaID(int(ULID.from_str(ient.entry_id))) + else: + ient.data["material_id"] = ient.entry_id return InsertionElectrodeDoc.from_entries( computed_entries, working_ion_entry, battery_id=None )