skills/dpdata-minimizer/SKILL.md
Minimize geometries with dpdata minimizer plugins via System.minimize(), including how minimizers relate to drivers (ASEMinimizer needs a dpdata Driver) and how to list supported minimizers (ase/sqm). Use when doing geometry optimization/minimization through dpdata Python API.
npx skillsauth add deepmodeling/dpdata dpdata-minimizerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use dpdata “minimizer plugins” to optimize/minimize geometry and return a dpdata.LabeledSystem.
System.minimize(*args, minimizer: str|Minimizer, **kwargs) -> LabeledSystem
from dpdata.driver import Minimizer
print(sorted(Minimizer.get_minimizers().keys()))
In the current dpdata repo, minimizer keys include:
asesqmSome minimizers require a dpdata Driver object.
Example: ASEMinimizer takes a dpdata Driver in its constructor:
minimizer="ase" requires driver=<dpdata Driver> (e.g. the ASE driver wrapping an ASE calculator).So you generally do:
System.minimize(...)Use uv inline script metadata so the example runs reproducibly with uv run.
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "dpdata",
# "numpy",
# "ase",
# ]
# ///
import numpy as np
from ase.calculators.emt import EMT
from dpdata.driver import Driver
from dpdata.system import System
open("tmp.xyz", "w").write("""2\n\nH 0 0 0\nH 0 0 0.74\n""")
sys = System("tmp.xyz", fmt="xyz")
# Build a dpdata driver that can provide energies/forces to ASE optimizers.
ase_driver = Driver.get_driver("ase")(calculator=EMT())
# Minimize using the ASE minimizer plugin.
# NOTE: ASEMinimizer expects `driver` (not `calculator`) as input.
ls = sys.minimize(minimizer="ase", driver=ase_driver, fmax=0.05, max_steps=5)
print("coords", np.array(ls.data["coords"]).shape)
print("energies", np.array(ls.data["energies"]))
print("forces", np.array(ls.data["forces"]).shape)
System.minimize(...) accepts either a minimizer key string or a Minimizer object.System.predict(driver="ase", calculator=...), be aware that minimization is different: you need to pass a driver into the minimizer (ASEMinimizer does not accept calculator=).sqm minimizer requires AmberTools sqm executable and typically won’t be runnable in CI.tools
Create and install dpdata plugins (especially custom Format readers/writers) using Format.register(...) and pyproject.toml entry_points under 'dpdata.plugins'. Use when extending dpdata with new formats or distributing plugins as separate Python packages.
tools
Use dpdata Python Driver plugins to label systems (energies/forces/virials) via System.predict(), list available drivers, and build Driver objects (ase/deepmd/gaussian/sqm/hybrid). Use when working with dpdata Python API (not CLI) and you need driver-based energy/force prediction, plugin registration keys, or examples of using dpdata with ASE calculators or DeePMD models.
tools
Convert and manipulate atomic simulation data formats using dpdata CLI. Use when converting between DFT/MD output formats (VASP, LAMMPS, QE, CP2K, Gaussian, ABACUS, etc.), preparing training data for DeePMD-kit, or working with DeePMD formats. Supports 50+ formats including deepmd/raw, deepmd/comp, deepmd/npy, deepmd/hdf5.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.