Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

MDAPY

Fast building, analysis, simulation and visualization of atomistic systems, in Python.

Tests Coverage Python 3.11 or newer Linux, macOS, Windows License: MPL-2.0 Paper: Comput. Phys. Commun. 290, 108764

Documentation · Quick tour · Lessons · Examples · Install · Tests · Cite

MDAPY 2.0 is a complete rewrite and is not compatible with MDAPY 1.x. It brings many more features, and we recommend upgrading. The code of 1.x stays on the branch 1.x.

If you like MDAPY, please give it a ⭐ star.

💡 Why MDAPY

  • Light. NumPy and polars are its only requirements. Packages such as matplotlib or ASE are optional, and it carries no other third-party code.
  • Robust. Tests cover more than 99 % of the code and compare each feature with analytic results and with mature software. All of them run automatically on Linux, macOS and Windows. Results are the same for any number of threads, and damaged files or impossible inputs give a clear error, not a crash.
  • Fast. The heavy parts run in C++, on a parallel engine of MDAPY's own. See the benchmarks.
  • Predictable. Names say what the code does: minimize, elastic_constants, CommonNeighborAnalysis. A System never changes in place, every analysis has the form compute(system) and returns NumPy arrays, and one unit system, Å, eV and ps, runs through everything.
  • Integrated. One package and one System, from the first structure to the last picture. It converts systems to and from ASE, OVITO, pymatgen and freud, takes any ASE calculator or LAMMPS interaction, shares a process with PyTorch, and works as one step of high-throughput calculations.
  • Documented. Every feature has its own page, with an example, its parameters, its results and its references, and lessons lead from the first structure on.

🧰 What it does

Area What is in it
Build Crystals, polycrystals, alloys, defects and dislocations
Analyze More than 40 analyses of structure, local order, defects and dynamics
Simulate Native EAM and NEP, interfaces to LAMMPS and ASE; relaxation and dynamics; elastic constants, phonons, free energies, melting points and phase diagrams
MLIP Training sets from VASP, descriptors, errors of a model, the frames worth computing
Visualize Ray-traced pictures on the processor or the graphics card, movies and plots
Exchange Eight file formats, and systems shared with ASE, OVITO, pymatgen and freud

🎨 Examples

One copper polycrystal, from nothing to a movie.

BuildGrains, 81,734 atoms
import mdapy as mp
from mdapy.build import build_crystal, build_polycrystal
from mdapy.visualization import render

copper = build_crystal("fcc", 3.615, elements="Cu")
grains = build_polycrystal(copper, mp.Box(100.0), 8, seed=1)
render(grains, "grains.png", color="grain")
A polycrystal colored by grain
AnalyzeThe atoms that are not fcc
from mdapy.identify import CommonNeighborAnalysis

structures = CommonNeighborAnalysis().compute(grains)
structures.counts()  # {'other': 21162, 'fcc': 60691, ...}
boundaries = structures.structure != 1  # not fcc
render(grains, "boundaries.png", atoms=boundaries, color=structures)
The grain boundaries of the polycrystal
SimulatePhonons of copper
from mdapy.calculators import EAM
from mdapy.lattice_dynamics import phonons, primitive_cell
from mdapy.simulation import minimize
from mdapy.visualization import plot

eam = EAM.zhou(["Cu"])
relaxed = minimize(copper, eam, cell="full", max_stress=1e-4)
cell = primitive_cell(relaxed.system)
bands = phonons(cell, eam).band_structure("fcc")
with plot.style():
    fig, ax = plot.figure()
    plot.band_structure(bands, ax=ax)
    plot.save(fig, "phonons", formats=("png",))
The phonon dispersion of copper
MLIPThe 20 frames most worth a DFT calculation
from mdapy import mlip

crystal = build_crystal("fcc", 3.615, elements="Cu", repeat=(3, 3, 3))
frames = mlip.perturb(crystal, 200, displacement=0.1, seed=1)
points = mlip.structure_descriptors(frames, mlip.SOAP(["Cu"]))
chosen = mlip.farthest_point_sampling(points, 20)

xy = mlip.principal_components(points).transform(points)
with plot.style():
    fig, ax = plot.figure()
    ax.scatter(*xy.T, s=4, color="0.7", label="all frames")
    ax.scatter(*xy[chosen].T, s=12, label="chosen")
    ax.set_xlabel("principal component 1")
    ax.set_ylabel("principal component 2")
    ax.legend()
    plot.save(fig, "frames", formats=("png",))
Frames on the map of their descriptors, with those chosen

Make a movie

A movie that flies through a copper polycrystal

See A movie that flies through a crystal for the whole script.

📦 Install

pip install --pre mdapy

The first release of 2.0 is a preview, and --pre asks pip for it: without it, pip installs 1.x. MDAPY needs Python 3.11 or newer. Installation describes the other ways to install it, from a source archive or from git, what those need, and the optional packages.

🧪 Tests

git clone https://github.com/mushroomfire/mdapy.git
cd mdapy
pip install -e ".[dev]"
pytest

Tests that need another program are skipped where it is missing. Contributing lists what a complete run needs.

📖 Citing MDAPY

If MDAPY contributes to a publication, please cite:

Yong-Chao Wu and Jian-Li Shao, mdapy: A flexible and efficient analysis software for molecular dynamics simulations, Computer Physics Communications 290, 108764 (2023). doi:10.1016/j.cpc.2023.108764

📄 License

Mozilla Public License 2.0, see LICENSE: MDAPY may be used in any software, open or closed, and changes to its own files are shared under the same license.

📜 Code history

MDAPY has been written three times.

