def __init__(
        self,
        params,
        lr: Optional[float] = 1e-3,
        betas: Optional[Tuple[float, float]] = (0.9, 0.999),
        eps: Optional[float] = 1e-6,
        weight_decay: Optional[float] = 0.0,
        adam: Optional[bool] = False,
    ):
        """
        Args:
            params: iterable of parameters to optimize or dicts
                defining parameter groups
            lr (float, optional): learning rate (default: 1e-3)
            betas (Tuple[float, float], optional): coefficients used for
                computing running averages of gradient
                and its square (default: (0.9, 0.999))
            eps (float, optional): term added to the denominator to improve
                numerical stability (default: 1e-8)
            weight_decay (float, optional): weight decay (L2 penalty)
                (default: 0)
            adam (bool, optional): always use trust ratio = 1, which turns
                this into Adam. Useful for comparison purposes.

        Raises:
            ValueError: if invalid learning rate, epsilon value or betas.
        """
        if not 0.0 <= lr:
            raise ValueError(f"Invalid learning rate: {lr}")
        if not 0.0 <= eps:
            raise ValueError(f"Invalid epsilon value: {eps}")
        if not 0.0 <= betas[0] < 1.0:
            raise ValueError(f"Invalid beta parameter at index 0: {betas[0]}")
        if not 0.0 <= betas[1] < 1.0:
            raise ValueError(f"Invalid beta parameter at index 1: {betas[1]}")
        defaults = {
            "lr": lr,
            "betas": betas,
            "eps": eps,
            "weight_decay": weight_decay,
        }
        self.adam = adam
        super(Lamb, self).__init__(params, defaults)

        Args:
            params: iterable of parameters to optimize or dicts
                defining parameter groups
            lr (float, optional): learning rate (default: 1e-3)
            betas (Tuple[float, float], optional): coefficients used for
                computing running averages of gradient
                and its square (default: (0.9, 0.999))
            eps (float, optional): term added to the denominator to improve
                numerical stability (default: 1e-8)
            weight_decay (float, optional): weight decay (L2 penalty)
                (default: 0)
            adam (bool, optional): always use trust ratio = 1, which turns
                this into Adam. Useful for comparison purposes.

        Raises:
            ValueError: if invalid learning rate, epsilon value or betas.
        
catalyst/contrib/optimizers/lamb.py