Source code for dpdata.cli

"""Command line interface for dpdata."""

import argparse
from typing import Optional

from . import __version__
from .system import LabeledSystem, MultiSystems, System


[docs] def dpdata_parser() -> argparse.ArgumentParser: """Returns dpdata cli parser. Returns ------- argparse.ArgumentParser dpdata cli parser """ parser = argparse.ArgumentParser( description="dpdata: Manipulating multiple atomic simulation data formats", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument("from_file", type=str, help="read data from a file") parser.add_argument("--to_file", "-O", type=str, help="dump data to a file") parser.add_argument( "--from_format", "-i", type=str, default="auto", help="the format of from_file" ) parser.add_argument("--to_format", "-o", type=str, help="the format of to_file") parser.add_argument( "--no-labeled", "-n", action="store_true", help="labels aren't provided" ) parser.add_argument( "--multi", "-m", action="store_true", help="the system contains multiple directories", ) parser.add_argument("--type-map", "-t", type=str, nargs="+", help="type map") parser.add_argument( "--version", action="version", version="dpdata v%s" % __version__ ) return parser
[docs] def dpdata_cli(): """Dpdata cli. Examples -------- .. code-block:: bash $ dpdata -iposcar POSCAR -odeepmd/npy -O data -n """ parser = dpdata_parser() parsed_args = parser.parse_args() convert(**vars(parsed_args))
[docs] def convert( *, from_file: str, from_format: str = "auto", to_file: Optional[str] = None, to_format: Optional[str] = None, no_labeled: bool = False, multi: bool = False, type_map: Optional[list] = None, **kwargs, ): """Convert files from one format to another one. Parameters ---------- from_file : str read data from a file from_format : str the format of from_file to_file : str dump data to a file to_format : str the format of to_file no_labeled : bool labels aren't provided multi : bool the system contains multiple directories type_map : list type map **kwargs : dict Additional arguments for the format. """ if multi: s = MultiSystems.from_file( from_file, fmt=from_format, type_map=type_map, labeled=not no_labeled ) elif not no_labeled: s = LabeledSystem(from_file, fmt=from_format, type_map=type_map) else: s = System(from_file, fmt=from_format, type_map=type_map) if to_format is not None: out = s.to(to_format, to_file) if isinstance(out, str): print(out) else: print(s)