#!/usr/bin/env python3
"""把复算需要的原始数据导成纯文本，供 audit_delivery.py（纯标准库、不依赖 numpy/scipy）独立复算。"""
import json, os
import numpy as np

HERE = os.path.dirname(os.path.abspath(__file__))
RES = os.path.join(HERE, "..", "results")


def main():
    z = np.load(os.path.join(RES, "scores.npz"))
    nodes = json.load(open(os.path.join(RES, "network_nodes.json"), encoding="utf-8"))
    symbols = nodes["symbols"]
    mask, labels = z["mask"], z["labels"]
    rwr, deg = z["rwr_full"], z["deg_w"]
    zs = np.load(os.path.join(RES, "null_gene_stats.npz"))["zscore"]
    idxs = np.where(mask)[0]
    with open(os.path.join(RES, "eval_scores.tsv"), "w", encoding="utf-8") as fh:
        fh.write("gene\trwr_score\tweighted_degree\tdegree_corrected_z\tcvd_label\n")
        for pos, i in enumerate(idxs):
            fh.write("%s\t%r\t%r\t%r\t%d\n" % (symbols[i], float(rwr[i]), float(deg[i]), float(zs[i]), int(labels[pos])))
    np.savetxt(os.path.join(RES, "null_auroc_main.txt"), z["null_main"], fmt="%.17g")
    np.savetxt(os.path.join(RES, "null_auroc_temporal.txt"), z["null_temporal"], fmt="%.17g")
    tm, tl = z["tmask"], z["tlabels"]
    tidx = np.where(tm)[0]
    with open(os.path.join(RES, "eval_scores_temporal.tsv"), "w", encoding="utf-8") as fh:
        fh.write("gene\trwr_temporal_score\tweighted_degree\tnew_cvd_label\n")
        for pos, i in enumerate(tidx):
            fh.write("%s\t%r\t%r\t%d\n" % (symbols[i], float(z["rwr_temporal"][i]), float(deg[i]), int(tl[pos])))
    print(json.dumps({"eval_rows": len(idxs), "temporal_rows": len(tidx),
                      "null_main": int(len(z["null_main"]))}, ensure_ascii=False))


if __name__ == "__main__":
    main()
