def unique_name(key: 'bpy.context.object', name: str, name_dict: dict,
    name_max=-1, clean_func=None, sep: str='.'):
    """Helper function for storing unique names which may have special characters stripped and restricted to a maximum length. 

    :param key: unique item this name belongs to, name_dict[key] will be reused when available. This can be the object, mesh, material, etc instance its self. 
    :type key: 'bpy.context.object'
    :param name: The name used to create a unique value in name_dict. 
    :type name: str
    :param name_dict: This is used to cache namespace to ensure no collisions occur, this should be an empty dict initially and only modified by this function. 
    :type name_dict: dict
    :param clean_func: Function to call on name before creating a unique value. 
    :param sep: Separator to use when between the name and a number when a duplicate name is found. 
    :type sep: str
    """
    pass
