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_arbitrary_ids(self):
      # -- suggest implementations should work for arbitrary ID
      #    values (possibly assuming they are hashable), and the
      #    ID values should have no effect on the return values.
      ids_1 = [-2, 0, 7, "a", "007", 66, "a3", "899", 23, 2333]
      ids_2 = ["a", "b", "c", "d", 1, 2, 3, 0.1, 0.2, 0.3]
      idxs_1, vals_1 = self.idxs_vals_from_ids(ids=ids_1, seed=45)
      idxs_2, vals_2 = self.idxs_vals_from_ids(ids=ids_2, seed=45)
      all_ids_1 = set()
      for var, ids in list(idxs_1.items()):
          all_ids_1.update(ids)
      all_ids_2 = set()
      for var, ids in list(idxs_2.items()):
          all_ids_2.update(ids)
      self.assertEqual(all_ids_1, set(ids_1))
      self.assertEqual(all_ids_2, set(ids_2))
      self.assertEqual(vals_1, 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 3 for calling the Suggest_API obj's underlying member method code with example usage: obj.test_arbitrary_ids() without return types