class_docstr: Spike Detection Callback.
  
  Terminates training with a ``TrainingSpikeException`` when a loss-spike was detected and
  saves the batches to skip when resuming to a file.
  
  We skip the current and the previous batch since it is unclear whether the previous batch
  altered the weights in a way that it causes the spike or just the current batch is corrupted somehow.
  
  Args:
      mode: Whether to minimize or maximize the tracked metric
      window: A running mean of metrics with ``window`` size. Serves as reference value for spikes.
      warmup: After how many batches spike-tracking should start
      atol: An absolute tolerance.  Every diff between the running mean and the current value,
          that's not an improvement and above ``atol`` will be considered a spike
      rtol: A relative tolerance. Every diff between the running mean and the current value,
          that's higher than ``rtol * running_mean`` is considered a spike
      exclude_batches_path: Where to save the file that contains the batches to exclude.
          Will default to current directory.
      finite_only: If set to ``False``, consider non-finite values like NaN, inf and -inf a spike as well.
code: def _handle_spike(self, fabric: "Fabric", batch_idx: int) -> None:
      # Exclude current and last batch
      # Current batch is excluded since it could be that the data of this batch produces a high loss
      # Last batch is excluded since the previous batch could have "corrupted" the weights
      self.bad_batches.extend([batch_idx - 1, batch_idx])
  
      if fabric.global_rank == 0:
          assert self.exclude_batches_path is not None
          os.makedirs(
              os.path.dirname(self.exclude_batches_path), exist_ok=True
          )
  
          with open(self.exclude_batches_path, "w") as f:
              json.dump(self.bad_batches, f, indent=4)
  
      raise TrainingSpikeException(batch_idx=batch_idx)
  
imports: import json
  import operator
  import os
  import warnings
  from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Union
  import torch
  from lightning_utilities.core.imports import compare_version
  from lightning.fabric.utilities.types import _PATH
label_desc: Use image node_id 4 for calling the SpikeDetection obj's underlying member method code with example usage: obj._handle_spike(fabric, batch_idx) without return types