class_docstr: Batch tuner is a special tuner that allows users to simply provide several hyperparameter sets,
  and it will evaluate each set.
  
  Batch tuner does **not** support standard search space.
  
  Search space of batch tuner looks like a single ``choice`` in standard search space,
  but it has different meaning.
  
  Consider following search space:
  
  .. code-block::
  
      'combine_params': {
          '_type': 'choice',
          '_value': [
              {'x': 0, 'y': 1},
              {'x': 1, 'y': 2},
              {'x': 1, 'y': 3},
          ]
      }
  
  Batch tuner will generate following 4 hyperparameter sets:
  
  1. {'x': 0, 'y': 1}
  2. {'x': 1, 'y': 2}
  3. {'x': 1, 'y': 3}
  
  If this search space was used with grid search tuner, it would instead generate:
  
  1. {'combine_params': {'x': 0, 'y': 1 }}
  2. {'combine_params': {'x': 1, 'y': 2 }}
  3. {'combine_params': {'x': 1, 'y': 3 }}
  
  Examples
  --------
  
  .. code-block::
  
      config.search_space = {
          'combine_params': {
              '_type': 'choice',
              '_value': [
                  {'optimizer': 'Adam', 'learning_rate': 0.001},
                  {'optimizer': 'Adam', 'learning_rate': 0.0001},
                  {'optimizer': 'Adam', 'learning_rate': 0.00001},
                  {'optimizer': 'SGD', 'learning_rate': 0.01},
                  {'optimizer': 'SGD', 'learning_rate': 0.005},
              ]
          }
      }
      config.tuner.name = 'Batch'
code: def import_data(self, data):
      if not self._values:
          LOGGER.info(
              "Search space has not been initialized, skip this data import"
          )
          return
  
      self._values = self._values[(self._count + 1) :]
      self._count = -1
  
      _completed_num = 0
      for trial_info in data:
          LOGGER.info(
              "Importing data, current processing \
                              progress %s / %s",
              _completed_num,
              len(data),
          )
          # simply validate data format
          assert "parameter" in trial_info
          _params = trial_info["parameter"]
          assert "value" in trial_info
          _value = trial_info["value"]
          if not _value:
              LOGGER.info(
                  "Useless trial data, value is %s, skip this trial data.",
                  _value,
              )
              continue
          _completed_num += 1
          if _params in self._values:
              self._values.remove(_params)
      LOGGER.info(
          "Successfully import data to batch tuner, \
                          total data: %d, imported data: %d.",
          len(data),
          _completed_num,
      )
  
file_path: nni/nni/algorithms/hpo/batch_tuner.py
imports: import logging
  import nni
  from nni.common.hpo_utils import validate_search_space
  from nni.tuner import Tuner
label_desc: Use image node_id 6 for calling the BatchTuner obj's underlying member method code with example usage: obj.import_data(data) without return types