code: def concatenate(tup, axis=0, blen=None, storage=None, create='array', **kwargs):
      
  
      # setup
      storage = _util.get_storage(storage)
      if not isinstance(tup, (tuple, list)):
          raise ValueError('expected tuple or list, found %r' % tup)
      if len(tup) < 2:
          raise ValueError('expected two or more arrays')
  
      if axis == 0:
  
          # build output
          expectedlen = sum(len(a) for a in tup)
          out = None
          for a in tup:
              ablen = _util.get_blen_array(a, blen)
              for i in range(0, len(a), ablen):
                  j = min(i+ablen, len(a))
                  block = a[i:j]
                  if out is None:
                      out = getattr(storage, create)(block, expectedlen=expectedlen, **kwargs)
                  else:
                      out.append(block)
  
      else:
  
          def f(*blocks):
              return np.concatenate(blocks, axis=axis)
  
          out = map_blocks(tup, f, blen=blen, storage=storage, create=create, **kwargs)
  
      return out
docs: Concatenate arrays.