class_docstr: Takes command-line input and transforms it into hyperopt search space
  An example of command-line input:
  --algorithms=ftrl,sgd --l2=1e-8..1e-4~LO -l=0.01..10~L --ftrl_beta=0.01..1 --passes=1..10~I -q=SE+SZ+DR,SE~O
code: def string_to_pyll(self):
      line = shlex.split(self.command)
  
      algorithms = ["sgd"]
      for arg in line:
          arg, value = arg.split("=")
          if arg == "--algorithms":
              algorithms = set(
                  self.range_pattern.findall(value)[0].split(",")
              )
              if tuple(self.distr_pattern.findall(value)) not in {
                  (),
                  ("O",),
              }:
                  raise ValueError(
                      (
                          "Distribution options are prohibited for --algorithms flag. "
                          "Simply list the algorithms instead (like --algorithms=ftrl,sgd)"
                      )
                  )
              elif self.distr_pattern.findall(value) == ["O"]:
                  algorithms.add("sgd")
  
              for algo in algorithms:
                  if algo not in self.algorithm_metadata:
                      raise NotImplementedError(
                          (
                              "%s algorithm is not found. "
                              "Supported algorithms by now are %s"
                          )
                          % (algo, str(self.algorithm_metadata.keys()))
                      )
              break
  
      self.space = {
          algo: {
              "type": algo,
              "argument": self.algorithm_metadata[algo]["arg"],
          }
          for algo in algorithms
      }
      for algo in algorithms:
          for arg in line:
              arg, value = arg.split("=")
              if arg == "--algorithms":
                  continue
              if (
                  arg
                  not in self.algorithm_metadata[algo][
                      "prohibited_flags"
                  ]
              ):
                  distrib = self._process_vw_argument(arg, value, algo)
                  self.space[algo][arg] = distrib
              else:
                  pass
      self.space = hp.choice("algorithm", self.space.values())
  
imports: from hyperopt import hp, fmin, tpe, rand, Trials, STATUS_OK
  from hyperopt.pyll import scope
  from sklearn.metrics import roc_curve, auc, log_loss, average_precision_score, hinge_loss, mean_squared_error
  import numpy
  from datetime import datetime
  import subprocess, shlex
  from math import exp, log
  import argparse
  import re
  import logging
  import json
  from matplotlib import pyplot
  import itertools
  from collections import Counter
label_desc: Use image node_id 4 for calling the HyperoptSpaceConstructor obj's underlying member method code with example usage: obj.string_to_pyll() without return types