code: def test_trainer_on(
      model_and_optimizers: TrainerParameters,
      driver,
      device,
      n_epochs=2,
  ):
      from fastNLP import Event
  
      @Trainer.on(Event.on_before_backward())
      def before_backend(trainer, outputs):
          pass
  
      @Trainer.on(Event.on_before_backward())
      def before_backend_2(*args):
          pass
  
      trainer = Trainer(
          model=model_and_optimizers.model,
          driver=driver,
          device=device,
          optimizers=model_and_optimizers.optimizers,
          train_dataloader=model_and_optimizers.train_dataloader,
          evaluate_dataloaders={
              "dl": model_and_optimizers.evaluate_dataloaders
          },
          input_mapping=model_and_optimizers.input_mapping,
          output_mapping=model_and_optimizers.output_mapping,
          metrics=model_and_optimizers.metrics,
          n_epochs=n_epochs,
          output_from_new_proc="all",
          evaluate_every=-1,
      )
  
      trainer.run()
  
imports: import pytest
  from dataclasses import dataclass
  from typing import Any
  from fastNLP.core.controllers.trainer import Trainer
  from fastNLP.core.samplers import BucketedBatchSampler, RandomSampler
  from tests.helpers.models.torch_model import TorchNormalModel_Classification_1
  from tests.helpers.datasets.torch_data import TorchNormalDataset_Classification, TorchArgMaxDataset
  from tests.helpers.callbacks.helper_callbacks import RecordLossCallback, RecordMetricCallback
  from tests.helpers.utils import magic_argv_env_context
  from fastNLP.envs.imports import _NEED_IMPORT_TORCH
label_desc: Use image node_id 5 for calling a global function with example usage: test_trainer_on(model_and_optimizers, driver, device, n_epochs) without return types