diff --git a/dpgen2/op/run_lmp.py b/dpgen2/op/run_lmp.py index 60cd9305..442085e7 100644 --- a/dpgen2/op/run_lmp.py +++ b/dpgen2/op/run_lmp.py @@ -202,7 +202,7 @@ def execute( ret_dict = { "log": work_dir / lmp_log_name, - "traj": work_dir / lmp_traj_name, + "traj": self.get_traj(work_dir / lmp_traj_name), "model_devi": self.get_model_devi(work_dir / lmp_model_devi_name), } plm_output = ( @@ -223,6 +223,10 @@ def execute( def get_model_devi(self, model_devi_file): return model_devi_file + def get_traj(self, traj_file): + """Return the filesystem trajectory used by the standard backend.""" + return traj_file + @staticmethod def lmp_args(): doc_lmp_cmd = "The command of LAMMPS" @@ -412,3 +416,7 @@ def get_output_sign(cls): def get_model_devi(self, model_devi_file): return np.loadtxt(model_devi_file) + + def get_traj(self, traj_file): + """Return trajectory text for serialization into an HDF5 dataset.""" + return traj_file.read_text() diff --git a/tests/op/test_run_lmp.py b/tests/op/test_run_lmp.py index 650fd82e..a6ca4ca5 100644 --- a/tests/op/test_run_lmp.py +++ b/tests/op/test_run_lmp.py @@ -35,6 +35,7 @@ ) from dpgen2.op.run_lmp import ( RunLmp, + RunLmpHDF5, get_ele_temp, merge_pimd_files, set_models, @@ -149,6 +150,31 @@ def test_extra_outputs(self): "Hello -i in.lammps -log log.lammps", ) + @patch("dpgen2.op.run_lmp.run_command") + def test_hdf5_outputs_dataset_values(self, mocked_run): + """Return serializable data instead of filesystem paths for HDF5.""" + + def write_outputs(*args, **kwargs): + Path(lmp_traj_name).write_text("trajectory data") + np.savetxt(lmp_model_devi_name, np.arange(7).reshape(1, 7)) + return 0, "foo\n", "" + + mocked_run.side_effect = write_outputs + + out = RunLmpHDF5().execute( + OPIO( + { + "config": {"command": "mylmp"}, + "task_name": self.task_name, + "task_path": self.task_path, + "models": self.models, + } + ) + ) + + self.assertEqual(out["traj"], "trajectory data") + np.testing.assert_array_equal(out["model_devi"], np.arange(7)) + class TestRunLmpDist(unittest.TestCase): lmp_config = """variable NSTEPS equal 1000