docs: def _proposal_params(self, state):
          """
      Proposal parameters
          Calculate parameters needed for the proposal. 
      Inputs  :
          state : 
              x  :   
                  the present sample, the place to linearize around
              f  : f(x), 
                  function value at x
              J  : f'(x), 
                  the jacobian of the function evaluated at x
      Outputs :
          state :
              mu   : 
                  the mean vector
              L    :
                  the lower triangular cholesky factor of P 
              log_p : log(p(x))
                  log of the posterior density
          """
          x  = state['x']
          f  = state['f']
          J  = state['J']
          JJ = np.dot(J.T,J)     
  
          if self._prior: 
              m  = self._m
              H  = self._H
              Hm = self._Hm
              # LL' = P = H+J'J 
              L  = la.cholesky(H+JJ)   
              # mu = (P^-1)(Hm-J'f+J'Jx)
              mu = la.solve(L.T,la.solve(L,Hm-np.dot(J.T,f)+np.dot(JJ,x))) 
          else: 
              # P = J'J
              L = la.cholesky(JJ)
              # mu = x-(P^-1)J'f
              mu = x-la.solve(L.T,la.solve(L,np.dot(J.T,f)))
  
          state['L'] = L        
          state['mu'] = mu
          state['log_p'] = self._log_post(x,f)
          return state