          display = self.vars["display"].get().lower()
          logger.debug("Validating selection. (loss_keys: %s, selections: %s, display: %s)",
                       loss_keys, selections, display)
          if not selections or (display == "loss" and not loss_keys):
              msg = "No data to display. Not refreshing"
              logger.debug(msg)
              print(msg)
              return False
          return True
  
      def selections_to_list(self):
          """ Compile checkbox selections to list """
 
</s> remove             if region == "tree":
                self.data_popup()
 </s> add             if region == "tree" and self.check_valid_data(values):
                datapoints = int(values[self.columns.index("iterations")])
                self.data_popup(datapoints)

    def check_valid_data(self, values):
        """ Check there is valid data available for popping up a graph """
        col_indices = [self.columns.index("batch"), self.columns.index("iterations")]
        for idx in col_indices:
            if (isinstance(values[idx], int) or values[idx].isdigit()) and int(values[idx]) == 0:
                logger.warning("No data to graph for selected session")
                return False
        return True

    def data_popup(self, datapoints):
        """ Pop up a window and control it's position </s> remove     logger.debug("Initializing config: (cli_opts: %s, tk_vars: %s, pathcache: %s, statusbar: %s, "
                 "session: %s)", cli_opts, scaling_factor, pathcache, statusbar, session)
    _CONFIG = Config(cli_opts, scaling_factor, pathcache, statusbar, session)
 </s> add     logger.debug("Initializing config: (root: %s, cli_opts: %s, tk_vars: %s, pathcache: %s, "
                 "statusbar: %s, session: %s)", root, cli_opts, scaling_factor, pathcache,
                 statusbar, session)
    _CONFIG = Config(root, cli_opts, scaling_factor, pathcache, statusbar, session) </s> remove def initialize_config(cli_opts, scaling_factor, pathcache, statusbar, session):
 </s> add def initialize_config(root, cli_opts, scaling_factor, pathcache, statusbar, session):
            return False
        return True

    def check_valid_data(self):
        """ Check that the selections holds valid data to display
            NB: len-as-condition is used as data could be a list or a numpy array
        """
        logger.debug("Validating data. %s",
                     {key: len(val) for key, val in self.display_data.stats.items()})
        if any(len(val) == 0  # pylint:disable=len-as-condition
               for val in self.display_data.stats.values()):
          display = self.vars["display"].get().lower()
          logger.debug("Validating selection. (loss_keys: %s, selections: %s, display: %s)",
                       loss_keys, selections, display)
          if not selections or (display == "loss" and not loss_keys):
            return False
        return True

    def check_valid_data(self):
        """ Check that the selections holds valid data to display
            NB: len-as-condition is used as data could be a list or a numpy array
        """
        logger.debug("Validating data. %s",
                     {key: len(val) for key, val in self.display_data.stats.items()})
        if any(len(val) == 0  # pylint:disable=len-as-condition
               for val in self.display_data.stats.values()):
            return False
        return True

    def check_valid_data(self):
        """ Check that the selections holds valid data to display
            NB: len-as-condition is used as data could be a list or a numpy array
        """
        logger.debug("Validating data. %s",
                     {key: len(val) for key, val in self.display_data.stats.items()})
        if any(len(val) == 0  # pylint:disable=len-as-condition
               for val in self.display_data.stats.values()):
            return False
        return True

    def check_valid_data(self):
        """ Check that the selections holds valid data to display
            NB: len-as-condition is used as data could be a list or a numpy array
        """
        logger.debug("Validating data. %s",
                     {key: len(val) for key, val in self.display_data.stats.items()})
        if any(len(val) == 0  # pylint:disable=len-as-condition
               for val in self.display_data.stats.values()):
              return False
          return True
  
      def selections_to_list(self):
          """ Compile checkbox selections to list """
keep keep keep keep replace replace replace keep keep keep keep keep
 GUI Fixups

- Analysis: Handle missing session Ids
- Analysis: Handle invalid data selections
- Analysis: Don't update graph on check box selection
- Analysis: Add cursor events to analysis tab
- Analysis: Change default graph view
- Training: Prevent GUI from attempting to close graphs which do not exist
- Extract/Convert: Make file extensions case-insensitive for preview
- Progress bar: Make compatible for downloads
- Progress bar: Add TQDM Description to progress bar stats text 
lib/gui/display_analysis.py