code: def valid_aux_encoder_output_layers(
      aux_layer_id: List[int],
      enc_num_layers: int,
      use_symm_kl_div_loss: bool,
      subsample: List[int],
  ) -> List[int]:
      """Check whether provided auxiliary encoder layer IDs are valid.
  
      Return the valid list sorted with duplicates removed.
  
      Args:
          aux_layer_id: Auxiliary encoder layer IDs.
          enc_num_layers: Number of encoder layers.
          use_symm_kl_div_loss: Whether symmetric KL divergence loss is used.
          subsample: Subsampling rate per layer.
  
      Returns:
          valid: Valid list of auxiliary encoder layers.
  
      """
      if (
          not isinstance(aux_layer_id, list)
          or not aux_layer_id
          or not all(isinstance(layer, int) for layer in aux_layer_id)
      ):
          raise ValueError(
              "aux-transducer-loss-enc-output-layers option takes a list of layer IDs."
              " Correct argument format is: '[0, 1]'"
          )
  
      sorted_list = sorted(aux_layer_id, key=int, reverse=False)
      valid = list(
          filter(lambda x: 0 <= x < enc_num_layers, sorted_list)
      )
  
      if sorted_list != valid:
          raise ValueError(
              "Provided argument for aux-transducer-loss-enc-output-layers is incorrect."
              " IDs should be between [0, %d]" % enc_num_layers
          )
  
      if use_symm_kl_div_loss:
          sorted_list += [enc_num_layers]
  
          for n in range(1, len(sorted_list)):
              sub_range = subsample[
                  (sorted_list[n - 1] + 1) : sorted_list[n] + 1
              ]
              valid_shape = [
                  False if n > 1 else True for n in sub_range
              ]
  
              if False in valid_shape:
                  raise ValueError(
                      "Encoder layers %d and %d have different shape due to subsampling."
                      " Symmetric KL divergence loss doesn't cover such case for now."
                      % (sorted_list[n - 1], sorted_list[n])
                  )
  
      return valid
  
file_path: espnet/espnet/nets/pytorch_backend/transducer/utils.py
imports: import os
  from typing import Any, Dict, List, Optional, Union
  import numpy
  import torch
  from espnet.nets.pytorch_backend.nets_utils import pad_list
  from espnet.nets.transducer_decoder_interface import ExtendedHypothesis, Hypothesis
label_desc: Use image node_id 2 for calling a global function with example usage: valid_aux_encoder_output_layers(aux_layer_id, enc_num_layers, use_symm_kl_div_loss, subsample) and returns: valid