code: def _boston_with_leak(
      X, y, feat_names, noise_scale=10.0, noise_ratio=0.25
  ):
      rng = np.random.RandomState(42)
      noise = noise_scale * (
          rng.random_sample(y.shape).reshape(-1, 1) - 0.5
      )
      (
          X_train,
          X_test,
          y_train,
          y_test,
          noise_train,
          noise_test,
      ) = train_test_split(
          X, y, noise, random_state=42, test_size=noise_ratio
      )
  
      # noise correlates with y in train, but not in test
      X_train = np.hstack(
          [X_train, noise_train + y_train.reshape(-1, 1)]
      )
      X_test = np.hstack([X_test, noise_test])
  
      feat_names = list(feat_names) + ["DATALEAK"]
      return X_train, X_test, y_train, y_test, feat_names
  
imports: import pytest
  import numpy
  from sklearn.base import is_classifier, is_regressor
  from sklearn.svm import SVR, SVC
  from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
  from sklearn.model_selection import train_test_split, cross_val_score
  from sklearn.pipeline import make_pipeline
  from sklearn.feature_selection import SelectFromModel
  from sklearn.linear_model import LogisticRegression
  import eli5
  from eli5.sklearn import PermutationImportance
  from .utils import format_as_all
label_desc: Use image node_id 1 for calling a global function with example usage: _boston_with_leak(X, y, feat_names, noise_scale, noise_ratio) and returns: X_train,  X_test,  y_train,  y_test,  feat_names