Skip to main content

PESMaker potential energy surface banner

PESMaker

PESMaker, short for Potential Energy Surface Maker, is a lightweight workflow package for building application-oriented datasets for machine-learned interatomic potentials from user-provided atomistic structures.

It is designed for practical materials workflows where you already have meaningful structures, such as bulk phases, surfaces, defects, interfaces, or reaction candidates, and need to turn them into reproducible DFT labeling jobs and training inputs.

Why PESMaker

PESMaker helps you move from structures to MLIP training data without turning the workflow into one large hidden script:

  • generate supercells, surface slabs, vacancies, line defects, and optional perturbed structures from CIF, POSCAR, XYZ, and other ASE-readable inputs;
  • keep every generated structure traceable through manifest.jsonl and human-readable summaries;
  • prepare VASP SCF folders with POSCAR, INCAR, optional POTCAR, and submit.sh;
  • submit prepared jobs through machine-specific Slurm templates;
  • collect completed SCF outputs into an extxyz training set;
  • prepare NEP training folders while keeping sampling, labeling, collection, and training as separate inspectable stages.

PESMaker is user-structure-driven rather than random-search-first. The intended use case is targeted dataset construction for batteries, solid electrolytes, thermal transport, alloys, 2D materials, defects, surfaces, catalysis, and reactions.

Installation

PESMaker requires Python 3.10 or newer.

Install From PyPI

After the first PESMaker release is published to PyPI, install the stable package with:

python -m pip install pesmaker
pesmaker --help

Install an optional descriptor backend when needed:

# GPUMD trajectories: Calorine NEP descriptors
python -m pip install "pesmaker[selection]"

# MACE trajectories: MACECalculator descriptors
python -m pip install "pesmaker[mace]"

# Both descriptor backends
python -m pip install "pesmaker[selection,mace]"

Install The Latest GitHub Version

This works before the first PyPI release and installs the current main branch:

python -m pip install "git+https://github.com/Tingliangstu/PESMaker.git@main"
pesmaker --help

Optional extras also work with the GitHub URL:

python -m pip install "pesmaker[mace] @ git+https://github.com/Tingliangstu/PESMaker.git@main"

Install From A Source Checkout

Use this method for development or offline installation:

git clone https://github.com/Tingliangstu/PESMaker.git
cd PESMaker
python -m pip install .
pesmaker --help

No internet: copy or unzip the PESMaker source folder, enter that folder, then run python -m pip install ..

Installation test:

python -m pytest

This runs the test files in tests/ and checks that the installed Python package, config parser, structure tools, CLI functions, and workflow logic work. If pytest is not installed, install the small test dependency once:

python -m pip install ".[dev]"
python -m pytest

Updating an Existing Checkout

For a PyPI installation:

python -m pip install --upgrade pesmaker

For a source checkout on main:

git pull --ff-only
python -m pip install .

If you are not sure where you are:

cd ~/software/PESMaker
git switch main
git pull --ff-only
python -m pip install .

No internet: copy or unzip a newer PESMaker source folder, then reinstall:

cd /path/to/PESMaker
python -m pip install .

Workflow

For most runs, validate the YAML and then let next advance the workflow until it reaches a submit preview, waits for external results, or finishes the local steps:

pesmaker validate run.yaml
pesmaker next run.yaml

You do not need to write a workflow name. PESMaker infers the flow from the YAML sections and existing artifacts. For example, a config with sampling.engine and sampling.selection will prepare sampling, wait for MD trajectories, select frames, then continue to SCF and training if those sections are configured.

If the YAML only contains structure generation settings, next generates the structures and stops. It writes run.next.yaml as a simple VASP SCF template; edit the INCAR, POTCAR, VASP, and submit-script paths there, then run pesmaker next run.next.yaml.

next never submits jobs for real. At a sampling, SCF, or training submit boundary it writes a dry-run log, records the gate in .pesmaker/<project>/next_state.json, and prints the command to submit manually. The printed line names the stage, for example Submit SCF jobs or Submit sampling jobs.

The default next output is intentionally short: it shows the current Next flow, Work done, and Next. Use pesmaker status run.yaml or pesmaker next run.yaml --verbose when you want detailed flow diagnostics.

Manual direct generation and DFT labeling:

pesmaker generate run.yaml
pesmaker scf-setup run.yaml
pesmaker submit run.yaml --dry-run
pesmaker submit run.yaml
pesmaker collect run.yaml

Manual sampling, labeling, and training loop:

pesmaker generate run.yaml
pesmaker sample-setup run.yaml
pesmaker submit run.yaml --stage sampling
pesmaker select run.yaml
pesmaker scf-setup run.yaml
pesmaker submit run.yaml
pesmaker collect run.yaml
pesmaker train-setup run.yaml
pesmaker submit run.yaml --stage training

submit always submits the stage scripts prepared by an earlier setup command. Without --stage, it submits the SCF labeling stage by default.

generated/   # supercells, surfaces, defects, optional perturbations
sampling/    # GPUMD or LAMMPS-MACE MD job folders and submit scripts
selected/    # representative frames selected from trajectories
labeling/    # VASP SCF calculation folders
train.xyz    # collected labeled dataset
training/    # NEP training input folder and submit script

Examples

Minimal YAML examples are grouped by task type in the documentation:

See the minimal YAML examples.

Documentation

Start with the Quick Start. The online manual also contains the command reference and minimal YAML examples.

The intended GitHub Pages URL is:

https://Tingliangstu.github.io/PESMaker/

Current Scope

Current implemented stages cover structure generation, GPUMD sampling setup, LAMMPS-MACE sampling setup, engine-matched NEP or MACE descriptor FPS, VASP SCF setup, scheduler submission, extxyz dataset collection, and NEP training setup.

License

PESMaker is free software distributed under the GNU General Public License, version 3 of the License, or (at your option) any later version. See LICENSE and NOTICE for details.

Metadata

Release files for pesmaker 0.1.0

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

Source distribution (sdist)

Source distribution for pesmaker 0.1.0
File Size Uploaded Provenance Actions
pesmaker-0.1.0.tar.gz 91.9 kB With provenance Details for pesmaker-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pesmaker 0.1.0
File Interpreter ABI Platform Actions
pesmaker-0.1.0-py3-none-any.whl Python 3 none any Details for pesmaker-0.1.0-py3-none-any.whl

Total release size: 189.5 kB

Release files / pesmaker-0.1.0.tar.gz

Download URL pesmaker-0.1.0.tar.gz
Size 91.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f533580e97d06f518aed5aafe6e5bdbd1fd9f18dce0256d8b49a9af96e032d29
BLAKE2b-256 checksum
How to use checksums
2eaffe2d46ecf52e012f7ee57ef397d1ba29c390bf414438d3c625c6b20ca640
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 10, 2026.

Transparency log

Release files / pesmaker-0.1.0-py3-none-any.whl

Download URL pesmaker-0.1.0-py3-none-any.whl
Size 97.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
85a37548f25bc212c30d1ae434e411392b1ca44a090ff923d59b04404f3d1f8d
BLAKE2b-256 checksum
How to use checksums
213860e2e7c53caa1de8161bc3ccb004b58cc99f7b2aed4f4c29eb6140ee61c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 10, 2026.

Transparency log

Security for pesmaker 0.1.0

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 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pesmaker-0.1.0.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 Jun 10, 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

0.1.0 This release

2 release files Full provenance

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