Releases: adrn/gala
v1.11.0
Changelog
New Features
- A C++ compiler is now required to build Gala from source.
- Orbit integration performance is improved by changing the way vectorization over
multiple orbits is handled internally. - Added a new
gala.potential.SphericalSplinePotentialclass for representing
generic spherical potentials with spline interpolation in either potential, density,
or mass enclosed. - Added coordinate symmetry support for potential classes: spherical potential methods
can now be evaluated usingr=and cylindrical potentials usingR=andz=
instead of requiring full 3D Cartesian coordinates. - Added a new
gala.potential.TimeInterpolatedPotentialclass that enables wrapping
any potential class to support time-dependent parameters through interpolation. - Unit systems in potential classes can now be specified using string names
(e.g.,'galactic','dimensionless', etc.) when initializing potential
instances or when replacing units with.replace_units(). - C-level integrator arguments can now be specified when running a mock stream
simulation through theIntegrator_kwargsinMockStreamGenerator.run(). - Added support for using the Leapfrog integrator with
MockStreamGenerator(pass
Integrator=gi.LeapfrogIntegratorinMockStreamGenerator.run()). - Integrators can now be specified using lowercase string names (e.g., 'leapfrog',
'dopri853', 'ruth4') inHamiltonian.integrate_orbit(),
DirectNBody.integrate_orbit(), andMockStreamGenerator.run(). - Added a new method
MockStream.rotate_to_progenitor_plane()that transforms a mock
stream into a new coordinate system where the progenitor's orbital plane is aligned
with the xy-plane, the stream and progenitor are centered at (0, 0), and the stream
primarily extends in the x direction (leading tail at positive x and trailing tail at
negative x). - EXP: constructing potentials from pyEXP objects is now supported via
gala.potential.PyEXPPotential. - EXP: force evaluation with
gala.potential.EXPPotentialshould now be much faster.
Bug fixes
gala.potential.EXPPotentialnow propagates C++ exceptions to Python.- Fixed a deprecation warning with astropy>=v7.1.
- Fixed a matplotlib warning when plotting an orbit with
plot()and
autolim=Truerelated to usingaspect="equal". replicate()andreplace_unitsnow work withEXPPotential.- Fixed incorrect results from
MockStreamGenerator.run()with an
n_particlesarray. - Fixed a bug in
MockStreamGenerator.run()when usingDirectNBodywith
output_filenameand more bodies than stream particles, which caused a "TypeError:
Can't broadcast" error. - Fixed a bug that caused
GreatCircleICRSFrameto throw an error about a missing
attribute_Rwhen transforming to/from the frame.
API changes
- Added
copykwarg togala.dynamics.PhaseSpacePosition,
gala.dynamics.Orbit, andgala.dynamics.MockStream. - The
integrate_orbit()method now validates that the input initial conditions have
the correct shape given the dimensionality of the potential. - Removed custom
ImmutableDictimplementation in favor of
types.MappingProxyType. - Added new keyword arguments
ndimandconverttoPotentialParameterto
control the expected number of dimensions for array parameters and to specify a
conversion function for parameter values, respectively. - Removed deprecated
gala.dynamics.find_actionsin favor offind_actions_o2gf. - Removed deprecated
radial=Truekwarg fromOrbit.estimate_period(). - Removed deprecated
value()method from potential clases in favor of using the
__call__()method orenergy(). - Removed deprecated
to_galpy_potential()method from potential classes in favor of
usingas_interop("galpy"). - The Gala Milky Way potential classes (
MilkyWayPotentialand
MilkyWayPotential2022) have been combined into a singleMilkyWayPotential
class with aversion=kwarg to specify the desired version (e.g.,'v1',
'v2', etc.). The old classes are deprecated and will be removed in a future
release.
Build changes
- EXP: the instructions to build Gala against EXP have changed. Only the EXP install
dir is now used.
Other
- Refactored package layout to move all source code into a
src/directory, and move
all tests into a top-leveltests/directory.
Pull requests
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #437
- build(deps): bump pypa/cibuildwheel from 3.0.1 to 3.1.3 by @dependabot[bot] in #438
- exp: propagate C++ exceptions to Python by @lgarrison in #433
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #440
- build(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #441
- build(deps): bump actions/download-artifact from 4 to 5 by @dependabot[bot] in #442
- exp: fix composite potentials by @lgarrison in #444
- exp: improve file path handling by @lgarrison in #445
- build(deps): bump codecov/codecov-action from 5.4.3 to 5.5.0 by @dependabot[bot] in #450
- build(deps): bump pypa/cibuildwheel from 3.1.3 to 3.1.4 by @dependabot[bot] in #451
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #448
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #452
- EXPPotential: Allow a different snapshot time unit by @adrn in #454
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #455
- build(deps): bump codecov/codecov-action from 5.5.0 to 5.5.1 by @dependabot[bot] in #456
- build(deps): bump actions/setup-python from 5 to 6 by @dependabot[bot] in #457
- vectorize gradients for leapfrog integration by @lgarrison in #446
- Astropy 71 repname by @adrn in #459
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #458
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #460
- Fix some frame transforms that need a frame instance not class by @adrn in #462
- build(deps): bump pypa/cibuildwheel from 3.1.4 to 3.2.0 by @dependabot[bot] in #465
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #464
- vectorization follow-ups by @lgarrison in #447
- potential: keep track of which parameters were set by the user by @lgarrison in #469
- mockstream: fix out-of-bounds array read by @lgarrison in #471
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #472
- integrate: optimize save_all by @lgarrison in #449
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #475
- Add interpolated spherical potential model by @adrn in #467
- build(deps): bump pypa/cibuildwheel from 3.2.0 to 3.2.1 by @dependabot[bot] in #476
- reduce transposes in gradient evaluation by @lgarrison in #473
- Add concept of coordinate symmetry to potential classes by @adrn in #478
- A few minor docs fixes by @adrn in #480
- Fix mockstream nbody output bug by @adrn in #481
- ci improvements by @lgarrison in #474
- Validate initial conditions shape in integrate_orbit by @adrn in #482
- Replace ImmutableDict with MappingProxyType by @adrn in #484
- Add a repr for Hamiltonian by @adrn in #485
- Support time interpolation of parameters, origin, rotation for all potential classes by @adrn in #453
- Adopt src package layout, remove extension_helpers, consolidate tests by @adrn in #488
- build(deps): bump astral-sh/setup-uv from 6 to 7 by @dependabot[bot] in #491
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #492
- Allow specifying Potential unit system by string name by @adrn in #495
- Fix error with great circle frame by @adrn in #496
- Remove long-deprecated features in prep for v1.11 by @adrn in #498
- Add tests and simplify some boilerplate C by @adrn in #499
- Ignore failing orbits in mockstream and disable stiffness checking by @adrn in #497
- Add leapfrog integrator for mock stream simulation by @adrn in #502
- Allow specifying integrator with string name by @adrn in #504
- Rework MilkyWayPotential classes and add document describing MWP2022 by @adrn in #503
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #505
- bui...
v1.10.1
This is a bugfix release that fixes two bugs with the EXPPotential interface.
This includes changes from:
- exp: fix composite potentials by @lgarrison #444
- exp: improve file path handling by @lgarrison #445
Full Changelog: v1.10.0...v1.10.1
v1.10.0
What's Changed
- Tiny PR changing one final Integrator.run() by @TomWagg in #389
- Bump pypa/cibuildwheel from 2.20.0 to 2.21.0 by @dependabot[bot] in #390
- Bump pypa/cibuildwheel from 2.21.0 to 2.21.1 by @dependabot[bot] in #391
- Add a simulation unit system class by @adrn in #392
- Bump codecov/codecov-action from 4.5.0 to 5.1.2 by @dependabot[bot] in #401
- Bump pypa/cibuildwheel from 2.21.1 to 2.22.0 by @dependabot[bot] in #398
- Detect pre/post Scipy 1.15 for derivative function behavior by @adrn in #404
- Switch to using dynamically-allocated arrays to avoid arbitrary limit on N bodies by @adrn in #403
- Bump pypa/cibuildwheel from 2.22.0 to 2.23.0 by @dependabot[bot] in #406
- Bump codecov/codecov-action from 5.1.2 to 5.4.0 by @dependabot[bot] in #405
- Bump pypa/cibuildwheel from 2.23.0 to 2.23.1 by @dependabot[bot] in #407
- Use dynamically allocated arrays for potential components in CCompositePotential by @adrn in #409
- Bump pypa/cibuildwheel from 2.23.1 to 2.23.2 by @dependabot[bot] in #408
- Pass floats to agama setUnits instead of unit objects by @adrn in #410
- Update mockstreams.rst by @segasai in #411
- Add short circuit for C potential evaluation when position does not require a shift/rotation by @adrn in #414
- Enable dense output for dop853 integrator (and refactor the way integration is done here) by @adrn in #416
- Bump pypa/cibuildwheel from 2.23.2 to 2.23.3 by @dependabot[bot] in #418
- Bump codecov/codecov-action from 5.4.0 to 5.4.2 by @dependabot[bot] in #412
- Fix bug with passing array length 1 as progenitor mass to mock stream generator by @adrn in #419
- Fix bug with setting value of G in simulation unit system by @adrn in #420
- Allow specifying plot units as a UnitSystem instance by @adrn in #421
- Add ability to use string parameters as potential parameters by @adrn in #422
- Bump codecov/codecov-action from 5.4.2 to 5.4.3 by @dependabot[bot] in #424
- Bump pypa/cibuildwheel from 2.23.3 to 3.0.0 by @dependabot[bot] in #426
- add EXP potential by @lgarrison in #413
- Fix powerlaw cutoff potential normalization by @adrn in #425
- Don't check that EXP potential is zero at infinity by @adrn in #427
- Add precommit hooks and run on all files by @adrn in #429
- exp: return nan instead of crashing the interpreter by @lgarrison in #430
- exp doc tweaks by @lgarrison in #431
- build(deps): bump pypa/cibuildwheel from 3.0.0 to 3.0.1 by @dependabot[bot] in #434
- chore: update pre-commit hooks by @pre-commit-ci[bot] in #432
- Add convenience properties to compute M200, R200, c200 from NFWPotential instance by @adrn in #436
- Improve docstrings in some places by @adrn in #428
New Contributors
- @lgarrison made their first contribution in #413
- @pre-commit-ci[bot] made their first contribution in #432
Full Changelog: v1.9.1...v1.10.0
v1.9.1
What's Changed
Note: This release fixes the wheel builds for linux and mac and no new features or bug fixes are included. See v1.9.0 for a list of features and fixes in this major version.
Full Changelog: v1.9.0...v1.9.1
v1.9.0
What's Changed
- Bump FedericoCarboni/setup-ffmpeg from 2 to 3 by @dependabot in #354
- Bump codecov/codecov-action from 3.1.4 to 3.1.5 by @dependabot in #356
- Bump pypa/cibuildwheel from 2.16.2 to 2.16.4 by @dependabot in #357
- Bump codecov/codecov-action from 3.1.5 to 4.0.1 by @dependabot in #359
- Only upload to testpypi on push to main, and update upload/download artifact by @adrn in #361
- Bug fix in FardalStreamDF. by @jl3937 in #358
- Bump pypa/cibuildwheel from 2.16.4 to 2.16.5 by @dependabot in #360
- Bump codecov/codecov-action from 4.0.1 to 4.1.0 by @dependabot in #363
- Fix Potential.plot_rotation_curve() when an ax is provided by @adrn in #362
- Enable passing a multiprocessing/parallel pool when computing SCF coefficients by @adrn in #364
- Bump pypa/cibuildwheel from 2.16.5 to 2.17.0 by @dependabot in #365
- Fix inefficient nbody orbit reorder by @adrn in #366
- Added Burkert cpotential by @HSouch in #367
- Fix passing nbody instance to mockstream.run with save_all=False by @adrn in #369
- Add implementation of make_getter (removed from astropy) by @adrn in #377
- Compatibility with numpy 2.0 by @adrn in #387
- Bump pypa/cibuildwheel from 2.17.0 to 2.20.0 by @dependabot in #385
- Remove unused modules by @AlexKurek in #384
- deprecate Integrator.run for integrator.call by @nstarman in #355
- Added "from_r0" to Burkert potential by @HSouch in #370
- Implement Chen+24 particle spray model by @ybillchen in #386
New Contributors
- @jl3937 made their first contribution in #358
- @HSouch made their first contribution in #367
- @AlexKurek made their first contribution in #384
- @ybillchen made their first contribution in #386
Full Changelog: v1.8.1...v1.9.0
v1.8.1
What's Changed
- Bump actions/download-artifact from 3 to 4 by @dependabot in #348
- Update citbuildwheel process and upload to testpypi by @adrn in #352
Full Changelog: v1.8.0...v1.8.1
v1.8.0
What's Changed
- pass time through plot functions, and reformat with black by @adrn in #332
- Update default_flow_style in yaml serialization by @adrn in #335
- Bump actions/checkout from 3 to 4 by @dependabot in #336
- GSL warnings for discrete SCF functions by @TomWagg in #337
- IO for SCF potentials by @TomWagg in #338
- Added a guiding radius method and test by @adrn in #340
- Add a way to convert Gala potential instances to Agama potential instances by @adrn in #341
- BLD: pin extension-helpers to 1.* following upstream recommendation by @neutrinoceros in #343
- Fix compatibility with Astropy v6.0 by @adrn in #345
- Bump conda-incubator/setup-miniconda from 2 to 3 by @dependabot in #342
- Bump actions/setup-python from 4 to 5 by @dependabot in #347
New Contributors
- @neutrinoceros made their first contribution in #343
Full Changelog: v1.7.1...v1.8.0
v1.7.1
This is a maintenance release. See the changelog from v1.7 for new features.
Full Changelog: v1.7...v1.7.1
v1.7
What's Changed
- Fixed the oph19_to_icrs function by @sophialilleengen in #312
- Fix test warnings and failures by @adrn in #315
- Clean up gala.coordinates and overhaul great circle coordinate frame by @adrn in #314
- Fix bug with estimate_period by @adrn in #316
- Add method to export MN3 potential into three MN potentials by @adrn in #317
- A few minor fixes by @adrn in #318
- Add MilkyWayPotential2022 by @adrn in #324
- Bump dfm/rtds-action from 1.0.3 to 1.1.0 by @dependabot in #323
- Bump codecov/codecov-action from 3.1.1 to 3.1.4 by @dependabot in #322
- Fix compiler issue with solout in dop853 integrator by @adrn in #327
- Speedup Nbody and add new integrator functionality by @adrn in #321
- V21 frame by @adrn in #328
Full Changelog: v1.6.1...v1.7 and https://github.com/adrn/gala/blob/main/CHANGES.rst
v1.6.1
Changelog included below:
New Features
-
Added a
.replicate()method to Potential classes to enable copying
potential objects but modifying some parameter values. -
Added a new potential class
MN3ExponentialDiskPotentialbased on Smith et
al. (2015): an approximation of the potential generated by a double
exponential disk using a sum of three Miyamoto-Nagai disks. -
The
Orbit.estimate_period()method now returns period estimates in all
phase-space components instead of just the radial period. -
Added a
store_allflag to the integrators to control whether to save
phase-space information for all timesteps or only the final timestep. -
Added a
plot_rotation_curve()method to all potential objects to make a 1D plot
of the circular velocity curve. -
Added a new potential for representing multipole expansions
MultipolePotential. -
Added a new potential
CylSplinePotentialfor flexible representation of
axisymmetric potentials by allowing passing in grids of potential values
evaluated grids of R, z values (like theCylSplinepotential in Agama). -
Added a
show_timeflag toOrbit.animate()to control whether to show the
current timestep. -
Changed
Orbit.animate()to allow for differentmarker_styleand
segment_styleoptions for individual orbits by passing a list of dicts instead
of just a dict. -
Added an experimental new class
SCFInterpolatedPotentialthat accepts a time
series of coefficients and interpolates the coefficient values to any evaluation time.
Bug fixes
-
Fixed a bug where the
NFWPotentialenergy was nan when evaluating at the
origin, and added tests for all potentials to check for a finite value of the
potential at the origin (when expected). -
Fixed a bug in
NFWPotential.from_M200_c()where the incorrect scale radius
was computed (Cython does not always use Python 3 division rules for dividing
integers!). -
Fixed a bug in the (C-level/internal) estimation of the 2nd derivative of the
potential, used to generate mock streams, that affects non-conservative force
fields.
API changes
- The
Orbit.estimate_period()method now returns period estimates in all
phase-space components instead of just the radial period.