code: def get_shape_list(tensor, expected_rank=None, name=None):
      """Returns a list of the shape of tensor, preferring static dimensions.
  
      Args:
          tensor: A tf.Tensor object to find the shape of.
          expected_rank: (optional) int. The expected rank of `tensor`. If this is
              specified and the `tensor` has a different rank, and exception will be
              thrown.
          name: Optional name of the tensor for the error message.
  
      Returns:
          A list of dimensions of the shape of tensor. All static dimensions will
              be returned as python integers, and dynamic dimensions will be returned
              as tf.Tensor scalars.
      """
      if name is None:
          name = tensor.name
  
      if expected_rank is not None:
          assert_rank(tensor, expected_rank, name)
  
      shape = tensor.shape.as_list()
  
      non_static_indexes = []
      for index, dim in enumerate(shape):
          if dim is None:
              non_static_indexes.append(index)
  
      if not non_static_indexes:
          return shape
  
      dyn_shape = tf.shape(input=tensor)
      for index in non_static_indexes:
          shape[index] = dyn_shape[index]
      return shape
  
imports: import copy
  import json
  import math
  import numpy
  import tensorflow
  import functools
  from transformers.activations_tf import gelu
  from finetune.optimizers.recompute_grads import recompute_grad
  from finetune.nn.auxiliary import embed_position
label_desc: Use image node_id 16 for calling a global function with example usage: get_shape_list(tensor, expected_rank, name) and returns: shape, shape