code: def test_scheduler_warmup_decay_match(self):
      decay_config = self._get_valid_decay_config()
      decay_scheduler = CosineParamScheduler.from_config(decay_config)
  
      warmup_config = copy.deepcopy(decay_config)
      # Swap start and end lr to change to warmup
      tmp = warmup_config["start_value"]
      warmup_config["start_value"] = warmup_config["end_value"]
      warmup_config["end_value"] = tmp
      warmup_scheduler = CosineParamScheduler.from_config(warmup_config)
  
      decay_schedule = [
          round(decay_scheduler(epoch_num / 1000), 8)
          for epoch_num in range(1, 1000)
      ]
      warmup_schedule = [
          round(warmup_scheduler(epoch_num / 1000), 8)
          for epoch_num in range(1, 1000)
      ]
  
      self.assertEqual(decay_schedule, list(reversed(warmup_schedule)))
  
file_path: ClassyVision/test/optim_param_scheduler_cosine_test.py
imports: import copy
  import unittest
  from classy_vision.optim.param_scheduler import build_param_scheduler, CosineParamScheduler
label_desc: Use image node_id 6 for calling the TestCosineScheduler obj's underlying member method code with example usage: obj.test_scheduler_warmup_decay_match() without return types