class_docstr: Split a `Tensor` event along an axis into a list of `Tensor`s.
  
  Example Use:
  
  ```python
  split = tfb.Split(
      num_or_size_splits=[4, 1, 3],
      axis=-1
    )
  y = split.forward(tf.zeros([5, 6, 8]))
  ==> [<`Tensor`, shape=(5, 6, 4)>,
       <`Tensor`, shape=(5, 6, 1)>,
       <`Tensor`, shape=(5, 6, 3)>]
  
  # The inverse of `split` concatenates a list of `Tensor`s along `axis`.
  x_ = split.inverse(y)
  x_.shape
  ==> TensorShape([5, 6, 8])
  ```
class_docstr_tok: ["Split","a","`","Tensor","`","event","along","an","axis","into","a","list","of","`","Tensor","`","s",".","Example","Use",":","``","`","python","split","=","tfb.Split","(","num_or_size_splits=","[","4",",","1",",","3","]",",","axis=-1",")","y","=","split.forward","(","tf.zeros","(","[","5",",","6",",","8","]",")",")","==",">","[","<","`","Tensor","`",",","shape=","(","5",",","6",",","4",")",">",",","<","`","Tensor","`",",","shape=","(","5",",","6",",","1",")",">",",","<","`","Tensor","`",",","shape=","(","5",",","6",",","3",")",">","]","#","The","inverse","of","`","split","`","concatenates","a","list","of","`","Tensor","`","s","along","`","axis","`",".","x_","=","split.inverse","(","y",")","x_.shape","==",">","TensorShape","(","[","5",",","6",",","8","]",")","``","`"]
docstr: Shape of a sample from a single batch as a [nested] `TensorShape`.
  
  Same meaning as `inverse_event_shape_tensor`. May be only partially defined.
  
  Args:
    output_shapes: Iterable of `TensorShape`s indicating the event shapes
      passed into `inverse` function. The length of the iterable must be equal
      to the number of splits.
  
  Returns:
    inverse_event_shape: `TensorShape` indicating event-portion shape after
      applying `inverse`. Possibly unknown.
docstr_tok: ["Shape","of","a","sample","from","a","single","batch","as","a","[","nested","]","`","TensorShape","`",".","Same","meaning","as","`","inverse_event_shape_tensor","`",".","May","be","only","partially","defined",".","Args",":","output_shapes",":","Iterable","of","`","TensorShape","`","s","indicating","the","event","shapes","passed","into","`","inverse","`","function",".","The","length","of","the","iterable","must","be","equal","to","the","number","of","splits",".","Returns",":","inverse_event_shape",":","`","TensorShape","`","indicating","event-portion","shape","after","applying","`","inverse","`",".","Possibly","unknown","."]
code: def _inverse_event_shape(self, output_shapes):
      """Shape of a sample from a single batch as a [nested] `TensorShape`.
  
      Same meaning as `inverse_event_shape_tensor`. May be only partially defined.
  
      Args:
        output_shapes: Iterable of `TensorShape`s indicating the event shapes
          passed into `inverse` function. The length of the iterable must be equal
          to the number of splits.
  
      Returns:
        inverse_event_shape: `TensorShape` indicating event-portion shape after
          applying `inverse`. Possibly unknown.
      """
      self._validate_output_shapes(output_shapes)
      shapes = []
      for s in output_shapes:
          if tensorshape_util.rank(s) is None:
              return tf.TensorShape(None)
          shapes.append(tf.TensorShape(s).as_list())
      axis = tf.get_static_value(self.axis)
  
      if self.split_sizes is None:
          split_size = None
          for shape in output_shapes:
              if shape[axis] is not None:
                  split_size = shape[axis]
          split_sizes = [split_size] * self.num_splits
      else:
          static_split_sizes = tf.get_static_value(self.split_sizes)
          if static_split_sizes is None:
              static_split_sizes = [None] * self.num_splits
          split_sizes = tensorshape_util.constant_value_as_shape(
              static_split_sizes
          ).as_list()
  
      # Deduce as much static information about `inverse_event_shape` as possible.
      # If all elements of `split_sizes` are known, the concatenated dimension
      # of `inverse_event_shape` is the sum of `split_sizes`.
      if not any(s is None for s in split_sizes):
          total_size = sum(split_sizes)
      else:
          # If at least one of `split_sizes` and `output_shape[axis]` is known
          # for each split, we can determine `total_size`.
          total_size = 0
          for split, output_shape in zip(split_sizes, shapes):
              if split is None and output_shape[axis] is None:
                  total_size = None
                  break
              total_size += split or output_shape[axis]
  
      shape = shapes[0]
      shape[axis] = total_size
      return tf.TensorShape(shape)
  
imports: import numbers
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import bijector
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.internal import tensorshape_util
label_desc: Use image node_id 12 for calling the Split obj's underlying member method code with example usage: obj._inverse_event_shape(output_shapes) and returns: tf, tf