code: def __call__(
      self,
      value,
      name: str = None,
      step: int = None,
      epoch: int = None,
      *,
      context: AimObject = None,
  ):
      assert not self.read_only
      # since worker might be lagging behind, we want to log the timestamp of run.track() call,
      # not the actual implementation execution time.
      track_time = datetime.datetime.now(pytz.utc).timestamp()
  
      if self._non_blocking:
          val = deepcopy(value)
          self.repo.tracking_queue.register_task(
              self._track,
              val,
              track_time,
              name,
              step,
              epoch,
              context=context,
          ) or self.track_rate_warn()
      else:
          self._track(
              value, track_time, name, step, epoch, context=context
          )
  
imports: import datetime
  import os
  import logging
  from collections import defaultdict
  from copy import deepcopy
  from typing import Dict, Tuple, TYPE_CHECKING
  import pytz
  from aim.sdk.configs import AIM_ENABLE_TRACKING_THREAD
  from aim.sdk.num_utils import is_number, convert_to_py_number
  from aim.sdk.utils import get_object_typename, check_types_compatibility
  from aim.storage.hashing import hash_auto
  from aim.storage.context import Context
  from aim.storage.object import CustomObject
  from aim.storage.types import AimObject
label_desc: Use image node_id 4 for calling the RunTracker obj's underlying member method code with example usage: obj.__call__(value, name, step, epoch) without return types