docs: def param_search(estimator, param_dict, n_iter=None, seed=None):
      """
      Generator for cloned copies of `estimator` set with parameters
      as specified by `param_dict`. `param_dict` can contain either lists
      of parameter values (grid search) or a scipy distribution function
      to be sampled from. If distributions, you must specify `n_iter`.
  
      Parameters:
      ___________
  
      estimator:
          sklearn-like estimator
  
      param_dict:
          dict of parameter name: values, where values can be an iterable
          or a distribution function
  
      n_iter:
          number of draws to take from parameter distributions
      """
  
      if n_iter is None:
          param_iter = ParameterGrid(param_dict)
      else:
          param_iter = ParameterSampler(param_dict,
                                        n_iter,
                                        random_state=seed)
  
      estimators = []
      for params in param_iter:
          new_estimator = sklearn.clone(estimator)
          new_estimator.set_params(**params)
          estimators.append(new_estimator)
      return estimators