code: def get_broadcast_shape(*tensors):
      """Get broadcast shape as a Python list of integers (preferred) or `Tensor`.
  
      Args:
        *tensors:  One or more `Tensor` objects (already converted!).
  
      Returns:
        broadcast shape:  Python list (if shapes determined statically), otherwise
          an `int32` `Tensor`.
      """
      # Try static.
      s_shape = tensors[0].shape
      for t in tensors[1:]:
          s_shape = tf.broadcast_static_shape(s_shape, t.shape)
      if tensorshape_util.is_fully_defined(s_shape):
          return tensorshape_util.as_list(s_shape)
  
      # Fallback on dynamic.
      d_shape = tf.shape(tensors[0])
      for t in tensors[1:]:
          d_shape = tf.broadcast_dynamic_shape(d_shape, tf.shape(t))
      return d_shape
  
imports: import functools
  import hashlib
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import reparameterization
  from tensorflow_probability.python.internal import tensorshape_util
  from tensorflow.python.util import tf_inspect
label_desc: Use image node_id 6 for calling a global function with example usage: get_broadcast_shape() and returns: d_shape, tensorshape_util