gamrs
Generalised Additive Models in Rust — clean-room reimplementation built on
six composable trait layers (Basis, BasisTransform, Loss/Link/VarianceFn,
InnerSolver, ScoreDerivatives, OuterSolver). Designed for parity with
R's mgcv.
Status: beta (v0.14). Fastest where wall time matters — large n and
high basis dimension (up to ~2.3× at n=1M and ~15× at k=50 vs
mgcv_rust 0.23), competitive-to-slower on tiny fits, with a known
multi-smooth-NegBin gap; see Performance for the honest
breakdown. mgcv R-parity on µ across all ten families. Multi-smooth
additive (y ~ s(x0) + s(x1)),
n-margin tensor products (te(x0, x1, …) / ti(…)) and thin-plate splines
(s(x0, x1, bs="tp")) all ship. NegBin and Tweedie fit multi-smooth, with
Tweedie offering both profile-p (tw()) and fixed-p (Tweedie(p)).
Install
pip install gamrs # base wheel
pip install gamrs[quantile] # + scipy for SHASH-calibrated quantile fits
Quickstart
from gamrs import Gam, CrTerm, TeTerm
# Single 1-D smooth, Gaussian
g = Gam(family="gaussian").fit(X, y)
mu = g.predict(X)
mu, lo, hi = g.predict_ci(X, level=0.95)
# Multi-smooth additive
g = Gam(terms=[CrTerm("x0", k=10), CrTerm("x1", k=15)]).fit(df, df["y"])
# Tensor product
g = Gam(terms=[TeTerm(cols=("x0", "x1"), k=(5, 5))]).fit(df, df["y"])
# Large-n GLM — switch to the bam()-style fREML optimiser. Ported to the
# GLM envelope driver only; elsewhere it warns and fits on REML instead.
g = Gam(family="poisson", method="fREML").fit(X_big, y_big)
Full walkthrough: docs/quickstart.md.
Optimiser & large-n notes: docs/perf.md.
Families
All ten families land 1-D parity against mgcv:
| Family | Link | Inner solver | Outer optimiser | Parity (µ rel-err) |
|---|---|---|---|---|
| Gaussian | identity | one-Cholesky | 1-D Newton | ~3e-6 |
| Bernoulli | logit | PIRLS | 1-D Newton | ~1e-3 |
| Poisson | log | PIRLS | 1-D Newton | ~8e-5 |
| QuasiPoisson | log | PIRLS | 1-D Newton (prof φ) | ~2e-4 |
| QuasiBinomial | logit | PIRLS | 1-D Newton (prof φ) | ~7e-5 |
| Gamma | log | PIRLS | 1-D Newton (prof φ) | ~2e-2 |
| InverseGaussian | log | PIRLS | 1-D Newton (prof φ) | ~3e-4 |
| NegBin | log | PIRLS | ρ-Newton + profile-θ | ~9e-7 |
| Tweedie | log | PIRLS | 3-D joint Newton | ~5e-3 |
TDist (scat) |
identity | PIRLS | 3-D joint Newton | ~4e-4 |
| Ocat | logit | gam.fit5 | joint β + threshold | smoke |
| Quantile (ELF) | identity | Armijo BT | ρ-Newton (per term) | qgam OOS ~1.00× |
Multi-smooth (s(x0) + s(x1) + …) ships with mgcv R parity tests for
Gaussian / Bernoulli / Poisson / QuasiPoisson / QuasiBinomial / Gamma /
InvGauss / NegBin / Tweedie / scat. scat / TDist multi-smooth now has mgcv
reference parity tests too — as of 0.14.0, 2-D µ rel-err ~5.5e-6 and 3-D
~8.3e-5, with σ̂² matching mgcv to ~0.1% (tests/parity_additive_scat.rs,
scripts/r/gen_scat_multismooth_fixtures.R). Those bounds tightened 8-16× in
0.13.0 when a spurious rank adjustment came out of scat's REML score, and
another 30-200× in 0.14.0 when scat's REML criterion was corrected to
mgcv's observed-curvature log|H|; the same
release adds tests/parity_scat_tf9963.rs, a saturated-basis lock (5 distinct
x against k = 5, the geometry that exposed the defect) against all three mgcv
arms (gam+REML, bam+REML, bam+fREML). Quantile/ELF now fits
multi-smooth additive too (y ~ s(x0) + s(x1) + … via the terms= arg of
fit_quantile): on a 2-D additive heteroskedastic split its out-of-sample
pinball loss matches qgam to within ±0.6% at τ ∈ {0.1, 0.5, 0.9}
(scripts/r/gen_quantile_multismooth_fixture.R,
test_parity_multismooth.py::test_additive_quantile_oos_parity).
For a coherent set of quantiles, fit_quantile_lss fits the conditional
distribution by its location μ(x) and scale σ(x) and derives every quantile
as q_τ(x) = μ(x) + σ(x)·z_τ — the mgcv gaulss/shash view. One fit serves
all τ, the bands never cross, and shape="shash" captures skew/kurtosis.
Matches mgcv gaulss OOS pinball to within ~1% on a heteroskedastic 2-D split
(scripts/r/gen_quantile_lss_fixture.R).
GAMLSS — Gaussian location-scale (gaulss)
fit_gaulss(X, y, mu_terms=…, sigma_terms=…) is the first GAMLSS
(multi-linear-predictor) family: it fits y ~ N(μ(x), σ(x)²) with smooth μ(x)
and σ(x) jointly. Because the Gaussian location-scale Fisher information
is block-diagonal (μ ⟂ log σ), the joint MLE is an orthogonal alternation
of two single-predictor weighted-Gaussian REML fits — reusing the existing fit
stack rather than a dense block-Newton. One fit gives every quantile
(q_τ = μ + σ·Φ⁻¹(τ), no crossing). It recovers mgcv gaulss's μ̂/σ̂ to
RMSE ~3e-4 / ~1e-3 and its OOS pinball to ~0.05%, at ~70× the speed (n=800).
Unlike the two-stage fit_quantile_lss, μ is reweighted by 1/σ²(x) each pass —
the joint-MLE efficiency gain. This is the seam for the wider GAMLSS class
(shash, gevlss): non-orthogonal families extend the same alternation.
GAMLSS — sinh-arcsinh (shash)
fit_shash(X, y, mu_terms=…, tau_terms=…, eps_terms=…, phi_terms=…) fits the
first non-orthogonal GAMLSS family — all four sinh-arcsinh parameters as
smooths, jointly: location μ(x), log-scale τ(x) (σ = exp τ), skewness ε(x),
and log-kurtosis φ(x). Because shash's Fisher information couples the predictors
(unlike gaulss), β for all four is solved together by a dense penalised
block-Newton, under outer REML/LAML with an analytic gradient (third
derivatives → d log|Hp|/dρ). One fit yields every quantile
(predict_quantile, the R .shashQf inverse-CDF) plus predict_params →
(μ, σ, ε, δ). It recovers mgcv gam(…, family=shash, bs="cr") to ~1e-6 (η,
smoothing params, EDF, quantiles) and fits Gaussian, skewed, and heavy-tailed
data alike. Distinct from the two-stage fit_quantile_lss(shape="shash") (one
global shape) — this is the genuine joint GAMLSS. (v1: one smooth term per
predictor.) Term specs use the same form as fit_additive, e.g.
mu_terms=[CrTerm(0, k=10)], tau_terms=[CrTerm(1, k=10)], eps_terms=[].
Multi-smooth Ocat now has an mgcv reference parity test
(tests/parity_additive_scat.rs's ocat sibling in
test_parity_multismooth.py::test_additive_ocat_parity,
scripts/r/gen_ocat_multismooth_fixtures.R): on a well-posed
noisy-latent DGP gamrs and mgcv ocat(R=4) both converge cleanly and
agree on predict_proba to ~1.8e-3 mean abs / 98% class agreement.
v0.10 ports the full mgcv R outer-Newton stabilisation stack (smart
θ-init from category frequencies, diagonal Hessian preconditioning,
Gill-Murray-Wright eigen-fix, subset Newton, rank-deficient KKT
convergence check). After the ports, single- and (well-posed)
multi-smooth ocat converge cleanly. The residual converged_=False
appears only on near-separable fixtures (noiseless quantile-cut
categories) where the latent scale wants to blow up — the exact regime
mgcv itself either converges to a degenerate θ≈181 solution or aborts
with "inner loop 1; can't correct step size". There gamrs's θ∈(−3,3)
bound keeps it stable (99% accuracy) and the conservative flag is
correct. See ~/ObsidianVault/Projects/gamrs/gamrs - mgcv outer-Newton stabilisation techniques (port catalogue) 2026-06-03.md for the
full port story.
Smooths
- Single 1-D —
s(x0)viaCrTerm(cubic regression spline default). - Additive multi —
s(x0) + s(x1) + s(x2). - Tensor product —
te(x0, x1, …)viaTeTerm,ti(…)viaTiTerm, any n-margin. - Thin-plate —
s(x0, x1, bs="tp")viaTpsTerm. - Random effects —
s(g, bs="re")viaReTerm. - Point constraint —
s(x, pc=v)viaCrTerm("x", pc=v)orterm_pc_mapping={"x": v}: the smooth passes through zero atx = vand the intercept takes the level. Predictions, λ̂ and edf are unchanged — only the intercept-versus-smooth split moves, which is what a caller reading a partial curve sees. CR bases (cr,cr_stable) only. - Numeric
by=variable —s(x, by=w)viaCrTerm("x", by="w")orterm_by_mapping={"x": "w"}: the term contributesw * f(x), exactly 0 wherew = 0. As in mgcv it is not centred unlesswis constant. Thewcolumn feeds the smooth but is not a term of its own, because an uncentreds(x, by=w)already spansw * constant. Name it inpredictor_basis_mapto add it anyway; it is then aliased and fitted as 0. An unusableterm_by_mappingentry raises. Not combinable withpc. CR bases only. - Parametric (linear) — unsmoothed raw column via
ParametricTermorpredictor_basis_map={"x": "parametric"}(alias"linear"). Use for 0/1 indicators, counts, or anything you want unpenalised. mgcv R's "pterms" block.
Performance
gamrs vs mgcv_rust 0.23.2, best-of-7 median wall time after 3 warmup
iters (>1× = gamrs faster). Reproduce with scripts/bench_matters.py.
Numbers below are an i7-8565U (8th-gen, AVX2); the ratios are
same-box-comparable but absolute times differ on your hardware.
gamrs wins at scale. Single-smooth, k=20 — as n grows the constant-factor setup overhead amortises and gamrs pulls ahead:
| family | n=10K | n=100K | n=1M |
|---|---|---|---|
| Gaussian | 0.58× | 1.49× | 2.27× |
| Poisson | 0.24× | 1.01× | 1.89× |
| Bernoulli | 0.39× | 1.12× | 1.84× |
It also wins as the basis dimension k grows (Gaussian, n=2K): k=10 →
1.7×, k=20 → 4.0×, k=50 → 15×. (Those fits are <2ms — read them as
above-the-noise ratios, not headline wall-time claims.)
Shape-aware families (n=2K, k=10):
| family | speedup | note |
|---|---|---|
| Tweedie 1-D | 1.93× | |
| ocat 1-D | 14.5× | mgcv_rust's ocat path is slow by construction |
| ocat 2-D | 0.69× | |
| NegBin 1-D | 0.64× | |
| NegBin 2-D | 0.06× | multi-smooth profile-θ scaling gap (known) |
| scat 1-D | 0.58× | <2ms — sub-noise |
Honest aggregate (16 above-20ms cells across all sweeps): gamrs is faster in 8 — median 0.89×, geomean 0.83×, range 0.06×–14.5×. The wins concentrate where wall time actually matters — large n, large k, and Tweedie/ocat. Tiny fits (<20ms) and multi-smooth NegBin still trail mgcv_rust; the NegBin multi-smooth slowdown is a known profile-θ scaling issue under investigation.
scat climbed from v0.10.0's 0.07× to v0.11's ~0.77× (at the 6K-row profiling fixture) via analytic gradient + Level-2 analytic Hessian + observed-W PIRLS + warm-start (v0.11.0) and broadcast-expression conversion + batched-h_diag matmul (v0.11.1). The residual gap is per-pair Hessian-assembly work at small p.
For GLM families at large n, set method="fREML" (mgcv R's bam()
equivalent — Wood & Fasiolo 2017 Fellner-Schall multiplicative updates
with single-step IRLS per outer iteration). The defaults are sensible
at small/medium n; the perf guide covers when to switch.
Fellner-Schall reached the GLM envelope driver only — on the gaussian
closed-form path, the quantile path and the shape-parameter families
(scat / negbin / tweedie / ocat), method="fREML" warns and fits on REML.
Both optimise the same REML criterion and damped Newton is the stronger
route to it, so the substitution costs nothing; it is warned about because
until 0.13.0 it happened silently.
Parallel fits across threads
As of v0.11.7 the fit releases the GIL (PyO3 py.detach) for the entire
solve, so independent Gam.fit(...) / fit_quantile(...) calls run truly
concurrently on a ThreadPoolExecutor — no process pool, no pickling of
inputs. When fanning many fits across a thread pool, set
OPENBLAS_NUM_THREADS=1 so the BLAS backend doesn't oversubscribe cores
against your own threads: on a 6K-row scat fit that turns the pre-0.11.7
0.58× (GIL-bound, serialised) into ~1.95× on 4 worker threads.
Rust API
use gamrs::{TermSpec, MarginKind, DesignStrategy};
use ndarray::Array2;
let x: Array2<f64> = /* (n, n_input_dims) */;
let y = /* Array1<f64> */;
let fit = gamrs::fit(gamrs::family::gaussian_identity(), x.view(), y.view(), None, 10)?;
let fit = gamrs::fit_with_design(
gamrs::family::gaussian_identity(),
DesignStrategy::Additive { terms: vec![
TermSpec::Cr { col: 0, k: 10 },
TermSpec::Cr { col: 1, k: 15 },
]},
x.view(), y.view(), None,
)?;
let fit = gamrs::fit_with_design(
gamrs::family::gaussian_identity(),
DesignStrategy::Additive { terms: vec![
TermSpec::Tensor { col_a: 0, col_b: 1, k_a: 5, k_b: 5,
bs_a: MarginKind::Cr, bs_b: MarginKind::Cr },
]},
x.view(), y.view(), None,
)?;
let mu = fit.predict(x.view())?;
Python API
PyO3 bindings + numpy. sklearn-like surface: fit / predict /
predict_ci / predict_diff / vcov_ / coef_ / lambda_ /
edf_ / fit_stats_, plus serialize / deserialize and GamPredictor
for inference-only deployment.
Architecture
Trait layering (src/traits.rs):
Layer 1 Basis ← CrBasis, RandomEffectsBasis, TensorProductBasis<A, B>
Layer 1.5 BasisTransform ← SumToZero, StableReparam
Layer 2 Loss/Link/Variance ← 10 families (see table above)
Layer 3 InnerSolver ← GaussianClosedFormInner, PirlsInner, GamFit5Inner, ArmijoInner
Layer 4 ScoreDerivatives ← EnvelopeScore, ShapeAwareEnvelopeScore
Layer 5 OuterSolver ← NewtonWithHalving, FellnerSchall
Layer 6 FittedGam ← predict, predict_ci, predict_diff, vcov, serialize
Outer optimisers (Newton, Fellner-Schall) and per-family tolerances are
selected through Loss::outer_tuning() and Loss::allows_no_refresh(),
so adding a family is a Loss impl, not a fork of the optimiser.
Versioning
Beta (0.14.x). The API is stabilising; minor bumps may carry breaking
changes until the 1.0 surface is locked. All ten families plus Ocat and
Quantile/ELF now fit multi-smooth additive designs.
License
MIT.
Metadata
Release files for gamrs 0.15.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| gamrs-0.15.1.tar.gz | 4.3 MB | Without provenance | Details |
Built distributions (wheels)
Total release size: 145.9 MB
Release files / gamrs-0.15.1.tar.gz
| Download URL | gamrs-0.15.1.tar.gz |
|---|---|
| Size | 4.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6576cd8366cd6c1efcc4c42b93a35ca436a7c126bf4b31ec489d78869c9dc166
|
|
BLAKE2b-256 checksum How to use checksums |
3288ac3157aaa3ead084fa78a636b1c84fe1bcfe0cf9626f1436dd6e7947a46f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | Linux glibc 2.17+ x86-64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
e191a7dfadbb7664e580d99b504191b172b9d6d082ccab709a8a47fdfab28a25
|
|
BLAKE2b-256 checksum How to use checksums |
e7841a55abc527770c4bcc3726b3d1d50649c470b0f493433d5d541fa868fa9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ce31c2e1868091fe853d051dceb0e62209a5cdafbb9f69837b347f2b0c0d3999
|
|
BLAKE2b-256 checksum How to use checksums |
ff4f1f507d26044d9c253f33d4115077cae9e21ac40fb0aa7ff136cb5e2dca26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp314-cp314-win_amd64.whl
| Download URL | gamrs-0.15.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6d13e14b8f112fd7a1cd8dcafdf311c002ddfc99bc3e9eef7c4294e09bfa6bef
|
|
BLAKE2b-256 checksum How to use checksums |
211f8b82aac66b9b0ecbf2d0d8c7e8038595fa217419211480a1accb97e03921
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a34ffa37d988f93737b15a57f6f0b9f565c5a0cc031ecbd3c599a1f65e6e9b3c
|
|
BLAKE2b-256 checksum How to use checksums |
0c6a986d6f35e7658aa14b78997ea8b126673fada6d517bc45f3ba87f258f47a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | gamrs-0.15.1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0efdc05198e4d290786fb9fed7af234b8904a7bb8810cd77a49cf1ffe9f9540f
|
|
BLAKE2b-256 checksum How to use checksums |
5f986f7f7492f3065c31786f36842df59259c212df971d189df6d49ef30626c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp314-cp314-macosx_10_13_x86_64.whl
| Download URL | gamrs-0.15.1-cp314-cp314-macosx_10_13_x86_64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | CPython 3.14 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
ac647808f663cc1c8f54493ae3758a30016c347f3257f3c824d09571de3fc117
|
|
BLAKE2b-256 checksum How to use checksums |
6b2263ed79c7c30205d93fad74b7630fd4d422ff7cf0ad035f365a9bda92eaaf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp313-cp313-win_amd64.whl
| Download URL | gamrs-0.15.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b96047689428fb84061f10af8b01789142aacd8eb787312c6b10a2c48912c3b1
|
|
BLAKE2b-256 checksum How to use checksums |
2cf618d59d1a14c5fe6f71b80b86676bfd4bd7826ea74a7e82c8796d1fc4f2b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0992572f0ff0ff2d729b5f02ea62d8d701d9215fd7b153707c263d134f330e61
|
|
BLAKE2b-256 checksum How to use checksums |
60cdcd956b85c790e0d99e91c5ee19d710d1cc7428b33a5870bf1da4d8802d56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | gamrs-0.15.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7c8327033df418f824d26729b26a6b674cbbd78cb9116a776b6dd3faed175794
|
|
BLAKE2b-256 checksum How to use checksums |
214ee0c54680cf8ca74b2c6c97863c15f1f602b12d035698db82d14e1fe1e9a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | gamrs-0.15.1-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
83ff880cb043eced143b81975a153e01249c6e2d682cc7ef200268a6e057a7b1
|
|
BLAKE2b-256 checksum How to use checksums |
fc916b0ac87273e36356f91a540287af0f660be34459aa2c43493acf4a970368
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp312-cp312-win_amd64.whl
| Download URL | gamrs-0.15.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1610f643685d46e813ccfa52c196c567ffb184bbc4deddaf0c38790b5cbe7cca
|
|
BLAKE2b-256 checksum How to use checksums |
58526f83d0b1bf5cee2ea9898bff1843b8415b81b16bae549a88c3608cde067a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
1f0cdd89f6c9143dfc97fa5db72cb670b46a16687fcd78a9d767e0b4ce4b28dd
|
|
BLAKE2b-256 checksum How to use checksums |
3ee7b31f6084aee493a7497acf83472cc77e9001a6bcf34b6d55d07c5c181a1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | gamrs-0.15.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2e8041884c378bef61d555a7bd1d6939d2842ab13bb5e3ee8cf447c9fd3cd5da
|
|
BLAKE2b-256 checksum How to use checksums |
d2604cf26744f8d874a165a0121c9e4a3669154bdfb25f00d8a7eff8011e805b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | gamrs-0.15.1-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
8c4c9e20ee6b150faefa5c6979a4869a4efaca7c03c063b3f06d0d93c0e35282
|
|
BLAKE2b-256 checksum How to use checksums |
fce10f5d45150bb5bd95a2127743c9a07336039c605d1a04fbb21adeca59a673
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp311-cp311-win_amd64.whl
| Download URL | gamrs-0.15.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c6cb23769bc4fb6f9c636f58a3ff0b1de3c70eca4e17c2efa4e9a843095771e7
|
|
BLAKE2b-256 checksum How to use checksums |
fecd0b4eedcdbda79d5786a26fef367d7172277b939f0376eb7294d7ca335bf2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
5da3755c0033c48c3154c0322e4b099a1bca34cc78556b3662922b4aee070345
|
|
BLAKE2b-256 checksum How to use checksums |
a0d6c771cca84b8254d56d695cc432f08d2094437f8c69f863fefd19fc8d8744
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | gamrs-0.15.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b7262bf41a9a32c2ebf9a47be15b2aa15478ecb592f785494132c549df66edcb
|
|
BLAKE2b-256 checksum How to use checksums |
c3691cbb98e1b2a16907f07dd6ae0f03576fc988a2a79c849ac4bd6d061e2ca5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp311-cp311-macosx_10_13_x86_64.whl
| Download URL | gamrs-0.15.1-cp311-cp311-macosx_10_13_x86_64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | CPython 3.11 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
6b99c64f5a4e98a118d28f10b9e625a13d10946eb89f1dad41a51c8dd59c5bcd
|
|
BLAKE2b-256 checksum How to use checksums |
994bf66d296b5176d54e8f317bd9fa6d25b0d63bde6428cad7aa98008b2487c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp310-cp310-win_amd64.whl
| Download URL | gamrs-0.15.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e3bd47409bf328f1e504ce1c3470d331c7fb8dbd7cef1c42f24b3bf3c577d0c6
|
|
BLAKE2b-256 checksum How to use checksums |
3e05d48a8969282b4286aef867b7870c074e0c431503955ba659395b23c9bda2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
64d8e2bd8c060e0e574ac961ad39f5d93854027b1e9f175e5341300252d7604a
|
|
BLAKE2b-256 checksum How to use checksums |
7ec56fafbbe4640d777f6d70cec9813050f69191fbdef8977fd960af508e45b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp310-cp310-macosx_10_13_x86_64.whl
| Download URL | gamrs-0.15.1-cp310-cp310-macosx_10_13_x86_64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | CPython 3.10 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
f072131ca87c71581348a5fc7cd73a1f285a55f189c41e68dcf4f727d44a45ae
|
|
BLAKE2b-256 checksum How to use checksums |
d3e971e62d72b196293ce59a2a1774f906e2d08b5944bf73ab22d7727f797225
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | gamrs-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.8 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0f7c5ff638be1eb323efc88648de010e551823b91249ff2253b3eec6c2c478f5
|
|
BLAKE2b-256 checksum How to use checksums |
fc58fa4150785a34de60d490c9e4fbaa3f270ec08d713fefd7f1483992db06ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / gamrs-0.15.1-cp39-cp39-macosx_10_13_x86_64.whl
| Download URL | gamrs-0.15.1-cp39-cp39-macosx_10_13_x86_64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | CPython 3.9 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
74a1c1abdb0ae15a03ca940d103ce507c2cd22fb29c3835434f9acf7e288aa61
|
|
BLAKE2b-256 checksum How to use checksums |
eec06d166b4b7388c9a89c2398e84989f561bea18711eaff5594ff072cf5f503
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Security for gamrs 0.15.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.