The yoda surface#

The package is pydseams. The compiled extension inside it is yoda. That split is deliberate.

The 2020 name#

d-SEAMS shipped in 2020 as yodaStruct (Goswami, Goswami, Singh, J. Chem. Inf. Model. 2020, DOI 10.1021/acs.jcim.0c00031). The C++ library is still libyodaLib in seams-core. The Lua and Fennel front end still lives in yodaStruct (require("dseams")).

The nanobind module is yoda because that is the 2020 compiled surface name: NB_MODULE(yoda, ...) and Meson’s extension_module('yoda', ..., subdir: 'pydseams'). Importing pydseams.yoda is the same object the C++ engine always was.

The Python package is pydseams, not yoda. yoda is the extension, the way libyodaLib is the engine and dseams is the Lua module. import pydseamslib still works; that is the 2.0 / repository name, re-exported from pydseams.

Why helpers stay in Python#

yoda registers the engine: PointCloudDouble, the readers, neighbour lists (neighList, neighListO, neighListPair), CHILL, rings, cages, Steinhardt, SOAP, SiteTable, partialRdfHist, coordinationNumber, runningCN, and populateHbondsFromDonors. It does not own suffix dispatch, ASE Atoms, or solvis.

Frame, read, from_ase, from_arrays, from_xyz, from_chemfiles, from_con, and to_solvis sit in Python on that surface. The compiled ABI does not grow a second I/O layer. A new reader extra or a viewer extra is a Python module plus an optional dependency (pydseams[ase], pydseams[solvis]), not a bump of the C++ module.

ds.read looks at the suffix and calls the matching constructor. Frame(..., region=(lo, hi)) calls yoda.readLammpsTrjreduced, which drops atoms outside the box. yoda.readLammpsTrjO keeps every atom of the type and sets inSlice. Both stay available for callers that want the raw cloud.

The trade-off is a thin compiled surface and a small Python adapter layer. Application code imports pydseams and uses Frame. The seams CLI and Lua dseams stay in their own repositories and share libyodaLib.

Aliases of the same module#

import pydseams as ds

assert ds._core is ds.yoda
assert ds.cyoda is ds.yoda

name

role

pydseams.yoda

compiled module (canonical)

pydseams._core

same object; 2.1 helper-layer name

pydseams.cyoda

same object; older compiled-module name

pydseamslib

package alias of pydseams

pydseams.Trajectory

alias of Frame

_core is the private-looking name used when the helpers first sat on the compiled surface. cyoda is the older import kept so from pydseams import cyoda still resolves. New code imports yoda.