code: def predict(self, x, add_intercept=False):
          
          # sanity check
          if x.min() < self.start:
              raise Warning("x.min() < self.start")
          if x.max() > self.end:
              raise Warning("x.max() > self.end")
  
          return get_X_spline(x=x,
                              knots=self.knots,
                              n_bases=self.n_bases,
                              spline_order=self.spline_order,
                              add_intercept=add_intercept)
docs: For some x, predict the bn(x) for each base
  
          Arguments:
              x: np.array; Vector of dimension 1
              add_intercept: bool; should we add the intercept to the final array
  
          Returns:
              np.array, of shape (len(x), n_bases + (add_intercept))