atst-tools 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. atst_tools-2.0.0/PKG-INFO +304 -0
  2. atst_tools-2.0.0/README.md +289 -0
  3. atst_tools-2.0.0/pyproject.toml +35 -0
  4. atst_tools-2.0.0/setup.cfg +4 -0
  5. atst_tools-2.0.0/src/atst_tools/__init__.py +51 -0
  6. atst_tools-2.0.0/src/atst_tools/calculators/__init__.py +0 -0
  7. atst_tools-2.0.0/src/atst_tools/calculators/abacuslite_backend.py +81 -0
  8. atst_tools-2.0.0/src/atst_tools/calculators/base.py +10 -0
  9. atst_tools-2.0.0/src/atst_tools/calculators/dp.py +112 -0
  10. atst_tools-2.0.0/src/atst_tools/calculators/factory.py +126 -0
  11. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/__init__.py +1 -0
  12. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/__init__.py +13 -0
  13. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/core.py +655 -0
  14. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/io/__init__.py +0 -0
  15. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/io/generalio.py +830 -0
  16. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/io/latestio.py +677 -0
  17. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/io/legacyio.py +1193 -0
  18. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/utils/__init__.py +0 -0
  19. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/abacuslite/utils/ksampling.py +260 -0
  20. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/bandstructure.py +82 -0
  21. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/cellrelax.py +76 -0
  22. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/constraintmd.py +101 -0
  23. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/dos.py +65 -0
  24. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/md.py +72 -0
  25. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/metadynamics.py +146 -0
  26. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/neb.py +111 -0
  27. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/relax.py +67 -0
  28. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/scf.py +56 -0
  29. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/examples/soc.py +63 -0
  30. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/tests/band.py +61 -0
  31. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/tests/magnetic.py +129 -0
  32. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/tests/md.py +50 -0
  33. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/tests/relax.py +47 -0
  34. atst_tools-2.0.0/src/atst_tools/external/ASE_interface/tests/scf.py +39 -0
  35. atst_tools-2.0.0/src/atst_tools/external/__init__.py +1 -0
  36. atst_tools-2.0.0/src/atst_tools/mep/__init__.py +4 -0
  37. atst_tools-2.0.0/src/atst_tools/mep/autoneb.py +535 -0
  38. atst_tools-2.0.0/src/atst_tools/mep/dimer.py +241 -0
  39. atst_tools-2.0.0/src/atst_tools/mep/neb.py +169 -0
  40. atst_tools-2.0.0/src/atst_tools/mep/sella.py +105 -0
  41. atst_tools-2.0.0/src/atst_tools/scripts/__init__.py +0 -0
  42. atst_tools-2.0.0/src/atst_tools/scripts/cli.py +543 -0
  43. atst_tools-2.0.0/src/atst_tools/scripts/main.py +629 -0
  44. atst_tools-2.0.0/src/atst_tools/scripts/neb_make.py +65 -0
  45. atst_tools-2.0.0/src/atst_tools/scripts/neb_post.py +46 -0
  46. atst_tools-2.0.0/src/atst_tools/utils/__init__.py +0 -0
  47. atst_tools-2.0.0/src/atst_tools/utils/abacus_io.py +231 -0
  48. atst_tools-2.0.0/src/atst_tools/utils/analysis.py +57 -0
  49. atst_tools-2.0.0/src/atst_tools/utils/config.py +89 -0
  50. atst_tools-2.0.0/src/atst_tools/utils/config_docs.py +189 -0
  51. atst_tools-2.0.0/src/atst_tools/utils/config_schema.py +522 -0
  52. atst_tools-2.0.0/src/atst_tools/utils/idpp.py +422 -0
  53. atst_tools-2.0.0/src/atst_tools/utils/io.py +61 -0
  54. atst_tools-2.0.0/src/atst_tools/utils/neb_endpoints.py +125 -0
  55. atst_tools-2.0.0/src/atst_tools/utils/post.py +134 -0
  56. atst_tools-2.0.0/src/atst_tools/utils/restart_helpers.py +157 -0
  57. atst_tools-2.0.0/src/atst_tools/utils/thermochemistry.py +109 -0
  58. atst_tools-2.0.0/src/atst_tools/workflows/__init__.py +0 -0
  59. atst_tools-2.0.0/src/atst_tools/workflows/d2s.py +299 -0
  60. atst_tools-2.0.0/src/atst_tools/workflows/irc.py +163 -0
  61. atst_tools-2.0.0/src/atst_tools/workflows/relax.py +116 -0
  62. atst_tools-2.0.0/src/atst_tools/workflows/vibration.py +136 -0
  63. atst_tools-2.0.0/src/atst_tools.egg-info/PKG-INFO +304 -0
  64. atst_tools-2.0.0/src/atst_tools.egg-info/SOURCES.txt +66 -0
  65. atst_tools-2.0.0/src/atst_tools.egg-info/dependency_links.txt +1 -0
  66. atst_tools-2.0.0/src/atst_tools.egg-info/entry_points.txt +2 -0
  67. atst_tools-2.0.0/src/atst_tools.egg-info/requires.txt +8 -0
  68. atst_tools-2.0.0/src/atst_tools.egg-info/top_level.txt +1 -0
