          - `R` (refresh preview),
          - `S` (save now)
          - `Enter` (save and exit)
  
          Parameters
          ----------
          event:
              The key press received
          """
          key = event.key.lower()
          if key not in self._callbacks:
              return
  
          logger.debug("Preview window keypress '%s' received", key)
          if key == "r":
              print("\n")  # Let log print on different line from loss output
 
</s> remove 
        logger.debug("Preview window keypress '%s' received", key)
        if key == "r":
            print("\n")  # Let log print on different line from loss output
            logger.info("Refresh preview requested...")

        with self._lock:
            if key == "f":
                self._toggle_size()
            else:
                self._triggers[self._callbacks[key]] = True

    def _on_resize(self,
                   event: backend_bases.ResizeEvent) -> None:  # noqa # pylint:disable=unused-argument
        """ If the display is set to `actual size` then the image needs to be resized on any window
        resize event. """
        for fig, size in self._images.values():
            fig.set_size_inches(size)

    def _on_close(self,
                   event: backend_bases.CloseEvent) -> None:  # noqa # pylint:disable=unused-argument
        """ Force an update when the figure has been closed to relaunch it. """
        logger.debug("Preview close detected")
        with self._lock:
            self._needs_update = True
 </s> add         logger.debug("Sending shutdown to preview viewer")
        self._triggers["shutdown"].set() </s> remove         logger.debug("Creating figure '%s' for image shape %s", name, image_shape)
        if not self._dpi:
            self._dpi = get_dpi()
        height, width = image_shape[:2]
        size = width / self._dpi, height / self._dpi
        fig = plt.figure(name, figsize=size)
        axes = plt.Axes(fig, [0., 0., 1., 1.])  # Remove axes and whitespace
        axes.set_axis_off()
        fig.add_axes(axes)
        fig.canvas.mpl_connect("key_press_event", self._on_key_press)
        fig.canvas.mpl_connect("close_event", self._on_close)
        logger.debug("Created display figure of size: %s", size)
        self._images[name] = (fig, size)

    def _set_resize_callback(self):
        """ Sets the resize callback if displaying preview at actual size or removes it if
        displaying at screen-fit size. """
        if self._triggers["full_size"]:
            logger.debug("Setting resize callback for actual size display")
            for fig, size in self._images.values():
                self._resize_ids.append((fig, fig.canvas.mpl_connect("resize_event",
                                                                     self._on_resize)))
                fig.set_size_inches(size)
        else:
            logger.debug("Removing resize callback for screen-fit display")
            for fig, cid in self._resize_ids:
                fig.canvas.mpl_disconnect(cid)
            self._resize_ids = []

    def _on_key_press(self, event: backend_bases.KeyEvent) -> None:
        """ Callbacks for keypresses to update the requested trigger.

        - `F` (toggle full-size/fit to window)
        - `M` (toggle mask),
        - `R` (refresh preview),
        - `S` (save now)
        - `Enter` (save and exit)
 </s> add         if not self._active:
            return None
        thread = FSThread(target=Preview,
                          name="preview",
                          args=(self._buffer, ),
                          kwargs=dict(triggers=self._triggers))
        thread.start()
        return thread </s> remove                 if trigger == "update":
                    print("\n")  # Let log print on different line from loss output
 </s> add                 if trigger == "refresh":
                    print("")  # Let log print on different line from loss output </s> remove                 getattr(self._preview, parent_flags[trigger])()
 </s> add         return retval </s> remove 
 </s> add                 retval[trigger] = True
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
          - `R` (refresh preview),
          - `S` (save now)
          - `Enter` (save and exit)
  
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
    def shutdown(self) -> None:
        """ Send a signal to shutdown the preview window. """
        if not self._active:
              return
  
          logger.debug("Preview window keypress '%s' received", key)
          if key == "r":
              print("\n")  # Let log print on different line from loss output
keep keep keep keep replace replace replace replace replace replace replace keep keep keep keep keep
 Training - Use custom preview pop-out 
scripts/train.py