docs: def LML(self,params=None):
          """
          evalutes the log marginal likelihood for the given hyperparameters
  
          hyperparams
          """
          if params is not None:
              self.setParams(params)
  
          KV = self._update_cache()
          alpha = KV['alpha']
          L = KV['L']
  
          lml_quad = 0.5 * (alpha*self.Y).sum()
          lml_det = self.t *SP.log(SP.diag(L)).sum()
          lml_const = 0.5*self.n*self.t*SP.log(2*SP.pi)
          LML = lml_quad + lml_det + lml_const
          return LML