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 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()