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 state_dict(self) -> Dict[str, Any]:
      return {
          "last_val": self.last_val.item()
          if isinstance(self.last_val, torch.Tensor)
          else self.last_val,
          "mode": self.mode,
          "warmup": self.warmup,
          "atol": self.atol,
          "rtol": self.rtol,
          "bad_batches": self.bad_batches,
          "bad_batches_path": self.exclude_batches_path,
          "running": self.running_mean.state_dict(),
          "mean": self.running_mean.base_metric.state_dict(),
      }
  
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 9 for calling the SpikeDetection obj's underlying member method code with example usage: obj.state_dict() and returns: dict