class_docstr: Use mlflow to implement Experiment.
class_docstr_tok: ["Use","mlflow","to","implement","Experiment","."]
docstr: Quoting docs of search_runs
  > The default ordering is to sort by start_time DESC, then run_id.
  
  Parameters
  ----------
  max_results : int
      the number limitation of the results'
  status : str
      the criteria based on status to filter results.
      `None` indicates no filtering.
  filter_string : str
      mlflow supported filter string like 'params."my_param"="a" and tags."my_tag"="b"', use this will help to reduce too much run number.
docstr_tok: ["Quoting","docs","of","search_runs",">","The","default","ordering","is","to","sort","by","start_time","DESC",",","then","run_id",".","Parameters","--","--","--","--","--","max_results",":","int","the","number","limitation","of","the","results'","status",":","str","the","criteria","based","on","status","to","filter","results",".","`","None","`","indicates","no","filtering",".","filter_string",":","str","mlflow","supported","filter","string","like","'params",".","``","my_param","''","=","''","a","''","and","tags",".","``","my_tag","''","=","''","b","''","'",",","use","this","will","help","to","reduce","too","much","run","number","."]
code: def list_recorders(
      self,
      rtype: Literal["dict", "list"] = Experiment.RT_D,
      max_results: int = UNLIMITED,
      status: Union[str, None] = None,
      filter_string: str = "",
  ):
      """
      Quoting docs of search_runs
      > The default ordering is to sort by start_time DESC, then run_id.
  
      Parameters
      ----------
      max_results : int
          the number limitation of the results'
      status : str
          the criteria based on status to filter results.
          `None` indicates no filtering.
      filter_string : str
          mlflow supported filter string like 'params."my_param"="a" and tags."my_tag"="b"', use this will help to reduce too much run number.
      """
      runs = self._client.search_runs(
          self.id,
          run_view_type=ViewType.ACTIVE_ONLY,
          max_results=max_results,
          filter_string=filter_string,
      )
      rids = []
      recorders = []
      for i, n in enumerate(runs):
          recorder = MLflowRecorder(self.id, self._uri, mlflow_run=n)
          if status is None or recorder.status == status:
              rids.append(n.info.run_id)
              recorders.append(recorder)
  
      if rtype == Experiment.RT_D:
          return dict(zip(rids, recorders))
      elif rtype == Experiment.RT_L:
          return recorders
      else:
          raise NotImplementedError(
              f"This type of input is not supported"
          )
  
imports: from typing import Dict, List, Union
  from qlib.typehint import Literal
  import mlflow
  from mlflow.entities import ViewType
  from mlflow.exceptions import MlflowException
  from .recorder import Recorder, MLflowRecorder
  from ..log import get_module_logger
label_desc: Use image node_id 9 for calling the MLflowExperiment obj's underlying member method code with example usage: obj.list_recorders(rtype, max_results, status, filter_string) and returns: dict, recorders