Restructured tutorial suite

Summary

Removes calorine's reliance on data files checked into tutorials/. Every tutorial notebook now downloads its input/reference data from Zenodo (record 21198312, plus a handful of external records for shared models/datasets) instead of relying on files committed to the repository or a local tests/ checkout.

While doing this, the tutorial suite got a full pass:

  • All notebooks renamed to a consistent, topic-first naming convention (e.g. calculators.ipynb -> ase_calculators.ipynb, phonons.ipynb + elastic_stiffness_tensor.ipynb merged into phonons_and_elastic_properties.ipynb).
  • structure_relaxation.ipynb, elastic_stiffness_tensor.ipynb, and nep_descriptors.ipynb removed (content merged into ase_calculators.ipynb, phonons_and_elastic_properties.ipynb, and nep_model_inspection.ipynb, respectively). New structure_analysis.ipynb added (get_primitive_structure, get_spacegroup, get_wyckoff_sites).
  • Several notebooks reworked against real (not synthetic/placeholder) data: nep_training.ipynb now trains a real one-stage vs. two-stage-curriculum ensemble on a real DFT dataset; inelastic_neutron_scattering.ipynb, dielectric_functions.ipynb, ir_spectra.ipynb, and raman_spectra.ipynb use real MD trajectories and add temperature-dependence and run-length-convergence sections; phonons_and_elastic_properties.ipynb adds LOTO splitting and a tetragonal BaTiO3 example showing relaxed-vs-clamped elastic constants differing when internal degrees of freedom are present.
  • Consistent conventions established suite-wide: figure style, point-of-use imports, and from matplotlib import pyplot as plt. Plotting code is hidden when it appears on its own (as done in rhodent).
  • Fixed the Sphinx documentation, which the renaming had broken: updated doc/get_started/index.rst's toctrees and the doc/get_started/*.ipynb symlinks to match the current notebook set, and fixed a stale filename filter in .gitlab-ci.yml.
  • Updated the Docker image to use updated versions of the Python packages, and added both phono3py and resins. This unblocked the BTE job in the tutorial job.

Two real bugs in calorine itself were found in the process and are tracked separately rather than fixed here (see issues): an intermittent segfault from reusing a CPUNEP instance across get_force_constants() -> get_elastic_stiffness_tensor() #143, and an O(n^2) memory blowup in get_dielectric_function()'s default Kramers-Kronig settings on long trajectories #144 (closed) .

Edited by Paul Erhart

Merge request reports

Loading