code: def nas_encoder(
      encoder_input,
      encoder_self_attention_bias,
      hparams,
      nonpadding=None,
      final_layer_norm=True,
  ):
      """Encoder for configurable NAS model.
  
      Args:
        encoder_input: Input tensor.
        encoder_self_attention_bias: Attention bias tensor with 0s for all valid
          postions and large negative numbers for the padding positions.
        hparams: transformer.Transformer hparams that must also contain:
          + encoder_<left|right>_inputs: List of ints specifying the hidden layer
            input indexes for the <left|right> branches.
          + encoder_<left|right>_layers: String list of layers. Each string must be
            the name of a TranslationLayer registered in layers.py's ENCODER_LAYERS.
          + encoder_<left|right>_activations: String list of activations. Each
            string in this list must have a corresponding activation in
            ACTIVATION_MAP.
          + encoder_<left|right>_output_dims: Int list of output dimensions for
            <left|right> branch layers.
          + encoder_<left|right>_norms: String list of norms to apply to the
            <left|right> layer branches. Each item must be either LAYER_NORM_KEY or
            NO_NORM_KEY.
          + encoder_num_cells: The number of cells in the encoder. This determines
            how many times the given layers will be repeated.
          + encoder_combiner_functions: String list of functions used to combine
            left and right branches. Must be a COMBINER_FUNCTION key.
        nonpadding: Tensor with 1s at all nonpadding positions and 0s everywhere
          else. If None (default), then nonpadding will be determined from
          encoder_self_attention_bias.
        final_layer_norm: Whether or not to apply a final layer_norm to the output
          of the encoder.
  
      Returns:
        Encoder output and list of each encoder cell's output in order.
      """
      if nonpadding is None:
          padding = common_attention.attention_bias_to_padding(
              encoder_self_attention_bias
          )
          nonpadding = 1.0 - padding
      return apply_nas_layers(
          input_tensor=encoder_input,
          left_inputs=hparams.encoder_left_inputs,
          left_layers=hparams.encoder_left_layers,
          left_activations=hparams.encoder_left_activations,
          left_output_dims=hparams.encoder_left_output_dims,
          left_norms=hparams.encoder_left_norms,
          right_inputs=hparams.encoder_right_inputs,
          right_layers=hparams.encoder_right_layers,
          right_activations=hparams.encoder_right_activations,
          right_output_dims=hparams.encoder_right_output_dims,
          right_norms=hparams.encoder_right_norms,
          num_cells=hparams.encoder_num_cells,
          combiner_functions=hparams.encoder_combiner_functions,
          final_combiner_function=hparams.encoder_final_combiner_function,
          nonpadding=nonpadding,
          layer_registry=layers.ENCODER_LAYERS,
          mask_future=False,
          hparams=hparams,
          var_scope="encoder",
          final_layer_norm=final_layer_norm,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import abc
  import six
  from tensor2tensor.layers import common_attention
  from tensor2tensor.layers import common_layers
  from tensor2tensor.models import transformer
  from tensor2tensor.models.neural_architecture_search import nas_layers
  from tensor2tensor.utils import contrib
  from tensor2tensor.utils import metrics
  from tensor2tensor.utils import registry
  from tensor2tensor.utils import t2t_model
  import tensorflow.compat.v1
  from tensorflow.compat.v1 import estimator
label_desc: Use image node_id 7 for calling a global function with example usage: nas_encoder(encoder_input, encoder__attention_bias, hparams, nonpadding, final_layer_norm) and returns: apply_nas_layers