class_docstr: 与 :meth:`Trainer.on` 函数配合使用，达到控制 callback 函数运行时机的目的。
  
  :param value: Trainer 的 callback 时机；
  :param every: 每触发多少次才真正运行一次；
  :param once: 只在第多少次触发才真正运行一次。即第 ``once`` 次调用时才运行相应的函数，无论之前还是之后均不会运行；
  :param filter_fn: 输入参数的应该为 ``(filter, trainer)``，其中 ``filter`` 对象中包含了 `filter.num_called` 和
      `filter.num_executed` 两个变量分别获取当前被调用了多少次，真正执行了多少次；``trainer`` 对象即为当前正在运行的 Trainer；
docstr: 当 Trainer 运行到 :func:`on_evaluate_end` 时触发；
  
  以下三个参数互斥，只能设置其中一个。默认为行为等同于 ``every=1`` 。
  
  :param every: 每触发多少次才真正运行一次；
  :param once: 只在第多少次触发才真正运行一次。即第 ``once`` 次调用时才运行相应的函数，无论之前还是之后均不会运行；
  :param filter_fn: 输入参数的应该为 ``(filter, trainer)``，其中 ``filter`` 对象中包含了 `filter.num_called` 和
      `filter.num_executed` 两个变量分别获取当前被调用了多少次，真正执行了多少次；``trainer`` 对象即为当前正在运行的 Trainer；
  :return:
code: def on_evaluate_end(every=None, once=None, filter_fn=None):
      """
      当 Trainer 运行到 :func:`on_evaluate_end` 时触发；
  
      以下三个参数互斥，只能设置其中一个。默认为行为等同于 ``every=1`` 。
  
      :param every: 每触发多少次才真正运行一次；
      :param once: 只在第多少次触发才真正运行一次。即第 ``once`` 次调用时才运行相应的函数，无论之前还是之后均不会运行；
      :param filter_fn: 输入参数的应该为 ``(filter, trainer)``，其中 ``filter`` 对象中包含了 `filter.num_called` 和
          `filter.num_executed` 两个变量分别获取当前被调用了多少次，真正执行了多少次；``trainer`` 对象即为当前正在运行的 Trainer；
      :return:
      """
      return Event(
          value="on_evaluate_end",
          every=every,
          once=once,
          filter_fn=filter_fn,
      )
  
imports: from typing import Optional, Callable, Dict
  from functools import wraps
label_desc: Use image node_id 27 for calling the Event obj's underlying member method code with example usage: obj.on_evaluate_end(every, once, filter_fn) and returns: Event