code: def generate_stats_html(self):
      # Need this because the model may not necessarily be
      # initialized when this code is called.
      if not self._read_only():
          return "Chooser not yet ready to display output"
  
      mean_mean = np.mean(np.vstack([h[0] for h in self.hyper_samples]))
      mean_noise = np.mean(
          np.vstack([h[1] for h in self.hyper_samples])
      )
      mean_ls = np.mean(
          np.vstack([h[3][np.newaxis, :] for h in self.hyper_samples]),
          0,
      )
  
      try:
          output = (
              '<br /><span class="label label-info">Estimated mean:</span> '
              + str(mean_mean)
              + '<br /><span class="label label-info">Estimated noise:</span> '
              + str(mean_noise)
              + '<br /><br /><span class="label label-info">Inverse parameter sensitivity'
              + " - Gaussian Process length scales</span><br /><br />"
              + '<div id="lschart"></div><script type="text/javascript">'
              + "var lsdata = ["
              + ",".join(["%.2f" % i for i in mean_ls])
              + "];"
          )
      except:
          return "Chooser not yet ready to display output."
  
      output += (
          'bar_chart("#lschart", lsdata, '
          + str(self.max_ls)
          + ");"
          + "</script>"
      )
      return output
  
imports: import os
  from ..None import gp
  import sys
  from ..None import util
  import tempfile
  import pickle
  import copy
  import numpy
  import numpy.random
  import scipy.linalg
  import scipy.stats
  import scipy.optimize
  import multiprocessing
  from ..helpers import *
  from ..Locker import *
  import logging
label_desc: Use image node_id 3 for calling the GPEIOptChooser obj's underlying member method code with example usage: obj.generate_stats_html() and returns: output, str, str