"""Preserve sequence identities separately from official allele nomenclature."""
def core_slot(paths,metadata):
    ids=set();unknown=not paths
    for path in paths:
        values=metadata[path].get('core_ids',[])
        ids.update(values);unknown |= not values
    return {'cores':sorted(ids),'core_unknown':bool(unknown)}

def group_signature(group,metadata,decoded):
    # Preserve the previous named-allele equivalence. Unnamed alternatives must
    # retain their own exact core identities instead of all becoming '?'.
    values=['ALLELE:'+x for x in decoded['alleles']]
    if decoded['unresolved']:
        core=core_slot(group['paths'],metadata)
        values += ['CORE:'+x for x in core['cores']]
        if core['core_unknown']:values += ['UNKNOWN:'+p for p in sorted(group['paths'])]
    return tuple(sorted(values))