Series Years How it was built Code
0.x 2022–2025 Python, with Taichi for the kernels Branch mdapy_old, last release 0.11.5
1.x 2025–2026 Rewritten with every kernel in C++, and with NumPy and polars as its only requirements Branch 1.x, last release 1.0.10, documentation
2.x 2026– Rewritten again from scratch, for the reasons below This branch

Taichi was no longer updated, which also limited the versions of Python that 0.x could run on. 1.x was rewritten to be easy to update and maintain, and it needs only NumPy and polars, no longer SciPy and Taichi.

2.x goes further: it is easier to maintain, more stable and more consistent, lighter without external code, with many more features and a clearer organization. In particular:

  • OpenMP. The OpenMP runtime of 1.x could clash with those of other packages. 2.x runs a thread pool of its own, so it shares a process with PyTorch and LAMMPS.
  • Third-party code. 1.x carried ten third-party codes to build and keep working. 2.x carries none.
  • The API. In 1.x an analysis was a method that changed the system. In 2.x a System never changes and every analysis is a class with one form.
  • Tests. Tests cover more than 99 % of the code and compare each feature with analytic results and with mature software, which makes 2.x more stable.
  • Many small calculations. The threads can be limited for each process, so thousands of small calculations side by side do not fight for cores.
  • Graphical interfaces. Long computations report their progress, can be cancelled and leave Python running, so a graphical interface is easy to build on 2.x.

Metadata

Release files for mdapy 2.0.0a2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mdapy 2.0.0a2
File Size Uploaded Provenance Actions
mdapy-2.0.0a2.tar.gz 669.7 kB With provenance Details for mdapy-2.0.0a2.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for mdapy 2.0.0a2
File Actions
mdapy-2.0.0a2-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details for mdapy-2.0.0a2-cp312-abi3-win_amd64.whl
mdapy-2.0.0a2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for mdapy-2.0.0a2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
mdapy-2.0.0a2-cp312-abi3-macosx_14_0_arm64.whl CPython 3.12 abi3 macOS 14.0+ ARM64 Details for mdapy-2.0.0a2-cp312-abi3-macosx_14_0_arm64.whl
mdapy-2.0.0a2-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for mdapy-2.0.0a2-cp311-cp311-win_amd64.whl
mdapy-2.0.0a2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for mdapy-2.0.0a2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
mdapy-2.0.0a2-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details for mdapy-2.0.0a2-cp311-cp311-macosx_14_0_arm64.whl

Total release size: 8.4 MB

Release files / mdapy-2.0.0a2.tar.gz

Download URL mdapy-2.0.0a2.tar.gz
Size 669.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e76d46bd95e0380968766ac13c68dc0219966e439989e199bf9e179cce9d08ac
BLAKE2b-256 checksum
How to use checksums
b6af298b75edaaa26dd3449e75814c94a076e5adb45843db8209d24a80458d4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / mdapy-2.0.0a2-cp312-abi3-win_amd64.whl

Download URL mdapy-2.0.0a2-cp312-abi3-win_amd64.whl
Size 1.4 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
eee9e851409b5aec8508bd3b7161c221a95b75e111d2a7d9121efee62d2b6505
BLAKE2b-256 checksum
How to use checksums
87a7c0dd003671cb9a4188e2aaf641692b9b5118b707d4523ff004a25c9b2cdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / mdapy-2.0.0a2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL mdapy-2.0.0a2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
1a3c9b3509a1e9802fb1ff7b7e48b09e59c2deecd7a6665a3019316d524b8e57
BLAKE2b-256 checksum
How to use checksums
488850ae16afc6a23793f1bc802a918c0ea27d0ed1c5e38cbac5ce1b4638ca9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / mdapy-2.0.0a2-cp312-abi3-macosx_14_0_arm64.whl

Download URL mdapy-2.0.0a2-cp312-abi3-macosx_14_0_arm64.whl
Size 1.1 MB
Tags CPython 3.12 abi3 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
3abf27d1f82899e0da9442db1ed0f61d35867609dd9b7b5a5f8c2576e58bf978
BLAKE2b-256 checksum
How to use checksums
cf4851cd623c87bf9d9647ed5cbc1dc6bd49aa6a334890a490f4c253b4f3e81f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / mdapy-2.0.0a2-cp311-cp311-win_amd64.whl

Download URL mdapy-2.0.0a2-cp311-cp311-win_amd64.whl
Size 1.4 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
2cf34fb97ea5691d89d94719a54e4db78285c3415b915b3b32bdb06352cdbaab
BLAKE2b-256 checksum
How to use checksums
a5538cddb117da228bbd8b1801308446e08d7f1754773db1d91ba7f65d4cd8de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / mdapy-2.0.0a2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL mdapy-2.0.0a2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8da1d701f0d0c44253e574f3d2b8b3f736a28a38acc3fd4f50b4c97359b1a3f9
BLAKE2b-256 checksum
How to use checksums
05bad6276f5c95f3ec145684fc7e37345838178c58ffebd89ec1cc761b931f75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / mdapy-2.0.0a2-cp311-cp311-macosx_14_0_arm64.whl

Download URL mdapy-2.0.0a2-cp311-cp311-macosx_14_0_arm64.whl
Size 1.1 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
27bd76cc29a3a9b1f80b730bb747f08bea0cf0bc0d221c3e91a50a3166d5f51d
BLAKE2b-256 checksum
How to use checksums
74d8e5b5eefbebe0a17fe1e2e386056e989b569b7427889752764a0e1e172362
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Security for mdapy 2.0.0a2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 7 files in this release have been uploaded with provenance metadata.

Select from 7 files

Attestation for mdapy-2.0.0a2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page