code: def _wrap_layer(name, input_layer, build_func, dropout_rate=0.0, trainable=True):
      
      build_output = build_func(input_layer)
      if dropout_rate > 0.0:
          dropout_layer = keras.layers.Dropout(
              rate=dropout_rate,
              name='%s-Dropout' % name,
          )(build_output)
      else:
          dropout_layer = build_output
      if isinstance(input_layer, list):
          input_layer = input_layer[0]
      add_layer = keras.layers.Add(name='%s-Add' % name)([input_layer, dropout_layer])
      normal_layer = LayerNormalization(
          trainable=trainable,
          name='%s-Norm' % name,
      )(add_layer)
      return normal_layer
docs: Wrap layers with residual, normalization and dropout.
  
      :param name: Prefix of names for internal layers.
      :param input_layer: Input layer.
      :param build_func: A callable that takes the input tensor and generates the output tensor.
      :param dropout_rate: Dropout rate.
      :param trainable: Whether the layers are trainable.
      :return: Output layer.