code: def test_param_scheduler_epoch(self):
      task = self._build_task(num_epochs=3)
  
      where_list = []
  
      class SchedulerMock(ClassyParamScheduler):
          def __call__(self, where):
              where_list.append(where)
              return 0.1
  
      mock = SchedulerMock(UpdateInterval.EPOCH)
      task.set_optimizer_schedulers({"lr": mock})
  
      trainer = LocalTrainer()
      trainer.train(task)
  
      self.assertEqual(where_list, [0, 1 / 3, 2 / 3])
  
imports: import unittest
  from unittest.mock import Mock
  from classy_vision.dataset import build_dataset
  from classy_vision.hooks import ClassyHook
  from classy_vision.losses import build_loss
  from classy_vision.models import build_model
  from classy_vision.optim import build_optimizer, build_optimizer_schedulers
  from classy_vision.optim.param_scheduler import ClassyParamScheduler, register_param_scheduler, UpdateInterval
  from classy_vision.tasks import ClassificationTask, ClassyTask
  from classy_vision.trainer import LocalTrainer
label_desc: Use image node_id 4 for calling the TestParamSchedulerIntegration obj's underlying member method code with example usage: obj.test_param_scheduler_epoch() and returns: int