code: def progress(self, searcher_state: searcher.SearcherState) -> float:
      if 0 < self.max_concurrent_trials < self.pending_trials:
          logging.error(
              "pending trials is greater than max_concurrent_trial"
          )
      units_completed = sum(
          (
              (
                  self.max_length
                  if r in searcher_state.trials_closed
                  else searcher_state.trial_progress[r]
              )
              for r in searcher_state.trial_progress
          )
      )
      units_expected = self.max_length * self.max_trials
      progress = units_completed / units_expected
      logging.debug(
          f"progress = {progress} = {units_completed} / {units_expected},"
          f" {searcher_state.trial_progress}"
      )
  
      if progress >= 0.5:
          self.raise_exception("progress_middle")
  
      return progress
  
imports: import dataclasses
  import json
  import logging
  import pathlib
  import pickle
  import random
  import sys
  import uuid
  from typing import Any, Dict, List, Optional, Set
  from urllib3 import connectionpool
  from determined import searcher
label_desc: Use image node_id 5 for calling the RandomSearchMethod obj's underlying member method code with example usage: obj.progress(searcher_state) and returns: progress