def __init__(
        self,
        final_lr: float,
        scale: str = "log",
        num_steps: Optional[int] = None,
        optimizer_key: str = None,
    ):
        """
        Args:
            final_lr: final learning rate to try with
            scale: learning rate increasing scale ("log" or "linear")
            num_steps:  number of batches to try, if None - whole loader would be used.
            optimizer_key: which optimizer key to use for learning rate scheduling

        Raises:
            NotImplementedError: if invalid scale value.
        """
        super().__init__(optimizer_key=optimizer_key)

        self.final_lr = final_lr
        self.scale = scale
        self.num_steps = num_steps
        self.multiplier = 0
        self.lr_step = 0
        self.iteration = 0

        self._calc_lr = None
        if scale == "log":
            self._calc_lr = self._calc_lr_log
        elif scale == "linear":
            self._calc_lr = self._calc_lr_linear
        else:
            raise NotImplementedError("Not supported")

        Args:
            final_lr: final learning rate to try with
            scale: learning rate increasing scale ("log" or "linear")
            num_steps:  number of batches to try, if None - whole loader would be used.
            optimizer_key: which optimizer key to use for learning rate scheduling

        Raises:
            NotImplementedError: if invalid scale value.
        
catalyst/callbacks/scheduler.py