utils.exit_unless_accessible(args.calls) utils.setup_logging(verbosity=args.verbose) # Load graph database (remove duplicates) df_all = df_from_csv_file(args.calls) df = df_all.drop_duplicates() from_fun, to_fun = args.from_function, args.to_function left, right = search_settings(args.direction, args.cutoff) merge_on = ["caller_filename", "caller_function", "callee_filename", "callee_function"] chains_df_right = pd.DataFrame(columns=merge_on) if right: chains_df_right = find_chains_directed_df(df, from_fun, to_fun, right) chains_df_left = pd.DataFrame(columns=merge_on) if left: chains_df_left = find_chains_directed_df(df, from_fun, to_fun, left) _LOGGER.info("Generating the results...") df_chains = pd.concat([chains_df_left, chains_df_right]).drop_duplicates() df_chains = pd.merge(df_all, df_chains, on=merge_on, how='inner') if args.out.endswith(".csv"): df_to_csv_file(df_chains, args.out) else: grapher = Grapher(args.out) grapher.graph(df_chains) grapher.render(args.out) _LOGGER.info("Done")