diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 9746e51e84..21077afdd3 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -108,7 +108,7 @@ jobs: EMMET_USE_EMMET_MODELS: true run: python${{ matrix.python-version }} -m pytest -n auto --cov=emmet --cov-report=xml ${{ matrix.package }}/tests - - uses: codecov/codecov-action@v5.5.1 + - uses: codecov/codecov-action@v5.5.2 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml diff --git a/emmet-core/emmet/core/trajectory.py b/emmet-core/emmet/core/trajectory.py index 636bbb6b58..f829e0b9be 100644 --- a/emmet-core/emmet/core/trajectory.py +++ b/emmet-core/emmet/core/trajectory.py @@ -740,10 +740,11 @@ def from_vasprun( ): kwargs["time_step"] = vasprun.parameters.get("POTIM") + istep_attr = "md_data" if vasprun.incar.get("ML_LMLFF") else "ionic_steps" return cls._from_dict( { remap.get(k, k): [ - ionic_step.get(k) for ionic_step in vasprun.ionic_steps + ionic_step.get(k) for ionic_step in getattr(vasprun, istep_attr, []) ] for k in ionic_step_data }, diff --git a/emmet-core/emmet/core/types/pymatgen_types/xas_adapter.py b/emmet-core/emmet/core/types/pymatgen_types/xas_adapter.py index 59a875894c..c1d6a66888 100644 --- a/emmet-core/emmet/core/types/pymatgen_types/xas_adapter.py +++ b/emmet-core/emmet/core/types/pymatgen_types/xas_adapter.py @@ -1,5 +1,6 @@ -from typing import Annotated, TypeVar +from typing import Any, Annotated, TypeVar +import numpy as np from pydantic import BeforeValidator, WrapSerializer from pymatgen.analysis.xas.spectrum import XAS from typing_extensions import TypedDict @@ -45,8 +46,18 @@ def pop_xas_empty_structure_fields(xas: XASTypeVar, eps: float = 1e-12): return xas +def _serialize_xas(xas: XAS) -> dict[str, Any]: + xas_dct = xas.as_dict() + for k in ("x", "y"): + if isinstance(xas_dct[k], np.ndarray): + xas_dct[k] = xas_dct[k].tolist() + return xas_dct + + XASType = Annotated[ XASTypeVar, BeforeValidator(pop_xas_empty_structure_fields), - WrapSerializer(lambda x, nxt, info: x.as_dict(), return_type=TypedXASSpectrumDict), + WrapSerializer( + lambda x, nxt, info: _serialize_xas(x), return_type=TypedXASSpectrumDict + ), ]