docs: def unblockshaped(arr, h, w):
      """
      Return an new array of shape (h, w) where
      h * w = arr.size
  
      If arr is of shape (n, nrows, ncols), n sublocks of shape (nrows, ncols),
      then the returned array preserves the "physical" layout of the sublocks.
      """
      n, nrows, ncols = arr.shape
      return (arr.reshape(h // nrows, -1, nrows, ncols)
                 .swapaxes(1, 2)
                 .reshape(h, w))