Skip to content

[Feature Request] how can dpdata.MultiSystems deal with systems without label #817

@QuantumMisaka

Description

@QuantumMisaka

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

Metadata

Metadata

Assignees

Labels

deepmdDeePMD-kit formatenhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions