  
          for column in columns:
              text = column[2] if column[2] else column[0].title()
              logger.debug("Adding heading: '%s'", text)
              self.tree.heading(column[0], text=text)
              self.tree.column(column[0], width=column[1], anchor=tk.E, minwidth=40)
          self.tree.column("#0", width=40)
          self.tree.heading("#0", text="Graphs")
  
          return [column[0] for column in columns]
  
      def tree_insert_data(self, sessions_summary):
          """ Insert the data into the totals tree-view """
 
</s> remove         self.tree["columns"] = [column[0] for column in columns]
 </s> add         self._tree["columns"] = [column[0] for column in columns] </s> remove         """ Insert the data into the totals tree-view """
 </s> add         """ Insert the summary data into the statistics tree-view.

        Parameters
        ----------
        sessions_summary: list
            List of session summary dicts for populating into the tree-view
        """ </s> remove         self.tree.configure(height=len(sessions_summary))
 </s> add         self._tree.configure(height=len(sessions_summary)) </s> remove     def _set_help(cls, btntype):
        """ Set the help text for option buttons """
 </s> add     def _set_help(cls, button_type):
        """ Set the help text for option buttons.

        Parameters
        ----------
        button_type: {"reload", "clear", "save", "load"}
            The type of button to set the help text for
        """ </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)
            self._tree.heading(column[0], text=text)
            self._tree.column(column[0], width=column[1], anchor=tk.E, minwidth=40)
        self._tree.column("#0", width=40)
        self._tree.heading("#0", text="Graphs")
  
          for column in columns:
              text = column[2] if column[2] else column[0].title()
              logger.debug("Adding heading: '%s'", text)
            self._tree.heading(column[0], text=text)
            self._tree.column(column[0], width=column[1], anchor=tk.E, minwidth=40)
        self._tree.column("#0", width=40)
        self._tree.heading("#0", text="Graphs")
            self._tree.heading(column[0], text=text)
            self._tree.column(column[0], width=column[1], anchor=tk.E, minwidth=40)
        self._tree.column("#0", width=40)
        self._tree.heading("#0", text="Graphs")
            self._tree.heading(column[0], text=text)
            self._tree.column(column[0], width=column[1], anchor=tk.E, minwidth=40)
        self._tree.column("#0", width=40)
        self._tree.heading("#0", text="Graphs")
            self._tree.heading(column[0], text=text)
            self._tree.column(column[0], width=column[1], anchor=tk.E, minwidth=40)
        self._tree.column("#0", width=40)
        self._tree.heading("#0", text="Graphs")
  
          return [column[0] for column in columns]
  
      def tree_insert_data(self, sessions_summary):
          """ Insert the data into the totals tree-view """
keep keep keep keep replace replace 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