Skip to main content

Formula-first generalized additive models with a high-performance Rust core

Project description

gamfit

PyPI Python Docs License

Formula-first generalized additive models for Python, backed by a Rust engine.

gamfit fits Gaussian, binomial, Poisson, and Gamma GLMs with smooth terms, random effects, bounded/constrained coefficients, location-scale extensions, survival likelihoods, and flexible/learnable links. Smoothing parameters are selected by REML or LAML. Posterior sampling uses NUTS where supported, and Gaussian Laplace for model classes without an exact NUTS path.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and periodic tensor products, with no seams or pole artefacts. The gallery's Möbius-looking example is a 4π-periodic double-cover parameterization of a Möbius embedding, not a twisted Möbius-strip predictor basis:

rotating recovery of a trefoil knot, latent-free loop, wobbly cylinder, lumpy sphere, bumpy torus, and Möbius double-cover from noisy 3-D point clouds

Docs: https://gamfit.readthedocs.io/

Install

uv add gamfit

Wheels for Linux (x86_64, aarch64), macOS (x86_64, Apple silicon), and Windows. No Rust toolchain required.

30-second tour

import gamfit

train = [
    {"y": 1.2, "x": 0.0},
    {"y": 1.9, "x": 1.0},
    {"y": 3.1, "x": 2.0},
    {"y": 4.5, "x": 3.0},
]

model = gamfit.fit(train, "y ~ s(x)")
print(model.predict([{"x": 1.5}, {"x": 2.5}], interval=0.95))
print(model.summary())
model.save("model.gam")

pandas, polars, pyarrow, numpy, dict-of-columns, and list-of-records inputs all work without conversion.

What's different

  • Three-part penalty structure. Each smooth gets separate penalties for magnitude, gradient, and curvature. Most GAM libraries use one or two.
  • Flexible link functions. Spline offsets from a base link (link(type=flexible(probit))), blended mixture links, and SAS / beta-logistic learnable shapes.
  • Surface smooths in arbitrary dimension. Thin-plate, Duchon (with triple-operator regularization), and Matérn covariance, with automatic knot placement.
  • Geometric / manifold smooths. Cyclic 1-D, cylinder / torus tensor, intrinsic sphere (Wahba + spherical harmonics), Möbius double-cover demo, boundary-conditioned B-splines. Predictor spaces that wrap or close are first-class — no seams, no pole artefacts.
  • Adaptive anisotropy. Per-axis spatial anisotropy shrinks or stretches each feature axis independently inside a single joint smooth.
  • Composable basis/kernel. Combine a spline kernel with a length-scale behaviour (e.g. Duchon kernel with Matérn-style global κ).
  • Marginal-slope models. Separate baseline risk from a calibrated score's effect, for both Bernoulli and survival outcomes.
  • Posterior sampling. model.sample(...) runs NUTS where supported, and Gaussian Laplace for model classes without an exact NUTS path, behind one API.

Highlights from the API

import gamfit
from gamfit.sklearn import GAMRegressor, GAMClassifier

# Validate before you fit
gamfit.validate_formula(train, "y ~ s(x) + group(site)")

# Posterior sampling and mean bands
posterior = model.sample(train, seed=42)
bands = posterior.predict(test, level=0.95)

# Survival
gamfit.fit(df,
    "Surv(entry, exit, event) ~ s(age) + bmi + timewiggle(internal_knots=6)",
    survival_likelihood="transformation",
    baseline_target="weibull",
)

# scikit-learn
est = GAMRegressor(formula="y ~ s(x)")
est.fit(X, y)

# Diagnose, plot, report
model.diagnose(train).metrics
model.plot(train, x="x", kind="prediction")
model.report("report.html")

Public API

Symbol Purpose
gamfit.fit(data, formula, **kwargs) Fit a model.
gamfit.load(path) / gamfit.loads(bytes) Reload a saved model.
gamfit.validate_formula(data, formula, ...) Type-check a formula without fitting.
gamfit.build_info() Native extension build metadata.
gamfit.explain_error(exc) Human-readable hint for a gamfit exception.
gamfit.Model Fitted-model handle: predict, summary, check, diagnose, plot, report, sample, save.
gamfit.SurvivalPrediction Per-row hazard / survival surface; on-demand evaluation.
gamfit.SamplingConfig, PosteriorSamples, PosteriorPredictive NUTS / posterior interface.
gamfit.sklearn.GAMRegressor / GAMClassifier scikit-learn estimators.

