Source code for dpgen.main

#!/usr/bin/env python
# Copyright (c) DeepGenerator Development Team.


import argparse
import sys

from dpgen import info
from dpgen.auto_test.run import gen_test
from dpgen.collect.collect import gen_collect
from dpgen.data.gen import gen_init_bulk
from dpgen.data.reaction import gen_init_reaction
from dpgen.data.surf import gen_init_surf
from dpgen.database.run import db_run
from dpgen.generator.run import gen_run
from dpgen.gui import start_dpgui
from dpgen.simplify.simplify import gen_simplify
from dpgen.tools.auto_gen_param import auto_gen_param
from dpgen.tools.run_report import run_report

"""
A master convenience script with many tools for driving dpgen.
"""

__author__ = "Han Wang"
__copyright__ = "Copyright 2019, The DP-GEN Project"
__maintainer__ = "Haidi Wang"
__email__ = ""


[docs] def main_parser() -> argparse.ArgumentParser: """Returns parser for `dpgen` command. Returns ------- argparse.ArgumentParser parser for `dpgen` command """ parser = argparse.ArgumentParser( description=""" dpgen is a convenient script that uses DeepGenerator to prepare initial data, drive DeepMDkit and analyze results. This script works based on several sub-commands with their own options. To see the options for the sub-commands, type "dpgen sub-command -h".""" ) subparsers = parser.add_subparsers() # init surf model parser_init_surf = subparsers.add_parser( "init_surf", help="Generating initial data for surface systems." ) parser_init_surf.add_argument( "PARAM", type=str, help="parameter file, json/yaml format" ) parser_init_surf.add_argument( "MACHINE", type=str, default=None, nargs="?", help="machine file, json/yaml format", ) parser_init_surf.set_defaults(func=gen_init_surf) # init bulk model parser_init_bulk = subparsers.add_parser( "init_bulk", help="Generating initial data for bulk systems." ) parser_init_bulk.add_argument( "PARAM", type=str, help="parameter file, json/yaml format" ) parser_init_bulk.add_argument( "MACHINE", type=str, default=None, nargs="?", help="machine file, json/yaml format", ) parser_init_bulk.set_defaults(func=gen_init_bulk) parser_auto_gen_param = subparsers.add_parser( "auto_gen_param", help="auto gen param.json" ) # parser_auto_gen_param.add_argument('meltpoint', type=float, help="melt point") parser_auto_gen_param.add_argument( "PARAM", type=str, help="parameter file, json/yaml format" ) parser_auto_gen_param.set_defaults(func=auto_gen_param) # parser_init_reaction parser_init_reaction = subparsers.add_parser( "init_reaction", help="Generating initial data for reactive systems." ) parser_init_reaction.add_argument( "PARAM", type=str, help="parameter file, json/yaml format" ) parser_init_reaction.add_argument( "MACHINE", type=str, default=None, nargs="?", help="machine file, json/yaml format", ) parser_init_reaction.set_defaults(func=gen_init_reaction) # run parser_run = subparsers.add_parser( "run", help="Main process of Deep Potential Generator." ) parser_run.add_argument("PARAM", type=str, help="parameter file, json/yaml format") parser_run.add_argument("MACHINE", type=str, help="machine file, json/yaml format") parser_run.add_argument("-d", "--debug", action="store_true", help="log debug info") parser_run.set_defaults(func=gen_run) # run/report parser_rr = subparsers.add_parser( "run/report", help="Report the systems and the thermodynamic conditions of the labeled frames.", ) parser_rr.add_argument("JOB_DIR", type=str, help="the directory of the DP-GEN job,") parser_rr.add_argument( "-s", "--stat-sys", action="store_true", help="count the labeled frames for each system", ) parser_rr.add_argument( "-i", "--stat-iter", action="store_true", help="print the iteration candidate,failed,accurate count and fp calculation,success and fail count", ) parser_rr.add_argument( "-t", "--stat-time", action="store_true", help="print the iteration time, warning!! assume model_devi parallel cores == 1", ) parser_rr.add_argument( "-p", "--param", type=str, default="param.json", help="the json file provides DP-GEN paramters, should be located in JOB_DIR", ) parser_rr.add_argument("-v", "--verbose", action="store_true", help="being loud") parser_rr.set_defaults(func=run_report) # collect parser_coll = subparsers.add_parser("collect", help="Collect data.") parser_coll.add_argument( "JOB_DIR", type=str, help="the directory of the DP-GEN job" ) parser_coll.add_argument("OUTPUT", type=str, help="the output directory of data") parser_coll.add_argument( "-p", "--parameter", type=str, default="param.json", help="the json file provides DP-GEN paramters, should be located in JOB_DIR", ) parser_coll.add_argument( "-v", "--verbose", action="store_true", help="print number of data in each system", ) parser_coll.add_argument( "-m", "--merge", action="store_true", help="merge the systems with the same chemical formula", ) parser_coll.add_argument( "-s", "--shuffle", action="store_true", help="shuffle the data systems" ) parser_coll.set_defaults(func=gen_collect) # simplify parser_run = subparsers.add_parser("simplify", help="Simplify data.") parser_run.add_argument("PARAM", type=str, help="parameter file, json/yaml format") parser_run.add_argument("MACHINE", type=str, help="machine file, json/yaml format") parser_run.add_argument("-d", "--debug", action="store_true", help="log debug info") parser_run.set_defaults(func=gen_simplify) # test parser_test = subparsers.add_parser( "autotest", help="Auto-test for Deep Potential." ) parser_test.add_argument("TASK", type=str, help="task can be make, run or post") parser_test.add_argument("PARAM", type=str, help="parameter file, json/yaml format") parser_test.add_argument( "MACHINE", type=str, default=None, nargs="?", help="machine file, json/yaml format", ) parser_test.add_argument( "-d", "--debug", action="store_true", help="log debug info" ) parser_test.set_defaults(func=gen_test) # db parser_db = subparsers.add_parser("db", help="Collecting data from DP-GEN.") parser_db.add_argument("PARAM", type=str, help="parameter file, json format") parser_db.set_defaults(func=db_run) # gui parser_gui = subparsers.add_parser( "gui", help="Serve DP-GUI.", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser_gui.add_argument( "-p", "--port", type=int, default=6042, help="The port to serve DP-GUI on.", ) parser_gui.add_argument( "--bind_all", action="store_true", help=( "Serve on all public interfaces. This will expose your DP-GUI instance " "to the network on both IPv4 and IPv6 (where available)." ), ) parser_gui.set_defaults(func=start_dpgui) return parser
[docs] def main(): info() print("Description\n------------") parser = main_parser() try: import argcomplete argcomplete.autocomplete(parser) except ImportError: # argcomplete not present. pass args = parser.parse_args() try: getattr(args, "func") except AttributeError: parser.print_help() sys.exit(0) args.func(args)
if __name__ == "__main__": main()