Skip to content

v4.2.0

Latest

Choose a tag to compare

@moiseevigor moiseevigor released this 21 Sep 21:08

What's new in 4.2.0

Behaviour change

  • 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
  • 1084 tests pass, 1 skipped (NumPy)