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