code: def cal_decay_step(self):
      cfg = self.cfg
      num_image = cfg.num_image
      total_batch_size = cfg.batch_size * self.world_size
      self.warmup_step = (
          num_image // total_batch_size * cfg.warmup_epoch
      )
      self.cfg.total_step = (
          num_image // total_batch_size * cfg.num_epoch
      )
      logging.info("Total Step is:%d" % self.cfg.total_step)
      return [
          x * num_image // total_batch_size for x in cfg.decay_epoch
      ]
  
imports: import oneflow
  from oneflow.nn.parallel import DistributedDataParallel
  from utils.ofrecord_data_utils import OFRecordDataLoader, SyntheticDataLoader
  from utils.utils_logging import AverageMeter
  from utils.utils_callbacks import CallBackVerification, CallBackLogging, CallBackModelCheckpoint
  from backbones import get_model
  from graph import TrainGraph, EvalGraph
  from utils.losses import CrossEntropyLoss_sbp
  import logging
label_desc: Use image node_id 4 for calling the Trainer obj's underlying member method code with example usage: obj.cal_decay_step() and returns: unknown