Ctrl K
ComunidadGuías…

benchmark/bt.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import lib.config as cfg
from lib.generate import create_models, load_models
import lib.argument_parser as arg_parser
from lib.paths import SourcePath, LoadSourcePath, OutputPath
from lib.log import configure_logging
from lib.model_grapher import GrapherWrapper
from lib.model_type import get_all_model_types

import lib.solver as slv
import lib.overview as ov

import logging
import sys


def main():
    parser = arg_parser.init_parser()
    args = parser.parse_args()

    if not any([args.source, args.load]):
        parser.print_help()
        return

    # Initialize logging
    configure_logging(args.verbose, OutputPath("bt.log"))
    cfg.verbose = args.verbose
    logger = logging.getLogger("bt")

    models = []
    if args.load:
        logger.info(f"Loading models from source {args.load}")
        loaded_models = load_models(LoadSourcePath(args.load))
        models.extend(loaded_models)
        logger.info(f"Loaded {len(loaded_models)} models")

    if args.source:
        logger.info(
            f"Creating models from {args.source} using {args.model_type} model type base, output to '{args.output}'"
        )

        logger.info("Parsing provided model types...")
        model_types = get_all_model_types(args.model_type)
        logger.info(f"Parsed following model types: {list(model_type.name for model_type in model_types)}")

        generated_models = create_models(
            SourcePath(args.source), model_types, OutputPath(args.output)
        )
        models.extend(generated_models)
        logger.info(f"Created {len(generated_models)} models")

    solvers = []
    if args.solver:
        logger.info("Getting provided solvers...")
        solvers = slv.parse_solvers(args.solver)
        if solvers:
            logger.info(
                f"Solving {len(models)} models using solvers: {[solver.get_solver_name() for solver in solvers]}..."
            )
            logger.info(f"Timeout is set to {args.timeout}s")
            for model in models:
                for solver in solvers:
                    if solver.available:
                        run_data = solver.run(model, args.timeout, [])
                        model.add_solver_data(run_data)

    logger.info("Presenting results:")
    for model in models:
        model.show()

    if solvers:
        slv.present_solvers()

    ov.present_overview(models, solvers)

    if args.graph:
        logger.info("Generating graphs...")
        grapher = GrapherWrapper(OutputPath(args.output), models, solvers)
        grapher.generate_graphs()


if __name__ == "__main__":
    sys.exit(main())