"""Target encoding contract only, not a text classifier or trained objective."""
import json
CLASSES=['علمی','ادبی','ورزشی']
def scalar(label):
    if label is None:return None
    if label not in CLASSES:raise ValueError('unknown class')
    return CLASSES.index(label)
def encode(labels):
    if labels is None:return None
    if not isinstance(labels,list) or len(set(labels))!=len(labels) or any(x not in CLASSES for x in labels):raise ValueError('unique known class names')
    return [int(c in labels) for c in CLASSES]
def decode(row):
    if row is None:return None
    if not isinstance(row,list) or len(row)!=len(CLASSES) or any(type(x) is not int or x not in (0,1) for x in row):raise ValueError('3 binary integer entries')
    return [c for c,v in zip(CLASSES,row) if v]
if __name__=='__main__':
    rows=[encode(['علمی','ادبی']),encode(['ورزشی']),encode([]),encode(None)]
    assert rows==[[1,1,0],[0,0,1],[0,0,0],None]
    assert decode(rows[0])==['علمی','ادبی'] and decode(rows[2])==[] and decode(rows[3]) is None
    assert scalar('علمی')==0 and scalar('ورزشی')==2 and scalar(None) is None
    selected=max(range(3),key=lambda i:rows[0][i]);assert selected==0 and len(decode(rows[0]))==2
    rejected=0
    for fn,arg in [(encode,['ناشناخته']),(encode,['علمی','علمی']),(decode,[1,0]),(decode,[1,2,0]),(decode,[True,0,0]),(scalar,'ناشناخته')]:
        try:fn(arg)
        except ValueError:rejected+=1
    assert rejected==6
    print(json.dumps({'four_multilabel_rows':rows,'argmax_keeps_only':CLASSES[selected],'roundtrip_first':decode(rows[0]),'invalid_cases_rejected':rejected,'classifier_trained':False},ensure_ascii=False,indent=2))
