class_docstr: An array of fixed-shape, homogeneous-typed tensors.
  
  This is the Arrow side of TensorArray.
  
  See Arrow docs for customizing extension arrays:
  https://arrow.apache.org/docs/python/extending_types.html#custom-extension-array-class
class_docstr_tok: ["An","array","of","fixed-shape",",","homogeneous-typed","tensors",".","This","is","the","Arrow","side","of","TensorArray",".","See","Arrow","docs","for","customizing","extension","arrays",":","https",":","\/\/arrow.apache.org\/docs\/python\/extending_types.html","#","custom-extension-array-class"]
docstr: Concatenate multiple tensor arrays.
  
  If one or more of the tensor arrays in to_concat are variable-shaped and/or any
  of the tensor arrays have a different shape than the others, a variable-shaped
  tensor array will be returned.
docstr_tok: ["Concatenate","multiple","tensor","arrays",".","If","one","or","more","of","the","tensor","arrays","in","to_concat","are","variable-shaped","and\/or","any","of","the","tensor","arrays","have","a","different","shape","than","the","others",",","a","variable-shaped","tensor","array","will","be","returned","."]
code: def _concat_same_type(
      cls,
      to_concat: Sequence[
          Union["ArrowTensorArray", "ArrowVariableShapedTensorArray"]
      ],
  ) -> Union["ArrowTensorArray", "ArrowVariableShapedTensorArray"]:
      """
      Concatenate multiple tensor arrays.
  
      If one or more of the tensor arrays in to_concat are variable-shaped and/or any
      of the tensor arrays have a different shape than the others, a variable-shaped
      tensor array will be returned.
      """
      to_concat_types = [arr.type for arr in to_concat]
      if ArrowTensorType._need_variable_shaped_tensor_array(
          to_concat_types
      ):
          # Need variable-shaped tensor array.
          # TODO(Clark): Eliminate this NumPy roundtrip by directly constructing the
          # underlying storage array buffers (NumPy roundtrip will not be zero-copy
          # for e.g. boolean arrays).
          # NOTE(Clark): Iterating over a tensor extension array converts each element
          # to an ndarray view.
          return ArrowVariableShapedTensorArray.from_numpy(
              [e for a in to_concat for e in a]
          )
      else:
          storage = pa.concat_arrays([c.storage for c in to_concat])
  
          return ArrowTensorArray.from_storage(
              to_concat[0].type, storage
          )
  
imports: import itertools
  import json
  import sys
  from typing import Iterable, Optional, Tuple, List, Sequence, Union
  from packaging.version import parse
  import numpy
  import pyarrow
  from ray.air.util.tensor_extensions.utils import _is_ndarray_variable_shaped_tensor, create_ragged_ndarray
  from ray._private.utils import _get_pyarrow_version
  from ray.util.annotations import PublicAPI
label_desc: Use image node_id 4 for calling the ArrowTensorArray obj's underlying member method code with example usage: obj._concat_same_type(cls, to_concat) and returns: ArrowVariableShapedTensorArray, ArrowTensorArray