Full reference at https://gamfit.readthedocs.io/en/latest/api-reference/.

Optional extras

uv add "gamfit[pandas]"     # pandas + pyarrow input/output
uv add "gamfit[plot]"       # matplotlib-based plotting
uv add "gamfit[sklearn]"    # scikit-learn integration
uv add "gamfit[torch]"      # PyTorch bridge
uv add "gamfit[all]"        # everything

License

AGPL-3.0-or-later. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gamfit-0.1.91.tar.gz (3.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

gamfit-0.1.91-cp310-abi3-win_amd64.whl (13.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.91-cp310-abi3-musllinux_1_2_x86_64.whl (13.1 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

gamfit-0.1.91-cp310-abi3-musllinux_1_2_aarch64.whl (11.4 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.91-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

gamfit-0.1.91-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.91-cp310-abi3-macosx_11_0_arm64.whl (11.0 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.91-cp310-abi3-macosx_10_12_x86_64.whl (12.4 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file gamfit-0.1.91.tar.gz.

File metadata

  • Download URL: gamfit-0.1.91.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for gamfit-0.1.91.tar.gz
Algorithm Hash digest
SHA256 ee1ba533594ae548ca7c86b1046b2a0ad0287acb3cccae09e6cbe7ce3ada91be
MD5 e98bf5a837c46522535338ff5cf750f4
BLAKE2b-256 ea4875d7532d720272269ec76efd1485a355716da06a934249e579dc6de0fe21

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: gamfit-0.1.91-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.7 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 89abf90fa07041c0230658fb54f3191d121c765641fb6b3eb0bbb03b046934a6
MD5 85473f8a9890766527e895d31045aa3e
BLAKE2b-256 129fdffb1c8a1dfcd6204dc0e5c0e4b6a95a7c1dfa50bdbba0e6e577af3aca81

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 624cbc8d9ce8213c4548b53342e4115b051f4b730a81a5a685e33e8ebe1b7928
MD5 79833e90d3b947e0b542708c23dfc0cc
BLAKE2b-256 074ce8626864d1d40cf149f909e44d6543e50cef76b3330b380166edf89050d5

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6032a5cd66a003c367235d4a5877c239f8b71d43d38e34f248c0b9649fe6b403
MD5 8d810e0a323744fd4a166ccab11b659f
BLAKE2b-256 2b99ce04859b3e828b6aacd6ee437619419c1946c6e7c2eb6b309b578ac7400d

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4dd38f4104fcfd9b008003a39b112a43ee7eb8e51ba24adb7d6016135c168b98
MD5 2819926da7cee97cbad20a51834332d5
BLAKE2b-256 f64c93bc4e830934bd5de14cb765800f8368e189fdf851c8414c995f34f5f8d6

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fbdd5183318975f3e440dbed6dfcc588ba23567f26f7295e9150540ea5d4afe9
MD5 81487d5474582bdb656a98c6ecc29b7c
BLAKE2b-256 383f250f6da1869792b99f30593c19b3f0daffa607d68d9ce2734e88755eae64

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c03f97c56dd6b912b4dd501674762e5aba14f00c1fb24982f59b424548bd947
MD5 49f8b66e3ea0f26e04d4100afb59b071
BLAKE2b-256 b8d89f164e19c375e65a0d85d17180ece2bf285986257ceb46265a77aafa431e

See more details on using hashes here.

File details

Details for the file gamfit-0.1.91-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.91-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b12f9f1714db61de1cb5adc046d71b6bce313bec6334513e7ef0e55f906d36f2
MD5 acf18a459fdf3914bf8397846bda418c
BLAKE2b-256 2fd9355bfdcc515b029de26e57e8a05fbb15ce93388de959a3696a47a1c8d18b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page