Breaking Changes
- Rng method renames across all 7 languages: float sampling methods renamed to include the type explicitly — e.g.,
uniform()→uniform_f64()(Rust),UniformDouble()(C#),UniformFloat64()(Go),uniformDouble()(Kotlin),uniform_float()(Python/R),uniformFloat()(TypeScript); range variants renamed accordingly - Rng validation tightened:
SampleandResamplenow rejectk=0(was accepted as "non-negative");SampleandShufflenow reject empty input collections - AvgSpread is now internal in all languages; it was inconsistently public while all other auxiliary functions were already unexported
- RelSpread is deprecated in all languages; use
Spread(x) / |Center(x)|inline instead - Probability.Median removed (C#): was a redundant alias for
Probability.Half - Uniform distribution PDF fix (C#):
Pdf(x)boundary corrected tox >= Max → 0(half-open interval[min, max)consistent with sampling)
Features
- DisparityBounds: new distribution-free confidence bounds for Disparity (
= Shift / AvgSpread), implemented in all 7 languages using Bonferroni combination of ShiftBounds and AvgSpreadBounds; includes_with_seedvariant for deterministic reproducibility; 39 shared JSON reference test cases - AvgSpreadBounds: new internal estimator providing confidence bounds for average spread via Bonferroni combination of two SpreadBounds calls; 36 shared JSON reference test cases
- tests/manifest.json: machine-readable index of all test suites for cross-language tooling
Improvements
- Go: bounds functions (
ShiftBounds,RatioBounds,CenterBounds,SpreadBounds) now validate that the variadicmisrateparameter receives at most one value; thread safety documented onRng;uniformInt64range calculation simplified - Python: added runtime type guard for
seedparameter inRng - Resample internals (C#, Go): index selection now uses
UniformInt64instead ofUniformInt32/UniformIntNfor correctness on large inputs - EstimatorInvarianceTests added across all languages: verify algebraic properties such as
Disparity ≈ Shift / AvgSpreadandRatio ≈ Center(x) / Center(y)across multiple sample sizes - RngInvarianceTests added across all languages: verify that
Shufflepreserves multisets,Samplereturns correct size and subset,Resamplereturns correct size from source elements - Simulation tooling (
pragmastat-sim): addedavg-spread-boundsanddisparity-boundscoverage simulations; added Power distribution to defaults; changed default sample sizes to sparse representative values (2,3,4,5,10,11,20,50,100)
Documentation
- Manual restructured from content-type grouping (Toolkit, Algorithms, Notes, Tests) into per-function topic folders (
center/,spread/,shift/,disparity/,rng/, etc.), each self-contained with entry point, algorithm, notes, tests, and per-topic references - New chapter organization: One-Sample Estimators, Two-Sample Estimators, Randomization, Distributions, Implementations, Auxiliary
- New content: Synopsis function table with algorithms and complexity; Foundations section (Drift, Misrate, Invariance) consolidated from former Studies; Appendix (Assumptions, Methodology, Bibliography, Colophon); algorithm and test pages for AvgSpreadBounds, DisparityBounds, and many existing functions
- Removed: Studies chapter (bootstrap-center, breakdown, ci-misrate, drift, efficiency-drift, invariance); standalone RelSpread page
- Web site: per-function page structure with grouped sidebar (folder icons, section headers); Astro View Transitions for SPA-style navigation with persistent sidebar scroll; scroll spy for sidebar sublink highlighting; Typst parser now supports
cite()and preserves inline math in link content
Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v9.0.0...v10.0.0
Release notes generated by herald v1.0.4