=================
- Added a general framework for spherical distribution function as
well as a general implementation of (a) the Eddington inversion to
obtain the ergodic distribution function, (b) the equivalent
inversion to get the Osipkov-Merritt-style anisotropy, and (c) the
Cuddeford inversion to obtain a distribution function with constant
anisotropy, all three for any spherical density in any spherical
potential (where it exists). Also added the distribution function of
a few well-known distribution functions, including (a) Hernquist
distribution functions that are isotropic, have constant anisotropy,
or have Osipkov-Merritt type anisotropy; (b) an isotropic Plummer
profile; (c) the isotropic NFW profile (either using the
approx. from Widrow 2000 or using an improved approximation) and the
Osipkov-Merritt NFW profile (new approximate form); (d) the King
model (also added as a potential as KingPotential). These
distribution functions can be evaluated and sampled, and their
velocity moments can be computed. Work started in 432 and continued
on from there. Distribution functions with constant anisotropy
require the JAX.
- Implemented the calculation of SCF density/potential expansion
coefficients based on an N-body representation of the density
(444).
- Added NFWPotential initialization method using rmax and vmax, the
radius and value at which the rotation curve peaks; also added rmax
and vmax methods to NFWPotential to compute these quantities for any
NFWPotential.
- Added general class SphericalPotential to make defining spherical
potentials easier (424).
- Added interpSphericalPotential class to build interpolated versions
of spherical potentials (424).
- Added AdiabaticContractionWrapperPotential, a wrapper potential to
adiabatically contract a spherical dark-matter halo in response to
the adiabatic growth of a baryonic component.
- Added potential functions to compute the zero-velocity curve: zvc
and zvc_range; the latter computes the range in R over which the
zero-velocity curve is defined, the former gives the positive z
position on the zero-velocity curve for a given radius in this
range.
- Added potential function and method rhalf to compute the half-mass
radius.
- Added potential function and member tdyn to compute the dynamical
time from the average density.
- Added TriaxialGaussianPotential, the potential of a Gaussian that is
stratified on triaxial ellipsoids (Emsellem et al. 1994). Useful for
implementing multi-Gaussian expansions of galactic potentials.
- Added PowerTriaxialPotential, the potential of a triaxial power-law
density (like PowerSphericalPotential, but triaxial).
- Added AnyAxisymmetricRazorThinDiskPotential, the potential of an
arbitrary razor-thin, axisymmetric disk.
- Added AnySphericalPotential, the potential of an arbitrary spherical
density distribution.
- Added RotateAndTiltWrapperPotential, a wrapper potential to
re-orient a potential arbitrarily in three dimensions using three
angles.
- Updated the definition of a Potential's mass to always return the
mass within a spherical shell if only one argument is
specified. Also implemented faster implementations of the masses of
SCF and diskSCF potentials.
- Added mixed azimuthal,vertical second derivative for all
non-axisymmetric potentials: potential function evaluatephizderivs
and Potential method phizderiv.
- Added inverse action-angle transformations for the isochrone
potential (actionAngleIsochroneInverse) and for a one-dimensional
harmonic oscillator (actionAngleHarmonicInverse; also added the
[x,v] -> [J,O,a] transformation for the latter,
actionAngleHarmonic).
- Added Potential.plotSurfaceDensity (potential.plotSurfaceDensities)
method (function) to plot the surface density of a Potential
instance (of Potential instance of a list of Potential instances).
- Re-implemented the DoubleExponentialDiskPotential in a simpler and
more accurate manner, using the double-exponential formula (no
relation) for integrals of Bessel functions from Ogata 2005. The
DoubleExponentialDiskPotential is now calculated to ~machine
precision almost everywhere and there is no longer any switch to a
Keplerian behavior at large R.
- Made potentials as much as possible numerically stable at r=0 and
r=numpy.inf (i.e., they don't give NaN). Still a few missing, but
the majority of potentials are well behaved now.
- Fixed angle calculation for actionAngleIsochrone and
actionAngleSpherical for non-inclined orbits (which are tricky).
- Replace Quantity parsing through the package as much as possible
with a set of centralized parsers (430).
- Renamed galpy.util.bovy_coords to galpy.util.coords,
galpy.util.bovy_conversion to galpy.util.conversion, and
galpy.util.bovy_plot to galpy.util.plot (but old 'from galpy.util
import bovy_X' will keep working for now). Also renamed some other
internal utility modules in the same way (bovy_symplecticode,
bovy_quadpack, and bovy_ars; these are not kept
backwards-compatible).
- Added Python 3.9 support.
- Switched Linux CI from Travis to GitHub Actions. Also added Windows
CI to GitHub Actions covering almost all tests. Appveyor CI for
Windows also still running.