docs: public double[][] initializeRanges(int[] instList) throws Exception {
      if (m_Data == null)
        throw new Exception("No instances supplied.");
      
      int numAtt = m_Data.numAttributes();
      double[][] ranges = new double [numAtt][3];
      
      if (m_Data.numInstances() <= 0) {
        initializeRangesEmpty(numAtt, ranges);
        return ranges;
      }
      else {
        // initialize ranges using the first instance
        updateRangesFirst(m_Data.instance(instList[0]), numAtt, ranges);
        // update ranges, starting from the second
        for (int i = 1; i < instList.length; i++) {
          updateRanges(m_Data.instance(instList[i]), numAtt, ranges);
        }
      }
      return ranges;
    }