docs: protected void initializeDataExtends(Relation<NumberVector> relation, int dim, double[] min, double[] extend) {
      assert (min.length == dim && extend.length == dim);
      // if no parameter for min max compute min max values for each dimension
      // from dataset
      if(minima == null || maxima == null || minima.length == 0 || maxima.length == 0) {
        double[][] minmax = RelationUtil.computeMinMax(relation);
        final double[] dmin = minmax[0], dmax = minmax[1];
        for(int d = 0; d < dim; d++) {
          min[d] = dmin[d];
          extend[d] = dmax[d] - dmin[d];
        }
        return;
      }
      if(minima.length == dim) {
        System.arraycopy(minima, 0, min, 0, dim);
      }
      else if(minima.length == 1) {
        Arrays.fill(min, minima[0]);
      }
      else {
        throw new AbortException("Invalid minima specified: expected " + dim + " got minima dimensionality: " + minima.length);
      }
      if(maxima.length == dim) {
        for(int d = 0; d < dim; d++) {
          extend[d] = maxima[d] - min[d];
        }
        return;
      }
      else if(maxima.length == 1) {
        for(int d = 0; d < dim; d++) {
          extend[d] = maxima[0] - min[d];
        }
        return;
      }
      else {
        throw new AbortException("Invalid maxima specified: expected " + dim + " got maxima dimensionality: " + maxima.length);
      }
    }