Source code for molsysviewer.demo
from __future__ import annotations
from collections.abc import Iterator, Mapping
from dataclasses import dataclass
from importlib.resources import files
from .new_view import new_view
@dataclass(frozen=True)
class _DemoSpec:
key: str
resource_filename: str
[docs]
class DemoCatalog(Mapping[str, "MolSysView"]):
"""Dictionary-like access to built-in demo views.
Access demos by key:
>>> import molsysviewer as viewer
>>> view = viewer.demo["1TCD"]
Notes
-----
- Each access returns a **fresh** `MolSysView` instance (no shared state).
- Demo systems are shipped inside the package under `molsysviewer.data.h5msm`.
"""
def __init__(self, specs: list[_DemoSpec]):
self._specs = {spec.key: spec for spec in specs}
def __getitem__(self, key: str):
spec = self._specs[key]
demo_system = files("molsysviewer.data.h5msm").joinpath(spec.resource_filename)
return new_view(demo_system)
def __iter__(self) -> Iterator[str]:
return iter(self._specs)
def __len__(self) -> int:
return len(self._specs)
def __repr__(self) -> str: # pragma: no cover
keys = ", ".join(sorted(self._specs))
return f"DemoCatalog({keys})"
demo = DemoCatalog(
[
_DemoSpec("dialanine", "alanine_dipeptide.h5msm"),
_DemoSpec("1TCD", "1TCD.h5msm"),
_DemoSpec("181L", "181L.h5msm"),
_DemoSpec("pentalanine", "traj_pentalanine.h5msm"),
_DemoSpec("chicken_villin_HP35", "traj_chicken_villin_HP35_solvated.h5msm"),
]
)
__all__ = ["DemoCatalog", "demo"]