docs: def EXPGauss(w_F, compute_uncertainty=True, is_timeseries=False):
      """Estimate free energy difference using gaussian approximation to one-sided (unidirectional) exponential averaging.
  
      Parameters
      ----------
      w_F : np.ndarray, float
          w_F[t] is the forward work value from snapshot t.  t = 0...(T-1)  Length T is deduced from vector.
      compute_uncertainty : bool, optional, default=True
          if False, will disable computation of the statistical uncertainty (default: True)
      is_timeseries : bool, default=False
          if True, correlation in data is corrected for by estimation of statisitcal inefficiency (default: False)
          Use this option if you are providing correlated timeseries data and have not subsampled the data to produce uncorrelated samples.
  
      Returns
      -------
      result_vals : dictionary
      
      Possible keys in the result_vals dictionary
  
      'Delta_f' : float
          Free energy difference between the two states
      'dDelta_f': float
          Estimated standard deviation of free energy difference between the two states.
  
      Notes
      -----
      If you are prodividing correlated timeseries data, be sure to set the 'timeseries' flag to True
  
      Examples
      --------
      Compute the free energy difference given a sample of forward work values.
  
      >>> from pymbar import testsystems
      >>> [w_F, w_R] = testsystems.gaussian_work_example(mu_F=None, DeltaF=1.0, seed=0)
      >>> results = EXPGauss(w_F)
      >>> print('Forward Gaussian approximated free energy difference is %.3f +- %.3f kT' % (results['Delta_f'], results['dDelta_f']))
      Forward Gaussian approximated free energy difference is 1.049 +- 0.089 kT
      >>> results = EXPGauss(w_R)
      >>> print('Reverse Gaussian approximated free energy difference is %.3f +- %.3f kT' % (results['Delta_f'], results['dDelta_f']))
      Reverse Gaussian approximated free energy difference is -1.073 +- 0.080 kT
  
      """
  
      # Get number of work measurements.
      T = float(np.size(w_F))  # number of work measurements
  
      var = np.var(w_F)
      # Estimate free energy difference by Gaussian approximation, dG = <U> - 0.5*var(U)
      DeltaF = np.average(w_F) - 0.5 * var
  
      result_vals = dict()
      if compute_uncertainty:
          # Compute effective number of uncorrelated samples.
          g = 1.0  # statistical inefficiency
          T_eff = T
          if is_timeseries:
              # Estimate statistical inefficiency of x timeseries.
              import timeseries
              g = timeseries.statisticalInefficiency(w_F, w_F)
  
              T_eff = T / g
          # Estimate standard error of E[x].
          dx2 = var / T_eff + 0.5 * var * var / (T_eff - 1)
          dDeltaF = np.sqrt(dx2)
  
          # Return estimate of free energy difference and uncertainty.
          result_vals['Delta_f'] = DeltaF
          result_vals['dDelta_f'] = dDeltaF 
      else:
          result_vals['Delta_f'] = DeltaF
      return result_vals