docs: private static int[] partition(final int size, final int parts) {
  		if (size < 1) {
  			throw new IllegalArgumentException(
  				"Size must greater than zero: " + size
  			);
  		}
  		if (parts < 1) {
  			throw new IllegalArgumentException(
  				"Number of partitions must greater than zero: " + parts
  			);
  		}
  
  		final int pts = Math.min(size, parts);
  		final int[] partition = new int[pts + 1];
  
  		final int bulk = size/pts;
  		final int rest = size%pts;
  		assert (bulk*pts + rest) == size;
  
  		for (int i = 0, n = pts - rest; i < n; ++i) {
  			partition[i] = i*bulk;
  		}
  		for (int i = 0, n = rest + 1; i < n; ++i) {
  			partition[pts - rest + i] = (pts - rest)*bulk + i*(bulk + 1);
  		}
  
  		return partition;
  	}