class_docstr: This class is used to wrap the user optimizers and handle properly the backward and optimizer_step logic across
  accelerators, AMP, accumulate_grad_batches.
  
  Note: The purpose of this wrapper is only to define new methods and redirect the `.step()` call. The internal
  state ``__dict__`` is not kept in sync with the internal state of the original optimizer, but the Trainer never
  relies on the internal state of the wrapper.
code: def __getattr__(self, item: Any) -> Any:
      return getattr(self._optimizer, item)
  
imports: from contextlib import contextmanager
  from dataclasses import fields
  from typing import Any, Callable, Dict, Generator, List, Optional, Tuple, Union, overload
  from weakref import proxy
  import torch
  from torch import optim
  from torch.optim import Optimizer
  from typing_extensions import override
  import lightning.pytorch
  from lightning.fabric.utilities.types import Optimizable, ReduceLROnPlateau, _Stateful
  from lightning.pytorch.utilities.exceptions import MisconfigurationException
  from lightning.pytorch.utilities.model_helpers import is_overridden
  from lightning.pytorch.utilities.rank_zero import rank_zero_warn
  from lightning.pytorch.utilities.signature_utils import is_param_in_hook_signature
  from lightning.pytorch.utilities.types import LRSchedulerConfig, LRSchedulerTypeTuple
label_desc: Use image node_id 6 for calling the LightningOptimizer obj's underlying member method code with example usage: obj.__getattr__(item) and returns: getattr