code: def _test_scheduler_value(
      self, schedulers, targets, epochs=10, param_name="lr"
  ):
      if isinstance(schedulers, _ParamScheduler):
          schedulers = [schedulers]
      for epoch in range(epochs):
          for param_group, target in zip(
              self.optimizer.param_groups, targets
          ):
              print(param_group[param_name])
              assert_allclose(
                  target[epoch],
                  param_group[param_name],
                  msg="{} is wrong in epoch {}: expected {}, got {}".format(
                      param_name,
                      epoch,
                      target[epoch],
                      param_group[param_name],
                  ),
                  atol=1e-5,
                  rtol=0,
              )
          [scheduler.step() for scheduler in schedulers]
  
file_path: mmdetection/tests/test_engine/test_schedulers/test_quadratic_warmup.py
imports: from unittest import TestCase
  import torch
  import torch.nn.functional
  import torch.optim
  from mmengine.optim.scheduler import _ParamScheduler
  from mmengine.testing import assert_allclose
  from mmdet.engine.schedulers import QuadraticWarmupLR, QuadraticWarmupMomentum, QuadraticWarmupParamScheduler
label_desc: Use image node_id 2 for calling the TestQuadraticWarmupScheduler obj's underlying member method code with example usage: obj._test_scheduler_value(schedulers, targets, epochs, param_name) without return types