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(tensor)
      for index in non_static_indexes:
          shape[index] = dyn_shape[index]
      return shape
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  import copy
  import json
  import math
  import re
  import numpy
  import six
  import tensorflow.compat.v1
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