Release Notesยถ
Mdapy 1.0.6 (May 6, 2026)ยถ
๐ New Featuresยถ
New
mdapy.SQSfor Special Quasirandom Structure generation.New
mdapy.BondStiffnessfor fitting longitudinal / transverse bond stiffnesses vs bond length.mdapy.RadialDistributionFunctionadds a streaming kernel for arbitrary cutoffs (no Verlet list materialised).mdapy.StructureFactorrewritten in the Faber-Ziman convention of [Erhard2024], with X-ray / neutron / electron totals and the corresponding real-space PDFs.Partial outputs of
RadialDistributionFunction/StructureFactorare now dicts keyed by element-pair tuples.New
mdapy.unwrap_trajectory()/Trajectory.unwrap().Extended-XYZ I/O recognises GPUMDโs
unwrapped_position:R:3and aliases it toxu/yu/zu.Unified thread-count control via the
MDAPY_NUM_THREADSenvironment variable (set beforeimport mdapy); drives both OpenMP and polars. Defaults toos.cpu_count(). Query viamdapy.get_num_threads(). The publicworkers/num_threadsarguments onmdapy.compress_fileandmdapy.render.TachyonRenderare removed.New
System.cal_chill_plus()(CHILL+ algorithm) for identifying hexagonal ice, cubic ice, gas hydrate and interfacial phases in water simulations.
๐ Bug Fixesยถ
read_dumpno longer fails (or silently overwrites) when a dump contains explicitx y ztogether withxs ys zsand/orxu yu zu. Cartesian columns now take priority and the scaled/unwrapped variants stay under their original names; the fallback promotion only triggers whenx y zis absent. Applies to both single-framemdapy.Systemand multi-framemdapy.Trajectoryloaders.
Mdapy 1.0.5 (May 1, 2026)ยถ
๐ New Featuresยถ
build_crystalextended to matchatomsk --createbyte-for-byte: addedsc,rocksalt,cscl,zincblende,fluorite,L1_2,perovskite,wurtzite,graphiteandlonsdaleite; multi-species via tuplename; Miller orientation for every cubic and Miller-Bravais[hkil]for every hexagonal structure.hcpandgraphenenow use atomskโs 2-atom hex primitive (atom counts halve compared with the legacy supercell).New
mdapy.orthogonal_cell(system, find_minimal=False)โ atomskโs-orthogonal-celloption.New unified
mdapy.Trajectoryclass for multi-frame XYZ + LAMMPS dump (read + write). Supports fancy indexing with integer arrays and boolean masks (e.g.traj[traj.get_atoms_count() > 100]), optionalfast_mode=Truefor vectorised XYZ reading (~5โ7ร speedup on regular files), an in-place progress bar (verbose=True, default on), and avacuum=option onsave("out.xyz", vacuum=200.0)that pads every non-periodic axis byvacuumร and centres the cluster โ useful for auto-boxing classical-XYZ training-set frames so downstream MD code sees a well-defined supercell.
๐ Bug Fixesยถ
NeighborC++ kernel now bounds-checks every write: an over-tightmax_neighraisesValueErrorinstead of silently corrupting memory.System: mutable-defaultglobal_infono longer leaks across instances;cal_centro_symmetry_parameterhonours the userโsN;cal_structure_entropykeeps both columns whenaverage_rc>0;cal_cluster_analysisraisesTypeErroron badrc;write_datano longer mutatesself.data;cal_radial_distribution_functionno longer overwrites the userโstypecolumn.BuildSystem.from_ovitotolerates sources without aparticle_typetable.IO writers:
write_xyzProperties string assembly;write_dumppreserves theelementcolumn; cross-device temp files on Windows.
๐ ๏ธ Other Improvementsยถ
Rewrote and optimized the k-nearest-neighbor algorithm; significantly faster than the previous implementation across all tested geometries.
API:
c_over_aremoved frombuild_crystal/build_heaโ passcdirectly.System.boxis now a property whose setter invalidates neighbor / Voronoi / calculator caches automatically.System.update_data: misspelledreset_calcolatorrenamed toreset_calculator(old name deprecated).Hardened IO: rewrote LAMMPS data / dump / XYZ / POSCAR / .mp readers to be format-robust (multi-space, CRLF, abc-origin triclinic, Masses element comments, image flags, etc.) and self-consistent on round-trip.
Neighbor/NearestNeighborconstructors validate inputs.Internal cleanup: 14
_enlarge_databranches collapsed into one helper;cal_*methods uniformly route throughupdate_dataso the DataFrame stays single-chunked; legacy_get_basispos_and_box_cubicremoved.Tests: +85 cases (
test_system.py,test_build_crystal.py,test_orthogonal_cell.py,test_io_*); IO references match atomsk byte-for-byte. CI is fully self-contained.Trajectory IO speedups: per-frame XYZ parser now picks
pl.read_csv(uniform single-space) or numpy split + per-columnpl.Series(multi-space); the previous Python dict-of-lists path was dropped.Reworked the entire test suite to be self-contained: reference values for every algorithm are pre-computed and committed as small
.npzfixtures undertests/fixtures/. Running the tests no longer requires OVITO, freud, ASE, pymatgen, pynep, or LAMMPS.Added a GitHub Actions workflow that runs the suite on every push and pull request (Windows + Linux + macOS, Python 3.11 / 3.12).
Mdapy 1.0.4 (April 24, 2026)ยถ
๐ New Featuresยถ
Added support for rendering structures using the Tachyon method, accelerated by multi-core CPU and GPU (an order of magnitude faster).
Added
System.cal_build_bond()to generate bond index arrays directly from neighbor information, supporting a single cutoff as well as type-pair and element-pair cutoffs.Splinenow supports three boundary conditions matchesscipy.interpolate.CubicSpline.
๐ Bug Fixesยถ
Fixed the EAM potential file reader for LAMMPS
eam/alloyformat.Fixed EAM interpolation past the tabulated rho range.
๐ ๏ธ Other Improvementsยถ
Added
tests/test_spline.pycomparing all three boundary conditions againstscipy.interpolate.CubicSplineto floating-point precision.Refactor documentation, remove all warnings and errors.
Add copyright for all codes.
Mdapy 1.0.3 (March 28, 2026)ยถ
๐ ๏ธ Other Improvementsยถ
Added explained_variance_ratio for PCA.
For these analysis methods (CNA, PTM, and IDS), simulation boxes with a thickness below 15 ร are automatically treated as small boxes.
The optimized elastic constant workflow can be validated using pymatgen.
Improved the calculator setup behavior for the System.
Fixed a bug in the minimize class.
Updated parts of the documentation.
Mdapy 1.0.2 (March 4, 2026)ยถ
๐ ๏ธ Other Improvementsยถ
Reduced the size of the published source distribution (sdist).
Added support for writing bec, stress, and virial fields in the comment line when using write_xyz.
Improved LammpsPotential handling of general simulation boxes; it can now correctly compute stress, forces, and energy for such structures.
Added newest version of NEPCPU for fixing a bug in qNEP.
Mdapy 1.0.1 (March 2, 2026)ยถ
๐ New Featuresยถ
Added support for converting VASP OUTCAR files to XYZ format for GPUMD. This supports single-point calculations, structure minimization, and AIMD multi-frame trajectories.
Added functionality to identify chemical species based on vdW-radius connectivity between atoms.
๐ ๏ธ Other Improvementsยถ
Fixed a bug in the HEA model builder.
Optimized the cfg2xyz conversion tool.
Added a neighbor-search benchmark to the documentation.
Improved the energy minimization workflow.
Optimized stress computation in
LammpsPotentialand added corresponding tests.Added support for saving BEC information in
XYZTraj.Added tests for qNEP.
Removed warnings in
test_voidby introducing an explicitimplodecast method.
๐ Build Systemยถ
Binary wheels are now built separately for each Python version, instead of using the stable ABI (> Python 3.12). This change ensures compatibility with Python 3.13, where the stable ABI is not supported.
Mdapy 1.0.0 (January 3, 2026)ยถ
๐ Summaryยถ
This is a milestone update for mdapy, featuring a near-complete rewrite of the core architecture. A primary driver for this transition was the limitations of our previous JIT dependency, Taichi; its development pace constrained our support for newer Python versions.
To ensure long-term sustainability, we have reconstructed mdapy by migrating computationally intensive kernels to C++ using the modern nanobind wrapper. As a result, mdapy now depends solely on NumPy and Polars, making it exceptionally lightweight and compatible with all modern Python environments.
Key changes include:
Engine Shift: With the removal of Taichi, mdapy now focuses on high-performance CPU computation.
GUI & Tools: Experimental Polyscope support has been removed to focus on core stability. However, a lightweight Jupyter-based GUI remains available as an optional dependency.
Modern Build System: We have transitioned from
setup.pytopyproject.toml.Reliability: Extensive test suites have been added to ensure the correctness of all algorithms.
This is a brand-new foundation for the project, and we strongly recommend all users to upgrade.
๐ New featuresยถ
qNEP Integration: Support for evaluating energy, force, virial, charge, and BEC properties.
Structural Analysis: Added Static Structure Factors and the Wigner-Seitz method for point defect detection.
Mechanical Properties: Support for calculating elastic constants.
I/O Enhancements: Added XYZ trajectory loading and introduced the MP file format (Parquet-based), providing high-speed I/O and efficient storage.
Minimization: Improved FIRE2 method for energy minimization with cell optimization.
GPUMD Ecosystem: A series of new features compatible with the GPUMD economy.
๐ ๏ธ Other improvementsยถ
Compatibility: Full support for Python >= 3.9.
Reliability: Significantly expanded test case coverage.
Efficiency: Optimized import overhead;
import mdapyis now significantly faster.
โ ๏ธ Limitationsยถ
Documentation: The documentation is currently being updated and is not yet complete. We are actively working on this and welcome any community contributions or feedback.