code: def update(
      self,
      step: int,
      param: Tensor,
      grad: Tensor,
      exp_avg: Tensor,
      exp_avg_sq: Tensor,
  ):
      bias_correction1 = 1 - self.beta1**step
      bias_correction2 = 1 - self.beta2**step
  
      if self.weight_decay != 0:
          if self.use_adamw:
              # Perform stepweight decay
              param.mul_(1 - self.lr * self.weight_decay)
          else:
              grad = grad.add(param, alpha=self.weight_decay)
  
      # Decay the first and second moment running average coefficient
      exp_avg.mul_(self.beta1).add_(grad, alpha=1 - self.beta1)
      exp_avg_sq.mul_(self.beta2).addcmul_(
          grad, grad, value=1 - self.beta2
      )
      denom = (exp_avg_sq.sqrt() / math.sqrt(bias_correction2)).add_(
          self.eps
      )
  
      step_size = self.lr / bias_correction1
  
      param.addcdiv_(exp_avg, denom, value=-step_size)
  
imports: import math
  from abc import abstractmethod
  from typing import Type
  import pytest
  import torch
  from torch import Tensor
  from colossalai.utils import get_current_device, multi_tensor_applier
label_desc: Use image node_id 1 for calling the TorchAdamKernel obj's underlying member method code with example usage: obj.update(step, param, grad, exp_avg, exp_avg_sq) without return types