code: def tensor_vstack(tensor_list, pad=0):
      
      if len(tensor_list) == 1:
          return tensor_list[0][np.newaxis, :]
  
      ndim = len(tensor_list[0].shape)
      dimensions = [len(tensor_list)]  # first dim is batch size
      for dim in range(ndim):
          dimensions.append(max([tensor.shape[dim] for tensor in tensor_list]))
  
      dtype = tensor_list[0].dtype
      if pad == 0:
          all_tensor = np.zeros(tuple(dimensions), dtype=dtype)
      elif pad == 1:
          all_tensor = np.ones(tuple(dimensions), dtype=dtype)
      else:
          all_tensor = np.full(tuple(dimensions), pad, dtype=dtype)
      if ndim == 1:
          for ind, tensor in enumerate(tensor_list):
              all_tensor[ind, :tensor.shape[0]] = tensor
      elif ndim == 2:
          for ind, tensor in enumerate(tensor_list):
              all_tensor[ind, :tensor.shape[0], :tensor.shape[1]] = tensor
      elif ndim == 3:
          for ind, tensor in enumerate(tensor_list):
              all_tensor[ind, :tensor.shape[0], :tensor.shape[1], :tensor.shape[2]] = tensor
      else:
          raise Exception('Sorry, unimplemented.')
      return all_tensor
docs: vertically stack tensors by adding a new axis
      expand dims if only 1 tensor
      :param tensor_list: list of tensor to be stacked vertically
      :param pad: label to pad with
      :return: tensor with max shape