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, with a Gaussian Laplace fallback elsewhere.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and one-sided strips, with no seams or pole artefacts:

rotating recovery of a trefoil knot, latent-free loop, wobbly cylinder, lumpy sphere, bumpy torus, and Möbius strip 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 strip, 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, with a Gaussian Laplace fallback elsewhere, 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 predictive 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",
)

# 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[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.83.tar.gz (3.0 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.83-cp310-abi3-win_amd64.whl (13.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.83-cp310-abi3-musllinux_1_2_x86_64.whl (12.6 MB view details)

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

gamfit-0.1.83-cp310-abi3-musllinux_1_2_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.83-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.5 MB view details)

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

gamfit-0.1.83-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.83-cp310-abi3-macosx_11_0_arm64.whl (10.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.83-cp310-abi3-macosx_10_12_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.83.tar.gz
  • Upload date:
  • Size: 3.0 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.83.tar.gz
Algorithm Hash digest
SHA256 dc459c1c10f0562a99c2931e9811d37557a18a8f27526ff797d2cf69b426149d
MD5 78e8ad56976e8dde119c912bd7fba46b
BLAKE2b-256 4d05b2a9cdf282cdaee44424241b87e515d39d25d22526536046aa8789144b22

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.83-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.2 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.83-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d2431dd21bef6b1d8bb0a15f025d5caf93f3fc38498f125b42c1006fef798465
MD5 6c0ff69874443b876d1b4a22ef8a2d52
BLAKE2b-256 8877a399cdfd739d02d7475aa755e6a4bdd6a9941f5b4a9e679ea18509a73cc0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.83-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1698b0cf204002cf5db2f0ace3655945b1bd2d77dfbd6147a8ab84b3cfd58a12
MD5 78f7173acbf12510a5936850f442b954
BLAKE2b-256 f8c36d5252390c2bb62a6ee9f32719ffa641c23be5bee7268559fed372696736

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.83-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e12b077adaf5e348593f4f25c661f52afc52a6b4c1b625a09013b375d6057070
MD5 3a0cdcdef30dc65f457c052084cfdfb4
BLAKE2b-256 fa87cc6108c4c1b3fbd4dec817ff61197ab3a41232aa8a6cff3dcb7cbd5e5a6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.83-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 839d131b9472c5d97c9de48742a857dc1cb7bd0213ef8948963fb43187ad5047
MD5 d6bb6e42114844ab5caabd71bcd0efb0
BLAKE2b-256 1cd9b3e96cc8b93a2cb2d8acfc2f3b205801e32bfa1b9231a5aefe95c7470849

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.83-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8125a3269a87c492b773992c5923136cf4223ed6679e7adc9e6b2398ed52d5a2
MD5 2c6484af22b1f83361da64b39961f45d
BLAKE2b-256 913c7266ad9a116c165077c99bebd04d4a7cc895adcb21241c9e092c8f457d9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.83-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3a8690263ed86219f4c4bd8cc29bc37ac11f140b9826d84965a9ae1792e0b271
MD5 1acf3030cf447b34946a29782bfb6fb1
BLAKE2b-256 82429dc58b866fc5713a4eec2c47d0b3377b76f707778f3af1763ed424f06f8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.83-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fbe7c2791d1cfc181c1d98721b3f08ba56191eaf31af144aff47097f62118042
MD5 c1060b8930541ea0dddf66276ce46f39
BLAKE2b-256 02a8d2351ae6bfbfb23c79d45b099ce4ec4be8634f8f874288fbd8618834e61e

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