code: def _score_rules(self, X, y, rules):
      X_concat = np.zeros([X.shape[0], 0])
  
      # standardise linear variables if requested (for regression model only)
      if self.include_linear:
          # standard deviation and mean of winsorized features
          self.winsorizer.train(X)
          winsorized_X = self.winsorizer.trim(X)
          self.stddev = np.std(winsorized_X, axis=0)
          self.mean = np.mean(winsorized_X, axis=0)
  
          if self.lin_standardise:
              self.friedscale.train(X)
              X_regn = self.friedscale.scale(X)
          else:
              X_regn = X.copy()
          X_concat = np.concatenate((X_concat, X_regn), axis=1)
  
      X_rules = self.transform(X, rules)
      if X_rules.shape[0] > 0:
          X_concat = np.concatenate((X_concat, X_rules), axis=1)
  
      # no rules fit and self.include_linear == False
      if X_concat.shape[1] == 0:
          return [], [], 0
  
      return score_linear(
          X_concat,
          y,
          rules,
          alpha=self.alpha,
          penalty=self.penalty,
          prediction_task=self.prediction_task,
          max_rules=self.max_rules,
          random_state=self.random_state,
      )
  
file_path: imodels/imodels/experimental/stablelinear.py
imports: import numpy
  from typing import List
  from imodels.rule_set.rule_fit import RuleFit
  from imodels.util.score import score_linear
  from sklearn.base import ClassifierMixin, RegressorMixin, BaseEstimator
  from .util import extract_ensemble
label_desc: Use image node_id 4 for calling the StableLinear obj's underlying member method code with example usage: obj._score_rules(X, y, rules) and returns: score_linear, list,  list,  int