Source code for full_dia.main
#!/usr/bin/env python
import argparse
from pathlib import Path
from full_dia import cfg, cross, utils
from full_dia.library import Library
from full_dia.log import Logger
from full_dia.search import search_core
try:
_ = profile
except NameError:
[docs]
def profile(func):
return func
logger = Logger.get_logger()
[docs]
def bootstrap(args: argparse.Namespace) -> None:
"""
Initialize tasks.
"""
# create out folder
out_dir = Path(args.ws) / args.out_name
out_dir.mkdir(exist_ok=True)
# init log
Logger.set_logger(out_dir)
# print info
utils.check_run_info(args)
# init cfg
cfg.load_default()
cfg.update_from_yaml(args.cfg_develop)
# init ws
utils.init_multi_ws(Path(args.ws), args.out_name)
# init gpu
utils.init_gpu_params(args.gpu_id)
# others
cfg.is_compare_mode = args.compare
cfg.is_overwrite = args.overwrite
if args.low_memory:
cfg.target_batch_max = cfg.target_batch_max / 2.0
# check
if cfg.file_num < 2:
info = "Full-DIA needs >= 2 runs to complete the analysis!"
logger.warning(info)
[docs]
@profile
def main():
# init
args = utils.get_args()
bootstrap(args)
# lib
lib = Library(args.lib)
# search
search_core(lib)
# global
logger.info("=================Global Analysis=================")
df_global = cross.perform_global(
lib, cfg.top_k_fg, cfg.top_k_pr, multi_ws=cfg.multi_ws
)
cross.save_report_result(df_global, multi_ws=cfg.multi_ws)
logger.info("Finished.")
return
if __name__ == "__main__":
main()