code: def test_training(self):
      without = lr_scheduler_training()
      sched_fns = [
          MultiStepLR,
          ReduceLROnPlateau,
          CosineAnnealingLR,
          OneCycleLR,
      ]
      argss = [
          {"milestones": [5, 7, 10, 15], "gamma": 0.5},
          {"factor": 0.5, "patience": 2},
          {"T_max": 25, "eta_min": 0.001},
          {
              "pct_start": 0.3,
              "anneal_strategy": "linear",
              "cycle_momentum": False,
              "div_factor": 25.0,
              "final_div_factor": 10000.0,
              "max_lr": 1e-5,
              "total_steps": 25,
          },
      ]
      for sched_fn, args in zip(sched_fns, argss):
          with_sched = lr_scheduler_training(sched_fn, args)
          assert with_sched > without
  
imports: import numpy
  import torch
  import unittest
  from tinygrad.tensor import Tensor
  from tinygrad.nn.state import get_parameters
  from tinygrad.nn.optim import Adam
  from extra.lr_scheduler import MultiStepLR, ReduceLROnPlateau, CosineAnnealingLR, OneCycleLR
  from extra.training import train, evaluate
  from extra.datasets import fetch_mnist
label_desc: Use image node_id 17 for calling the TestLrScheduler obj's underlying member method code with example usage: obj.test_training() without return types