code: def fit(self, X, y, sample_weight=None):
          
          X, event, time = check_arrays_survival(X, y)
  
          n_samples, n_features = X.shape
  
          if sample_weight is None:
              sample_weight = numpy.ones(n_samples, dtype=numpy.float32)
          else:
              sample_weight = column_or_1d(sample_weight, warn=True)
              check_consistent_length(X, sample_weight)
  
          random_state = check_random_state(self.random_state)
  
          self._check_params()
  
          self.estimators_ = []
          self.n_features_ = n_features
          self.loss_ = LOSS_FUNCTIONS[self.loss](1)
          if isinstance(self.loss_, (CensoredSquaredLoss, IPCWLeastSquaresError)):
              time = numpy.log(time)
  
          self.train_score_ = numpy.zeros((self.n_estimators,), dtype=numpy.float64)
          # do oob?
          if self.subsample < 1.0:
              self.oob_improvement_ = numpy.zeros(self.n_estimators,
                                                  dtype=numpy.float64)
  
          self._fit(X, event, time, sample_weight, random_state)
  
          return self
docs: Fit estimator.
  
          Parameters
          ----------
          X : array-like, shape = (n_samples, n_features)
              Data matrix
  
          y : structured array, shape = (n_samples,)
              A structured array containing the binary event indicator
              as first field, and time of event or time of censoring as
              second field.
  
          sample_weight : array-like, shape = (n_samples,), optional
              Weights given to each sample. If omitted, all samples have weight 1.
  
          Returns
          -------
          self