class_docstr: Wrapper that trains a separate LGBM Booster for each quantile level.
class_docstr_tok: ["Wrapper","that","trains","a","separate","LGBM","Booster","for","each","quantile","level","."]
code: def __init__(
      self,
      quantile_levels: List[float],
      early_stopping_callback_kwargs: Optional[dict] = None,
  ):
      if quantile_levels is None:
          raise AssertionError
      if not all(0 < q < 1 for q in quantile_levels):
          raise AssertionError(
              f"quantile_levels must fulfill 0 < q < 1, provided quantile_levels: {quantile_levels}"
          )
  
      self.quantile_levels = quantile_levels
  
      self.early_stopping_callback_kwargs = None
      self.time_limit_global = None
  
      if early_stopping_callback_kwargs is not None:
          self.early_stopping_callback_kwargs = (
              early_stopping_callback_kwargs
          )
          self.time_limit_global = early_stopping_callback_kwargs.pop(
              "time_limit"
          )
      self.model_dict = {}
  
imports: import copy
  import os
  import time
  from typing import List, Optional
  import numpy
  import pandas
  from pandas import DataFrame, Series
  from autogluon.common.utils.try_import import try_import_lightgbm
  from autogluon.core.constants import BINARY, MULTICLASS, QUANTILE, REGRESSION, SOFTCLASS
  from autogluon.core.utils.exceptions import TimeLimitExceeded
label_desc: Use image node_id 1 to create a new QuantileBooster object  with example: obj = QuantileBooster(quantile_levels, early_stopping_callback_kwargs)