in isc/metrics.py [0:0]
def find_tp_ranks(gt_matches: List[GroundTruthMatch], predictions: List[PredictedMatch]):
q_to_res = defaultdict(list)
for p in predictions:
q_to_res[p.query].append(p)
ranks = []
not_found = int(1<<35)
for m in gt_matches:
if m.query not in q_to_res:
ranks.append(not_found)
continue
res = q_to_res[m.query]
res = np.array([
(p.score, m.db == p.db)
for p in res
])
i, = np.where(res[:, 1] == 1)
if i.size == 0:
ranks.append(not_found)
else:
i = i[0]
rank = (res[:, 0] >= res[i, 0]).sum() - 1
ranks.append(rank)
return np.array(ranks)