code: def _intercept_dot(w, X):
      
      c = 0.
      if w.size == X.shape[1] + 1:
          c = w[-1]
          w = w[:-1]
  
      z = np.dot(X, w) + c
      return w, c, z
docs: Computes y * np.dot(X, w).
  
      It takes into consideration if the intercept should be fit or not.
  
      Parameters
      ----------
      w : ndarray, shape (n_features,) or (n_features + 1,)
          Coefficient vector.
  
      X : {array-like, sparse matrix}, shape (n_samples, n_features)
          Training data.