code: def guess_chunks(shape, typesize):
      
  
      ndims = len(shape)
      # require chunks to have non-zero length for all dimensions
      chunks = np.maximum(np.array(shape, dtype='=f8'), 1)
  
      # Determine the optimal chunk size in bytes using a PyTables expression.
      # This is kept as a float.
      dset_size = np.product(chunks)*typesize
      target_size = CHUNK_BASE * (2**np.log10(dset_size/(1024.*1024)))
  
      if target_size > CHUNK_MAX:
          target_size = CHUNK_MAX
      elif target_size < CHUNK_MIN:
          target_size = CHUNK_MIN
  
      idx = 0
      while True:
          # Repeatedly loop over the axes, dividing them by 2.  Stop when:
          # 1a. We're smaller than the target chunk size, OR
          # 1b. We're within 50% of the target chunk size, AND
          # 2. The chunk is smaller than the maximum chunk size
  
          chunk_bytes = np.product(chunks)*typesize
  
          if (chunk_bytes < target_size or
                  abs(chunk_bytes-target_size)/target_size < 0.5) and \
                  chunk_bytes < CHUNK_MAX:
              break
  
          if np.product(chunks) == 1:
              break  # Element size larger than CHUNK_MAX
  
          chunks[idx % ndims] = np.ceil(chunks[idx % ndims] / 2.0)
          idx += 1
  
      return tuple(int(x) for x in chunks)
docs: Guess an appropriate chunk layout for a dataset, given its shape and
      the size of each element in bytes.  Will allocate chunks only as large
      as MAX_SIZE.  Chunks are generally close to some power-of-2 fraction of
      each axis, slightly favoring bigger values for the last index.
      Undocumented and subject to change without warning.