"""Four Unicode normalization forms on original fixed fixtures, versioned runtime."""
import unicodedata as U,json,sys,hashlib
FORMS=['NFC','NFD','NFKC','NFKD']
def cps(s):return ['U+'+format(ord(c),'04X')for c in s]
def demo():
    samples={'latin_decomposed':'e\u0301','latin_precomposed':'\u00e9','arabic_combining':'ا\u0654','ligature':'\ufb00','circled_two':'\u2461','nonbreaking_space':'A\u00a0B','persian_yeh':'\u06cc','arabic_yeh':'\u064a','persian_zwnj':'می\u200cرویم'};out={}
    for name,s in samples.items():
        raw=s.encode();forms={}
        for form in FORMS:
            n=U.normalize(form,s);assert U.normalize(form,n)==n
            forms[form]={'text_json_escaped':json.dumps(n,ensure_ascii=True),'codepoints':cps(n),'changed':n!=s,'idempotent':True}
        assert s.encode()==raw;out[name]={'original_text_json_escaped':json.dumps(s,ensure_ascii=True),'original_codepoints':cps(s),'original_sha256':hashlib.sha256(raw).hexdigest(),'forms':forms}
    assert U.normalize('NFC',samples['latin_decomposed'])==samples['latin_precomposed']
    assert U.normalize('NFC',samples['arabic_combining'])=='\u0623'
    assert U.normalize('NFC',samples['ligature'])=='\ufb00'and U.normalize('NFKC',samples['ligature'])=='ff'
    assert U.normalize('NFKC',samples['circled_two'])=='2'and U.normalize('NFKC',samples['nonbreaking_space'])=='A B'
    assert all(U.normalize(f,samples['persian_yeh'])!=U.normalize(f,samples['arabic_yeh'])for f in FORMS)
    assert all('\u200c'in U.normalize(f,samples['persian_zwnj'])for f in FORMS)
    assert all(U.normalize(f,'')==''for f in FORMS)and U.normalize('NFKC','ff')==U.normalize('NFKC','\ufb00')
    return {'python_version':sys.version.split()[0],'unicode_database_version':U.unidata_version,'authored_samples':out,'checks':{'canonical_pair_equal_after_nfc':True,'compatibility_not_same_as_canonical':True,'arabic_persian_yeh_not_automatically_folded':True,'zwnj_preserved':True,'all36_transformations_idempotent':True,'originals_unchanged':True,'empty_string_all_forms':True,'two_distinct_originals_share_nfkc_result':True},'scope':'Observed Python3.12/UCD15 data, not Unicode18 conformance test. Four declared transformations only; compatibility normalization can lose distinctions and has no exact inverse in general. Not typo correction, transliteration, identifier equivalence, WER improvement, security or bidi renderer.'}
if __name__=='__main__':print(json.dumps(demo(),ensure_ascii=True,indent=2))
