Source code for httk.atomistic.species_class
"""
Backend wrapping a Species in the class representation.
"""
from typing import Any
from .species import Species
from .species_backend import SpeciesBackend
[docs]
class SpeciesClass(SpeciesBackend):
"""
Backend for a species backed by an actual ``Species`` object.
Its accessors delegate to the wrapped Species, and ``unwrap`` returns that Species.
"""
_species: Species
# Cannot type annotate __new__ as `Self | None` for some reason
def __new__(cls, obj: Any, **hints: Any) -> Any:
if not isinstance(obj, Species):
return None
if hints and hints.get("kind", "class") != "class":
return None
return super().__new__(cls)
def __init__(self, obj: Species, **hints: Any) -> None:
self._species = obj
@property
[docs]
def name(self) -> str:
return self._species.name
@property
[docs]
def chemical_symbols(self) -> tuple[str, ...]:
return self._species.chemical_symbols
@property
[docs]
def concentration(self) -> tuple[float, ...]:
return self._species.concentration
@property
[docs]
def mass(self) -> tuple[float, ...] | None:
return self._species.mass
@property
[docs]
def attached(self) -> tuple[str, ...] | None:
return self._species.attached
@property
[docs]
def nattached(self) -> tuple[int, ...] | None:
return self._species.nattached
@property
[docs]
def original_name(self) -> str | None:
return self._species.original_name
[docs]
def unwrap(self) -> Any:
return self._species