Source code for dpgen2.conf.conf_generator

import dpdata
import dargs
import tempfile
from pathlib import Path
from typing import (
    List, Dict,
)
from abc import (
    ABC, abstractmethod,
)

[docs]class ConfGenerator(ABC):
[docs] @abstractmethod def generate( self, type_map, ) -> dpdata.MultiSystems: r"""Method of generating configurations. Parameters ---------- type_map: List[str] The type map. Returns ------- confs: dpdata.MultiSystems The returned configurations in `dpdata.MultiSystems` format """ pass
[docs] def get_file_content( self, type_map, fmt='lammps/lmp', ) -> List[str]: r"""Get the file content of configurations Parameters ---------- type_map: List[str] The type map. Returns ------- conf_list: List[str] A list of file content of configurations. """ ret = [] ms = self.generate(type_map) for ii in range(len(ms)): ss = ms[ii] for jj in range(ss.get_nframes()): with tempfile.NamedTemporaryFile() as ft: tf = Path(ft.name) ss[jj].to(fmt, tf) ret.append(tf.read_text()) return ret
[docs] @staticmethod @abstractmethod def args() -> List[dargs.Argument]: pass
[docs] @classmethod def normalize_config( cls, data: Dict={}, strict: bool=True, ) -> Dict: r"""Normalized the argument. Parameters ---------- data: Dict The input dict of arguments. strict: bool Strictly check the arguments. Returns ------- data: Dict The normalized arguments. """ ta = cls.args() base = dargs.Argument("base", dict, ta) data = base.normalize_value(data, trim_pattern="_*") base.check_value(data, strict=strict) return data