Why Frame#

CHILL, rings, cages, Steinhardt, and SOAP are per-snapshot. The handle is one configuration: neighbours, a bonded graph, and labels on that cloud.

One configuration#

Frame is that handle. Multi-frame work is explicit: read(path, frame=n) (1-indexed) or frame.load_frame(n) on a path-backed Frame. Arrays-only and ASE-built frames have no path and cannot load_frame.

Trajectory is an alias#

Trajectory is a compatibility alias of Frame (src/pydseams/__init__.py). It does not iterate a movie and does not own a campaign. The engine CLI that walks trajectories and writes output/ lives in seams-core. This package does not grow a second movie object.