Changelog#
All notable changes to Soprano are documented here.
v0.11.1 (2026-02-25)#
Changes#
Removed
bottleneckas a dependency — it was never imported by Soprano.Widened the
clickversion constraint from>=8.2.1to>=8.0, restoring compatibility with environments that ship older click releases (e.g. Pyodide 0.27, which provides click 8.1.7).
v0.11.0 (2026-02-25)#
New features#
Pluggable symmetry backends: spglib and moyopy#
Soprano now supports two interchangeable symmetry backends. spglib is no longer
a hard dependency. The new abstraction in soprano.properties.symmetry.backend
exposes two public functions:
get_symmetry_dataset(atoms, *, symprec=1e-5, backend="auto")→SpacegroupDatasetget_symmetry_ops_from_hall(hall_no, *, backend="auto")→(rotations, translations)
The SpacegroupDataset dataclass provides a unified interface regardless of
which backend performed the analysis:
SpacegroupDataset(
international, # H-M symbol, e.g. "Fm-3m"
hall_number, # integer 1–530
std_lattice, # (3,3) ndarray, rows are lattice vectors
transformation_matrix,
origin_shift,
rotations, # (N,3,3)
translations, # (N,3)
equivalent_atoms, # (nat,) integer orbit labels
)
The backend keyword ("auto" / "moyo" / "spglib") is accepted by:
SymmetryDataset, WyckoffPoints, XRDCalculator, compute_asymmetric_distmat,
and UniqueSites.
moyopy: faster Rust-based symmetry backend#
moyopy is a Rust-based rewrite of spglib approximately 4× faster. Install it with:
pip install soprano[moyo]
spglib moved to optional extras#
pip install soprano[spglib] # spglib only
pip install soprano[moyo] # moyopy only (recommended)
pip install soprano[symmetry] # both (useful for CI / validation)
If neither backend is installed, symmetry functions raise an ImportError with
installation instructions.
New helpers in soprano.optional#
from soprano.optional import has_spglib, has_moyopy, has_symmetry_backend
requireSpglib is still importable but emits a DeprecationWarning.
Bug fixes#
UniqueSites: replaced deprecated ase.spacegroup.get_spacegroup#
UniqueSites previously used ASE’s get_spacegroup, deprecated in ASE 3.24
and removed in ASE 3.25. The function was also incorrect for non-standard
cell settings: it returned symmetry operations for the standard setting of the
detected space group, so tag_sites() could silently produce wrong site
equivalences (see ASE !3455).
The replacement calls the symmetry backend directly on the input structure and
uses equivalent_atoms / orbits from the dataset, which are always computed
from the actual input cell.
scipy 1.15 compatibility: sph_harm removed#
scipy.special.sph_harm was removed in scipy 1.15 and replaced by sph_harm_y,
which also swapped argument order and the θ/φ angle convention. A compatibility
shim is now in place for scipy ≥ 1.15 with a fallback to the original import on
older versions. Fixes TestGenes::test_coordhist and all TestPhylogen tests
on scipy ≥ 1.15.
Notes#
Wyckoff points and transformation-matrix conventions#
_find_wyckoff_points internally prefers spglib’s transformation-matrix
convention when spglib is available. The two backends may return different (but
equally valid) matrices for the same space group due to freedom in the choice of
Euclidean normalizer (see spglib/moyo#198).
Moyo is only used for Wyckoff analysis when spglib is absent.
v0.10.2 (2025-12-09) — NumPy 2.0 bugfix#
Fixed
average_quaternionsfor NumPy 2.0 compatibility (#42)
v0.10.1 (2025-07-28)#
v0.10.0 (2025-07-24) — NumPy 2.0 compatibility and ASE upgrade#
Full NumPy 2.0 compatibility while maintaining backward compatibility with NumPy 1.x. The minimum ASE version is now 3.26.
Dependencies: removed
numpy<2.0restriction; now supportsnumpy>=1.18.5(#39)NumPy 2.0 fixes: replaced deprecated
np.array(copy=False)withnp.asarray()throughoutsoprano/utils.pyandsoprano/calculate/xrd/xrd.pyCollection: fixed ASE calculator import compatibility; optimised
get_array()for NumPy 2.0 copy semanticsNMR tensor averaging: new averaging functionality for tensors and other properties (#34)
Simpson interface: updates to the Simpson NMR simulation interface (#28, @carlosbornes)
New contributor: @carlosbornes (#28).
v0.9.2 (2024-10-03)#
Added
sopranoCLI (#26)
v0.8.14 (2024-07-04)#
For older releases see the GitHub releases page.