code: def evaluate(self, i):
      # Callback on start
      v_list = [0.0] * len(self.vroot)
      for v, callback in zip(v_list, self.callback_on_start):
          callback(i, v / self.val_iter)
      # Evaluation loop
      for _ in range(self.val_iter):
          # feed data
          self.data_feeder()
          # forwards
          for j, e in enumerate(zip(v_list, self.vroot)):
              v, vroot = e
              vroot.forward(clear_buffer=self.clear_buffer)
              v_list[j] += vroot.d  # accumulate
      # Callback on finish
      for v, callback in zip(v_list, self.callback_on_finish):
          callback(i, v / self.val_iter)
  
label_desc: Use image node_id 3 for calling the Evaluator obj's underlying member method code with example usage: obj.evaluate(i) without return types