code: def concat(
      xs: Union[Tuple[np.ndarray, ...], List[np.ndarray]],
      /,
      *,
      axis: int = 0,
      out: Optional[np.ndarray] = None,
  ) -> np.ndarray:
      is_tuple = type(xs) is tuple
      if axis is None:
          if is_tuple:
              xs = list(xs)
          for i in range(len(xs)):
              if xs[i].shape == ():
                  xs[i] = np.ravel(xs[i])
          if is_tuple:
              xs = tuple(xs)
      ret = np.concatenate(xs, axis, out=out)
      highest_dtype = xs[0].dtype
      for i in xs:
          highest_dtype = ivy.as_native_dtype(
              ivy.promote_types(highest_dtype, i.dtype)
          )
      return ivy.astype(ret, highest_dtype, copy=False)
  
imports: import math
  from numbers import Number
  from typing import Union, Tuple, Optional, List, Sequence
  import numpy
  import ivy
  from ivy.func_wrapper import with_unsupported_dtypes
  from .None import backend_version
label_desc: Use image node_id 2 for calling a global function with example usage: concat() and returns: ivy