from csv import DictReader

import numpy


def main():



    ppiHuman_idmap_List = {}
    ppiHuman_id_DGLKE_List = {}
    pidHuman_idmap_file = '../DATA_KGE/HINT_HUMAN/HomoSapiens_binary_hq.txt'
    with open(pidHuman_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiHuman_id_DGLKE_List:
                ppiHuman_id_DGLKE_List[str(p1id)] = set()
            ppiHuman_id_DGLKE_List[str(p1id)].add(str(9606))
            if str(p2id) not in ppiHuman_id_DGLKE_List:
                ppiHuman_id_DGLKE_List[str(p2id)] = set()
            ppiHuman_id_DGLKE_List[str(p2id)].add(str(9606))
            if str(p1id) not in ppiHuman_idmap_List:
                ppiHuman_idmap_List[str(p1id)] = set()
            ppiHuman_idmap_List[str(p1id)].add(str(p2id))

    ppiHuman_Complex_idmap_List = {}
    ppiHuman_Complex_id_DGLKE_List = {}
    pidHuman_idmap_file = '../DATA_KGE/HINT_HUMAN/HomoSapiens_cocomp_hq.txt'
    with open(pidHuman_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiHuman_Complex_id_DGLKE_List:
                ppiHuman_Complex_id_DGLKE_List[str(p1id)] = set()
            ppiHuman_Complex_id_DGLKE_List[str(p1id)].add(str(9606))
            if str(p2id) not in ppiHuman_Complex_id_DGLKE_List:
                ppiHuman_Complex_id_DGLKE_List[str(p2id)] = set()
            ppiHuman_Complex_id_DGLKE_List[str(p2id)].add(str(9606))
            if str(p1id) not in ppiHuman_Complex_idmap_List:
                ppiHuman_Complex_idmap_List[str(p1id)] = set()
            ppiHuman_Complex_idmap_List[str(p1id)].add(str(p2id))



    ppiMouse_idmap_List = {}
    ppiMouse_id_DGLKE_List = {}
    pidMouse_idmap_file = '../DATA_KGE/HINT_MusMusculus/MusMusculus_binary_hq(1).txt'
    with open(pidMouse_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiMouse_id_DGLKE_List:
                ppiMouse_id_DGLKE_List[str(p1id)] = set()
            ppiMouse_id_DGLKE_List[str(p1id)].add(str(10090))
            if str(p2id) not in ppiMouse_id_DGLKE_List:
                ppiMouse_id_DGLKE_List[str(p2id)] = set()
            ppiMouse_id_DGLKE_List[str(p2id)].add(str(10090))
            if str(p1id) not in ppiMouse_idmap_List:
                ppiMouse_idmap_List[str(p1id)] = set()
            ppiMouse_idmap_List[str(p1id)].add(str(p2id))

    ppiMouse_Complex_idmap_List = {}
    ppiMouse_Complex_id_DGLKE_List = {}
    pidMousecomplex_idmap_file = '../DATA_KGE/HINT_MusMusculus/MusMusculus_cocomp_hq.txt'
    with open(pidMousecomplex_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiMouse_Complex_id_DGLKE_List:
                ppiMouse_Complex_id_DGLKE_List[str(p1id)] = set()
            ppiMouse_Complex_id_DGLKE_List[str(p1id)].add(str(10090))
            if str(p2id) not in ppiMouse_Complex_id_DGLKE_List:
                ppiMouse_Complex_id_DGLKE_List[str(p2id)] = set()
            ppiMouse_Complex_id_DGLKE_List[str(p2id)].add(str(10090))
            if str(p1id) not in ppiMouse_Complex_idmap_List:
                ppiMouse_Complex_idmap_List[str(p1id)] = set()
            ppiMouse_Complex_idmap_List[str(p1id)].add(str(p2id))

    ppiDroso_idmap_List = {}
    ppiDroso_id_DGLKE_List = {}
    pidDroso_idmap_file = '../DATA_KGE/HINT_DrosophilaMelanogaster/DrosophilaMelanogaster_binary_hq.txt'
    with open(pidDroso_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiDroso_id_DGLKE_List:
                ppiDroso_id_DGLKE_List[str(p1id)] = set()
            ppiDroso_id_DGLKE_List[str(p1id)].add(str("droso"))
            if str(p2id) not in ppiDroso_id_DGLKE_List:
                ppiDroso_id_DGLKE_List[str(p2id)] = set()
            ppiDroso_id_DGLKE_List[str(p2id)].add(str("droso"))
            if str(p1id) not in ppiDroso_idmap_List:
                ppiDroso_idmap_List[str(p1id)] = set()
            ppiDroso_idmap_List[str(p1id)].add(str(p2id))

    ppiDroso_Complex_idmap_List = {}
    ppiDroso_Complex_id_DGLKE_List = {}
    pidDroso_complex_idmap_file = '../DATA_KGE/HINT_DrosophilaMelanogaster/DrosophilaMelanogaster_cocomp_hq.txt'
    with open(pidDroso_complex_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiDroso_Complex_id_DGLKE_List:
                ppiDroso_Complex_id_DGLKE_List[str(p1id)] = set()
            ppiDroso_Complex_id_DGLKE_List[str(p1id)].add(str("droso"))
            if str(p2id) not in ppiDroso_Complex_id_DGLKE_List:
                ppiDroso_Complex_id_DGLKE_List[str(p2id)] = set()
            ppiDroso_Complex_id_DGLKE_List[str(p2id)].add(str("droso"))
            if str(p1id) not in ppiDroso_Complex_idmap_List:
                ppiDroso_Complex_idmap_List[str(p1id)] = set()
            ppiDroso_Complex_idmap_List[str(p1id)].add(str(p2id))

    ppiSaccharomycesCerev_idmap_List = {}
    ppiSaccharomycesCerev_id_DGLKE_List = {}
    pidSaccharomycesCerev_idmap_file = '../DATA_KGE/HINT_SaccharomycesCerevisiaeS288C/SaccharomycesCerevisiaeS288C_binary_hq.txt'
    with open(pidSaccharomycesCerev_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiSaccharomycesCerev_id_DGLKE_List:
                ppiSaccharomycesCerev_id_DGLKE_List[str(p1id)] = set()
            ppiSaccharomycesCerev_id_DGLKE_List[str(p1id)].add(str("SaccharomycesCerev"))
            if str(p2id) not in ppiSaccharomycesCerev_id_DGLKE_List:
                ppiSaccharomycesCerev_id_DGLKE_List[str(p2id)] = set()
            ppiSaccharomycesCerev_id_DGLKE_List[str(p2id)].add(str("SaccharomycesCerev"))
            if str(p1id) not in ppiSaccharomycesCerev_idmap_List:
                ppiSaccharomycesCerev_idmap_List[str(p1id)] = set()
            ppiSaccharomycesCerev_idmap_List[str(p1id)].add(str(p2id))

    ppiSaccharomycesCerev_Complex_idmap_List = {}
    ppiSaccharomycesCerev_Complex_id_DGLKE_List = {}
    pidSaccharomycesCerev_complex_idmap_file = '../DATA_KGE/HINT_SaccharomycesCerevisiaeS288C/SaccharomycesCerevisiaeS288C_cocomp_hq.txt'
    with open(pidSaccharomycesCerev_complex_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiSaccharomycesCerev_Complex_id_DGLKE_List:
                ppiSaccharomycesCerev_Complex_id_DGLKE_List[str(p1id)] = set()
            ppiSaccharomycesCerev_Complex_id_DGLKE_List[str(p1id)].add(str("SaccharomycesCerev"))
            if str(p2id) not in ppiSaccharomycesCerev_Complex_id_DGLKE_List:
                ppiSaccharomycesCerev_Complex_id_DGLKE_List[str(p2id)] = set()
            ppiSaccharomycesCerev_Complex_id_DGLKE_List[str(p2id)].add(str("SaccharomycesCerev"))
            if str(p1id) not in ppiSaccharomycesCerev_Complex_idmap_List:
                ppiSaccharomycesCerev_Complex_idmap_List[str(p1id)] = set()
            ppiSaccharomycesCerev_Complex_idmap_List[str(p1id)].add(str(p2id))

    ppiCeleg_idmap_List = {}
    ppiCeleg_id_DGLKE_List = {}
    pidCeleg_idmap_file = '../DATA_KGE/HINT_CaenorhabditisElegans/CaenorhabditisElegans_binary_hq.txt'
    with open(pidCeleg_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiCeleg_id_DGLKE_List:
                ppiCeleg_id_DGLKE_List[str(p1id)] = set()
            ppiCeleg_id_DGLKE_List[str(p1id)].add(str("Celeg"))
            if str(p2id) not in ppiCeleg_id_DGLKE_List:
                ppiCeleg_id_DGLKE_List[str(p2id)] = set()
            ppiCeleg_id_DGLKE_List[str(p2id)].add(str("Celeg"))
            if str(p1id) not in ppiCeleg_idmap_List:
                ppiCeleg_idmap_List[str(p1id)] = set()
            ppiCeleg_idmap_List[str(p1id)].add(str(p2id))

    ppiCeleg_Complex_idmap_List = {}
    ppiCeleg_Complex_id_DGLKE_List = {}
    pidCeleg_complex_idmap_file = '../DATA_KGE/HINT_CaenorhabditisElegans/CaenorhabditisElegans_cocomp_hq.txt'
    with open(pidCeleg_complex_idmap_file) as f:
        f.__next__()
        for line in f:
            it = line.strip().split("\t")
            p1id = it[0]
            p2id = it[1]
            if str(p1id) not in ppiCeleg_Complex_id_DGLKE_List:
                ppiCeleg_Complex_id_DGLKE_List[str(p1id)] = set()
            ppiCeleg_Complex_id_DGLKE_List[str(p1id)].add(str("Celeg"))
            if str(p2id) not in ppiCeleg_Complex_id_DGLKE_List:
                ppiCeleg_Complex_id_DGLKE_List[str(p2id)] = set()
            ppiCeleg_Complex_id_DGLKE_List[str(p2id)].add(str("Celeg"))
            if str(p1id) not in ppiCeleg_Complex_idmap_List:
                ppiCeleg_Complex_idmap_List[str(p1id)] = set()
            ppiCeleg_Complex_idmap_List[str(p1id)].add(str(p2id))

    ###########################end_new_data##################################"


    with open("../kogal_kg.tsv", 'w+') as frkg:

        for i, row in enumerate(ppiHuman_idmap_List):
            prot_id1 = row
            protList_id2 = ppiHuman_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1=""
                fp2=""
                fprot_id1=str(prot_id1)
                fp2=str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::Human", str(fp2)))

        print("ppiHuman_idmap_List")


        for i, row in enumerate(ppiHuman_Complex_idmap_List):
            prot_id1 = row
            protList_id2 = ppiHuman_Complex_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::Human::complex", str(fp2)))

        print("ppiHuman_Complex_idmap_List")

        for i, row in enumerate(ppiMouse_idmap_List):
            prot_id1 = row
            protList_id2 = ppiMouse_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::Mouse", str(fp2)))

        print("ppiMouse_idmap_List")

        for i, row in enumerate(ppiMouse_Complex_idmap_List):
            prot_id1 = row
            protList_id2 = ppiMouse_Complex_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::Mouse::complex", str(fp2)))

        print("ppiMouse_Complex_idmap_List")

        for i, row in enumerate(ppiDroso_idmap_List):
            prot_id1 = row
            protList_id2 = ppiDroso_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::DrosophilaMelanogaster", str(fp2)))

        print("ppiDroso_idmap_List")

        for i, row in enumerate(ppiDroso_Complex_idmap_List):
            prot_id1 = row
            protList_id2 = ppiDroso_Complex_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::DrosophilaMelanogaster::complex", str(fp2)))

        print("ppiDroso_Complex_idmap_List")

        for i, row in enumerate(ppiSaccharomycesCerev_idmap_List):
            prot_id1 = row
            protList_id2 = ppiSaccharomycesCerev_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::SaccharomycesCerev", str(fp2)))

        print("ppiSaccharomycesCerev_idmap_List")

        for i, row in enumerate(ppiSaccharomycesCerev_Complex_idmap_List):
            prot_id1 = row
            protList_id2 = ppiSaccharomycesCerev_Complex_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::SaccharomycesCerev::complex", str(fp2)))

        print("ppiSaccharomycesCerev_Complex_idmap_List")

        for i, row in enumerate(ppiCeleg_idmap_List):
            prot_id1 = row
            protList_id2 = ppiCeleg_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::CaenorhabditisElegans", str(fp2)))

        print("ppiCeleg_idmap_List")

        for i, row in enumerate(ppiCeleg_Complex_idmap_List):
            prot_id1 = row
            protList_id2 = ppiCeleg_Complex_idmap_List[prot_id1]
            for p2 in protList_id2:
                fprot_id1 = str(prot_id1)
                fp2 = str(p2)

                frkg.writelines("{}\t{}\t{}\n".format(str(fprot_id1), "ppi::CaenorhabditisElegans::complex", str(fp2)))

        print("ppiCeleg_Complex_idmap_List")


if __name__ == '__main__':
        main()