def expand_preset(self, preset): """ Replace a short preset name with the full python path, and verify that it can be imported. """ if preset.lower() in [p.lower() for p in list_all_presets()]: preset = "{}.py:graph_manager".format( os.path.join(get_base_dir(), 'presets', preset)) else: preset = "{}".format(preset) # if a graph manager variable was not specified, try the default of :graph_manager if len(preset.split(":")) == 1: preset += ":graph_manager" # verify that the preset exists preset_path = preset.split(":")[0] if not os.path.exists(preset_path): screen.error( "The given preset ({}) cannot be found.".format(preset)) # verify that the preset can be instantiated try: short_dynamic_import(preset, ignore_module_case=True) except TypeError as e: traceback.print_exc() screen.error('Internal Error: ' + str(e) + "\n\nThe given preset ({}) cannot be instantiated.". format(preset)) return preset
def display_all_presets_and_exit(self): # list available presets screen.log_title("Available Presets:") for preset in sorted(list_all_presets()): print(preset) sys.exit(0)
def parse_arguments(parser: argparse.ArgumentParser) -> argparse.Namespace: """ Parse the arguments that the user entered :param parser: the argparse command line parser :return: the parsed arguments """ args = parser.parse_args() # if no arg is given if len(sys.argv) == 1: parser.print_help() exit(0) # list available presets preset_names = list_all_presets() if args.list: screen.log_title("Available Presets:") for preset in sorted(preset_names): print(preset) sys.exit(0) # replace a short preset name with the full path if args.preset is not None: if args.preset.lower() in [p.lower() for p in preset_names]: args.preset = "{}.py:graph_manager".format( os.path.join(get_base_dir(), 'presets', args.preset)) else: args.preset = "{}".format(args.preset) # if a graph manager variable was not specified, try the default of :graph_manager if len(args.preset.split(":")) == 1: args.preset += ":graph_manager" # verify that the preset exists preset_path = args.preset.split(":")[0] if not os.path.exists(preset_path): screen.error("The given preset ({}) cannot be found.".format( args.preset)) # verify that the preset can be instantiated try: short_dynamic_import(args.preset, ignore_module_case=True) except TypeError as e: traceback.print_exc() screen.error('Internal Error: ' + str(e) + "\n\nThe given preset ({}) cannot be instantiated.". format(args.preset)) # validate the checkpoints args if args.checkpoint_restore_dir is not None and not os.path.exists( args.checkpoint_restore_dir): screen.error( "The requested checkpoint folder to load from does not exist.") # no preset was given. check if the user requested to play some environment on its own if args.preset is None and args.play: if args.environment_type: args.agent_type = 'Human' else: screen.error( 'When no preset is given for Coach to run, and the user requests human control over ' 'the environment, the user is expected to input the desired environment_type and level.' '\nAt least one of these parameters was not given.') elif args.preset and args.play: screen.error( "Both the --preset and the --play flags were set. These flags can not be used together. " "For human control, please use the --play flag together with the environment type flag (-et)" ) elif args.preset is None and not args.play: screen.error( "Please choose a preset using the -p flag or use the --play flag together with choosing an " "environment type (-et) in order to play the game.") # get experiment name and path args.experiment_name = logger.get_experiment_name(args.experiment_name) args.experiment_path = logger.get_experiment_path(args.experiment_name) if args.play and args.num_workers > 1: screen.warning( "Playing the game as a human is only available with a single worker. " "The number of workers will be reduced to 1") args.num_workers = 1 args.framework = Frameworks[args.framework.lower()] # checkpoints args.save_checkpoint_dir = os.path.join( args.experiment_path, 'checkpoint') if args.save_checkpoint_secs is not None else None return args