"""nDCG and MMR on hand-labeled documents; no reranker-model call."""
import math,json
rel={'A':3,'B':2,'C':2,'D':0}
def dcg(order):return sum((2**rel[x]-1)/math.log2(i+2) for i,x in enumerate(order))
ideal=dcg(['A','B','C']);before=['D','B','A'];after=['A','B','C']
qrel={'B':.85,'C':.80};sim={'B':.95,'C':.20};lam=.7
mmr={x:lam*qrel[x]-(1-lam)*sim[x] for x in qrel}
print(json.dumps({'label':'教学等级与相似度；非商业排序测量','ndcg_before':dcg(before)/ideal,'ndcg_after':dcg(after)/ideal,'mmr_after_selecting_A':mmr,'next_by_mmr':max(mmr,key=mmr.get)},ensure_ascii=False,indent=2))
