code: def log(self):
      if self.is_silent:
          return []
  
      if self._state == "none":
          return []
  
      parts = [(f"{self._name}:", None)]
      color = None
  
      if not self.is_successful:
          color = logger.Text.danger
  
      if self._progress == 0.0:
          parts.append(("  ...", logger.Text.subtle))
      else:
          parts.append(
              (
                  f"{math.floor(self._progress * 100) :4.0f}%",
                  color or logger.Text.subtle,
              )
          )
  
      if self._is_timed:
          duration_ms = 1000 * self._calc_estimated_time()
          s = f" {duration_ms:,.0f}ms  "
          tl = len(s)
          if tl > self._time_length:
              self._time_length = tl
          else:
              s = (" " * (self._time_length - tl)) + s
  
          parts.append((s, color or logger.Text.meta))
  
      return parts
  
imports: import math
  import time
  from typing import TYPE_CHECKING, List
  from labml import logger
  from ..tracker import tracker_singleton
label_desc: Use image node_id 6 for calling the LoopingSection obj's underlying member method code with example usage: obj.log() and returns: parts, list, list