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
Make DoubleFloats, Quadmath & GenericFFT weak dependencies (package extensions) (#14)
Float64-only users no longer load DoubleFloats, Quadmath (and thus the libquadmath C
library), or GenericFFT: all three are `[weakdeps]` activated via package extensions,
pulled in only when the user does `using DoubleFloats` / `using Quadmath` / `using
GenericFFT`. Verified: `using TransitionMatrices` alone loads none of the three
extensions, and a Float64 EBCM computation runs unchanged.
These are all opt-in extras — the core (Float64, FFTW, Arblib) path never needs them:
- ext/TransitionMatricesDoubleFloatsExt.jl: Double64 — precision(Complex{Double64}),
Arblib.set!(::Double64), and the Double64 `cbrt`/`∛` workaround.
- ext/TransitionMatricesQuadmathExt.jl: Float128 — Float128⇄Arb conversions,
precision(ComplexF128), the instance precision(::Float128) fix (Quadmath leaves it
unimplemented), and Arblib.set!(::Float128).
- ext/TransitionMatricesGenericFFTExt.jl: the generic-type azimuthal FFT for the n-fold
IITM — `_iitm_fft_capable(Complex{<:AbstractFloat})`, the GenericFFT plan, and the
generic `_apply_forward_dft!`. Without GenericFFT, Complex{Double64}/Complex{BigFloat}
n-fold IITM gracefully falls back to the direct azimuthal sum (correct, just no FFT
acceleration); ComplexF64 stays on FFTW and Acb on Arblib.dft! (both hard deps).
Note: weakening Quadmath alone would have no effect, because DoubleFloats lists Quadmath
in its own deps and so transitively loads it — they had to be weakened together for
Float64-only loads to drop libquadmath.
Arblib stays a hard dependency: the arbitrary-precision + special-function backbone
(gausslegendre for non-Float64, factorial(n>20) via gamma! in the Wigner-d functions —
reached even on the Float64 path — and Arb/Acb as first-class numeric types in the EBCM
Arb-matrix inversion and the IITM Acb FFT backend).
Re-exports of Double64 / Float128 / ComplexF128 are dropped (use the respective package);
Arb/Acb stay exported. Tests and the benchmark load the weak deps explicitly;
test/Project.toml and benchmark/Project.toml gain them. Full suite: 48,290 tests pass.
0 commit comments