docs: def __set_data(self, X, Y, w=None):
          """ Internally assigns the input data and normalizes it
              according to the user's specifications
              @ In, X, an m-by-n array of values specifying m
              n-dimensional samples
              @ In, Y, a m vector of values specifying the output
              responses corresponding to the m samples specified by X
              @ In, w, an optional m vector of values specifying the
              weights associated to each of the m samples used. Default of
              None means all points will be equally weighted
          """
          self.X = X
          self.Y = Y
          self.check_duplicates()
  
          if w is not None:
              self.w = np.array(w)
          else:
              self.w = np.ones(len(Y)) * 1.0 / float(len(Y))
  
          if self.normalization == "feature":
              # This doesn't work with one-dimensional arrays on older
              # versions of sklearn
              min_max_scaler = sklearn.preprocessing.MinMaxScaler()
              self.Xnorm = min_max_scaler.fit_transform(np.atleast_2d(self.X))
          elif self.normalization == "zscore":
              self.Xnorm = sklearn.preprocessing.scale(
                  self.X, axis=0, with_mean=True, with_std=True, copy=True
              )
          else:
              self.Xnorm = np.array(self.X)