class_docstr: Proposer to generate new values for hyperparameters
  
  :param config: experiment configuration
  :type config: BasicConfig
code: def setup_config():  # pragma: no cover
      config = []
      try:
          print(
              "start adding hyperparameters, use 'stop' for variable name or ctrl+c to exit"
          )
          while True:
              name = input("variable name:")
              if name == "stop":
                  break
              try:
                  res = input("range (separated by ,):")
                  if "'" in res:
                      res = res.replace("'", '"')
                  if res[0] == "[" and res[-1] == "]":
                      vrange = json.loads(res)
                  else:
                      vrange = json.loads("[" + res + "]")
              except ValueError:
                  logger.critical(
                      "failed to parse range, treat it as strings separated by ','"
                  )
                  vrange = res.split(",")
              if len(vrange) == 0:
                  raise ValueError("range needs at least one element")
              vtype = get_from_options(
                  "type:", ("choice", "float", "int")
              )
              config.append(
                  {"name": name, "range": vrange, "type": vtype}
              )
      except KeyboardInterrupt:
          print("Config interrupted, completed variables are saved.")
      return {"parameter_config": config}
  
imports: import abc
  import logging
  import pickle
  import json
  import threading
  from six.moves import input
  from ..utils import set_default_keyvalue, check_missing_key, get_from_options
  from .None import ProposerStatus
label_desc: Use image node_id 7 for calling the AbstractProposer obj's underlying member method code with example usage: obj.setup_config() and returns: dict