
https://pytorch-lightning.readthedocs.io/en/stable/extensions/callbacks.html

on_configure_sharded_model(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_before_accelerator_backend_setup(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_init_start(self, trainer: "pl.Trainer") -> None:
on_init_end(self, trainer: "pl.Trainer") -> None:
on_fit_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_fit_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_sanity_check_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_sanity_check_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

on_train_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", batch: Any, batch_idx: int, dataloader_idx: int) -> None:
on_train_batch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", outputs: STEP_OUTPUT, batch: Any, batch_idx: int, dataloader_idx: int,) -> None:
on_train_epoch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_train_epoch_end( self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", unused: Optional = None) -> None:

on_validation_epoch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_validation_epoch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_test_epoch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

on_test_epoch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_predict_epoch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_predict_epoch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", outputs: List[Any]) -> None:

on_epoch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_epoch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

on_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_validation_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", batch: Any, batch_idx: int, dataloader_idx: int) -> None:
on_validation_batch_end( self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", outputs: Optional[STEP_OUTPUT], batch: Any, batch_idx: int, dataloader_idx: int,) -> None:
on_test_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", batch: Any, batch_idx: int, dataloader_idx: int) -> None:
on_test_batch_end( self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", outputs: Optional[STEP_OUTPUT], batch: Any, batch_idx: int, dataloader_idx: int,) -> None:
on_predict_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", batch: Any, batch_idx: int, dataloader_idx: int) -> None:
on_predict_batchend(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", outputs: Any, batch: Any, batch_idx: int, dataloader_idx: int,) -> None:
on_batch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

on_train_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_train_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

on_before_backward(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", loss: torch.Tensor) -> None:
on_after_backward(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_before_optimizer_step(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", optimizer: Optimizer, opt_idx: int) -> None:
on_before_zero_grad(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", optimizer: Optimizer) -> None:

on_pretrain_routine_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_pretrain_routine_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_validation_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_validation_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_test_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_test_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_predict_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:
on_predict_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

on_exception(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None:

# REMOVED in 1.6 in favor of state_dict and  load_state_dict
# https://github.com/PyTorchLightning/pytorch-lightning/releases/tag/1.6.0
on_save_checkpoint(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", checkpoint: Dict[str, Any]) -> dict:
on_load_checkpoint(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", callback_state: Dict[str, Any]) -> None:

setup(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", stage: Optional[str] = None) -> None:
teardown(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", stage: Optional[str] = None) -> None:

