class_docstr: A bracket in Hyperband, all the information of a bracket is managed by an instance of this class
  
  Parameters
  ----------
  bracket_id: string
      The id of this bracket, usually be set as '{Hyperband index}-{SH iteration index}'
  s: int
      The current SH iteration index.
  s_max: int
      total number of SH iterations
  eta: float
      In each iteration, a complete run of sequential halving is executed. In it,
              after evaluating each configuration on the same subset size, only a fraction of
              1/eta of them 'advances' to the next round.
  R:
      the budget associated with each stage
  optimize_mode: str
      optimize mode, 'maximize' or 'minimize'
docstr: If the trial is finished and the corresponding round (i.e., i) has all its trials finished,
  it will choose the top k trials for the next round (i.e., i+1)
  
  Parameters
  ----------
  i: int
      the ith round
docstr_tok: ["If","the","trial","is","finished","and","the","corresponding","round","(","i.e.",",","i",")","has","all","its","trials","finished",",","it","will","choose","the","top","k","trials","for","the","next","round","(","i.e.",",","i+1",")","Parameters","--","--","--","--","--","i",":","int","the","ith","round"]
code: def inform_trial_end(self, i):
      """If the trial is finished and the corresponding round (i.e., i) has all its trials finished,
      it will choose the top k trials for the next round (i.e., i+1)
  
      Parameters
      ----------
      i: int
          the ith round
      """
      global _KEY
      self.num_finished_configs[i] += 1
      _logger.debug(
          "bracket id: %d, round: %d %d, finished: %d, all: %d",
          self.bracket_id,
          self.i,
          i,
          self.num_finished_configs[i],
          self.num_configs_to_run[i],
      )
      if (
          self.num_finished_configs[i] >= self.num_configs_to_run[i]
          and self.no_more_trial is False
      ):
          # choose candidate configs from finished configs to run in the next round
          assert self.i == i + 1
          this_round_perf = self.configs_perf[i]
          if self.optimize_mode is OptimizeMode.Maximize:
              sorted_perf = sorted(
                  this_round_perf.items(),
                  key=lambda kv: kv[1][1],
                  reverse=True,
              )  # reverse
          else:
              sorted_perf = sorted(
                  this_round_perf.items(), key=lambda kv: kv[1][1]
              )
          _logger.debug(
              "bracket %s next round %s, sorted hyper configs: %s",
              self.bracket_id,
              self.i,
              sorted_perf,
          )
          next_n, next_r = self.get_n_r()
          _logger.debug(
              "bracket %s next round %s, next_n=%d, next_r=%d",
              self.bracket_id,
              self.i,
              next_n,
              next_r,
          )
          hyper_configs = dict()
          for k in range(next_n):
              params_id = sorted_perf[k][0]
              params = self.hyper_configs[i][params_id]
              params[_KEY] = next_r  # modify r
              # generate new id
              increased_id = params_id.split("_")[-1]
              new_id = create_bracket_parameter_id(
                  self.bracket_id, self.i, increased_id
              )
              hyper_configs[new_id] = params
          self._record_hyper_configs(hyper_configs)
          return [[key, value] for key, value in hyper_configs.items()]
      return None
  
imports: import copy
  import logging
  import math
  import sys
  import numpy
  from schema import Schema, Optional
  import nni
  from nni import ClassArgsValidator
  from nni.common.hpo_utils import validate_search_space
  from nni.runtime.common import multi_phase_enabled
  from nni.runtime.msg_dispatcher_base import MsgDispatcherBase
  from nni.runtime.tuner_command_channel import CommandType
  from nni.utils import NodeType, OptimizeMode, MetricType, extract_scalar_reward
  from nni import parameter_expressions
label_desc: Use image node_id 6 for calling the Bracket obj's underlying member method code with example usage: obj.inform_trial_end(i) and returns: None, unknown