def normalize_allele_name(raw_allele, omit_dra1=False, infer_class2_pair=True):
    cache_key = (raw_allele, omit_dra1, infer_class2_pair)
    if cache_key in _normalized_allele_cache:
        return _normalized_allele_cache[cache_key]
    parsed_alleles = parse_classi_or_classii_allele_name(
        raw_allele, infer_pair=infer_class2_pair)
    species = parsed_alleles[0].species
    normalized_list = [species]
    if omit_dra1 and len(parsed_alleles) == 2:
        alpha, beta = parsed_alleles
        if alpha == _DRA1_0101:
            parsed_alleles = [beta]
    for parsed_allele in parsed_alleles:
        if len(parsed_allele.allele_family) > 0:
            normalized_list.append("%s*%s:%s" % (
                parsed_allele.gene,
                parsed_allele.allele_family,
                parsed_allele.allele_code))
        else:
            normalized_list.append("%s%s" % (
                parsed_allele.gene,
                parsed_allele.allele_code))
    normalized = "-".join(normalized_list)
    _normalized_allele_cache[cache_key] = normalized
    return normalized