Source code for sequifier.sequifier

from argparse import ArgumentParser
from typing import Any

import numpy as np
from beartype import beartype

from sequifier.hyperparameter_search import hyperparameter_search
from sequifier.infer import infer
from sequifier.make import make
from sequifier.preprocess import preprocess
from sequifier.train import train


[docs] @beartype def build_args_config(args: Any) -> dict[str, Any]: """ Build configuration dictionary from command-line arguments. Args: args: Parsed command-line arguments. Returns: Dictionary containing configuration options. """ args_config = { k: v for k, v in vars(args).items() if v is not None and k != "randomize" } if args.command != "make": if args.randomize: seed = np.random.choice(np.arange(int(1e9))) args_config["seed"] = seed elif args.command in ["train", "infer"] and args.seed: args_config["seed"] = args.seed else: args_config["seed"] = 1010 if "selected_columns" in args_config: if args_config["selected_columns"] == "None": args_config["selected_columns"] = None else: args_config["selected_columns"] = ( args_config["selected_columns"].replace(" ", "").split(",") ) return args_config
[docs] @beartype def setup_parser() -> ArgumentParser: """ Set up the argument parser for the command-line interface. Returns: Configured ArgumentParser object. """ parser = ArgumentParser() subparsers = parser.add_subparsers(dest="command", help="Available commands") parser_make = subparsers.add_parser("make", help="Set up sequifier project") parser_make.add_argument("project_name", type=str) parser_preprocess = subparsers.add_parser( "preprocess", help="Run the preprocessing step" ) parser_train = subparsers.add_parser("train", help="Run the training step") parser_infer = subparsers.add_parser("infer", help="Run the inference step") parser_hyperparameter_search = subparsers.add_parser( "hyperparametersearch", help="Run hyperparamter search" ) for subparser in [ parser_preprocess, parser_train, parser_infer, parser_hyperparameter_search, ]: subparser.add_argument( "--config-path", type=str, help="File path to config for current processing step", ) if subparser != parser_hyperparameter_search: subparser.add_argument("-r", "--randomize", action="store_true") subparser.add_argument("-sc", "--selected-columns", type=str) subparser.add_argument("-dp", "--data-path", type=str) for subparser in [parser_train, parser_infer, parser_hyperparameter_search]: subparser.add_argument("-ddcp", "--ddconfig-path", type=str) subparser.add_argument("-op", "--on-unprocessed", action="store_true") parser_train.add_argument("-mn", "--model-name", type=str) parser_train.add_argument("-s", "--seed", type=int) parser_infer.add_argument("-imp", "--model-path", type=str) parser_infer.add_argument("-s", "--seed", type=int) return parser
[docs] def main() -> None: """ Main function to run the Sequifier CLI. """ parser = setup_parser() args = parser.parse_args() if args.command != "hyperparametersearch": args_config = build_args_config(args) if args.command == "make": make(args) elif args.command == "preprocess": preprocess(args, args_config) elif args.command == "train": train(args, args_config) elif args.command == "infer": infer(args, args_config) elif args.command == "hyperparametersearch": hyperparameter_search(args.config_path, args.on_unprocessed)
if __name__ == "__main__": main()