Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions dpdata/system.py
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,14 @@ def nopbc(self):
return True
return False

def shuffle(self):
"""Shuffle frames randomly."""
idx = np.random.permutation(self.get_nframes())
for ii in ['cells', 'coords']:
self.data[ii] = self.data[ii][idx]
return idx


def get_cell_perturb_matrix(cell_pert_fraction):
if cell_pert_fraction<0:
raise RuntimeError('cell_pert_fraction can not be negative')
Expand Down Expand Up @@ -1131,6 +1139,14 @@ def sort_atom_types(self):
if ii in self.data:
self.data[ii] = self.data[ii][:, idx]

def shuffle(self):
"""Also shuffle labeled data e.g. energies and forces."""
idx = System.shuffle(self)
for ii in ['energies', 'forces', 'virials', 'atom_pref']:
if ii in self.data:
self.data[ii] = self.data[ii][idx]
return idx


class MultiSystems:
'''A set containing several systems.'''
Expand Down
1 change: 1 addition & 0 deletions tests/test_qe_pw_scf.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def test_cell(self) :
for ii in range(cell.shape[0]) :
for jj in range(cell.shape[1]) :
self.assertAlmostEqual(self.system_h2o.data['cells'][0][ii][jj], cell[ii][jj])
fp.close()


def test_coord(self) :
Expand Down
21 changes: 21 additions & 0 deletions tests/test_shuffle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import unittest
from context import dpdata
from comp_sys import CompLabeledSys, IsPBC

class TestDeepmdLoadRaw(unittest.TestCase, CompLabeledSys, IsPBC):
def setUp (self) :
original_system = dpdata.LabeledSystem('poscars/OUTCAR.h2o.md',
fmt = 'vasp/outcar')
original_system += original_system
original_system += original_system
original_system += original_system
self.system_1 = dpdata.LabeledSystem()
self.system_2 = original_system.copy()
idx = self.system_2.shuffle()
for ii in idx:
self.system_1.append(original_system.sub_system(ii))

self.places = 6
self.e_places = 6
self.f_places = 6
self.v_places = 6