def param_groups(self):
        """Emulate 'param_groups' of torch.optim.Optimizer.
        Different from that, the returned 'param_groups' doesn't contain
        parameters because getting the whole embedding is very expensive.
        It contains other attributes, e.g., lr, betas, eps, for debugging.
        """
        return [
            {
                "lr": self._lr,
                "betas": (self._beta1, self._beta2),
                "eps": self._eps,
            }
        ]
Emulate 'param_groups' of torch.optim.Optimizer.
        Different from that, the returned 'param_groups' doesn't contain
        parameters because getting the whole embedding is very expensive.
        It contains other attributes, e.g., lr, betas, eps, for debugging.
        
python/dgl/optim/pytorch/sparse_optim.py