code: def __call__(self, trainer):
      """Updates the events file with the new values
  
      :param trainer: The trainer
      """
      observation = trainer.observation
      for k, v in observation.items():
          if (self._entries is not None) and (k not in self._entries):
              continue
          if k is not None and v is not None:
              if "cupy" in str(type(v)):
                  v = v.get()
              if "cupy" in str(type(k)):
                  k = k.get()
              self._logger.add_scalar(k, v, trainer.updater.iteration)
      if (
          self._att_reporter is not None
          and trainer.updater.get_iterator("main").epoch > self._epoch
      ):
          self._epoch = trainer.updater.get_iterator("main").epoch
          self._att_reporter.log_attentions(
              self._logger, trainer.updater.iteration
          )
      if (
          self._ctc_reporter is not None
          and trainer.updater.get_iterator("main").epoch > self._epoch
      ):
          self._epoch = trainer.updater.get_iterator("main").epoch
          self._ctc_reporter.log_ctc_probs(
              self._logger, trainer.updater.iteration
          )
  
imports: from chainer.training.extension import Extension
label_desc: Use image node_id 2 for calling the TensorboardLogger obj's underlying member method code with example usage: obj.__call__(trainer) without return types