class_docstr: Test class for output tests.
docstr: Test using multiple feature sets with feature hasher throws warning.
docstr_tok: ["Test","using","multiple","feature","sets","with","feature","hasher","throws","warning","."]
code: def test_multiple_featuresets_and_featurehasher_throws_warning(self):
      """Test using multiple feature sets with feature hasher throws warning."""
      # make a simple config file for feature hasher warning test
      values_to_fill_dict = {
          "experiment_name": "test_warning_multiple_featuresets",
          "train_directory": train_dir,
          "task": "train",
          "grid_search": "false",
          "objectives": "['f1_score_micro']",
          "learners": "['LogisticRegression']",
          "featuresets": "[['test_input_3examples_1', 'test_input_3examples_2']]",
          "featureset_names": "['feature_hasher']",
          "suffix": ".jsonlines",
          "logs": output_dir,
          "models": output_dir,
          "feature_hasher": "true",
          "hasher_features": "4",
      }
  
      config_template_path = (
          config_dir / "test_warning_multiple_featuresets.template.cfg"
      )
  
      config_path = fill_in_config_options(
          config_template_path, values_to_fill_dict, "feature_hasher"
      )
  
      # run the experiment
      print(config_path)
      run_configuration(config_path, quiet=True, local=True)
  
      # test if it throws any warning
      logfile_path = (
          output_dir
          / "test_warning_multiple_featuresets_feature_hasher_LogisticRegression.log"
      )
      with open(logfile_path) as f:
          warning_pattern = re.compile(
              r"Since there are multiple feature files, feature hashing applies"
              r" to each specified feature file separately."
          )
          matches = re.findall(warning_pattern, f.read())
          self.assertEqual(len(matches), 1)
  
imports: import csv
  import json
  import re
  import unittest
  import warnings
  from ast import literal_eval
  from collections import defaultdict
  from itertools import chain, product
  from pathlib import Path
  from unittest.mock import Mock, patch
  import numpy
  import pandas
  from numpy.testing import assert_almost_equal, assert_array_almost_equal, assert_array_equal
  from sklearn.model_selection import ShuffleSplit, learning_curve
  from sklearn.naive_bayes import MultinomialNB
  from skll.data import FeatureSet, NDJReader, NDJWriter, Reader
  from skll.experiments import run_configuration
  from skll.experiments.output import _compute_ylimits_for_featureset
  from skll.learner import Learner
  from skll.utils.constants import VALID_TASKS
  from skll.utils.logging import close_and_remove_logger_handlers, get_skll_logger
  from skll.utils.testing import backward_compatibility_dir, config_dir, create_jsonlines_feature_files, fill_in_config_options, fill_in_config_paths, fill_in_config_paths_for_single_file, make_classification_data, make_digits_data, make_regression_data, other_dir, output_dir, remove_jsonlines_feature_files, test_dir, tests_dir, train_dir, unlink
label_desc: Use image node_id 11 for calling the TestOutput obj's underlying member method code with example usage: obj.test_multiple_featuresets_and_featurehasher_throws_warning() without return types