class_docstr: A wrapper algorithm for limiting the number of concurrent trials.
  
  Certain Searchers have their own internal logic for limiting
  the number of concurrent trials. If such a Searcher is passed to a
  ``ConcurrencyLimiter``, the ``max_concurrent`` of the
  ``ConcurrencyLimiter`` will override the ``max_concurrent`` value
  of the Searcher. The ``ConcurrencyLimiter`` will then let the
  Searcher's internal logic take over.
  
  Args:
      searcher: Searcher object that the
          ConcurrencyLimiter will manage.
      max_concurrent: Maximum concurrent samples from the underlying
          searcher.
      batch: Whether to wait for all concurrent samples
          to finish before updating the underlying searcher.
  
  Example:
  
  .. code-block:: python
  
      from ray.tune.search import ConcurrencyLimiter
      search_alg = HyperOptSearch(metric="accuracy")
      search_alg = ConcurrencyLimiter(search_alg, max_concurrent=2)
      tuner = tune.Tuner(
          trainable_function,
          tune_config=tune.TuneConfig(
              search_alg=search_alg
          ),
      )
      tuner.fit()
class_docstr_tok: ["A","wrapper","algorithm","for","limiting","the","number","of","concurrent","trials",".","Certain","Searchers","have","their","own","internal","logic","for","limiting","the","number","of","concurrent","trials",".","If","such","a","Searcher","is","passed","to","a","``","ConcurrencyLimiter","``",",","the","``","max_concurrent","``","of","the","``","ConcurrencyLimiter","``","will","override","the","``","max_concurrent","``","value","of","the","Searcher",".","The","``","ConcurrencyLimiter","``","will","then","let","the","Searcher","'s","internal","logic","take","over",".","Args",":","searcher",":","Searcher","object","that","the","ConcurrencyLimiter","will","manage",".","max_concurrent",":","Maximum","concurrent","samples","from","the","underlying","searcher",".","batch",":","Whether","to","wait","for","all","concurrent","samples","to","finish","before","updating","the","underlying","searcher",".","Example",":","..","code-block",":",":","python","from","ray.tune.search","import","ConcurrencyLimiter","search_alg","=","HyperOptSearch","(","metric=","''","accuracy","''",")","search_alg","=","ConcurrencyLimiter","(","search_alg",",","max_concurrent=2",")","tuner","=","tune.Tuner","(","trainable_function",",","tune_config=tune.TuneConfig","(","search_alg=search_alg",")",",",")","tuner.fit","(",")"]
code: def get_state(self) -> Dict:
      state = self.__dict__.copy()
      del state["searcher"]
      return copy.deepcopy(state)
  
imports: import copy
  import glob
  import logging
  import os
  import warnings
  from typing import Dict, Optional, List, Union, Any, TYPE_CHECKING
  from ray.air._internal.usage import tag_searcher
  from ray.tune.search.util import _set_search_properties_backwards_compatible
  from ray.util.annotations import DeveloperAPI, PublicAPI
  from ray.util.debug import log_once
label_desc: Use image node_id 9 for calling the ConcurrencyLimiter obj's underlying member method code with example usage: obj.get_state() and returns: copy