def create_parser( prog: str = None, subcommand_overrides: Dict[str, Subcommand] = None) -> argparse.ArgumentParser: """ Creates the argument parser for the main program. """ if subcommand_overrides is None: subcommand_overrides = {} parser = ArgumentParserWithDefaults(description="Run AllenNLP", usage="%(prog)s", prog=prog) parser.add_argument("--version", action="version", version="%(prog)s " + __version__) subparsers = parser.add_subparsers(title="Commands", metavar="") subcommands = { # Default commands "train": Train(), "evaluate": Evaluate(), "predict": Predict(), "elmo": Elmo(), "fine-tune": FineTune(), "dry-run": DryRun(), "make-vocab": DryRun(), # deprecated, but keeping for backward compatibility. "test-install": TestInstall(), "find-lr": FindLearningRate(), "print-results": PrintResults(), # Superseded by overrides **subcommand_overrides, } for name, subcommand in subcommands.items(): subparser = subcommand.add_subparser(name, subparsers) # configure doesn't need include-package because it imports # whatever classes it needs. if name != "configure": subparser.add_argument( "--include-package", type=str, action="append", default=[], help="additional packages to include", ) return parser
def main(prog: str = None, subcommand_overrides: Dict[str, Subcommand] = {}) -> None: """ The :mod:`~allennlp.run` command only knows about the registered classes in the ``allennlp`` codebase. In particular, once you start creating your own ``Model`` s and so forth, it won't work for them, unless you use the ``--include-package`` flag. """ parser = ArgumentParserWithDefaults(description="Run AllenNLP", usage="%(prog)s", prog=prog) parser.add_argument("--version", action="version", version="%(prog)s " + __version__) subparsers = parser.add_subparsers(title="Commands", metavar="") subcommands = { # Default commands "configure": Configure(), "train": Train(), "evaluate": Evaluate(), "predict": Predict(), "make-vocab": MakeVocab(), "elmo": Elmo(), "fine-tune": FineTune(), "dry-run": DryRun(), "test-install": TestInstall(), "find-lr": FindLearningRate(), "print-results": PrintResults(), # Superseded by overrides **subcommand_overrides, } for name, subcommand in subcommands.items(): subparser = subcommand.add_subparser(name, subparsers) # configure doesn't need include-package because it imports # whatever classes it needs. if name != "configure": subparser.add_argument( "--include-package", type=str, action="append", default=[], help="additional packages to include", ) args = parser.parse_args() # If a subparser is triggered, it adds its work as `args.func`. # So if no such attribute has been added, no subparser was triggered, # so give the user some help. if "func" in dir(args): # Import any additional modules needed (to register custom classes). for package_name in getattr(args, "include_package", ()): import_submodules(package_name) args.func(args) else: parser.print_help()
def main(prog: str = None, subcommand_overrides: Dict[str, Subcommand] = {}) -> None: """ The :mod:`~allennlp.run` command only knows about the registered classes in the ``allennlp`` codebase. In particular, once you start creating your own ``Model`` s and so forth, it won't work for them, unless you use the ``--include-package`` flag. """ # pylint: disable=dangerous-default-value parser = argparse.ArgumentParser(description="Run AllenNLP", usage='%(prog)s', prog=prog) parser.add_argument('--version', action='version', version='%(prog)s ' + __version__) subparsers = parser.add_subparsers(title='Commands', metavar='') subcommands = { # Default commands "configure": Configure(), "train": Train(), "train_multitask": TrainMultiTask(), # includes the auxillary citation section prediction task "train_multitask_2": TrainMultiTask2(), # includes both tasks "evaluate": Evaluate(), "predict": Predict(), "make-vocab": MakeVocab(), "elmo": Elmo(), "fine-tune": FineTune(), "dry-run": DryRun(), "test-install": TestInstall(), # Superseded by overrides **subcommand_overrides } for name, subcommand in subcommands.items(): subparser = subcommand.add_subparser(name, subparsers) # configure doesn't need include-package because it imports # whatever classes it needs. if name != "configure": subparser.add_argument('--include-package', type=str, action='append', default=[], help='additional packages to include') args = parser.parse_args() # If a subparser is triggered, it adds its work as `args.func`. # So if no such attribute has been added, no subparser was triggered, # so give the user some help. if 'func' in dir(args): # Import any additional modules needed (to register custom classes). for package_name in getattr(args, 'include_package', ()): try: import_submodules(package_name) except TypeError: import pdb; pdb.set_trace() args.func(args) else: parser.print_help()
def test_make_vocab_args(self): parser = argparse.ArgumentParser(description="Testing") subparsers = parser.add_subparsers(title="Commands", metavar="") DryRun().add_subparser("dry-run", subparsers) for serialization_arg in ["-s", "--serialization-dir"]: raw_args = ["dry-run", "path/to/params", serialization_arg, "serialization_dir"] args = parser.parse_args(raw_args) assert args.func == dry_run_from_args assert args.param_path == "path/to/params" assert args.serialization_dir == "serialization_dir"
def test_make_vocab_args(self): parser = argparse.ArgumentParser(description="Testing") subparsers = parser.add_subparsers(title='Commands', metavar='') DryRun().add_subparser('dry-run', subparsers) for serialization_arg in ["-s", "--serialization-dir"]: raw_args = ["dry-run", "path/to/params", serialization_arg, "serialization_dir"] args = parser.parse_args(raw_args) assert args.func == dry_run_from_args # pylint: disable=comparison-with-callable assert args.param_path == "path/to/params" assert args.serialization_dir == "serialization_dir"
def main(prog=None, subcommand_overrides={}): u""" The :mod:`~allennlp.run` command only knows about the registered classes in the ``allennlp`` codebase. In particular, once you start creating your own ``Model`` s and so forth, it won't work for them, unless you use the ``--include-package`` flag. """ # pylint: disable=dangerous-default-value parser = argparse.ArgumentParser(description=u"Run AllenNLP", usage=u'%(prog)s', prog=prog) parser.add_argument(u'--version', action=u'version', version=u'%(prog)s ') subparsers = parser.add_subparsers(title=u'Commands', metavar=u'') subcommands = { # Default commands u"configure": Configure(), u"train": Train(), u"evaluate": Evaluate(), u"predict": Predict(), u"make-vocab": MakeVocab(), u"elmo": Elmo(), u"fine-tune": FineTune(), u"dry-run": DryRun(), u"test-install": TestInstall(), } for name, subcommand in list(subcommands.items()): subparser = subcommand.add_subparser(name, subparsers) # configure doesn't need include-package because it imports # whatever classes it needs. if name != u"configure": subparser.add_argument(u'--include-package', type=unicode, action=u'append', default=[], help=u'additional packages to include') args = parser.parse_args() # If a subparser is triggered, it adds its work as `args.func`. # So if no such attribute has been added, no subparser was triggered, # so give the user some help. if u'func' in dir(args): # Import any additional modules needed (to register custom classes). for package_name in getattr(args, u'include_package', ()): import_submodules(package_name) args.func(args) else: parser.print_help()
def main(prog: str = None, subcommand_overrides: Dict[str, Subcommand] = {}) -> None: """ The :mod:`~allennlp.run` command only knows about the registered classes in the ``allennlp`` codebase. In particular, once you start creating your own ``Model`` s and so forth, it won't work for them, unless you use the ``--include-package`` flag. """ # pylint: disable=dangerous-default-value parser = argparse.ArgumentParser(description="Run AllenNLP", usage='%(prog)s', prog=prog) subparsers = parser.add_subparsers(title='Commands', metavar='') subcommands = { # Default commands "train": Train(), "evaluate": Evaluate(), "predict": Predict(), "make-vocab": MakeVocab(), "elmo": Elmo(), "fine-tune": FineTune(), "dry-run": DryRun(), # Superseded by overrides **subcommand_overrides } for name, subcommand in subcommands.items(): subparser = subcommand.add_subparser(name, subparsers) subparser.add_argument('--include-package', type=str, action='append', default=[], help='additional packages to include') args = parser.parse_args() # If a subparser is triggered, it adds its work as `args.func`. # So if no such attribute has been added, no subparser was triggered, # so give the user some help. if 'func' in dir(args): # Import any additional modules needed (to register custom classes). for package_name in args.include_package: import_submodules(package_name) # Run a command args.func(args) else: parser.print_help()