docs: def parse_classi_or_classii_allele_name(name, infer_pair=True):
      """
      Handle different forms of both single and alpha-beta allele names.
      Alpha-beta alleles may look like:
  
      DPA10105-DPB110001
      HLA-DPA1*01:05-DPB1*100:01
      hla-dpa1*0105-dpb1*10001
      dpa1*0105-dpb1*10001
      HLA-DPA1*01:05/DPB1*100:01
  
      Other class II alleles may look like:
  
      DRB1_0102
      DRB101:02
      HLA-DRB1_0102
      """
      species, name = split_species_prefix(name)
  
      # Handle the case where alpha/beta pairs are separated with a /.
      name = name.replace("/", "-")
  
      # Ignored underscores, such as with DRB1_0102
      name = name.replace("_", "*")
  
      parts = name.split("-")
  
      if len(parts) == 2:
          alpha_string, beta_string = parts
          alpha = parse_allele_name(alpha_string)
          beta = parse_allele_name(beta_string)
          return (alpha, beta)
      elif len(parts) == 1:
          parsed = parse_allele_name(name, species)
          if parsed.species == "HLA" and infer_pair:
              alpha = infer_alpha_chain(parsed)
              if alpha is not None:
                  return (alpha, parsed)
          return (parsed,)
      else:
          raise AlleleParseError(
              "Allele has too many parts: %s" % name)