class_docstr: LR finder object. This object stores the results of lr_find().
  
  Args:
      mode: either `linear` or `exponential`, how to increase lr after each step
  
      lr_min: lr to start search from
  
      lr_max: lr to stop search
  
      num_training: number of steps to take between lr_min and lr_max
  
  Example::
      # Run lr finder
      lr_finder = trainer.lr_find(model)
  
      # Results stored in
      lr_finder.results
  
      # Plot using
      lr_finder.plot()
  
      # Get suggestion
      lr = lr_finder.suggestion()
code: def __init__(
      self, mode: str, lr_min: float, lr_max: float, num_training: int
  ) -> None:
      assert mode in (
          "linear",
          "exponential",
      ), "mode should be either `linear` or `exponential`"
  
      self.mode = mode
      self.lr_min = lr_min
      self.lr_max = lr_max
      self.num_training = num_training
  
      self.results: Dict[str, Any] = {}
      self._total_batch_idx = 0
  
imports: import importlib
  import logging
  import os
  import uuid
  from copy import deepcopy
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union, cast
  import torch
  from lightning_utilities.core.imports import RequirementCache
  from typing_extensions import override
  import lightning.pytorch
  from lightning.fabric.utilities.types import _TORCH_LRSCHEDULER
  from lightning.pytorch.callbacks import Callback
  from lightning.pytorch.utilities.exceptions import MisconfigurationException
  from lightning.pytorch.utilities.parsing import lightning_hasattr, lightning_setattr
  from lightning.pytorch.utilities.rank_zero import rank_zero_warn
  from lightning.pytorch.utilities.types import STEP_OUTPUT, LRScheduler, LRSchedulerConfig
label_desc: Use image node_id 1 to create a new _LRFinder object  with example: obj = _LRFinder(mode, lr_min, lr_max, num_training)