@@ -116,8 +116,9 @@ def __init__ (self,
116
116
self .apply_type_map (type_map )
117
117
118
118
register_from_funcs = Register ()
119
+ register_to_funcs = Register ()
119
120
120
- def from_fmt (self , file_name , fmt , ** kwargs ):
121
+ def from_fmt (self , file_name , fmt = 'auto' , ** kwargs ):
121
122
fmt = fmt .lower ()
122
123
if fmt == 'auto' :
123
124
fmt = os .path .basename (file_name ).split ('.' )[- 1 ].lower ()
@@ -129,6 +130,17 @@ def from_fmt(self, file_name, fmt, **kwargs):
129
130
func (self , file_name , ** kwargs )
130
131
else :
131
132
raise RuntimeError ('unknow data format ' + fmt )
133
+
134
+ def to (self , fmt , * args , ** kwargs ):
135
+ fmt = fmt .lower ()
136
+ to_funcs = self .register_to_funcs .funcs
137
+ if fmt in to_funcs :
138
+ func = to_funcs [fmt ]
139
+ func_args = inspect .getfullargspec (func ).args
140
+ kwargs = {kk : kwargs [kk ] for kk in kwargs if kk in func_args }
141
+ func (self , * args , ** kwargs )
142
+ else :
143
+ raise RuntimeError ('unknow data format %s. Accepted format:' % (fmt , " " .join (to_funcs )))
132
144
133
145
def __repr__ (self ):
134
146
return self .__str__ ()
@@ -215,7 +227,7 @@ def map_atom_types(self,type_map=None):
215
227
216
228
return new_atom_types
217
229
218
-
230
+ @ register_to_funcs . register_funcs ( "list" )
219
231
def to_list (self ):
220
232
"""
221
233
convert system to list, usefull for data collection
@@ -430,6 +442,7 @@ def from_lammps_lmp (self, file_name, type_map = None) :
430
442
self .data = dpdata .lammps .lmp .to_system_data (lines , type_map )
431
443
self ._shift_orig_zero ()
432
444
445
+ @register_to_funcs .register_funcs ("pymatgen/structure" )
433
446
def to_pymatgen_structure (self ):
434
447
'''
435
448
convert System to Pymatgen Structure obj
@@ -449,6 +462,7 @@ def to_pymatgen_structure(self):
449
462
structures .append (structure )
450
463
return structures
451
464
465
+ @register_to_funcs .register_funcs ("ase/structure" )
452
466
def to_ase_structure (self ):
453
467
'''
454
468
convert System to ASE Atom obj
@@ -468,6 +482,7 @@ def to_ase_structure(self):
468
482
structures .append (structure )
469
483
return structures
470
484
485
+ @register_to_funcs .register_funcs ("lammps/lmp" )
471
486
def to_lammps_lmp (self , file_name , frame_idx = 0 ) :
472
487
"""
473
488
Dump the system in lammps data format
@@ -505,6 +520,7 @@ def from_vasp_poscar(self, file_name) :
505
520
self .data = dpdata .vasp .poscar .to_system_data (lines )
506
521
self .rot_lower_triangular ()
507
522
523
+ @register_to_funcs .register_funcs ("vasp/string" )
508
524
def to_vasp_string (self , frame_idx = 0 ):
509
525
"""
510
526
Dump the system in vasp POSCAR format string
@@ -518,6 +534,7 @@ def to_vasp_string(self, frame_idx=0):
518
534
w_str = dpdata .vasp .poscar .from_system_data (self .data , frame_idx )
519
535
return w_str
520
536
537
+ @register_to_funcs .register_funcs ("vasp/poscar" )
521
538
def to_vasp_poscar (self , file_name , frame_idx = 0 ) :
522
539
"""
523
540
Dump the system in vasp POSCAR format
@@ -556,6 +573,7 @@ def from_deepmd_raw(self, folder, type_map = None) :
556
573
if tmp_data is not None :
557
574
self .data = tmp_data
558
575
576
+ @register_to_funcs .register_funcs ("deepmd/npy" )
559
577
def to_deepmd_npy (self , folder , set_size = 5000 , prec = np .float32 ) :
560
578
"""
561
579
Dump the system in deepmd compressed format (numpy binary) to `folder`.
@@ -578,6 +596,7 @@ def to_deepmd_npy(self, folder, set_size = 5000, prec=np.float32) :
578
596
set_size = set_size ,
579
597
comp_prec = prec )
580
598
599
+ @register_to_funcs .register_funcs ("deepmd/raw" )
581
600
def to_deepmd_raw (self , folder ) :
582
601
"""
583
602
Dump the system in deepmd raw format to `folder`
0 commit comments