Source code for httk.atomistic.sites_class_view

"""
A view presenting any sites backend as a Sites object (the class representation).
"""

from typing import Any, Self

from httk.core import unwrap

from .sites import Sites
from .sites_backend import SitesBackend
from .sites_like import SitesLike
from .sites_view import SitesView


[docs] class SitesClassView(SitesView, Sites): """ A view presenting an underlying sites backend as a ``Sites`` object. This view is a genuine ``Sites``, so it can be passed anywhere a Sites is accepted. Its coordinates are built eagerly from the backend on construction. """ _backend: SitesBackend def __new__(cls, obj: SitesLike, **hints: Any) -> Self: if isinstance(obj, cls): return obj backend = cls._prepare_backend(obj, hints) instance = super().__new__(cls) # Sites is mutable, so its state is initialized here in __new__ (keeping __init__ a no-op), # so that rewrapping an existing view via cls(view) does not re-initialize it. Sites.__init__(instance, backend.reduced_coords) instance._backend = backend return instance def __init__(self, obj: SitesLike, **hints: Any) -> None: pass
[docs] def unwrap(self) -> Any: return unwrap(self._backend)