code: def get_norm_act_layer(norm_layer, act_layer=None):
      if norm_layer is None:
          return None
      assert isinstance(
          norm_layer, (type, str, types.FunctionType, functools.partial)
      )
      assert act_layer is None or isinstance(
          act_layer, (type, str, types.FunctionType, functools.partial)
      )
      norm_act_kwargs = {}
  
      # unbind partial fn, so args can be rebound later
      if isinstance(norm_layer, functools.partial):
          norm_act_kwargs.update(norm_layer.keywords)
          norm_layer = norm_layer.func
  
      if isinstance(norm_layer, str):
          if not norm_layer:
              return None
          layer_name = norm_layer.replace("_", "").lower().split("-")[0]
          norm_act_layer = _NORM_ACT_MAP[layer_name]
      elif norm_layer in _NORM_ACT_TYPES:
          norm_act_layer = norm_layer
      elif isinstance(norm_layer, types.FunctionType):
          # if function type, must be a lambda/fn that creates a norm_act layer
          norm_act_layer = norm_layer
      else:
          type_name = norm_layer.__name__.lower()
          if type_name.startswith("batchnorm"):
              norm_act_layer = BatchNormAct2d
          elif type_name.startswith("groupnorm"):
              norm_act_layer = GroupNormAct
          elif type_name.startswith("groupnorm1"):
              norm_act_layer = functools.partial(
                  GroupNormAct, num_groups=1
              )
          elif type_name.startswith("layernorm2d"):
              norm_act_layer = LayerNormAct2d
          elif type_name.startswith("layernorm"):
              norm_act_layer = LayerNormAct
          else:
              assert (
                  False
              ), f"No equivalent norm_act layer for {type_name}"
  
      if norm_act_layer in _NORM_ACT_REQUIRES_ARG:
          # pass `act_layer` through for backwards compat where `act_layer=None` implies no activation.
          # In the future, may force use of `apply_act` with `act_layer` arg bound to relevant NormAct types
          norm_act_kwargs.setdefault("act_layer", act_layer)
      if norm_act_kwargs:
          norm_act_layer = functools.partial(
              norm_act_layer, **norm_act_kwargs
          )  # bind/rebind args
      return norm_act_layer
  
file_path: pytorch-image-models/timm/layers/create_norm_act.py
imports: import types
  import functools
  from .evo_norm import *
  from .filter_response_norm import FilterResponseNormAct2d, FilterResponseNormTlu2d
  from .norm_act import BatchNormAct2d, GroupNormAct, LayerNormAct, LayerNormAct2d
  from .inplace_abn import InplaceAbn
label_desc: Use image node_id 2 for calling a global function with example usage: get_norm_act_layer(norm_layer, act_layer) and returns: norm_act_layer, None, None