  
          Parameters
          ----------
          is_exit: bool, optional
              ``True`` if the save request has come from an exit process request otherwise ``False``
              Default: ``False``
  
          Notes
          -----
          The backup function actually backups the model from the previous save iteration rather than
 
</s> remove     def save(self, is_exit: bool = False) -> None:
 </s> add     def save(self, is_exit: bool = False, force_save_optimizer: bool = False) -> None: </s> remove         msg = "[Saved models]"
 </s> add         msg = "[Saved optimizer state for Snapshot]" if force_save_optimizer else "[Saved models]" </s> remove         include_optimizer = self._save_optimizer == "always" or (self._save_optimizer == "exit"
                                                                 and is_exit)
 </s> add         include_optimizer = (force_save_optimizer or
                             self._save_optimizer == "always" or
                             (self._save_optimizer == "exit" and is_exit))

            ``True`` if the save request has come from an exit process request otherwise ``False``.
  
          Parameters
          ----------
          is_exit: bool, optional
            ``True`` if the save request has come from an exit process request otherwise ``False``.
              Default: ``False``
  
          Notes
          -----
          The backup function actually backups the model from the previous save iteration rather than
keep keep keep keep replace keep keep keep keep keep
 Force saving optimizer weights on snapshot 
plugins/train/model/_base/io.py