-
Notifications
You must be signed in to change notification settings - Fork 152
Open
Labels
Description
Summary
If one want to load a dpdata.MultiSystems containing lots of Systems without any label, error will occur, and it seems hard to bypass this problem.
Detailed Description
One can get a dpdata.MultiSystems object containing series of Systems without label, and dump it via dpdata.Multisystems.to_deepmd_npy_mixed().
However, if one trying to read this deepmd/npy/mixed data from the dumping directory, error occurs:
----> 1 testdata = dpdata.MultiSystems.from_file("./Fe-C-ActMat2024-noene-mixed/100", fmt="deepmd/npy/mixed")
File ~/miniconda3/envs/deepmd-310a/lib/python3.12/site-packages/dpdata/system.py:1469, in MultiSystems.from_file(cls, file_name, fmt, **kwargs)
1466 @classmethod
1467 def from_file(cls, file_name, fmt: str, **kwargs: Any):
1468 multi_systems = cls()
-> 1469 multi_systems.load_systems_from_file(file_name=file_name, fmt=fmt, **kwargs)
1470 return multi_systems
File ~/miniconda3/envs/deepmd-310a/lib/python3.12/site-packages/dpdata/system.py:1493, in MultiSystems.load_systems_from_file(self, file_name, fmt, **kwargs)
1491 assert fmt is not None
1492 fmt = fmt.lower()
-> 1493 return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File ~/miniconda3/envs/deepmd-310a/lib/python3.12/site-packages/dpdata/system.py:1396, in MultiSystems.from_fmt_obj(self, fmtobj, directory, labeled, **kwargs)
1394 data_list = fmtobj.from_labeled_system_mix(dd, **kwargs)
1395 for data_item in data_list:
-> 1396 system_list.append(LabeledSystem(data=data_item, **kwargs))
1397 else:
1398 data_list = fmtobj.from_system_mix(dd, **kwargs)
File ~/miniconda3/envs/deepmd-310a/lib/python3.12/site-packages/dpdata/system.py:193, in System.__init__(self, file_name, fmt, type_map, begin, step, data, convergence_check, **kwargs)
191 if data:
192 self.data = data
--> 193 self.check_data()
194 return
195 if file_name is None:
File ~/miniconda3/envs/deepmd-310a/lib/python3.12/site-packages/dpdata/system.py:221, in System.check_data(self)
219 raise DataError("data is not a dict!")
220 for dd in self.DTYPES:
--> 221 dd.check(self)
222 if sum(self.get_atom_numbs()) != self.get_natoms():
223 raise DataError(
224 "Sum of atom_numbs (%d) is not equal to natoms (%d)." # noqa: UP031
225 % (sum(self.get_atom_numbs()), self.get_natoms())
226 )
File ~/miniconda3/envs/deepmd-310a/lib/python3.12/site-packages/dpdata/data_type.py:131, in DataType.check(self, system)
129 raise RuntimeError("Unsupported type to check shape")
130 elif self.required:
--> 131 raise DataError(f"{self.name} not found in data")
DataError: energies not found in data
It seems that dpdata.MultiSystems can and only can deal with LabeledSystem but not just System
Further Information, Files, and Links
No response
Copilot