def get_corrs()

in student_specialization/vis_corrs.py [0:0]


def get_corrs(corrs, active_nodes=None, first_n=5, cnt_thres=0.9, details=False):
    summary = ""
    for k, corr_per_layer in enumerate(corrs):
        score = []
        cnts = []
        for kk, corr_per_node in enumerate(corr_per_layer):
            if active_nodes is not None and kk not in active_nodes[k]:
                continue

            # Get best score for each teacher
            if isinstance(corr_per_node, list):
                s = [ c["score"] for c in corr_per_node ]
            else:
                s = corr_per_node["s_score"]
            score.append(s[0])
            if cnt_thres is not None:
                cnt = sum([ ss >= cnt_thres for ss in s ])
                cnts.append(cnt)

        summary += f"L{k}: {get_stat(score)}"
        if cnt_thres is not None:
            summary += f", MatchCnt[>={cnt_thres}]: {get_stat(cnts)}"
        summary += "\n"

    output = ""
    output += f"Corrs Summary:\n{summary}"

    if details:
        output += "\n"
        for k, corr_per_layer in enumerate(corrs):
            # For each layer
            output += "Layer %d\n" % k
            for j, corr_per_node in enumerate(corr_per_layer):
                s_score = corr_per_node["s_score"][:first_n]
                s_idx = corr_per_node["s_idx"][:first_n]

                s_score_str = ",".join(["%.4f" % v for v in s_score])
                s_idx_str = ",".join(["%2d [%s]" % (node_id, rank) for node_id, rank in s_idx])
                # import pdb
                # pdb.set_trace()

                min_rank = min([ int(rank) for node_id, rank in s_idx ])
                output += "T[%d]: [init_best_s=%.4f] %s | idx: %s | min_rank: %d\n" % (j, corr_per_node["max_init_score"], s_score_str, s_idx_str, min_rank)
                # print("T[%d]: [init_best_s=%.4f] %s | idx: %s " % (j, corr_per_node["max_init_score"], s_score_str, s_idx_str))

    return output