code: def metric_griffiths_2004(logliks):
      
  
      import gmpy2
  
      # using median trick as in Martin Ponweiser's Diploma Thesis 2012, p.36
      ll_med = np.median(logliks)
      ps = [gmpy2.exp(ll_med - x) for x in logliks]
      ps_mean = gmpy2.mpfr(0)
      for p in ps:
          ps_mean += p / len(ps)
      return float(ll_med - gmpy2.log(ps_mean))   # after taking the log() we can use a Python float() again
docs: Thomas L. Griffiths and Mark Steyvers. 2004. Finding scientific topics. Proceedings of the National Academy
      of Sciences 101, suppl 1: 5228–5235. http://doi.org/10.1073/pnas.0307752101
  
      Calculates the harmonic mean of the loglikelihood values `logliks` as in Griffiths, Steyvers 2004. Burnin values
      should already be removed from `logliks`.
  
      Note: requires gmpy2 package for multiple-precision arithmetic to avoid numerical underflow.
            see https://github.com/aleaxit/gmpy