code: def test_remove_by_shuffling(
      train_df,
      holdout_df,
      train_fn,
      eval_fn,
      base_extractor,
      metric_name,
      logs,
  ):
      features = ["x1", "x2", "x3", "x4", "x5", "x6"]
      predict_fn, _, train_logs = train_fn(train_df, features)
      next_features = remove_by_feature_shuffling(
          logs[0],
          predict_fn,
          eval_fn,
          holdout_df,
          base_extractor,
          metric_name,
          max_removed_by_step=3,
          threshold=0.5,
          speed_up_by_importance=True,
      )
  
      assert sorted(next_features) == sorted(["x2", "x5", "x6"])
  
      # tests speed_up_by_importance=False
      next_features = remove_by_feature_shuffling(
          logs[0],
          predict_fn,
          eval_fn,
          holdout_df,
          base_extractor,
          metric_name,
          max_removed_by_step=3,
          threshold=0.5,
          speed_up_by_importance=False,
          parallel=True,
          nthread=2,
      )
  
      assert sorted(next_features) == sorted(["x1", "x2", "x4"])
  
file_path: fklearn/tests/tuning/test_samplers.py
imports: import pandas
  import pytest
  from tests import LOGS, PARALLEL_LOGS
  from toolz.curried import first
  from fklearn.metrics.pd_extractors import evaluator_extractor
  from fklearn.training.classification import logistic_classification_learner
  from fklearn.tuning.samplers import remove_by_feature_importance, remove_by_feature_shuffling, remove_features_subsets
  from fklearn.validation.evaluators import roc_auc_evaluator
label_desc: Use image node_id 11 for calling a global function with example usage: test_remove_by_shuffling(train_df, holdout_df, train_fn, eval_fn, base_extractor, metric_name, logs) without return types