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
ellipj now returns the continuous Jacobi amplitude am(u) (with am(u+2K) = am(u) + π) instead of the value reduced to one period; eps(u) and every quantity built on the amplitude are now correct beyond one period. This is the fix required by the SE(2) conjugate-locus computations (se2-conjugate-locus).
Fixes (Python port)
elliptic12i: imaginary part collapsed to zero at Re(u) = π/2 (#35); period term below π/2
elliptic3: phase domain extended past [0, π/2]; m > 1 handled
ellipticBDJ: phase reduced mod π before the Carlson forms
weierstrass: closed theta forms for ζ and σ; σ was wrong past 2ω₁
theta: angle-addition recurrence; theta() evaluates directly on v
cel: Bulirsch's kc-native algorithm
inversenomeq near q = 1, nome2m; empty, NaN and Inf inputs
cancellation, convergence, reduction-rounding and silent-domain-gap defects from three adversarial review rounds and a 3000-point cross-port parity sweep at extreme m
scipy-free runtime with backend-native dispatch; device-placement and OpenCL dispatch fixes on the torch backend
Tests
New tests/test_mpmath_reference.py: 604 cases checking every public function against 30-digit mpmath values (continuous amplitude beyond one period, phases past π/2 and mod π, small-m series branch, Bulirsch at kc = 1e-9, Weierstrass σ past 2ω₁, theta at large angles, complex phase, inverse nome up to q = 0.778, NaN/empty inputs)
Branch-cut convention of elliptic12i documented: on Re(u) = π/2 + nπ with |Im u| > arccosh(1/√m) the value is the boundary value from the right (mpmath gives the left one); both agree off the cut