          logger.debug("model_dir: '%s'", model_dir)
          model_name = self._get_model_name(model_dir, state_file)
          if not model_name:
              return
          self._session = Session(model_dir=model_dir, model_name=model_name)
          self._session.initialize_session(is_training=False)
          msg = full_path
          if len(msg) > 70:
              msg = "...{}".format(msg[-70:])
          self._set_session_summary(msg)
  
 
</s> remove         if session.logging_disabled:
 </s> add         if Session.logging_disabled: </s> remove         msg = "Currently running training session"
        self._session = session
        # Reload the state file to get approx currently training iterations
        self._session.load_state_file()
        self._set_session_summary(msg)
 </s> add         self._clear_session()
        self._set_session_summary("Currently running training session") </s> remove                 if self.args["flatten_outliers"]:
                    loss = self.flatten_outliers(loss)
                iterations.add(len(loss))
                raw["raw_{}".format(loss_name)] = loss
 </s> add                 iterations.add(loss.shape[0])

                if self._limit > 0:
                    loss = loss[-self._limit:]

                if self._args["flatten_outliers"]:
                    loss = self._flatten_outliers(loss)

                self.stats["raw_{}".format(loss_name)] = loss

            self._iterations = 0 if not iterations else min(iterations)
            if self._limit > 1:
                self._start_iteration = max(0, self._iterations - self._limit)
                self._iterations = min(self._iterations, self._limit)
            else:
                self._start_iteration = 0 </s> remove         selected_id = self.selected_id.get()
 </s> add         selected_id = self._selected_id.get()
        model_dir, model_name = os.path.split(Session.model_filename) </s> remove     def load_state_file(self):
        """ Load the current state file """
        state_file = os.path.join(self.modeldir, "{}_state.json".format(self.modelname))
        logger.debug("Loading State: '%s'", state_file)
        self.state = self.serializer.load(state_file)
        logger.debug("Loaded state: %s", self.state)
 </s> add             self._time_stats[session_id] = dict(
                start_time=np.min(latest) if np.any(latest) else 0,
                end_time=np.max(latest) if np.any(latest) else 0,
                iterations=latest.shape[0] if np.any(latest) else 0)
        Session.initialize_session(model_dir, model_name, is_training=False)
          logger.debug("model_dir: '%s'", model_dir)
          model_name = self._get_model_name(model_dir, state_file)
          if not model_name:
              return
        Session.initialize_session(model_dir, model_name, is_training=False)
        Session.initialize_session(model_dir, model_name, is_training=False)
          msg = full_path
          if len(msg) > 70:
              msg = "...{}".format(msg[-70:])
          self._set_session_summary(msg)
  
keep keep keep keep replace replace keep keep keep keep keep
 GUI - Stats optimization (#1067)

* Faster stat loading + caching

* Compress data in cache

* Optimize some calculations

* Vectorize smoothing

* stats.Calculations optimized

* Load latest training data from live iterator

* Add options to training graph 
lib/gui/display_analysis.py