code: def normalize_chunks(chunks, shape, typesize):
      
  
      # N.B., expect shape already normalized
  
      # handle auto-chunking
      if chunks is None or chunks is True:
          return guess_chunks(shape, typesize)
  
      # handle no chunking
      if chunks is False:
          return shape
  
      # handle 1D convenience form
      if isinstance(chunks, numbers.Integral):
          chunks = (int(chunks),)
  
      # handle bad dimensionality
      if len(chunks) > len(shape):
          raise ValueError('too many dimensions in chunks')
  
      # handle underspecified chunks
      if len(chunks) < len(shape):
          # assume chunks across remaining dimensions
          chunks += shape[len(chunks):]
  
      # handle None in chunks
      chunks = tuple(s if c is None else int(c)
                     for s, c in zip(shape, chunks))
  
      return chunks
docs: Convenience function to normalize the `chunks` argument for an array
      with the given `shape`.