code: def promotions_async(
      self, request_id: uuid.UUID, metric: float, divisor: int
  ) -> List[uuid.UUID]:
      logging.info(f"Rung {self.idx}")
      logging.info(f"outstanding_trials {self.outstanding_trials}")
  
      old_num_promote = len(self.metrics) // divisor
      num_promote = (len(self.metrics) + 1) // divisor
  
      index = self._search_metric_index(metric)
      promote_now = index < num_promote
      trial_metric = TrialMetric(
          request_id=request_id, metric=metric, promoted=promote_now
      )
      self.metrics.insert(index, trial_metric)
  
      if promote_now:
          return [request_id]
      if (
          num_promote != old_num_promote
          and not self.metrics[old_num_promote].promoted
      ):
          self.metrics[old_num_promote].promoted = True
          return [self.metrics[old_num_promote].request_id]
  
      logging.info("No promotion")
      return []
  
imports: import dataclasses
  import json
  import logging
  import pickle
  import random
  import sys
  import uuid
  from pathlib import Path
  from typing import Any, Dict, List, Optional, Set
  from urllib3.connectionpool import HTTPConnectionPool, MaxRetryError
  from determined import searcher
label_desc: Use image node_id 1 for calling the Rung obj's underlying member method code with example usage: obj.promotions_async(request_id, metric, divisor) and returns: list, list, list