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
pairs(emm, max_contrasts=None) no longer allocates an O(m²) contrast-covariance matrix when the adjustment method doesn't need the off-diagonal correlation. Previously every adjust path built the full L_c @ V @ L_c.T; for k=250 group levels via pairwise that's ~7.2 GB on float64 and OOM'd typical hardware. The contrast covariance is now built lazily: only "dunnett" / "mvt" paths build the full matrix; every other adjustment computes the diagonal SEs via einsum. Empirical: k=250 peak RSS dropped from ~7.7 GB to ~270 MB with identical numerical output. Tukey HSD at k=250 is now feasible on a laptop.
Defaults (P1)
dunnett_max_k default tightened from 100 to 50. Empirical exact-Dunnett wall time on the reference machine: k=30 → ~5 s, k=50 → ~4 min, k=100 → effectively unbounded for an interactive call. The previous 100 cap suggested feasibility the QMC integrator can't deliver. Override via set_emm_options(dunnett_max_k=...) for batch jobs.
Refusal completeness (P2)
joint_tests(EmmList(...)) now scans every member's inference_kind instead of only the first. A mixed EmmList(freq_em, post_em) with the posterior member at any position now raises the steering ValueError and names the offending position(s).
Errors (P2)
bootstrap_ci(em, kind='case', refit_fn=...) now accepts an explicit data= kwarg so the post-pickle path is actually usable. Resolves the resampling source in order: live info.data → caller-supplied data= → clear error. Passing both populates a UserWarning and prefers info.data (avoids a wrong-numerics footgun).
Documentation (P2)
src/pymmeans/options.py module docstring + set_emm_options admonition now document the ContextVar process-boundary gap explicitly (joblib loky, ProcessPoolExecutor, multiprocessing spawn). Users hitting the new dunnett_max_k option in a parallel sensitivity-analysis pipeline see the limitation at the call site rather than at the worker-side ValueError.