Source code for deephyper.core.parser
import argparse
import inspect
from inspect import signature
[docs]def add_arguments_from_signature(parser, obj, prefix="", exclude=[]):
"""Add arguments to parser base on obj default keyword parameters.
:meta private:
Args:
parser (ArgumentParser)): the argument parser to which we want to add arguments.
obj (type): the class from which we want to extract default parameters for the constructor.
"""
sig = signature(obj)
prefix = f"{prefix}-" if len(prefix) > 0 else ""
added_arguments = []
for p_name, p in sig.parameters.items():
if not (p_name in exclude):
if p.kind == inspect._POSITIONAL_OR_KEYWORD:
arg_format = f"--{prefix}{p_name.replace('_', '-')}"
arg_kwargs = {"help": ""}
# check type int
if not (p.annotation is inspect._empty):
arg_kwargs["type"] = p.annotation
arg_kwargs["help"] += f"Type[{p.annotation.__name__}]. "
# check default value
if p.default is not inspect._empty:
arg_kwargs["default"] = p.default
arg_kwargs["help"] += f"Defaults to '{str(p.default)}'. "
else:
arg_kwargs["required"] = True
parser.add_argument(
arg_format,
**arg_kwargs,
)
added_arguments.append(p_name)
return added_arguments
[docs]def str2bool(v):
"""
:meta private:
"""
if isinstance(v, bool):
return v
if v.lower() in ("yes", "true", "t", "y", "1"):
return True
elif v.lower() in ("no", "false", "f", "n", "0"):
return False
else:
raise argparse.ArgumentTypeError("Boolean value expected.")