code: def blockgen(blocks, shape):
      
      iterables = [blockgen1d(l, s) for (l, s) in zip(blocks, shape)]
      return product(*iterables)
docs: Generate a list of slice tuples to be used by combine.
  
      The tuples represent regions in an N-dimensional image.
  
      :param blocks: a tuple of block sizes
      :param shape: the shape of the n-dimensional array
      :return: an iterator to the list of tuples of slices
  
      Example:
  
          >>> blocks = (500, 512)
          >>> shape = (1040, 1024)
          >>> for i in blockgen(blocks, shape):
          ...     print i
          (slice(0, 260, None), slice(0, 512, None))
          (slice(0, 260, None), slice(512, 1024, None))
          (slice(260, 520, None), slice(0, 512, None))
          (slice(260, 520, None), slice(512, 1024, None))
          (slice(520, 780, None), slice(0, 512, None))
          (slice(520, 780, None), slice(512, 1024, None))
          (slice(780, 1040, None), slice(0, 512, None))
          (slice(780, 1040, None), slice(512, 1024, None))