import MEGA from MEGA import GO import pickle import bz2 onts = {} isa = {} levels = {} namespaces = {} for rec in GO.parse(bz2.open(MEGA.GOFile, 'rt', encoding='utf-8')): id = rec["id"][0] onts[id] = rec namespaces.setdefault(rec["namespace"][0], []).append(id) if "is_a" in rec: for ref in rec["is_a"]: isa.setdefault(id, []).append(ref[0]) else: levels[id] = {0: set()} cisa = dict(isa) while len(cisa) > 0: dels = [] for id, owners in list(cisa.items()): levels.setdefault(id, {}) for owner in owners: if owner not in cisa: ownerLevels = list(levels[owner].keys()) for level in ownerLevels: levels[id].setdefault(level + 1, set()).add(owner) cisa[id].remove(owner) if len(cisa[id]) == 0: