code: def _test_lr_scheduler(
      self, tinygrad_sched, torch_sched, epochs, opts, atol, rtol
  ):
      accs = opts.pop("accs", None)
      test_tensor = Tensor(
          [0], requires_grad=True
      )  # NOTE: optimizers are broken on 0-dim tensors because it broadcasts to [lr]
      test_tensor.mean().backward()
      tinygrad_optim, torch_optim = Adam(
          [test_tensor], lr=0.01
      ), torch.optim.Adam(
          [torch.tensor([0.0], requires_grad=True)], lr=0.01
      )
      tinygrad_sched, torch_sched = tinygrad_sched(
          tinygrad_optim, **opts
      ), torch_sched(torch_optim, **opts)
  
      tinygrad_lrs = get_lrs(
          tinygrad_optim, tinygrad_sched, epochs, accs=accs
      )
      torch_lrs = get_lrs(torch_optim, torch_sched, epochs, accs=accs)
  
      np.testing.assert_allclose(
          tinygrad_lrs, torch_lrs, atol=atol, rtol=rtol
      )
  
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 1 for calling the TestLrScheduler obj's underlying member method code with example usage: obj._test_lr_scheduler(tinygrad_sched, torch_sched, epochs, opts, atol, rtol) without return types