Source code for pyrevs.bin.bin

"""A few CLI functions for pyREVS."""

import argparse
from importlib.metadata import PackageNotFoundError
from importlib.metadata import version
from pyrevs.core import ForwardModelBaseClass
from pyrevs.sampler import build_sampler
from pyrevs.sampler.system_config import SystemConfig
from pyrevs.utils.utils import generate_subclass
from pyrevs.utils.utils import import_forward_model


[docs] def parse_cl_args(a_args: list[str] | None = None) -> argparse.Namespace: """Parse provided list or default CL argv. Args: a_args: optional list of options """ parser = argparse.ArgumentParser() parser.add_argument( "-n", "--name", help="New mode class name", default="MyNewClass", ) parser.add_argument( "--include_optional", help="Include optional methods in subclass", default=False, ) parser.add_argument( "-m", "--module", help="Module implementing forward model", default=None, ) parser.add_argument( "-i", "--input", help="pyREVS input .toml file", default="input.toml", ) return parser.parse_args() if a_args is None else parser.parse_args(a_args)
[docs] def alive() -> None: """Check pyREVS.""" try: print(f"== pyREVS v{version('pyrevs')} :: a rare-event finder tool ==") # noqa: T201 except PackageNotFoundError: print("Package version not found") # noqa: T201
[docs] def input_help() -> None: """Print a help message for a dataclass.""" print("== pyREVS input file help ==") # noqa: T201 SystemConfig.print_config_help()
[docs] def template_model(a_args: list[str] | None = None) -> None: """Copy a templated forward model file. A helper function to help getting started from scratch on a new model. The include_optional flag will add all the non final methods to the subclass, usefull when dealing with more complex models. Args: a_args: optional list of options """ model_name = vars(parse_cl_args(a_args=a_args))["name"] incl_opt = vars(parse_cl_args(a_args=a_args))["include_optional"] out_file = f"{model_name}.py" generate_subclass(ForwardModelBaseClass, model_name, out_file, incl_opt)
[docs] def sampling_run(a_args: list[str] | None = None) -> None: """Start a pyREVS run from a file with a forward model. Args: a_args: optional list of options """ # Find and return the forward model ABC implementation in file fmodel_file = vars(parse_cl_args(a_args=a_args))["module"] fmodel_t = import_forward_model(fmodel_file, ForwardModelBaseClass) # Extract just the input file into a shorter list of params input_file = vars(parse_cl_args(a_args=a_args))["input"] shorten_list = ["-i", f"{input_file}"] sampler = build_sampler(fmodel_t, shorten_list) sampler.run()