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, CHILL, rings, cages, Steinhardt, SOAP. 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.
yoda.readLammpsTrjreduced and friends 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 |
|---|---|
|
compiled module (canonical) |
|
same object; 2.1 helper-layer name |
|
same object; older compiled-module name |
|
package alias of |
|
alias of |
_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.