text: """
  Image grid saver, based on color_grid_vis from github.com/Newmu
  """
  
  import numpy as np
  import scipy.misc
  from scipy.misc import imsave
  
  def save_images(X, save_path):
      # [0, 1] -> [0,255]
      if isinstance(X.flatten()[0], np.floating):
          X = (255.99*X).astype('uint8')
  
      n_samples = X.shape[0]
      rows = int(np.sqrt(n_samples))
      while n_samples % rows != 0:
          rows -= 1
  
      nh, nw = rows, n_samples//rows
  
      if X.ndim == 2:
          X = np.reshape(X, (X.shape[0], int(np.sqrt(X.shape[1])), int(np.sqrt(X.shape[1]))))
  
      if X.ndim == 4:
          # BCHW -> BHWC
          X = X.transpose(0,2,3,1)
          h, w = X[0].shape[:2]
          img = np.zeros((h*nh, w*nw, 3))
      elif X.ndim == 3:
          h, w = X[0].shape[:2]
          img = np.zeros((h*nh, w*nw))
  
      for n, x in enumerate(X):
          j = n//nw
          i = n%nw
          img[j*h:j*h+h, i*w:i*w+w] = x
  
      imsave(save_path, img)
  