def METHOD_NAME(self, closure=None):
    """Performs a single optimization step.
    Arguments:
        closure (callable, optional): A closure that reevaluates the model
            and returns the loss.
    """
    loss = None
    if closure is not None:
        loss = closure()
    for group in self.param_groups:
        # create lists for multi-tensor apply
        g_16, p_16, h_16 = [], [], []
        g_32, p_32, h_32 = [], [], []
        for p in group['params']:
            if p.grad is None:
                continue
            if p.grad.data.is_sparse:
                raise RuntimeError('FusedAdagrad does not support sparse gradients')
            state = self.state[p]
            # State initialization
            if len(state) == 0:
                # Exponential moving average of gradient values
                state['sum'] = torch.zeros_like(p.data)
            if p.dtype == torch.float16:
                g_16.append(p.grad.data)
                p_16.append(p.data)
                h_16.append(state['sum'])
            elif p.dtype == torch.float32:
                g_32.append(p.grad.data)
                p_32.append(p.data)
                h_32.append(state['sum'])
            else:
                raise RuntimeError('FusedAdagrad only support fp16 and fp32.')
        if(len(g_16) > 0):
            multi_tensor_applier(self.multi_tensor_adagrad,
                                 self._dummy_overflow_buf,
                                 [g_16, p_16, h_16],
                                 group['lr'],
                                 group['eps'],
                                 self.adagrad_w_mode,
                                 group['weight_decay'])
        if(len(g_32) > 0):
            multi_tensor_applier(self.multi_tensor_adagrad,
                                 self._dummy_overflow_buf,
                                 [g_32, p_32, h_32],
                                 group['lr'],
                                 group['eps'],
                                 self.adagrad_w_mode,
                                 group['weight_decay'])
    return los