Both take a minor. Neither is a patch, and the pin is what forces it: svy
0.23.0's Python calls rs.taylor_quantile and rs.weighted_quantile_at, neither of
which exists in svy-rs 0.12.1. The current range svy-rs>=0.12.1,<0.13.0 would be
satisfied by a stale 0.12.1 extension, and the new svy would die with
AttributeError at call time. The floor moves to >=0.13.0,<0.14.0.
Minor on svy-rs is doing real work beyond semver bookkeeping. A patch (0.12.2)
would satisfy 0.22.1's existing <0.13.0 range and reach every current install on
the next sync — meaning a brand-new polars 0.55 / pyo3 0.29 extension landing
silently under old svy code. 0.13.0 makes that impossible. Same reasoning as the
0.11.1-vs-0.12.1 note in b356d59, pointing the other way.
--- Numbers move, for the first time in three releases
median() standard errors and confidence limits change. Point estimates do not.
The Woodruff interval endpoints were inverted linearly regardless of q_method,
while R hands one method/f pair to both its point approxfun and its endpoint
approx; and the linearization was centered on the nominal target rather than on
the mean it realizes. Both understated the standard error — the old values were
too small, so intervals widen. Anyone who has published estimates from median()
should re-run them.
Estimates, standard errors and both confidence limits now agree with R's
oldsvyquantile to floating-point noise (4e-15 worst over 44 comparisons per tie
rule, p = 0.001 to 0.999), the residual being scipy's t.ppf against R's qt.
--- Seven version strings, not six
b356d59 tracked six. The seventh is __version__ in svy_rs/__init__.py, stale at
0.9.0 since 6f97387 — Cargo.toml and pyproject.toml moved through 0.10, 0.11 and
0.12 without it. Nothing reads it, so nothing broke; it is corrected to 0.13.0
here rather than left to drift further.
The full set: svy-rs Cargo.toml, pyproject.toml and __init__.py; svy
pyproject.toml, __init__.py and its svy-rs floor; Cargo.lock and uv.lock. Both
locks were edited to the two member lines rather than regenerated, for the
reason b356d59 gives — a local `uv lock` also rewrites unrelated
python_full_version markers on ipython's dependencies.
--- Build requirement
svy-rs now declares rust-version = "1.91": polars calls i64::strict_abs
(strict_overflow_ops, stable since 1.91) and declares no rust-version of its own.
This affects building from source only; wheel users are unaffected, and all five
wheel platforms build on CI's floating stable.
Verified on the release commit: svy_rs installs as 0.13.0, svy.__version__ and
svy_rs.__version__ report 0.23.0 and 0.13.0, 80 Rust and 2856 Python tests pass.