code: def infer_abbr(class_type):
      """Infer abbreviation from the class name.
  
      This method will infer the abbreviation to map class types to
      abbreviations.
  
      Rule 1: If the class has the property "abbr", return the property.
      Rule 2: Otherwise, the abbreviation falls back to snake case of class
      name, e.g. the abbreviation of ``FancyBlock`` will be ``fancy_block``.
  
      Args:
          class_type (type): The norm layer type.
  
      Returns:
          str: The inferred abbreviation.
      """
  
      def camel2snack(word):
          """Convert camel case word into snack case.
  
          Modified from `inflection lib
          <https://inflection.readthedocs.io/en/latest/#inflection.underscore>`_.
  
          Example::
  
              >>> camel2snack("FancyBlock")
              'fancy_block'
          """
  
          word = re.sub(r"([A-Z]+)([A-Z][a-z])", r"\1_\2", word)
          word = re.sub(r"([a-z\d])([A-Z])", r"\1_\2", word)
          word = word.replace("-", "_")
          return word.lower()
  
      if not inspect.isclass(class_type):
          raise TypeError(
              f"class_type must be a type, but got {type(class_type)}"
          )
      if hasattr(class_type, "_abbr_"):
          return class_type._abbr_
      else:
          return camel2snack(class_type.__name__)
  
imports: import inspect
  import platform
  from .registry import PLUGIN_LAYERS
label_desc: Use image node_id 1 for calling a global function with example usage: infer_abbr(class_type) and returns: word, class_type, camel2snack