@@ -0,0 +1,304 @@
1
+ Metadata-Version: 2.4
2
+ Name: atst-tools
3
+ Version: 2.0.0
4
+ Summary: Advanced ASE Transition State Tools for ABACUS and Deep-Potential
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: ase>=3.28.0
8
+ Requires-Dist: numpy
9
+ Requires-Dist: scipy
10
+ Requires-Dist: matplotlib
11
+ Requires-Dist: pydantic<3,>=2
12
+ Requires-Dist: ruamel.yaml
13
+ Requires-Dist: seekpath
14
+ Requires-Dist: sella
15
+
16
+ # ATST-Tools
17
+
18
+ [![Version](https://img.shields.io/badge/version-2.0.0-blue)](pyproject.toml)
19
+ [![Unit test coverage](https://img.shields.io/badge/unit%20test%20coverage-66%25-yellowgreen)](#validation)
20
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.9-blue)](pyproject.toml)
21
+ [![License](https://img.shields.io/badge/license-LGPL--v3-blue)](#license)
22
+
23
+ ATST-Tools is a pip-installable **ASE transition-state workflow toolkit** for
24
+ ABACUS and DeePMD-kit calculators. It turns the project's legacy script
25
+ collection into one governed command-line interface:
26
+
27
+ ```bash
28
+ atst run CONFIG.yaml
29
+ ```
30
+
31
+ Use it when you want repeatable NEB, AutoNEB, Dimer, Sella, D2S, relaxation,
32
+ vibration, or IRC calculations driven by YAML instead of one-off Python scripts.
33
+
34
+ ## At A Glance
35
+
36
+ | Area | Current 2.0.0 status |
37
+ | :--- | :--- |
38
+ | Package | Installable Python package with the `atst` console command. |
39
+ | Main interface | `atst run CONFIG.yaml` for all calculator-backed workflows. |
40
+ | Lightweight tools | `atst config`, `atst abacus`, `atst neb`, `atst traj`, `atst dimer`, `atst relax`, `atst vibration`. |
41
+ | Calculators | ABACUS through `abacuslite`; DeePMD-kit through `deepmd.calculator.DP`. |
42
+ | Configuration | Pydantic-governed YAML schema with generated user documentation. |
43
+ | Validation | Unit tests, example dry-runs, SAI ABACUS evidence, and DP/DPA smoke validation. |
44
+ | Release | `2.0.0`, documented in [release notes](docs/releases/RELEASE_NOTES_2.0.0.md). |
45
+
46
+ ## What You Can Run
47
+
48
+ | `calculation.type` | Workflow | Notes |
49
+ | :--- | :--- | :--- |
50
+ | `neb` | NEB / DyNEB | Endpoint single-point governance is enabled by default. |
51
+ | `autoneb` | AutoNEB | Adaptive image insertion plus final-chain post-processing. |
52
+ | `d2s` | Double-ended to single-ended TS search | Rough NEB followed by Dimer or Sella. |
53
+ | `dimer` | ASE Dimer | Single-ended transition-state search. |
54
+ | `sella` | Sella saddle search | Uses the external `sella` package. |
55
+ | `relax` | Structure optimization | ASE optimizer based relaxation. |
56
+ | `vibration` | Vibrations and thermochemistry | Harmonic and ideal-gas helpers. |
57
+ | `irc` | Sella IRC | Sella-backed IRC orchestration with controlled boundary diagnostics. |
58
+
59
+ Local pre/post-processing commands are intentionally lightweight. They do not
60
+ construct calculators or submit expensive calculations:
61
+
62
+ ```bash
63
+ atst neb make ...
64
+ atst neb post ...
65
+ atst traj collect ...
66
+ atst traj transform ...
67
+ atst dimer make-from-neb ...
68
+ atst relax post ...
69
+ atst vibration post ...
70
+ atst config validate ...
71
+ atst abacus prepare ...
72
+ atst abacus collect ...
73
+ ```
74
+
75
+ ## Installation
76
+
77
+ ### Development Install
78
+
79
+ ```bash
80
+ git clone https://github.com/deepmodeling/atst-tools.git
81
+ cd atst-tools
82
+ pip install -e .
83
+ ```
84
+
85
+ ### Wheel Install
86
+
87
+ Build a local release artifact:
88
+
89
+ ```bash
90
+ python -m build
91
+ pip install dist/atst_tools-2.0.0-py3-none-any.whl
92
+ ```
93
+
94
+ ATST-Tools itself installs the Python workflow layer. Real calculations also
95
+ need the selected calculator runtime:
96
+
97
+ - **ABACUS**: an executable ABACUS installation plus pseudopotential/orbital
98
+ files referenced by YAML.
99
+ - **DP / DeePMD-kit**: a working DeePMD-kit Python installation and a model file
100
+ outside git-tracked paths.
101
+
102
+ ## Quick Start
103
+
104
+ Run a small relaxation example:
105
+
106
+ ```bash
107
+ cd examples/06_relax_H2-Au
108
+ atst run config.yaml
109
+ ```
110
+
111
+ Validate an input without launching the calculation:
112
+
113
+ ```bash
114
+ atst run --dry-run examples/06_relax_H2-Au/config.yaml
115
+ atst config validate examples/06_relax_H2-Au/config.yaml --print-normalized
116
+ ```
117
+
118
+ Print a schema-governed template:
119
+
120
+ ```bash
121
+ atst run --show-template neb --calculator abacus
122
+ atst run --show-template neb --calculator dp
123
+ ```
124
+
125
+ List available workflow types:
126
+
127
+ ```bash
128
+ atst run --list-types
129
+ ```
130
+
131
+ ## Minimal YAML Shape
132
+
133
+ Every production workflow uses the same top-level structure:
134
+
135
+ ```yaml
136
+ calculation:
137
+ type: neb
138
+ init_chain: inputs/init_neb_chain.traj
139
+ fmax: 0.05
140
+ max_steps: 100
141
+ climb: true
142
+
143
+ calculator:
144
+ name: abacus
145
+ abacus:
146
+ command: abacus
147
+ mpi: 4
148
+ omp: 1
149
+ directory: run_neb
150
+ kpts: [2, 2, 2]
151
+ parameters:
152
+ calculation: scf
153
+ ecutwfc: 100
154
+ basis_type: lcao
155
+ ```
156
+
157
+ The governed schema defines defaults, types, and descriptions for user-facing
158
+ inputs. See [YAML input variables](docs/user/YAML_INPUT_VARIABLES.md) for the
159
+ generated reference and [configuration reference](docs/user/CONFIG_REFERENCE.md)
160
+ for hand-written guidance.
161
+
162
+ ## Calculator Backends
163
+
164
+ ### ABACUS
165
+
166
+ ABACUS is integrated through `abacuslite`. ATST-Tools first tries an installed
167
+ `abacuslite` package and then falls back to the vendored snapshot under
168
+ `src/atst_tools/external/ASE_interface/abacuslite`.
169
+
170
+ Typical example files use:
171
+
172
+ ```yaml
173
+ calculator:
174
+ name: abacus
175
+ abacus:
176
+ command: abacus
177
+ mpi: 4
178
+ omp: 1
179
+ pseudo_dir: ../data
180
+ orbital_dir: ../data
181
+ ```
182
+
183
+ ATST-Tools is a layered `abacuslite` wrapper. Calculator-backed workflows such
184
+ as NEB, D2S, Dimer, Sella, Relax, Vibration, and IRC still run through
185
+ `atst run CONFIG.yaml`; local ABACUS helpers support safe input preparation and
186
+ result collection:
187
+
188
+ ```bash
189
+ atst abacus prepare config.yaml --structure inputs/init.stru --output-dir abacus_input
190
+ atst abacus collect run_neb --output abacus_results.json
191
+ ```
192
+
193
+ These helper commands do not run ABACUS and do not submit Slurm jobs.
194
+
195
+ ### DeePMD-kit / DP
196
+
197
+ DP support uses the official ASE calculator entry point,
198
+ `deepmd.calculator.DP`. DeePMD-kit detects the model backend from the model
199
+ file. Multi-head DPA/DPA3 models are configured through `calculator.dp.head`.
200
+
201
+ ```yaml
202
+ calculator:
203
+ name: dp
204
+ dp:
205
+ model: ../../temp_repos/dp_model/DPA-3.1-3M.pt
206
+ head: Omat24
207
+ omp: 4
208
+ share_calculator: true
209
+ ```
210
+
211
+ The 2.0.0 DP validation used DPA-3.1-3M with the `Omat24` head. Model files and
212
+ runtime outputs are intentionally not tracked by git.
213
+
214
+ ## Examples
215
+
216
+ The [examples directory](examples/README.md) is the fastest way to learn the
217
+ project:
218
+
219
+ | Directory | Workflow focus |
220
+ | :--- | :--- |
221
+ | `examples/01_neb_Li-Si` | Quick NEB smoke case. |
222
+ | `examples/02_neb_H2-Au` | Surface NEB example. |
223
+ | `examples/03_autoneb_Cy-Pt` | AutoNEB workflow. |
224
+ | `examples/04_dimer_CO-Pt` | Dimer transition-state search. |
225
+ | `examples/05_sella_H2-Au` | Sella saddle search. |
226
+ | `examples/06_relax_H2-Au` | Geometry relaxation. |
227
+ | `examples/07_vibration_H2-Au` | Surface vibration analysis. |
228
+ | `examples/08_d2s_Cy-Pt` | Rough NEB plus single-ended TS search. |
229
+ | `examples/09_lightweight_cli` | Local helper command examples. |
230
+ | `examples/10_irc_H2` | IRC YAML examples. |
231
+ | `examples/11_vibration_ideal_gas_H2` | Ideal-gas thermochemistry example. |
232
+
233
+ Each calculation example uses `config.yaml` for ABACUS and, where available,
234
+ `config_dp.yaml` for DP.
235
+
236
+ ## Validation
237
+
238
+ The 2.0.0 README badges reflect the current governed project state:
239
+
240
+ - Version badge: `pyproject.toml` -> `[project].version` -> `2.0.0`.
241
+ - Unit test coverage badge: measured with
242
+ `coverage run --source=src/atst_tools -m pytest tests -q`, then reported with
243
+ `coverage report --omit='src/atst_tools/external/*'`.
244
+ - Current first-party unit test coverage: `66%`.
245
+ - Full source-tree coverage including the vendored `abacuslite` snapshot:
246
+ `43%`.
247
+
248
+ The vendored `src/atst_tools/external/ASE_interface` tree is kept for ABACUS
249
+ backend reproducibility and is not treated as first-party ATST-Tools coverage.
250
+
251
+ ## For Developers
252
+
253
+ The main extension points are deliberately small:
254
+
255
+ | Task | Start here |
256
+ | :--- | :--- |
257
+ | Add or change YAML inputs | `src/atst_tools/utils/config_schema.py` |
258
+ | Regenerate YAML docs | `python -m atst_tools.utils.config_docs` |
259
+ | Add a calculator backend | `src/atst_tools/calculators/` |
260
+ | Add an `atst run` workflow | `src/atst_tools/scripts/main.py` and `src/atst_tools/workflows/` |
261
+ | Add lightweight CLI commands | `src/atst_tools/scripts/cli.py` plus focused command modules |
262
+ | Add examples | `examples/<case>/config.yaml` and curated `inputs/` |
263
+
264
+ Developer documentation:
265
+
266
+ - [Documentation index](docs/index.md)
267
+ - [YAML input governance](docs/developer/YAML_INPUT_GOVERNANCE.md)
268
+ - [Documentation standards](docs/developer/DOCUMENTATION_STANDARDS.md)
269
+ - [ABACUS wrapper guide](docs/user/ABACUSLITE_WRAPPER_GUIDE.md)
270
+ - [Maintained atst-cli skill](docs/skills/atst-cli/SKILL.md)
271
+ - [Refactor stage review](docs/reports/PROJECT_REFACTOR_REVIEW_2026-05-15.md)
272
+ - [User experience reinforcement report](docs/reports/USER_EXPERIENCE_REINFORCEMENT_2026-05-15.md)
273
+ - [Feature status matrix](docs/reports/FEATURE_STATUS_MATRIX.md)
274
+ - [DP validation report](docs/reports/DP_VALIDATION_2.0.0.md)
275
+ - [IRC integration review](docs/reports/IRC_INTEGRATION_REVIEW.md)
276
+
277
+ ## Version Governance
278
+
279
+ The package version has one source of truth:
280
+
281
+ ```text
282
+ pyproject.toml -> [project].version
283
+ ```
284
+
285
+ Runtime entry points read that governed package version through
286
+ `atst_tools.package_version()`. Source-tree runs read `pyproject.toml`, while
287
+ installed-package runs use distribution metadata generated from the same field.
288
+ The YAML `config_version` is a separate schema-compatibility marker and is also
289
+ `2.0.0` for this release line.
290
+
291
+ ## Project Boundary
292
+
293
+ ATST-Tools owns workflow orchestration, YAML validation, calculator construction,
294
+ trajectory naming, restart handling, ABACUS input/output helpers, examples, and
295
+ documentation. Numerical engines remain external:
296
+
297
+ - ABACUS owns first-principles electronic-structure calculations.
298
+ - DeePMD-kit owns DP model loading and inference.
299
+ - ASE owns the core optimizer and transition-state method implementations.
300
+ - Sella owns its saddle-search and IRC algorithms.
301
+
302
+ ## License
303
+
304
+ LGPL-v3 License.
@@ -0,0 +1,289 @@
1
+ # ATST-Tools
2
+
3
+ [![Version](https://img.shields.io/badge/version-2.0.0-blue)](pyproject.toml)
4
+ [![Unit test coverage](https://img.shields.io/badge/unit%20test%20coverage-66%25-yellowgreen)](#validation)
5
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.9-blue)](pyproject.toml)
6
+ [![License](https://img.shields.io/badge/license-LGPL--v3-blue)](#license)
7
+
8
+ ATST-Tools is a pip-installable **ASE transition-state workflow toolkit** for
9
+ ABACUS and DeePMD-kit calculators. It turns the project's legacy script
10
+ collection into one governed command-line interface:
11
+
12
+ ```bash
13
+ atst run CONFIG.yaml
14
+ ```
15
+
16
+ Use it when you want repeatable NEB, AutoNEB, Dimer, Sella, D2S, relaxation,
17
+ vibration, or IRC calculations driven by YAML instead of one-off Python scripts.
18
+
19
+ ## At A Glance
20
+
21
+ | Area | Current 2.0.0 status |
22
+ | :--- | :--- |
23
+ | Package | Installable Python package with the `atst` console command. |
24
+ | Main interface | `atst run CONFIG.yaml` for all calculator-backed workflows. |
25
+ | Lightweight tools | `atst config`, `atst abacus`, `atst neb`, `atst traj`, `atst dimer`, `atst relax`, `atst vibration`. |
26
+ | Calculators | ABACUS through `abacuslite`; DeePMD-kit through `deepmd.calculator.DP`. |
27
+ | Configuration | Pydantic-governed YAML schema with generated user documentation. |
28
+ | Validation | Unit tests, example dry-runs, SAI ABACUS evidence, and DP/DPA smoke validation. |
29
+ | Release | `2.0.0`, documented in [release notes](docs/releases/RELEASE_NOTES_2.0.0.md). |
30
+
31
+ ## What You Can Run
32
+
33
+ | `calculation.type` | Workflow | Notes |
34
+ | :--- | :--- | :--- |
35
+ | `neb` | NEB / DyNEB | Endpoint single-point governance is enabled by default. |
36
+ | `autoneb` | AutoNEB | Adaptive image insertion plus final-chain post-processing. |
37
+ | `d2s` | Double-ended to single-ended TS search | Rough NEB followed by Dimer or Sella. |
38
+ | `dimer` | ASE Dimer | Single-ended transition-state search. |
39
+ | `sella` | Sella saddle search | Uses the external `sella` package. |
40
+ | `relax` | Structure optimization | ASE optimizer based relaxation. |
41
+ | `vibration` | Vibrations and thermochemistry | Harmonic and ideal-gas helpers. |
42
+ | `irc` | Sella IRC | Sella-backed IRC orchestration with controlled boundary diagnostics. |
43
+
44
+ Local pre/post-processing commands are intentionally lightweight. They do not
45
+ construct calculators or submit expensive calculations:
46
+
47
+ ```bash
48
+ atst neb make ...
49
+ atst neb post ...
50
+ atst traj collect ...
51
+ atst traj transform ...
52
+ atst dimer make-from-neb ...
53
+ atst relax post ...
54
+ atst vibration post ...
55
+ atst config validate ...
56
+ atst abacus prepare ...
57
+ atst abacus collect ...
58
+ ```
59
+
60
+ ## Installation
61
+
62
+ ### Development Install
63
+
64
+ ```bash
65
+ git clone https://github.com/deepmodeling/atst-tools.git
66
+ cd atst-tools
67
+ pip install -e .
68
+ ```
69
+
70
+ ### Wheel Install
71
+
72
+ Build a local release artifact:
73
+
74
+ ```bash
75
+ python -m build
76
+ pip install dist/atst_tools-2.0.0-py3-none-any.whl
77
+ ```
78
+
79
+ ATST-Tools itself installs the Python workflow layer. Real calculations also
80
+ need the selected calculator runtime:
81
+
82
+ - **ABACUS**: an executable ABACUS installation plus pseudopotential/orbital
83
+ files referenced by YAML.
84
+ - **DP / DeePMD-kit**: a working DeePMD-kit Python installation and a model file
85
+ outside git-tracked paths.
86
+
87
+ ## Quick Start
88
+
89
+ Run a small relaxation example:
90
+
91
+ ```bash
92
+ cd examples/06_relax_H2-Au
93
+ atst run config.yaml
94
+ ```
95
+
96
+ Validate an input without launching the calculation:
97
+
98
+ ```bash
99
+ atst run --dry-run examples/06_relax_H2-Au/config.yaml
100
+ atst config validate examples/06_relax_H2-Au/config.yaml --print-normalized
101
+ ```
102
+
103
+ Print a schema-governed template:
104
+
105
+ ```bash
106
+ atst run --show-template neb --calculator abacus
107
+ atst run --show-template neb --calculator dp
108
+ ```
109
+
110
+ List available workflow types:
111
+
112
+ ```bash
113
+ atst run --list-types
114
+ ```
115
+
116
+ ## Minimal YAML Shape
117
+
118
+ Every production workflow uses the same top-level structure:
119
+
120
+ ```yaml
121
+ calculation:
122
+ type: neb
123
+ init_chain: inputs/init_neb_chain.traj
124
+ fmax: 0.05
125
+ max_steps: 100
126
+ climb: true
127
+
128
+ calculator:
129
+ name: abacus
130
+ abacus:
131
+ command: abacus
132
+ mpi: 4
133
+ omp: 1
134
+ directory: run_neb
135
+ kpts: [2, 2, 2]
136
+ parameters:
137
+ calculation: scf
138
+ ecutwfc: 100
139
+ basis_type: lcao
140
+ ```
141
+
142
+ The governed schema defines defaults, types, and descriptions for user-facing
143
+ inputs. See [YAML input variables](docs/user/YAML_INPUT_VARIABLES.md) for the
144
+ generated reference and [configuration reference](docs/user/CONFIG_REFERENCE.md)
145
+ for hand-written guidance.
146
+
147
+ ## Calculator Backends
148
+
149
+ ### ABACUS
150
+
151
+ ABACUS is integrated through `abacuslite`. ATST-Tools first tries an installed
152
+ `abacuslite` package and then falls back to the vendored snapshot under
153
+ `src/atst_tools/external/ASE_interface/abacuslite`.
154
+
155
+ Typical example files use:
156
+
157
+ ```yaml
158
+ calculator:
159
+ name: abacus
160
+ abacus:
161
+ command: abacus
162
+ mpi: 4
163
+ omp: 1
164
+ pseudo_dir: ../data
165
+ orbital_dir: ../data
166
+ ```
167
+
168
+ ATST-Tools is a layered `abacuslite` wrapper. Calculator-backed workflows such
169
+ as NEB, D2S, Dimer, Sella, Relax, Vibration, and IRC still run through
170
+ `atst run CONFIG.yaml`; local ABACUS helpers support safe input preparation and
171
+ result collection:
172
+
173
+ ```bash
174
+ atst abacus prepare config.yaml --structure inputs/init.stru --output-dir abacus_input
175
+ atst abacus collect run_neb --output abacus_results.json
176
+ ```
177
+
178
+ These helper commands do not run ABACUS and do not submit Slurm jobs.
179
+
180
+ ### DeePMD-kit / DP
181
+
182
+ DP support uses the official ASE calculator entry point,
183
+ `deepmd.calculator.DP`. DeePMD-kit detects the model backend from the model
184
+ file. Multi-head DPA/DPA3 models are configured through `calculator.dp.head`.
185
+
186
+ ```yaml
187
+ calculator:
188
+ name: dp
189
+ dp:
190
+ model: ../../temp_repos/dp_model/DPA-3.1-3M.pt
191
+ head: Omat24
192
+ omp: 4
193
+ share_calculator: true
194
+ ```
195
+
196
+ The 2.0.0 DP validation used DPA-3.1-3M with the `Omat24` head. Model files and
197
+ runtime outputs are intentionally not tracked by git.
198
+
199
+ ## Examples
200
+
201
+ The [examples directory](examples/README.md) is the fastest way to learn the
202
+ project:
203
+
204
+ | Directory | Workflow focus |
205
+ | :--- | :--- |
206
+ | `examples/01_neb_Li-Si` | Quick NEB smoke case. |
207
+ | `examples/02_neb_H2-Au` | Surface NEB example. |
208
+ | `examples/03_autoneb_Cy-Pt` | AutoNEB workflow. |
209
+ | `examples/04_dimer_CO-Pt` | Dimer transition-state search. |
210
+ | `examples/05_sella_H2-Au` | Sella saddle search. |
211
+ | `examples/06_relax_H2-Au` | Geometry relaxation. |
212
+ | `examples/07_vibration_H2-Au` | Surface vibration analysis. |
213
+ | `examples/08_d2s_Cy-Pt` | Rough NEB plus single-ended TS search. |
214
+ | `examples/09_lightweight_cli` | Local helper command examples. |
215
+ | `examples/10_irc_H2` | IRC YAML examples. |
216
+ | `examples/11_vibration_ideal_gas_H2` | Ideal-gas thermochemistry example. |
217
+
218
+ Each calculation example uses `config.yaml` for ABACUS and, where available,
219
+ `config_dp.yaml` for DP.
220
+
221
+ ## Validation
222
+
223
+ The 2.0.0 README badges reflect the current governed project state:
224
+
225
+ - Version badge: `pyproject.toml` -> `[project].version` -> `2.0.0`.
226
+ - Unit test coverage badge: measured with
227
+ `coverage run --source=src/atst_tools -m pytest tests -q`, then reported with
228
+ `coverage report --omit='src/atst_tools/external/*'`.
229
+ - Current first-party unit test coverage: `66%`.
230
+ - Full source-tree coverage including the vendored `abacuslite` snapshot:
231
+ `43%`.
232
+
233
+ The vendored `src/atst_tools/external/ASE_interface` tree is kept for ABACUS
234
+ backend reproducibility and is not treated as first-party ATST-Tools coverage.
235
+
236
+ ## For Developers
237
+
238
+ The main extension points are deliberately small:
239
+
240
+ | Task | Start here |
241
+ | :--- | :--- |
242
+ | Add or change YAML inputs | `src/atst_tools/utils/config_schema.py` |
243
+ | Regenerate YAML docs | `python -m atst_tools.utils.config_docs` |
244
+ | Add a calculator backend | `src/atst_tools/calculators/` |
245
+ | Add an `atst run` workflow | `src/atst_tools/scripts/main.py` and `src/atst_tools/workflows/` |
246
+ | Add lightweight CLI commands | `src/atst_tools/scripts/cli.py` plus focused command modules |
247
+ | Add examples | `examples/<case>/config.yaml` and curated `inputs/` |
248
+
249
+ Developer documentation:
250
+
251
+ - [Documentation index](docs/index.md)
252
+ - [YAML input governance](docs/developer/YAML_INPUT_GOVERNANCE.md)
253
+ - [Documentation standards](docs/developer/DOCUMENTATION_STANDARDS.md)
254
+ - [ABACUS wrapper guide](docs/user/ABACUSLITE_WRAPPER_GUIDE.md)
255
+ - [Maintained atst-cli skill](docs/skills/atst-cli/SKILL.md)
256
+ - [Refactor stage review](docs/reports/PROJECT_REFACTOR_REVIEW_2026-05-15.md)
257
+ - [User experience reinforcement report](docs/reports/USER_EXPERIENCE_REINFORCEMENT_2026-05-15.md)
258
+ - [Feature status matrix](docs/reports/FEATURE_STATUS_MATRIX.md)
259
+ - [DP validation report](docs/reports/DP_VALIDATION_2.0.0.md)
260
+ - [IRC integration review](docs/reports/IRC_INTEGRATION_REVIEW.md)
261
+
262
+ ## Version Governance
263
+
264
+ The package version has one source of truth:
265
+
266
+ ```text
267
+ pyproject.toml -> [project].version
268
+ ```
269
+
270
+ Runtime entry points read that governed package version through
271
+ `atst_tools.package_version()`. Source-tree runs read `pyproject.toml`, while
272
+ installed-package runs use distribution metadata generated from the same field.
273
+ The YAML `config_version` is a separate schema-compatibility marker and is also
274
+ `2.0.0` for this release line.
275
+
276
+ ## Project Boundary
277
+
278
+ ATST-Tools owns workflow orchestration, YAML validation, calculator construction,
279
+ trajectory naming, restart handling, ABACUS input/output helpers, examples, and
280
+ documentation. Numerical engines remain external:
281
+
282
+ - ABACUS owns first-principles electronic-structure calculations.
283
+ - DeePMD-kit owns DP model loading and inference.
284
+ - ASE owns the core optimizer and transition-state method implementations.
285
+ - Sella owns its saddle-search and IRC algorithms.
286
+
287
+ ## License
288
+
289
+ LGPL-v3 License.
@@ -0,0 +1,35 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "atst-tools"
7
+ version = "2.0.0"
8
+ description = "Advanced ASE Transition State Tools for ABACUS and Deep-Potential"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ dependencies = [
12
+ "ase>=3.28.0",
13
+ "numpy",
14
+ "scipy",
15
+ "matplotlib",
16
+ "pydantic>=2,<3",
17
+ "ruamel.yaml",
18
+ "seekpath",
19
+ "sella",
20
+ ]
21
+
22
+ [project.scripts]
23
+ atst = "atst_tools.scripts.cli:main"
24
+
25
+ [tool.pytest.ini_options]
26
+ minversion = "6.0"
27
+ addopts = "-ra -q"
28
+ testpaths = [
29
+ "tests",
30
+ ]
31
+ markers = [
32
+ "unit: fast local unit tests that do not require external executables",
33
+ "integration: local integration-style fixture tests that do not submit Slurm jobs",
34
+ "slurm: opt-in tests that may require ABACUS/DeePMD and a Slurm allocation",
35
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,51 @@
1
+ """ATST-Tools package metadata helpers."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version as _metadata_version
4
+ from pathlib import Path
5
+
6
+
7
+ def _source_tree_version() -> str | None:
8
+ """Return the project version from a local source-tree ``pyproject.toml``."""
9
+ for parent in Path(__file__).resolve().parents:
10
+ pyproject = parent / "pyproject.toml"
11
+ if not pyproject.exists():
12
+ continue
13
+
14
+ in_project = False
15
+ for raw_line in pyproject.read_text(encoding="utf-8").splitlines():
16
+ line = raw_line.strip()
17
+ if line == "[project]":
18
+ in_project = True
19
+ continue
20
+ if in_project and line.startswith("["):
21
+ return None
22
+ if in_project and line.startswith("version"):
23
+ _, value = line.split("=", 1)
24
+ return value.strip().strip('"').strip("'")
25
+ return None
26
+
27
+
28
+ def package_version() -> str:
29
+ """Return the ATST-Tools package version.
30
+
31
+ The package version is governed by ``pyproject.toml``. Source-tree runs
32
+ read that file directly, while installed-package runs use distribution
33
+ metadata generated from the same project version.
34
+
35
+ Returns:
36
+ Project package version, or ``"unknown"`` when neither source-tree nor
37
+ installed-package metadata is available.
38
+ """
39
+ return _source_tree_version() or _installed_version()
40
+
41
+
42
+ def _installed_version() -> str:
43
+ try:
44
+ return _metadata_version("atst-tools")
45
+ except PackageNotFoundError:
46
+ return "unknown"
47
+
48
+
49
+ __version__ = package_version()
50
+
51
+ __all__ = ["__version__", "package_version"]