class_docstr: Performs automatic optimization (forward, zero grad, backward, optimizer step)
docstr: Build a `backward` function that handles back-propagation through the output produced by the `training_step`
  function.
  
  Returns ``None`` in the case backward needs to be skipped.
code: def _make_backward_fn(
      self, optimizer: Optimizer
  ) -> Optional[Callable[[Tensor], None]]:
      """Build a `backward` function that handles back-propagation through the output produced by the `training_step`
      function.
  
      Returns ``None`` in the case backward needs to be skipped.
  
      """
      if self._skip_backward:
          return None
  
      def backward_fn(loss: Tensor) -> None:
          call._call_strategy_hook(
              self.trainer, "backward", loss, optimizer
          )
  
      return backward_fn
  
imports: from dataclasses import dataclass, field
  from functools import partial
  from typing import Any, Callable, Dict, Mapping, Optional, OrderedDict
  import torch
  from torch import Tensor
  from torch.optim import Optimizer
  from typing_extensions import override
  import lightning.pytorch
  from lightning.pytorch.loops.loop import _Loop
  from lightning.pytorch.loops.optimization.closure import AbstractClosure, OutputResult
  from lightning.pytorch.loops.progress import _OptimizationProgress
  from lightning.pytorch.loops.utilities import _block_parallel_sync_behavior
  from lightning.pytorch.trainer import call
  from lightning.pytorch.utilities.exceptions import MisconfigurationException
  from lightning.pytorch.utilities.rank_zero import WarningCache
  from lightning.pytorch.utilities.types import STEP_OUTPUT
label_desc: Use image node_id 6 for calling the _AutomaticOptimization obj's underlying member method code with example usage: obj._make_backward_fn(optimizer) and returns: backward_fn, None