code: def on_save_checkpoint(
      self,
      trainer: "pl.Trainer",
      pl_module: LightningModule,
      checkpoint: Dict[str, Any],
  ) -> None:
      if self._make_pruning_permanent:
          rank_zero_debug(
              "`ModelPruning.on_save_checkpoint`. Pruning is made permanent for this checkpoint"
          )
          # manually prune the weights so training can keep going with the same buffers
          checkpoint[
              "state_dict"
          ] = self._make_pruning_permanent_on_state_dict(pl_module)
  
imports: import inspect
  import logging
  from copy import deepcopy
  from functools import partial
  from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
  import torch.nn.utils.prune
  from lightning_utilities.core.apply_func import apply_to_collection
  from torch import Tensor, nn
  from typing_extensions import TypedDict, override
  import lightning.pytorch
  from lightning.pytorch.callbacks.callback import Callback
  from lightning.pytorch.core.module import LightningModule
  from lightning.pytorch.utilities.exceptions import MisconfigurationException
  from lightning.pytorch.utilities.rank_zero import rank_zero_debug, rank_zero_only
label_desc: Use image node_id 20 for calling the ModelPruning obj's underlying member method code with example usage: obj.on_save_checkpoint(trainer, pl_module, checkpoint) without return types