From 44e5b2a41d986bca3c171ed9b37a883ba5539dd5 Mon Sep 17 00:00:00 2001 From: SchrodingersCattt Date: Fri, 2 Oct 2026 07:20:39 +0000 Subject: [PATCH 1/2] fix(generator): ignore relative model deviation output --- dpgen/generator/run.py | 20 +++++++++++++++----- tests/generator/test_make_md.py | 11 +++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/dpgen/generator/run.py b/dpgen/generator/run.py index af6ffe6e6..45b4dd390 100644 --- a/dpgen/generator/run.py +++ b/dpgen/generator/run.py @@ -3366,11 +3366,21 @@ def _read_model_devi_file( model_devi_f_avg_relative: bool = False, model_devi_merge_traj: bool = False, ): - model_devi_files = glob.glob(os.path.join(task_path, "model_devi*.out")) - if len(model_devi_files) > 1: + model_devi_file = os.path.join(task_path, "model_devi.out") + model_devi_bead_files = glob.glob( + os.path.join(task_path, "model_devi[0-9]*.out") + ) + if not os.path.isfile(model_devi_file) and not model_devi_bead_files: + raise FileNotFoundError( + f"No model deviation output found in {task_path!r}; expected " + "model_devi.out or model_devi[0-9]+.out." + ) + if model_devi_bead_files: model_devi_files_sorted = sorted( - model_devi_files, - key=lambda x: int(re.search(r"model_devi(\d+)\.out", x).group(1)), + model_devi_bead_files, + key=lambda x: int( + re.search(r"^model_devi(\d+)\.out$", os.path.basename(x)).group(1) + ), ) with open(model_devi_files_sorted[0]) as f: first_line = f.readline() @@ -3438,7 +3448,7 @@ def _read_model_devi_file( f"{frame_number + ibead * (int(last_step) + 1):d}.lammpstrj", ) os.rename(traj_files_sorted[ibead][itraj], new_filename) - model_devi = np.loadtxt(os.path.join(task_path, "model_devi.out")) + model_devi = np.loadtxt(model_devi_file) if model_devi.ndim == 2: # Some LAMMPS fixes evaluate a model repeatedly at the same timestep. # The final evaluation describes the accepted configuration that is diff --git a/tests/generator/test_make_md.py b/tests/generator/test_make_md.py index 12db4d3ed..747f85be6 100644 --- a/tests/generator/test_make_md.py +++ b/tests/generator/test_make_md.py @@ -342,6 +342,10 @@ def test_read_model_devi_file_pimd(self): model_devi_array, fmt="%.12e", ) + # The relative-force normalization output is not a PIMD bead file. + # It must not be matched by the bead-file discovery regex. + with open(os.path.join(path, "model_devi_avgf.out"), "w") as fp: + fp.write("this file is intentionally not numeric\n") _read_model_devi_file(path) model_devi_out = np.loadtxt(os.path.join(path, "model_devi.out")) traj_files = glob.glob(os.path.join(path, "traj/*.lammpstrj")) @@ -359,6 +363,13 @@ def test_read_model_devi_file_pimd(self): os.path.isfile(os.path.join(path, f"traj/{istep}.lammpstrj")) ) + def test_read_model_devi_file_missing(self): + with tempfile.TemporaryDirectory() as path: + with self.assertRaisesRegex( + FileNotFoundError, "No model deviation output found" + ): + _read_model_devi_file(path) + def test_read_model_devi_file_keeps_last_row_per_timestep(self): """Intermediate model evaluations must not select stale structures.""" with tempfile.TemporaryDirectory() as task_path: From 1019bc609996154226839e420f68a547fcf93ea1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 2 Oct 2026 09:55:27 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dpgen/generator/run.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dpgen/generator/run.py b/dpgen/generator/run.py index 45b4dd390..feab5967c 100644 --- a/dpgen/generator/run.py +++ b/dpgen/generator/run.py @@ -3367,9 +3367,7 @@ def _read_model_devi_file( model_devi_merge_traj: bool = False, ): model_devi_file = os.path.join(task_path, "model_devi.out") - model_devi_bead_files = glob.glob( - os.path.join(task_path, "model_devi[0-9]*.out") - ) + model_devi_bead_files = glob.glob(os.path.join(task_path, "model_devi[0-9]*.out")) if not os.path.isfile(model_devi_file) and not model_devi_bead_files: raise FileNotFoundError( f"No model deviation output found in {task_path!r}; expected "