import collections import re from keras_core.backend.global_state import get_global_attribute def auto_name(prefix): prefix = to_snake_case(prefix) return uniquify(prefix) def uniquify(name): object_name_uids = get_global_attribute( "object_name_uids", default=collections.defaultdict(int), set_to_default=True, ) if name in object_name_uids: unique_name = f"{name}_{object_name_uids[name]}" else: unique_name = name object_name_uids[name] += 1 return unique_name def to_snake_case(name): name = re.sub(r"\W+", "", name) name = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name) name = re.sub("([a-z])([A-Z])", r"\1_\2", name).lower() return name def reset_uids(): global OBJECT_NAME_UIDS OBJECT_NAME_UIDS = collections.defaultdict(int) def get_object_name(obj): if hasattr(obj, "name"): # Most Keras objects. return obj.name elif hasattr(obj, "__name__"): # Function. return to_snake_case(obj.__name__) elif hasattr(obj, "__class__"): # Class instance. return to_snake_case(obj.__class__.__name__) return to_snake_case(str(obj))