class_docstr: Run some generic sanity-checks of a suggest algorithm to make sure that
  it respects the semantics expected by e.g. fmin.
  
  Use it like this:
  
      TestRand = Suggest_API.make_test_class(rand.suggest, 'TestRand')
code: def test_seed_randomizes(self):
      #
      # suggest() algorithms can be either stochastic (e.g. random search)
      # or deterministic (e.g. grid search).  If an suggest implementation
      # is stochastic, then changing the seed argument should change the
      # return value.
      #
      if not self.seed_randomizes:
          return
  
      # -- sample 20 points to make sure we get some differences even
      #    for small search spaces (chance of false failure is 1/million).
      idxs_1, vals_1 = self.idxs_vals_from_ids(
          ids=list(range(20)), seed=45
      )
      idxs_2, vals_2 = self.idxs_vals_from_ids(
          ids=list(range(20)), seed=46
      )
      self.assertNotEqual((idxs_1, vals_1), (idxs_2, vals_2))
  
imports: import copy
  import unittest
  import numpy
  import bson
  from hyperopt.pyll import scope
  from hyperopt.base import JOB_STATE_DONE, JOB_STATE_NEW
  from hyperopt.base import TRIAL_KEYS
  from hyperopt.base import TRIAL_MISC_KEYS
  from hyperopt.base import InvalidTrial
  from hyperopt.base import miscs_to_idxs_vals
  from hyperopt.base import SONify
  from hyperopt.base import STATUS_OK
  from hyperopt.base import Trials
  from hyperopt.base import trials_from_docs
  from hyperopt.exceptions import AllTrialsFailed
label_desc: Use image node_id 4 for calling the Suggest_API obj's underlying member method code with example usage: obj.test_seed_randomizes() without return types