You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The jit/grad/vmap tracer check that gates the eager-loop-vs-lax.fori_loop
choice is general (bracket expansion, bisection, any future rolled loop), not
a root-finder detail, so it moves next to is_backend_array/device_of in
galpy.backend._namespaces and both call sites in optimize.py plus the
duplicate inline check in _jax/optimize._bisect_root now share it.
Also add a jit+grad-through-Staeckel test: Staeckel's turning points call the
module-level bisect_root DIRECTLY (not via brentq), so its under_jax_trace(a,b)
-> lax.fori_loop branch was uncovered (the Adiabatic/Spherical/Vertical grad
tests route through brentq/iterate_bracket instead). The new test traces
actionsFreqsAngles under jax.jit (asserts the jaxpr is rolled) and jax.grad
(finite dJr/dR), closing the codecov/patch gap on optimize.py:219-222.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments