Source code for httk.atomistic.entries.moments
"""Serve structure site moments as Cartesian JSON values."""
from functools import cache
from typing import Any
from httk.core import PropertyDefinition
from httk.atomistic.entries.definitions import load_httk_definitions
from httk.atomistic.models.moments.cartesian_view import CartesianSiteMomentsView
__all__ = ["MOMENT_PROPERTY_KEYS", "moment_definitions", "moment_properties"]
[docs]
MOMENT_PROPERTY_KEYS: dict[str, str] = {"_httk_site_moments": "site_moments"}
@cache
[docs]
def moment_definitions() -> dict[str, PropertyDefinition]:
"""Load the vendored site-moment property definition.
:return: The definition keyed by ``_httk_site_moments``.
"""
return load_httk_definitions(MOMENT_PROPERTY_KEYS)
[docs]
def moment_properties(structure: Any) -> dict[str, Any]:
"""Project non-collinear site moments as Cartesian JSON values.
:param structure: The structure to project, or ``None`` for an empty entry.
:return: The ``_httk_site_moments`` value, or ``None`` when unavailable or collinear.
"""
values: dict[str, Any] = {name: None for name in MOMENT_PROPERTY_KEYS}
if structure is None:
return values
moments = structure.site_moments
if moments is not None and getattr(moments, "kind", None) != "collinear":
values["_httk_site_moments"] = CartesianSiteMomentsView(moments).cartesian_moments.to_floats()
return values