class_docstr: See ``SuccessiveHalving`` for documentation.
code: def __post_init__(self) -> None:
      super().__post_init__()
  
      min_budget = self._min_budget
      max_budget = self._max_budget
      assert min_budget is not None and max_budget is not None
      eta = self._eta
  
      # The only difference we have to do is change max_iterations, n_configs_in_stage, budgets_in_stage
      self._s_max = self._get_max_iterations(eta, max_budget, min_budget)  # type: ignore[operator]
      self._max_iterations: dict[int, int] = {}
      self._n_configs_in_stage: dict[int, list] = {}
      self._budgets_in_stage: dict[int, list] = {}
  
      for i in range(self._s_max + 1):
          max_iter = self._s_max - i
  
          (
              self._budgets_in_stage[i],
              self._n_configs_in_stage[i],
          ) = self._compute_configs_and_budgets_for_stages(
              eta, max_budget, max_iter, self._s_max
          )
          self._max_iterations[i] = max_iter + 1
  
file_path: SMAC3/smac/intensifier/hyperband.py
imports: from __future__ import annotations
  from typing import Any
  from smac.intensifier.successive_halving import SuccessiveHalving
label_desc: Use image node_id 2 for calling the Hyperband obj's underlying member method code with example usage: obj.__post_init__() without return types