code: def best_effort_shape(tensor, with_rank=None):
      """Extract as much static shape information from a tensor as possible.
  
      Args:
        tensor: A `Tensor`. If `with_rank` is None, must have statically-known
            number of dimensions.
        with_rank: Optional, an integer number of dimensions to force the shape to
            be. Useful for tensors with no static shape information that must be
            of a particular rank. Default is None (number of dimensions must be
            statically known).
  
      Returns:
        An iterable with length equal to the number of dimensions in `tensor`,
        containing integers for the dimensions with statically-known size, and
        scalar `Tensor`s for dimensions with size only known at run-time.
  
      Raises:
        ValueError: If `with_rank` is None and `tensor` does not have
          statically-known number of dimensions.
      """
      tensor_shape = tf.TensorShape(tensor.shape)
      if with_rank:
          tensor_shape = tensor_shape.with_rank(with_rank)
      if tensor_shape.ndims is None:
          raise ValueError(
              "`tensor` does not have statically-known number of dimensions."
          )
      shape_list = tensor_shape.as_list()
      for idx, dim in enumerate(shape_list):
          if not dim:
              shape_list[idx] = tf.shape(tensor)[idx]
      return shape_list
  
file_path: trfl/trfl/base_ops.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  from six.moves import zip
  import tensorflow.compat.v1
label_desc: Use image node_id 1 for calling a global function with example usage: best_effort_shape(tensor, with_rank) and returns: shape_list