code: def e(self,analytic=False,pot=None,**kwargs):
          
  
          if not pot is None: pot= flatten_potential(pot)
          _check_consistent_units(self,pot)
          return self._orb.e(analytic=analytic,pot=pot,**kwargs)
docs: NAME:
  
             e
  
          PURPOSE:
  
             calculate the eccentricity, either numerically from the numerical orbit integration or using analytical means
  
          INPUT:
  
             analytic(= False) compute this analytically
  
             pot - potential to use for analytical calculation
  
             For 3D orbits different approximations for analytic=True are available (see the EccZmaxRperiRap method of actionAngle modules):
  
                type= ('staeckel') type of actionAngle module to use
                
                   1) 'adiabatic': assuming motion splits into R and z
  
                   2) 'staeckel': assuming motion splits into u and v of prolate spheroidal coordinate system, exact for Staeckel potentials (incl. all spherical potentials)
  
                   3) 'spherical': for spherical potentials, exact
                
                +actionAngle module setup kwargs for the corresponding actionAngle modules (actionAngleAdiabatic, actionAngleStaeckel, and actionAngleSpherical)
  
          OUTPUT:
  
             eccentricity
  
          HISTORY:
  
             2010-09-15 - Written - Bovy (NYU)
  
             2017-12-25 - Added Staeckel approximation and made that the default - Bovy (UofT)