text: #!/usr/bin/env python3
  
  # Copyright (c) Facebook, Inc. and its affiliates.
  # This source code is licensed under the MIT license found in the
  # LICENSE file in the root directory of this source tree.
  
  from typing import List
  
  import numpy as np
  
  
  def tile_images(images: List[np.ndarray]) -> np.ndarray:
      """Tile multiple images into single image
  
      Args:
          images: list of images where each image has dimension
              (height x width x channels)
  
      Returns:
          tiled image (new_height x width x channels)
      """
      assert len(images) > 0, "empty list of images"
      np_images = np.asarray(images)
      n_images, height, width, n_channels = np_images.shape
      new_height = int(np.ceil(np.sqrt(n_images)))
      new_width = int(np.ceil(float(n_images) / new_height))
      # pad with empty images to complete the rectangle
      np_images = np.array(
          images
          + [images[0] * 0 for _ in range(n_images, new_height * new_width)]
      )
      # img_HWhwc
      out_image = np_images.reshape(
          new_height, new_width, height, width, n_channels
      )
      # img_HhWwc
      out_image = out_image.transpose(0, 2, 1, 3, 4)
      # img_Hh_Ww_c
      out_image = out_image.reshape(
          new_height * height, new_width * width, n_channels
      )
      return out_image
  