pymdkit 1.4.4__tar.gz → 1.4.5__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 (46) hide show
  1. {pymdkit-1.4.4/src/pymdkit.egg-info → pymdkit-1.4.5}/PKG-INFO +2 -2
  2. {pymdkit-1.4.4 → pymdkit-1.4.5}/README.md +1 -1
  3. {pymdkit-1.4.4 → pymdkit-1.4.5}/pyproject.toml +1 -1
  4. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/__init__.py +1 -1
  5. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_gpumd.py +2 -6
  6. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gpumd_thermo.py +46 -12
  7. {pymdkit-1.4.4 → pymdkit-1.4.5/src/pymdkit.egg-info}/PKG-INFO +2 -2
  8. {pymdkit-1.4.4 → pymdkit-1.4.5}/LICENSE +0 -0
  9. {pymdkit-1.4.4 → pymdkit-1.4.5}/setup.cfg +0 -0
  10. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/__init__.py +0 -0
  11. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_extxyz.py +0 -0
  12. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_fileio.py +0 -0
  13. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_geometry.py +0 -0
  14. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_reduction.py +0 -0
  15. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_vasp_output.py +0 -0
  16. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_vaspset.py +0 -0
  17. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/add_config_type.py +0 -0
  18. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/chemsys_entry.py +0 -0
  19. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/compute_ehull.py +0 -0
  20. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/compute_msd_all_groups.py +0 -0
  21. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/compute_rmsd.py +0 -0
  22. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/convert.py +0 -0
  23. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/ewald.py +0 -0
  24. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gather_contcar.py +0 -0
  25. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gpumd_group.py +0 -0
  26. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gpumd_trjcat.py +0 -0
  27. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/nep_rmse.py +0 -0
  28. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/pca.py +0 -0
  29. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/perturb.py +0 -0
  30. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/submit_vasp.py +0 -0
  31. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/substitute.py +0 -0
  32. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/supercell.py +0 -0
  33. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/symmetrize.py +0 -0
  34. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/trj_extract.py +0 -0
  35. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/trj_sparse.py +0 -0
  36. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/umap.py +0 -0
  37. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp2xyz.py +0 -0
  38. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp_fe.py +0 -0
  39. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp_relax.py +0 -0
  40. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp_static.py +0 -0
  41. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/pymdkit_main.py +0 -0
  42. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/SOURCES.txt +0 -0
  43. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/dependency_links.txt +0 -0
  44. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/entry_points.txt +0 -0
  45. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/requires.txt +0 -0
  46. {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymdkit
3
- Version: 1.4.4
3
+ Version: 1.4.5
4
4
  Summary: A unified command-line toolkit for atomistic / MD structure workflows.
5
5
  Author-email: Yueda Wang <ydwang0608@ustc.edu.cn>
6
6
  License-Expression: GPL-3.0-or-later
@@ -177,7 +177,7 @@ When `pca` or `umap` receives `-it train.xyz`, it reads `Config_type` from every
177
177
 
178
178
  For folder conversion, `convert -if INPUT -of OUTPUT` writes `.xyz` by default. Set another target extension with `-oe`, for example `-oe cif` or `-oe vasp`. Single-file and trajectory modes infer the target format from `-o` and `-ot`.
179
179
 
180
- `gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters, volume, temperature, pressure, and angles remain supporting diagnostics. Thermo plots use Arial when available, opaque legends, correct Å units, and shaded abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
180
+ `gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters and volume can corroborate an energy transition. Temperature and all six pressure components remain diagnostics only and cannot classify an otherwise stationary run as abnormal by themselves. Thermo plots use Arial when available and the Morandi color cycle. They plot all six pressure components, use frameless upper-right legends with added vertical headroom, preserve correct Å units, and shade abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
181
181
 
182
182
  The thermo parser follows the [official GPUMD thermo.out format](https://gpumd.org/gpumd/output_files/thermo_out.html): 18 columns are required, `pressure.txt` exports `Pxx Pyy Pzz Pyz Pxz Pxy`, box vectors are interpreted as a full 3×3 matrix, `time_step` propagates between runs, and `dump_thermo` does not.
183
183
 
@@ -151,7 +151,7 @@ When `pca` or `umap` receives `-it train.xyz`, it reads `Config_type` from every
151
151
 
152
152
  For folder conversion, `convert -if INPUT -of OUTPUT` writes `.xyz` by default. Set another target extension with `-oe`, for example `-oe cif` or `-oe vasp`. Single-file and trajectory modes infer the target format from `-o` and `-ot`.
153
153
 
154
- `gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters, volume, temperature, pressure, and angles remain supporting diagnostics. Thermo plots use Arial when available, opaque legends, correct Å units, and shaded abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
154
+ `gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters and volume can corroborate an energy transition. Temperature and all six pressure components remain diagnostics only and cannot classify an otherwise stationary run as abnormal by themselves. Thermo plots use Arial when available and the Morandi color cycle. They plot all six pressure components, use frameless upper-right legends with added vertical headroom, preserve correct Å units, and shade abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
155
155
 
156
156
  The thermo parser follows the [official GPUMD thermo.out format](https://gpumd.org/gpumd/output_files/thermo_out.html): 18 columns are required, `pressure.txt` exports `Pxx Pyy Pzz Pyz Pxz Pxy`, box vectors are interpreted as a full 3×3 matrix, `time_step` propagates between runs, and `dump_thermo` does not.
157
157
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pymdkit"
7
- version = "1.4.4"
7
+ version = "1.4.5"
8
8
  description = "A unified command-line toolkit for atomistic / MD structure workflows."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +1,3 @@
1
1
  """pymdkit -- a unified CLI for atomistic / MD structure workflows."""
2
2
 
3
- __version__ = "1.4.4"
3
+ __version__ = "1.4.5"
@@ -424,12 +424,8 @@ def load_thermo(thermo_path, run_path):
424
424
  abnormal_mask[start:] = True
425
425
 
426
426
  warnings.extend(structural_warnings)
427
- warnings.extend(other_warnings)
428
- if warnings and not abnormal_mask.any():
429
- abnormal_mask[start:] = True
430
- warnings.insert(
431
- 0, "region mapping: full equilibrium segment used as fallback"
432
- )
427
+ if abnormal_mask.any():
428
+ warnings.extend(other_warnings)
433
429
 
434
430
  return ThermoData(
435
431
  time=time,
@@ -13,7 +13,28 @@ except ImportError:
13
13
  from _gpumd import load_thermo, mask_intervals
14
14
 
15
15
  COMMAND = "gpumd-thermo"
16
- HELP = "Export and plot GPUMD thermo.out data and warn about instability."
16
+ HELP = "Export and plot GPUMD thermo.out data and warn about instability."
17
+
18
+ MORANDI_COLORS = [
19
+ "#686789",
20
+ "#B77F70",
21
+ "#E5E2B9",
22
+ "#BEB1A8",
23
+ "#A79A89",
24
+ "#8A95A9",
25
+ "#ECCED0",
26
+ "#7D7465",
27
+ "#E8D3C0",
28
+ "#7A8A71",
29
+ "#789798",
30
+ "#B57C82",
31
+ "#9FABB9",
32
+ "#B0B1B6",
33
+ "#99857E",
34
+ "#88878D",
35
+ "#91A0A5",
36
+ "#9AA690",
37
+ ]
17
38
 
18
39
 
19
40
  def save_table(path, time, values, header):
@@ -35,7 +56,7 @@ def scaled_plot_values(values, quantity, unit):
35
56
  def mark_abnormal_regions(axis, intervals):
36
57
  for begin, end in intervals:
37
58
  axis.axvspan(
38
- begin, end, color="#d9e8f5", alpha=0.85, linewidth=0, zorder=0
59
+ begin, end, color=MORANDI_COLORS[12], alpha=0.35, linewidth=0, zorder=0
39
60
  )
40
61
  axis.text(
41
62
  (begin + end) / 2.0,
@@ -45,9 +66,9 @@ def mark_abnormal_regions(axis, intervals):
45
66
  ha="center",
46
67
  va="top",
47
68
  fontsize=7,
48
- color="#315a7d",
69
+ color=MORANDI_COLORS[0],
49
70
  bbox={
50
- "facecolor": "white",
71
+ "facecolor": MORANDI_COLORS[2],
51
72
  "edgecolor": "none",
52
73
  "alpha": 0.8,
53
74
  "pad": 1.0,
@@ -57,22 +78,33 @@ def mark_abnormal_regions(axis, intervals):
57
78
  )
58
79
 
59
80
 
81
+ def set_upper_headroom(axis, values):
82
+ values = np.asarray(values, dtype=float)
83
+ finite = values[np.isfinite(values)]
84
+ if not finite.size:
85
+ return
86
+ minimum = float(np.min(finite))
87
+ maximum = float(np.max(finite))
88
+ span = maximum - minimum
89
+ if span == 0:
90
+ span = max(abs(maximum) * 0.05, 1.0)
91
+ axis.set_ylim(minimum - 0.05 * span, maximum + 0.4 * span)
92
+
60
93
  def plot_thermo(path, thermo):
61
94
  import matplotlib
62
95
  matplotlib.use("Agg")
96
+ from cycler import cycler
63
97
  matplotlib.rcParams.update({
64
98
  "font.family": "sans-serif",
65
99
  "font.sans-serif": ["Arial", "Liberation Sans", "DejaVu Sans"],
100
+ "axes.prop_cycle": cycler(color=MORANDI_COLORS),
66
101
  })
67
102
  import matplotlib.pyplot as plt
68
103
 
69
- colors = ("#d22027", "#015699", "#fac00f")
104
+ colors = MORANDI_COLORS
70
105
  legend_style = {
71
- "loc": "best",
72
- "frameon": True,
73
- "facecolor": "white",
74
- "edgecolor": "none",
75
- "framealpha": 1.0,
106
+ "loc": "upper right",
107
+ "frameon": False,
76
108
  }
77
109
  intervals = mask_intervals(thermo.time, thermo.abnormal_mask)
78
110
  potential, potential_label = scaled_plot_values(
@@ -95,7 +127,7 @@ def plot_thermo(path, thermo):
95
127
  axes[0, 1].set_ylabel(potential_label)
96
128
  mark_abnormal_regions(axes[0, 1], intervals)
97
129
 
98
- for index, label in enumerate(("Pxx", "Pyy", "Pzz")):
130
+ for index, label in enumerate(("Pxx", "Pyy", "Pzz", "Pyz", "Pxz", "Pxy")):
99
131
  axes[0, 2].plot(
100
132
  thermo.time,
101
133
  thermo.pressure[:, index],
@@ -104,7 +136,8 @@ def plot_thermo(path, thermo):
104
136
  zorder=2,
105
137
  )
106
138
  axes[0, 2].set_ylabel("Pressure (GPa)")
107
- axes[0, 2].legend(**legend_style).set_zorder(4)
139
+ set_upper_headroom(axes[0, 2], thermo.pressure)
140
+ axes[0, 2].legend(**legend_style, ncol=2).set_zorder(4)
108
141
 
109
142
  for index, label in enumerate(("a", "b", "c")):
110
143
  axes[1, 0].plot(
@@ -116,6 +149,7 @@ def plot_thermo(path, thermo):
116
149
  )
117
150
  axes[1, 0].set_ylabel("Lattice parameters (Å)")
118
151
  mark_abnormal_regions(axes[1, 0], intervals)
152
+ set_upper_headroom(axes[1, 0], thermo.lengths)
119
153
  axes[1, 0].legend(**legend_style).set_zorder(4)
120
154
 
121
155
  axes[1, 1].plot(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymdkit
3
- Version: 1.4.4
3
+ Version: 1.4.5
4
4
  Summary: A unified command-line toolkit for atomistic / MD structure workflows.
5
5
  Author-email: Yueda Wang <ydwang0608@ustc.edu.cn>
6
6
  License-Expression: GPL-3.0-or-later
@@ -177,7 +177,7 @@ When `pca` or `umap` receives `-it train.xyz`, it reads `Config_type` from every
177
177
 
178
178
  For folder conversion, `convert -if INPUT -of OUTPUT` writes `.xyz` by default. Set another target extension with `-oe`, for example `-oe cif` or `-oe vasp`. Single-file and trajectory modes infer the target format from `-o` and `-ot`.
179
179
 
180
- `gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters, volume, temperature, pressure, and angles remain supporting diagnostics. Thermo plots use Arial when available, opaque legends, correct Å units, and shaded abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
180
+ `gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters and volume can corroborate an energy transition. Temperature and all six pressure components remain diagnostics only and cannot classify an otherwise stationary run as abnormal by themselves. Thermo plots use Arial when available and the Morandi color cycle. They plot all six pressure components, use frameless upper-right legends with added vertical headroom, preserve correct Å units, and shade abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
181
181
 
182
182
  The thermo parser follows the [official GPUMD thermo.out format](https://gpumd.org/gpumd/output_files/thermo_out.html): 18 columns are required, `pressure.txt` exports `Pxx Pyy Pzz Pyz Pxz Pxy`, box vectors are interpreted as a full 3×3 matrix, `time_step` propagates between runs, and `dump_thermo` does not.
183
183
 
File without changes
File without changes