code: def hessianFreqs(self,jr,jphi,jz,**kwargs):
          
          out= actionAngleTorus_c.actionAngleTorus_hessian_c(\
              self._pot,
              jr,jphi,jz,
              tol=kwargs.get('tol',self._tol),
              dJ=kwargs.get('dJ',self._dJ))
          if out[4] != 0:
              warnings.warn("actionAngleTorus' AutoFit exited with non-zero return status %i: %s" % (out[4],_autofit_errvals[out[4]]),
                            galpyWarning)
          # Re-arrange frequencies and actions to r,phi,z
          out[0][:,:]= out[0][:,[0,2,1]]
          out[0][:,:]= out[0][[0,2,1]]
          if kwargs.get('nosym',False):
              return out
          else :# explicitly symmetrize
              return (0.5*(out[0]+out[0].T),out[1],out[2],out[3],out[4])
docs: NAME:
  
             hessianFreqs
  
          PURPOSE:
  
             return the Hessian d Omega / d J and frequencies Omega corresponding to a torus
  
          INPUT:
  
             jr - radial action (scalar)
  
             jphi - azimuthal action (scalar)
  
             jz - vertical action (scalar)
  
             tol= (object-wide value) goal for |dJ|/|J| along the torus
  
             dJ= (object-wide value) action difference when computing derivatives (Hessian or Jacobian)
  
             nosym= (False) if True, don't explicitly symmetrize the Hessian (good to check errors)
  
          OUTPUT:
  
             (dO/dJ,Omegar,Omegaphi,Omegaz,Autofit error message)
  
          HISTORY:
  
             2016-07-15 - Written - Bovy (UofT)